@tscircuit/eval 0.0.731 → 0.0.733

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -31,6 +31,11 @@ var getJlcpcbPackageName = (footprint) => {
31
31
  };
32
32
 
33
33
  // node_modules/@tscircuit/parts-engine/lib/jlc-parts-engine.ts
34
+ import {
35
+ fetchEasyEDAComponent,
36
+ EasyEdaJsonSchema,
37
+ convertEasyEdaJsonToCircuitJson
38
+ } from "easyeda/browser";
34
39
  var cache = /* @__PURE__ */ new Map();
35
40
  var getJlcPartsCached = async (name, params) => {
36
41
  const paramString = new URLSearchParams({
@@ -191,8 +196,32 @@ var jlcPartsEngine = {
191
196
  return {
192
197
  jlcpcb: withBasicPartPreference(fuses).map((l) => `C${l.lcsc}`).slice(0, 3)
193
198
  };
199
+ } else if (sourceComponent.type === "source_component" && sourceComponent.ftype === "simple_connector" && sourceComponent.standard === "usb_c") {
200
+ const { usb_c_connectors } = await getJlcPartsCached(
201
+ "usb_c_connectors",
202
+ {}
203
+ );
204
+ return {
205
+ jlcpcb: withBasicPartPreference(usb_c_connectors).map((c) => `C${c.lcsc}`).slice(0, 3)
206
+ };
194
207
  }
195
208
  return {};
209
+ },
210
+ fetchPartCircuitJson: async ({
211
+ supplierPartNumber,
212
+ manufacturerPartNumber
213
+ }) => {
214
+ let resolvedPartNumber = supplierPartNumber;
215
+ if (!resolvedPartNumber && manufacturerPartNumber) {
216
+ const { components } = await getJlcPartsCached("components", {
217
+ search: manufacturerPartNumber
218
+ });
219
+ resolvedPartNumber = components?.[0] ? `C${components[0].lcsc}` : void 0;
220
+ }
221
+ if (!resolvedPartNumber) return void 0;
222
+ const rawEasyEdaJson = await fetchEasyEDAComponent(resolvedPartNumber);
223
+ const parsed = EasyEdaJsonSchema.parse(rawEasyEdaJson);
224
+ return convertEasyEdaJsonToCircuitJson(parsed);
196
225
  }
197
226
  };
198
227
 
@@ -314,4 +343,4 @@ var getPlatformConfig = (overrides = {}) => ({
314
343
  export {
315
344
  getPlatformConfig
316
345
  };
317
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzL0B0c2NpcmN1aXQvcGFydHMtZW5naW5lL2xpYi9mb290cHJpbnQtdHJhbnNsYXRvcnMvZ2V0LWZvb3RwcmludGVyLXN0cmluZy1mcm9tLWtpY2FkLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AdHNjaXJjdWl0L3BhcnRzLWVuZ2luZS9saWIvZm9vdHByaW50LXRyYW5zbGF0b3JzL2dldC1qbGMtcGFja2FnZS1mcm9tLWZvb3RwcmludGVyLXN0cmluZy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQHRzY2lyY3VpdC9wYXJ0cy1lbmdpbmUvbGliL2Zvb3RwcmludC10cmFuc2xhdG9ycy9pbmRleC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQHRzY2lyY3VpdC9wYXJ0cy1lbmdpbmUvbGliL2psYy1wYXJ0cy1lbmdpbmUudHMiLCAiLi4vLi4vbGliL2dldFBsYXRmb3JtQ29uZmlnLnRzIiwgIi4uLy4uL2xpYi91dGlscy9keW5hbWljYWxseS1sb2FkLWRlcGVuZGVuY3ktd2l0aC1jZG4tYmFja3VwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIFRyYW5zZm9ybXMgYSBLaUNhZCBmb290cHJpbnQgc3RyaW5nIGludG8gYSBnZW5lcmljIFwiZm9vdHByaW50ZXIgc3RyaW5nXCIuXG4gKiBGb3Igbm93LCB0aGlzIGlzIGEgc2ltcGxpZmllZCBjb252ZXJzaW9uIHRvIGEgc3RhbmRhcmQgcGFja2FnZSBuYW1lLlxuICogZS5nLiBcImtpY2FkOlJlc2lzdG9yX1NNRDpSXzA2MDNfMTYwOE1ldHJpY1wiIC0+IFwiMDYwM1wiXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGb290cHJpbnRlclN0cmluZ0Zyb21LaWNhZCA9IChcbiAga2ljYWRGb290cHJpbnQ6IHN0cmluZyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIC8vIGtpY2FkOlJlc2lzdG9yX1NNRDpSXzA2MDNfMTYwOE1ldHJpYyAtPiAwNjAzXG4gIGxldCBtYXRjaCA9IGtpY2FkRm9vdHByaW50Lm1hdGNoKC86W1JDXV8oXFxkezR9KV8vKVxuICBpZiAobWF0Y2gpIHJldHVybiBtYXRjaFsxXVxuXG4gIC8vIGtpY2FkOlBhY2thZ2VfU086U09JQy04XzMuOXg0LjltbV9QMS4yN21tIC0+IFNPSUMtOFxuICAvLyBraWNhZDpQYWNrYWdlX1RPX1NPVF9TTUQ6U09ULTIzIC0+IFNPVC0yM1xuICBtYXRjaCA9IGtpY2FkRm9vdHByaW50Lm1hdGNoKFxuICAgIC86KFNPSUMtXFxkK3xTT1QtXFxkK3xTT0QtXFxkK3xTU09QLVxcZCt8VFNTT1AtXFxkK3xRRlAtXFxkK3xRRk4tXFxkKykvLFxuICApXG4gIGlmIChtYXRjaCkgcmV0dXJuIG1hdGNoWzFdXG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuIiwgIi8qKlxuICogVHJhbnNmb3JtcyBhIGdlbmVyaWMgXCJmb290cHJpbnRlciBzdHJpbmdcIiBpbnRvIGEgSkxDLWNvbXBhdGlibGUgcGFja2FnZSBuYW1lLlxuICogZS5nLiBcImNhcDA2MDNcIiAtPiBcIjA2MDNcIlxuICovXG5leHBvcnQgY29uc3QgZ2V0SmxjUGFja2FnZUZyb21Gb290cHJpbnRlclN0cmluZyA9IChcbiAgZm9vdHByaW50ZXJTdHJpbmc6IHN0cmluZyxcbik6IHN0cmluZyA9PiB7XG4gIGlmIChmb290cHJpbnRlclN0cmluZy5pbmNsdWRlcyhcImNhcFwiKSkge1xuICAgIHJldHVybiBmb290cHJpbnRlclN0cmluZy5yZXBsYWNlKC9jYXAvZywgXCJcIilcbiAgfVxuICByZXR1cm4gZm9vdHByaW50ZXJTdHJpbmdcbn1cbiIsICJpbXBvcnQgeyBnZXRGb290cHJpbnRlclN0cmluZ0Zyb21LaWNhZCB9IGZyb20gXCIuL2dldC1mb290cHJpbnRlci1zdHJpbmctZnJvbS1raWNhZFwiXG5pbXBvcnQgeyBnZXRKbGNQYWNrYWdlRnJvbUZvb3RwcmludGVyU3RyaW5nIH0gZnJvbSBcIi4vZ2V0LWpsYy1wYWNrYWdlLWZyb20tZm9vdHByaW50ZXItc3RyaW5nXCJcblxuLyoqXG4gKiBHZXQgYSBKTEMtY29tcGF0aWJsZSBwYWNrYWdlIG5hbWUgZnJvbSBhIGZvb3RwcmludCBzdHJpbmcsIHdoaWNoIGNvdWxkIGJlXG4gKiBhIEtpQ2FkIGZvb3RwcmludCBvciBhIGdlbmVyaWMgXCJmb290cHJpbnRlciBzdHJpbmdcIi5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEpsY3BjYlBhY2thZ2VOYW1lID0gKFxuICBmb290cHJpbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICghZm9vdHByaW50KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgaWYgKGZvb3RwcmludC5zdGFydHNXaXRoKFwia2ljYWQ6XCIpKSB7XG4gICAgY29uc3QgZm9vdHByaW50ZXJTdHJpbmcgPSBnZXRGb290cHJpbnRlclN0cmluZ0Zyb21LaWNhZChmb290cHJpbnQpXG4gICAgaWYgKGZvb3RwcmludGVyU3RyaW5nKSB7XG4gICAgICByZXR1cm4gZ2V0SmxjUGFja2FnZUZyb21Gb290cHJpbnRlclN0cmluZyhmb290cHJpbnRlclN0cmluZylcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayBmb3IgdW4tbWF0Y2hlZCBLaUNhZCBzdHJpbmdzXG4gICAgcmV0dXJuIGZvb3RwcmludFxuICB9XG5cbiAgLy8gTm90IGEgS2lDYWQgc3RyaW5nLCBhc3N1bWUgaXQncyBhIGZvb3RwcmludGVyIHN0cmluZ1xuICByZXR1cm4gZ2V0SmxjUGFja2FnZUZyb21Gb290cHJpbnRlclN0cmluZyhmb290cHJpbnQpXG59XG4iLCAiaW1wb3J0IHR5cGUgeyBQYXJ0c0VuZ2luZSwgU3VwcGxpZXJQYXJ0TnVtYmVycyB9IGZyb20gXCJAdHNjaXJjdWl0L3Byb3BzXCJcbmltcG9ydCB7IGdldEpsY3BjYlBhY2thZ2VOYW1lIH0gZnJvbSBcIi4vZm9vdHByaW50LXRyYW5zbGF0b3JzL2luZGV4XCJcblxuZXhwb3J0IGNvbnN0IGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKVxuXG5jb25zdCBnZXRKbGNQYXJ0c0NhY2hlZCA9IGFzeW5jIChuYW1lOiBhbnksIHBhcmFtczogYW55KSA9PiB7XG4gIGNvbnN0IHBhcmFtU3RyaW5nID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgLi4ucGFyYW1zLFxuICAgIGpzb246IFwidHJ1ZVwiLFxuICB9KS50b1N0cmluZygpXG4gIGlmIChjYWNoZS5oYXMocGFyYW1TdHJpbmcpKSB7XG4gICAgcmV0dXJuIGNhY2hlLmdldChwYXJhbVN0cmluZylcbiAgfVxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgIGBodHRwczovL2psY3NlYXJjaC50c2NpcmN1aXQuY29tLyR7bmFtZX0vbGlzdD8ke3BhcmFtU3RyaW5nfWAsXG4gIClcbiAgY29uc3QgcmVzcG9uc2VKc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gIGNhY2hlLnNldChwYXJhbVN0cmluZywgcmVzcG9uc2VKc29uKVxuICByZXR1cm4gcmVzcG9uc2VKc29uXG59XG5cbmNvbnN0IHdpdGhCYXNpY1BhcnRQcmVmZXJlbmNlID0gKHBhcnRzOiBhbnlbXSB8IHVuZGVmaW5lZCkgPT4ge1xuICBpZiAoIXBhcnRzKSByZXR1cm4gW11cbiAgcmV0dXJuIFsuLi5wYXJ0c10uc29ydChcbiAgICAoYSwgYikgPT4gTnVtYmVyKGIuaXNfYmFzaWMgPz8gZmFsc2UpIC0gTnVtYmVyKGEuaXNfYmFzaWMgPz8gZmFsc2UpLFxuICApXG59XG5cbmV4cG9ydCBjb25zdCBqbGNQYXJ0c0VuZ2luZTogUGFydHNFbmdpbmUgPSB7XG4gIGZpbmRQYXJ0OiBhc3luYyAoe1xuICAgIHNvdXJjZUNvbXBvbmVudCxcbiAgICBmb290cHJpbnRlclN0cmluZyxcbiAgfSk6IFByb21pc2U8U3VwcGxpZXJQYXJ0TnVtYmVycz4gPT4ge1xuICAgIGNvbnN0IGpsY3BjYlBhY2thZ2UgPSBnZXRKbGNwY2JQYWNrYWdlTmFtZShmb290cHJpbnRlclN0cmluZylcblxuICAgIGlmIChcbiAgICAgIHNvdXJjZUNvbXBvbmVudC50eXBlID09PSBcInNvdXJjZV9jb21wb25lbnRcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LmZ0eXBlID09PSBcInNpbXBsZV9yZXNpc3RvclwiXG4gICAgKSB7XG4gICAgICBjb25zdCB7IHJlc2lzdG9ycyB9ID0gYXdhaXQgZ2V0SmxjUGFydHNDYWNoZWQoXCJyZXNpc3RvcnNcIiwge1xuICAgICAgICByZXNpc3RhbmNlOiBzb3VyY2VDb21wb25lbnQucmVzaXN0YW5jZSxcbiAgICAgICAgcGFja2FnZTogamxjcGNiUGFja2FnZSxcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpsY3BjYjogd2l0aEJhc2ljUGFydFByZWZlcmVuY2UocmVzaXN0b3JzKVxuICAgICAgICAgIC5tYXAoKHI6IGFueSkgPT4gYEMke3IubGNzY31gKVxuICAgICAgICAgIC5zbGljZSgwLCAzKSxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc291cmNlQ29tcG9uZW50LnR5cGUgPT09IFwic291cmNlX2NvbXBvbmVudFwiICYmXG4gICAgICBzb3VyY2VDb21wb25lbnQuZnR5cGUgPT09IFwic2ltcGxlX2NhcGFjaXRvclwiXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGNhcGFjaXRvcnMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFwiY2FwYWNpdG9yc1wiLCB7XG4gICAgICAgIGNhcGFjaXRhbmNlOiBzb3VyY2VDb21wb25lbnQuY2FwYWNpdGFuY2UsXG4gICAgICAgIHBhY2thZ2U6IGpsY3BjYlBhY2thZ2UsXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBqbGNwY2I6IHdpdGhCYXNpY1BhcnRQcmVmZXJlbmNlKGNhcGFjaXRvcnMpXG4gICAgICAgICAgLm1hcCgoYzogYW55KSA9PiBgQyR7Yy5sY3NjfWApXG4gICAgICAgICAgLnNsaWNlKDAsIDMpLFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBzb3VyY2VDb21wb25lbnQudHlwZSA9PT0gXCJzb3VyY2VfY29tcG9uZW50XCIgJiZcbiAgICAgIHNvdXJjZUNvbXBvbmVudC5mdHlwZSA9PT0gXCJzaW1wbGVfcGluX2hlYWRlclwiXG4gICAgKSB7XG4gICAgICBsZXQgcGl0Y2g6IG51bWJlciB8IHVuZGVmaW5lZFxuICAgICAgaWYgKGZvb3RwcmludGVyU3RyaW5nPy5pbmNsdWRlcyhcIl9wXCIpKSB7XG4gICAgICAgIHBpdGNoID0gTnVtYmVyKGZvb3RwcmludGVyU3RyaW5nLnNwbGl0KFwiX3BcIilbMV0pXG4gICAgICB9XG4gICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFxuICAgICAgICBcImhlYWRlcnNcIixcbiAgICAgICAgcGl0Y2hcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgcGl0Y2g6IHBpdGNoLFxuICAgICAgICAgICAgICBudW1fcGluczogc291cmNlQ29tcG9uZW50LnBpbl9jb3VudCxcbiAgICAgICAgICAgICAgZ2VuZGVyOiBzb3VyY2VDb21wb25lbnQuZ2VuZGVyLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBudW1fcGluczogc291cmNlQ29tcG9uZW50LnBpbl9jb3VudCxcbiAgICAgICAgICAgICAgZ2VuZGVyOiBzb3VyY2VDb21wb25lbnQuZ2VuZGVyLFxuICAgICAgICAgICAgfSxcbiAgICAgIClcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpsY3BjYjogd2l0aEJhc2ljUGFydFByZWZlcmVuY2UoaGVhZGVycylcbiAgICAgICAgICAubWFwKChoOiBhbnkpID0+IGBDJHtoLmxjc2N9YClcbiAgICAgICAgICAuc2xpY2UoMCwgMyksXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHNvdXJjZUNvbXBvbmVudC50eXBlID09PSBcInNvdXJjZV9jb21wb25lbnRcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LmZ0eXBlID09PSBcInNpbXBsZV9wb3RlbnRpb21ldGVyXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgcG90ZW50aW9tZXRlcnMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFwicG90ZW50aW9tZXRlcnNcIiwge1xuICAgICAgICByZXNpc3RhbmNlOiBzb3VyY2VDb21wb25lbnQubWF4X3Jlc2lzdGFuY2UsXG4gICAgICAgIHBhY2thZ2U6IGpsY3BjYlBhY2thZ2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZShwb3RlbnRpb21ldGVycylcbiAgICAgICAgICAubWFwKChwOiBhbnkpID0+IGBDJHtwLmxjc2N9YClcbiAgICAgICAgICAuc2xpY2UoMCwgMyksXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHNvdXJjZUNvbXBvbmVudC50eXBlID09PSBcInNvdXJjZV9jb21wb25lbnRcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LmZ0eXBlID09PSBcInNpbXBsZV9kaW9kZVwiXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGRpb2RlcyB9ID0gYXdhaXQgZ2V0SmxjUGFydHNDYWNoZWQoXCJkaW9kZXNcIiwge1xuICAgICAgICBwYWNrYWdlOiBqbGNwY2JQYWNrYWdlLFxuICAgICAgfSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpsY3BjYjogd2l0aEJhc2ljUGFydFByZWZlcmVuY2UoZGlvZGVzKVxuICAgICAgICAgIC5tYXAoKGQ6IGFueSkgPT4gYEMke2QubGNzY31gKVxuICAgICAgICAgIC5zbGljZSgwLCAzKSxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc291cmNlQ29tcG9uZW50LnR5cGUgPT09IFwic291cmNlX2NvbXBvbmVudFwiICYmXG4gICAgICBzb3VyY2VDb21wb25lbnQuZnR5cGUgPT09IFwic2ltcGxlX2NoaXBcIlxuICAgICkge1xuICAgICAgaWYgKCFqbGNwY2JQYWNrYWdlIHx8ICFmb290cHJpbnRlclN0cmluZykge1xuICAgICAgICByZXR1cm4ge31cbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgY2hpcHMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFwiY2hpcHNcIiwge1xuICAgICAgICBwYWNrYWdlOiBqbGNwY2JQYWNrYWdlLFxuICAgICAgfSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpsY3BjYjogd2l0aEJhc2ljUGFydFByZWZlcmVuY2UoY2hpcHMpXG4gICAgICAgICAgLm1hcCgoYzogYW55KSA9PiBgQyR7Yy5sY3NjfWApXG4gICAgICAgICAgLnNsaWNlKDAsIDMpLFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBzb3VyY2VDb21wb25lbnQudHlwZSA9PT0gXCJzb3VyY2VfY29tcG9uZW50XCIgJiZcbiAgICAgIHNvdXJjZUNvbXBvbmVudC5mdHlwZSA9PT0gXCJzaW1wbGVfdHJhbnNpc3RvclwiXG4gICAgKSB7XG4gICAgICBjb25zdCB7IHRyYW5zaXN0b3JzIH0gPSBhd2FpdCBnZXRKbGNQYXJ0c0NhY2hlZChcInRyYW5zaXN0b3JzXCIsIHtcbiAgICAgICAgcGFja2FnZTogamxjcGNiUGFja2FnZSxcbiAgICAgICAgdHJhbnNpc3Rvcl90eXBlOiBzb3VyY2VDb21wb25lbnQudHJhbnNpc3Rvcl90eXBlLFxuICAgICAgfSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpsY3BjYjogd2l0aEJhc2ljUGFydFByZWZlcmVuY2UodHJhbnNpc3RvcnMpXG4gICAgICAgICAgLm1hcCgodDogYW55KSA9PiBgQyR7dC5sY3NjfWApXG4gICAgICAgICAgLnNsaWNlKDAsIDMpLFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBzb3VyY2VDb21wb25lbnQudHlwZSA9PT0gXCJzb3VyY2VfY29tcG9uZW50XCIgJiZcbiAgICAgIHNvdXJjZUNvbXBvbmVudC5mdHlwZSA9PT0gXCJzaW1wbGVfcG93ZXJfc291cmNlXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgcG93ZXJfc291cmNlcyB9ID0gYXdhaXQgZ2V0SmxjUGFydHNDYWNoZWQoXCJwb3dlcl9zb3VyY2VzXCIsIHtcbiAgICAgICAgdm9sdGFnZTogc291cmNlQ29tcG9uZW50LnZvbHRhZ2UsXG4gICAgICAgIHBhY2thZ2U6IGpsY3BjYlBhY2thZ2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZShwb3dlcl9zb3VyY2VzKVxuICAgICAgICAgIC5tYXAoKHA6IGFueSkgPT4gYEMke3AubGNzY31gKVxuICAgICAgICAgIC5zbGljZSgwLCAzKSxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc291cmNlQ29tcG9uZW50LnR5cGUgPT09IFwic291cmNlX2NvbXBvbmVudFwiICYmXG4gICAgICBzb3VyY2VDb21wb25lbnQuZnR5cGUgPT09IFwic2ltcGxlX2luZHVjdG9yXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgaW5kdWN0b3JzIH0gPSBhd2FpdCBnZXRKbGNQYXJ0c0NhY2hlZChcImluZHVjdG9yc1wiLCB7XG4gICAgICAgIGluZHVjdGFuY2U6IHNvdXJjZUNvbXBvbmVudC5pbmR1Y3RhbmNlLFxuICAgICAgICBwYWNrYWdlOiBqbGNwY2JQYWNrYWdlLFxuICAgICAgfSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpsY3BjYjogd2l0aEJhc2ljUGFydFByZWZlcmVuY2UoaW5kdWN0b3JzKVxuICAgICAgICAgIC5tYXAoKGk6IGFueSkgPT4gYEMke2kubGNzY31gKVxuICAgICAgICAgIC5zbGljZSgwLCAzKSxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc291cmNlQ29tcG9uZW50LnR5cGUgPT09IFwic291cmNlX2NvbXBvbmVudFwiICYmXG4gICAgICBzb3VyY2VDb21wb25lbnQuZnR5cGUgPT09IFwic2ltcGxlX2NyeXN0YWxcIlxuICAgICkge1xuICAgICAgY29uc3QgeyBjcnlzdGFscyB9ID0gYXdhaXQgZ2V0SmxjUGFydHNDYWNoZWQoXCJjcnlzdGFsc1wiLCB7XG4gICAgICAgIGZyZXF1ZW5jeTogc291cmNlQ29tcG9uZW50LmZyZXF1ZW5jeSxcbiAgICAgICAgbG9hZF9jYXBhY2l0YW5jZTogc291cmNlQ29tcG9uZW50LmxvYWRfY2FwYWNpdGFuY2UsXG4gICAgICAgIHBhY2thZ2U6IGpsY3BjYlBhY2thZ2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZShjcnlzdGFscylcbiAgICAgICAgICAubWFwKChjOiBhbnkpID0+IGBDJHtjLmxjc2N9YClcbiAgICAgICAgICAuc2xpY2UoMCwgMyksXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHNvdXJjZUNvbXBvbmVudC50eXBlID09PSBcInNvdXJjZV9jb21wb25lbnRcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LmZ0eXBlID09PSBcInNpbXBsZV9tb3NmZXRcIlxuICAgICkge1xuICAgICAgY29uc3QgeyBtb3NmZXRzIH0gPSBhd2FpdCBnZXRKbGNQYXJ0c0NhY2hlZChcIm1vc2ZldHNcIiwge1xuICAgICAgICBwYWNrYWdlOiBqbGNwY2JQYWNrYWdlLFxuICAgICAgICBtb3NmZXRfbW9kZTogc291cmNlQ29tcG9uZW50Lm1vc2ZldF9tb2RlLFxuICAgICAgICBjaGFubmVsX3R5cGU6IHNvdXJjZUNvbXBvbmVudC5jaGFubmVsX3R5cGUsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZShtb3NmZXRzKVxuICAgICAgICAgIC5tYXAoKG06IGFueSkgPT4gYEMke20ubGNzY31gKVxuICAgICAgICAgIC5zbGljZSgwLCAzKSxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc291cmNlQ29tcG9uZW50LnR5cGUgPT09IFwic291cmNlX2NvbXBvbmVudFwiICYmXG4gICAgICBzb3VyY2VDb21wb25lbnQuZnR5cGUgPT09IFwic2ltcGxlX3Jlc29uYXRvclwiXG4gICAgKSB7XG4gICAgICBjb25zdCB7IHJlc29uYXRvcnMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFwicmVzb25hdG9yc1wiLCB7XG4gICAgICAgIGZyZXF1ZW5jeTogc291cmNlQ29tcG9uZW50LmZyZXF1ZW5jeSxcbiAgICAgICAgcGFja2FnZTogamxjcGNiUGFja2FnZSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBqbGNwY2I6IHdpdGhCYXNpY1BhcnRQcmVmZXJlbmNlKHJlc29uYXRvcnMpXG4gICAgICAgICAgLm1hcCgocjogYW55KSA9PiBgQyR7ci5sY3NjfWApXG4gICAgICAgICAgLnNsaWNlKDAsIDMpLFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBzb3VyY2VDb21wb25lbnQudHlwZSA9PT0gXCJzb3VyY2VfY29tcG9uZW50XCIgJiZcbiAgICAgIHNvdXJjZUNvbXBvbmVudC5mdHlwZSA9PT0gXCJzaW1wbGVfc3dpdGNoXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgc3dpdGNoZXMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFwic3dpdGNoZXNcIiwge1xuICAgICAgICBzd2l0Y2hfdHlwZTogc291cmNlQ29tcG9uZW50LnR5cGUsXG4gICAgICAgIHBhY2thZ2U6IGpsY3BjYlBhY2thZ2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZShzd2l0Y2hlcylcbiAgICAgICAgICAubWFwKChzOiBhbnkpID0+IGBDJHtzLmxjc2N9YClcbiAgICAgICAgICAuc2xpY2UoMCwgMyksXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHNvdXJjZUNvbXBvbmVudC50eXBlID09PSBcInNvdXJjZV9jb21wb25lbnRcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LmZ0eXBlID09PSBcInNpbXBsZV9sZWRcIlxuICAgICkge1xuICAgICAgY29uc3QgeyBsZWRzIH0gPSBhd2FpdCBnZXRKbGNQYXJ0c0NhY2hlZChcImxlZHNcIiwge1xuICAgICAgICBwYWNrYWdlOiBqbGNwY2JQYWNrYWdlLFxuICAgICAgfSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpsY3BjYjogd2l0aEJhc2ljUGFydFByZWZlcmVuY2UobGVkcylcbiAgICAgICAgICAubWFwKChsOiBhbnkpID0+IGBDJHtsLmxjc2N9YClcbiAgICAgICAgICAuc2xpY2UoMCwgMyksXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHNvdXJjZUNvbXBvbmVudC50eXBlID09PSBcInNvdXJjZV9jb21wb25lbnRcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LmZ0eXBlID09PSBcInNpbXBsZV9mdXNlXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgZnVzZXMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFwiZnVzZXNcIiwge1xuICAgICAgICBwYWNrYWdlOiBqbGNwY2JQYWNrYWdlLFxuICAgICAgfSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpsY3BjYjogd2l0aEJhc2ljUGFydFByZWZlcmVuY2UoZnVzZXMpXG4gICAgICAgICAgLm1hcCgobDogYW55KSA9PiBgQyR7bC5sY3NjfWApXG4gICAgICAgICAgLnNsaWNlKDAsIDMpLFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge31cbiAgfSxcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFBsYXRmb3JtQ29uZmlnLCBTcGljZUVuZ2luZSB9IGZyb20gXCJAdHNjaXJjdWl0L3Byb3BzXCJcbmltcG9ydCB7IGpsY1BhcnRzRW5naW5lIH0gZnJvbSBcIkB0c2NpcmN1aXQvcGFydHMtZW5naW5lXCJcbmltcG9ydCB7IHBhcnNlS2ljYWRNb2RUb0NpcmN1aXRKc29uIH0gZnJvbSBcImtpY2FkLWNvbXBvbmVudC1jb252ZXJ0ZXJcIlxuaW1wb3J0IHsgZHluYW1pY2FsbHlMb2FkRGVwZW5kZW5jeVdpdGhDZG5CYWNrdXAgfSBmcm9tIFwiLi91dGlscy9keW5hbWljYWxseS1sb2FkLWRlcGVuZGVuY3ktd2l0aC1jZG4tYmFja3VwXCJcblxuY29uc3QgS0lDQURfRk9PVFBSSU5UX0NBQ0hFX1VSTCA9IFwiaHR0cHM6Ly9raWNhZC1tb2QtY2FjaGUudHNjaXJjdWl0LmNvbVwiXG5cbmxldCBuZ3NwaWNlRW5naW5lQ2FjaGU6IFNwaWNlRW5naW5lIHwgbnVsbCA9IG51bGxcblxuZXhwb3J0IGNvbnN0IGdldFBsYXRmb3JtQ29uZmlnID0gKFxuICBvdmVycmlkZXM6IFBhcnRpYWw8UGxhdGZvcm1Db25maWc+ID0ge30sXG4pOiBQbGF0Zm9ybUNvbmZpZyA9PiAoe1xuICBsb2NhbENhY2hlRW5naW5lOiBvdmVycmlkZXMubG9jYWxDYWNoZUVuZ2luZSxcbiAgcGFydHNFbmdpbmU6IGpsY1BhcnRzRW5naW5lLFxuICBzcGljZUVuZ2luZU1hcDoge1xuICAgIG5nc3BpY2U6IHtcbiAgICAgIHNpbXVsYXRlOiBhc3luYyAoc3BpY2U6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoIW5nc3BpY2VFbmdpbmVDYWNoZSkge1xuICAgICAgICAgIGNvbnN0IGNyZWF0ZU5nc3BpY2VTcGljZUVuZ2luZSA9XG4gICAgICAgICAgICBhd2FpdCBkeW5hbWljYWxseUxvYWREZXBlbmRlbmN5V2l0aENkbkJhY2t1cChcbiAgICAgICAgICAgICAgXCJAdHNjaXJjdWl0L25nc3BpY2Utc3BpY2UtZW5naW5lXCIsXG4gICAgICAgICAgICApLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJDb3VsZCBub3QgbG9hZCBuZ3NwaWNlIGVuZ2luZSBmcm9tIGxvY2FsIG5vZGVfbW9kdWxlcyBvciBDRE4gZmFsbGJhY2suXCIsXG4gICAgICAgICAgICAgICAgeyBjYXVzZTogZXJyb3IgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgIGlmIChjcmVhdGVOZ3NwaWNlU3BpY2VFbmdpbmUpIHtcbiAgICAgICAgICAgIG5nc3BpY2VFbmdpbmVDYWNoZSA9IGF3YWl0IGNyZWF0ZU5nc3BpY2VTcGljZUVuZ2luZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFuZ3NwaWNlRW5naW5lQ2FjaGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIkNvdWxkIG5vdCBsb2FkIG5nc3BpY2UgZW5naW5lIGZyb20gbG9jYWwgbm9kZV9tb2R1bGVzIG9yIENETiBmYWxsYmFjay5cIixcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmdzcGljZUVuZ2luZUNhY2hlLnNpbXVsYXRlKHNwaWNlKVxuICAgICAgfSxcbiAgICB9LFxuICB9LFxuICBmb290cHJpbnRMaWJyYXJ5TWFwOiB7XG4gICAga2ljYWQ6IGFzeW5jIChmb290cHJpbnROYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGJhc2VVcmwgPSBgJHtLSUNBRF9GT09UUFJJTlRfQ0FDSEVfVVJMfS8ke2Zvb3RwcmludE5hbWV9YFxuICAgICAgY29uc3QgY2lyY3VpdEpzb25VcmwgPSBgJHtiYXNlVXJsfS5jaXJjdWl0Lmpzb25gXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChjaXJjdWl0SnNvblVybClcbiAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgIGNvbnN0IGJvZHlQcmV2aWV3ID0gKGF3YWl0IHJlcy50ZXh0KCkpLnNsaWNlKDAsIDIwMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBGYWlsZWQgdG8gbG9hZCBLaUNhZCBmb290cHJpbnQgXFxcIiR7Zm9vdHByaW50TmFtZX1cXFwiIGZyb20gJHtjaXJjdWl0SnNvblVybH0gKEhUVFAgJHtyZXMuc3RhdHVzfSkuICR7Ym9keVByZXZpZXd9YCxcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBsZXQgcmF3OiBhbnlbXSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICB0cnkge1xuICAgICAgICByYXcgPSBhd2FpdCByZXMuanNvbigpXG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBGYWlsZWQgdG8gcGFyc2UgS2lDYWQgZm9vdHByaW50IEpTT04gZm9yIFxcXCIke2Zvb3RwcmludE5hbWV9XFxcIiBmcm9tICR7Y2lyY3VpdEpzb25Vcmx9YCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgLy8gRmlsdGVyIHBjYl9zaWxrc2NyZWVuX3RleHQgdG8gb25seSBrZWVwIGVudHJpZXMgd2l0aCB0ZXh0ID09PSBcIlJFRioqXCJcbiAgICAgIC8vIEFwcGx5IGZpbHRlcmluZyBvbmx5IHRvIGVsZW1lbnRzIGNvbWluZyBmcm9tIHRoZSBraWNhZF9tb2Rfc2VydmVyIHJlc3BvbnNlXG4gICAgICBjb25zdCBmaWx0ZXJlZDogYW55W10gPSBBcnJheS5pc0FycmF5KHJhdylcbiAgICAgICAgPyByYXcuZmlsdGVyKChlbCkgPT5cbiAgICAgICAgICAgIGVsPy50eXBlID09PSBcInBjYl9zaWxrc2NyZWVuX3RleHRcIiA/IGVsPy50ZXh0ID09PSBcIlJFRioqXCIgOiB0cnVlLFxuICAgICAgICAgIClcbiAgICAgICAgOiBbcmF3XVxuICAgICAgY29uc3Qgd3JsVXJsID0gYCR7YmFzZVVybH0ud3JsYFxuICAgICAgY29uc3Qgc3RlcFVybCA9IGAke2Jhc2VVcmx9LnN0ZXBgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb290cHJpbnRDaXJjdWl0SnNvbjogZmlsdGVyZWQsXG4gICAgICAgIGNhZE1vZGVsOiB7IHdybFVybCwgc3RlcFVybCwgbW9kZWxVbml0VG9NbVNjYWxlOiAyLjU0IH0sXG4gICAgICB9XG4gICAgfSxcbiAgfSxcbiAgZm9vdHByaW50RmlsZVBhcnNlck1hcDoge1xuICAgIGtpY2FkX21vZDoge1xuICAgICAgbG9hZEZyb21Vcmw6IGFzeW5jICh1cmw6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBraWNhZENvbnRlbnQgPSBhd2FpdCBmZXRjaCh1cmwpLnRoZW4oKHJlcykgPT4gcmVzLnRleHQoKSlcbiAgICAgICAgY29uc3Qga2ljYWRKc29uID0gYXdhaXQgcGFyc2VLaWNhZE1vZFRvQ2lyY3VpdEpzb24oa2ljYWRDb250ZW50KVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZvb3RwcmludENpcmN1aXRKc29uOiBBcnJheS5pc0FycmF5KGtpY2FkSnNvbilcbiAgICAgICAgICAgID8ga2ljYWRKc29uXG4gICAgICAgICAgICA6IFtraWNhZEpzb25dLFxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG59KVxuIiwgIi8qKlxuICogVHJhbnNmb3JtcyByZWxhdGl2ZSAvbnBtLyBpbXBvcnRzIGZyb20ganNkZWxpdnIgQ0ROIGNvZGUgdG8gYWJzb2x1dGUgVVJMcy5cbiAqL1xuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybUpzRGVsaXZySW1wb3J0cyA9IChjb2RlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAvLyBNYXRjaCBib3RoIHN0YXRpYyBpbXBvcnRzOiBmcm9tIFwiL25wbS8uLi5cIiBhbmQgZHluYW1pYyBpbXBvcnRzOiBpbXBvcnQoXCIvbnBtLy4uLlwiKVxuICAvLyBQYXR0ZXJuIGhhbmRsZXMgYm90aCBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZXNcbiAgcmV0dXJuIGNvZGVcbiAgICAucmVwbGFjZSgvZnJvbVxccypbXCInXVxcL25wbVxcLy9nLCAnZnJvbSBcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vJylcbiAgICAucmVwbGFjZShcbiAgICAgIC9pbXBvcnRcXHMqXFwoXFxzKltcIiddXFwvbnBtXFwvL2csXG4gICAgICAnaW1wb3J0KFwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS8nLFxuICAgIClcbn1cblxuZXhwb3J0IGNvbnN0IGR5bmFtaWNhbGx5TG9hZERlcGVuZGVuY3lXaXRoQ2RuQmFja3VwID0gYXN5bmMgKFxuICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgdHJ5IHtcbiAgICAvLyBGaXJzdCwgdHJ5IHRvIGltcG9ydCB1c2luZyBOb2RlLmpzIHJlc29sdXRpb25cbiAgICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQocGFja2FnZU5hbWUpXG4gICAgcmV0dXJuIG1vZHVsZS5kZWZhdWx0XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmxvZyhgRmFpbGVkIHRvIGxvYWQgJHtwYWNrYWdlTmFtZX0gbG9jYWxseSwgdHJ5aW5nIENETiBmYWxsYmFjay4uLmApXG4gICAgLy8gRmFsbGJhY2sgdG8gSnNEZWxpdnIgQ0ROIGZvciBicm93c2VyIGVudmlyb25tZW50c1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgYGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vJHtwYWNrYWdlTmFtZX0vK2VzbWAsXG4gICAgICApXG4gICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEZhaWxlZCB0byBmZXRjaCAke3BhY2thZ2VOYW1lfSBmcm9tIENETjogJHtyZXMuc3RhdHVzVGV4dH1gLFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBsZXQgY29kZSA9IGF3YWl0IHJlcy50ZXh0KClcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlbGF0aXZlIC9ucG0vIGltcG9ydHMgdG8gYWJzb2x1dGUganNkZWxpdnIgVVJMc1xuICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBibG9iIFVSTHMgcmVzb2x2ZSByZWxhdGl2ZSBpbXBvcnRzIGFnYWluc3QgdGhlIHBhZ2Ugb3JpZ2luXG4gICAgICBjb2RlID0gdHJhbnNmb3JtSnNEZWxpdnJJbXBvcnRzKGNvZGUpXG5cbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY29kZV0sIHsgdHlwZTogXCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0XCIgfSlcbiAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYilcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZGVmYXVsdDogbG9hZGVkTW9kdWxlIH0gPSBhd2FpdCBpbXBvcnQodXJsKVxuICAgICAgICByZXR1cm4gbG9hZGVkTW9kdWxlXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChjZG5FcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgQ0ROIGZhbGxiYWNrIGZvciAke3BhY2thZ2VOYW1lfSBhbHNvIGZhaWxlZDpgLCBjZG5FcnJvcilcbiAgICAgIHRocm93IGNkbkVycm9yXG4gICAgfVxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBS08sSUFBTSxnQ0FBZ0MsQ0FDM0MsbUJBQ3VCO0FBRXZCLE1BQUksUUFBUSxlQUFlLE1BQU0sZ0JBQWdCO0FBQ2pELE1BQUksTUFBTyxRQUFPLE1BQU0sQ0FBQztBQUl6QixVQUFRLGVBQWU7QUFBQSxJQUNyQjtBQUFBLEVBQ0Y7QUFDQSxNQUFJLE1BQU8sUUFBTyxNQUFNLENBQUM7QUFFekIsU0FBTztBQUNUOzs7QUNoQk8sSUFBTSxxQ0FBcUMsQ0FDaEQsc0JBQ1c7QUFDWCxNQUFJLGtCQUFrQixTQUFTLEtBQUssR0FBRztBQUNyQyxXQUFPLGtCQUFrQixRQUFRLFFBQVEsRUFBRTtBQUFBLEVBQzdDO0FBQ0EsU0FBTztBQUNUOzs7QUNKTyxJQUFNLHVCQUF1QixDQUNsQyxjQUN1QjtBQUN2QixNQUFJLENBQUMsVUFBVyxRQUFPO0FBRXZCLE1BQUksVUFBVSxXQUFXLFFBQVEsR0FBRztBQUNsQyxVQUFNLG9CQUFvQiw4QkFBOEIsU0FBUztBQUNqRSxRQUFJLG1CQUFt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
346
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzL0B0c2NpcmN1aXQvcGFydHMtZW5naW5lL2xpYi9mb290cHJpbnQtdHJhbnNsYXRvcnMvZ2V0LWZvb3RwcmludGVyLXN0cmluZy1mcm9tLWtpY2FkLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9AdHNjaXJjdWl0L3BhcnRzLWVuZ2luZS9saWIvZm9vdHByaW50LXRyYW5zbGF0b3JzL2dldC1qbGMtcGFja2FnZS1mcm9tLWZvb3RwcmludGVyLXN0cmluZy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQHRzY2lyY3VpdC9wYXJ0cy1lbmdpbmUvbGliL2Zvb3RwcmludC10cmFuc2xhdG9ycy9pbmRleC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvQHRzY2lyY3VpdC9wYXJ0cy1lbmdpbmUvbGliL2psYy1wYXJ0cy1lbmdpbmUudHMiLCAiLi4vLi4vbGliL2dldFBsYXRmb3JtQ29uZmlnLnRzIiwgIi4uLy4uL2xpYi91dGlscy9keW5hbWljYWxseS1sb2FkLWRlcGVuZGVuY3ktd2l0aC1jZG4tYmFja3VwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIFRyYW5zZm9ybXMgYSBLaUNhZCBmb290cHJpbnQgc3RyaW5nIGludG8gYSBnZW5lcmljIFwiZm9vdHByaW50ZXIgc3RyaW5nXCIuXG4gKiBGb3Igbm93LCB0aGlzIGlzIGEgc2ltcGxpZmllZCBjb252ZXJzaW9uIHRvIGEgc3RhbmRhcmQgcGFja2FnZSBuYW1lLlxuICogZS5nLiBcImtpY2FkOlJlc2lzdG9yX1NNRDpSXzA2MDNfMTYwOE1ldHJpY1wiIC0+IFwiMDYwM1wiXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGb290cHJpbnRlclN0cmluZ0Zyb21LaWNhZCA9IChcbiAga2ljYWRGb290cHJpbnQ6IHN0cmluZyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIC8vIGtpY2FkOlJlc2lzdG9yX1NNRDpSXzA2MDNfMTYwOE1ldHJpYyAtPiAwNjAzXG4gIGxldCBtYXRjaCA9IGtpY2FkRm9vdHByaW50Lm1hdGNoKC86W1JDXV8oXFxkezR9KV8vKVxuICBpZiAobWF0Y2gpIHJldHVybiBtYXRjaFsxXVxuXG4gIC8vIGtpY2FkOlBhY2thZ2VfU086U09JQy04XzMuOXg0LjltbV9QMS4yN21tIC0+IFNPSUMtOFxuICAvLyBraWNhZDpQYWNrYWdlX1RPX1NPVF9TTUQ6U09ULTIzIC0+IFNPVC0yM1xuICBtYXRjaCA9IGtpY2FkRm9vdHByaW50Lm1hdGNoKFxuICAgIC86KFNPSUMtXFxkK3xTT1QtXFxkK3xTT0QtXFxkK3xTU09QLVxcZCt8VFNTT1AtXFxkK3xRRlAtXFxkK3xRRk4tXFxkKykvLFxuICApXG4gIGlmIChtYXRjaCkgcmV0dXJuIG1hdGNoWzFdXG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuIiwgIi8qKlxuICogVHJhbnNmb3JtcyBhIGdlbmVyaWMgXCJmb290cHJpbnRlciBzdHJpbmdcIiBpbnRvIGEgSkxDLWNvbXBhdGlibGUgcGFja2FnZSBuYW1lLlxuICogZS5nLiBcImNhcDA2MDNcIiAtPiBcIjA2MDNcIlxuICovXG5leHBvcnQgY29uc3QgZ2V0SmxjUGFja2FnZUZyb21Gb290cHJpbnRlclN0cmluZyA9IChcbiAgZm9vdHByaW50ZXJTdHJpbmc6IHN0cmluZyxcbik6IHN0cmluZyA9PiB7XG4gIGlmIChmb290cHJpbnRlclN0cmluZy5pbmNsdWRlcyhcImNhcFwiKSkge1xuICAgIHJldHVybiBmb290cHJpbnRlclN0cmluZy5yZXBsYWNlKC9jYXAvZywgXCJcIilcbiAgfVxuICByZXR1cm4gZm9vdHByaW50ZXJTdHJpbmdcbn1cbiIsICJpbXBvcnQgeyBnZXRGb290cHJpbnRlclN0cmluZ0Zyb21LaWNhZCB9IGZyb20gXCIuL2dldC1mb290cHJpbnRlci1zdHJpbmctZnJvbS1raWNhZFwiXG5pbXBvcnQgeyBnZXRKbGNQYWNrYWdlRnJvbUZvb3RwcmludGVyU3RyaW5nIH0gZnJvbSBcIi4vZ2V0LWpsYy1wYWNrYWdlLWZyb20tZm9vdHByaW50ZXItc3RyaW5nXCJcblxuLyoqXG4gKiBHZXQgYSBKTEMtY29tcGF0aWJsZSBwYWNrYWdlIG5hbWUgZnJvbSBhIGZvb3RwcmludCBzdHJpbmcsIHdoaWNoIGNvdWxkIGJlXG4gKiBhIEtpQ2FkIGZvb3RwcmludCBvciBhIGdlbmVyaWMgXCJmb290cHJpbnRlciBzdHJpbmdcIi5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEpsY3BjYlBhY2thZ2VOYW1lID0gKFxuICBmb290cHJpbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICghZm9vdHByaW50KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgaWYgKGZvb3RwcmludC5zdGFydHNXaXRoKFwia2ljYWQ6XCIpKSB7XG4gICAgY29uc3QgZm9vdHByaW50ZXJTdHJpbmcgPSBnZXRGb290cHJpbnRlclN0cmluZ0Zyb21LaWNhZChmb290cHJpbnQpXG4gICAgaWYgKGZvb3RwcmludGVyU3RyaW5nKSB7XG4gICAgICByZXR1cm4gZ2V0SmxjUGFja2FnZUZyb21Gb290cHJpbnRlclN0cmluZyhmb290cHJpbnRlclN0cmluZylcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayBmb3IgdW4tbWF0Y2hlZCBLaUNhZCBzdHJpbmdzXG4gICAgcmV0dXJuIGZvb3RwcmludFxuICB9XG5cbiAgLy8gTm90IGEgS2lDYWQgc3RyaW5nLCBhc3N1bWUgaXQncyBhIGZvb3RwcmludGVyIHN0cmluZ1xuICByZXR1cm4gZ2V0SmxjUGFja2FnZUZyb21Gb290cHJpbnRlclN0cmluZyhmb290cHJpbnQpXG59XG4iLCAiaW1wb3J0IHR5cGUgeyBQYXJ0c0VuZ2luZSwgU3VwcGxpZXJQYXJ0TnVtYmVycyB9IGZyb20gXCJAdHNjaXJjdWl0L3Byb3BzXCJcbmltcG9ydCB7IGdldEpsY3BjYlBhY2thZ2VOYW1lIH0gZnJvbSBcIi4vZm9vdHByaW50LXRyYW5zbGF0b3JzL2luZGV4XCJcbmltcG9ydCB7XG4gIGZldGNoRWFzeUVEQUNvbXBvbmVudCxcbiAgRWFzeUVkYUpzb25TY2hlbWEsXG4gIGNvbnZlcnRFYXN5RWRhSnNvblRvQ2lyY3VpdEpzb24sXG59IGZyb20gXCJlYXN5ZWRhL2Jyb3dzZXJcIlxuXG5leHBvcnQgY29uc3QgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgYW55PigpXG5cbmNvbnN0IGdldEpsY1BhcnRzQ2FjaGVkID0gYXN5bmMgKG5hbWU6IGFueSwgcGFyYW1zOiBhbnkpID0+IHtcbiAgY29uc3QgcGFyYW1TdHJpbmcgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAuLi5wYXJhbXMsXG4gICAganNvbjogXCJ0cnVlXCIsXG4gIH0pLnRvU3RyaW5nKClcbiAgaWYgKGNhY2hlLmhhcyhwYXJhbVN0cmluZykpIHtcbiAgICByZXR1cm4gY2FjaGUuZ2V0KHBhcmFtU3RyaW5nKVxuICB9XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgYGh0dHBzOi8vamxjc2VhcmNoLnRzY2lyY3VpdC5jb20vJHtuYW1lfS9saXN0PyR7cGFyYW1TdHJpbmd9YCxcbiAgKVxuICBjb25zdCByZXNwb25zZUpzb24gPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgY2FjaGUuc2V0KHBhcmFtU3RyaW5nLCByZXNwb25zZUpzb24pXG4gIHJldHVybiByZXNwb25zZUpzb25cbn1cblxuY29uc3Qgd2l0aEJhc2ljUGFydFByZWZlcmVuY2UgPSAocGFydHM6IGFueVtdIHwgdW5kZWZpbmVkKSA9PiB7XG4gIGlmICghcGFydHMpIHJldHVybiBbXVxuICByZXR1cm4gWy4uLnBhcnRzXS5zb3J0KFxuICAgIChhLCBiKSA9PiBOdW1iZXIoYi5pc19iYXNpYyA/PyBmYWxzZSkgLSBOdW1iZXIoYS5pc19iYXNpYyA/PyBmYWxzZSksXG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IGpsY1BhcnRzRW5naW5lOiBQYXJ0c0VuZ2luZSA9IHtcbiAgZmluZFBhcnQ6IGFzeW5jICh7XG4gICAgc291cmNlQ29tcG9uZW50LFxuICAgIGZvb3RwcmludGVyU3RyaW5nLFxuICB9KTogUHJvbWlzZTxTdXBwbGllclBhcnROdW1iZXJzPiA9PiB7XG4gICAgY29uc3QgamxjcGNiUGFja2FnZSA9IGdldEpsY3BjYlBhY2thZ2VOYW1lKGZvb3RwcmludGVyU3RyaW5nKVxuXG4gICAgaWYgKFxuICAgICAgc291cmNlQ29tcG9uZW50LnR5cGUgPT09IFwic291cmNlX2NvbXBvbmVudFwiICYmXG4gICAgICBzb3VyY2VDb21wb25lbnQuZnR5cGUgPT09IFwic2ltcGxlX3Jlc2lzdG9yXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgcmVzaXN0b3JzIH0gPSBhd2FpdCBnZXRKbGNQYXJ0c0NhY2hlZChcInJlc2lzdG9yc1wiLCB7XG4gICAgICAgIHJlc2lzdGFuY2U6IHNvdXJjZUNvbXBvbmVudC5yZXNpc3RhbmNlLFxuICAgICAgICBwYWNrYWdlOiBqbGNwY2JQYWNrYWdlLFxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZShyZXNpc3RvcnMpXG4gICAgICAgICAgLm1hcCgocjogYW55KSA9PiBgQyR7ci5sY3NjfWApXG4gICAgICAgICAgLnNsaWNlKDAsIDMpLFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBzb3VyY2VDb21wb25lbnQudHlwZSA9PT0gXCJzb3VyY2VfY29tcG9uZW50XCIgJiZcbiAgICAgIHNvdXJjZUNvbXBvbmVudC5mdHlwZSA9PT0gXCJzaW1wbGVfY2FwYWNpdG9yXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgY2FwYWNpdG9ycyB9ID0gYXdhaXQgZ2V0SmxjUGFydHNDYWNoZWQoXCJjYXBhY2l0b3JzXCIsIHtcbiAgICAgICAgY2FwYWNpdGFuY2U6IHNvdXJjZUNvbXBvbmVudC5jYXBhY2l0YW5jZSxcbiAgICAgICAgcGFja2FnZTogamxjcGNiUGFja2FnZSxcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpsY3BjYjogd2l0aEJhc2ljUGFydFByZWZlcmVuY2UoY2FwYWNpdG9ycylcbiAgICAgICAgICAubWFwKChjOiBhbnkpID0+IGBDJHtjLmxjc2N9YClcbiAgICAgICAgICAuc2xpY2UoMCwgMyksXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHNvdXJjZUNvbXBvbmVudC50eXBlID09PSBcInNvdXJjZV9jb21wb25lbnRcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LmZ0eXBlID09PSBcInNpbXBsZV9waW5faGVhZGVyXCJcbiAgICApIHtcbiAgICAgIGxldCBwaXRjaDogbnVtYmVyIHwgdW5kZWZpbmVkXG4gICAgICBpZiAoZm9vdHByaW50ZXJTdHJpbmc/LmluY2x1ZGVzKFwiX3BcIikpIHtcbiAgICAgICAgcGl0Y2ggPSBOdW1iZXIoZm9vdHByaW50ZXJTdHJpbmcuc3BsaXQoXCJfcFwiKVsxXSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gYXdhaXQgZ2V0SmxjUGFydHNDYWNoZWQoXG4gICAgICAgIFwiaGVhZGVyc1wiLFxuICAgICAgICBwaXRjaFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBwaXRjaDogcGl0Y2gsXG4gICAgICAgICAgICAgIG51bV9waW5zOiBzb3VyY2VDb21wb25lbnQucGluX2NvdW50LFxuICAgICAgICAgICAgICBnZW5kZXI6IHNvdXJjZUNvbXBvbmVudC5nZW5kZXIsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIG51bV9waW5zOiBzb3VyY2VDb21wb25lbnQucGluX2NvdW50LFxuICAgICAgICAgICAgICBnZW5kZXI6IHNvdXJjZUNvbXBvbmVudC5nZW5kZXIsXG4gICAgICAgICAgICB9LFxuICAgICAgKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZShoZWFkZXJzKVxuICAgICAgICAgIC5tYXAoKGg6IGFueSkgPT4gYEMke2gubGNzY31gKVxuICAgICAgICAgIC5zbGljZSgwLCAzKSxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc291cmNlQ29tcG9uZW50LnR5cGUgPT09IFwic291cmNlX2NvbXBvbmVudFwiICYmXG4gICAgICBzb3VyY2VDb21wb25lbnQuZnR5cGUgPT09IFwic2ltcGxlX3BvdGVudGlvbWV0ZXJcIlxuICAgICkge1xuICAgICAgY29uc3QgeyBwb3RlbnRpb21ldGVycyB9ID0gYXdhaXQgZ2V0SmxjUGFydHNDYWNoZWQoXCJwb3RlbnRpb21ldGVyc1wiLCB7XG4gICAgICAgIHJlc2lzdGFuY2U6IHNvdXJjZUNvbXBvbmVudC5tYXhfcmVzaXN0YW5jZSxcbiAgICAgICAgcGFja2FnZTogamxjcGNiUGFja2FnZSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBqbGNwY2I6IHdpdGhCYXNpY1BhcnRQcmVmZXJlbmNlKHBvdGVudGlvbWV0ZXJzKVxuICAgICAgICAgIC5tYXAoKHA6IGFueSkgPT4gYEMke3AubGNzY31gKVxuICAgICAgICAgIC5zbGljZSgwLCAzKSxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc291cmNlQ29tcG9uZW50LnR5cGUgPT09IFwic291cmNlX2NvbXBvbmVudFwiICYmXG4gICAgICBzb3VyY2VDb21wb25lbnQuZnR5cGUgPT09IFwic2ltcGxlX2Rpb2RlXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgZGlvZGVzIH0gPSBhd2FpdCBnZXRKbGNQYXJ0c0NhY2hlZChcImRpb2Rlc1wiLCB7XG4gICAgICAgIHBhY2thZ2U6IGpsY3BjYlBhY2thZ2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZShkaW9kZXMpXG4gICAgICAgICAgLm1hcCgoZDogYW55KSA9PiBgQyR7ZC5sY3NjfWApXG4gICAgICAgICAgLnNsaWNlKDAsIDMpLFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBzb3VyY2VDb21wb25lbnQudHlwZSA9PT0gXCJzb3VyY2VfY29tcG9uZW50XCIgJiZcbiAgICAgIHNvdXJjZUNvbXBvbmVudC5mdHlwZSA9PT0gXCJzaW1wbGVfY2hpcFwiXG4gICAgKSB7XG4gICAgICBpZiAoIWpsY3BjYlBhY2thZ2UgfHwgIWZvb3RwcmludGVyU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB7fVxuICAgICAgfVxuICAgICAgY29uc3QgeyBjaGlwcyB9ID0gYXdhaXQgZ2V0SmxjUGFydHNDYWNoZWQoXCJjaGlwc1wiLCB7XG4gICAgICAgIHBhY2thZ2U6IGpsY3BjYlBhY2thZ2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZShjaGlwcylcbiAgICAgICAgICAubWFwKChjOiBhbnkpID0+IGBDJHtjLmxjc2N9YClcbiAgICAgICAgICAuc2xpY2UoMCwgMyksXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHNvdXJjZUNvbXBvbmVudC50eXBlID09PSBcInNvdXJjZV9jb21wb25lbnRcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LmZ0eXBlID09PSBcInNpbXBsZV90cmFuc2lzdG9yXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgdHJhbnNpc3RvcnMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFwidHJhbnNpc3RvcnNcIiwge1xuICAgICAgICBwYWNrYWdlOiBqbGNwY2JQYWNrYWdlLFxuICAgICAgICB0cmFuc2lzdG9yX3R5cGU6IHNvdXJjZUNvbXBvbmVudC50cmFuc2lzdG9yX3R5cGUsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZSh0cmFuc2lzdG9ycylcbiAgICAgICAgICAubWFwKCh0OiBhbnkpID0+IGBDJHt0Lmxjc2N9YClcbiAgICAgICAgICAuc2xpY2UoMCwgMyksXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHNvdXJjZUNvbXBvbmVudC50eXBlID09PSBcInNvdXJjZV9jb21wb25lbnRcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LmZ0eXBlID09PSBcInNpbXBsZV9wb3dlcl9zb3VyY2VcIlxuICAgICkge1xuICAgICAgY29uc3QgeyBwb3dlcl9zb3VyY2VzIH0gPSBhd2FpdCBnZXRKbGNQYXJ0c0NhY2hlZChcInBvd2VyX3NvdXJjZXNcIiwge1xuICAgICAgICB2b2x0YWdlOiBzb3VyY2VDb21wb25lbnQudm9sdGFnZSxcbiAgICAgICAgcGFja2FnZTogamxjcGNiUGFja2FnZSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBqbGNwY2I6IHdpdGhCYXNpY1BhcnRQcmVmZXJlbmNlKHBvd2VyX3NvdXJjZXMpXG4gICAgICAgICAgLm1hcCgocDogYW55KSA9PiBgQyR7cC5sY3NjfWApXG4gICAgICAgICAgLnNsaWNlKDAsIDMpLFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBzb3VyY2VDb21wb25lbnQudHlwZSA9PT0gXCJzb3VyY2VfY29tcG9uZW50XCIgJiZcbiAgICAgIHNvdXJjZUNvbXBvbmVudC5mdHlwZSA9PT0gXCJzaW1wbGVfaW5kdWN0b3JcIlxuICAgICkge1xuICAgICAgY29uc3QgeyBpbmR1Y3RvcnMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFwiaW5kdWN0b3JzXCIsIHtcbiAgICAgICAgaW5kdWN0YW5jZTogc291cmNlQ29tcG9uZW50LmluZHVjdGFuY2UsXG4gICAgICAgIHBhY2thZ2U6IGpsY3BjYlBhY2thZ2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZShpbmR1Y3RvcnMpXG4gICAgICAgICAgLm1hcCgoaTogYW55KSA9PiBgQyR7aS5sY3NjfWApXG4gICAgICAgICAgLnNsaWNlKDAsIDMpLFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBzb3VyY2VDb21wb25lbnQudHlwZSA9PT0gXCJzb3VyY2VfY29tcG9uZW50XCIgJiZcbiAgICAgIHNvdXJjZUNvbXBvbmVudC5mdHlwZSA9PT0gXCJzaW1wbGVfY3J5c3RhbFwiXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGNyeXN0YWxzIH0gPSBhd2FpdCBnZXRKbGNQYXJ0c0NhY2hlZChcImNyeXN0YWxzXCIsIHtcbiAgICAgICAgZnJlcXVlbmN5OiBzb3VyY2VDb21wb25lbnQuZnJlcXVlbmN5LFxuICAgICAgICBsb2FkX2NhcGFjaXRhbmNlOiBzb3VyY2VDb21wb25lbnQubG9hZF9jYXBhY2l0YW5jZSxcbiAgICAgICAgcGFja2FnZTogamxjcGNiUGFja2FnZSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBqbGNwY2I6IHdpdGhCYXNpY1BhcnRQcmVmZXJlbmNlKGNyeXN0YWxzKVxuICAgICAgICAgIC5tYXAoKGM6IGFueSkgPT4gYEMke2MubGNzY31gKVxuICAgICAgICAgIC5zbGljZSgwLCAzKSxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc291cmNlQ29tcG9uZW50LnR5cGUgPT09IFwic291cmNlX2NvbXBvbmVudFwiICYmXG4gICAgICBzb3VyY2VDb21wb25lbnQuZnR5cGUgPT09IFwic2ltcGxlX21vc2ZldFwiXG4gICAgKSB7XG4gICAgICBjb25zdCB7IG1vc2ZldHMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFwibW9zZmV0c1wiLCB7XG4gICAgICAgIHBhY2thZ2U6IGpsY3BjYlBhY2thZ2UsXG4gICAgICAgIG1vc2ZldF9tb2RlOiBzb3VyY2VDb21wb25lbnQubW9zZmV0X21vZGUsXG4gICAgICAgIGNoYW5uZWxfdHlwZTogc291cmNlQ29tcG9uZW50LmNoYW5uZWxfdHlwZSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBqbGNwY2I6IHdpdGhCYXNpY1BhcnRQcmVmZXJlbmNlKG1vc2ZldHMpXG4gICAgICAgICAgLm1hcCgobTogYW55KSA9PiBgQyR7bS5sY3NjfWApXG4gICAgICAgICAgLnNsaWNlKDAsIDMpLFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBzb3VyY2VDb21wb25lbnQudHlwZSA9PT0gXCJzb3VyY2VfY29tcG9uZW50XCIgJiZcbiAgICAgIHNvdXJjZUNvbXBvbmVudC5mdHlwZSA9PT0gXCJzaW1wbGVfcmVzb25hdG9yXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgcmVzb25hdG9ycyB9ID0gYXdhaXQgZ2V0SmxjUGFydHNDYWNoZWQoXCJyZXNvbmF0b3JzXCIsIHtcbiAgICAgICAgZnJlcXVlbmN5OiBzb3VyY2VDb21wb25lbnQuZnJlcXVlbmN5LFxuICAgICAgICBwYWNrYWdlOiBqbGNwY2JQYWNrYWdlLFxuICAgICAgfSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpsY3BjYjogd2l0aEJhc2ljUGFydFByZWZlcmVuY2UocmVzb25hdG9ycylcbiAgICAgICAgICAubWFwKChyOiBhbnkpID0+IGBDJHtyLmxjc2N9YClcbiAgICAgICAgICAuc2xpY2UoMCwgMyksXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHNvdXJjZUNvbXBvbmVudC50eXBlID09PSBcInNvdXJjZV9jb21wb25lbnRcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LmZ0eXBlID09PSBcInNpbXBsZV9zd2l0Y2hcIlxuICAgICkge1xuICAgICAgY29uc3QgeyBzd2l0Y2hlcyB9ID0gYXdhaXQgZ2V0SmxjUGFydHNDYWNoZWQoXCJzd2l0Y2hlc1wiLCB7XG4gICAgICAgIHN3aXRjaF90eXBlOiBzb3VyY2VDb21wb25lbnQudHlwZSxcbiAgICAgICAgcGFja2FnZTogamxjcGNiUGFja2FnZSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBqbGNwY2I6IHdpdGhCYXNpY1BhcnRQcmVmZXJlbmNlKHN3aXRjaGVzKVxuICAgICAgICAgIC5tYXAoKHM6IGFueSkgPT4gYEMke3MubGNzY31gKVxuICAgICAgICAgIC5zbGljZSgwLCAzKSxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc291cmNlQ29tcG9uZW50LnR5cGUgPT09IFwic291cmNlX2NvbXBvbmVudFwiICYmXG4gICAgICBzb3VyY2VDb21wb25lbnQuZnR5cGUgPT09IFwic2ltcGxlX2xlZFwiXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGxlZHMgfSA9IGF3YWl0IGdldEpsY1BhcnRzQ2FjaGVkKFwibGVkc1wiLCB7XG4gICAgICAgIHBhY2thZ2U6IGpsY3BjYlBhY2thZ2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZShsZWRzKVxuICAgICAgICAgIC5tYXAoKGw6IGFueSkgPT4gYEMke2wubGNzY31gKVxuICAgICAgICAgIC5zbGljZSgwLCAzKSxcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc291cmNlQ29tcG9uZW50LnR5cGUgPT09IFwic291cmNlX2NvbXBvbmVudFwiICYmXG4gICAgICBzb3VyY2VDb21wb25lbnQuZnR5cGUgPT09IFwic2ltcGxlX2Z1c2VcIlxuICAgICkge1xuICAgICAgY29uc3QgeyBmdXNlcyB9ID0gYXdhaXQgZ2V0SmxjUGFydHNDYWNoZWQoXCJmdXNlc1wiLCB7XG4gICAgICAgIHBhY2thZ2U6IGpsY3BjYlBhY2thZ2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgamxjcGNiOiB3aXRoQmFzaWNQYXJ0UHJlZmVyZW5jZShmdXNlcylcbiAgICAgICAgICAubWFwKChsOiBhbnkpID0+IGBDJHtsLmxjc2N9YClcbiAgICAgICAgICAuc2xpY2UoMCwgMyksXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHNvdXJjZUNvbXBvbmVudC50eXBlID09PSBcInNvdXJjZV9jb21wb25lbnRcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LmZ0eXBlID09PSBcInNpbXBsZV9jb25uZWN0b3JcIiAmJlxuICAgICAgc291cmNlQ29tcG9uZW50LnN0YW5kYXJkID09PSBcInVzYl9jXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgdXNiX2NfY29ubmVjdG9ycyB9ID0gYXdhaXQgZ2V0SmxjUGFydHNDYWNoZWQoXG4gICAgICAgIFwidXNiX2NfY29ubmVjdG9yc1wiLFxuICAgICAgICB7fSxcbiAgICAgIClcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGpsY3BjYjogd2l0aEJhc2ljUGFydFByZWZlcmVuY2UodXNiX2NfY29ubmVjdG9ycylcbiAgICAgICAgICAubWFwKChjOiBhbnkpID0+IGBDJHtjLmxjc2N9YClcbiAgICAgICAgICAuc2xpY2UoMCwgMyksXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7fVxuICB9LFxuXG4gIGZldGNoUGFydENpcmN1aXRKc29uOiBhc3luYyAoe1xuICAgIHN1cHBsaWVyUGFydE51bWJlcixcbiAgICBtYW51ZmFjdHVyZXJQYXJ0TnVtYmVyLFxuICB9KSA9PiB7XG4gICAgbGV0IHJlc29sdmVkUGFydE51bWJlciA9IHN1cHBsaWVyUGFydE51bWJlclxuXG4gICAgaWYgKCFyZXNvbHZlZFBhcnROdW1iZXIgJiYgbWFudWZhY3R1cmVyUGFydE51bWJlcikge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzIH0gPSBhd2FpdCBnZXRKbGNQYXJ0c0NhY2hlZChcImNvbXBvbmVudHNcIiwge1xuICAgICAgICBzZWFyY2g6IG1hbnVmYWN0dXJlclBhcnROdW1iZXIsXG4gICAgICB9KVxuICAgICAgcmVzb2x2ZWRQYXJ0TnVtYmVyID0gY29tcG9uZW50cz8uWzBdXG4gICAgICAgID8gYEMke2NvbXBvbmVudHNbMF0ubGNzY31gXG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgaWYgKCFyZXNvbHZlZFBhcnROdW1iZXIpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGNvbnN0IHJhd0Vhc3lFZGFKc29uID0gYXdhaXQgZmV0Y2hFYXN5RURBQ29tcG9uZW50KHJlc29sdmVkUGFydE51bWJlcilcbiAgICBjb25zdCBwYXJzZWQgPSBFYXN5RWRhSnNvblNjaGVtYS5wYXJzZShyYXdFYXN5RWRhSnNvbilcbiAgICByZXR1cm4gY29udmVydEVhc3lFZGFKc29uVG9DaXJjdWl0SnNvbihwYXJzZWQpXG4gIH0sXG59XG4iLCAiaW1wb3J0IHR5cGUgeyBQbGF0Zm9ybUNvbmZpZywgU3BpY2VFbmdpbmUgfSBmcm9tIFwiQHRzY2lyY3VpdC9wcm9wc1wiXG5pbXBvcnQgeyBqbGNQYXJ0c0VuZ2luZSB9IGZyb20gXCJAdHNjaXJjdWl0L3BhcnRzLWVuZ2luZVwiXG5pbXBvcnQgeyBwYXJzZUtpY2FkTW9kVG9DaXJjdWl0SnNvbiB9IGZyb20gXCJraWNhZC1jb21wb25lbnQtY29udmVydGVyXCJcbmltcG9ydCB7IGR5bmFtaWNhbGx5TG9hZERlcGVuZGVuY3lXaXRoQ2RuQmFja3VwIH0gZnJvbSBcIi4vdXRpbHMvZHluYW1pY2FsbHktbG9hZC1kZXBlbmRlbmN5LXdpdGgtY2RuLWJhY2t1cFwiXG5cbmNvbnN0IEtJQ0FEX0ZPT1RQUklOVF9DQUNIRV9VUkwgPSBcImh0dHBzOi8va2ljYWQtbW9kLWNhY2hlLnRzY2lyY3VpdC5jb21cIlxuXG5sZXQgbmdzcGljZUVuZ2luZUNhY2hlOiBTcGljZUVuZ2luZSB8IG51bGwgPSBudWxsXG5cbmV4cG9ydCBjb25zdCBnZXRQbGF0Zm9ybUNvbmZpZyA9IChcbiAgb3ZlcnJpZGVzOiBQYXJ0aWFsPFBsYXRmb3JtQ29uZmlnPiA9IHt9LFxuKTogUGxhdGZvcm1Db25maWcgPT4gKHtcbiAgbG9jYWxDYWNoZUVuZ2luZTogb3ZlcnJpZGVzLmxvY2FsQ2FjaGVFbmdpbmUsXG4gIHBhcnRzRW5naW5lOiBqbGNQYXJ0c0VuZ2luZSxcbiAgc3BpY2VFbmdpbmVNYXA6IHtcbiAgICBuZ3NwaWNlOiB7XG4gICAgICBzaW11bGF0ZTogYXN5bmMgKHNwaWNlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKCFuZ3NwaWNlRW5naW5lQ2FjaGUpIHtcbiAgICAgICAgICBjb25zdCBjcmVhdGVOZ3NwaWNlU3BpY2VFbmdpbmUgPVxuICAgICAgICAgICAgYXdhaXQgZHluYW1pY2FsbHlMb2FkRGVwZW5kZW5jeVdpdGhDZG5CYWNrdXAoXG4gICAgICAgICAgICAgIFwiQHRzY2lyY3VpdC9uZ3NwaWNlLXNwaWNlLWVuZ2luZVwiLFxuICAgICAgICAgICAgKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiQ291bGQgbm90IGxvYWQgbmdzcGljZSBlbmdpbmUgZnJvbSBsb2NhbCBub2RlX21vZHVsZXMgb3IgQ0ROIGZhbGxiYWNrLlwiLFxuICAgICAgICAgICAgICAgIHsgY2F1c2U6IGVycm9yIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAoY3JlYXRlTmdzcGljZVNwaWNlRW5naW5lKSB7XG4gICAgICAgICAgICBuZ3NwaWNlRW5naW5lQ2FjaGUgPSBhd2FpdCBjcmVhdGVOZ3NwaWNlU3BpY2VFbmdpbmUoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbmdzcGljZUVuZ2luZUNhY2hlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJDb3VsZCBub3QgbG9hZCBuZ3NwaWNlIGVuZ2luZSBmcm9tIGxvY2FsIG5vZGVfbW9kdWxlcyBvciBDRE4gZmFsbGJhY2suXCIsXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5nc3BpY2VFbmdpbmVDYWNoZS5zaW11bGF0ZShzcGljZSlcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbiAgZm9vdHByaW50TGlicmFyeU1hcDoge1xuICAgIGtpY2FkOiBhc3luYyAoZm9vdHByaW50TmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBiYXNlVXJsID0gYCR7S0lDQURfRk9PVFBSSU5UX0NBQ0hFX1VSTH0vJHtmb290cHJpbnROYW1lfWBcbiAgICAgIGNvbnN0IGNpcmN1aXRKc29uVXJsID0gYCR7YmFzZVVybH0uY2lyY3VpdC5qc29uYFxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goY2lyY3VpdEpzb25VcmwpXG4gICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICBjb25zdCBib2R5UHJldmlldyA9IChhd2FpdCByZXMudGV4dCgpKS5zbGljZSgwLCAyMDApXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRmFpbGVkIHRvIGxvYWQgS2lDYWQgZm9vdHByaW50IFxcXCIke2Zvb3RwcmludE5hbWV9XFxcIiBmcm9tICR7Y2lyY3VpdEpzb25Vcmx9IChIVFRQICR7cmVzLnN0YXR1c30pLiAke2JvZHlQcmV2aWV3fWAsXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgbGV0IHJhdzogYW55W10gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgdHJ5IHtcbiAgICAgICAgcmF3ID0gYXdhaXQgcmVzLmpzb24oKVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRmFpbGVkIHRvIHBhcnNlIEtpQ2FkIGZvb3RwcmludCBKU09OIGZvciBcXFwiJHtmb290cHJpbnROYW1lfVxcXCIgZnJvbSAke2NpcmN1aXRKc29uVXJsfWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIC8vIEZpbHRlciBwY2Jfc2lsa3NjcmVlbl90ZXh0IHRvIG9ubHkga2VlcCBlbnRyaWVzIHdpdGggdGV4dCA9PT0gXCJSRUYqKlwiXG4gICAgICAvLyBBcHBseSBmaWx0ZXJpbmcgb25seSB0byBlbGVtZW50cyBjb21pbmcgZnJvbSB0aGUga2ljYWRfbW9kX3NlcnZlciByZXNwb25zZVxuICAgICAgY29uc3QgZmlsdGVyZWQ6IGFueVtdID0gQXJyYXkuaXNBcnJheShyYXcpXG4gICAgICAgID8gcmF3LmZpbHRlcigoZWwpID0+XG4gICAgICAgICAgICBlbD8udHlwZSA9PT0gXCJwY2Jfc2lsa3NjcmVlbl90ZXh0XCIgPyBlbD8udGV4dCA9PT0gXCJSRUYqKlwiIDogdHJ1ZSxcbiAgICAgICAgICApXG4gICAgICAgIDogW3Jhd11cbiAgICAgIGNvbnN0IHdybFVybCA9IGAke2Jhc2VVcmx9LndybGBcbiAgICAgIGNvbnN0IHN0ZXBVcmwgPSBgJHtiYXNlVXJsfS5zdGVwYFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9vdHByaW50Q2lyY3VpdEpzb246IGZpbHRlcmVkLFxuICAgICAgICBjYWRNb2RlbDogeyB3cmxVcmwsIHN0ZXBVcmwsIG1vZGVsVW5pdFRvTW1TY2FsZTogMi41NCB9LFxuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIGZvb3RwcmludEZpbGVQYXJzZXJNYXA6IHtcbiAgICBraWNhZF9tb2Q6IHtcbiAgICAgIGxvYWRGcm9tVXJsOiBhc3luYyAodXJsOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3Qga2ljYWRDb250ZW50ID0gYXdhaXQgZmV0Y2godXJsKS50aGVuKChyZXMpID0+IHJlcy50ZXh0KCkpXG4gICAgICAgIGNvbnN0IGtpY2FkSnNvbiA9IGF3YWl0IHBhcnNlS2ljYWRNb2RUb0NpcmN1aXRKc29uKGtpY2FkQ29udGVudClcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBmb290cHJpbnRDaXJjdWl0SnNvbjogQXJyYXkuaXNBcnJheShraWNhZEpzb24pXG4gICAgICAgICAgICA/IGtpY2FkSnNvblxuICAgICAgICAgICAgOiBba2ljYWRKc29uXSxcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9LFxuICB9LFxufSlcbiIsICIvKipcbiAqIFRyYW5zZm9ybXMgcmVsYXRpdmUgL25wbS8gaW1wb3J0cyBmcm9tIGpzZGVsaXZyIENETiBjb2RlIHRvIGFic29sdXRlIFVSTHMuXG4gKi9cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1Kc0RlbGl2ckltcG9ydHMgPSAoY29kZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgLy8gTWF0Y2ggYm90aCBzdGF0aWMgaW1wb3J0czogZnJvbSBcIi9ucG0vLi4uXCIgYW5kIGR5bmFtaWMgaW1wb3J0czogaW1wb3J0KFwiL25wbS8uLi5cIilcbiAgLy8gUGF0dGVybiBoYW5kbGVzIGJvdGggc2luZ2xlIGFuZCBkb3VibGUgcXVvdGVzXG4gIHJldHVybiBjb2RlXG4gICAgLnJlcGxhY2UoL2Zyb21cXHMqW1wiJ11cXC9ucG1cXC8vZywgJ2Zyb20gXCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtLycpXG4gICAgLnJlcGxhY2UoXG4gICAgICAvaW1wb3J0XFxzKlxcKFxccypbXCInXVxcL25wbVxcLy9nLFxuICAgICAgJ2ltcG9ydChcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vJyxcbiAgICApXG59XG5cbmV4cG9ydCBjb25zdCBkeW5hbWljYWxseUxvYWREZXBlbmRlbmN5V2l0aENkbkJhY2t1cCA9IGFzeW5jIChcbiAgcGFja2FnZU5hbWU6IHN0cmluZyxcbik6IFByb21pc2U8YW55PiA9PiB7XG4gIHRyeSB7XG4gICAgLy8gRmlyc3QsIHRyeSB0byBpbXBvcnQgdXNpbmcgTm9kZS5qcyByZXNvbHV0aW9uXG4gICAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KHBhY2thZ2VOYW1lKVxuICAgIHJldHVybiBtb2R1bGUuZGVmYXVsdFxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5sb2coYEZhaWxlZCB0byBsb2FkICR7cGFja2FnZU5hbWV9IGxvY2FsbHksIHRyeWluZyBDRE4gZmFsbGJhY2suLi5gKVxuICAgIC8vIEZhbGxiYWNrIHRvIEpzRGVsaXZyIENETiBmb3IgYnJvd3NlciBlbnZpcm9ubWVudHNcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXG4gICAgICAgIGBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtLyR7cGFja2FnZU5hbWV9Lytlc21gLFxuICAgICAgKVxuICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBGYWlsZWQgdG8gZmV0Y2ggJHtwYWNrYWdlTmFtZX0gZnJvbSBDRE46ICR7cmVzLnN0YXR1c1RleHR9YCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgbGV0IGNvZGUgPSBhd2FpdCByZXMudGV4dCgpXG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZWxhdGl2ZSAvbnBtLyBpbXBvcnRzIHRvIGFic29sdXRlIGpzZGVsaXZyIFVSTHNcbiAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgYmxvYiBVUkxzIHJlc29sdmUgcmVsYXRpdmUgaW1wb3J0cyBhZ2FpbnN0IHRoZSBwYWdlIG9yaWdpblxuICAgICAgY29kZSA9IHRyYW5zZm9ybUpzRGVsaXZySW1wb3J0cyhjb2RlKVxuXG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2NvZGVdLCB7IHR5cGU6IFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiIH0pXG4gICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGRlZmF1bHQ6IGxvYWRlZE1vZHVsZSB9ID0gYXdhaXQgaW1wb3J0KHVybClcbiAgICAgICAgcmV0dXJuIGxvYWRlZE1vZHVsZVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoY2RuRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYENETiBmYWxsYmFjayBmb3IgJHtwYWNrYWdlTmFtZX0gYWxzbyBmYWlsZWQ6YCwgY2RuRXJyb3IpXG4gICAgICB0aHJvdyBjZG5FcnJvclxuICAgIH1cbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUtPLElBQU0sZ0NBQWdDLENBQzNDLG1CQUN1QjtBQUV2QixNQUFJLFFBQVEsZUFBZSxNQUFNLGdCQUFnQjtBQUNqRCxNQUFJLE1B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