@pathscale/rsbuild-plugin-ui-css-purge 0.9.0 → 0.9.2

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.
package/dist/index.js CHANGED
@@ -4,29 +4,15 @@ var __getProtoOf = Object.getPrototypeOf;
4
4
  var __defProp = Object.defineProperty;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- function __accessProp(key) {
8
- return this[key];
9
- }
10
- var __toESMCache_node;
11
- var __toESMCache_esm;
12
7
  var __toESM = (mod, isNodeMode, target) => {
13
- var canCache = mod != null && typeof mod === "object";
14
- if (canCache) {
15
- var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
16
- var cached = cache.get(mod);
17
- if (cached)
18
- return cached;
19
- }
20
8
  target = mod != null ? __create(__getProtoOf(mod)) : {};
21
9
  const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
22
10
  for (let key of __getOwnPropNames(mod))
23
11
  if (!__hasOwnProp.call(to, key))
24
12
  __defProp(to, key, {
25
- get: __accessProp.bind(mod, key),
13
+ get: () => mod[key],
26
14
  enumerable: true
27
15
  });
28
- if (canCache)
29
- cache.set(mod, to);
30
16
  return to;
31
17
  };
32
18
  var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
@@ -251,5 +237,5 @@ export {
251
237
  buildSafelists
252
238
  };
253
239
 
254
- //# debugId=550954AA443AD8F064756E2164756E21
255
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3NjYW4tY29uc3VtZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiLyoqXG4gKiBDb25zdW1lci1zaWRlIEpTWCBzY2FubmVyLlxuICpcbiAqIFdhbGtzIGEgY29uc3VtZXIncyBzb3VyY2UgdHJlZSwgZmluZHMgY29tcG9uZW50IGltcG9ydHMgZnJvbSBAcGF0aHNjYWxlL3VpLFxuICogY29sbGVjdHMgcHJvcCB2YWx1ZXMsIGFuZCBjcm9zcy1yZWZlcmVuY2VzIHdpdGggdGhlIHB1cmdlIG1hbmlmZXN0IHRvIGJ1aWxkXG4gKiBMZXZlbCAxIChjbGFzcykgYW5kIExldmVsIDIgKGF0dHJpYnV0ZSkgc2FmZWxpc3RzLlxuICpcbiAqIFVzYWdlOiAgYnVuIHJ1biBzcmMvc2Nhbi1jb25zdW1lci50cyA8Y29uc3VtZXItc3JjLWRpcj4gPHB1cmdlLW1hbmlmZXN0Lmpzb24+XG4gKi9cblxuaW1wb3J0IHN3YyBmcm9tIFwiQHN3Yy9jb3JlXCI7XG5pbXBvcnQgeyBHbG9iIH0gZnJvbSBcImJ1blwiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuLy8g4pSA4pSAIFR5cGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5pbnRlcmZhY2UgQ29tcG9uZW50TWFuaWZlc3Qge1xuICBjbGFzc2VzOiB7XG4gICAgYWx3YXlzOiBzdHJpbmdbXTtcbiAgICBieVByb3A6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nW10+PjtcbiAgfTtcbiAgYXR0cnM/OiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcbiAgZGVwcz86IHN0cmluZ1tdO1xufVxuXG50eXBlIFB1cmdlTWFuaWZlc3QgPSBSZWNvcmQ8c3RyaW5nLCBDb21wb25lbnRNYW5pZmVzdD47XG5cbi8qKiBXaGF0IHdlIGNvbGxlY3QgcGVyIGNvbXBvbmVudCB1c2FnZSBmcm9tIEpTWCAqL1xuaW50ZXJmYWNlIFByb3BVc2FnZSB7XG4gIGNvbXBvbmVudDogc3RyaW5nO1xuICBwcm9wczogTWFwPHN0cmluZywgc3RyaW5nIHwgXCJEWU5BTUlDXCI+OyAvLyBwcm9wTmFtZSDihpIgbGl0ZXJhbCB2YWx1ZSBvciBEWU5BTUlDXG4gIGJvb2xlYW5Qcm9wczogU2V0PHN0cmluZz47IC8vIHByb3BzIHByZXNlbnQgd2l0aG91dCBhIHZhbHVlICh0cnV0aHkpXG4gIGhhc1NwcmVhZDogYm9vbGVhbjtcbn1cblxuLy8g4pSA4pSAIEFTVCB3YWxrZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIHdhbGtBU1Qobm9kZTogYW55LCB2aXNpdG9yOiAobm9kZTogYW55KSA9PiB2b2lkKSB7XG4gIGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuO1xuICB2aXNpdG9yKG5vZGUpO1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xuICAgIGlmIChrZXkgPT09IFwic3BhblwiKSBjb250aW51ZTtcbiAgICBjb25zdCB2YWwgPSBub2RlW2tleV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbCkgd2Fsa0FTVChpdGVtLCB2aXNpdG9yKTtcbiAgICB9IGVsc2UgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB3YWxrQVNUKHZhbCwgdmlzaXRvcik7XG4gICAgfVxuICB9XG59XG5cbi8qKiBFeHRyYWN0IEBwYXRoc2NhbGUvdWkgaW1wb3J0cyBmcm9tIGEgcGFyc2VkIG1vZHVsZSAqL1xuZnVuY3Rpb24gZXh0cmFjdFVJSW1wb3J0cyhhc3Q6IGFueSk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBpbXBvcnRzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBub2RlIG9mIGFzdC5ib2R5KSB7XG4gICAgaWYgKG5vZGUudHlwZSAhPT0gXCJJbXBvcnREZWNsYXJhdGlvblwiKSBjb250aW51ZTtcbiAgICBjb25zdCBzcmMgPSBub2RlLnNvdXJjZT8udmFsdWUgYXMgc3RyaW5nO1xuICAgIGlmICghc3JjIHx8ICFzcmMuc3RhcnRzV2l0aChcIkBwYXRoc2NhbGUvdWlcIikpIGNvbnRpbnVlO1xuXG4gICAgZm9yIChjb25zdCBzcGVjIG9mIG5vZGUuc3BlY2lmaWVycykge1xuICAgICAgaWYgKHNwZWMudHlwZSA9PT0gXCJJbXBvcnRTcGVjaWZpZXJcIikge1xuICAgICAgICBjb25zdCBpbXBvcnRlZCA9IHNwZWMuaW1wb3J0ZWQ/LnZhbHVlID8/IHNwZWMubG9jYWw/LnZhbHVlO1xuICAgICAgICBjb25zdCBsb2NhbCA9IHNwZWMubG9jYWw/LnZhbHVlO1xuICAgICAgICBpZiAobG9jYWwgJiYgaW1wb3J0ZWQpIGltcG9ydHMuc2V0KGxvY2FsLCBpbXBvcnRlZCk7XG4gICAgICB9IGVsc2UgaWYgKHNwZWMudHlwZSA9PT0gXCJJbXBvcnREZWZhdWx0U3BlY2lmaWVyXCIpIHtcbiAgICAgICAgY29uc3QgbG9jYWwgPSBzcGVjLmxvY2FsPy52YWx1ZTtcbiAgICAgICAgaWYgKGxvY2FsKSBpbXBvcnRzLnNldChsb2NhbCwgbG9jYWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gaW1wb3J0cztcbn1cblxuLyoqIEV4dHJhY3QgSlNYIHVzYWdlcyBvZiBVSSBjb21wb25lbnRzICovXG5mdW5jdGlvbiBleHRyYWN0SlNYVXNhZ2VzKGFzdDogYW55LCB1aUNvbXBvbmVudHM6IE1hcDxzdHJpbmcsIHN0cmluZz4pOiBQcm9wVXNhZ2VbXSB7XG4gIGNvbnN0IHVzYWdlczogUHJvcFVzYWdlW10gPSBbXTtcblxuICB3YWxrQVNUKGFzdCwgKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlICE9PSBcIkpTWE9wZW5pbmdFbGVtZW50XCIpIHJldHVybjtcblxuICAgIGxldCBlbGVtZW50TmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IHJvb3ROYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIGlmIChub2RlLm5hbWU/LnR5cGUgPT09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgICBlbGVtZW50TmFtZSA9IG5vZGUubmFtZS52YWx1ZTtcbiAgICAgIHJvb3ROYW1lID0gZWxlbWVudE5hbWU7XG4gICAgfSBlbHNlIGlmIChub2RlLm5hbWU/LnR5cGUgPT09IFwiSlNYTWVtYmVyRXhwcmVzc2lvblwiKSB7XG4gICAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICAgIGxldCBjdXJzb3IgPSBub2RlLm5hbWU7XG4gICAgICB3aGlsZSAoY3Vyc29yPy50eXBlID09PSBcIkpTWE1lbWJlckV4cHJlc3Npb25cIikge1xuICAgICAgICBwYXJ0cy51bnNoaWZ0KGN1cnNvci5wcm9wZXJ0eT8udmFsdWUpO1xuICAgICAgICBjdXJzb3IgPSBjdXJzb3Iub2JqZWN0O1xuICAgICAgfVxuICAgICAgaWYgKGN1cnNvcj8udHlwZSA9PT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICAgICAgcGFydHMudW5zaGlmdChjdXJzb3IudmFsdWUpO1xuICAgICAgICByb290TmFtZSA9IGN1cnNvci52YWx1ZTtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnROYW1lID0gcGFydHMuam9pbihcIi5cIik7XG4gICAgfVxuXG4gICAgaWYgKCFyb290TmFtZSB8fCAhdWlDb21wb25lbnRzLmhhcyhyb290TmFtZSkpIHJldHVybjtcblxuICAgIGNvbnN0IHVzYWdlOiBQcm9wVXNhZ2UgPSB7XG4gICAgICBjb21wb25lbnQ6IGVsZW1lbnROYW1lISxcbiAgICAgIHByb3BzOiBuZXcgTWFwKCksXG4gICAgICBib29sZWFuUHJvcHM6IG5ldyBTZXQoKSxcbiAgICAgIGhhc1NwcmVhZDogZmFsc2UsXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgYXR0ciBvZiBub2RlLmF0dHJpYnV0ZXMgfHwgW10pIHtcbiAgICAgIGlmIChhdHRyLnR5cGUgPT09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGF0dHIudHlwZSA9PT0gXCJKU1hTcHJlYWRBdHRyaWJ1dGVcIikge1xuICAgICAgICB1c2FnZS5oYXNTcHJlYWQgPSB0cnVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChhdHRyLnR5cGUgIT09IFwiSlNYQXR0cmlidXRlXCIpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBwcm9wTmFtZSA9IGF0dHIubmFtZT8udmFsdWU7XG4gICAgICBpZiAoIXByb3BOYW1lKSBjb250aW51ZTtcblxuICAgICAgaWYgKCFhdHRyLnZhbHVlKSB7XG4gICAgICAgIHVzYWdlLmJvb2xlYW5Qcm9wcy5hZGQocHJvcE5hbWUpO1xuICAgICAgfSBlbHNlIGlmIChhdHRyLnZhbHVlLnR5cGUgPT09IFwiU3RyaW5nTGl0ZXJhbFwiKSB7XG4gICAgICAgIHVzYWdlLnByb3BzLnNldChwcm9wTmFtZSwgYXR0ci52YWx1ZS52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1c2FnZS5wcm9wcy5zZXQocHJvcE5hbWUsIFwiRFlOQU1JQ1wiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1c2FnZXMucHVzaCh1c2FnZSk7XG4gIH0pO1xuXG4gIHJldHVybiB1c2FnZXM7XG59XG5cbi8vIOKUgOKUgCBTYWZlbGlzdCBidWlsZGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5pbnRlcmZhY2UgU2FmZWxpc3RzIHtcbiAgY2xhc3NTYWZlbGlzdDogU2V0PHN0cmluZz47XG4gIGF0dHJTYWZlbGlzdDogU2V0PHN0cmluZz47XG59XG5cbmZ1bmN0aW9uIGJ1aWxkU2FmZWxpc3RzKFxuICBhbGxVc2FnZXM6IFByb3BVc2FnZVtdLFxuICBtYW5pZmVzdDogUHVyZ2VNYW5pZmVzdCxcbik6IFNhZmVsaXN0cyB7XG4gIGNvbnN0IGNsYXNzU2FmZWxpc3QgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgYXR0clNhZmVsaXN0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgY29uc3QgY29tcG9uZW50VXNhZ2VzID0gbmV3IE1hcDxzdHJpbmcsIFByb3BVc2FnZVtdPigpO1xuICBmb3IgKGNvbnN0IHVzYWdlIG9mIGFsbFVzYWdlcykge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gY29tcG9uZW50VXNhZ2VzLmdldCh1c2FnZS5jb21wb25lbnQpID8/IFtdO1xuICAgIGV4aXN0aW5nLnB1c2godXNhZ2UpO1xuICAgIGNvbXBvbmVudFVzYWdlcy5zZXQodXNhZ2UuY29tcG9uZW50LCBleGlzdGluZyk7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtlbnRyeU5hbWUsIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhtYW5pZmVzdCkpIHtcbiAgICBjb25zdCBtYXRjaGluZ1VzYWdlcyA9IGZpbmRNYXRjaGluZ1VzYWdlcyhlbnRyeU5hbWUsIGNvbXBvbmVudFVzYWdlcyk7XG5cbiAgICBpZiAobWF0Y2hpbmdVc2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNscyBvZiBlbnRyeS5jbGFzc2VzLmFsd2F5cykge1xuICAgICAgY2xhc3NTYWZlbGlzdC5hZGQoY2xzKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtwcm9wT3JTbG90LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZW50cnkuY2xhc3Nlcy5ieVByb3ApKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKGlzUHJvcFVzZWQocHJvcE9yU2xvdCwgbWF0Y2hpbmdVc2FnZXMpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjbHMgb2YgdmFsdWUpIGNsYXNzU2FmZWxpc3QuYWRkKGNscyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHVzZWRWYWx1ZXMgPSBnZXRVc2VkRW51bVZhbHVlcyhwcm9wT3JTbG90LCBtYXRjaGluZ1VzYWdlcyk7XG4gICAgICAgIGlmICh1c2VkVmFsdWVzID09PSBcIkFMTFwiKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjbGFzc2VzIG9mIE9iamVjdC52YWx1ZXModmFsdWUpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNscyBvZiBjbGFzc2VzKSBjbGFzc1NhZmVsaXN0LmFkZChjbHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiB1c2VkVmFsdWVzKSB7XG4gICAgICAgICAgICBpZiAodmFsdWVbdmFsXSkge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNscyBvZiB2YWx1ZVt2YWxdKSBjbGFzc1NhZmVsaXN0LmFkZChjbHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbnRyeS5hdHRycykge1xuICAgICAgZm9yIChjb25zdCBbcHJvcE5hbWUsIGF0dHJNYXBdIG9mIE9iamVjdC5lbnRyaWVzKGVudHJ5LmF0dHJzKSkge1xuICAgICAgICBpZiAoaXNQcm9wVXNlZChwcm9wTmFtZSwgbWF0Y2hpbmdVc2FnZXMpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBbYXR0ciwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRyTWFwKSkge1xuICAgICAgICAgICAgYXR0clNhZmVsaXN0LmFkZChgJHthdHRyfT0ke3ZhbH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBjbGFzc1NhZmVsaXN0LCBhdHRyU2FmZWxpc3QgfTtcbn1cblxuZnVuY3Rpb24gZmluZE1hdGNoaW5nVXNhZ2VzKFxuICBlbnRyeU5hbWU6IHN0cmluZyxcbiAgdXNhZ2VNYXA6IE1hcDxzdHJpbmcsIFByb3BVc2FnZVtdPixcbik6IFByb3BVc2FnZVtdIHtcbiAgaWYgKHVzYWdlTWFwLmhhcyhlbnRyeU5hbWUpKSB7XG4gICAgcmV0dXJuIHVzYWdlTWFwLmdldChlbnRyeU5hbWUpITtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdHM6IFByb3BVc2FnZVtdID0gW107XG4gIGZvciAoY29uc3QgW3VzYWdlTmFtZSwgdXNhZ2VzXSBvZiB1c2FnZU1hcCkge1xuICAgIGlmICh1c2FnZU5hbWUgPT09IGVudHJ5TmFtZSkge1xuICAgICAgcmVzdWx0cy5wdXNoKC4uLnVzYWdlcyk7XG4gICAgfVxuICAgIGlmIChlbnRyeU5hbWUuaW5jbHVkZXMoXCIuXCIpKSB7XG4gICAgICBjb25zdCBbZmFtaWx5LCBwYXJ0XSA9IGVudHJ5TmFtZS5zcGxpdChcIi5cIik7XG4gICAgICBpZiAocGFydCA9PT0gZmFtaWx5ICYmIHVzYWdlTmFtZSA9PT0gZmFtaWx5KSB7XG4gICAgICAgIHJlc3VsdHMucHVzaCguLi51c2FnZXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gaXNQcm9wVXNlZChwcm9wTmFtZTogc3RyaW5nLCB1c2FnZXM6IFByb3BVc2FnZVtdKTogYm9vbGVhbiB7XG4gIGZvciAoY29uc3QgdXNhZ2Ugb2YgdXNhZ2VzKSB7XG4gICAgaWYgKHVzYWdlLmhhc1NwcmVhZCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHVzYWdlLmJvb2xlYW5Qcm9wcy5oYXMocHJvcE5hbWUpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodXNhZ2UucHJvcHMuaGFzKHByb3BOYW1lKSkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRVc2VkRW51bVZhbHVlcyhzbG90TmFtZTogc3RyaW5nLCB1c2FnZXM6IFByb3BVc2FnZVtdKTogU2V0PHN0cmluZz4gfCBcIkFMTFwiIHtcbiAgY29uc3QgdmFsdWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgdXNhZ2Ugb2YgdXNhZ2VzKSB7XG4gICAgaWYgKHVzYWdlLmhhc1NwcmVhZCkgcmV0dXJuIFwiQUxMXCI7XG4gICAgY29uc3QgdmFsID0gdXNhZ2UucHJvcHMuZ2V0KHNsb3ROYW1lKTtcbiAgICBpZiAodmFsID09PSBcIkRZTkFNSUNcIikgcmV0dXJuIFwiQUxMXCI7XG4gICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB2YWx1ZXMuYWRkKHZhbCk7XG4gICAgaWYgKHVzYWdlLmJvb2xlYW5Qcm9wcy5oYXMoc2xvdE5hbWUpKSByZXR1cm4gXCJBTExcIjtcbiAgfVxuICByZXR1cm4gdmFsdWVzO1xufVxuXG4vLyDilIDilIAgQ29uc3VtZXIgc291cmNlIHNjYW5uaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5hc3luYyBmdW5jdGlvbiBzY2FuQ29uc3VtZXJTb3VyY2Uoc3JjRGlyOiBzdHJpbmcpOiBQcm9taXNlPFByb3BVc2FnZVtdPiB7XG4gIGNvbnN0IGFsbFVzYWdlczogUHJvcFVzYWdlW10gPSBbXTtcbiAgY29uc3QgZ2xvYiA9IG5ldyBHbG9iKFwiKiovKi57dHN4LHRzLGpzeCxqc31cIik7XG5cbiAgZm9yIGF3YWl0IChjb25zdCByZWxQYXRoIG9mIGdsb2Iuc2Nhbih7IGN3ZDogc3JjRGlyIH0pKSB7XG4gICAgaWYgKHJlbFBhdGguaW5jbHVkZXMoXCJub2RlX21vZHVsZXNcIikpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKHNyY0RpciwgcmVsUGF0aCk7XG4gICAgY29uc3QgY29kZSA9IGF3YWl0IEJ1bi5maWxlKGZ1bGxQYXRoKS50ZXh0KCk7XG4gICAgaWYgKCFjb2RlLmluY2x1ZGVzKFwiQHBhdGhzY2FsZS91aVwiKSkgY29udGludWU7XG5cbiAgICBjb25zdCBpc1RzeCA9IC9cXC5bdGpdc3gkLy50ZXN0KHJlbFBhdGgpO1xuICAgIGNvbnN0IGFzdCA9IGF3YWl0IHN3Yy5wYXJzZShjb2RlLCB7IHN5bnRheDogXCJ0eXBlc2NyaXB0XCIsIHRzeDogaXNUc3ggfSk7XG4gICAgY29uc3QgdWlJbXBvcnRzID0gZXh0cmFjdFVJSW1wb3J0cyhhc3QpO1xuICAgIGlmICh1aUltcG9ydHMuc2l6ZSA9PT0gMCkgY29udGludWU7XG5cbiAgICBhbGxVc2FnZXMucHVzaCguLi5leHRyYWN0SlNYVXNhZ2VzKGFzdCwgdWlJbXBvcnRzKSk7XG4gIH1cblxuICByZXR1cm4gYWxsVXNhZ2VzO1xufVxuXG4vLyDilIDilIAgTWFpbiAoc3RhbmRhbG9uZSBDTEkpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICBjb25zdCBbc3JjRGlyLCBtYW5pZmVzdFBhdGhdID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpO1xuICBpZiAoIXNyY0RpciB8fCAhbWFuaWZlc3RQYXRoKSB7XG4gICAgY29uc29sZS5lcnJvcihcIlVzYWdlOiBidW4gcnVuIHNyYy9zY2FuLWNvbnN1bWVyLnRzIDxjb25zdW1lci1zcmMtZGlyPiA8cHVyZ2UtbWFuaWZlc3QuanNvbj5cIik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgY29uc3QgbWFuaWZlc3Q6IFB1cmdlTWFuaWZlc3QgPSBKU09OLnBhcnNlKFxuICAgIGF3YWl0IEJ1bi5maWxlKG1hbmlmZXN0UGF0aCkudGV4dCgpLFxuICApO1xuICBjb25zdCByZXNvbHZlZFNyYyA9IHBhdGgucmVzb2x2ZShzcmNEaXIpO1xuICBjb25zb2xlLmxvZyhgU2Nhbm5pbmcgJHtyZXNvbHZlZFNyY30gZm9yIEBwYXRoc2NhbGUvdWkgY29tcG9uZW50IHVzYWdl4oCmYCk7XG4gIGNvbnNvbGUubG9nKGBNYW5pZmVzdDogJHtPYmplY3Qua2V5cyhtYW5pZmVzdCkubGVuZ3RofSBlbnRyaWVzXFxuYCk7XG5cbiAgY29uc3QgdXNhZ2VzID0gYXdhaXQgc2NhbkNvbnN1bWVyU291cmNlKHJlc29sdmVkU3JjKTtcbiAgY29uc3QgeyBjbGFzc1NhZmVsaXN0LCBhdHRyU2FmZWxpc3QgfSA9IGJ1aWxkU2FmZWxpc3RzKHVzYWdlcywgbWFuaWZlc3QpO1xuXG4gIGNvbnNvbGUubG9nKFwiPT09IENsYXNzIFNhZmVsaXN0ID09PVwiKTtcbiAgZm9yIChjb25zdCBjbHMgb2YgWy4uLmNsYXNzU2FmZWxpc3RdLnNvcnQoKSkge1xuICAgIGNvbnNvbGUubG9nKGAgICR7Y2xzfWApO1xuICB9XG5cbiAgY29uc29sZS5sb2coYFxcbj09PSBBdHRyaWJ1dGUgU2FmZWxpc3QgPT09YCk7XG4gIGZvciAoY29uc3QgYXR0ciBvZiBbLi4uYXR0clNhZmVsaXN0XS5zb3J0KCkpIHtcbiAgICBjb25zb2xlLmxvZyhgICBbJHthdHRyfV1gKTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKGBcXG5Ub3RhbDogJHtjbGFzc1NhZmVsaXN0LnNpemV9IGNsYXNzZXMsICR7YXR0clNhZmVsaXN0LnNpemV9IGF0dHJpYnV0ZSBzZWxlY3RvcnNgKTtcbn1cblxuLy8gT25seSBydW4gQ0xJIHdoZW4gaW52b2tlZCBkaXJlY3RseSAobm90IHdoZW4gaW1wb3J0ZWQgYXMgYSBtb2R1bGUpXG5pZiAoaW1wb3J0Lm1ldGEubWFpbikge1xuICBtYWluKCk7XG59XG5cbmV4cG9ydCB7IGV4dHJhY3RVSUltcG9ydHMsIGV4dHJhY3RKU1hVc2FnZXMsIGJ1aWxkU2FmZWxpc3RzLCBzY2FuQ29uc3VtZXJTb3VyY2UgfTtcbmV4cG9ydCB0eXBlIHsgUHJvcFVzYWdlLCBQdXJnZU1hbmlmZXN0LCBDb21wb25lbnRNYW5pZmVzdCwgU2FmZWxpc3RzIH07XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVVBO0FBQ0E7QUFDQTtBQXlCQSxTQUFTLE9BQU8sQ0FBQyxNQUFXLFNBQThCO0FBQUEsRUFDeEQsSUFBSSxDQUFDLFFBQVEsT0FBTyxTQUFTO0FBQUEsSUFBVTtBQUFBLEVBQ3ZDLFFBQVEsSUFBSTtBQUFBLEVBQ1osV0FBVyxPQUFPLE9BQU8sS0FBSyxJQUFJLEdBQUc7QUFBQSxJQUNuQyxJQUFJLFFBQVE7QUFBQSxNQUFRO0FBQUEsSUFDcEIsTUFBTSxNQUFNLEtBQUs7QUFBQSxJQUNqQixJQUFJLE1BQU0sUUFBUSxHQUFHLEdBQUc7QUFBQSxNQUN0QixXQUFXLFFBQVE7QUFBQSxRQUFLLFFBQVEsTUFBTSxPQUFPO0FBQUEsSUFDL0MsRUFBTyxTQUFJLE9BQU8sT0FBTyxRQUFRLFVBQVU7QUFBQSxNQUN6QyxR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QVMsUUFBUTtBQUFBLElBQzFCLElBQUksTUFBTTtBQUFBLE1BQVcsT0FBTztBQUFBLElBQzVCLElBQUksTUFBTSxhQUFhLElBQUksUUFBUTtBQUFBLE1BQUcsT0FBTztBQUFBLElBQzdDLElBQUksTUFBTSxNQUFNLElBQUksUUFBUTtBQUFBLE1BQUcsT0FBTztBQUFBLEVBQ3hDO0FBQUEsRUFDQSxPQUFPO0FBQUE7QUFHVCxTQUFTLGlCQUFpQixDQUFDLFVBQWtCLFFBQTBDO0FBQUEsRUFDckYsTUFBTSxTQUFTLElBQUk7QUFBQSxFQUNuQixXQUFXLFNBQVMsUUFBUTtBQUFBLElBQzFCLElBQUksTUFBTTtBQUFBLE1BQVcsT0FBTztBQUFBLElBQzVCLE1BQU0sTUFBTSxNQUFNLE1BQU0sSUFBSSxRQUFRO0FBQUEsSUFDcEMsSUFBSSxRQUFRO0FBQUEsTUFBVyxPQUFPO0FBQUEsSUFDOUIsSUFBSSxRQUFRO0FBQUEsTUFBVyxPQUFPLElBQUksR0FBRztBQUFBLElBQ3JDLElBQUksTUFBTSxhQUFhLElBQUksUUFBUTtBQUFBLE1BQUcsT0FBTztBQUFBLEVBQy9DO0FBQUEsRUFDQSxPQUFPO0FBQUE7QUFLVCxlQUFlLGtCQUFrQixDQUFDLFFBQXNDO0FBQUEsRUFDdEUsTUFBTSxZQUF5QixDQUFDO0FBQUEsRUFDaEMsTUFBTSxPQUFPLElBQUksS0FBSyxzQkFBc0I7QUFBQSxFQUU1QyxpQkFBaUIsV0FBVyxLQUFLLEtBQUssRUFBRSxLQUFLLE9BQU8sQ0FBQyxHQUFHO0FBQUEsSUFDdEQsSUFBSSxRQUFRLFNBQVMsY0FBYztBQUFBLE1BQUc7QUFBQSxJQUN0QyxNQUFNLFdBQVcsS0FBSyxLQUFLLFFBQVEsT0FBTztBQUFBLElBQzFDLE1BQU0sT0FBTyxNQUFNLElBQUksS0FBSyxRQUFRLEVBQUUsS0FBSztBQUFBLElBQzNDLElBQUksQ0FBQyxLQUFLLFNBQVMsZUFBZTtBQUFBLE1BQUc7QUFBQSxJQUVyQyxNQUFNLFFBQVEsWUFBWSxLQUFLLE9BQU87QUFBQSxJQUN0QyxNQUFNLE1BQU0sTUFBTSxJQUFJLE1BQU0sTUFBTSxFQUFFLFFBQVEsY0FBYyxLQUFLLE1BQU0sQ0FBQztBQUFBLElBQ3RFLE1BQU0sWUFBWSxpQkFBaUIsR0FBRztBQUFBLElBQ3RDLElBQUksVUFBVSxTQUFTO0FBQUEsTUFBRztBQUFBLElBRTFCLFVBQVUsS0FBSyxHQUFHLGlCQUFpQixLQUFLLFNBQVMsQ0FBQztBQUFBLEVBQ3BEO0FBQUEsRUFFQSxPQUFPO0FBQUE7QUFvQ1QsSUFBSSxPQUFrQixDQUV0QjsiLAogICJkZWJ1Z0lkIjogIjU1MDk1NEFBNDQzQUQ4RjA2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
240
+ //# debugId=03882833FBB839E664756E2164756E21
241
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3NjYW4tY29uc3VtZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiLyoqXG4gKiBDb25zdW1lci1zaWRlIEpTWCBzY2FubmVyLlxuICpcbiAqIFdhbGtzIGEgY29uc3VtZXIncyBzb3VyY2UgdHJlZSwgZmluZHMgY29tcG9uZW50IGltcG9ydHMgZnJvbSBAcGF0aHNjYWxlL3VpLFxuICogY29sbGVjdHMgcHJvcCB2YWx1ZXMsIGFuZCBjcm9zcy1yZWZlcmVuY2VzIHdpdGggdGhlIHB1cmdlIG1hbmlmZXN0IHRvIGJ1aWxkXG4gKiBMZXZlbCAxIChjbGFzcykgYW5kIExldmVsIDIgKGF0dHJpYnV0ZSkgc2FmZWxpc3RzLlxuICpcbiAqIFVzYWdlOiAgYnVuIHJ1biBzcmMvc2Nhbi1jb25zdW1lci50cyA8Y29uc3VtZXItc3JjLWRpcj4gPHB1cmdlLW1hbmlmZXN0Lmpzb24+XG4gKi9cblxuaW1wb3J0IHN3YyBmcm9tIFwiQHN3Yy9jb3JlXCI7XG5pbXBvcnQgeyBHbG9iIH0gZnJvbSBcImJ1blwiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuLy8g4pSA4pSAIFR5cGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5pbnRlcmZhY2UgQ29tcG9uZW50TWFuaWZlc3Qge1xuICBjbGFzc2VzOiB7XG4gICAgYWx3YXlzOiBzdHJpbmdbXTtcbiAgICBieVByb3A6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nW10+PjtcbiAgfTtcbiAgYXR0cnM/OiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcbiAgZGVwcz86IHN0cmluZ1tdO1xufVxuXG50eXBlIFB1cmdlTWFuaWZlc3QgPSBSZWNvcmQ8c3RyaW5nLCBDb21wb25lbnRNYW5pZmVzdD47XG5cbi8qKiBXaGF0IHdlIGNvbGxlY3QgcGVyIGNvbXBvbmVudCB1c2FnZSBmcm9tIEpTWCAqL1xuaW50ZXJmYWNlIFByb3BVc2FnZSB7XG4gIGNvbXBvbmVudDogc3RyaW5nO1xuICBwcm9wczogTWFwPHN0cmluZywgc3RyaW5nIHwgXCJEWU5BTUlDXCI+OyAvLyBwcm9wTmFtZSDihpIgbGl0ZXJhbCB2YWx1ZSBvciBEWU5BTUlDXG4gIGJvb2xlYW5Qcm9wczogU2V0PHN0cmluZz47IC8vIHByb3BzIHByZXNlbnQgd2l0aG91dCBhIHZhbHVlICh0cnV0aHkpXG4gIGhhc1NwcmVhZDogYm9vbGVhbjtcbn1cblxuLy8g4pSA4pSAIEFTVCB3YWxrZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIHdhbGtBU1Qobm9kZTogYW55LCB2aXNpdG9yOiAobm9kZTogYW55KSA9PiB2b2lkKSB7XG4gIGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuO1xuICB2aXNpdG9yKG5vZGUpO1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xuICAgIGlmIChrZXkgPT09IFwic3BhblwiKSBjb250aW51ZTtcbiAgICBjb25zdCB2YWwgPSBub2RlW2tleV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbCkgd2Fsa0FTVChpdGVtLCB2aXNpdG9yKTtcbiAgICB9IGVsc2UgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB3YWxrQVNUKHZhbCwgdmlzaXRvcik7XG4gICAgfVxuICB9XG59XG5cbi8qKiBFeHRyYWN0IEBwYXRoc2NhbGUvdWkgaW1wb3J0cyBmcm9tIGEgcGFyc2VkIG1vZHVsZSAqL1xuZnVuY3Rpb24gZXh0cmFjdFVJSW1wb3J0cyhhc3Q6IGFueSk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBpbXBvcnRzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBub2RlIG9mIGFzdC5ib2R5KSB7XG4gICAgaWYgKG5vZGUudHlwZSAhPT0gXCJJbXBvcnREZWNsYXJhdGlvblwiKSBjb250aW51ZTtcbiAgICBjb25zdCBzcmMgPSBub2RlLnNvdXJjZT8udmFsdWUgYXMgc3RyaW5nO1xuICAgIGlmICghc3JjIHx8ICFzcmMuc3RhcnRzV2l0aChcIkBwYXRoc2NhbGUvdWlcIikpIGNvbnRpbnVlO1xuXG4gICAgZm9yIChjb25zdCBzcGVjIG9mIG5vZGUuc3BlY2lmaWVycykge1xuICAgICAgaWYgKHNwZWMudHlwZSA9PT0gXCJJbXBvcnRTcGVjaWZpZXJcIikge1xuICAgICAgICBjb25zdCBpbXBvcnRlZCA9IHNwZWMuaW1wb3J0ZWQ/LnZhbHVlID8/IHNwZWMubG9jYWw/LnZhbHVlO1xuICAgICAgICBjb25zdCBsb2NhbCA9IHNwZWMubG9jYWw/LnZhbHVlO1xuICAgICAgICBpZiAobG9jYWwgJiYgaW1wb3J0ZWQpIGltcG9ydHMuc2V0KGxvY2FsLCBpbXBvcnRlZCk7XG4gICAgICB9IGVsc2UgaWYgKHNwZWMudHlwZSA9PT0gXCJJbXBvcnREZWZhdWx0U3BlY2lmaWVyXCIpIHtcbiAgICAgICAgY29uc3QgbG9jYWwgPSBzcGVjLmxvY2FsPy52YWx1ZTtcbiAgICAgICAgaWYgKGxvY2FsKSBpbXBvcnRzLnNldChsb2NhbCwgbG9jYWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gaW1wb3J0cztcbn1cblxuLyoqIEV4dHJhY3QgSlNYIHVzYWdlcyBvZiBVSSBjb21wb25lbnRzICovXG5mdW5jdGlvbiBleHRyYWN0SlNYVXNhZ2VzKGFzdDogYW55LCB1aUNvbXBvbmVudHM6IE1hcDxzdHJpbmcsIHN0cmluZz4pOiBQcm9wVXNhZ2VbXSB7XG4gIGNvbnN0IHVzYWdlczogUHJvcFVzYWdlW10gPSBbXTtcblxuICB3YWxrQVNUKGFzdCwgKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlICE9PSBcIkpTWE9wZW5pbmdFbGVtZW50XCIpIHJldHVybjtcblxuICAgIGxldCBlbGVtZW50TmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IHJvb3ROYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIGlmIChub2RlLm5hbWU/LnR5cGUgPT09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgICBlbGVtZW50TmFtZSA9IG5vZGUubmFtZS52YWx1ZTtcbiAgICAgIHJvb3ROYW1lID0gZWxlbWVudE5hbWU7XG4gICAgfSBlbHNlIGlmIChub2RlLm5hbWU/LnR5cGUgPT09IFwiSlNYTWVtYmVyRXhwcmVzc2lvblwiKSB7XG4gICAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICAgIGxldCBjdXJzb3IgPSBub2RlLm5hbWU7XG4gICAgICB3aGlsZSAoY3Vyc29yPy50eXBlID09PSBcIkpTWE1lbWJlckV4cHJlc3Npb25cIikge1xuICAgICAgICBwYXJ0cy51bnNoaWZ0KGN1cnNvci5wcm9wZXJ0eT8udmFsdWUpO1xuICAgICAgICBjdXJzb3IgPSBjdXJzb3Iub2JqZWN0O1xuICAgICAgfVxuICAgICAgaWYgKGN1cnNvcj8udHlwZSA9PT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICAgICAgcGFydHMudW5zaGlmdChjdXJzb3IudmFsdWUpO1xuICAgICAgICByb290TmFtZSA9IGN1cnNvci52YWx1ZTtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnROYW1lID0gcGFydHMuam9pbihcIi5cIik7XG4gICAgfVxuXG4gICAgaWYgKCFyb290TmFtZSB8fCAhdWlDb21wb25lbnRzLmhhcyhyb290TmFtZSkpIHJldHVybjtcblxuICAgIGNvbnN0IHVzYWdlOiBQcm9wVXNhZ2UgPSB7XG4gICAgICBjb21wb25lbnQ6IGVsZW1lbnROYW1lISxcbiAgICAgIHByb3BzOiBuZXcgTWFwKCksXG4gICAgICBib29sZWFuUHJvcHM6IG5ldyBTZXQoKSxcbiAgICAgIGhhc1NwcmVhZDogZmFsc2UsXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgYXR0ciBvZiBub2RlLmF0dHJpYnV0ZXMgfHwgW10pIHtcbiAgICAgIGlmIChhdHRyLnR5cGUgPT09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGF0dHIudHlwZSA9PT0gXCJKU1hTcHJlYWRBdHRyaWJ1dGVcIikge1xuICAgICAgICB1c2FnZS5oYXNTcHJlYWQgPSB0cnVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChhdHRyLnR5cGUgIT09IFwiSlNYQXR0cmlidXRlXCIpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBwcm9wTmFtZSA9IGF0dHIubmFtZT8udmFsdWU7XG4gICAgICBpZiAoIXByb3BOYW1lKSBjb250aW51ZTtcblxuICAgICAgaWYgKCFhdHRyLnZhbHVlKSB7XG4gICAgICAgIHVzYWdlLmJvb2xlYW5Qcm9wcy5hZGQocHJvcE5hbWUpO1xuICAgICAgfSBlbHNlIGlmIChhdHRyLnZhbHVlLnR5cGUgPT09IFwiU3RyaW5nTGl0ZXJhbFwiKSB7XG4gICAgICAgIHVzYWdlLnByb3BzLnNldChwcm9wTmFtZSwgYXR0ci52YWx1ZS52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1c2FnZS5wcm9wcy5zZXQocHJvcE5hbWUsIFwiRFlOQU1JQ1wiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1c2FnZXMucHVzaCh1c2FnZSk7XG4gIH0pO1xuXG4gIHJldHVybiB1c2FnZXM7XG59XG5cbi8vIOKUgOKUgCBTYWZlbGlzdCBidWlsZGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5pbnRlcmZhY2UgU2FmZWxpc3RzIHtcbiAgY2xhc3NTYWZlbGlzdDogU2V0PHN0cmluZz47XG4gIGF0dHJTYWZlbGlzdDogU2V0PHN0cmluZz47XG59XG5cbmZ1bmN0aW9uIGJ1aWxkU2FmZWxpc3RzKFxuICBhbGxVc2FnZXM6IFByb3BVc2FnZVtdLFxuICBtYW5pZmVzdDogUHVyZ2VNYW5pZmVzdCxcbik6IFNhZmVsaXN0cyB7XG4gIGNvbnN0IGNsYXNzU2FmZWxpc3QgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgYXR0clNhZmVsaXN0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgY29uc3QgY29tcG9uZW50VXNhZ2VzID0gbmV3IE1hcDxzdHJpbmcsIFByb3BVc2FnZVtdPigpO1xuICBmb3IgKGNvbnN0IHVzYWdlIG9mIGFsbFVzYWdlcykge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gY29tcG9uZW50VXNhZ2VzLmdldCh1c2FnZS5jb21wb25lbnQpID8/IFtdO1xuICAgIGV4aXN0aW5nLnB1c2godXNhZ2UpO1xuICAgIGNvbXBvbmVudFVzYWdlcy5zZXQodXNhZ2UuY29tcG9uZW50LCBleGlzdGluZyk7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtlbnRyeU5hbWUsIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhtYW5pZmVzdCkpIHtcbiAgICBjb25zdCBtYXRjaGluZ1VzYWdlcyA9IGZpbmRNYXRjaGluZ1VzYWdlcyhlbnRyeU5hbWUsIGNvbXBvbmVudFVzYWdlcyk7XG5cbiAgICBpZiAobWF0Y2hpbmdVc2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNscyBvZiBlbnRyeS5jbGFzc2VzLmFsd2F5cykge1xuICAgICAgY2xhc3NTYWZlbGlzdC5hZGQoY2xzKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtwcm9wT3JTbG90LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZW50cnkuY2xhc3Nlcy5ieVByb3ApKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKGlzUHJvcFVzZWQocHJvcE9yU2xvdCwgbWF0Y2hpbmdVc2FnZXMpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjbHMgb2YgdmFsdWUpIGNsYXNzU2FmZWxpc3QuYWRkKGNscyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHVzZWRWYWx1ZXMgPSBnZXRVc2VkRW51bVZhbHVlcyhwcm9wT3JTbG90LCBtYXRjaGluZ1VzYWdlcyk7XG4gICAgICAgIGlmICh1c2VkVmFsdWVzID09PSBcIkFMTFwiKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjbGFzc2VzIG9mIE9iamVjdC52YWx1ZXModmFsdWUpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNscyBvZiBjbGFzc2VzKSBjbGFzc1NhZmVsaXN0LmFkZChjbHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiB1c2VkVmFsdWVzKSB7XG4gICAgICAgICAgICBpZiAodmFsdWVbdmFsXSkge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNscyBvZiB2YWx1ZVt2YWxdKSBjbGFzc1NhZmVsaXN0LmFkZChjbHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbnRyeS5hdHRycykge1xuICAgICAgZm9yIChjb25zdCBbcHJvcE5hbWUsIGF0dHJNYXBdIG9mIE9iamVjdC5lbnRyaWVzKGVudHJ5LmF0dHJzKSkge1xuICAgICAgICBpZiAoaXNQcm9wVXNlZChwcm9wTmFtZSwgbWF0Y2hpbmdVc2FnZXMpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBbYXR0ciwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRyTWFwKSkge1xuICAgICAgICAgICAgYXR0clNhZmVsaXN0LmFkZChgJHthdHRyfT0ke3ZhbH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBjbGFzc1NhZmVsaXN0LCBhdHRyU2FmZWxpc3QgfTtcbn1cblxuZnVuY3Rpb24gZmluZE1hdGNoaW5nVXNhZ2VzKFxuICBlbnRyeU5hbWU6IHN0cmluZyxcbiAgdXNhZ2VNYXA6IE1hcDxzdHJpbmcsIFByb3BVc2FnZVtdPixcbik6IFByb3BVc2FnZVtdIHtcbiAgaWYgKHVzYWdlTWFwLmhhcyhlbnRyeU5hbWUpKSB7XG4gICAgcmV0dXJuIHVzYWdlTWFwLmdldChlbnRyeU5hbWUpITtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdHM6IFByb3BVc2FnZVtdID0gW107XG4gIGZvciAoY29uc3QgW3VzYWdlTmFtZSwgdXNhZ2VzXSBvZiB1c2FnZU1hcCkge1xuICAgIGlmICh1c2FnZU5hbWUgPT09IGVudHJ5TmFtZSkge1xuICAgICAgcmVzdWx0cy5wdXNoKC4uLnVzYWdlcyk7XG4gICAgfVxuICAgIGlmIChlbnRyeU5hbWUuaW5jbHVkZXMoXCIuXCIpKSB7XG4gICAgICBjb25zdCBbZmFtaWx5LCBwYXJ0XSA9IGVudHJ5TmFtZS5zcGxpdChcIi5cIik7XG4gICAgICBpZiAocGFydCA9PT0gZmFtaWx5ICYmIHVzYWdlTmFtZSA9PT0gZmFtaWx5KSB7XG4gICAgICAgIHJlc3VsdHMucHVzaCguLi51c2FnZXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gaXNQcm9wVXNlZChwcm9wTmFtZTogc3RyaW5nLCB1c2FnZXM6IFByb3BVc2FnZVtdKTogYm9vbGVhbiB7XG4gIGZvciAoY29uc3QgdXNhZ2Ugb2YgdXNhZ2VzKSB7XG4gICAgaWYgKHVzYWdlLmhhc1NwcmVhZCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHVzYWdlLmJvb2xlYW5Qcm9wcy5oYXMocHJvcE5hbWUpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodXNhZ2UucHJvcHMuaGFzKHByb3BOYW1lKSkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRVc2VkRW51bVZhbHVlcyhzbG90TmFtZTogc3RyaW5nLCB1c2FnZXM6IFByb3BVc2FnZVtdKTogU2V0PHN0cmluZz4gfCBcIkFMTFwiIHtcbiAgY29uc3QgdmFsdWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgdXNhZ2Ugb2YgdXNhZ2VzKSB7XG4gICAgaWYgKHVzYWdlLmhhc1NwcmVhZCkgcmV0dXJuIFwiQUxMXCI7XG4gICAgY29uc3QgdmFsID0gdXNhZ2UucHJvcHMuZ2V0KHNsb3ROYW1lKTtcbiAgICBpZiAodmFsID09PSBcIkRZTkFNSUNcIikgcmV0dXJuIFwiQUxMXCI7XG4gICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB2YWx1ZXMuYWRkKHZhbCk7XG4gICAgaWYgKHVzYWdlLmJvb2xlYW5Qcm9wcy5oYXMoc2xvdE5hbWUpKSByZXR1cm4gXCJBTExcIjtcbiAgfVxuICByZXR1cm4gdmFsdWVzO1xufVxuXG4vLyDilIDilIAgQ29uc3VtZXIgc291cmNlIHNjYW5uaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5hc3luYyBmdW5jdGlvbiBzY2FuQ29uc3VtZXJTb3VyY2Uoc3JjRGlyOiBzdHJpbmcpOiBQcm9taXNlPFByb3BVc2FnZVtdPiB7XG4gIGNvbnN0IGFsbFVzYWdlczogUHJvcFVzYWdlW10gPSBbXTtcbiAgY29uc3QgZ2xvYiA9IG5ldyBHbG9iKFwiKiovKi57dHN4LHRzLGpzeCxqc31cIik7XG5cbiAgZm9yIGF3YWl0IChjb25zdCByZWxQYXRoIG9mIGdsb2Iuc2Nhbih7IGN3ZDogc3JjRGlyIH0pKSB7XG4gICAgaWYgKHJlbFBhdGguaW5jbHVkZXMoXCJub2RlX21vZHVsZXNcIikpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKHNyY0RpciwgcmVsUGF0aCk7XG4gICAgY29uc3QgY29kZSA9IGF3YWl0IEJ1bi5maWxlKGZ1bGxQYXRoKS50ZXh0KCk7XG4gICAgaWYgKCFjb2RlLmluY2x1ZGVzKFwiQHBhdGhzY2FsZS91aVwiKSkgY29udGludWU7XG5cbiAgICBjb25zdCBpc1RzeCA9IC9cXC5bdGpdc3gkLy50ZXN0KHJlbFBhdGgpO1xuICAgIGNvbnN0IGFzdCA9IGF3YWl0IHN3Yy5wYXJzZShjb2RlLCB7IHN5bnRheDogXCJ0eXBlc2NyaXB0XCIsIHRzeDogaXNUc3ggfSk7XG4gICAgY29uc3QgdWlJbXBvcnRzID0gZXh0cmFjdFVJSW1wb3J0cyhhc3QpO1xuICAgIGlmICh1aUltcG9ydHMuc2l6ZSA9PT0gMCkgY29udGludWU7XG5cbiAgICBhbGxVc2FnZXMucHVzaCguLi5leHRyYWN0SlNYVXNhZ2VzKGFzdCwgdWlJbXBvcnRzKSk7XG4gIH1cblxuICByZXR1cm4gYWxsVXNhZ2VzO1xufVxuXG4vLyDilIDilIAgTWFpbiAoc3RhbmRhbG9uZSBDTEkpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICBjb25zdCBbc3JjRGlyLCBtYW5pZmVzdFBhdGhdID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpO1xuICBpZiAoIXNyY0RpciB8fCAhbWFuaWZlc3RQYXRoKSB7XG4gICAgY29uc29sZS5lcnJvcihcIlVzYWdlOiBidW4gcnVuIHNyYy9zY2FuLWNvbnN1bWVyLnRzIDxjb25zdW1lci1zcmMtZGlyPiA8cHVyZ2UtbWFuaWZlc3QuanNvbj5cIik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgY29uc3QgbWFuaWZlc3Q6IFB1cmdlTWFuaWZlc3QgPSBKU09OLnBhcnNlKFxuICAgIGF3YWl0IEJ1bi5maWxlKG1hbmlmZXN0UGF0aCkudGV4dCgpLFxuICApO1xuICBjb25zdCByZXNvbHZlZFNyYyA9IHBhdGgucmVzb2x2ZShzcmNEaXIpO1xuICBjb25zb2xlLmxvZyhgU2Nhbm5pbmcgJHtyZXNvbHZlZFNyY30gZm9yIEBwYXRoc2NhbGUvdWkgY29tcG9uZW50IHVzYWdl4oCmYCk7XG4gIGNvbnNvbGUubG9nKGBNYW5pZmVzdDogJHtPYmplY3Qua2V5cyhtYW5pZmVzdCkubGVuZ3RofSBlbnRyaWVzXFxuYCk7XG5cbiAgY29uc3QgdXNhZ2VzID0gYXdhaXQgc2NhbkNvbnN1bWVyU291cmNlKHJlc29sdmVkU3JjKTtcbiAgY29uc3QgeyBjbGFzc1NhZmVsaXN0LCBhdHRyU2FmZWxpc3QgfSA9IGJ1aWxkU2FmZWxpc3RzKHVzYWdlcywgbWFuaWZlc3QpO1xuXG4gIGNvbnNvbGUubG9nKFwiPT09IENsYXNzIFNhZmVsaXN0ID09PVwiKTtcbiAgZm9yIChjb25zdCBjbHMgb2YgWy4uLmNsYXNzU2FmZWxpc3RdLnNvcnQoKSkge1xuICAgIGNvbnNvbGUubG9nKGAgICR7Y2xzfWApO1xuICB9XG5cbiAgY29uc29sZS5sb2coYFxcbj09PSBBdHRyaWJ1dGUgU2FmZWxpc3QgPT09YCk7XG4gIGZvciAoY29uc3QgYXR0ciBvZiBbLi4uYXR0clNhZmVsaXN0XS5zb3J0KCkpIHtcbiAgICBjb25zb2xlLmxvZyhgICBbJHthdHRyfV1gKTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKGBcXG5Ub3RhbDogJHtjbGFzc1NhZmVsaXN0LnNpemV9IGNsYXNzZXMsICR7YXR0clNhZmVsaXN0LnNpemV9IGF0dHJpYnV0ZSBzZWxlY3RvcnNgKTtcbn1cblxuLy8gT25seSBydW4gQ0xJIHdoZW4gaW52b2tlZCBkaXJlY3RseSAobm90IHdoZW4gaW1wb3J0ZWQgYXMgYSBtb2R1bGUpXG5pZiAoaW1wb3J0Lm1ldGEubWFpbikge1xuICBtYWluKCk7XG59XG5cbmV4cG9ydCB7IGV4dHJhY3RVSUltcG9ydHMsIGV4dHJhY3RKU1hVc2FnZXMsIGJ1aWxkU2FmZWxpc3RzLCBzY2FuQ29uc3VtZXJTb3VyY2UgfTtcbmV4cG9ydCB0eXBlIHsgUHJvcFVzYWdlLCBQdXJnZU1hbmlmZXN0LCBDb21wb25lbnRNYW5pZmVzdCwgU2FmZWxpc3RzIH07XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQ0E7QUF5QkEsU0FBUyxPQUFPLENBQUMsTUFBVyxTQUE4QjtBQUFBLEVBQ3hELElBQUksQ0FBQyxRQUFRLE9BQU8sU0FBUztBQUFBLElBQVU7QUFBQSxFQUN2QyxRQUFRLElBQUk7QUFBQSxFQUNaLFdBQVcsT0FBTyxPQUFPLEtBQUssSUFBSSxHQUFHO0FBQUEsSUFDbkMsSUFBSSxRQUFRO0FBQUEsTUFBUTtBQUFBLElBQ3BCLE1BQU0sTUFBTSxLQUFLO0FBQUEsSUFDakIsSUFBSSxNQUFNLFFBQVEsR0FBRyxHQUFHO0FBQUEsTUFDdEIsV0FBVyxRQUFRO0FBQUEsUUFBSyxRQUFRLE1BQU0sT0FBTztBQUFBLElBQy9DLEVBQU8sU0FBSSxPQUFPLE9BQU8sUUFBUSxVQUFVO0FBQUEsTUFDekMsUUFBUSxLQUFLLE9BQU87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QUMxQixJQUFJLE1BQU07QUFBQSxNQUFXLE9BQU87QUFBQSxJQUM1QixJQUFJLE1BQU0sYUFBYSxJQUFJLFFBQVE7QUFBQSxNQUFHLE9BQU87QUFBQSxJQUM3QyxJQUFJLE1BQU0sTUFBTSxJQUFJLFFBQVE7QUFBQSxNQUFHLE9BQU87QUFBQSxFQUN4QztBQUFBLEVBQ0EsT0FBTztBQUFBO0FBR1QsU0FBUyxpQkFBaUIsQ0FBQyxVQUFrQixRQUEwQztBQUFBLEVBQ3JGLE1BQU0sU0FBUyxJQUFJO0FBQUEsRUFDbkIsV0FBVyxTQUFTLFFBQVE7QUFBQSxJQUMxQixJQUFJLE1BQU07QUFBQSxNQUFXLE9BQU87QUFBQSxJQUM1QixNQUFNLE1BQU0sTUFBTSxNQUFNLElBQUksUUFBUTtBQUFBLElBQ3BDLElBQUksUUFBUTtBQUFBLE1BQVcsT0FBTztBQUFBLElBQzlCLElBQUksUUFBUTtBQUFBLE1BQVcsT0FBTyxJQUFJLEdBQUc7QUFBQSxJQUNyQyxJQUFJLE1BQU0sYUFBYSxJQUFJLFFBQVE7QUFBQSxNQUFHLE9BQU87QUFBQSxFQUMvQztBQUFBLEVBQ0EsT0FBTztBQUFBO0FBS1QsZUFBZSxrQkFBa0IsQ0FBQyxRQUFzQztBQUFBLEVBQ3RFLE1BQU0sWUFBeUIsQ0FBQztBQUFBLEVBQ2hDLE1BQU0sT0FBTyxJQUFJLEtBQUssc0JBQXNCO0FBQUEsRUFFNUMsaUJBQWlCLFdBQVcsS0FBSyxLQUFLLEVBQUUsS0FBSyxPQUFPLENBQUMsR0FBRztBQUFBLElBQ3RELElBQUksUUFBUSxTQUFTLGNBQWM7QUFBQSxNQUFHO0FBQUEsSUFDdEMsTUFBTSxXQUFXLEtBQUssS0FBSyxRQUFRLE9BQU87QUFBQSxJQUMxQyxNQUFNLE9BQU8sTUFBTSxJQUFJLEtBQUssUUFBUSxFQUFFLEtBQUs7QUFBQSxJQUMzQyxJQUFJLENBQUMsS0FBSyxTQUFTLGVBQWU7QUFBQSxNQUFHO0FBQUEsSUFFckMsTUFBTSxRQUFRLFlBQVksS0FBSyxPQUFPO0FBQUEsSUFDdEMsTUFBTSxNQUFNLE1BQU0sSUFBSSxNQUFNLE1BQU0sRUFBRSxRQUFRLGNBQWMsS0FBSyxNQUFNLENBQUM7QUFBQSxJQUN0RSxNQUFNLFlBQVksaUJBQWlCLEdBQUc7QUFBQSxJQUN0QyxJQUFJLFVBQVUsU0FBUztBQUFBLE1BQUc7QUFBQSxJQUUxQixVQUFVLEtBQUssR0FBRyxpQkFBaUIsS0FBSyxTQUFTLENBQUM7QUFBQSxFQUNwRDtBQUFBLEVBRUEsT0FBTztBQUFBO0FBb0NULElBQUksT0FBa0IsQ0FFdEI7IiwKICAiZGVidWdJZCI6ICIwMzg4MjgzM0ZCQjgzOUU2NjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
@@ -15,4 +15,32 @@
15
15
  * bunx @pathscale/rsbuild-plugin-ui-css-purge \
16
16
  * --dist dist --src src --manifest node_modules/@pathscale/ui/dist/purge-manifest.json
17
17
  */
18
+ import type { PurgeManifest } from "./scan-consumer";
19
+ interface KillListResult {
20
+ killList: Set<string>;
21
+ /**
22
+ * BEM root classes of components the consumer actually uses. Used to
23
+ * preserve pure attribute selector rules like
24
+ * `[data-slot="checkbox-default-indicator--checkmark"]` that have no class
25
+ * reference but are still component-scoped.
26
+ */
27
+ usedBemRoots: Set<string>;
28
+ }
29
+ export declare function buildKillList(manifest: PurgeManifest, importedComponents: Set<string>): KillListResult;
30
+ /**
31
+ * Extract all `[data-slot="..."]` attribute values from a selector. Handles
32
+ * quoted and unquoted forms (Lightning CSS strips quotes when the value is a
33
+ * simple identifier-like token, so post-minify CSS often looks like
34
+ * `[data-slot=checkbox-default-indicator--checkmark]`).
35
+ */
36
+ export declare function extractDataSlotValues(sel: string): string[];
37
+ /**
38
+ * True when every `[data-slot="X"]` in `sel` belongs to a used component —
39
+ * X matches one of `usedBemRoots` as exact, or as `root-`, `root__`, `root--`
40
+ * prefix. Returns false when the selector has no `[data-slot]` at all
41
+ * (caller decides via other heuristics) or when any slot doesn't match.
42
+ */
43
+ export declare function dataSlotsMatchUsedRoots(sel: string, usedBemRoots: Set<string>): boolean;
44
+ export declare function isKeepableNonClassSelector(sel: string, usedBemRoots?: Set<string>): boolean;
45
+ export declare function purgeClasses(css: string, killList: Set<string>, usedBemRoots?: Set<string>): string;
18
46
  export {};
@@ -5,29 +5,15 @@ var __getProtoOf = Object.getPrototypeOf;
5
5
  var __defProp = Object.defineProperty;
6
6
  var __getOwnPropNames = Object.getOwnPropertyNames;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- function __accessProp(key) {
9
- return this[key];
10
- }
11
- var __toESMCache_node;
12
- var __toESMCache_esm;
13
8
  var __toESM = (mod, isNodeMode, target) => {
14
- var canCache = mod != null && typeof mod === "object";
15
- if (canCache) {
16
- var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
17
- var cached = cache.get(mod);
18
- if (cached)
19
- return cached;
20
- }
21
9
  target = mod != null ? __create(__getProtoOf(mod)) : {};
22
10
  const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
23
11
  for (let key of __getOwnPropNames(mod))
24
12
  if (!__hasOwnProp.call(to, key))
25
13
  __defProp(to, key, {
26
- get: __accessProp.bind(mod, key),
14
+ get: () => mod[key],
27
15
  enumerable: true
28
16
  });
29
- if (canCache)
30
- cache.set(mod, to);
31
17
  return to;
32
18
  };
33
19
  var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
@@ -1129,11 +1115,14 @@ function buildKillList(manifest, importedComponents) {
1129
1115
  }
1130
1116
  const killList = new Set;
1131
1117
  const safeClasses = new Set;
1118
+ const usedBemRoots = new Set;
1132
1119
  for (const [component, classes] of componentClasses) {
1133
1120
  const bemRoots = componentBemRoots.get(component) ?? new Set;
1134
1121
  if (importedComponents.has(component)) {
1135
1122
  for (const cls of classes)
1136
1123
  safeClasses.add(cls);
1124
+ for (const root of bemRoots)
1125
+ usedBemRoots.add(root);
1137
1126
  } else {
1138
1127
  for (const cls of classes) {
1139
1128
  if (isBemClass(cls, bemRoots)) {
@@ -1145,7 +1134,7 @@ function buildKillList(manifest, importedComponents) {
1145
1134
  for (const cls of safeClasses) {
1146
1135
  killList.delete(cls);
1147
1136
  }
1148
- return killList;
1137
+ return { killList, usedBemRoots };
1149
1138
  }
1150
1139
  function kebabToPascal(s) {
1151
1140
  return s.split("-").map((p) => p.charAt(0).toUpperCase() + p.slice(1)).join("");
@@ -1240,7 +1229,34 @@ var ALWAYS_KEEP_SELECTORS = new Set([
1240
1229
  ":after",
1241
1230
  "::backdrop"
1242
1231
  ]);
1243
- function isKeepableNonClassSelector(sel) {
1232
+ function extractDataSlotValues(sel) {
1233
+ const values = [];
1234
+ const re = /\[data-slot=(?:"([^"]+)"|'([^']+)'|([^\]\s]+))\]/g;
1235
+ for (const m of sel.matchAll(re)) {
1236
+ const v = m[1] ?? m[2] ?? m[3];
1237
+ if (v)
1238
+ values.push(v);
1239
+ }
1240
+ return values;
1241
+ }
1242
+ function dataSlotsMatchUsedRoots(sel, usedBemRoots) {
1243
+ const slots = extractDataSlotValues(sel);
1244
+ if (slots.length === 0)
1245
+ return false;
1246
+ for (const slot of slots) {
1247
+ let matched = false;
1248
+ for (const root of usedBemRoots) {
1249
+ if (slot === root || slot.startsWith(`${root}-`) || slot.startsWith(`${root}__`) || slot.startsWith(`${root}--`)) {
1250
+ matched = true;
1251
+ break;
1252
+ }
1253
+ }
1254
+ if (!matched)
1255
+ return false;
1256
+ }
1257
+ return true;
1258
+ }
1259
+ function isKeepableNonClassSelector(sel, usedBemRoots = new Set) {
1244
1260
  const stripped = sel.trim();
1245
1261
  for (const el of ALWAYS_KEEP_SELECTORS) {
1246
1262
  if (stripped === el)
@@ -1254,9 +1270,11 @@ function isKeepableNonClassSelector(sel) {
1254
1270
  return true;
1255
1271
  if (/^\[hidden/.test(stripped))
1256
1272
  return true;
1273
+ if (dataSlotsMatchUsedRoots(stripped, usedBemRoots))
1274
+ return true;
1257
1275
  return false;
1258
1276
  }
1259
- function purgeClasses(css, killList) {
1277
+ function purgeClasses(css, killList, usedBemRoots = new Set) {
1260
1278
  const root = postcss.parse(css);
1261
1279
  root.walkRules((rule) => {
1262
1280
  const selectors = rule.selectors;
@@ -1264,7 +1282,7 @@ function purgeClasses(css, killList) {
1264
1282
  for (const sel of selectors) {
1265
1283
  const classes = extractClassesFromSelector(sel);
1266
1284
  if (classes.length === 0) {
1267
- if (isKeepableNonClassSelector(sel)) {
1285
+ if (isKeepableNonClassSelector(sel, usedBemRoots)) {
1268
1286
  kept.push(sel);
1269
1287
  }
1270
1288
  continue;
@@ -1410,8 +1428,9 @@ async function main() {
1410
1428
  const importedComponents = resolveTransitiveDeps(directImports, depGraph);
1411
1429
  const transitive = importedComponents.size - directImports.size;
1412
1430
  console.log(`[css-purge] Transitive deps: +${transitive} \u2192 ${importedComponents.size} total used components`);
1413
- const killList = buildKillList(manifest, importedComponents);
1431
+ const { killList, usedBemRoots } = buildKillList(manifest, importedComponents);
1414
1432
  console.log(`[css-purge] Kill-list: ${killList.size} classes from ${totalComponents - importedComponents.size} unused components`);
1433
+ console.log(`[css-purge] Used BEM roots: ${usedBemRoots.size} (preserves [data-slot] rules for used components)`);
1415
1434
  const usages = await scanConsumerSource(srcDir);
1416
1435
  const { attrSafelist } = buildSafelists(usages, manifest);
1417
1436
  const glob = new Glob2("**/*.css");
@@ -1423,7 +1442,7 @@ async function main() {
1423
1442
  const originalSize = Buffer.byteLength(originalCss, "utf-8");
1424
1443
  totalBefore += originalSize;
1425
1444
  console.log(`[css-purge] Processing ${relPath} (${(originalSize / 1024).toFixed(1)} KB)`);
1426
- let purgedCss = purgeClasses(originalCss, killList);
1445
+ let purgedCss = purgeClasses(originalCss, killList, usedBemRoots);
1427
1446
  const afterL1 = Buffer.byteLength(purgedCss, "utf-8");
1428
1447
  console.log(`[css-purge] L1 class purge: ${(originalSize / 1024).toFixed(1)} \u2192 ${(afterL1 / 1024).toFixed(1)} KB`);
1429
1448
  purgedCss = purgeAttributes(purgedCss, attrSafelist);
@@ -1442,7 +1461,16 @@ async function main() {
1442
1461
  console.log(`
1443
1462
  [css-purge] Total: ${(totalBefore / 1024).toFixed(1)} \u2192 ${(totalAfter / 1024).toFixed(1)} KB (${((1 - totalAfter / totalBefore) * 100).toFixed(1)}% reduction)`);
1444
1463
  }
1445
- main();
1464
+ if (import.meta.main) {
1465
+ main();
1466
+ }
1467
+ export {
1468
+ purgeClasses,
1469
+ isKeepableNonClassSelector,
1470
+ extractDataSlotValues,
1471
+ dataSlotsMatchUsedRoots,
1472
+ buildKillList
1473
+ };
1446
1474
 
1447
- //# debugId=044B62D65705AFE764756E2164756E21
1448
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL2RldGVjdC1saWJjL2xpYi9wcm9jZXNzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZXRlY3QtbGliYy9saWIvZmlsZXN5c3RlbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGV0ZWN0LWxpYmMvbGliL2VsZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGV0ZWN0LWxpYmMvbGliL2RldGVjdC1saWJjLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9saWdodG5pbmdjc3Mvbm9kZS9icm93c2Vyc2xpc3RUb1RhcmdldHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xpZ2h0bmluZ2Nzcy9ub2RlL2NvbXBvc2VWaXNpdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGlnaHRuaW5nY3NzL25vZGUvZmxhZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xpZ2h0bmluZ2Nzcy9ub2RlL2luZGV4LmpzIiwgIi4uL3NyYy9wb3N0YnVpbGQtcHVyZ2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2xpZ2h0bmluZ2Nzcy9ub2RlL2luZGV4Lm1qcyIsICIuLi9zcmMvc2Nhbi1jb25zdW1lci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIvLyBDb3B5cmlnaHQgMjAxNyBMb3ZlbGwgRnVsbGVyIGFuZCBvdGhlcnMuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGlzTGludXggPSAoKSA9PiBwcm9jZXNzLnBsYXRmb3JtID09PSAnbGludXgnO1xuXG5sZXQgcmVwb3J0ID0gbnVsbDtcbmNvbnN0IGdldFJlcG9ydCA9ICgpID0+IHtcbiAgaWYgKCFyZXBvcnQpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChpc0xpbnV4KCkgJiYgcHJvY2Vzcy5yZXBvcnQpIHtcbiAgICAgIGNvbnN0IG9yaWcgPSBwcm9jZXNzLnJlcG9ydC5leGNsdWRlTmV0d29yaztcbiAgICAgIHByb2Nlc3MucmVwb3J0LmV4Y2x1ZGVOZXR3b3JrID0gdHJ1ZTtcbiAgICAgIHJlcG9ydCA9IHByb2Nlc3MucmVwb3J0LmdldFJlcG9ydCgpO1xuICAgICAgcHJvY2Vzcy5yZXBvcnQuZXhjbHVkZU5ldHdvcmsgPSBvcmlnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXBvcnQgPSB7fTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcG9ydDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0geyBpc0xpbnV4LCBnZXRSZXBvcnQgfTtcbiIsCiAgICAiLy8gQ29weXJpZ2h0IDIwMTcgTG92ZWxsIEZ1bGxlciBhbmQgb3RoZXJzLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5cbmNvbnN0IExERF9QQVRIID0gJy91c3IvYmluL2xkZCc7XG5jb25zdCBTRUxGX1BBVEggPSAnL3Byb2Mvc2VsZi9leGUnO1xuY29uc3QgTUFYX0xFTkdUSCA9IDIwNDg7XG5cbi8qKlxuICogUmVhZCB0aGUgY29udGVudCBvZiBhIGZpbGUgc3luY2hyb25vdXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybnMge0J1ZmZlcn1cbiAqL1xuY29uc3QgcmVhZEZpbGVTeW5jID0gKHBhdGgpID0+IHtcbiAgY29uc3QgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCAncicpO1xuICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2MoTUFYX0xFTkdUSCk7XG4gIGNvbnN0IGJ5dGVzUmVhZCA9IGZzLnJlYWRTeW5jKGZkLCBidWZmZXIsIDAsIE1BWF9MRU5HVEgsIDApO1xuICBmcy5jbG9zZShmZCwgKCkgPT4ge30pO1xuICByZXR1cm4gYnVmZmVyLnN1YmFycmF5KDAsIGJ5dGVzUmVhZCk7XG59O1xuXG4vKipcbiAqIFJlYWQgdGhlIGNvbnRlbnQgb2YgYSBmaWxlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm5zIHtQcm9taXNlPEJ1ZmZlcj59XG4gKi9cbmNvbnN0IHJlYWRGaWxlID0gKHBhdGgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgZnMub3BlbihwYXRoLCAncicsIChlcnIsIGZkKSA9PiB7XG4gICAgaWYgKGVycikge1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyhNQVhfTEVOR1RIKTtcbiAgICAgIGZzLnJlYWQoZmQsIGJ1ZmZlciwgMCwgTUFYX0xFTkdUSCwgMCwgKF8sIGJ5dGVzUmVhZCkgPT4ge1xuICAgICAgICByZXNvbHZlKGJ1ZmZlci5zdWJhcnJheSgwLCBieXRlc1JlYWQpKTtcbiAgICAgICAgZnMuY2xvc2UoZmQsICgpID0+IHt9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIExERF9QQVRILFxuICBTRUxGX1BBVEgsXG4gIHJlYWRGaWxlU3luYyxcbiAgcmVhZEZpbGVcbn07XG4iLAogICAgIi8vIENvcHlyaWdodCAyMDE3IExvdmVsbCBGdWxsZXIgYW5kIG90aGVycy5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgaW50ZXJwcmV0ZXJQYXRoID0gKGVsZikgPT4ge1xuICBpZiAoZWxmLmxlbmd0aCA8IDY0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGVsZi5yZWFkVUludDMyQkUoMCkgIT09IDB4N0Y0NTRDNDYpIHtcbiAgICAvLyBVbmV4cGVjdGVkIG1hZ2ljIGJ5dGVzXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGVsZi5yZWFkVUludDgoNCkgIT09IDIpIHtcbiAgICAvLyBOb3QgYSA2NC1iaXQgRUxGXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGVsZi5yZWFkVUludDgoNSkgIT09IDEpIHtcbiAgICAvLyBOb3QgbGl0dGxlLWVuZGlhblxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IG9mZnNldCA9IGVsZi5yZWFkVUludDMyTEUoMzIpO1xuICBjb25zdCBzaXplID0gZWxmLnJlYWRVSW50MTZMRSg1NCk7XG4gIGNvbnN0IGNvdW50ID0gZWxmLnJlYWRVSW50MTZMRSg1Nik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgIGNvbnN0IGhlYWRlck9mZnNldCA9IG9mZnNldCArIChpICogc2l6ZSk7XG4gICAgY29uc3QgdHlwZSA9IGVsZi5yZWFkVUludDMyTEUoaGVhZGVyT2Zmc2V0KTtcbiAgICBpZiAodHlwZSA9PT0gMykge1xuICAgICAgY29uc3QgZmlsZU9mZnNldCA9IGVsZi5yZWFkVUludDMyTEUoaGVhZGVyT2Zmc2V0ICsgOCk7XG4gICAgICBjb25zdCBmaWxlU2l6ZSA9IGVsZi5yZWFkVUludDMyTEUoaGVhZGVyT2Zmc2V0ICsgMzIpO1xuICAgICAgcmV0dXJuIGVsZi5zdWJhcnJheShmaWxlT2Zmc2V0LCBmaWxlT2Zmc2V0ICsgZmlsZVNpemUpLnRvU3RyaW5nKCkucmVwbGFjZSgvXFwwLiokL2csICcnKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW50ZXJwcmV0ZXJQYXRoXG59O1xuIiwKICAgICIvLyBDb3B5cmlnaHQgMjAxNyBMb3ZlbGwgRnVsbGVyIGFuZCBvdGhlcnMuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGNoaWxkUHJvY2VzcyA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKTtcbmNvbnN0IHsgaXNMaW51eCwgZ2V0UmVwb3J0IH0gPSByZXF1aXJlKCcuL3Byb2Nlc3MnKTtcbmNvbnN0IHsgTEREX1BBVEgsIFNFTEZfUEFUSCwgcmVhZEZpbGUsIHJlYWRGaWxlU3luYyB9ID0gcmVxdWlyZSgnLi9maWxlc3lzdGVtJyk7XG5jb25zdCB7IGludGVycHJldGVyUGF0aCB9ID0gcmVxdWlyZSgnLi9lbGYnKTtcblxubGV0IGNhY2hlZEZhbWlseUludGVycHJldGVyO1xubGV0IGNhY2hlZEZhbWlseUZpbGVzeXN0ZW07XG5sZXQgY2FjaGVkVmVyc2lvbkZpbGVzeXN0ZW07XG5cbmNvbnN0IGNvbW1hbmQgPSAnZ2V0Y29uZiBHTlVfTElCQ19WRVJTSU9OIDI+JjEgfHwgdHJ1ZTsgbGRkIC0tdmVyc2lvbiAyPiYxIHx8IHRydWUnO1xubGV0IGNvbW1hbmRPdXQgPSAnJztcblxuY29uc3Qgc2FmZUNvbW1hbmQgPSAoKSA9PiB7XG4gIGlmICghY29tbWFuZE91dCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY2hpbGRQcm9jZXNzLmV4ZWMoY29tbWFuZCwgKGVyciwgb3V0KSA9PiB7XG4gICAgICAgIGNvbW1hbmRPdXQgPSBlcnIgPyAnICcgOiBvdXQ7XG4gICAgICAgIHJlc29sdmUoY29tbWFuZE91dCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gY29tbWFuZE91dDtcbn07XG5cbmNvbnN0IHNhZmVDb21tYW5kU3luYyA9ICgpID0+IHtcbiAgaWYgKCFjb21tYW5kT3V0KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbW1hbmRPdXQgPSBjaGlsZFByb2Nlc3MuZXhlY1N5bmMoY29tbWFuZCwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pO1xuICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgIGNvbW1hbmRPdXQgPSAnICc7XG4gICAgfVxuICB9XG4gIHJldHVybiBjb21tYW5kT3V0O1xufTtcblxuLyoqXG4gKiBBIFN0cmluZyBjb25zdGFudCBjb250YWluaW5nIHRoZSB2YWx1ZSBgZ2xpYmNgLlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuY29uc3QgR0xJQkMgPSAnZ2xpYmMnO1xuXG4vKipcbiAqIEEgUmVnZXhwIGNvbnN0YW50IHRvIGdldCB0aGUgR0xJQkMgVmVyc2lvbi5cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFJFX0dMSUJDX1ZFUlNJT04gPSAvTElCQ1thLXowLTkgXFwtKS5dKj8oXFxkK1xcLlxcZCspL2k7XG5cbi8qKlxuICogQSBTdHJpbmcgY29uc3RhbnQgY29udGFpbmluZyB0aGUgdmFsdWUgYG11c2xgLlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuY29uc3QgTVVTTCA9ICdtdXNsJztcblxuY29uc3QgaXNGaWxlTXVzbCA9IChmKSA9PiBmLmluY2x1ZGVzKCdsaWJjLm11c2wtJykgfHwgZi5pbmNsdWRlcygnbGQtbXVzbC0nKTtcblxuY29uc3QgZmFtaWx5RnJvbVJlcG9ydCA9ICgpID0+IHtcbiAgY29uc3QgcmVwb3J0ID0gZ2V0UmVwb3J0KCk7XG4gIGlmIChyZXBvcnQuaGVhZGVyICYmIHJlcG9ydC5oZWFkZXIuZ2xpYmNWZXJzaW9uUnVudGltZSkge1xuICAgIHJldHVybiBHTElCQztcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShyZXBvcnQuc2hhcmVkT2JqZWN0cykpIHtcbiAgICBpZiAocmVwb3J0LnNoYXJlZE9iamVjdHMuc29tZShpc0ZpbGVNdXNsKSkge1xuICAgICAgcmV0dXJuIE1VU0w7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgZmFtaWx5RnJvbUNvbW1hbmQgPSAob3V0KSA9PiB7XG4gIGNvbnN0IFtnZXRjb25mLCBsZGQxXSA9IG91dC5zcGxpdCgvW1xcclxcbl0rLyk7XG4gIGlmIChnZXRjb25mICYmIGdldGNvbmYuaW5jbHVkZXMoR0xJQkMpKSB7XG4gICAgcmV0dXJuIEdMSUJDO1xuICB9XG4gIGlmIChsZGQxICYmIGxkZDEuaW5jbHVkZXMoTVVTTCkpIHtcbiAgICByZXR1cm4gTVVTTDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IGZhbWlseUZyb21JbnRlcnByZXRlclBhdGggPSAocGF0aCkgPT4ge1xuICBpZiAocGF0aCkge1xuICAgIGlmIChwYXRoLmluY2x1ZGVzKCcvbGQtbXVzbC0nKSkge1xuICAgICAgcmV0dXJuIE1VU0w7XG4gICAgfSBlbHNlIGlmIChwYXRoLmluY2x1ZGVzKCcvbGQtbGludXgtJykpIHtcbiAgICAgIHJldHVybiBHTElCQztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBnZXRGYW1pbHlGcm9tTGRkQ29udGVudCA9IChjb250ZW50KSA9PiB7XG4gIGNvbnRlbnQgPSBjb250ZW50LnRvU3RyaW5nKCk7XG4gIGlmIChjb250ZW50LmluY2x1ZGVzKCdtdXNsJykpIHtcbiAgICByZXR1cm4gTVVTTDtcbiAgfVxuICBpZiAoY29udGVudC5pbmNsdWRlcygnR05VIEMgTGlicmFyeScpKSB7XG4gICAgcmV0dXJuIEdMSUJDO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgZmFtaWx5RnJvbUZpbGVzeXN0ZW0gPSBhc3luYyAoKSA9PiB7XG4gIGlmIChjYWNoZWRGYW1pbHlGaWxlc3lzdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkRmFtaWx5RmlsZXN5c3RlbTtcbiAgfVxuICBjYWNoZWRGYW1pbHlGaWxlc3lzdGVtID0gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBsZGRDb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoTEREX1BBVEgpO1xuICAgIGNhY2hlZEZhbWlseUZpbGVzeXN0ZW0gPSBnZXRGYW1pbHlGcm9tTGRkQ29udGVudChsZGRDb250ZW50KTtcbiAgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuIGNhY2hlZEZhbWlseUZpbGVzeXN0ZW07XG59O1xuXG5jb25zdCBmYW1pbHlGcm9tRmlsZXN5c3RlbVN5bmMgPSAoKSA9PiB7XG4gIGlmIChjYWNoZWRGYW1pbHlGaWxlc3lzdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkRmFtaWx5RmlsZXN5c3RlbTtcbiAgfVxuICBjYWNoZWRGYW1pbHlGaWxlc3lzdGVtID0gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBsZGRDb250ZW50ID0gcmVhZEZpbGVTeW5jKExERF9QQVRIKTtcbiAgICBjYWNoZWRGYW1pbHlGaWxlc3lzdGVtID0gZ2V0RmFtaWx5RnJvbUxkZENvbnRlbnQobGRkQ29udGVudCk7XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIHJldHVybiBjYWNoZWRGYW1pbHlGaWxlc3lzdGVtO1xufTtcblxuY29uc3QgZmFtaWx5RnJvbUludGVycHJldGVyID0gYXN5bmMgKCkgPT4ge1xuICBpZiAoY2FjaGVkRmFtaWx5SW50ZXJwcmV0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjYWNoZWRGYW1pbHlJbnRlcnByZXRlcjtcbiAgfVxuICBjYWNoZWRGYW1pbHlJbnRlcnByZXRlciA9IG51bGw7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2VsZkNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShTRUxGX1BBVEgpO1xuICAgIGNvbnN0IHBhdGggPSBpbnRlcnByZXRlclBhdGgoc2VsZkNvbnRlbnQpO1xuICAgIGNhY2hlZEZhbWlseUludGVycHJldGVyID0gZmFtaWx5RnJvbUludGVycHJldGVyUGF0aChwYXRoKTtcbiAgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuIGNhY2hlZEZhbWlseUludGVycHJldGVyO1xufTtcblxuY29uc3QgZmFtaWx5RnJvbUludGVycHJldGVyU3luYyA9ICgpID0+IHtcbiAgaWYgKGNhY2hlZEZhbWlseUludGVycHJldGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkRmFtaWx5SW50ZXJwcmV0ZXI7XG4gIH1cbiAgY2FjaGVkRmFtaWx5SW50ZXJwcmV0ZXIgPSBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IHNlbGZDb250ZW50ID0gcmVhZEZpbGVTeW5jKFNFTEZfUEFUSCk7XG4gICAgY29uc3QgcGF0aCA9IGludGVycHJldGVyUGF0aChzZWxmQ29udGVudCk7XG4gICAgY2FjaGVkRmFtaWx5SW50ZXJwcmV0ZXIgPSBmYW1pbHlGcm9tSW50ZXJwcmV0ZXJQYXRoKHBhdGgpO1xuICB9IGNhdGNoIChlKSB7fVxuICByZXR1cm4gY2FjaGVkRmFtaWx5SW50ZXJwcmV0ZXI7XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHdpdGggdGhlIGxpYmMgZmFtaWx5IHdoZW4gaXQgY2FuIGJlIGRldGVybWluZWQsIGBudWxsYCBvdGhlcndpc2UuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTw/c3RyaW5nPn1cbiAqL1xuY29uc3QgZmFtaWx5ID0gYXN5bmMgKCkgPT4ge1xuICBsZXQgZmFtaWx5ID0gbnVsbDtcbiAgaWYgKGlzTGludXgoKSkge1xuICAgIGZhbWlseSA9IGF3YWl0IGZhbWlseUZyb21JbnRlcnByZXRlcigpO1xuICAgIGlmICghZmFtaWx5KSB7XG4gICAgICBmYW1pbHkgPSBhd2FpdCBmYW1pbHlGcm9tRmlsZXN5c3RlbSgpO1xuICAgICAgaWYgKCFmYW1pbHkpIHtcbiAgICAgICAgZmFtaWx5ID0gZmFtaWx5RnJvbVJlcG9ydCgpO1xuICAgICAgfVxuICAgICAgaWYgKCFmYW1pbHkpIHtcbiAgICAgICAgY29uc3Qgb3V0ID0gYXdhaXQgc2FmZUNvbW1hbmQoKTtcbiAgICAgICAgZmFtaWx5ID0gZmFtaWx5RnJvbUNvbW1hbmQob3V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbWlseTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbGliYyBmYW1pbHkgd2hlbiBpdCBjYW4gYmUgZGV0ZXJtaW5lZCwgYG51bGxgIG90aGVyd2lzZS5cbiAqIEByZXR1cm5zIHs/c3RyaW5nfVxuICovXG5jb25zdCBmYW1pbHlTeW5jID0gKCkgPT4ge1xuICBsZXQgZmFtaWx5ID0gbnVsbDtcbiAgaWYgKGlzTGludXgoKSkge1xuICAgIGZhbWlseSA9IGZhbWlseUZyb21JbnRlcnByZXRlclN5bmMoKTtcbiAgICBpZiAoIWZhbWlseSkge1xuICAgICAgZmFtaWx5ID0gZmFtaWx5RnJvbUZpbGVzeXN0ZW1TeW5jKCk7XG4gICAgICBpZiAoIWZhbWlseSkge1xuICAgICAgICBmYW1pbHkgPSBmYW1pbHlGcm9tUmVwb3J0KCk7XG4gICAgICB9XG4gICAgICBpZiAoIWZhbWlseSkge1xuICAgICAgICBjb25zdCBvdXQgPSBzYWZlQ29tbWFuZFN5bmMoKTtcbiAgICAgICAgZmFtaWx5ID0gZmFtaWx5RnJvbUNvbW1hbmQob3V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbWlseTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZXMgYHRydWVgIG9ubHkgd2hlbiB0aGUgcGxhdGZvcm0gaXMgTGludXggYW5kIHRoZSBsaWJjIGZhbWlseSBpcyBub3QgYGdsaWJjYC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICovXG5jb25zdCBpc05vbkdsaWJjTGludXggPSBhc3luYyAoKSA9PiBpc0xpbnV4KCkgJiYgYXdhaXQgZmFtaWx5KCkgIT09IEdMSUJDO1xuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIG9ubHkgd2hlbiB0aGUgcGxhdGZvcm0gaXMgTGludXggYW5kIHRoZSBsaWJjIGZhbWlseSBpcyBub3QgYGdsaWJjYC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBpc05vbkdsaWJjTGludXhTeW5jID0gKCkgPT4gaXNMaW51eCgpICYmIGZhbWlseVN5bmMoKSAhPT0gR0xJQkM7XG5cbmNvbnN0IHZlcnNpb25Gcm9tRmlsZXN5c3RlbSA9IGFzeW5jICgpID0+IHtcbiAgaWYgKGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkVmVyc2lvbkZpbGVzeXN0ZW07XG4gIH1cbiAgY2FjaGVkVmVyc2lvbkZpbGVzeXN0ZW0gPSBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IGxkZENvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShMRERfUEFUSCk7XG4gICAgY29uc3QgdmVyc2lvbk1hdGNoID0gbGRkQ29udGVudC5tYXRjaChSRV9HTElCQ19WRVJTSU9OKTtcbiAgICBpZiAodmVyc2lvbk1hdGNoKSB7XG4gICAgICBjYWNoZWRWZXJzaW9uRmlsZXN5c3RlbSA9IHZlcnNpb25NYXRjaFsxXTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIHJldHVybiBjYWNoZWRWZXJzaW9uRmlsZXN5c3RlbTtcbn07XG5cbmNvbnN0IHZlcnNpb25Gcm9tRmlsZXN5c3RlbVN5bmMgPSAoKSA9PiB7XG4gIGlmIChjYWNoZWRWZXJzaW9uRmlsZXN5c3RlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtO1xuICB9XG4gIGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtID0gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBsZGRDb250ZW50ID0gcmVhZEZpbGVTeW5jKExERF9QQVRIKTtcbiAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSBsZGRDb250ZW50Lm1hdGNoKFJFX0dMSUJDX1ZFUlNJT04pO1xuICAgIGlmICh2ZXJzaW9uTWF0Y2gpIHtcbiAgICAgIGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtID0gdmVyc2lvbk1hdGNoWzFdO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuIGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtO1xufTtcblxuY29uc3QgdmVyc2lvbkZyb21SZXBvcnQgPSAoKSA9PiB7XG4gIGNvbnN0IHJlcG9ydCA9IGdldFJlcG9ydCgpO1xuICBpZiAocmVwb3J0LmhlYWRlciAmJiByZXBvcnQuaGVhZGVyLmdsaWJjVmVyc2lvblJ1bnRpbWUpIHtcbiAgICByZXR1cm4gcmVwb3J0LmhlYWRlci5nbGliY1ZlcnNpb25SdW50aW1lO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgdmVyc2lvblN1ZmZpeCA9IChzKSA9PiBzLnRyaW0oKS5zcGxpdCgvXFxzKy8pWzFdO1xuXG5jb25zdCB2ZXJzaW9uRnJvbUNvbW1hbmQgPSAob3V0KSA9PiB7XG4gIGNvbnN0IFtnZXRjb25mLCBsZGQxLCBsZGQyXSA9IG91dC5zcGxpdCgvW1xcclxcbl0rLyk7XG4gIGlmIChnZXRjb25mICYmIGdldGNvbmYuaW5jbHVkZXMoR0xJQkMpKSB7XG4gICAgcmV0dXJuIHZlcnNpb25TdWZmaXgoZ2V0Y29uZik7XG4gIH1cbiAgaWYgKGxkZDEgJiYgbGRkMiAmJiBsZGQxLmluY2x1ZGVzKE1VU0wpKSB7XG4gICAgcmV0dXJuIHZlcnNpb25TdWZmaXgobGRkMik7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHdpdGggdGhlIGxpYmMgdmVyc2lvbiB3aGVuIGl0IGNhbiBiZSBkZXRlcm1pbmVkLCBgbnVsbGAgb3RoZXJ3aXNlLlxuICogQHJldHVybnMge1Byb21pc2U8P3N0cmluZz59XG4gKi9cbmNvbnN0IHZlcnNpb24gPSBhc3luYyAoKSA9PiB7XG4gIGxldCB2ZXJzaW9uID0gbnVsbDtcbiAgaWYgKGlzTGludXgoKSkge1xuICAgIHZlcnNpb24gPSBhd2FpdCB2ZXJzaW9uRnJvbUZpbGVzeXN0ZW0oKTtcbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIHZlcnNpb24gPSB2ZXJzaW9uRnJvbVJlcG9ydCgpO1xuICAgIH1cbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIGNvbnN0IG91dCA9IGF3YWl0IHNhZmVDb21tYW5kKCk7XG4gICAgICB2ZXJzaW9uID0gdmVyc2lvbkZyb21Db21tYW5kKG91dCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2ZXJzaW9uO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsaWJjIHZlcnNpb24gd2hlbiBpdCBjYW4gYmUgZGV0ZXJtaW5lZCwgYG51bGxgIG90aGVyd2lzZS5cbiAqIEByZXR1cm5zIHs/c3RyaW5nfVxuICovXG5jb25zdCB2ZXJzaW9uU3luYyA9ICgpID0+IHtcbiAgbGV0IHZlcnNpb24gPSBudWxsO1xuICBpZiAoaXNMaW51eCgpKSB7XG4gICAgdmVyc2lvbiA9IHZlcnNpb25Gcm9tRmlsZXN5c3RlbVN5bmMoKTtcbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIHZlcnNpb24gPSB2ZXJzaW9uRnJvbVJlcG9ydCgpO1xuICAgIH1cbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIGNvbnN0IG91dCA9IHNhZmVDb21tYW5kU3luYygpO1xuICAgICAgdmVyc2lvbiA9IHZlcnNpb25Gcm9tQ29tbWFuZChvdXQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmVyc2lvbjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBHTElCQyxcbiAgTVVTTCxcbiAgZmFtaWx5LFxuICBmYW1pbHlTeW5jLFxuICBpc05vbkdsaWJjTGludXgsXG4gIGlzTm9uR2xpYmNMaW51eFN5bmMsXG4gIHZlcnNpb24sXG4gIHZlcnNpb25TeW5jXG59O1xuIiwKICAgICJjb25zdCBCUk9XU0VSX01BUFBJTkcgPSB7XG4gIGFuZF9jaHI6ICdjaHJvbWUnLFxuICBhbmRfZmY6ICdmaXJlZm94JyxcbiAgaWVfbW9iOiAnaWUnLFxuICBvcF9tb2I6ICdvcGVyYScsXG4gIGFuZF9xcTogbnVsbCxcbiAgYW5kX3VjOiBudWxsLFxuICBiYWlkdTogbnVsbCxcbiAgYmI6IG51bGwsXG4gIGthaW9zOiBudWxsLFxuICBvcF9taW5pOiBudWxsLFxufTtcblxuZnVuY3Rpb24gYnJvd3NlcnNsaXN0VG9UYXJnZXRzKGJyb3dzZXJzbGlzdCkge1xuICBsZXQgdGFyZ2V0cyA9IHt9O1xuICBmb3IgKGxldCBicm93c2VyIG9mIGJyb3dzZXJzbGlzdCkge1xuICAgIGxldCBbbmFtZSwgdl0gPSBicm93c2VyLnNwbGl0KCcgJyk7XG4gICAgaWYgKEJST1dTRVJfTUFQUElOR1tuYW1lXSA9PT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbGV0IHZlcnNpb24gPSBwYXJzZVZlcnNpb24odik7XG4gICAgaWYgKHZlcnNpb24gPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldHNbbmFtZV0gPT0gbnVsbCB8fCB2ZXJzaW9uIDwgdGFyZ2V0c1tuYW1lXSkge1xuICAgICAgdGFyZ2V0c1tuYW1lXSA9IHZlcnNpb247XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldHM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVmVyc2lvbih2ZXJzaW9uKSB7XG4gIGxldCBbbWFqb3IsIG1pbm9yID0gMCwgcGF0Y2ggPSAwXSA9IHZlcnNpb25cbiAgICAuc3BsaXQoJy0nKVswXVxuICAgIC5zcGxpdCgnLicpXG4gICAgLm1hcCh2ID0+IHBhcnNlSW50KHYsIDEwKSk7XG5cbiAgaWYgKGlzTmFOKG1ham9yKSB8fCBpc05hTihtaW5vcikgfHwgaXNOYU4ocGF0Y2gpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gKG1ham9yIDw8IDE2KSB8IChtaW5vciA8PCA4KSB8IHBhdGNoO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJyb3dzZXJzbGlzdFRvVGFyZ2V0cztcbiIsCiAgICAiLy8gQHRzLWNoZWNrXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnLi9pbmRleCcpLlZpc2l0b3J9IFZpc2l0b3IgKi9cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2luZGV4JykuVmlzaXRvckZ1bmN0aW9ufSBWaXNpdG9yRnVuY3Rpb24gKi9cblxuLyoqXG4gKiBDb21wb3NlcyBtdWx0aXBsZSB2aXNpdG9yIG9iamVjdHMgaW50byBhIHNpbmdsZSBvbmUuXG4gKiBAcGFyYW0geyhWaXNpdG9yIHwgVmlzaXRvckZ1bmN0aW9uKVtdfSB2aXNpdG9ycyBcbiAqIEByZXR1cm4ge1Zpc2l0b3IgfCBWaXNpdG9yRnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VWaXNpdG9ycyh2aXNpdG9ycykge1xuICBpZiAodmlzaXRvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHZpc2l0b3JzWzBdO1xuICB9XG4gIFxuICBpZiAodmlzaXRvcnMuc29tZSh2ID0+IHR5cGVvZiB2ID09PSAnZnVuY3Rpb24nKSkge1xuICAgIHJldHVybiAob3B0cykgPT4ge1xuICAgICAgbGV0IHYgPSB2aXNpdG9ycy5tYXAodiA9PiB0eXBlb2YgdiA9PT0gJ2Z1bmN0aW9uJyA/IHYob3B0cykgOiB2KTtcbiAgICAgIHJldHVybiBjb21wb3NlVmlzaXRvcnModik7XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAdHlwZSBWaXNpdG9yICovXG4gIGxldCByZXMgPSB7fTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdTdHlsZVNoZWV0Jyk7XG4gIGNvbXBvc2VTaW1wbGVWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnU3R5bGVTaGVldEV4aXQnKTtcbiAgY29tcG9zZU9iamVjdFZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdSdWxlJywgcnVsZVZpc2l0b3IsIHdyYXBDdXN0b21BbmRVbmtub3duQXRSdWxlKTtcbiAgY29tcG9zZU9iamVjdFZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdSdWxlRXhpdCcsIHJ1bGVWaXNpdG9yLCB3cmFwQ3VzdG9tQW5kVW5rbm93bkF0UnVsZSk7XG4gIGNvbXBvc2VPYmplY3RWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnRGVjbGFyYXRpb24nLCBkZWNsYXJhdGlvblZpc2l0b3IsIHdyYXBDdXN0b21Qcm9wZXJ0eSk7XG4gIGNvbXBvc2VPYmplY3RWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnRGVjbGFyYXRpb25FeGl0JywgZGVjbGFyYXRpb25WaXNpdG9yLCB3cmFwQ3VzdG9tUHJvcGVydHkpO1xuICBjb21wb3NlU2ltcGxlVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ1VybCcpO1xuICBjb21wb3NlU2ltcGxlVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ0NvbG9yJyk7XG4gIGNvbXBvc2VTaW1wbGVWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnSW1hZ2UnKTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdJbWFnZUV4aXQnKTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdMZW5ndGgnKTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdBbmdsZScpO1xuICBjb21wb3NlU2ltcGxlVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ1JhdGlvJyk7XG4gIGNvbXBvc2VTaW1wbGVWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnUmVzb2x1dGlvbicpO1xuICBjb21wb3NlU2ltcGxlVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ1RpbWUnKTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdDdXN0b21JZGVudCcpO1xuICBjb21wb3NlU2ltcGxlVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ0Rhc2hlZElkZW50Jyk7XG4gIGNvbXBvc2VBcnJheUZ1bmN0aW9ucyhyZXMsIHZpc2l0b3JzLCAnTWVkaWFRdWVyeScpO1xuICBjb21wb3NlQXJyYXlGdW5jdGlvbnMocmVzLCB2aXNpdG9ycywgJ01lZGlhUXVlcnlFeGl0Jyk7XG4gIGNvbXBvc2VTaW1wbGVWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnU3VwcG9ydHNDb25kaXRpb24nKTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdTdXBwb3J0c0NvbmRpdGlvbkV4aXQnKTtcbiAgY29tcG9zZUFycmF5RnVuY3Rpb25zKHJlcywgdmlzaXRvcnMsICdTZWxlY3RvcicpO1xuICBjb21wb3NlVG9rZW5WaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnVG9rZW4nLCAndG9rZW4nLCBmYWxzZSk7XG4gIGNvbXBvc2VUb2tlblZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdGdW5jdGlvbicsICdmdW5jdGlvbicsIGZhbHNlKTtcbiAgY29tcG9zZVRva2VuVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ0Z1bmN0aW9uRXhpdCcsICdmdW5jdGlvbicsIHRydWUpO1xuICBjb21wb3NlVG9rZW5WaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnVmFyaWFibGUnLCAndmFyJywgZmFsc2UpO1xuICBjb21wb3NlVG9rZW5WaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnVmFyaWFibGVFeGl0JywgJ3ZhcicsIHRydWUpO1xuICBjb21wb3NlVG9rZW5WaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnRW52aXJvbm1lbnRWYXJpYWJsZScsICdlbnYnLCBmYWxzZSk7XG4gIGNvbXBvc2VUb2tlblZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdFbnZpcm9ubWVudFZhcmlhYmxlRXhpdCcsICdlbnYnLCB0cnVlKTtcbiAgcmV0dXJuIHJlcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb21wb3NlVmlzaXRvcnM7XG5cbmZ1bmN0aW9uIHdyYXBDdXN0b21BbmRVbmtub3duQXRSdWxlKGssIGYpIHtcbiAgaWYgKGsgPT09ICd1bmtub3duJykge1xuICAgIHJldHVybiAodmFsdWUgPT4gZih7IHR5cGU6ICd1bmtub3duJywgdmFsdWUgfSkpO1xuICB9XG4gIGlmIChrID09PSAnY3VzdG9tJykge1xuICAgIHJldHVybiAodmFsdWUgPT4gZih7IHR5cGU6ICdjdXN0b20nLCB2YWx1ZSB9KSk7XG4gIH1cbiAgcmV0dXJuIGY7XG59XG5cbmZ1bmN0aW9uIHdyYXBDdXN0b21Qcm9wZXJ0eShrLCBmKSB7XG4gIHJldHVybiBrID09PSAnY3VzdG9tJyA/ICh2YWx1ZSA9PiBmKHsgcHJvcGVydHk6ICdjdXN0b20nLCB2YWx1ZSB9KSkgOiBmO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2luZGV4JykuVmlzaXRvclsnUnVsZSddfSBmIFxuICogQHBhcmFtIHtpbXBvcnQoJy4vYXN0JykuUnVsZX0gaXRlbSBcbiAqL1xuZnVuY3Rpb24gcnVsZVZpc2l0b3IoZiwgaXRlbSkge1xuICBpZiAodHlwZW9mIGYgPT09ICdvYmplY3QnKSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3Vua25vd24nKSB7XG4gICAgICBsZXQgdiA9IGYudW5rbm93bjtcbiAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdiA9IHZbaXRlbS52YWx1ZS5uYW1lXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2Py4oaXRlbS52YWx1ZSk7XG4gICAgfVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdjdXN0b20nKSB7XG4gICAgICBsZXQgdiA9IGYuY3VzdG9tO1xuICAgICAgaWYgKHR5cGVvZiB2ID09PSAnb2JqZWN0Jykge1xuICAgICAgICB2ID0gdltpdGVtLnZhbHVlLm5hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHY/LihpdGVtLnZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZbaXRlbS50eXBlXT8uKGl0ZW0pO1xuICB9XG4gIHJldHVybiBmPy4oaXRlbSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW5kZXgnKS5WaXNpdG9yWydEZWNsYXJhdGlvbiddfSBmIFxuICogQHBhcmFtIHtpbXBvcnQoJy4vYXN0JykuRGVjbGFyYXRpb259IGl0ZW0gXG4gKi9cbmZ1bmN0aW9uIGRlY2xhcmF0aW9uVmlzaXRvcihmLCBpdGVtKSB7XG4gIGlmICh0eXBlb2YgZiA9PT0gJ29iamVjdCcpIHtcbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgICBsZXQgbmFtZSA9IGl0ZW0ucHJvcGVydHk7XG4gICAgaWYgKGl0ZW0ucHJvcGVydHkgPT09ICd1bnBhcnNlZCcpIHtcbiAgICAgIG5hbWUgPSBpdGVtLnZhbHVlLnByb3BlcnR5SWQucHJvcGVydHk7XG4gICAgfSBlbHNlIGlmIChpdGVtLnByb3BlcnR5ID09PSAnY3VzdG9tJykge1xuICAgICAgbGV0IHYgPSBmLmN1c3RvbTtcbiAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdiA9IHZbaXRlbS52YWx1ZS5uYW1lXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2Py4oaXRlbS52YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBmW25hbWVdPy4oaXRlbSk7XG4gIH1cbiAgcmV0dXJuIGY/LihpdGVtKTtcbn1cblxuLyoqXG4gKiBcbiAqIEBwYXJhbSB7VmlzaXRvcltdfSB2aXNpdG9ycyBcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgXG4gKiBAcmV0dXJucyB7W2FueVtdLCBib29sZWFuLCBTZXQ8c3RyaW5nPl19XG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RPYmplY3RzT3JGdW5jdGlvbnModmlzaXRvcnMsIGtleSkge1xuICBsZXQgdmFsdWVzID0gW107XG4gIGxldCBoYXNGdW5jdGlvbiA9IGZhbHNlO1xuICBsZXQgYWxsS2V5cyA9IG5ldyBTZXQoKTtcbiAgZm9yIChsZXQgdmlzaXRvciBvZiB2aXNpdG9ycykge1xuICAgIGxldCB2ID0gdmlzaXRvcltrZXldO1xuICAgIGlmICh2KSB7XG4gICAgICBpZiAodHlwZW9mIHYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaGFzRnVuY3Rpb24gPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQga2V5IGluIHYpIHtcbiAgICAgICAgICBhbGxLZXlzLmFkZChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YWx1ZXMucHVzaCh2KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFt2YWx1ZXMsIGhhc0Z1bmN0aW9uLCBhbGxLZXlzXTtcbn1cblxuLyoqXG4gKiBAdGVtcGxhdGUge2tleW9mIFZpc2l0b3J9IEtcbiAqIEBwYXJhbSB7VmlzaXRvcn0gcmVzXG4gKiBAcGFyYW0ge1Zpc2l0b3JbXX0gdmlzaXRvcnNcbiAqIEBwYXJhbSB7S30ga2V5XG4gKiBAcGFyYW0geyh2aXNpdG9yOiBWaXNpdG9yW0tdLCBpdGVtOiBhbnkpID0+IGFueSB8IGFueVtdIHwgdm9pZH0gYXBwbHkgXG4gKiBAcGFyYW0geyhrOiBzdHJpbmcsIGY6IGFueSkgPT4gYW55fSB3cmFwS2V5IFxuICovXG5mdW5jdGlvbiBjb21wb3NlT2JqZWN0VmlzaXRvcnMocmVzLCB2aXNpdG9ycywga2V5LCBhcHBseSwgd3JhcEtleSkge1xuICBsZXQgW3ZhbHVlcywgaGFzRnVuY3Rpb24sIGFsbEtleXNdID0gZXh0cmFjdE9iamVjdHNPckZ1bmN0aW9ucyh2aXNpdG9ycywga2V5KTtcbiAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJlc1trZXldID0gdmFsdWVzWzBdO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBmID0gY3JlYXRlQXJyYXlWaXNpdG9yKHZpc2l0b3JzLCAodmlzaXRvciwgaXRlbSkgPT4gYXBwbHkodmlzaXRvcltrZXldLCBpdGVtKSk7XG4gIGlmIChoYXNGdW5jdGlvbikge1xuICAgIHJlc1trZXldID0gZjtcbiAgfSBlbHNlIHtcbiAgICAvKiogQHR5cGUge2FueX0gKi9cbiAgICBsZXQgdiA9IHt9O1xuICAgIGZvciAobGV0IGsgb2YgYWxsS2V5cykge1xuICAgICAgdltrXSA9IHdyYXBLZXkoaywgZik7XG4gICAgfVxuICAgIHJlc1trZXldID0gdjtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7VmlzaXRvcn0gcmVzIFxuICogQHBhcmFtIHtWaXNpdG9yW119IHZpc2l0b3JzIFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2FzdCcpLlRva2VuT3JWYWx1ZVsndHlwZSddfSB0eXBlIFxuICogQHBhcmFtIHtib29sZWFufSBpc0V4aXQgXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VUb2tlblZpc2l0b3JzKHJlcywgdmlzaXRvcnMsIGtleSwgdHlwZSwgaXNFeGl0KSB7XG4gIGxldCBbdmFsdWVzLCBoYXNGdW5jdGlvbiwgYWxsS2V5c10gPSBleHRyYWN0T2JqZWN0c09yRnVuY3Rpb25zKHZpc2l0b3JzLCBrZXkpO1xuICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh2YWx1ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgcmVzW2tleV0gPSB2YWx1ZXNbMF07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGYgPSBjcmVhdGVUb2tlblZpc2l0b3IodmlzaXRvcnMsIHR5cGUsIGlzRXhpdCk7XG4gIGlmIChoYXNGdW5jdGlvbikge1xuICAgIHJlc1trZXldID0gZjtcbiAgfSBlbHNlIHtcbiAgICBsZXQgdiA9IHt9O1xuICAgIGZvciAobGV0IGtleSBvZiBhbGxLZXlzKSB7XG4gICAgICB2W2tleV0gPSBmO1xuICAgIH1cbiAgICByZXNba2V5XSA9IHY7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1Zpc2l0b3JbXX0gdmlzaXRvcnMgXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9hc3QnKS5Ub2tlbk9yVmFsdWVbJ3R5cGUnXX0gdHlwZSBcbiAqL1xuZnVuY3Rpb24gY3JlYXRlVG9rZW5WaXNpdG9yKHZpc2l0b3JzLCB0eXBlLCBpc0V4aXQpIHtcbiAgbGV0IHYgPSBjcmVhdGVBcnJheVZpc2l0b3IodmlzaXRvcnMsICh2aXNpdG9yLCAvKiogQHR5cGUge2ltcG9ydCgnLi9hc3QnKS5Ub2tlbk9yVmFsdWV9ICovIGl0ZW0pID0+IHtcbiAgICBsZXQgZjtcbiAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuICAgICAgY2FzZSAndG9rZW4nOlxuICAgICAgICBmID0gdmlzaXRvci5Ub2tlbjtcbiAgICAgICAgaWYgKHR5cGVvZiBmID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGYgPSBmW2l0ZW0udmFsdWUudHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgIGYgPSBpc0V4aXQgPyB2aXNpdG9yLkZ1bmN0aW9uRXhpdCA6IHZpc2l0b3IuRnVuY3Rpb247XG4gICAgICAgIGlmICh0eXBlb2YgZiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBmID0gZltpdGVtLnZhbHVlLm5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndmFyJzpcbiAgICAgICAgZiA9IGlzRXhpdCA/IHZpc2l0b3IuVmFyaWFibGVFeGl0IDogdmlzaXRvci5WYXJpYWJsZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlbnYnOlxuICAgICAgICBmID0gaXNFeGl0ID8gdmlzaXRvci5FbnZpcm9ubWVudFZhcmlhYmxlRXhpdCA6IHZpc2l0b3IuRW52aXJvbm1lbnRWYXJpYWJsZTtcbiAgICAgICAgaWYgKHR5cGVvZiBmID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGxldCBuYW1lO1xuICAgICAgICAgIHN3aXRjaCAoaXRlbS52YWx1ZS5uYW1lLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3VhJzpcbiAgICAgICAgICAgIGNhc2UgJ3Vua25vd24nOlxuICAgICAgICAgICAgICBuYW1lID0gaXRlbS52YWx1ZS5uYW1lLnZhbHVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2N1c3RvbSc6XG4gICAgICAgICAgICAgIG5hbWUgPSBpdGVtLnZhbHVlLm5hbWUuaWRlbnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmID0gZltuYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NvbG9yJzpcbiAgICAgICAgZiA9IHZpc2l0b3IuQ29sb3I7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndXJsJzpcbiAgICAgICAgZiA9IHZpc2l0b3IuVXJsO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xlbmd0aCc6XG4gICAgICAgIGYgPSB2aXNpdG9yLkxlbmd0aDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhbmdsZSc6XG4gICAgICAgIGYgPSB2aXNpdG9yLkFuZ2xlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RpbWUnOlxuICAgICAgICBmID0gdmlzaXRvci5UaW1lO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Jlc29sdXRpb24nOlxuICAgICAgICBmID0gdmlzaXRvci5SZXNvbHV0aW9uO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Rhc2hlZC1pZGVudCc6XG4gICAgICAgIGYgPSB2aXNpdG9yLkRhc2hlZElkZW50O1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoIWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgcmVzID0gZihpdGVtLnZhbHVlKTtcbiAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuICAgICAgY2FzZSAnY29sb3InOlxuICAgICAgY2FzZSAndXJsJzpcbiAgICAgIGNhc2UgJ2xlbmd0aCc6XG4gICAgICBjYXNlICdhbmdsZSc6XG4gICAgICBjYXNlICd0aW1lJzpcbiAgICAgIGNhc2UgJ3Jlc29sdXRpb24nOlxuICAgICAgY2FzZSAnZGFzaGVkLWlkZW50JzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzKSkge1xuICAgICAgICAgIHJlcyA9IHJlcy5tYXAodmFsdWUgPT4gKHsgdHlwZTogaXRlbS50eXBlLCB2YWx1ZSB9KSlcbiAgICAgICAgfSBlbHNlIGlmIChyZXMpIHtcbiAgICAgICAgICByZXMgPSB7IHR5cGU6IGl0ZW0udHlwZSwgdmFsdWU6IHJlcyB9O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH0pO1xuXG4gIHJldHVybiB2YWx1ZSA9PiB2KHsgdHlwZSwgdmFsdWUgfSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtWaXNpdG9yW119IHZpc2l0b3JzIFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdEZ1bmN0aW9ucyh2aXNpdG9ycywga2V5KSB7XG4gIGxldCBmdW5jdGlvbnMgPSBbXTtcbiAgZm9yIChsZXQgdmlzaXRvciBvZiB2aXNpdG9ycykge1xuICAgIGxldCBmID0gdmlzaXRvcltrZXldO1xuICAgIGlmIChmKSB7XG4gICAgICBmdW5jdGlvbnMucHVzaChmKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9ucztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1Zpc2l0b3J9IHJlcyBcbiAqIEBwYXJhbSB7VmlzaXRvcltdfSB2aXNpdG9ycyBcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VTaW1wbGVWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCBrZXkpIHtcbiAgbGV0IGZ1bmN0aW9ucyA9IGV4dHJhY3RGdW5jdGlvbnModmlzaXRvcnMsIGtleSk7XG4gIGlmIChmdW5jdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZ1bmN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICByZXNba2V5XSA9IGZ1bmN0aW9uc1swXTtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXNba2V5XSA9IGFyZyA9PiB7XG4gICAgbGV0IG11dGF0ZWQgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBmIG9mIGZ1bmN0aW9ucykge1xuICAgICAgbGV0IHJlcyA9IGYoYXJnKTtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgYXJnID0gcmVzO1xuICAgICAgICBtdXRhdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbXV0YXRlZCA/IGFyZyA6IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1Zpc2l0b3J9IHJlcyBcbiAqIEBwYXJhbSB7VmlzaXRvcltdfSB2aXNpdG9ycyBcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VBcnJheUZ1bmN0aW9ucyhyZXMsIHZpc2l0b3JzLCBrZXkpIHtcbiAgbGV0IGZ1bmN0aW9ucyA9IGV4dHJhY3RGdW5jdGlvbnModmlzaXRvcnMsIGtleSk7XG4gIGlmIChmdW5jdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZ1bmN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICByZXNba2V5XSA9IGZ1bmN0aW9uc1swXTtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXNba2V5XSA9IGNyZWF0ZUFycmF5VmlzaXRvcihmdW5jdGlvbnMsIChmLCBpdGVtKSA9PiBmKGl0ZW0pKTtcbn1cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHRlbXBsYXRlIFZcbiAqIEBwYXJhbSB7VFtdfSB2aXNpdG9ycyBcbiAqIEBwYXJhbSB7KHZpc2l0b3I6IFQsIGl0ZW06IFYpID0+IFYgfCBWW10gfCB2b2lkfSBhcHBseSBcbiAqIEByZXR1cm5zIHsoaXRlbTogVikgPT4gViB8IFZbXSB8IHZvaWR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFycmF5VmlzaXRvcih2aXNpdG9ycywgYXBwbHkpIHtcbiAgbGV0IHNlZW4gPSBuZXcgQml0c2V0KHZpc2l0b3JzLmxlbmd0aCk7XG4gIHJldHVybiBhcmcgPT4ge1xuICAgIGxldCBhcnIgPSBbYXJnXTtcbiAgICBsZXQgbXV0YXRlZCA9IGZhbHNlO1xuICAgIHNlZW4uY2xlYXIoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gRm9yIGVhY2ggdmFsdWUsIGNhbGwgYWxsIHZpc2l0b3JzLiBJZiBhIHZpc2l0b3IgcmV0dXJucyBhIG5ldyB2YWx1ZSxcbiAgICAgIC8vIHdlIHN0YXJ0IG92ZXIsIGJ1dCBza2lwIHRoZSB2aXNpdG9yIHRoYXQgZ2VuZXJhdGVkIHRoZSB2YWx1ZSBvciBzYXdcbiAgICAgIC8vIGl0IGJlZm9yZSAodG8gYXZvaWQgY3ljbGVzKS4gVGhpcyB3YXksIHZpc2l0b3JzIGNhbiBiZSBjb21wb3NlZCBpbiBhbnkgb3JkZXIuIFxuICAgICAgZm9yIChsZXQgdiA9IDA7IHYgPCB2aXNpdG9ycy5sZW5ndGggJiYgaSA8IGFyci5sZW5ndGg7KSB7XG4gICAgICAgIGlmIChzZWVuLmdldCh2KSkge1xuICAgICAgICAgIHYrKztcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpdGVtID0gYXJyW2ldO1xuICAgICAgICBsZXQgdmlzaXRvciA9IHZpc2l0b3JzW3ZdO1xuICAgICAgICBsZXQgcmVzID0gYXBwbHkodmlzaXRvciwgaXRlbSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcykpIHtcbiAgICAgICAgICBpZiAocmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgYXJyLnNwbGljZShpLCAxKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGFycltpXSA9IHJlc1swXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyLnNwbGljZShpLCAxLCAuLi5yZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtdXRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICBzZWVuLnNldCh2KTtcbiAgICAgICAgICB2ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChyZXMpIHtcbiAgICAgICAgICBhcnJbaV0gPSByZXM7XG4gICAgICAgICAgbXV0YXRlZCA9IHRydWU7XG4gICAgICAgICAgc2Vlbi5zZXQodik7XG4gICAgICAgICAgdiA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdisrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFtdXRhdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyci5sZW5ndGggPT09IDEgPyBhcnJbMF0gOiBhcnI7XG4gIH07XG59XG5cbmNsYXNzIEJpdHNldCB7XG4gIGNvbnN0cnVjdG9yKG1heEJpdHMgPSAzMikge1xuICAgIHRoaXMuYml0cyA9IDA7XG4gICAgdGhpcy5tb3JlID0gbWF4Qml0cyA+IDMyID8gbmV3IFVpbnQzMkFycmF5KE1hdGguY2VpbCgobWF4Qml0cyAtIDMyKSAvIDMyKSkgOiBudWxsO1xuICB9XG5cbiAgLyoqIEBwYXJhbSB7bnVtYmVyfSBiaXQgKi9cbiAgZ2V0KGJpdCkge1xuICAgIGlmIChiaXQgPj0gMzIgJiYgdGhpcy5tb3JlKSB7XG4gICAgICBsZXQgaSA9IE1hdGguZmxvb3IoKGJpdCAtIDMyKSAvIDMyKTtcbiAgICAgIGxldCBiID0gYml0ICUgMzI7XG4gICAgICByZXR1cm4gQm9vbGVhbih0aGlzLm1vcmVbaV0gJiAoMSA8PCBiKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBCb29sZWFuKHRoaXMuYml0cyAmICgxIDw8IGJpdCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAcGFyYW0ge251bWJlcn0gYml0ICovXG4gIHNldChiaXQpIHtcbiAgICBpZiAoYml0ID49IDMyICYmIHRoaXMubW9yZSkge1xuICAgICAgbGV0IGkgPSBNYXRoLmZsb29yKChiaXQgLSAzMikgLyAzMik7XG4gICAgICBsZXQgYiA9IGJpdCAlIDMyO1xuICAgICAgdGhpcy5tb3JlW2ldIHw9IDEgPDwgYjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iaXRzIHw9IDEgPDwgYml0O1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuYml0cyA9IDA7XG4gICAgaWYgKHRoaXMubW9yZSkge1xuICAgICAgdGhpcy5tb3JlLmZpbGwoMCk7XG4gICAgfVxuICB9XG59XG4iLAogICAgIi8vIFRoaXMgZmlsZSBpcyBhdXRvZ2VuZXJhdGVkIGJ5IGJ1aWxkLXByZWZpeGVzLmpzLiBETyBOT1QgRURJVCFcblxuZXhwb3J0cy5GZWF0dXJlcyA9IHtcbiAgTmVzdGluZzogMSxcbiAgTm90U2VsZWN0b3JMaXN0OiAyLFxuICBEaXJTZWxlY3RvcjogNCxcbiAgTGFuZ1NlbGVjdG9yTGlzdDogOCxcbiAgSXNTZWxlY3RvcjogMTYsXG4gIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzUGVyY2VudDogMzIsXG4gIE1lZGlhSW50ZXJ2YWxTeW50YXg6IDY0LFxuICBNZWRpYVJhbmdlU3ludGF4OiAxMjgsXG4gIEN1c3RvbU1lZGlhUXVlcmllczogMjU2LFxuICBDbGFtcEZ1bmN0aW9uOiA1MTIsXG4gIENvbG9yRnVuY3Rpb246IDEwMjQsXG4gIE9rbGFiQ29sb3JzOiAyMDQ4LFxuICBMYWJDb2xvcnM6IDQwOTYsXG4gIFAzQ29sb3JzOiA4MTkyLFxuICBIZXhBbHBoYUNvbG9yczogMTYzODQsXG4gIFNwYWNlU2VwYXJhdGVkQ29sb3JOb3RhdGlvbjogMzI3NjgsXG4gIEZvbnRGYW1pbHlTeXN0ZW1VaTogNjU1MzYsXG4gIERvdWJsZVBvc2l0aW9uR3JhZGllbnRzOiAxMzEwNzIsXG4gIFZlbmRvclByZWZpeGVzOiAyNjIxNDQsXG4gIExvZ2ljYWxQcm9wZXJ0aWVzOiA1MjQyODgsXG4gIExpZ2h0RGFyazogMTA0ODU3NixcbiAgU2VsZWN0b3JzOiAzMSxcbiAgTWVkaWFRdWVyaWVzOiA0NDgsXG4gIENvbG9yczogMTExMzA4OCxcbn07XG4iLAogICAgImxldCBwYXJ0cyA9IFtwcm9jZXNzLnBsYXRmb3JtLCBwcm9jZXNzLmFyY2hdO1xuaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdsaW51eCcpIHtcbiAgY29uc3QgeyBNVVNMLCBmYW1pbHlTeW5jIH0gPSByZXF1aXJlKCdkZXRlY3QtbGliYycpO1xuICBjb25zdCBmYW1pbHkgPSBmYW1pbHlTeW5jKCk7XG4gIGlmIChmYW1pbHkgPT09IE1VU0wpIHtcbiAgICBwYXJ0cy5wdXNoKCdtdXNsJyk7XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5hcmNoID09PSAnYXJtJykge1xuICAgIHBhcnRzLnB1c2goJ2dudWVhYmloZicpO1xuICB9IGVsc2Uge1xuICAgIHBhcnRzLnB1c2goJ2dudScpO1xuICB9XG59IGVsc2UgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgcGFydHMucHVzaCgnbXN2YycpO1xufVxuXG5sZXQgbmF0aXZlO1xudHJ5IHtcbiAgbmF0aXZlID0gcmVxdWlyZShgbGlnaHRuaW5nY3NzLSR7cGFydHMuam9pbignLScpfWApO1xufSBjYXRjaCAoZXJyKSB7XG4gIG5hdGl2ZSA9IHJlcXVpcmUoYC4uL2xpZ2h0bmluZ2Nzcy4ke3BhcnRzLmpvaW4oJy0nKX0ubm9kZWApO1xufVxuXG5tb2R1bGUuZXhwb3J0cy50cmFuc2Zvcm0gPSB3cmFwKG5hdGl2ZS50cmFuc2Zvcm0pO1xubW9kdWxlLmV4cG9ydHMudHJhbnNmb3JtU3R5bGVBdHRyaWJ1dGUgPSB3cmFwKG5hdGl2ZS50cmFuc2Zvcm1TdHlsZUF0dHJpYnV0ZSk7XG5tb2R1bGUuZXhwb3J0cy5idW5kbGUgPSB3cmFwKG5hdGl2ZS5idW5kbGUpO1xubW9kdWxlLmV4cG9ydHMuYnVuZGxlQXN5bmMgPSB3cmFwKG5hdGl2ZS5idW5kbGVBc3luYyk7XG5tb2R1bGUuZXhwb3J0cy5icm93c2Vyc2xpc3RUb1RhcmdldHMgPSByZXF1aXJlKCcuL2Jyb3dzZXJzbGlzdFRvVGFyZ2V0cycpO1xubW9kdWxlLmV4cG9ydHMuY29tcG9zZVZpc2l0b3JzID0gcmVxdWlyZSgnLi9jb21wb3NlVmlzaXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzLkZlYXR1cmVzID0gcmVxdWlyZSgnLi9mbGFncycpLkZlYXR1cmVzO1xuXG5mdW5jdGlvbiB3cmFwKGNhbGwpIHtcbiAgcmV0dXJuIChvcHRpb25zKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnZpc2l0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGxldCBkZXBzID0gW107XG4gICAgICBvcHRpb25zLnZpc2l0b3IgPSBvcHRpb25zLnZpc2l0b3Ioe1xuICAgICAgICBhZGREZXBlbmRlbmN5KGRlcCkge1xuICAgICAgICAgIGRlcHMucHVzaChkZXApO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbGV0IHJlc3VsdCA9IGNhbGwob3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQudGhlbihyZXMgPT4ge1xuICAgICAgICAgIGlmIChkZXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmVzLmRlcGVuZGVuY2llcyA/Pz0gW107XG4gICAgICAgICAgICByZXMuZGVwZW5kZW5jaWVzLnB1c2goLi4uZGVwcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChkZXBzLmxlbmd0aCkge1xuICAgICAgICByZXN1bHQuZGVwZW5kZW5jaWVzID8/PSBbXTtcbiAgICAgICAgcmVzdWx0LmRlcGVuZGVuY2llcy5wdXNoKC4uLmRlcHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNhbGwob3B0aW9ucyk7XG4gICAgfVxuICB9O1xufVxuIiwKICAgICIjIS91c3IvYmluL2VudiBidW5cbi8qKlxuICogUG9zdGJ1aWxkIENTUyBwdXJnZSDigJQgc3RhbmRhbG9uZSBCdW4gc2NyaXB0LlxuICpcbiAqIFJ1bnMgYWZ0ZXIgcnNidWlsZCBidWlsZCwgcHVyZ2VzIENTUyBmaWxlcyBpbiBkaXN0LyB1c2luZyB0aGUgcHVyZ2UgbWFuaWZlc3RcbiAqIGFuZCBjb25zdW1lciBKU1ggYW5hbHlzaXMuIFplcm8gTm9kZSBpbXBvcnRzLlxuICpcbiAqIFRocmVlLWxldmVsIHB1cmdlOlxuICogICBMMSDigJQgY2xhc3MtbGV2ZWw6IGRyb3AgcnVsZXMgd2hvc2UgY2xhc3Mgc2VsZWN0b3JzIGFyZW4ndCBpbiB0aGUgc2FmZWxpc3QgKHBvc3Rjc3MpXG4gKiAgIEwyIOKAlCBhdHRyLWxldmVsOiBkcm9wIHJ1bGVzIHdpdGggZGF0YS9hcmlhIGF0dHJpYnV0ZSBzZWxlY3RvcnMgZm9yIHVudXNlZCBwcm9wcyAocG9zdGNzcylcbiAqICAgTDMg4oCUIHZhciBjbGVhbnVwOiBpdGVyYXRpdmVseSByZW1vdmUgZGVjbGFyZWQtYnV0LXVucmVmZXJlbmNlZCBDU1MgY3VzdG9tIHByb3BlcnRpZXMgKHBvc3Rjc3MpXG4gKiAgIEZpbmFsIOKAlCBtaW5pZmljYXRpb24gdmlhIExpZ2h0bmluZyBDU1NcbiAqXG4gKiBVc2FnZTpcbiAqICAgYnVueCBAcGF0aHNjYWxlL3JzYnVpbGQtcGx1Z2luLXVpLWNzcy1wdXJnZSBcXFxuICogICAgIC0tZGlzdCBkaXN0IC0tc3JjIHNyYyAtLW1hbmlmZXN0IG5vZGVfbW9kdWxlcy9AcGF0aHNjYWxlL3VpL2Rpc3QvcHVyZ2UtbWFuaWZlc3QuanNvblxuICovXG5cbmltcG9ydCB7IEdsb2IgfSBmcm9tIFwiYnVuXCI7XG5pbXBvcnQgeyB0cmFuc2Zvcm0gfSBmcm9tIFwibGlnaHRuaW5nY3NzXCI7XG5pbXBvcnQgcG9zdGNzcyBmcm9tIFwicG9zdGNzc1wiO1xuaW1wb3J0IHR5cGUgeyBSdWxlLCBBdFJ1bGUgfSBmcm9tIFwicG9zdGNzc1wiO1xuaW1wb3J0IHsgc2NhbkNvbnN1bWVyU291cmNlLCBidWlsZFNhZmVsaXN0cyB9IGZyb20gXCIuL3NjYW4tY29uc3VtZXJcIjtcbmltcG9ydCB0eXBlIHsgUHVyZ2VNYW5pZmVzdCB9IGZyb20gXCIuL3NjYW4tY29uc3VtZXJcIjtcblxuLy8g4pSA4pSAIENMSSBhcmdzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiBwYXJzZUFyZ3MoYXJndjogc3RyaW5nW10pOiB7IGRpc3REaXI6IHN0cmluZzsgc3JjRGlyOiBzdHJpbmc7IG1hbmlmZXN0UGF0aDogc3RyaW5nIH0ge1xuICBjb25zdCBhcmdzID0gYXJndi5zbGljZSgyKTtcbiAgbGV0IGRpc3REaXIgPSBcIi4vZGlzdFwiO1xuICBsZXQgc3JjRGlyID0gXCIuL3NyY1wiO1xuICBsZXQgbWFuaWZlc3RQYXRoID0gXCJcIjtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJnc1tpXSA9PT0gXCItLWRpc3RcIiAmJiBhcmdzW2kgKyAxXSkgZGlzdERpciA9IGFyZ3NbKytpXTtcbiAgICBlbHNlIGlmIChhcmdzW2ldID09PSBcIi0tc3JjXCIgJiYgYXJnc1tpICsgMV0pIHNyY0RpciA9IGFyZ3NbKytpXTtcbiAgICBlbHNlIGlmIChhcmdzW2ldID09PSBcIi0tbWFuaWZlc3RcIiAmJiBhcmdzW2kgKyAxXSkgbWFuaWZlc3RQYXRoID0gYXJnc1srK2ldO1xuICB9XG5cbiAgaWYgKCFtYW5pZmVzdFBhdGgpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgXCJVc2FnZTogYnVueCBAcGF0aHNjYWxlL3JzYnVpbGQtcGx1Z2luLXVpLWNzcy1wdXJnZSAtLW1hbmlmZXN0IDxwYXRoPiBbLS1kaXN0IDxwYXRoPl0gWy0tc3JjIDxwYXRoPl1cIixcbiAgICApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIHJldHVybiB7IGRpc3REaXIsIHNyY0RpciwgbWFuaWZlc3RQYXRoIH07XG59XG5cbi8vIOKUgOKUgCBCdWlsZCBraWxsLWxpc3Q6IGNsYXNzZXMgZnJvbSBjb21wb25lbnRzIHRoYXQgYXJlIG5ldmVyIGltcG9ydGVkIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiBjb2xsZWN0Q2xhc3Nlc0Zyb21FbnRyeShlbnRyeTogeyBjbGFzc2VzOiB7IGFsd2F5czogc3RyaW5nW107IGJ5UHJvcDogUmVjb3JkPHN0cmluZywgc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4+IH0gfSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmVzdWx0ID0gWy4uLmVudHJ5LmNsYXNzZXMuYWx3YXlzXTtcbiAgZm9yIChjb25zdCB2YWx1ZSBvZiBPYmplY3QudmFsdWVzKGVudHJ5LmNsYXNzZXMuYnlQcm9wKSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmVzdWx0LnB1c2goLi4udmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGNsYXNzZXMgb2YgT2JqZWN0LnZhbHVlcyh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goLi4uY2xhc3Nlcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkS2lsbExpc3QobWFuaWZlc3Q6IFB1cmdlTWFuaWZlc3QsIGltcG9ydGVkQ29tcG9uZW50czogU2V0PHN0cmluZz4pOiBTZXQ8c3RyaW5nPiB7XG4gIC8vIEZvciBlYWNoIG1hbmlmZXN0IGVudHJ5LCBjb2xsZWN0IEJFTSByb290IGNsYXNzZXMgKGZyb20gY2xhc3Nlcy5hbHdheXMpLlxuICAvLyBBIGNsYXNzIGlzIGNvbnNpZGVyZWQgYSBCRU0tb3duZWQgY2xhc3Mgb2YgYSBjb21wb25lbnQgaWYgaXQgbWF0Y2hlc1xuICAvLyBvbmUgb2YgaXRzIHJvb3RzOiBleGFjdCBtYXRjaCwgcm9vdC0tLCBvciByb290X18uXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSAoVGFpbHdpbmQgdXRpbGl0aWVzIGxpa2UgZ2FwLTEsIGZsZXgtY29sKSBpcyBuZXZlciBraWxsZWQuXG4gIGNvbnN0IGNvbXBvbmVudEJlbVJvb3RzID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuXG4gIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIE9iamVjdC5lbnRyaWVzKG1hbmlmZXN0KSkge1xuICAgIGNvbnN0IHJvb3QgPSBrZXkuc3BsaXQoXCIuXCIpWzBdO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gY29tcG9uZW50QmVtUm9vdHMuZ2V0KHJvb3QpID8/IG5ldyBTZXQoKTtcbiAgICBmb3IgKGNvbnN0IGNscyBvZiBlbnRyeS5jbGFzc2VzLmFsd2F5cykge1xuICAgICAgZXhpc3RpbmcuYWRkKGNscyk7XG4gICAgfVxuICAgIGNvbXBvbmVudEJlbVJvb3RzLnNldChyb290LCBleGlzdGluZyk7XG4gIH1cblxuICAvLyBDb2xsZWN0IEFMTCBjbGFzc2VzIHBlciBjb21wb25lbnRcbiAgY29uc3QgY29tcG9uZW50Q2xhc3NlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgZm9yIChjb25zdCBba2V5LCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXMobWFuaWZlc3QpKSB7XG4gICAgY29uc3Qgcm9vdCA9IGtleS5zcGxpdChcIi5cIilbMF07XG4gICAgY29uc3QgZXhpc3RpbmcgPSBjb21wb25lbnRDbGFzc2VzLmdldChyb290KSA/PyBbXTtcbiAgICBleGlzdGluZy5wdXNoKC4uLmNvbGxlY3RDbGFzc2VzRnJvbUVudHJ5KGVudHJ5KSk7XG4gICAgY29tcG9uZW50Q2xhc3Nlcy5zZXQocm9vdCwgZXhpc3RpbmcpO1xuICB9XG5cbiAgLy8gRmlsdGVyOiBvbmx5IGluY2x1ZGUgY2xhc3NlcyB0aGF0IG1hdGNoIGEgQkVNIHJvb3Qgb2YgdGhlaXIgY29tcG9uZW50XG4gIGZ1bmN0aW9uIGlzQmVtQ2xhc3MoY2xzOiBzdHJpbmcsIGJlbVJvb3RzOiBTZXQ8c3RyaW5nPik6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3Qgcm9vdCBvZiBiZW1Sb290cykge1xuICAgICAgaWYgKGNscyA9PT0gcm9vdCB8fCBjbHMuc3RhcnRzV2l0aChgJHtyb290fS0tYCkgfHwgY2xzLnN0YXJ0c1dpdGgoYCR7cm9vdH1fX2ApKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBraWxsTGlzdCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBzYWZlQ2xhc3NlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGZvciAoY29uc3QgW2NvbXBvbmVudCwgY2xhc3Nlc10gb2YgY29tcG9uZW50Q2xhc3Nlcykge1xuICAgIGNvbnN0IGJlbVJvb3RzID0gY29tcG9uZW50QmVtUm9vdHMuZ2V0KGNvbXBvbmVudCkgPz8gbmV3IFNldCgpO1xuICAgIGlmIChpbXBvcnRlZENvbXBvbmVudHMuaGFzKGNvbXBvbmVudCkpIHtcbiAgICAgIGZvciAoY29uc3QgY2xzIG9mIGNsYXNzZXMpIHNhZmVDbGFzc2VzLmFkZChjbHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPbmx5IGtpbGwgQkVNLW93bmVkIGNsYXNzZXMsIG5vdCBUYWlsd2luZCB1dGlsaXRpZXNcbiAgICAgIGZvciAoY29uc3QgY2xzIG9mIGNsYXNzZXMpIHtcbiAgICAgICAgaWYgKGlzQmVtQ2xhc3MoY2xzLCBiZW1Sb290cykpIHtcbiAgICAgICAgICBraWxsTGlzdC5hZGQoY2xzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElmIGEgY2xhc3MgYXBwZWFycyBpbiBCT1RIIHVzZWQgYW5kIHVudXNlZCBjb21wb25lbnRzLCBrZWVwIGl0XG4gIGZvciAoY29uc3QgY2xzIG9mIHNhZmVDbGFzc2VzKSB7XG4gICAga2lsbExpc3QuZGVsZXRlKGNscyk7XG4gIH1cblxuICByZXR1cm4ga2lsbExpc3Q7XG59XG5cbi8qKiBDb252ZXJ0IGtlYmFiLWNhc2UgZGlyZWN0b3J5IG5hbWUgdG8gUGFzY2FsQ2FzZSBjb21wb25lbnQgbmFtZSAqL1xuZnVuY3Rpb24ga2ViYWJUb1Bhc2NhbChzOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcy5zcGxpdChcIi1cIikubWFwKChwKSA9PiBwLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcC5zbGljZSgxKSkuam9pbihcIlwiKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2NhbkltcG9ydGVkQ29tcG9uZW50cyhzcmNEaXI6IHN0cmluZyk6IFByb21pc2U8U2V0PHN0cmluZz4+IHtcbiAgY29uc3QgaW1wb3J0ZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgZ2xvYiA9IG5ldyBHbG9iKFwiKiovKi57dHN4LHRzLGpzeCxqc31cIik7XG5cbiAgZm9yIGF3YWl0IChjb25zdCByZWxQYXRoIG9mIGdsb2Iuc2Nhbih7IGN3ZDogc3JjRGlyIH0pKSB7XG4gICAgaWYgKHJlbFBhdGguaW5jbHVkZXMoXCJub2RlX21vZHVsZXNcIikpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYCR7c3JjRGlyfS8ke3JlbFBhdGh9YDtcbiAgICBjb25zdCBjb2RlID0gYXdhaXQgQnVuLmZpbGUoZnVsbFBhdGgpLnRleHQoKTtcbiAgICBpZiAoIWNvZGUuaW5jbHVkZXMoXCJAcGF0aHNjYWxlL3VpXCIpKSBjb250aW51ZTtcblxuICAgIC8vIE1hdGNoIGJhcnJlbDogaW1wb3J0IHsgRm9vLCBCYXIgYXMgQmF6IH0gZnJvbSBcIkBwYXRoc2NhbGUvdWlcIlxuICAgIGNvbnN0IGJhcnJlbFJlZ2V4ID0gL2ltcG9ydFxccypcXHsoW159XSspXFx9XFxzKmZyb21cXHMqWydcIl1AcGF0aHNjYWxlXFwvdWlbJ1wiXS9nO1xuICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgY29kZS5tYXRjaEFsbChiYXJyZWxSZWdleCkpIHtcbiAgICAgIGNvbnN0IHNwZWNpZmllcnMgPSBtYXRjaFsxXS5zcGxpdChcIixcIik7XG4gICAgICBmb3IgKGNvbnN0IHNwZWMgb2Ygc3BlY2lmaWVycykge1xuICAgICAgICBjb25zdCB0cmltbWVkID0gc3BlYy50cmltKCk7XG4gICAgICAgIGlmICh0cmltbWVkLnN0YXJ0c1dpdGgoXCJ0eXBlIFwiKSkgY29udGludWU7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0cmltbWVkLnNwbGl0KC9cXHMrYXNcXHMrLylbMF0udHJpbSgpO1xuICAgICAgICBpZiAobmFtZSAmJiAvXltBLVpdLy50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgaW1wb3J0ZWQuYWRkKG5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWF0Y2ggZGVlcC1wYXRoIGRlZmF1bHQ6IGltcG9ydCBGb28gZnJvbSBcIkBwYXRoc2NhbGUvdWkvY29tcG9uZW50cy9mb28tYmFyXCJcbiAgICBjb25zdCBkZWVwRGVmYXVsdFJlZ2V4ID0gL2ltcG9ydFxccysoW0EtWl1bYS16QS1aMC05XSopXFxzK2Zyb21cXHMqWydcIl1AcGF0aHNjYWxlXFwvdWlcXC9jb21wb25lbnRzXFwvKFteJ1wiXSspWydcIl0vZztcbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIGNvZGUubWF0Y2hBbGwoZGVlcERlZmF1bHRSZWdleCkpIHtcbiAgICAgIGltcG9ydGVkLmFkZChtYXRjaFsxXSk7XG4gICAgfVxuXG4gICAgLy8gTWF0Y2ggZGVlcC1wYXRoIG5hbWVkOiBpbXBvcnQgeyBGb28sIEJhciB9IGZyb20gXCJAcGF0aHNjYWxlL3VpL2NvbXBvbmVudHMvZm9vLWJhclwiXG4gICAgY29uc3QgZGVlcE5hbWVkUmVnZXggPSAvaW1wb3J0XFxzKlxceyhbXn1dKylcXH1cXHMqZnJvbVxccypbJ1wiXUBwYXRoc2NhbGVcXC91aVxcL2NvbXBvbmVudHNcXC8oW14nXCJdKylbJ1wiXS9nO1xuICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgY29kZS5tYXRjaEFsbChkZWVwTmFtZWRSZWdleCkpIHtcbiAgICAgIGNvbnN0IHNwZWNpZmllcnMgPSBtYXRjaFsxXS5zcGxpdChcIixcIik7XG4gICAgICBmb3IgKGNvbnN0IHNwZWMgb2Ygc3BlY2lmaWVycykge1xuICAgICAgICBjb25zdCB0cmltbWVkID0gc3BlYy50cmltKCk7XG4gICAgICAgIGlmICh0cmltbWVkLnN0YXJ0c1dpdGgoXCJ0eXBlIFwiKSkgY29udGludWU7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0cmltbWVkLnNwbGl0KC9cXHMrYXNcXHMrLylbMF0udHJpbSgpO1xuICAgICAgICBpZiAobmFtZSAmJiAvXltBLVpdLy50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgaW1wb3J0ZWQuYWRkKG5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBBbHNvIGFkZCB0aGUgUGFzY2FsQ2FzZSBuYW1lIGZyb20gdGhlIHBhdGggaXRzZWxmIChjb3ZlcnMgc3ViLWNvbXBvbmVudHMpXG4gICAgICBjb25zdCBkaXJOYW1lID0gbWF0Y2hbMl0uc3BsaXQoXCIvXCIpWzBdO1xuICAgICAgaW1wb3J0ZWQuYWRkKGtlYmFiVG9QYXNjYWwoZGlyTmFtZSkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbXBvcnRlZDtcbn1cblxuLyoqXG4gKiBCdWlsZCBkZXBlbmRlbmN5IGdyYXBoIGZyb20gbWFuaWZlc3QgYGRlcHNgIGZpZWxkcy5cbiAqL1xuZnVuY3Rpb24gYnVpbGREZXBHcmFwaEZyb21NYW5pZmVzdChtYW5pZmVzdDogUHVyZ2VNYW5pZmVzdCk6IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PiB7XG4gIGNvbnN0IGdyYXBoID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuICBmb3IgKGNvbnN0IFtrZXksIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhtYW5pZmVzdCkpIHtcbiAgICBjb25zdCByb290ID0ga2V5LnNwbGl0KFwiLlwiKVswXTtcbiAgICBpZiAoZW50cnkuZGVwcyAmJiBlbnRyeS5kZXBzLmxlbmd0aCA+IDAgJiYgIWdyYXBoLmhhcyhyb290KSkge1xuICAgICAgZ3JhcGguc2V0KHJvb3QsIG5ldyBTZXQoZW50cnkuZGVwcykpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZ3JhcGg7XG59XG5cbi8qKlxuICogR2l2ZW4gZGlyZWN0bHkgaW1wb3J0ZWQgY29tcG9uZW50cyBhbmQgYSBkZXBlbmRlbmN5IGdyYXBoLFxuICogdHJhbnNpdGl2ZWx5IHJlc29sdmUgYWxsIGNvbXBvbmVudHMgdGhhdCBhcmUgbmVlZGVkLlxuICovXG5mdW5jdGlvbiByZXNvbHZlVHJhbnNpdGl2ZURlcHMoXG4gIGltcG9ydGVkOiBTZXQ8c3RyaW5nPixcbiAgZGVwR3JhcGg6IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+Pixcbik6IFNldDxzdHJpbmc+IHtcbiAgY29uc3QgcmVzb2x2ZWQgPSBuZXcgU2V0KGltcG9ydGVkKTtcbiAgY29uc3QgcXVldWUgPSBbLi4uaW1wb3J0ZWRdO1xuXG4gIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgY29tcCA9IHF1ZXVlLnBvcCgpITtcbiAgICBjb25zdCBkZXBzID0gZGVwR3JhcGguZ2V0KGNvbXApO1xuICAgIGlmICghZGVwcykgY29udGludWU7XG4gICAgZm9yIChjb25zdCBkZXAgb2YgZGVwcykge1xuICAgICAgaWYgKCFyZXNvbHZlZC5oYXMoZGVwKSkge1xuICAgICAgICByZXNvbHZlZC5hZGQoZGVwKTtcbiAgICAgICAgcXVldWUucHVzaChkZXApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXNvbHZlZDtcbn1cblxuLy8g4pSA4pSAIExldmVsIDE6IGNsYXNzLWxldmVsIHB1cmdlICsga2V5ZnJhbWVzICsgZm9udC1mYWNlICsgZWxlbWVudCBzZWxlY3RvcnMg4pSA4pSA4pSAXG5cbi8qKiBVbmVzY2FwZSBDU1MgaWRlbnRpZmllcnM6IGBpY29uLVxcW21kaS0tY29nXFxdYCDihpIgYGljb24tW21kaS0tY29nXWAgKi9cbmZ1bmN0aW9uIHVuZXNjYXBlQ3NzKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzLnJlcGxhY2UoL1xcXFwoLikvZywgXCIkMVwiKTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdENsYXNzZXNGcm9tU2VsZWN0b3Ioc2VsZWN0b3I6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgLy8gTWF0Y2ggY2xhc3Mgc2VsZWN0b3JzIGluY2x1ZGluZyBDU1MgZXNjYXBlIHNlcXVlbmNlcyAoZS5nLiAuaWNvbi1cXFttZGktLWNvZ1xcXSlcbiAgY29uc3QgbWF0Y2hlcyA9IHNlbGVjdG9yLm1hdGNoQWxsKC9cXC4oW2EtekEtWl8tXSg/OlthLXpBLVowLTlfLV18XFxcXFteXFxzXSkqKS9nKTtcbiAgcmV0dXJuIFsuLi5tYXRjaGVzXS5tYXAoKG0pID0+IHVuZXNjYXBlQ3NzKG1bMV0pKTtcbn1cblxuLy8gRWxlbWVudHMgdGhhdCBhcmUgYWx3YXlzIGtlcHQgKGZ1bmRhbWVudGFsIHJlc2V0IHRhcmdldHMpLlxuLy8gRXZlcnl0aGluZyBlbHNlIChzdWIsIHN1cCwgaW1nLCBzZWxlY3QsIHRleHRhcmVhLCBldGMuKSBpcyBzdHJpcHBlZFxuLy8gdW5sZXNzIGl0IGFwcGVhcnMgYWxvbmdzaWRlIGEgc2FmZWxpc3RlZCBjbGFzcy5cbmNvbnN0IEFMV0FZU19LRUVQX1NFTEVDVE9SUyA9IG5ldyBTZXQoW1xuICBcIipcIiwgXCJodG1sXCIsIFwiYm9keVwiLCBcIjpyb290XCIsIFwiOjpiZWZvcmVcIiwgXCI6OmFmdGVyXCIsXG4gIFwiOmJlZm9yZVwiLCBcIjphZnRlclwiLCBcIjo6YmFja2Ryb3BcIixcbl0pO1xuXG5mdW5jdGlvbiBpc0tlZXBhYmxlTm9uQ2xhc3NTZWxlY3RvcihzZWw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBzdHJpcHBlZCA9IHNlbC50cmltKCk7XG5cbiAgLy8gRXhhY3QgbWF0Y2ggb24gZnVuZGFtZW50YWwgc2VsZWN0b3JzXG4gIGZvciAoY29uc3QgZWwgb2YgQUxXQVlTX0tFRVBfU0VMRUNUT1JTKSB7XG4gICAgaWYgKHN0cmlwcGVkID09PSBlbCkgcmV0dXJuIHRydWU7XG4gICAgLy8gQWxsb3cgcHNldWRvLWVsZW1lbnRzL2NsYXNzZXMgYXR0YWNoZWQgdG8gZnVuZGFtZW50YWwgc2VsZWN0b3JzXG4gICAgLy8gZS5nLiAqOjpiZWZvcmUsIGh0bWw6bm90KFtkYXRhLXRoZW1lXSlcbiAgICBpZiAoc3RyaXBwZWQuc3RhcnRzV2l0aChlbCArIFwiOlwiKSB8fCBzdHJpcHBlZC5zdGFydHNXaXRoKGVsICsgXCJbXCIpIHx8IHN0cmlwcGVkLnN0YXJ0c1dpdGgoZWwgKyBcIiBcIikpIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gS2VlcCA6cm9vdCB3aXRoIHBzZXVkby9hdHRyICh0aGVtZSBzZWxlY3RvcnMgbGlrZSA6cm9vdDpub3QoW2RhdGEtdGhlbWVdKSlcbiAgaWYgKC9eOnJvb3QvLnRlc3Qoc3RyaXBwZWQpKSByZXR1cm4gdHJ1ZTtcblxuICAvLyBLZWVwIGF0dHJpYnV0ZS1vbmx5IHNlbGVjdG9ycyBsaWtlIFtkYXRhLXRoZW1lPWRhcmtdIOKAlCB0aGVtZSB2YXJpYWJsZSBkZWNsYXJhdGlvbnNcbiAgaWYgKC9eXFxbZGF0YS10aGVtZS8udGVzdChzdHJpcHBlZCkpIHJldHVybiB0cnVlO1xuXG4gIC8vIEtlZXAgW2hpZGRlbl0gcmVzZXQgcnVsZXNcbiAgaWYgKC9eXFxbaGlkZGVuLy50ZXN0KHN0cmlwcGVkKSkgcmV0dXJuIHRydWU7XG5cbiAgLy8gRHJvcCBldmVyeXRoaW5nIGVsc2U6IDpob3N0LCA6d2hlcmUoc2VsZWN0Li4uKSwgZWxlbWVudCBzZWxlY3RvcnMgKHN1Yiwgc3VwLCBpbWcsIGV0Yy4pXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcHVyZ2VDbGFzc2VzKGNzczogc3RyaW5nLCBraWxsTGlzdDogU2V0PHN0cmluZz4pOiBzdHJpbmcge1xuICBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZShjc3MpO1xuXG4gIC8vIFBhc3MgMTogcmVtb3ZlIHNlbGVjdG9ycyB3aGVyZSBBTEwgY2xhc3NlcyBhcmUgb24gdGhlIGtpbGwtbGlzdFxuICAvLyAoaS5lLiB0aGV5IGJlbG9uZyBleGNsdXNpdmVseSB0byB1bnVzZWQgVUkgY29tcG9uZW50cykuXG4gIC8vIEFueSBzZWxlY3RvciB3aXRoIGV2ZW4gb25lIGNsYXNzIE5PVCBvbiB0aGUga2lsbC1saXN0IGlzIGtlcHQuXG4gIHJvb3Qud2Fsa1J1bGVzKChydWxlKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0b3JzID0gcnVsZS5zZWxlY3RvcnM7XG4gICAgY29uc3Qga2VwdDogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3Qgc2VsIG9mIHNlbGVjdG9ycykge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IGV4dHJhY3RDbGFzc2VzRnJvbVNlbGVjdG9yKHNlbCk7XG4gICAgICBpZiAoY2xhc3Nlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKGlzS2VlcGFibGVOb25DbGFzc1NlbGVjdG9yKHNlbCkpIHtcbiAgICAgICAgICBrZXB0LnB1c2goc2VsKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gS2VlcCBpZiBBTlkgY2xhc3MgaXMgbm90IG9uIHRoZSBraWxsLWxpc3RcbiAgICAgIGlmIChjbGFzc2VzLnNvbWUoKGMpID0+ICFraWxsTGlzdC5oYXMoYykpKSB7XG4gICAgICAgIGtlcHQucHVzaChzZWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXB0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcnVsZS5yZW1vdmUoKTtcbiAgICB9IGVsc2UgaWYgKGtlcHQubGVuZ3RoIDwgc2VsZWN0b3JzLmxlbmd0aCkge1xuICAgICAgcnVsZS5zZWxlY3RvcnMgPSBrZXB0O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gUGFzcyAyOiBjb2xsZWN0IGFuaW1hdGlvbiBuYW1lcyByZWZlcmVuY2VkIGJ5IHN1cnZpdmluZyBydWxlc1xuICBjb25zdCB1c2VkS2V5ZnJhbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHJvb3Qud2Fsa0RlY2xzKC9eYW5pbWF0aW9uKC1uYW1lKT8kLywgKGRlY2wpID0+IHtcbiAgICAvLyBhbmltYXRpb24tbmFtZSBjYW4gYmUgY29tbWEtc2VwYXJhdGVkXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGRlY2wudmFsdWUuc3BsaXQoXCIsXCIpKSB7XG4gICAgICBjb25zdCBuYW1lID0gcGFydC50cmltKCkuc3BsaXQoL1xccysvKVswXTtcbiAgICAgIGlmIChuYW1lICYmIG5hbWUgIT09IFwibm9uZVwiICYmIG5hbWUgIT09IFwiaW5pdGlhbFwiICYmIG5hbWUgIT09IFwiaW5oZXJpdFwiKSB7XG4gICAgICAgIHVzZWRLZXlmcmFtZXMuYWRkKG5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gUGFzcyAzOiByZW1vdmUgdW51c2VkIEBrZXlmcmFtZXNcbiAgcm9vdC53YWxrQXRSdWxlcyhcImtleWZyYW1lc1wiLCAoYXRSdWxlKSA9PiB7XG4gICAgaWYgKCF1c2VkS2V5ZnJhbWVzLmhhcyhhdFJ1bGUucGFyYW1zLnRyaW0oKSkpIHtcbiAgICAgIGF0UnVsZS5yZW1vdmUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFBhc3MgNDogY29sbGVjdCBmb250IGZhbWlsaWVzIHJlZmVyZW5jZWQgYnkgc3Vydml2aW5nIHJ1bGVzXG4gIGNvbnN0IHVzZWRGb250cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICByb290LndhbGtEZWNscygvXmZvbnQoLWZhbWlseSk/JC8sIChkZWNsKSA9PiB7XG4gICAgLy8gRXh0cmFjdCBmb250IGZhbWlseSBuYW1lcyAocm91Z2ggYnV0IGNhdGNoZXMgY29tbW9uIHBhdHRlcm5zKVxuICAgIGZvciAoY29uc3QgcGFydCBvZiBkZWNsLnZhbHVlLnNwbGl0KFwiLFwiKSkge1xuICAgICAgY29uc3QgbmFtZSA9IHBhcnQudHJpbSgpLnJlcGxhY2UoL15bXCInXXxbXCInXSQvZywgXCJcIik7XG4gICAgICBpZiAobmFtZSkgdXNlZEZvbnRzLmFkZChuYW1lKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFBhc3MgNTogcmVtb3ZlIHVudXNlZCBAZm9udC1mYWNlXG4gIHJvb3Qud2Fsa0F0UnVsZXMoXCJmb250LWZhY2VcIiwgKGF0UnVsZSkgPT4ge1xuICAgIGxldCBmYW1pbHkgPSBcIlwiO1xuICAgIGF0UnVsZS53YWxrRGVjbHMoXCJmb250LWZhbWlseVwiLCAoZGVjbCkgPT4ge1xuICAgICAgZmFtaWx5ID0gZGVjbC52YWx1ZS50cmltKCkucmVwbGFjZSgvXltcIiddfFtcIiddJC9nLCBcIlwiKTtcbiAgICB9KTtcbiAgICBpZiAoZmFtaWx5ICYmICF1c2VkRm9udHMuaGFzKGZhbWlseSkpIHtcbiAgICAgIGF0UnVsZS5yZW1vdmUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFBhc3MgNjogY2xlYW4gZW1wdHkgYXQtcnVsZXNcbiAgbGV0IGNsZWFuZWQgPSB0cnVlO1xuICB3aGlsZSAoY2xlYW5lZCkge1xuICAgIGNsZWFuZWQgPSBmYWxzZTtcbiAgICByb290LndhbGtBdFJ1bGVzKChhdFJ1bGUpID0+IHtcbiAgICAgIGlmIChhdFJ1bGUubm9kZXMgJiYgYXRSdWxlLm5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBhdFJ1bGUucmVtb3ZlKCk7XG4gICAgICAgIGNsZWFuZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QudG9TdHJpbmcoKTtcbn1cblxuLy8g4pSA4pSAIExldmVsIDI6IGF0dHJpYnV0ZSBwdXJnZSAocG9zdGNzcykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIHB1cmdlQXR0cmlidXRlcyhjc3M6IHN0cmluZywgYXR0clNhZmVsaXN0OiBTZXQ8c3RyaW5nPik6IHN0cmluZyB7XG4gIGNvbnN0IHJvb3QgPSBwb3N0Y3NzLnBhcnNlKGNzcyk7XG5cbiAgcm9vdC53YWxrUnVsZXMoKHJ1bGUpID0+IHtcbiAgICBjb25zdCBzZWxlY3RvcnMgPSBydWxlLnNlbGVjdG9ycztcbiAgICBjb25zdCBrZXB0OiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBzZWwgb2Ygc2VsZWN0b3JzKSB7XG4gICAgICBjb25zdCBhdHRyTWF0Y2hlcyA9IHNlbC5tYXRjaEFsbCgvXFxbKGRhdGEtW2Etei1dK3xhcmlhLVthLXotXSspPVwiKFteXCJdKylcIlxcXS9nKTtcbiAgICAgIGxldCBzaG91bGRLZWVwID0gdHJ1ZTtcblxuICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiBhdHRyTWF0Y2hlcykge1xuICAgICAgICBpZiAobWF0Y2hbMV0gPT09IFwiZGF0YS1zbG90XCIpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBhdHRyU2VsZWN0b3IgPSBgWyR7bWF0Y2hbMV19PVwiJHttYXRjaFsyXX1cIl1gO1xuICAgICAgICBpZiAoIWF0dHJTYWZlbGlzdC5oYXMoYXR0clNlbGVjdG9yKSkge1xuICAgICAgICAgIHNob3VsZEtlZXAgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkS2VlcCkga2VwdC5wdXNoKHNlbCk7XG4gICAgfVxuXG4gICAgaWYgKGtlcHQubGVuZ3RoID09PSAwKSB7XG4gICAgICBydWxlLnJlbW92ZSgpO1xuICAgIH0gZWxzZSBpZiAoa2VwdC5sZW5ndGggPCBzZWxlY3RvcnMubGVuZ3RoKSB7XG4gICAgICBydWxlLnNlbGVjdG9ycyA9IGtlcHQ7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcm9vdC50b1N0cmluZygpO1xufVxuXG4vLyDilIDilIAgTGV2ZWwgMzogdW51c2VkIENTUyB2YXJpYWJsZSBjbGVhbnVwIChwb3N0Y3NzKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gY2xlYW5VbnVzZWRWYXJzKGNzczogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IGNoYW5nZWQgPSB0cnVlO1xuICBsZXQgcmVzdWx0ID0gY3NzO1xuXG4gIHdoaWxlIChjaGFuZ2VkKSB7XG4gICAgY2hhbmdlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHJvb3QgPSBwb3N0Y3NzLnBhcnNlKHJlc3VsdCk7XG5cbiAgICBjb25zdCBkZWNsYXJlZCA9IG5ldyBNYXA8c3RyaW5nLCB7IHJ1bGU6IFJ1bGUgfCBBdFJ1bGU7IHByb3A6IHN0cmluZyB9W10+KCk7XG4gICAgcm9vdC53YWxrRGVjbHMoL14tLS8sIChkZWNsKSA9PiB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gZGVjbGFyZWQuZ2V0KGRlY2wucHJvcCkgPz8gW107XG4gICAgICBlbnRyaWVzLnB1c2goeyBydWxlOiBkZWNsLnBhcmVudCBhcyBSdWxlLCBwcm9wOiBkZWNsLnByb3AgfSk7XG4gICAgICBkZWNsYXJlZC5zZXQoZGVjbC5wcm9wLCBlbnRyaWVzKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlZmVyZW5jZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICByb290LndhbGtEZWNscygoZGVjbCkgPT4ge1xuICAgICAgY29uc3QgcmVmcyA9IGRlY2wudmFsdWUubWF0Y2hBbGwoL3ZhclxcKFxccyooLS1bYS16QS1aMC05Xy1dKykvZyk7XG4gICAgICBmb3IgKGNvbnN0IHJlZiBvZiByZWZzKSByZWZlcmVuY2VkLmFkZChyZWZbMV0pO1xuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBbdmFyTmFtZSwgZW50cmllc10gb2YgZGVjbGFyZWQpIHtcbiAgICAgIGlmICghcmVmZXJlbmNlZC5oYXModmFyTmFtZSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgZW50cnkucnVsZS53YWxrRGVjbHMoZW50cnkucHJvcCwgKGRlY2wpID0+IHtcbiAgICAgICAgICAgIGRlY2wucmVtb3ZlKCk7XG4gICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJvb3Qud2Fsa1J1bGVzKChydWxlKSA9PiB7XG4gICAgICBpZiAocnVsZS5ub2RlcyAmJiBydWxlLm5vZGVzLmxlbmd0aCA9PT0gMCkgcnVsZS5yZW1vdmUoKTtcbiAgICB9KTtcbiAgICByb290LndhbGtBdFJ1bGVzKChhdFJ1bGUpID0+IHtcbiAgICAgIGlmIChhdFJ1bGUubm9kZXMgJiYgYXRSdWxlLm5vZGVzLmxlbmd0aCA9PT0gMCkgYXRSdWxlLnJlbW92ZSgpO1xuICAgIH0pO1xuXG4gICAgcmVzdWx0ID0gcm9vdC50b1N0cmluZygpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8g4pSA4pSAIE1pbmlmaWNhdGlvbjogTGlnaHRuaW5nIENTUyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gbWluaWZ5KGNzczogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgeyBjb2RlIH0gPSB0cmFuc2Zvcm0oe1xuICAgIGZpbGVuYW1lOiBcInB1cmdlZC5jc3NcIixcbiAgICBjb2RlOiBCdWZmZXIuZnJvbShjc3MpLFxuICAgIG1pbmlmeTogdHJ1ZSxcbiAgICBlcnJvclJlY292ZXJ5OiB0cnVlLFxuICB9KTtcbiAgcmV0dXJuIGNvZGUudG9TdHJpbmcoKTtcbn1cblxuLy8g4pSA4pSAIE1haW4g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gIGNvbnN0IHsgZGlzdERpciwgc3JjRGlyLCBtYW5pZmVzdFBhdGggfSA9IHBhcnNlQXJncyhwcm9jZXNzLmFyZ3YpO1xuXG4gIC8vIDEuIExvYWQgbWFuaWZlc3RcbiAgY29uc3QgbWFuaWZlc3Q6IFB1cmdlTWFuaWZlc3QgPSBKU09OLnBhcnNlKFxuICAgIGF3YWl0IEJ1bi5maWxlKG1hbmlmZXN0UGF0aCkudGV4dCgpLFxuICApO1xuICBjb25zdCB0b3RhbENvbXBvbmVudHMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKG1hbmlmZXN0KS5tYXAoayA9PiBrLnNwbGl0KFwiLlwiKVswXSkpLnNpemU7XG4gIGNvbnNvbGUubG9nKGBbY3NzLXB1cmdlXSBNYW5pZmVzdCBsb2FkZWQ6ICR7T2JqZWN0LmtleXMobWFuaWZlc3QpLmxlbmd0aH0gZW50cmllcyAoJHt0b3RhbENvbXBvbmVudHN9IGNvbXBvbmVudHMpYCk7XG5cbiAgLy8gMi4gU2NhbiBjb25zdW1lciBzb3VyY2UgZm9yIGRpcmVjdGx5IGltcG9ydGVkIGNvbXBvbmVudHNcbiAgY29uc3QgZGlyZWN0SW1wb3J0cyA9IGF3YWl0IHNjYW5JbXBvcnRlZENvbXBvbmVudHMoc3JjRGlyKTtcbiAgY29uc29sZS5sb2coYFtjc3MtcHVyZ2VdIERpcmVjdCBpbXBvcnRzIGZyb20gYXBwOiAke2RpcmVjdEltcG9ydHMuc2l6ZX0gLyAke3RvdGFsQ29tcG9uZW50c31gKTtcblxuICAvLyAzLiBSZXNvbHZlIHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzIGZyb20gbWFuaWZlc3QgZGVwc1xuICBjb25zdCBkZXBHcmFwaCA9IGJ1aWxkRGVwR3JhcGhGcm9tTWFuaWZlc3QobWFuaWZlc3QpO1xuICBjb25zdCBpbXBvcnRlZENvbXBvbmVudHMgPSByZXNvbHZlVHJhbnNpdGl2ZURlcHMoZGlyZWN0SW1wb3J0cywgZGVwR3JhcGgpO1xuICBjb25zdCB0cmFuc2l0aXZlID0gaW1wb3J0ZWRDb21wb25lbnRzLnNpemUgLSBkaXJlY3RJbXBvcnRzLnNpemU7XG4gIGNvbnNvbGUubG9nKGBbY3NzLXB1cmdlXSBUcmFuc2l0aXZlIGRlcHM6ICske3RyYW5zaXRpdmV9IOKGkiAke2ltcG9ydGVkQ29tcG9uZW50cy5zaXplfSB0b3RhbCB1c2VkIGNvbXBvbmVudHNgKTtcblxuICAvLyA0LiBCdWlsZCBraWxsLWxpc3QgKGNsYXNzZXMgZnJvbSBjb21wb25lbnRzIG5ldmVyIGltcG9ydGVkKSArIGF0dHIgc2FmZWxpc3RcbiAgY29uc3Qga2lsbExpc3QgPSBidWlsZEtpbGxMaXN0KG1hbmlmZXN0LCBpbXBvcnRlZENvbXBvbmVudHMpO1xuICBjb25zb2xlLmxvZyhgW2Nzcy1wdXJnZV0gS2lsbC1saXN0OiAke2tpbGxMaXN0LnNpemV9IGNsYXNzZXMgZnJvbSAke3RvdGFsQ29tcG9uZW50cyAtIGltcG9ydGVkQ29tcG9uZW50cy5zaXplfSB1bnVzZWQgY29tcG9uZW50c2ApO1xuXG4gIC8vIEFsc28gc2NhbiBmb3IgcHJvcC1sZXZlbCBhdHRyIHB1cmdpbmdcbiAgY29uc3QgdXNhZ2VzID0gYXdhaXQgc2NhbkNvbnN1bWVyU291cmNlKHNyY0Rpcik7XG4gIGNvbnN0IHsgYXR0clNhZmVsaXN0IH0gPSBidWlsZFNhZmVsaXN0cyh1c2FnZXMsIG1hbmlmZXN0KTtcblxuICAvLyA0LiBHbG9iIENTUyBmaWxlcyBpbiBkaXN0XG4gIGNvbnN0IGdsb2IgPSBuZXcgR2xvYihcIioqLyouY3NzXCIpO1xuICBsZXQgdG90YWxCZWZvcmUgPSAwO1xuICBsZXQgdG90YWxBZnRlciA9IDA7XG5cbiAgZm9yIGF3YWl0IChjb25zdCByZWxQYXRoIG9mIGdsb2Iuc2Nhbih7IGN3ZDogZGlzdERpciB9KSkge1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYCR7ZGlzdERpcn0vJHtyZWxQYXRofWA7XG4gICAgY29uc3Qgb3JpZ2luYWxDc3MgPSBhd2FpdCBCdW4uZmlsZShmdWxsUGF0aCkudGV4dCgpO1xuICAgIGNvbnN0IG9yaWdpbmFsU2l6ZSA9IEJ1ZmZlci5ieXRlTGVuZ3RoKG9yaWdpbmFsQ3NzLCBcInV0Zi04XCIpO1xuICAgIHRvdGFsQmVmb3JlICs9IG9yaWdpbmFsU2l6ZTtcblxuICAgIGNvbnNvbGUubG9nKGBbY3NzLXB1cmdlXSBQcm9jZXNzaW5nICR7cmVsUGF0aH0gKCR7KG9yaWdpbmFsU2l6ZSAvIDEwMjQpLnRvRml4ZWQoMSl9IEtCKWApO1xuXG4gICAgLy8gTGV2ZWwgMTogY2xhc3MtbGV2ZWwgcHVyZ2UgKHVudXNlZCBjb21wb25lbnRzIG9ubHkpXG4gICAgbGV0IHB1cmdlZENzcyA9IHB1cmdlQ2xhc3NlcyhvcmlnaW5hbENzcywga2lsbExpc3QpO1xuICAgIGNvbnN0IGFmdGVyTDEgPSBCdWZmZXIuYnl0ZUxlbmd0aChwdXJnZWRDc3MsIFwidXRmLThcIik7XG4gICAgY29uc29sZS5sb2coYFtjc3MtcHVyZ2VdICAgTDEgY2xhc3MgcHVyZ2U6ICR7KG9yaWdpbmFsU2l6ZSAvIDEwMjQpLnRvRml4ZWQoMSl9IOKGkiAkeyhhZnRlckwxIC8gMTAyNCkudG9GaXhlZCgxKX0gS0JgKTtcblxuICAgIC8vIExldmVsIDI6IGF0dHJpYnV0ZS1sZXZlbCBwdXJnZVxuICAgIHB1cmdlZENzcyA9IHB1cmdlQXR0cmlidXRlcyhwdXJnZWRDc3MsIGF0dHJTYWZlbGlzdCk7XG4gICAgY29uc3QgYWZ0ZXJMMiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHB1cmdlZENzcywgXCJ1dGYtOFwiKTtcbiAgICBjb25zb2xlLmxvZyhgW2Nzcy1wdXJnZV0gICBMMiBhdHRyIHB1cmdlOiAkeyhhZnRlckwxIC8gMTAyNCkudG9GaXhlZCgxKX0g4oaSICR7KGFmdGVyTDIgLyAxMDI0KS50b0ZpeGVkKDEpfSBLQmApO1xuXG4gICAgLy8gTGV2ZWwgMzogdW51c2VkIENTUyB2YXJpYWJsZSBjbGVhbnVwXG4gICAgcHVyZ2VkQ3NzID0gY2xlYW5VbnVzZWRWYXJzKHB1cmdlZENzcyk7XG4gICAgY29uc3QgYWZ0ZXJMMyA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHB1cmdlZENzcywgXCJ1dGYtOFwiKTtcbiAgICBjb25zb2xlLmxvZyhgW2Nzcy1wdXJnZV0gICBMMyB2YXIgY2xlYW51cDog4oaSICR7KGFmdGVyTDMgLyAxMDI0KS50b0ZpeGVkKDEpfSBLQmApO1xuXG4gICAgLy8gRmluYWw6IG1pbmlmaWNhdGlvbiB2aWEgTGlnaHRuaW5nIENTU1xuICAgIHB1cmdlZENzcyA9IG1pbmlmeShwdXJnZWRDc3MpO1xuICAgIGNvbnN0IGZpbmFsU2l6ZSA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHB1cmdlZENzcywgXCJ1dGYtOFwiKTtcbiAgICB0b3RhbEFmdGVyICs9IGZpbmFsU2l6ZTtcbiAgICBjb25zb2xlLmxvZyhgW2Nzcy1wdXJnZV0gICBNaW5pZnkgKGxpZ2h0bmluZ2Nzcyk6IOKGkiAkeyhmaW5hbFNpemUgLyAxMDI0KS50b0ZpeGVkKDEpfSBLQmApO1xuICAgIGNvbnNvbGUubG9nKGBbY3NzLXB1cmdlXSAgIEZpbmFsOiAkeyhvcmlnaW5hbFNpemUgLyAxMDI0KS50b0ZpeGVkKDEpfSDihpIgJHsoZmluYWxTaXplIC8gMTAyNCkudG9GaXhlZCgxKX0gS0IgKCR7KCgxIC0gZmluYWxTaXplIC8gb3JpZ2luYWxTaXplKSAqIDEwMCkudG9GaXhlZCgxKX0lIHJlZHVjdGlvbilgKTtcblxuICAgIGF3YWl0IEJ1bi53cml0ZShmdWxsUGF0aCwgcHVyZ2VkQ3NzKTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKGBcXG5bY3NzLXB1cmdlXSBUb3RhbDogJHsodG90YWxCZWZvcmUgLyAxMDI0KS50b0ZpeGVkKDEpfSDihpIgJHsodG90YWxBZnRlciAvIDEwMjQpLnRvRml4ZWQoMSl9IEtCICgkeygoMSAtIHRvdGFsQWZ0ZXIgLyB0b3RhbEJlZm9yZSkgKiAxMDApLnRvRml4ZWQoMSl9JSByZWR1Y3Rpb24pYCk7XG59XG5cbm1haW4oKTtcbiIsCiAgICAiaW1wb3J0IGluZGV4IGZyb20gJy4vaW5kZXguanMnO1xuXG5jb25zdCB7IHRyYW5zZm9ybSwgdHJhbnNmb3JtU3R5bGVBdHRyaWJ1dGUsIGJ1bmRsZSwgYnVuZGxlQXN5bmMsIGJyb3dzZXJzbGlzdFRvVGFyZ2V0cywgY29tcG9zZVZpc2l0b3JzLCBGZWF0dXJlcyB9ID0gaW5kZXg7XG5leHBvcnQgeyB0cmFuc2Zvcm0sIHRyYW5zZm9ybVN0eWxlQXR0cmlidXRlLCBidW5kbGUsIGJ1bmRsZUFzeW5jLCBicm93c2Vyc2xpc3RUb1RhcmdldHMsIGNvbXBvc2VWaXNpdG9ycywgRmVhdHVyZXMgfTtcbiIsCiAgICAiLyoqXG4gKiBDb25zdW1lci1zaWRlIEpTWCBzY2FubmVyLlxuICpcbiAqIFdhbGtzIGEgY29uc3VtZXIncyBzb3VyY2UgdHJlZSwgZmluZHMgY29tcG9uZW50IGltcG9ydHMgZnJvbSBAcGF0aHNjYWxlL3VpLFxuICogY29sbGVjdHMgcHJvcCB2YWx1ZXMsIGFuZCBjcm9zcy1yZWZlcmVuY2VzIHdpdGggdGhlIHB1cmdlIG1hbmlmZXN0IHRvIGJ1aWxkXG4gKiBMZXZlbCAxIChjbGFzcykgYW5kIExldmVsIDIgKGF0dHJpYnV0ZSkgc2FmZWxpc3RzLlxuICpcbiAqIFVzYWdlOiAgYnVuIHJ1biBzcmMvc2Nhbi1jb25zdW1lci50cyA8Y29uc3VtZXItc3JjLWRpcj4gPHB1cmdlLW1hbmlmZXN0Lmpzb24+XG4gKi9cblxuaW1wb3J0IHN3YyBmcm9tIFwiQHN3Yy9jb3JlXCI7XG5pbXBvcnQgeyBHbG9iIH0gZnJvbSBcImJ1blwiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuLy8g4pSA4pSAIFR5cGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5pbnRlcmZhY2UgQ29tcG9uZW50TWFuaWZlc3Qge1xuICBjbGFzc2VzOiB7XG4gICAgYWx3YXlzOiBzdHJpbmdbXTtcbiAgICBieVByb3A6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nW10+PjtcbiAgfTtcbiAgYXR0cnM/OiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcbiAgZGVwcz86IHN0cmluZ1tdO1xufVxuXG50eXBlIFB1cmdlTWFuaWZlc3QgPSBSZWNvcmQ8c3RyaW5nLCBDb21wb25lbnRNYW5pZmVzdD47XG5cbi8qKiBXaGF0IHdlIGNvbGxlY3QgcGVyIGNvbXBvbmVudCB1c2FnZSBmcm9tIEpTWCAqL1xuaW50ZXJmYWNlIFByb3BVc2FnZSB7XG4gIGNvbXBvbmVudDogc3RyaW5nO1xuICBwcm9wczogTWFwPHN0cmluZywgc3RyaW5nIHwgXCJEWU5BTUlDXCI+OyAvLyBwcm9wTmFtZSDihpIgbGl0ZXJhbCB2YWx1ZSBvciBEWU5BTUlDXG4gIGJvb2xlYW5Qcm9wczogU2V0PHN0cmluZz47IC8vIHByb3BzIHByZXNlbnQgd2l0aG91dCBhIHZhbHVlICh0cnV0aHkpXG4gIGhhc1NwcmVhZDogYm9vbGVhbjtcbn1cblxuLy8g4pSA4pSAIEFTVCB3YWxrZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIHdhbGtBU1Qobm9kZTogYW55LCB2aXNpdG9yOiAobm9kZTogYW55KSA9PiB2b2lkKSB7XG4gIGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuO1xuICB2aXNpdG9yKG5vZGUpO1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xuICAgIGlmIChrZXkgPT09IFwic3BhblwiKSBjb250aW51ZTtcbiAgICBjb25zdCB2YWwgPSBub2RlW2tleV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbCkgd2Fsa0FTVChpdGVtLCB2aXNpdG9yKTtcbiAgICB9IGVsc2UgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB3YWxrQVNUKHZhbCwgdmlzaXRvcik7XG4gICAgfVxuICB9XG59XG5cbi8qKiBFeHRyYWN0IEBwYXRoc2NhbGUvdWkgaW1wb3J0cyBmcm9tIGEgcGFyc2VkIG1vZHVsZSAqL1xuZnVuY3Rpb24gZXh0cmFjdFVJSW1wb3J0cyhhc3Q6IGFueSk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBpbXBvcnRzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBub2RlIG9mIGFzdC5ib2R5KSB7XG4gICAgaWYgKG5vZGUudHlwZSAhPT0gXCJJbXBvcnREZWNsYXJhdGlvblwiKSBjb250aW51ZTtcbiAgICBjb25zdCBzcmMgPSBub2RlLnNvdXJjZT8udmFsdWUgYXMgc3RyaW5nO1xuICAgIGlmICghc3JjIHx8ICFzcmMuc3RhcnRzV2l0aChcIkBwYXRoc2NhbGUvdWlcIikpIGNvbnRpbnVlO1xuXG4gICAgZm9yIChjb25zdCBzcGVjIG9mIG5vZGUuc3BlY2lmaWVycykge1xuICAgICAgaWYgKHNwZWMudHlwZSA9PT0gXCJJbXBvcnRTcGVjaWZpZXJcIikge1xuICAgICAgICBjb25zdCBpbXBvcnRlZCA9IHNwZWMuaW1wb3J0ZWQ/LnZhbHVlID8/IHNwZWMubG9jYWw/LnZhbHVlO1xuICAgICAgICBjb25zdCBsb2NhbCA9IHNwZWMubG9jYWw/LnZhbHVlO1xuICAgICAgICBpZiAobG9jYWwgJiYgaW1wb3J0ZWQpIGltcG9ydHMuc2V0KGxvY2FsLCBpbXBvcnRlZCk7XG4gICAgICB9IGVsc2UgaWYgKHNwZWMudHlwZSA9PT0gXCJJbXBvcnREZWZhdWx0U3BlY2lmaWVyXCIpIHtcbiAgICAgICAgY29uc3QgbG9jYWwgPSBzcGVjLmxvY2FsPy52YWx1ZTtcbiAgICAgICAgaWYgKGxvY2FsKSBpbXBvcnRzLnNldChsb2NhbCwgbG9jYWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gaW1wb3J0cztcbn1cblxuLyoqIEV4dHJhY3QgSlNYIHVzYWdlcyBvZiBVSSBjb21wb25lbnRzICovXG5mdW5jdGlvbiBleHRyYWN0SlNYVXNhZ2VzKGFzdDogYW55LCB1aUNvbXBvbmVudHM6IE1hcDxzdHJpbmcsIHN0cmluZz4pOiBQcm9wVXNhZ2VbXSB7XG4gIGNvbnN0IHVzYWdlczogUHJvcFVzYWdlW10gPSBbXTtcblxuICB3YWxrQVNUKGFzdCwgKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlICE9PSBcIkpTWE9wZW5pbmdFbGVtZW50XCIpIHJldHVybjtcblxuICAgIGxldCBlbGVtZW50TmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IHJvb3ROYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIGlmIChub2RlLm5hbWU/LnR5cGUgPT09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgICBlbGVtZW50TmFtZSA9IG5vZGUubmFtZS52YWx1ZTtcbiAgICAgIHJvb3ROYW1lID0gZWxlbWVudE5hbWU7XG4gICAgfSBlbHNlIGlmIChub2RlLm5hbWU/LnR5cGUgPT09IFwiSlNYTWVtYmVyRXhwcmVzc2lvblwiKSB7XG4gICAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICAgIGxldCBjdXJzb3IgPSBub2RlLm5hbWU7XG4gICAgICB3aGlsZSAoY3Vyc29yPy50eXBlID09PSBcIkpTWE1lbWJlckV4cHJlc3Npb25cIikge1xuICAgICAgICBwYXJ0cy51bnNoaWZ0KGN1cnNvci5wcm9wZXJ0eT8udmFsdWUpO1xuICAgICAgICBjdXJzb3IgPSBjdXJzb3Iub2JqZWN0O1xuICAgICAgfVxuICAgICAgaWYgKGN1cnNvcj8udHlwZSA9PT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICAgICAgcGFydHMudW5zaGlmdChjdXJzb3IudmFsdWUpO1xuICAgICAgICByb290TmFtZSA9IGN1cnNvci52YWx1ZTtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnROYW1lID0gcGFydHMuam9pbihcIi5cIik7XG4gICAgfVxuXG4gICAgaWYgKCFyb290TmFtZSB8fCAhdWlDb21wb25lbnRzLmhhcyhyb290TmFtZSkpIHJldHVybjtcblxuICAgIGNvbnN0IHVzYWdlOiBQcm9wVXNhZ2UgPSB7XG4gICAgICBjb21wb25lbnQ6IGVsZW1lbnROYW1lISxcbiAgICAgIHByb3BzOiBuZXcgTWFwKCksXG4gICAgICBib29sZWFuUHJvcHM6IG5ldyBTZXQoKSxcbiAgICAgIGhhc1NwcmVhZDogZmFsc2UsXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgYXR0ciBvZiBub2RlLmF0dHJpYnV0ZXMgfHwgW10pIHtcbiAgICAgIGlmIChhdHRyLnR5cGUgPT09IFwiU3ByZWFkRWxlbWVudFwiIHx8IGF0dHIudHlwZSA9PT0gXCJKU1hTcHJlYWRBdHRyaWJ1dGVcIikge1xuICAgICAgICB1c2FnZS5oYXNTcHJlYWQgPSB0cnVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChhdHRyLnR5cGUgIT09IFwiSlNYQXR0cmlidXRlXCIpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBwcm9wTmFtZSA9IGF0dHIubmFtZT8udmFsdWU7XG4gICAgICBpZiAoIXByb3BOYW1lKSBjb250aW51ZTtcblxuICAgICAgaWYgKCFhdHRyLnZhbHVlKSB7XG4gICAgICAgIHVzYWdlLmJvb2xlYW5Qcm9wcy5hZGQocHJvcE5hbWUpO1xuICAgICAgfSBlbHNlIGlmIChhdHRyLnZhbHVlLnR5cGUgPT09IFwiU3RyaW5nTGl0ZXJhbFwiKSB7XG4gICAgICAgIHVzYWdlLnByb3BzLnNldChwcm9wTmFtZSwgYXR0ci52YWx1ZS52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1c2FnZS5wcm9wcy5zZXQocHJvcE5hbWUsIFwiRFlOQU1JQ1wiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1c2FnZXMucHVzaCh1c2FnZSk7XG4gIH0pO1xuXG4gIHJldHVybiB1c2FnZXM7XG59XG5cbi8vIOKUgOKUgCBTYWZlbGlzdCBidWlsZGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5pbnRlcmZhY2UgU2FmZWxpc3RzIHtcbiAgY2xhc3NTYWZlbGlzdDogU2V0PHN0cmluZz47XG4gIGF0dHJTYWZlbGlzdDogU2V0PHN0cmluZz47XG59XG5cbmZ1bmN0aW9uIGJ1aWxkU2FmZWxpc3RzKFxuICBhbGxVc2FnZXM6IFByb3BVc2FnZVtdLFxuICBtYW5pZmVzdDogUHVyZ2VNYW5pZmVzdCxcbik6IFNhZmVsaXN0cyB7XG4gIGNvbnN0IGNsYXNzU2FmZWxpc3QgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgYXR0clNhZmVsaXN0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgY29uc3QgY29tcG9uZW50VXNhZ2VzID0gbmV3IE1hcDxzdHJpbmcsIFByb3BVc2FnZVtdPigpO1xuICBmb3IgKGNvbnN0IHVzYWdlIG9mIGFsbFVzYWdlcykge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gY29tcG9uZW50VXNhZ2VzLmdldCh1c2FnZS5jb21wb25lbnQpID8/IFtdO1xuICAgIGV4aXN0aW5nLnB1c2godXNhZ2UpO1xuICAgIGNvbXBvbmVudFVzYWdlcy5zZXQodXNhZ2UuY29tcG9uZW50LCBleGlzdGluZyk7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtlbnRyeU5hbWUsIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhtYW5pZmVzdCkpIHtcbiAgICBjb25zdCBtYXRjaGluZ1VzYWdlcyA9IGZpbmRNYXRjaGluZ1VzYWdlcyhlbnRyeU5hbWUsIGNvbXBvbmVudFVzYWdlcyk7XG5cbiAgICBpZiAobWF0Y2hpbmdVc2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNscyBvZiBlbnRyeS5jbGFzc2VzLmFsd2F5cykge1xuICAgICAgY2xhc3NTYWZlbGlzdC5hZGQoY2xzKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtwcm9wT3JTbG90LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZW50cnkuY2xhc3Nlcy5ieVByb3ApKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKGlzUHJvcFVzZWQocHJvcE9yU2xvdCwgbWF0Y2hpbmdVc2FnZXMpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjbHMgb2YgdmFsdWUpIGNsYXNzU2FmZWxpc3QuYWRkKGNscyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHVzZWRWYWx1ZXMgPSBnZXRVc2VkRW51bVZhbHVlcyhwcm9wT3JTbG90LCBtYXRjaGluZ1VzYWdlcyk7XG4gICAgICAgIGlmICh1c2VkVmFsdWVzID09PSBcIkFMTFwiKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjbGFzc2VzIG9mIE9iamVjdC52YWx1ZXModmFsdWUpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNscyBvZiBjbGFzc2VzKSBjbGFzc1NhZmVsaXN0LmFkZChjbHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiB1c2VkVmFsdWVzKSB7XG4gICAgICAgICAgICBpZiAodmFsdWVbdmFsXSkge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNscyBvZiB2YWx1ZVt2YWxdKSBjbGFzc1NhZmVsaXN0LmFkZChjbHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbnRyeS5hdHRycykge1xuICAgICAgZm9yIChjb25zdCBbcHJvcE5hbWUsIGF0dHJNYXBdIG9mIE9iamVjdC5lbnRyaWVzKGVudHJ5LmF0dHJzKSkge1xuICAgICAgICBpZiAoaXNQcm9wVXNlZChwcm9wTmFtZSwgbWF0Y2hpbmdVc2FnZXMpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBbYXR0ciwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRyTWFwKSkge1xuICAgICAgICAgICAgYXR0clNhZmVsaXN0LmFkZChgJHthdHRyfT0ke3ZhbH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBjbGFzc1NhZmVsaXN0LCBhdHRyU2FmZWxpc3QgfTtcbn1cblxuZnVuY3Rpb24gZmluZE1hdGNoaW5nVXNhZ2VzKFxuICBlbnRyeU5hbWU6IHN0cmluZyxcbiAgdXNhZ2VNYXA6IE1hcDxzdHJpbmcsIFByb3BVc2FnZVtdPixcbik6IFByb3BVc2FnZVtdIHtcbiAgaWYgKHVzYWdlTWFwLmhhcyhlbnRyeU5hbWUpKSB7XG4gICAgcmV0dXJuIHVzYWdlTWFwLmdldChlbnRyeU5hbWUpITtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdHM6IFByb3BVc2FnZVtdID0gW107XG4gIGZvciAoY29uc3QgW3VzYWdlTmFtZSwgdXNhZ2VzXSBvZiB1c2FnZU1hcCkge1xuICAgIGlmICh1c2FnZU5hbWUgPT09IGVudHJ5TmFtZSkge1xuICAgICAgcmVzdWx0cy5wdXNoKC4uLnVzYWdlcyk7XG4gICAgfVxuICAgIGlmIChlbnRyeU5hbWUuaW5jbHVkZXMoXCIuXCIpKSB7XG4gICAgICBjb25zdCBbZmFtaWx5LCBwYXJ0XSA9IGVudHJ5TmFtZS5zcGxpdChcIi5cIik7XG4gICAgICBpZiAocGFydCA9PT0gZmFtaWx5ICYmIHVzYWdlTmFtZSA9PT0gZmFtaWx5KSB7XG4gICAgICAgIHJlc3VsdHMucHVzaCguLi51c2FnZXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gaXNQcm9wVXNlZChwcm9wTmFtZTogc3RyaW5nLCB1c2FnZXM6IFByb3BVc2FnZVtdKTogYm9vbGVhbiB7XG4gIGZvciAoY29uc3QgdXNhZ2Ugb2YgdXNhZ2VzKSB7XG4gICAgaWYgKHVzYWdlLmhhc1NwcmVhZCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHVzYWdlLmJvb2xlYW5Qcm9wcy5oYXMocHJvcE5hbWUpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodXNhZ2UucHJvcHMuaGFzKHByb3BOYW1lKSkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRVc2VkRW51bVZhbHVlcyhzbG90TmFtZTogc3RyaW5nLCB1c2FnZXM6IFByb3BVc2FnZVtdKTogU2V0PHN0cmluZz4gfCBcIkFMTFwiIHtcbiAgY29uc3QgdmFsdWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgdXNhZ2Ugb2YgdXNhZ2VzKSB7XG4gICAgaWYgKHVzYWdlLmhhc1NwcmVhZCkgcmV0dXJuIFwiQUxMXCI7XG4gICAgY29uc3QgdmFsID0gdXNhZ2UucHJvcHMuZ2V0KHNsb3ROYW1lKTtcbiAgICBpZiAodmFsID09PSBcIkRZTkFNSUNcIikgcmV0dXJuIFwiQUxMXCI7XG4gICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB2YWx1ZXMuYWRkKHZhbCk7XG4gICAgaWYgKHVzYWdlLmJvb2xlYW5Qcm9wcy5oYXMoc2xvdE5hbWUpKSByZXR1cm4gXCJBTExcIjtcbiAgfVxuICByZXR1cm4gdmFsdWVzO1xufVxuXG4vLyDilIDilIAgQ29uc3VtZXIgc291cmNlIHNjYW5uaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5hc3luYyBmdW5jdGlvbiBzY2FuQ29uc3VtZXJTb3VyY2Uoc3JjRGlyOiBzdHJpbmcpOiBQcm9taXNlPFByb3BVc2FnZVtdPiB7XG4gIGNvbnN0IGFsbFVzYWdlczogUHJvcFVzYWdlW10gPSBbXTtcbiAgY29uc3QgZ2xvYiA9IG5ldyBHbG9iKFwiKiovKi57dHN4LHRzLGpzeCxqc31cIik7XG5cbiAgZm9yIGF3YWl0IChjb25zdCByZWxQYXRoIG9mIGdsb2Iuc2Nhbih7IGN3ZDogc3JjRGlyIH0pKSB7XG4gICAgaWYgKHJlbFBhdGguaW5jbHVkZXMoXCJub2RlX21vZHVsZXNcIikpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKHNyY0RpciwgcmVsUGF0aCk7XG4gICAgY29uc3QgY29kZSA9IGF3YWl0IEJ1bi5maWxlKGZ1bGxQYXRoKS50ZXh0KCk7XG4gICAgaWYgKCFjb2RlLmluY2x1ZGVzKFwiQHBhdGhzY2FsZS91aVwiKSkgY29udGludWU7XG5cbiAgICBjb25zdCBpc1RzeCA9IC9cXC5bdGpdc3gkLy50ZXN0KHJlbFBhdGgpO1xuICAgIGNvbnN0IGFzdCA9IGF3YWl0IHN3Yy5wYXJzZShjb2RlLCB7IHN5bnRheDogXCJ0eXBlc2NyaXB0XCIsIHRzeDogaXNUc3ggfSk7XG4gICAgY29uc3QgdWlJbXBvcnRzID0gZXh0cmFjdFVJSW1wb3J0cyhhc3QpO1xuICAgIGlmICh1aUltcG9ydHMuc2l6ZSA9PT0gMCkgY29udGludWU7XG5cbiAgICBhbGxVc2FnZXMucHVzaCguLi5leHRyYWN0SlNYVXNhZ2VzKGFzdCwgdWlJbXBvcnRzKSk7XG4gIH1cblxuICByZXR1cm4gYWxsVXNhZ2VzO1xufVxuXG4vLyDilIDilIAgTWFpbiAoc3RhbmRhbG9uZSBDTEkpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICBjb25zdCBbc3JjRGlyLCBtYW5pZmVzdFBhdGhdID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpO1xuICBpZiAoIXNyY0RpciB8fCAhbWFuaWZlc3RQYXRoKSB7XG4gICAgY29uc29sZS5lcnJvcihcIlVzYWdlOiBidW4gcnVuIHNyYy9zY2FuLWNvbnN1bWVyLnRzIDxjb25zdW1lci1zcmMtZGlyPiA8cHVyZ2UtbWFuaWZlc3QuanNvbj5cIik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgY29uc3QgbWFuaWZlc3Q6IFB1cmdlTWFuaWZlc3QgPSBKU09OLnBhcnNlKFxuICAgIGF3YWl0IEJ1bi5maWxlKG1hbmlmZXN0UGF0aCkudGV4dCgpLFxuICApO1xuICBjb25zdCByZXNvbHZlZFNyYyA9IHBhdGgucmVzb2x2ZShzcmNEaXIpO1xuICBjb25zb2xlLmxvZyhgU2Nhbm5pbmcgJHtyZXNvbHZlZFNyY30gZm9yIEBwYXRoc2NhbGUvdWkgY29tcG9uZW50IHVzYWdl4oCmYCk7XG4gIGNvbnNvbGUubG9nKGBNYW5pZmVzdDogJHtPYmplY3Qua2V5cyhtYW5pZmVzdCkubGVuZ3RofSBlbnRyaWVzXFxuYCk7XG5cbiAgY29uc3QgdXNhZ2VzID0gYXdhaXQgc2NhbkNvbnN1bWVyU291cmNlKHJlc29sdmVkU3JjKTtcbiAgY29uc3QgeyBjbGFzc1NhZmVsaXN0LCBhdHRyU2FmZWxpc3QgfSA9IGJ1aWxkU2FmZWxpc3RzKHVzYWdlcywgbWFuaWZlc3QpO1xuXG4gIGNvbnNvbGUubG9nKFwiPT09IENsYXNzIFNhZmVsaXN0ID09PVwiKTtcbiAgZm9yIChjb25zdCBjbHMgb2YgWy4uLmNsYXNzU2FmZWxpc3RdLnNvcnQoKSkge1xuICAgIGNvbnNvbGUubG9nKGAgICR7Y2xzfWApO1xuICB9XG5cbiAgY29uc29sZS5sb2coYFxcbj09PSBBdHRyaWJ1dGUgU2FmZWxpc3QgPT09YCk7XG4gIGZvciAoY29uc3QgYXR0ciBvZiBbLi4uYXR0clNhZmVsaXN0XS5zb3J0KCkpIHtcbiAgICBjb25zb2xlLmxvZyhgICBbJHthdHRyfV1gKTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKGBcXG5Ub3RhbDogJHtjbGFzc1NhZmVsaXN0LnNpemV9IGNsYXNzZXMsICR7YXR0clNhZmVsaXN0LnNpemV9IGF0dHJpYnV0ZSBzZWxlY3RvcnNgKTtcbn1cblxuLy8gT25seSBydW4gQ0xJIHdoZW4gaW52b2tlZCBkaXJlY3RseSAobm90IHdoZW4gaW1wb3J0ZWQgYXMgYSBtb2R1bGUpXG5pZiAoaW1wb3J0Lm1ldGEubWFpbikge1xuICBtYWluKCk7XG59XG5cbmV4cG9ydCB7IGV4dHJhY3RVSUltcG9ydHMsIGV4dHJhY3RKU1hVc2FnZXMsIGJ1aWxkU2FmZWxpc3RzLCBzY2FuQ29uc3VtZXJTb3VyY2UgfTtcbmV4cG9ydCB0eXBlIHsgUHJvcFVzYWdlLCBQdXJnZU1hbmlmZXN0LCBDb21wb25lbnRNYW5pZmVzdCwgU2FmZWxpc3RzIH07XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBS0EsSUFBTSxVQUFVLE1BQU0sUUFBUSxhQUFhO0FBQUEsRUFFM0MsSUFBSSxTQUFTO0FBQUEsRUFDYixJQUFNLFlBQVksTUFBTTtBQUFBLElBQ3RCLElBQUksQ0FBQyxRQUFRO0FBQUEsTUFFWCxJQUFJLFFBQVEsS0FBSyxRQUFRLFFBQVE7QUFBQSxRQUMvQixNQUFNLE9BQU8sUUFBUSxPQUFPO0FBQUEsUUFDNUIsUUFBUSxPQUFPLGlCQUFpQjtBQUFBLFFBQ2hDLFNBQVMsUUFBUSxPQUFPLFVBQVU7QUFBQSxRQUNsQyxRQUFRLE9BQU8saUJBQWlCO0FBQUEsTUFDbEMsRUFBTztBQUFBLFFBQ0wsU0FBUyxDQUFDO0FBQUE7QUFBQSxJQUVkO0FBQUEsSUFDQSxPQUFPO0FBQUE7QUFBQSxFQUdULE9BQU8sVUFBVSxFQUFFLFNBQVMsVUFBVTtBQUFBOzs7O0VDbEJ0QyxJQUFNO0FBQUEsRUFFTixJQUFNLFdBQVc7QUFBQSxFQUNqQixJQUFNLFlBQVk7QUFBQSxFQUNsQixJQUFNLGFB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
1475
+ //# debugId=2715CBE06DC52FD664756E2164756E21
1476
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL2RldGVjdC1saWJjL2xpYi9wcm9jZXNzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZXRlY3QtbGliYy9saWIvZmlsZXN5c3RlbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGV0ZWN0LWxpYmMvbGliL2VsZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGV0ZWN0LWxpYmMvbGliL2RldGVjdC1saWJjLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9saWdodG5pbmdjc3Mvbm9kZS9icm93c2Vyc2xpc3RUb1RhcmdldHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xpZ2h0bmluZ2Nzcy9ub2RlL2NvbXBvc2VWaXNpdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbGlnaHRuaW5nY3NzL25vZGUvZmxhZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xpZ2h0bmluZ2Nzcy9ub2RlL2luZGV4LmpzIiwgIi4uL3NyYy9wb3N0YnVpbGQtcHVyZ2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2xpZ2h0bmluZ2Nzcy9ub2RlL2luZGV4Lm1qcyIsICIuLi9zcmMvc2Nhbi1jb25zdW1lci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIvLyBDb3B5cmlnaHQgMjAxNyBMb3ZlbGwgRnVsbGVyIGFuZCBvdGhlcnMuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGlzTGludXggPSAoKSA9PiBwcm9jZXNzLnBsYXRmb3JtID09PSAnbGludXgnO1xuXG5sZXQgcmVwb3J0ID0gbnVsbDtcbmNvbnN0IGdldFJlcG9ydCA9ICgpID0+IHtcbiAgaWYgKCFyZXBvcnQpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChpc0xpbnV4KCkgJiYgcHJvY2Vzcy5yZXBvcnQpIHtcbiAgICAgIGNvbnN0IG9yaWcgPSBwcm9jZXNzLnJlcG9ydC5leGNsdWRlTmV0d29yaztcbiAgICAgIHByb2Nlc3MucmVwb3J0LmV4Y2x1ZGVOZXR3b3JrID0gdHJ1ZTtcbiAgICAgIHJlcG9ydCA9IHByb2Nlc3MucmVwb3J0LmdldFJlcG9ydCgpO1xuICAgICAgcHJvY2Vzcy5yZXBvcnQuZXhjbHVkZU5ldHdvcmsgPSBvcmlnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXBvcnQgPSB7fTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcG9ydDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0geyBpc0xpbnV4LCBnZXRSZXBvcnQgfTtcbiIsCiAgICAiLy8gQ29weXJpZ2h0IDIwMTcgTG92ZWxsIEZ1bGxlciBhbmQgb3RoZXJzLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5cbmNvbnN0IExERF9QQVRIID0gJy91c3IvYmluL2xkZCc7XG5jb25zdCBTRUxGX1BBVEggPSAnL3Byb2Mvc2VsZi9leGUnO1xuY29uc3QgTUFYX0xFTkdUSCA9IDIwNDg7XG5cbi8qKlxuICogUmVhZCB0aGUgY29udGVudCBvZiBhIGZpbGUgc3luY2hyb25vdXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybnMge0J1ZmZlcn1cbiAqL1xuY29uc3QgcmVhZEZpbGVTeW5jID0gKHBhdGgpID0+IHtcbiAgY29uc3QgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCAncicpO1xuICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2MoTUFYX0xFTkdUSCk7XG4gIGNvbnN0IGJ5dGVzUmVhZCA9IGZzLnJlYWRTeW5jKGZkLCBidWZmZXIsIDAsIE1BWF9MRU5HVEgsIDApO1xuICBmcy5jbG9zZShmZCwgKCkgPT4ge30pO1xuICByZXR1cm4gYnVmZmVyLnN1YmFycmF5KDAsIGJ5dGVzUmVhZCk7XG59O1xuXG4vKipcbiAqIFJlYWQgdGhlIGNvbnRlbnQgb2YgYSBmaWxlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm5zIHtQcm9taXNlPEJ1ZmZlcj59XG4gKi9cbmNvbnN0IHJlYWRGaWxlID0gKHBhdGgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgZnMub3BlbihwYXRoLCAncicsIChlcnIsIGZkKSA9PiB7XG4gICAgaWYgKGVycikge1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyhNQVhfTEVOR1RIKTtcbiAgICAgIGZzLnJlYWQoZmQsIGJ1ZmZlciwgMCwgTUFYX0xFTkdUSCwgMCwgKF8sIGJ5dGVzUmVhZCkgPT4ge1xuICAgICAgICByZXNvbHZlKGJ1ZmZlci5zdWJhcnJheSgwLCBieXRlc1JlYWQpKTtcbiAgICAgICAgZnMuY2xvc2UoZmQsICgpID0+IHt9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIExERF9QQVRILFxuICBTRUxGX1BBVEgsXG4gIHJlYWRGaWxlU3luYyxcbiAgcmVhZEZpbGVcbn07XG4iLAogICAgIi8vIENvcHlyaWdodCAyMDE3IExvdmVsbCBGdWxsZXIgYW5kIG90aGVycy5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgaW50ZXJwcmV0ZXJQYXRoID0gKGVsZikgPT4ge1xuICBpZiAoZWxmLmxlbmd0aCA8IDY0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGVsZi5yZWFkVUludDMyQkUoMCkgIT09IDB4N0Y0NTRDNDYpIHtcbiAgICAvLyBVbmV4cGVjdGVkIG1hZ2ljIGJ5dGVzXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGVsZi5yZWFkVUludDgoNCkgIT09IDIpIHtcbiAgICAvLyBOb3QgYSA2NC1iaXQgRUxGXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGVsZi5yZWFkVUludDgoNSkgIT09IDEpIHtcbiAgICAvLyBOb3QgbGl0dGxlLWVuZGlhblxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IG9mZnNldCA9IGVsZi5yZWFkVUludDMyTEUoMzIpO1xuICBjb25zdCBzaXplID0gZWxmLnJlYWRVSW50MTZMRSg1NCk7XG4gIGNvbnN0IGNvdW50ID0gZWxmLnJlYWRVSW50MTZMRSg1Nik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgIGNvbnN0IGhlYWRlck9mZnNldCA9IG9mZnNldCArIChpICogc2l6ZSk7XG4gICAgY29uc3QgdHlwZSA9IGVsZi5yZWFkVUludDMyTEUoaGVhZGVyT2Zmc2V0KTtcbiAgICBpZiAodHlwZSA9PT0gMykge1xuICAgICAgY29uc3QgZmlsZU9mZnNldCA9IGVsZi5yZWFkVUludDMyTEUoaGVhZGVyT2Zmc2V0ICsgOCk7XG4gICAgICBjb25zdCBmaWxlU2l6ZSA9IGVsZi5yZWFkVUludDMyTEUoaGVhZGVyT2Zmc2V0ICsgMzIpO1xuICAgICAgcmV0dXJuIGVsZi5zdWJhcnJheShmaWxlT2Zmc2V0LCBmaWxlT2Zmc2V0ICsgZmlsZVNpemUpLnRvU3RyaW5nKCkucmVwbGFjZSgvXFwwLiokL2csICcnKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW50ZXJwcmV0ZXJQYXRoXG59O1xuIiwKICAgICIvLyBDb3B5cmlnaHQgMjAxNyBMb3ZlbGwgRnVsbGVyIGFuZCBvdGhlcnMuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGNoaWxkUHJvY2VzcyA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKTtcbmNvbnN0IHsgaXNMaW51eCwgZ2V0UmVwb3J0IH0gPSByZXF1aXJlKCcuL3Byb2Nlc3MnKTtcbmNvbnN0IHsgTEREX1BBVEgsIFNFTEZfUEFUSCwgcmVhZEZpbGUsIHJlYWRGaWxlU3luYyB9ID0gcmVxdWlyZSgnLi9maWxlc3lzdGVtJyk7XG5jb25zdCB7IGludGVycHJldGVyUGF0aCB9ID0gcmVxdWlyZSgnLi9lbGYnKTtcblxubGV0IGNhY2hlZEZhbWlseUludGVycHJldGVyO1xubGV0IGNhY2hlZEZhbWlseUZpbGVzeXN0ZW07XG5sZXQgY2FjaGVkVmVyc2lvbkZpbGVzeXN0ZW07XG5cbmNvbnN0IGNvbW1hbmQgPSAnZ2V0Y29uZiBHTlVfTElCQ19WRVJTSU9OIDI+JjEgfHwgdHJ1ZTsgbGRkIC0tdmVyc2lvbiAyPiYxIHx8IHRydWUnO1xubGV0IGNvbW1hbmRPdXQgPSAnJztcblxuY29uc3Qgc2FmZUNvbW1hbmQgPSAoKSA9PiB7XG4gIGlmICghY29tbWFuZE91dCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY2hpbGRQcm9jZXNzLmV4ZWMoY29tbWFuZCwgKGVyciwgb3V0KSA9PiB7XG4gICAgICAgIGNvbW1hbmRPdXQgPSBlcnIgPyAnICcgOiBvdXQ7XG4gICAgICAgIHJlc29sdmUoY29tbWFuZE91dCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gY29tbWFuZE91dDtcbn07XG5cbmNvbnN0IHNhZmVDb21tYW5kU3luYyA9ICgpID0+IHtcbiAgaWYgKCFjb21tYW5kT3V0KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbW1hbmRPdXQgPSBjaGlsZFByb2Nlc3MuZXhlY1N5bmMoY29tbWFuZCwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pO1xuICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgIGNvbW1hbmRPdXQgPSAnICc7XG4gICAgfVxuICB9XG4gIHJldHVybiBjb21tYW5kT3V0O1xufTtcblxuLyoqXG4gKiBBIFN0cmluZyBjb25zdGFudCBjb250YWluaW5nIHRoZSB2YWx1ZSBgZ2xpYmNgLlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuY29uc3QgR0xJQkMgPSAnZ2xpYmMnO1xuXG4vKipcbiAqIEEgUmVnZXhwIGNvbnN0YW50IHRvIGdldCB0aGUgR0xJQkMgVmVyc2lvbi5cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFJFX0dMSUJDX1ZFUlNJT04gPSAvTElCQ1thLXowLTkgXFwtKS5dKj8oXFxkK1xcLlxcZCspL2k7XG5cbi8qKlxuICogQSBTdHJpbmcgY29uc3RhbnQgY29udGFpbmluZyB0aGUgdmFsdWUgYG11c2xgLlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuY29uc3QgTVVTTCA9ICdtdXNsJztcblxuY29uc3QgaXNGaWxlTXVzbCA9IChmKSA9PiBmLmluY2x1ZGVzKCdsaWJjLm11c2wtJykgfHwgZi5pbmNsdWRlcygnbGQtbXVzbC0nKTtcblxuY29uc3QgZmFtaWx5RnJvbVJlcG9ydCA9ICgpID0+IHtcbiAgY29uc3QgcmVwb3J0ID0gZ2V0UmVwb3J0KCk7XG4gIGlmIChyZXBvcnQuaGVhZGVyICYmIHJlcG9ydC5oZWFkZXIuZ2xpYmNWZXJzaW9uUnVudGltZSkge1xuICAgIHJldHVybiBHTElCQztcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShyZXBvcnQuc2hhcmVkT2JqZWN0cykpIHtcbiAgICBpZiAocmVwb3J0LnNoYXJlZE9iamVjdHMuc29tZShpc0ZpbGVNdXNsKSkge1xuICAgICAgcmV0dXJuIE1VU0w7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgZmFtaWx5RnJvbUNvbW1hbmQgPSAob3V0KSA9PiB7XG4gIGNvbnN0IFtnZXRjb25mLCBsZGQxXSA9IG91dC5zcGxpdCgvW1xcclxcbl0rLyk7XG4gIGlmIChnZXRjb25mICYmIGdldGNvbmYuaW5jbHVkZXMoR0xJQkMpKSB7XG4gICAgcmV0dXJuIEdMSUJDO1xuICB9XG4gIGlmIChsZGQxICYmIGxkZDEuaW5jbHVkZXMoTVVTTCkpIHtcbiAgICByZXR1cm4gTVVTTDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IGZhbWlseUZyb21JbnRlcnByZXRlclBhdGggPSAocGF0aCkgPT4ge1xuICBpZiAocGF0aCkge1xuICAgIGlmIChwYXRoLmluY2x1ZGVzKCcvbGQtbXVzbC0nKSkge1xuICAgICAgcmV0dXJuIE1VU0w7XG4gICAgfSBlbHNlIGlmIChwYXRoLmluY2x1ZGVzKCcvbGQtbGludXgtJykpIHtcbiAgICAgIHJldHVybiBHTElCQztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBnZXRGYW1pbHlGcm9tTGRkQ29udGVudCA9IChjb250ZW50KSA9PiB7XG4gIGNvbnRlbnQgPSBjb250ZW50LnRvU3RyaW5nKCk7XG4gIGlmIChjb250ZW50LmluY2x1ZGVzKCdtdXNsJykpIHtcbiAgICByZXR1cm4gTVVTTDtcbiAgfVxuICBpZiAoY29udGVudC5pbmNsdWRlcygnR05VIEMgTGlicmFyeScpKSB7XG4gICAgcmV0dXJuIEdMSUJDO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgZmFtaWx5RnJvbUZpbGVzeXN0ZW0gPSBhc3luYyAoKSA9PiB7XG4gIGlmIChjYWNoZWRGYW1pbHlGaWxlc3lzdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkRmFtaWx5RmlsZXN5c3RlbTtcbiAgfVxuICBjYWNoZWRGYW1pbHlGaWxlc3lzdGVtID0gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBsZGRDb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoTEREX1BBVEgpO1xuICAgIGNhY2hlZEZhbWlseUZpbGVzeXN0ZW0gPSBnZXRGYW1pbHlGcm9tTGRkQ29udGVudChsZGRDb250ZW50KTtcbiAgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuIGNhY2hlZEZhbWlseUZpbGVzeXN0ZW07XG59O1xuXG5jb25zdCBmYW1pbHlGcm9tRmlsZXN5c3RlbVN5bmMgPSAoKSA9PiB7XG4gIGlmIChjYWNoZWRGYW1pbHlGaWxlc3lzdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkRmFtaWx5RmlsZXN5c3RlbTtcbiAgfVxuICBjYWNoZWRGYW1pbHlGaWxlc3lzdGVtID0gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBsZGRDb250ZW50ID0gcmVhZEZpbGVTeW5jKExERF9QQVRIKTtcbiAgICBjYWNoZWRGYW1pbHlGaWxlc3lzdGVtID0gZ2V0RmFtaWx5RnJvbUxkZENvbnRlbnQobGRkQ29udGVudCk7XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIHJldHVybiBjYWNoZWRGYW1pbHlGaWxlc3lzdGVtO1xufTtcblxuY29uc3QgZmFtaWx5RnJvbUludGVycHJldGVyID0gYXN5bmMgKCkgPT4ge1xuICBpZiAoY2FjaGVkRmFtaWx5SW50ZXJwcmV0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjYWNoZWRGYW1pbHlJbnRlcnByZXRlcjtcbiAgfVxuICBjYWNoZWRGYW1pbHlJbnRlcnByZXRlciA9IG51bGw7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2VsZkNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShTRUxGX1BBVEgpO1xuICAgIGNvbnN0IHBhdGggPSBpbnRlcnByZXRlclBhdGgoc2VsZkNvbnRlbnQpO1xuICAgIGNhY2hlZEZhbWlseUludGVycHJldGVyID0gZmFtaWx5RnJvbUludGVycHJldGVyUGF0aChwYXRoKTtcbiAgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuIGNhY2hlZEZhbWlseUludGVycHJldGVyO1xufTtcblxuY29uc3QgZmFtaWx5RnJvbUludGVycHJldGVyU3luYyA9ICgpID0+IHtcbiAgaWYgKGNhY2hlZEZhbWlseUludGVycHJldGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkRmFtaWx5SW50ZXJwcmV0ZXI7XG4gIH1cbiAgY2FjaGVkRmFtaWx5SW50ZXJwcmV0ZXIgPSBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IHNlbGZDb250ZW50ID0gcmVhZEZpbGVTeW5jKFNFTEZfUEFUSCk7XG4gICAgY29uc3QgcGF0aCA9IGludGVycHJldGVyUGF0aChzZWxmQ29udGVudCk7XG4gICAgY2FjaGVkRmFtaWx5SW50ZXJwcmV0ZXIgPSBmYW1pbHlGcm9tSW50ZXJwcmV0ZXJQYXRoKHBhdGgpO1xuICB9IGNhdGNoIChlKSB7fVxuICByZXR1cm4gY2FjaGVkRmFtaWx5SW50ZXJwcmV0ZXI7XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHdpdGggdGhlIGxpYmMgZmFtaWx5IHdoZW4gaXQgY2FuIGJlIGRldGVybWluZWQsIGBudWxsYCBvdGhlcndpc2UuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTw/c3RyaW5nPn1cbiAqL1xuY29uc3QgZmFtaWx5ID0gYXN5bmMgKCkgPT4ge1xuICBsZXQgZmFtaWx5ID0gbnVsbDtcbiAgaWYgKGlzTGludXgoKSkge1xuICAgIGZhbWlseSA9IGF3YWl0IGZhbWlseUZyb21JbnRlcnByZXRlcigpO1xuICAgIGlmICghZmFtaWx5KSB7XG4gICAgICBmYW1pbHkgPSBhd2FpdCBmYW1pbHlGcm9tRmlsZXN5c3RlbSgpO1xuICAgICAgaWYgKCFmYW1pbHkpIHtcbiAgICAgICAgZmFtaWx5ID0gZmFtaWx5RnJvbVJlcG9ydCgpO1xuICAgICAgfVxuICAgICAgaWYgKCFmYW1pbHkpIHtcbiAgICAgICAgY29uc3Qgb3V0ID0gYXdhaXQgc2FmZUNvbW1hbmQoKTtcbiAgICAgICAgZmFtaWx5ID0gZmFtaWx5RnJvbUNvbW1hbmQob3V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbWlseTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbGliYyBmYW1pbHkgd2hlbiBpdCBjYW4gYmUgZGV0ZXJtaW5lZCwgYG51bGxgIG90aGVyd2lzZS5cbiAqIEByZXR1cm5zIHs/c3RyaW5nfVxuICovXG5jb25zdCBmYW1pbHlTeW5jID0gKCkgPT4ge1xuICBsZXQgZmFtaWx5ID0gbnVsbDtcbiAgaWYgKGlzTGludXgoKSkge1xuICAgIGZhbWlseSA9IGZhbWlseUZyb21JbnRlcnByZXRlclN5bmMoKTtcbiAgICBpZiAoIWZhbWlseSkge1xuICAgICAgZmFtaWx5ID0gZmFtaWx5RnJvbUZpbGVzeXN0ZW1TeW5jKCk7XG4gICAgICBpZiAoIWZhbWlseSkge1xuICAgICAgICBmYW1pbHkgPSBmYW1pbHlGcm9tUmVwb3J0KCk7XG4gICAgICB9XG4gICAgICBpZiAoIWZhbWlseSkge1xuICAgICAgICBjb25zdCBvdXQgPSBzYWZlQ29tbWFuZFN5bmMoKTtcbiAgICAgICAgZmFtaWx5ID0gZmFtaWx5RnJvbUNvbW1hbmQob3V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbWlseTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZXMgYHRydWVgIG9ubHkgd2hlbiB0aGUgcGxhdGZvcm0gaXMgTGludXggYW5kIHRoZSBsaWJjIGZhbWlseSBpcyBub3QgYGdsaWJjYC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICovXG5jb25zdCBpc05vbkdsaWJjTGludXggPSBhc3luYyAoKSA9PiBpc0xpbnV4KCkgJiYgYXdhaXQgZmFtaWx5KCkgIT09IEdMSUJDO1xuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIG9ubHkgd2hlbiB0aGUgcGxhdGZvcm0gaXMgTGludXggYW5kIHRoZSBsaWJjIGZhbWlseSBpcyBub3QgYGdsaWJjYC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBpc05vbkdsaWJjTGludXhTeW5jID0gKCkgPT4gaXNMaW51eCgpICYmIGZhbWlseVN5bmMoKSAhPT0gR0xJQkM7XG5cbmNvbnN0IHZlcnNpb25Gcm9tRmlsZXN5c3RlbSA9IGFzeW5jICgpID0+IHtcbiAgaWYgKGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkVmVyc2lvbkZpbGVzeXN0ZW07XG4gIH1cbiAgY2FjaGVkVmVyc2lvbkZpbGVzeXN0ZW0gPSBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IGxkZENvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShMRERfUEFUSCk7XG4gICAgY29uc3QgdmVyc2lvbk1hdGNoID0gbGRkQ29udGVudC5tYXRjaChSRV9HTElCQ19WRVJTSU9OKTtcbiAgICBpZiAodmVyc2lvbk1hdGNoKSB7XG4gICAgICBjYWNoZWRWZXJzaW9uRmlsZXN5c3RlbSA9IHZlcnNpb25NYXRjaFsxXTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIHJldHVybiBjYWNoZWRWZXJzaW9uRmlsZXN5c3RlbTtcbn07XG5cbmNvbnN0IHZlcnNpb25Gcm9tRmlsZXN5c3RlbVN5bmMgPSAoKSA9PiB7XG4gIGlmIChjYWNoZWRWZXJzaW9uRmlsZXN5c3RlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtO1xuICB9XG4gIGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtID0gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBsZGRDb250ZW50ID0gcmVhZEZpbGVTeW5jKExERF9QQVRIKTtcbiAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSBsZGRDb250ZW50Lm1hdGNoKFJFX0dMSUJDX1ZFUlNJT04pO1xuICAgIGlmICh2ZXJzaW9uTWF0Y2gpIHtcbiAgICAgIGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtID0gdmVyc2lvbk1hdGNoWzFdO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuIGNhY2hlZFZlcnNpb25GaWxlc3lzdGVtO1xufTtcblxuY29uc3QgdmVyc2lvbkZyb21SZXBvcnQgPSAoKSA9PiB7XG4gIGNvbnN0IHJlcG9ydCA9IGdldFJlcG9ydCgpO1xuICBpZiAocmVwb3J0LmhlYWRlciAmJiByZXBvcnQuaGVhZGVyLmdsaWJjVmVyc2lvblJ1bnRpbWUpIHtcbiAgICByZXR1cm4gcmVwb3J0LmhlYWRlci5nbGliY1ZlcnNpb25SdW50aW1lO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgdmVyc2lvblN1ZmZpeCA9IChzKSA9PiBzLnRyaW0oKS5zcGxpdCgvXFxzKy8pWzFdO1xuXG5jb25zdCB2ZXJzaW9uRnJvbUNvbW1hbmQgPSAob3V0KSA9PiB7XG4gIGNvbnN0IFtnZXRjb25mLCBsZGQxLCBsZGQyXSA9IG91dC5zcGxpdCgvW1xcclxcbl0rLyk7XG4gIGlmIChnZXRjb25mICYmIGdldGNvbmYuaW5jbHVkZXMoR0xJQkMpKSB7XG4gICAgcmV0dXJuIHZlcnNpb25TdWZmaXgoZ2V0Y29uZik7XG4gIH1cbiAgaWYgKGxkZDEgJiYgbGRkMiAmJiBsZGQxLmluY2x1ZGVzKE1VU0wpKSB7XG4gICAgcmV0dXJuIHZlcnNpb25TdWZmaXgobGRkMik7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHdpdGggdGhlIGxpYmMgdmVyc2lvbiB3aGVuIGl0IGNhbiBiZSBkZXRlcm1pbmVkLCBgbnVsbGAgb3RoZXJ3aXNlLlxuICogQHJldHVybnMge1Byb21pc2U8P3N0cmluZz59XG4gKi9cbmNvbnN0IHZlcnNpb24gPSBhc3luYyAoKSA9PiB7XG4gIGxldCB2ZXJzaW9uID0gbnVsbDtcbiAgaWYgKGlzTGludXgoKSkge1xuICAgIHZlcnNpb24gPSBhd2FpdCB2ZXJzaW9uRnJvbUZpbGVzeXN0ZW0oKTtcbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIHZlcnNpb24gPSB2ZXJzaW9uRnJvbVJlcG9ydCgpO1xuICAgIH1cbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIGNvbnN0IG91dCA9IGF3YWl0IHNhZmVDb21tYW5kKCk7XG4gICAgICB2ZXJzaW9uID0gdmVyc2lvbkZyb21Db21tYW5kKG91dCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2ZXJzaW9uO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsaWJjIHZlcnNpb24gd2hlbiBpdCBjYW4gYmUgZGV0ZXJtaW5lZCwgYG51bGxgIG90aGVyd2lzZS5cbiAqIEByZXR1cm5zIHs/c3RyaW5nfVxuICovXG5jb25zdCB2ZXJzaW9uU3luYyA9ICgpID0+IHtcbiAgbGV0IHZlcnNpb24gPSBudWxsO1xuICBpZiAoaXNMaW51eCgpKSB7XG4gICAgdmVyc2lvbiA9IHZlcnNpb25Gcm9tRmlsZXN5c3RlbVN5bmMoKTtcbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIHZlcnNpb24gPSB2ZXJzaW9uRnJvbVJlcG9ydCgpO1xuICAgIH1cbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIGNvbnN0IG91dCA9IHNhZmVDb21tYW5kU3luYygpO1xuICAgICAgdmVyc2lvbiA9IHZlcnNpb25Gcm9tQ29tbWFuZChvdXQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmVyc2lvbjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBHTElCQyxcbiAgTVVTTCxcbiAgZmFtaWx5LFxuICBmYW1pbHlTeW5jLFxuICBpc05vbkdsaWJjTGludXgsXG4gIGlzTm9uR2xpYmNMaW51eFN5bmMsXG4gIHZlcnNpb24sXG4gIHZlcnNpb25TeW5jXG59O1xuIiwKICAgICJjb25zdCBCUk9XU0VSX01BUFBJTkcgPSB7XG4gIGFuZF9jaHI6ICdjaHJvbWUnLFxuICBhbmRfZmY6ICdmaXJlZm94JyxcbiAgaWVfbW9iOiAnaWUnLFxuICBvcF9tb2I6ICdvcGVyYScsXG4gIGFuZF9xcTogbnVsbCxcbiAgYW5kX3VjOiBudWxsLFxuICBiYWlkdTogbnVsbCxcbiAgYmI6IG51bGwsXG4gIGthaW9zOiBudWxsLFxuICBvcF9taW5pOiBudWxsLFxufTtcblxuZnVuY3Rpb24gYnJvd3NlcnNsaXN0VG9UYXJnZXRzKGJyb3dzZXJzbGlzdCkge1xuICBsZXQgdGFyZ2V0cyA9IHt9O1xuICBmb3IgKGxldCBicm93c2VyIG9mIGJyb3dzZXJzbGlzdCkge1xuICAgIGxldCBbbmFtZSwgdl0gPSBicm93c2VyLnNwbGl0KCcgJyk7XG4gICAgaWYgKEJST1dTRVJfTUFQUElOR1tuYW1lXSA9PT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbGV0IHZlcnNpb24gPSBwYXJzZVZlcnNpb24odik7XG4gICAgaWYgKHZlcnNpb24gPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldHNbbmFtZV0gPT0gbnVsbCB8fCB2ZXJzaW9uIDwgdGFyZ2V0c1tuYW1lXSkge1xuICAgICAgdGFyZ2V0c1tuYW1lXSA9IHZlcnNpb247XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldHM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVmVyc2lvbih2ZXJzaW9uKSB7XG4gIGxldCBbbWFqb3IsIG1pbm9yID0gMCwgcGF0Y2ggPSAwXSA9IHZlcnNpb25cbiAgICAuc3BsaXQoJy0nKVswXVxuICAgIC5zcGxpdCgnLicpXG4gICAgLm1hcCh2ID0+IHBhcnNlSW50KHYsIDEwKSk7XG5cbiAgaWYgKGlzTmFOKG1ham9yKSB8fCBpc05hTihtaW5vcikgfHwgaXNOYU4ocGF0Y2gpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gKG1ham9yIDw8IDE2KSB8IChtaW5vciA8PCA4KSB8IHBhdGNoO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJyb3dzZXJzbGlzdFRvVGFyZ2V0cztcbiIsCiAgICAiLy8gQHRzLWNoZWNrXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnLi9pbmRleCcpLlZpc2l0b3J9IFZpc2l0b3IgKi9cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2luZGV4JykuVmlzaXRvckZ1bmN0aW9ufSBWaXNpdG9yRnVuY3Rpb24gKi9cblxuLyoqXG4gKiBDb21wb3NlcyBtdWx0aXBsZSB2aXNpdG9yIG9iamVjdHMgaW50byBhIHNpbmdsZSBvbmUuXG4gKiBAcGFyYW0geyhWaXNpdG9yIHwgVmlzaXRvckZ1bmN0aW9uKVtdfSB2aXNpdG9ycyBcbiAqIEByZXR1cm4ge1Zpc2l0b3IgfCBWaXNpdG9yRnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VWaXNpdG9ycyh2aXNpdG9ycykge1xuICBpZiAodmlzaXRvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHZpc2l0b3JzWzBdO1xuICB9XG4gIFxuICBpZiAodmlzaXRvcnMuc29tZSh2ID0+IHR5cGVvZiB2ID09PSAnZnVuY3Rpb24nKSkge1xuICAgIHJldHVybiAob3B0cykgPT4ge1xuICAgICAgbGV0IHYgPSB2aXNpdG9ycy5tYXAodiA9PiB0eXBlb2YgdiA9PT0gJ2Z1bmN0aW9uJyA/IHYob3B0cykgOiB2KTtcbiAgICAgIHJldHVybiBjb21wb3NlVmlzaXRvcnModik7XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAdHlwZSBWaXNpdG9yICovXG4gIGxldCByZXMgPSB7fTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdTdHlsZVNoZWV0Jyk7XG4gIGNvbXBvc2VTaW1wbGVWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnU3R5bGVTaGVldEV4aXQnKTtcbiAgY29tcG9zZU9iamVjdFZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdSdWxlJywgcnVsZVZpc2l0b3IsIHdyYXBDdXN0b21BbmRVbmtub3duQXRSdWxlKTtcbiAgY29tcG9zZU9iamVjdFZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdSdWxlRXhpdCcsIHJ1bGVWaXNpdG9yLCB3cmFwQ3VzdG9tQW5kVW5rbm93bkF0UnVsZSk7XG4gIGNvbXBvc2VPYmplY3RWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnRGVjbGFyYXRpb24nLCBkZWNsYXJhdGlvblZpc2l0b3IsIHdyYXBDdXN0b21Qcm9wZXJ0eSk7XG4gIGNvbXBvc2VPYmplY3RWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnRGVjbGFyYXRpb25FeGl0JywgZGVjbGFyYXRpb25WaXNpdG9yLCB3cmFwQ3VzdG9tUHJvcGVydHkpO1xuICBjb21wb3NlU2ltcGxlVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ1VybCcpO1xuICBjb21wb3NlU2ltcGxlVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ0NvbG9yJyk7XG4gIGNvbXBvc2VTaW1wbGVWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnSW1hZ2UnKTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdJbWFnZUV4aXQnKTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdMZW5ndGgnKTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdBbmdsZScpO1xuICBjb21wb3NlU2ltcGxlVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ1JhdGlvJyk7XG4gIGNvbXBvc2VTaW1wbGVWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnUmVzb2x1dGlvbicpO1xuICBjb21wb3NlU2ltcGxlVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ1RpbWUnKTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdDdXN0b21JZGVudCcpO1xuICBjb21wb3NlU2ltcGxlVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ0Rhc2hlZElkZW50Jyk7XG4gIGNvbXBvc2VBcnJheUZ1bmN0aW9ucyhyZXMsIHZpc2l0b3JzLCAnTWVkaWFRdWVyeScpO1xuICBjb21wb3NlQXJyYXlGdW5jdGlvbnMocmVzLCB2aXNpdG9ycywgJ01lZGlhUXVlcnlFeGl0Jyk7XG4gIGNvbXBvc2VTaW1wbGVWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnU3VwcG9ydHNDb25kaXRpb24nKTtcbiAgY29tcG9zZVNpbXBsZVZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdTdXBwb3J0c0NvbmRpdGlvbkV4aXQnKTtcbiAgY29tcG9zZUFycmF5RnVuY3Rpb25zKHJlcywgdmlzaXRvcnMsICdTZWxlY3RvcicpO1xuICBjb21wb3NlVG9rZW5WaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnVG9rZW4nLCAndG9rZW4nLCBmYWxzZSk7XG4gIGNvbXBvc2VUb2tlblZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdGdW5jdGlvbicsICdmdW5jdGlvbicsIGZhbHNlKTtcbiAgY29tcG9zZVRva2VuVmlzaXRvcnMocmVzLCB2aXNpdG9ycywgJ0Z1bmN0aW9uRXhpdCcsICdmdW5jdGlvbicsIHRydWUpO1xuICBjb21wb3NlVG9rZW5WaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnVmFyaWFibGUnLCAndmFyJywgZmFsc2UpO1xuICBjb21wb3NlVG9rZW5WaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnVmFyaWFibGVFeGl0JywgJ3ZhcicsIHRydWUpO1xuICBjb21wb3NlVG9rZW5WaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCAnRW52aXJvbm1lbnRWYXJpYWJsZScsICdlbnYnLCBmYWxzZSk7XG4gIGNvbXBvc2VUb2tlblZpc2l0b3JzKHJlcywgdmlzaXRvcnMsICdFbnZpcm9ubWVudFZhcmlhYmxlRXhpdCcsICdlbnYnLCB0cnVlKTtcbiAgcmV0dXJuIHJlcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb21wb3NlVmlzaXRvcnM7XG5cbmZ1bmN0aW9uIHdyYXBDdXN0b21BbmRVbmtub3duQXRSdWxlKGssIGYpIHtcbiAgaWYgKGsgPT09ICd1bmtub3duJykge1xuICAgIHJldHVybiAodmFsdWUgPT4gZih7IHR5cGU6ICd1bmtub3duJywgdmFsdWUgfSkpO1xuICB9XG4gIGlmIChrID09PSAnY3VzdG9tJykge1xuICAgIHJldHVybiAodmFsdWUgPT4gZih7IHR5cGU6ICdjdXN0b20nLCB2YWx1ZSB9KSk7XG4gIH1cbiAgcmV0dXJuIGY7XG59XG5cbmZ1bmN0aW9uIHdyYXBDdXN0b21Qcm9wZXJ0eShrLCBmKSB7XG4gIHJldHVybiBrID09PSAnY3VzdG9tJyA/ICh2YWx1ZSA9PiBmKHsgcHJvcGVydHk6ICdjdXN0b20nLCB2YWx1ZSB9KSkgOiBmO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2luZGV4JykuVmlzaXRvclsnUnVsZSddfSBmIFxuICogQHBhcmFtIHtpbXBvcnQoJy4vYXN0JykuUnVsZX0gaXRlbSBcbiAqL1xuZnVuY3Rpb24gcnVsZVZpc2l0b3IoZiwgaXRlbSkge1xuICBpZiAodHlwZW9mIGYgPT09ICdvYmplY3QnKSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3Vua25vd24nKSB7XG4gICAgICBsZXQgdiA9IGYudW5rbm93bjtcbiAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdiA9IHZbaXRlbS52YWx1ZS5uYW1lXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2Py4oaXRlbS52YWx1ZSk7XG4gICAgfVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdjdXN0b20nKSB7XG4gICAgICBsZXQgdiA9IGYuY3VzdG9tO1xuICAgICAgaWYgKHR5cGVvZiB2ID09PSAnb2JqZWN0Jykge1xuICAgICAgICB2ID0gdltpdGVtLnZhbHVlLm5hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHY/LihpdGVtLnZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZbaXRlbS50eXBlXT8uKGl0ZW0pO1xuICB9XG4gIHJldHVybiBmPy4oaXRlbSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW5kZXgnKS5WaXNpdG9yWydEZWNsYXJhdGlvbiddfSBmIFxuICogQHBhcmFtIHtpbXBvcnQoJy4vYXN0JykuRGVjbGFyYXRpb259IGl0ZW0gXG4gKi9cbmZ1bmN0aW9uIGRlY2xhcmF0aW9uVmlzaXRvcihmLCBpdGVtKSB7XG4gIGlmICh0eXBlb2YgZiA9PT0gJ29iamVjdCcpIHtcbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgICBsZXQgbmFtZSA9IGl0ZW0ucHJvcGVydHk7XG4gICAgaWYgKGl0ZW0ucHJvcGVydHkgPT09ICd1bnBhcnNlZCcpIHtcbiAgICAgIG5hbWUgPSBpdGVtLnZhbHVlLnByb3BlcnR5SWQucHJvcGVydHk7XG4gICAgfSBlbHNlIGlmIChpdGVtLnByb3BlcnR5ID09PSAnY3VzdG9tJykge1xuICAgICAgbGV0IHYgPSBmLmN1c3RvbTtcbiAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdiA9IHZbaXRlbS52YWx1ZS5uYW1lXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2Py4oaXRlbS52YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBmW25hbWVdPy4oaXRlbSk7XG4gIH1cbiAgcmV0dXJuIGY/LihpdGVtKTtcbn1cblxuLyoqXG4gKiBcbiAqIEBwYXJhbSB7VmlzaXRvcltdfSB2aXNpdG9ycyBcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgXG4gKiBAcmV0dXJucyB7W2FueVtdLCBib29sZWFuLCBTZXQ8c3RyaW5nPl19XG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RPYmplY3RzT3JGdW5jdGlvbnModmlzaXRvcnMsIGtleSkge1xuICBsZXQgdmFsdWVzID0gW107XG4gIGxldCBoYXNGdW5jdGlvbiA9IGZhbHNlO1xuICBsZXQgYWxsS2V5cyA9IG5ldyBTZXQoKTtcbiAgZm9yIChsZXQgdmlzaXRvciBvZiB2aXNpdG9ycykge1xuICAgIGxldCB2ID0gdmlzaXRvcltrZXldO1xuICAgIGlmICh2KSB7XG4gICAgICBpZiAodHlwZW9mIHYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaGFzRnVuY3Rpb24gPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQga2V5IGluIHYpIHtcbiAgICAgICAgICBhbGxLZXlzLmFkZChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YWx1ZXMucHVzaCh2KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFt2YWx1ZXMsIGhhc0Z1bmN0aW9uLCBhbGxLZXlzXTtcbn1cblxuLyoqXG4gKiBAdGVtcGxhdGUge2tleW9mIFZpc2l0b3J9IEtcbiAqIEBwYXJhbSB7VmlzaXRvcn0gcmVzXG4gKiBAcGFyYW0ge1Zpc2l0b3JbXX0gdmlzaXRvcnNcbiAqIEBwYXJhbSB7S30ga2V5XG4gKiBAcGFyYW0geyh2aXNpdG9yOiBWaXNpdG9yW0tdLCBpdGVtOiBhbnkpID0+IGFueSB8IGFueVtdIHwgdm9pZH0gYXBwbHkgXG4gKiBAcGFyYW0geyhrOiBzdHJpbmcsIGY6IGFueSkgPT4gYW55fSB3cmFwS2V5IFxuICovXG5mdW5jdGlvbiBjb21wb3NlT2JqZWN0VmlzaXRvcnMocmVzLCB2aXNpdG9ycywga2V5LCBhcHBseSwgd3JhcEtleSkge1xuICBsZXQgW3ZhbHVlcywgaGFzRnVuY3Rpb24sIGFsbEtleXNdID0gZXh0cmFjdE9iamVjdHNPckZ1bmN0aW9ucyh2aXNpdG9ycywga2V5KTtcbiAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJlc1trZXldID0gdmFsdWVzWzBdO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBmID0gY3JlYXRlQXJyYXlWaXNpdG9yKHZpc2l0b3JzLCAodmlzaXRvciwgaXRlbSkgPT4gYXBwbHkodmlzaXRvcltrZXldLCBpdGVtKSk7XG4gIGlmIChoYXNGdW5jdGlvbikge1xuICAgIHJlc1trZXldID0gZjtcbiAgfSBlbHNlIHtcbiAgICAvKiogQHR5cGUge2FueX0gKi9cbiAgICBsZXQgdiA9IHt9O1xuICAgIGZvciAobGV0IGsgb2YgYWxsS2V5cykge1xuICAgICAgdltrXSA9IHdyYXBLZXkoaywgZik7XG4gICAgfVxuICAgIHJlc1trZXldID0gdjtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7VmlzaXRvcn0gcmVzIFxuICogQHBhcmFtIHtWaXNpdG9yW119IHZpc2l0b3JzIFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2FzdCcpLlRva2VuT3JWYWx1ZVsndHlwZSddfSB0eXBlIFxuICogQHBhcmFtIHtib29sZWFufSBpc0V4aXQgXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VUb2tlblZpc2l0b3JzKHJlcywgdmlzaXRvcnMsIGtleSwgdHlwZSwgaXNFeGl0KSB7XG4gIGxldCBbdmFsdWVzLCBoYXNGdW5jdGlvbiwgYWxsS2V5c10gPSBleHRyYWN0T2JqZWN0c09yRnVuY3Rpb25zKHZpc2l0b3JzLCBrZXkpO1xuICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh2YWx1ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgcmVzW2tleV0gPSB2YWx1ZXNbMF07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGYgPSBjcmVhdGVUb2tlblZpc2l0b3IodmlzaXRvcnMsIHR5cGUsIGlzRXhpdCk7XG4gIGlmIChoYXNGdW5jdGlvbikge1xuICAgIHJlc1trZXldID0gZjtcbiAgfSBlbHNlIHtcbiAgICBsZXQgdiA9IHt9O1xuICAgIGZvciAobGV0IGtleSBvZiBhbGxLZXlzKSB7XG4gICAgICB2W2tleV0gPSBmO1xuICAgIH1cbiAgICByZXNba2V5XSA9IHY7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1Zpc2l0b3JbXX0gdmlzaXRvcnMgXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9hc3QnKS5Ub2tlbk9yVmFsdWVbJ3R5cGUnXX0gdHlwZSBcbiAqL1xuZnVuY3Rpb24gY3JlYXRlVG9rZW5WaXNpdG9yKHZpc2l0b3JzLCB0eXBlLCBpc0V4aXQpIHtcbiAgbGV0IHYgPSBjcmVhdGVBcnJheVZpc2l0b3IodmlzaXRvcnMsICh2aXNpdG9yLCAvKiogQHR5cGUge2ltcG9ydCgnLi9hc3QnKS5Ub2tlbk9yVmFsdWV9ICovIGl0ZW0pID0+IHtcbiAgICBsZXQgZjtcbiAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuICAgICAgY2FzZSAndG9rZW4nOlxuICAgICAgICBmID0gdmlzaXRvci5Ub2tlbjtcbiAgICAgICAgaWYgKHR5cGVvZiBmID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGYgPSBmW2l0ZW0udmFsdWUudHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgIGYgPSBpc0V4aXQgPyB2aXNpdG9yLkZ1bmN0aW9uRXhpdCA6IHZpc2l0b3IuRnVuY3Rpb247XG4gICAgICAgIGlmICh0eXBlb2YgZiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBmID0gZltpdGVtLnZhbHVlLm5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndmFyJzpcbiAgICAgICAgZiA9IGlzRXhpdCA/IHZpc2l0b3IuVmFyaWFibGVFeGl0IDogdmlzaXRvci5WYXJpYWJsZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlbnYnOlxuICAgICAgICBmID0gaXNFeGl0ID8gdmlzaXRvci5FbnZpcm9ubWVudFZhcmlhYmxlRXhpdCA6IHZpc2l0b3IuRW52aXJvbm1lbnRWYXJpYWJsZTtcbiAgICAgICAgaWYgKHR5cGVvZiBmID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGxldCBuYW1lO1xuICAgICAgICAgIHN3aXRjaCAoaXRlbS52YWx1ZS5uYW1lLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3VhJzpcbiAgICAgICAgICAgIGNhc2UgJ3Vua25vd24nOlxuICAgICAgICAgICAgICBuYW1lID0gaXRlbS52YWx1ZS5uYW1lLnZhbHVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2N1c3RvbSc6XG4gICAgICAgICAgICAgIG5hbWUgPSBpdGVtLnZhbHVlLm5hbWUuaWRlbnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmID0gZltuYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NvbG9yJzpcbiAgICAgICAgZiA9IHZpc2l0b3IuQ29sb3I7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndXJsJzpcbiAgICAgICAgZiA9IHZpc2l0b3IuVXJsO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xlbmd0aCc6XG4gICAgICAgIGYgPSB2aXNpdG9yLkxlbmd0aDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhbmdsZSc6XG4gICAgICAgIGYgPSB2aXNpdG9yLkFuZ2xlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RpbWUnOlxuICAgICAgICBmID0gdmlzaXRvci5UaW1lO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Jlc29sdXRpb24nOlxuICAgICAgICBmID0gdmlzaXRvci5SZXNvbHV0aW9uO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Rhc2hlZC1pZGVudCc6XG4gICAgICAgIGYgPSB2aXNpdG9yLkRhc2hlZElkZW50O1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoIWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgcmVzID0gZihpdGVtLnZhbHVlKTtcbiAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuICAgICAgY2FzZSAnY29sb3InOlxuICAgICAgY2FzZSAndXJsJzpcbiAgICAgIGNhc2UgJ2xlbmd0aCc6XG4gICAgICBjYXNlICdhbmdsZSc6XG4gICAgICBjYXNlICd0aW1lJzpcbiAgICAgIGNhc2UgJ3Jlc29sdXRpb24nOlxuICAgICAgY2FzZSAnZGFzaGVkLWlkZW50JzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzKSkge1xuICAgICAgICAgIHJlcyA9IHJlcy5tYXAodmFsdWUgPT4gKHsgdHlwZTogaXRlbS50eXBlLCB2YWx1ZSB9KSlcbiAgICAgICAgfSBlbHNlIGlmIChyZXMpIHtcbiAgICAgICAgICByZXMgPSB7IHR5cGU6IGl0ZW0udHlwZSwgdmFsdWU6IHJlcyB9O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH0pO1xuXG4gIHJldHVybiB2YWx1ZSA9PiB2KHsgdHlwZSwgdmFsdWUgfSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtWaXNpdG9yW119IHZpc2l0b3JzIFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdEZ1bmN0aW9ucyh2aXNpdG9ycywga2V5KSB7XG4gIGxldCBmdW5jdGlvbnMgPSBbXTtcbiAgZm9yIChsZXQgdmlzaXRvciBvZiB2aXNpdG9ycykge1xuICAgIGxldCBmID0gdmlzaXRvcltrZXldO1xuICAgIGlmIChmKSB7XG4gICAgICBmdW5jdGlvbnMucHVzaChmKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9ucztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1Zpc2l0b3J9IHJlcyBcbiAqIEBwYXJhbSB7VmlzaXRvcltdfSB2aXNpdG9ycyBcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VTaW1wbGVWaXNpdG9ycyhyZXMsIHZpc2l0b3JzLCBrZXkpIHtcbiAgbGV0IGZ1bmN0aW9ucyA9IGV4dHJhY3RGdW5jdGlvbnModmlzaXRvcnMsIGtleSk7XG4gIGlmIChmdW5jdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZ1bmN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICByZXNba2V5XSA9IGZ1bmN0aW9uc1swXTtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXNba2V5XSA9IGFyZyA9PiB7XG4gICAgbGV0IG11dGF0ZWQgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBmIG9mIGZ1bmN0aW9ucykge1xuICAgICAgbGV0IHJlcyA9IGYoYXJnKTtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgYXJnID0gcmVzO1xuICAgICAgICBtdXRhdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbXV0YXRlZCA/IGFyZyA6IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1Zpc2l0b3J9IHJlcyBcbiAqIEBwYXJhbSB7VmlzaXRvcltdfSB2aXNpdG9ycyBcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VBcnJheUZ1bmN0aW9ucyhyZXMsIHZpc2l0b3JzLCBrZXkpIHtcbiAgbGV0IGZ1bmN0aW9ucyA9IGV4dHJhY3RGdW5jdGlvbnModmlzaXRvcnMsIGtleSk7XG4gIGlmIChmdW5jdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZ1bmN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICByZXNba2V5XSA9IGZ1bmN0aW9uc1swXTtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXNba2V5XSA9IGNyZWF0ZUFycmF5VmlzaXRvcihmdW5jdGlvbnMsIChmLCBpdGVtKSA9PiBmKGl0ZW0pKTtcbn1cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHRlbXBsYXRlIFZcbiAqIEBwYXJhbSB7VFtdfSB2aXNpdG9ycyBcbiAqIEBwYXJhbSB7KHZpc2l0b3I6IFQsIGl0ZW06IFYpID0+IFYgfCBWW10gfCB2b2lkfSBhcHBseSBcbiAqIEByZXR1cm5zIHsoaXRlbTogVikgPT4gViB8IFZbXSB8IHZvaWR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFycmF5VmlzaXRvcih2aXNpdG9ycywgYXBwbHkpIHtcbiAgbGV0IHNlZW4gPSBuZXcgQml0c2V0KHZpc2l0b3JzLmxlbmd0aCk7XG4gIHJldHVybiBhcmcgPT4ge1xuICAgIGxldCBhcnIgPSBbYXJnXTtcbiAgICBsZXQgbXV0YXRlZCA9IGZhbHNlO1xuICAgIHNlZW4uY2xlYXIoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gRm9yIGVhY2ggdmFsdWUsIGNhbGwgYWxsIHZpc2l0b3JzLiBJZiBhIHZpc2l0b3IgcmV0dXJucyBhIG5ldyB2YWx1ZSxcbiAgICAgIC8vIHdlIHN0YXJ0IG92ZXIsIGJ1dCBza2lwIHRoZSB2aXNpdG9yIHRoYXQgZ2VuZXJhdGVkIHRoZSB2YWx1ZSBvciBzYXdcbiAgICAgIC8vIGl0IGJlZm9yZSAodG8gYXZvaWQgY3ljbGVzKS4gVGhpcyB3YXksIHZpc2l0b3JzIGNhbiBiZSBjb21wb3NlZCBpbiBhbnkgb3JkZXIuIFxuICAgICAgZm9yIChsZXQgdiA9IDA7IHYgPCB2aXNpdG9ycy5sZW5ndGggJiYgaSA8IGFyci5sZW5ndGg7KSB7XG4gICAgICAgIGlmIChzZWVuLmdldCh2KSkge1xuICAgICAgICAgIHYrKztcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpdGVtID0gYXJyW2ldO1xuICAgICAgICBsZXQgdmlzaXRvciA9IHZpc2l0b3JzW3ZdO1xuICAgICAgICBsZXQgcmVzID0gYXBwbHkodmlzaXRvciwgaXRlbSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcykpIHtcbiAgICAgICAgICBpZiAocmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgYXJyLnNwbGljZShpLCAxKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGFycltpXSA9IHJlc1swXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyLnNwbGljZShpLCAxLCAuLi5yZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtdXRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICBzZWVuLnNldCh2KTtcbiAgICAgICAgICB2ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChyZXMpIHtcbiAgICAgICAgICBhcnJbaV0gPSByZXM7XG4gICAgICAgICAgbXV0YXRlZCA9IHRydWU7XG4gICAgICAgICAgc2Vlbi5zZXQodik7XG4gICAgICAgICAgdiA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdisrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFtdXRhdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyci5sZW5ndGggPT09IDEgPyBhcnJbMF0gOiBhcnI7XG4gIH07XG59XG5cbmNsYXNzIEJpdHNldCB7XG4gIGNvbnN0cnVjdG9yKG1heEJpdHMgPSAzMikge1xuICAgIHRoaXMuYml0cyA9IDA7XG4gICAgdGhpcy5tb3JlID0gbWF4Qml0cyA+IDMyID8gbmV3IFVpbnQzMkFycmF5KE1hdGguY2VpbCgobWF4Qml0cyAtIDMyKSAvIDMyKSkgOiBudWxsO1xuICB9XG5cbiAgLyoqIEBwYXJhbSB7bnVtYmVyfSBiaXQgKi9cbiAgZ2V0KGJpdCkge1xuICAgIGlmIChiaXQgPj0gMzIgJiYgdGhpcy5tb3JlKSB7XG4gICAgICBsZXQgaSA9IE1hdGguZmxvb3IoKGJpdCAtIDMyKSAvIDMyKTtcbiAgICAgIGxldCBiID0gYml0ICUgMzI7XG4gICAgICByZXR1cm4gQm9vbGVhbih0aGlzLm1vcmVbaV0gJiAoMSA8PCBiKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBCb29sZWFuKHRoaXMuYml0cyAmICgxIDw8IGJpdCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAcGFyYW0ge251bWJlcn0gYml0ICovXG4gIHNldChiaXQpIHtcbiAgICBpZiAoYml0ID49IDMyICYmIHRoaXMubW9yZSkge1xuICAgICAgbGV0IGkgPSBNYXRoLmZsb29yKChiaXQgLSAzMikgLyAzMik7XG4gICAgICBsZXQgYiA9IGJpdCAlIDMyO1xuICAgICAgdGhpcy5tb3JlW2ldIHw9IDEgPDwgYjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iaXRzIHw9IDEgPDwgYml0O1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuYml0cyA9IDA7XG4gICAgaWYgKHRoaXMubW9yZSkge1xuICAgICAgdGhpcy5tb3JlLmZpbGwoMCk7XG4gICAgfVxuICB9XG59XG4iLAogICAgIi8vIFRoaXMgZmlsZSBpcyBhdXRvZ2VuZXJhdGVkIGJ5IGJ1aWxkLXByZWZpeGVzLmpzLiBETyBOT1QgRURJVCFcblxuZXhwb3J0cy5GZWF0dXJlcyA9IHtcbiAgTmVzdGluZzogMSxcbiAgTm90U2VsZWN0b3JMaXN0OiAyLFxuICBEaXJTZWxlY3RvcjogNCxcbiAgTGFuZ1NlbGVjdG9yTGlzdDogOCxcbiAgSXNTZWxlY3RvcjogMTYsXG4gIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzUGVyY2VudDogMzIsXG4gIE1lZGlhSW50ZXJ2YWxTeW50YXg6IDY0LFxuICBNZWRpYVJhbmdlU3ludGF4OiAxMjgsXG4gIEN1c3RvbU1lZGlhUXVlcmllczogMjU2LFxuICBDbGFtcEZ1bmN0aW9uOiA1MTIsXG4gIENvbG9yRnVuY3Rpb246IDEwMjQsXG4gIE9rbGFiQ29sb3JzOiAyMDQ4LFxuICBMYWJDb2xvcnM6IDQwOTYsXG4gIFAzQ29sb3JzOiA4MTkyLFxuICBIZXhBbHBoYUNvbG9yczogMTYzODQsXG4gIFNwYWNlU2VwYXJhdGVkQ29sb3JOb3RhdGlvbjogMzI3NjgsXG4gIEZvbnRGYW1pbHlTeXN0ZW1VaTogNjU1MzYsXG4gIERvdWJsZVBvc2l0aW9uR3JhZGllbnRzOiAxMzEwNzIsXG4gIFZlbmRvclByZWZpeGVzOiAyNjIxNDQsXG4gIExvZ2ljYWxQcm9wZXJ0aWVzOiA1MjQyODgsXG4gIExpZ2h0RGFyazogMTA0ODU3NixcbiAgU2VsZWN0b3JzOiAzMSxcbiAgTWVkaWFRdWVyaWVzOiA0NDgsXG4gIENvbG9yczogMTExMzA4OCxcbn07XG4iLAogICAgImxldCBwYXJ0cyA9IFtwcm9jZXNzLnBsYXRmb3JtLCBwcm9jZXNzLmFyY2hdO1xuaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdsaW51eCcpIHtcbiAgY29uc3QgeyBNVVNMLCBmYW1pbHlTeW5jIH0gPSByZXF1aXJlKCdkZXRlY3QtbGliYycpO1xuICBjb25zdCBmYW1pbHkgPSBmYW1pbHlTeW5jKCk7XG4gIGlmIChmYW1pbHkgPT09IE1VU0wpIHtcbiAgICBwYXJ0cy5wdXNoKCdtdXNsJyk7XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5hcmNoID09PSAnYXJtJykge1xuICAgIHBhcnRzLnB1c2goJ2dudWVhYmloZicpO1xuICB9IGVsc2Uge1xuICAgIHBhcnRzLnB1c2goJ2dudScpO1xuICB9XG59IGVsc2UgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgcGFydHMucHVzaCgnbXN2YycpO1xufVxuXG5sZXQgbmF0aXZlO1xudHJ5IHtcbiAgbmF0aXZlID0gcmVxdWlyZShgbGlnaHRuaW5nY3NzLSR7cGFydHMuam9pbignLScpfWApO1xufSBjYXRjaCAoZXJyKSB7XG4gIG5hdGl2ZSA9IHJlcXVpcmUoYC4uL2xpZ2h0bmluZ2Nzcy4ke3BhcnRzLmpvaW4oJy0nKX0ubm9kZWApO1xufVxuXG5tb2R1bGUuZXhwb3J0cy50cmFuc2Zvcm0gPSB3cmFwKG5hdGl2ZS50cmFuc2Zvcm0pO1xubW9kdWxlLmV4cG9ydHMudHJhbnNmb3JtU3R5bGVBdHRyaWJ1dGUgPSB3cmFwKG5hdGl2ZS50cmFuc2Zvcm1TdHlsZUF0dHJpYnV0ZSk7XG5tb2R1bGUuZXhwb3J0cy5idW5kbGUgPSB3cmFwKG5hdGl2ZS5idW5kbGUpO1xubW9kdWxlLmV4cG9ydHMuYnVuZGxlQXN5bmMgPSB3cmFwKG5hdGl2ZS5idW5kbGVBc3luYyk7XG5tb2R1bGUuZXhwb3J0cy5icm93c2Vyc2xpc3RUb1RhcmdldHMgPSByZXF1aXJlKCcuL2Jyb3dzZXJzbGlzdFRvVGFyZ2V0cycpO1xubW9kdWxlLmV4cG9ydHMuY29tcG9zZVZpc2l0b3JzID0gcmVxdWlyZSgnLi9jb21wb3NlVmlzaXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzLkZlYXR1cmVzID0gcmVxdWlyZSgnLi9mbGFncycpLkZlYXR1cmVzO1xuXG5mdW5jdGlvbiB3cmFwKGNhbGwpIHtcbiAgcmV0dXJuIChvcHRpb25zKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnZpc2l0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGxldCBkZXBzID0gW107XG4gICAgICBvcHRpb25zLnZpc2l0b3IgPSBvcHRpb25zLnZpc2l0b3Ioe1xuICAgICAgICBhZGREZXBlbmRlbmN5KGRlcCkge1xuICAgICAgICAgIGRlcHMucHVzaChkZXApO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbGV0IHJlc3VsdCA9IGNhbGwob3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQudGhlbihyZXMgPT4ge1xuICAgICAgICAgIGlmIChkZXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmVzLmRlcGVuZGVuY2llcyA/Pz0gW107XG4gICAgICAgICAgICByZXMuZGVwZW5kZW5jaWVzLnB1c2goLi4uZGVwcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChkZXBzLmxlbmd0aCkge1xuICAgICAgICByZXN1bHQuZGVwZW5kZW5jaWVzID8/PSBbXTtcbiAgICAgICAgcmVzdWx0LmRlcGVuZGVuY2llcy5wdXNoKC4uLmRlcHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNhbGwob3B0aW9ucyk7XG4gICAgfVxuICB9O1xufVxuIiwKICAgICIjIS91c3IvYmluL2VudiBidW5cbi8qKlxuICogUG9zdGJ1aWxkIENTUyBwdXJnZSDigJQgc3RhbmRhbG9uZSBCdW4gc2NyaXB0LlxuICpcbiAqIFJ1bnMgYWZ0ZXIgcnNidWlsZCBidWlsZCwgcHVyZ2VzIENTUyBmaWxlcyBpbiBkaXN0LyB1c2luZyB0aGUgcHVyZ2UgbWFuaWZlc3RcbiAqIGFuZCBjb25zdW1lciBKU1ggYW5hbHlzaXMuIFplcm8gTm9kZSBpbXBvcnRzLlxuICpcbiAqIFRocmVlLWxldmVsIHB1cmdlOlxuICogICBMMSDigJQgY2xhc3MtbGV2ZWw6IGRyb3AgcnVsZXMgd2hvc2UgY2xhc3Mgc2VsZWN0b3JzIGFyZW4ndCBpbiB0aGUgc2FmZWxpc3QgKHBvc3Rjc3MpXG4gKiAgIEwyIOKAlCBhdHRyLWxldmVsOiBkcm9wIHJ1bGVzIHdpdGggZGF0YS9hcmlhIGF0dHJpYnV0ZSBzZWxlY3RvcnMgZm9yIHVudXNlZCBwcm9wcyAocG9zdGNzcylcbiAqICAgTDMg4oCUIHZhciBjbGVhbnVwOiBpdGVyYXRpdmVseSByZW1vdmUgZGVjbGFyZWQtYnV0LXVucmVmZXJlbmNlZCBDU1MgY3VzdG9tIHByb3BlcnRpZXMgKHBvc3Rjc3MpXG4gKiAgIEZpbmFsIOKAlCBtaW5pZmljYXRpb24gdmlhIExpZ2h0bmluZyBDU1NcbiAqXG4gKiBVc2FnZTpcbiAqICAgYnVueCBAcGF0aHNjYWxlL3JzYnVpbGQtcGx1Z2luLXVpLWNzcy1wdXJnZSBcXFxuICogICAgIC0tZGlzdCBkaXN0IC0tc3JjIHNyYyAtLW1hbmlmZXN0IG5vZGVfbW9kdWxlcy9AcGF0aHNjYWxlL3VpL2Rpc3QvcHVyZ2UtbWFuaWZlc3QuanNvblxuICovXG5cbmltcG9ydCB7IEdsb2IgfSBmcm9tIFwiYnVuXCI7XG5pbXBvcnQgeyB0cmFuc2Zvcm0gfSBmcm9tIFwibGlnaHRuaW5nY3NzXCI7XG5pbXBvcnQgcG9zdGNzcyBmcm9tIFwicG9zdGNzc1wiO1xuaW1wb3J0IHR5cGUgeyBSdWxlLCBBdFJ1bGUgfSBmcm9tIFwicG9zdGNzc1wiO1xuaW1wb3J0IHsgc2NhbkNvbnN1bWVyU291cmNlLCBidWlsZFNhZmVsaXN0cyB9IGZyb20gXCIuL3NjYW4tY29uc3VtZXJcIjtcbmltcG9ydCB0eXBlIHsgUHVyZ2VNYW5pZmVzdCB9IGZyb20gXCIuL3NjYW4tY29uc3VtZXJcIjtcblxuLy8g4pSA4pSAIENMSSBhcmdzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiBwYXJzZUFyZ3MoYXJndjogc3RyaW5nW10pOiB7IGRpc3REaXI6IHN0cmluZzsgc3JjRGlyOiBzdHJpbmc7IG1hbmlmZXN0UGF0aDogc3RyaW5nIH0ge1xuICBjb25zdCBhcmdzID0gYXJndi5zbGljZSgyKTtcbiAgbGV0IGRpc3REaXIgPSBcIi4vZGlzdFwiO1xuICBsZXQgc3JjRGlyID0gXCIuL3NyY1wiO1xuICBsZXQgbWFuaWZlc3RQYXRoID0gXCJcIjtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJnc1tpXSA9PT0gXCItLWRpc3RcIiAmJiBhcmdzW2kgKyAxXSkgZGlzdERpciA9IGFyZ3NbKytpXTtcbiAgICBlbHNlIGlmIChhcmdzW2ldID09PSBcIi0tc3JjXCIgJiYgYXJnc1tpICsgMV0pIHNyY0RpciA9IGFyZ3NbKytpXTtcbiAgICBlbHNlIGlmIChhcmdzW2ldID09PSBcIi0tbWFuaWZlc3RcIiAmJiBhcmdzW2kgKyAxXSkgbWFuaWZlc3RQYXRoID0gYXJnc1srK2ldO1xuICB9XG5cbiAgaWYgKCFtYW5pZmVzdFBhdGgpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgXCJVc2FnZTogYnVueCBAcGF0aHNjYWxlL3JzYnVpbGQtcGx1Z2luLXVpLWNzcy1wdXJnZSAtLW1hbmlmZXN0IDxwYXRoPiBbLS1kaXN0IDxwYXRoPl0gWy0tc3JjIDxwYXRoPl1cIixcbiAgICApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIHJldHVybiB7IGRpc3REaXIsIHNyY0RpciwgbWFuaWZlc3RQYXRoIH07XG59XG5cbi8vIOKUgOKUgCBCdWlsZCBraWxsLWxpc3Q6IGNsYXNzZXMgZnJvbSBjb21wb25lbnRzIHRoYXQgYXJlIG5ldmVyIGltcG9ydGVkIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiBjb2xsZWN0Q2xhc3Nlc0Zyb21FbnRyeShlbnRyeTogeyBjbGFzc2VzOiB7IGFsd2F5czogc3RyaW5nW107IGJ5UHJvcDogUmVjb3JkPHN0cmluZywgc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4+IH0gfSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmVzdWx0ID0gWy4uLmVudHJ5LmNsYXNzZXMuYWx3YXlzXTtcbiAgZm9yIChjb25zdCB2YWx1ZSBvZiBPYmplY3QudmFsdWVzKGVudHJ5LmNsYXNzZXMuYnlQcm9wKSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmVzdWx0LnB1c2goLi4udmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGNsYXNzZXMgb2YgT2JqZWN0LnZhbHVlcyh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goLi4uY2xhc3Nlcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmludGVyZmFjZSBLaWxsTGlzdFJlc3VsdCB7XG4gIGtpbGxMaXN0OiBTZXQ8c3RyaW5nPjtcbiAgLyoqXG4gICAqIEJFTSByb290IGNsYXNzZXMgb2YgY29tcG9uZW50cyB0aGUgY29uc3VtZXIgYWN0dWFsbHkgdXNlcy4gVXNlZCB0b1xuICAgKiBwcmVzZXJ2ZSBwdXJlIGF0dHJpYnV0ZSBzZWxlY3RvciBydWxlcyBsaWtlXG4gICAqIGBbZGF0YS1zbG90PVwiY2hlY2tib3gtZGVmYXVsdC1pbmRpY2F0b3ItLWNoZWNrbWFya1wiXWAgdGhhdCBoYXZlIG5vIGNsYXNzXG4gICAqIHJlZmVyZW5jZSBidXQgYXJlIHN0aWxsIGNvbXBvbmVudC1zY29wZWQuXG4gICAqL1xuICB1c2VkQmVtUm9vdHM6IFNldDxzdHJpbmc+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRLaWxsTGlzdChcbiAgbWFuaWZlc3Q6IFB1cmdlTWFuaWZlc3QsXG4gIGltcG9ydGVkQ29tcG9uZW50czogU2V0PHN0cmluZz4sXG4pOiBLaWxsTGlzdFJlc3VsdCB7XG4gIC8vIEZvciBlYWNoIG1hbmlmZXN0IGVudHJ5LCBjb2xsZWN0IEJFTSByb290IGNsYXNzZXMgKGZyb20gY2xhc3Nlcy5hbHdheXMpLlxuICAvLyBBIGNsYXNzIGlzIGNvbnNpZGVyZWQgYSBCRU0tb3duZWQgY2xhc3Mgb2YgYSBjb21wb25lbnQgaWYgaXQgbWF0Y2hlc1xuICAvLyBvbmUgb2YgaXRzIHJvb3RzOiBleGFjdCBtYXRjaCwgcm9vdC0tLCBvciByb290X18uXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSAoVGFpbHdpbmQgdXRpbGl0aWVzIGxpa2UgZ2FwLTEsIGZsZXgtY29sKSBpcyBuZXZlciBraWxsZWQuXG4gIGNvbnN0IGNvbXBvbmVudEJlbVJvb3RzID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuXG4gIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIE9iamVjdC5lbnRyaWVzKG1hbmlmZXN0KSkge1xuICAgIGNvbnN0IHJvb3QgPSBrZXkuc3BsaXQoXCIuXCIpWzBdO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gY29tcG9uZW50QmVtUm9vdHMuZ2V0KHJvb3QpID8/IG5ldyBTZXQoKTtcbiAgICBmb3IgKGNvbnN0IGNscyBvZiBlbnRyeS5jbGFzc2VzLmFsd2F5cykge1xuICAgICAgZXhpc3RpbmcuYWRkKGNscyk7XG4gICAgfVxuICAgIGNvbXBvbmVudEJlbVJvb3RzLnNldChyb290LCBleGlzdGluZyk7XG4gIH1cblxuICAvLyBDb2xsZWN0IEFMTCBjbGFzc2VzIHBlciBjb21wb25lbnRcbiAgY29uc3QgY29tcG9uZW50Q2xhc3NlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgZm9yIChjb25zdCBba2V5LCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXMobWFuaWZlc3QpKSB7XG4gICAgY29uc3Qgcm9vdCA9IGtleS5zcGxpdChcIi5cIilbMF07XG4gICAgY29uc3QgZXhpc3RpbmcgPSBjb21wb25lbnRDbGFzc2VzLmdldChyb290KSA/PyBbXTtcbiAgICBleGlzdGluZy5wdXNoKC4uLmNvbGxlY3RDbGFzc2VzRnJvbUVudHJ5KGVudHJ5KSk7XG4gICAgY29tcG9uZW50Q2xhc3Nlcy5zZXQocm9vdCwgZXhpc3RpbmcpO1xuICB9XG5cbiAgLy8gRmlsdGVyOiBvbmx5IGluY2x1ZGUgY2xhc3NlcyB0aGF0IG1hdGNoIGEgQkVNIHJvb3Qgb2YgdGhlaXIgY29tcG9uZW50XG4gIGZ1bmN0aW9uIGlzQmVtQ2xhc3MoY2xzOiBzdHJpbmcsIGJlbVJvb3RzOiBTZXQ8c3RyaW5nPik6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3Qgcm9vdCBvZiBiZW1Sb290cykge1xuICAgICAgaWYgKGNscyA9PT0gcm9vdCB8fCBjbHMuc3RhcnRzV2l0aChgJHtyb290fS0tYCkgfHwgY2xzLnN0YXJ0c1dpdGgoYCR7cm9vdH1fX2ApKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBraWxsTGlzdCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBzYWZlQ2xhc3NlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB1c2VkQmVtUm9vdHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IFtjb21wb25lbnQsIGNsYXNzZXNdIG9mIGNvbXBvbmVudENsYXNzZXMpIHtcbiAgICBjb25zdCBiZW1Sb290cyA9IGNvbXBvbmVudEJlbVJvb3RzLmdldChjb21wb25lbnQpID8/IG5ldyBTZXQoKTtcbiAgICBpZiAoaW1wb3J0ZWRDb21wb25lbnRzLmhhcyhjb21wb25lbnQpKSB7XG4gICAgICBmb3IgKGNvbnN0IGNscyBvZiBjbGFzc2VzKSBzYWZlQ2xhc3Nlcy5hZGQoY2xzKTtcbiAgICAgIGZvciAoY29uc3Qgcm9vdCBvZiBiZW1Sb290cykgdXNlZEJlbVJvb3RzLmFkZChyb290KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT25seSBraWxsIEJFTS1vd25lZCBjbGFzc2VzLCBub3QgVGFpbHdpbmQgdXRpbGl0aWVzXG4gICAgICBmb3IgKGNvbnN0IGNscyBvZiBjbGFzc2VzKSB7XG4gICAgICAgIGlmIChpc0JlbUNsYXNzKGNscywgYmVtUm9vdHMpKSB7XG4gICAgICAgICAga2lsbExpc3QuYWRkKGNscyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBJZiBhIGNsYXNzIGFwcGVhcnMgaW4gQk9USCB1c2VkIGFuZCB1bnVzZWQgY29tcG9uZW50cywga2VlcCBpdFxuICBmb3IgKGNvbnN0IGNscyBvZiBzYWZlQ2xhc3Nlcykge1xuICAgIGtpbGxMaXN0LmRlbGV0ZShjbHMpO1xuICB9XG5cbiAgcmV0dXJuIHsga2lsbExpc3QsIHVzZWRCZW1Sb290cyB9O1xufVxuXG4vKiogQ29udmVydCBrZWJhYi1jYXNlIGRpcmVjdG9yeSBuYW1lIHRvIFBhc2NhbENhc2UgY29tcG9uZW50IG5hbWUgKi9cbmZ1bmN0aW9uIGtlYmFiVG9QYXNjYWwoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHMuc3BsaXQoXCItXCIpLm1hcCgocCkgPT4gcC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHAuc2xpY2UoMSkpLmpvaW4oXCJcIik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYW5JbXBvcnRlZENvbXBvbmVudHMoc3JjRGlyOiBzdHJpbmcpOiBQcm9taXNlPFNldDxzdHJpbmc+PiB7XG4gIGNvbnN0IGltcG9ydGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IGdsb2IgPSBuZXcgR2xvYihcIioqLyoue3RzeCx0cyxqc3gsanN9XCIpO1xuXG4gIGZvciBhd2FpdCAoY29uc3QgcmVsUGF0aCBvZiBnbG9iLnNjYW4oeyBjd2Q6IHNyY0RpciB9KSkge1xuICAgIGlmIChyZWxQYXRoLmluY2x1ZGVzKFwibm9kZV9tb2R1bGVzXCIpKSBjb250aW51ZTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGAke3NyY0Rpcn0vJHtyZWxQYXRofWA7XG4gICAgY29uc3QgY29kZSA9IGF3YWl0IEJ1bi5maWxlKGZ1bGxQYXRoKS50ZXh0KCk7XG4gICAgaWYgKCFjb2RlLmluY2x1ZGVzKFwiQHBhdGhzY2FsZS91aVwiKSkgY29udGludWU7XG5cbiAgICAvLyBNYXRjaCBiYXJyZWw6IGltcG9ydCB7IEZvbywgQmFyIGFzIEJheiB9IGZyb20gXCJAcGF0aHNjYWxlL3VpXCJcbiAgICBjb25zdCBiYXJyZWxSZWdleCA9IC9pbXBvcnRcXHMqXFx7KFtefV0rKVxcfVxccypmcm9tXFxzKlsnXCJdQHBhdGhzY2FsZVxcL3VpWydcIl0vZztcbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIGNvZGUubWF0Y2hBbGwoYmFycmVsUmVnZXgpKSB7XG4gICAgICBjb25zdCBzcGVjaWZpZXJzID0gbWF0Y2hbMV0uc3BsaXQoXCIsXCIpO1xuICAgICAgZm9yIChjb25zdCBzcGVjIG9mIHNwZWNpZmllcnMpIHtcbiAgICAgICAgY29uc3QgdHJpbW1lZCA9IHNwZWMudHJpbSgpO1xuICAgICAgICBpZiAodHJpbW1lZC5zdGFydHNXaXRoKFwidHlwZSBcIikpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBuYW1lID0gdHJpbW1lZC5zcGxpdCgvXFxzK2FzXFxzKy8pWzBdLnRyaW0oKTtcbiAgICAgICAgaWYgKG5hbWUgJiYgL15bQS1aXS8udGVzdChuYW1lKSkge1xuICAgICAgICAgIGltcG9ydGVkLmFkZChuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1hdGNoIGRlZXAtcGF0aCBkZWZhdWx0OiBpbXBvcnQgRm9vIGZyb20gXCJAcGF0aHNjYWxlL3VpL2NvbXBvbmVudHMvZm9vLWJhclwiXG4gICAgY29uc3QgZGVlcERlZmF1bHRSZWdleCA9IC9pbXBvcnRcXHMrKFtBLVpdW2EtekEtWjAtOV0qKVxccytmcm9tXFxzKlsnXCJdQHBhdGhzY2FsZVxcL3VpXFwvY29tcG9uZW50c1xcLyhbXidcIl0rKVsnXCJdL2c7XG4gICAgZm9yIChjb25zdCBtYXRjaCBvZiBjb2RlLm1hdGNoQWxsKGRlZXBEZWZhdWx0UmVnZXgpKSB7XG4gICAgICBpbXBvcnRlZC5hZGQobWF0Y2hbMV0pO1xuICAgIH1cblxuICAgIC8vIE1hdGNoIGRlZXAtcGF0aCBuYW1lZDogaW1wb3J0IHsgRm9vLCBCYXIgfSBmcm9tIFwiQHBhdGhzY2FsZS91aS9jb21wb25lbnRzL2Zvby1iYXJcIlxuICAgIGNvbnN0IGRlZXBOYW1lZFJlZ2V4ID0gL2ltcG9ydFxccypcXHsoW159XSspXFx9XFxzKmZyb21cXHMqWydcIl1AcGF0aHNjYWxlXFwvdWlcXC9jb21wb25lbnRzXFwvKFteJ1wiXSspWydcIl0vZztcbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIGNvZGUubWF0Y2hBbGwoZGVlcE5hbWVkUmVnZXgpKSB7XG4gICAgICBjb25zdCBzcGVjaWZpZXJzID0gbWF0Y2hbMV0uc3BsaXQoXCIsXCIpO1xuICAgICAgZm9yIChjb25zdCBzcGVjIG9mIHNwZWNpZmllcnMpIHtcbiAgICAgICAgY29uc3QgdHJpbW1lZCA9IHNwZWMudHJpbSgpO1xuICAgICAgICBpZiAodHJpbW1lZC5zdGFydHNXaXRoKFwidHlwZSBcIikpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBuYW1lID0gdHJpbW1lZC5zcGxpdCgvXFxzK2FzXFxzKy8pWzBdLnRyaW0oKTtcbiAgICAgICAgaWYgKG5hbWUgJiYgL15bQS1aXS8udGVzdChuYW1lKSkge1xuICAgICAgICAgIGltcG9ydGVkLmFkZChuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQWxzbyBhZGQgdGhlIFBhc2NhbENhc2UgbmFtZSBmcm9tIHRoZSBwYXRoIGl0c2VsZiAoY292ZXJzIHN1Yi1jb21wb25lbnRzKVxuICAgICAgY29uc3QgZGlyTmFtZSA9IG1hdGNoWzJdLnNwbGl0KFwiL1wiKVswXTtcbiAgICAgIGltcG9ydGVkLmFkZChrZWJhYlRvUGFzY2FsKGRpck5hbWUpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaW1wb3J0ZWQ7XG59XG5cbi8qKlxuICogQnVpbGQgZGVwZW5kZW5jeSBncmFwaCBmcm9tIG1hbmlmZXN0IGBkZXBzYCBmaWVsZHMuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRGVwR3JhcGhGcm9tTWFuaWZlc3QobWFuaWZlc3Q6IFB1cmdlTWFuaWZlc3QpOiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4ge1xuICBjb25zdCBncmFwaCA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcbiAgZm9yIChjb25zdCBba2V5LCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXMobWFuaWZlc3QpKSB7XG4gICAgY29uc3Qgcm9vdCA9IGtleS5zcGxpdChcIi5cIilbMF07XG4gICAgaWYgKGVudHJ5LmRlcHMgJiYgZW50cnkuZGVwcy5sZW5ndGggPiAwICYmICFncmFwaC5oYXMocm9vdCkpIHtcbiAgICAgIGdyYXBoLnNldChyb290LCBuZXcgU2V0KGVudHJ5LmRlcHMpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGdyYXBoO1xufVxuXG4vKipcbiAqIEdpdmVuIGRpcmVjdGx5IGltcG9ydGVkIGNvbXBvbmVudHMgYW5kIGEgZGVwZW5kZW5jeSBncmFwaCxcbiAqIHRyYW5zaXRpdmVseSByZXNvbHZlIGFsbCBjb21wb25lbnRzIHRoYXQgYXJlIG5lZWRlZC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVRyYW5zaXRpdmVEZXBzKFxuICBpbXBvcnRlZDogU2V0PHN0cmluZz4sXG4gIGRlcEdyYXBoOiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4sXG4pOiBTZXQ8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc29sdmVkID0gbmV3IFNldChpbXBvcnRlZCk7XG4gIGNvbnN0IHF1ZXVlID0gWy4uLmltcG9ydGVkXTtcblxuICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGNvbXAgPSBxdWV1ZS5wb3AoKSE7XG4gICAgY29uc3QgZGVwcyA9IGRlcEdyYXBoLmdldChjb21wKTtcbiAgICBpZiAoIWRlcHMpIGNvbnRpbnVlO1xuICAgIGZvciAoY29uc3QgZGVwIG9mIGRlcHMpIHtcbiAgICAgIGlmICghcmVzb2x2ZWQuaGFzKGRlcCkpIHtcbiAgICAgICAgcmVzb2x2ZWQuYWRkKGRlcCk7XG4gICAgICAgIHF1ZXVlLnB1c2goZGVwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzb2x2ZWQ7XG59XG5cbi8vIOKUgOKUgCBMZXZlbCAxOiBjbGFzcy1sZXZlbCBwdXJnZSArIGtleWZyYW1lcyArIGZvbnQtZmFjZSArIGVsZW1lbnQgc2VsZWN0b3JzIOKUgOKUgOKUgFxuXG4vKiogVW5lc2NhcGUgQ1NTIGlkZW50aWZpZXJzOiBgaWNvbi1cXFttZGktLWNvZ1xcXWAg4oaSIGBpY29uLVttZGktLWNvZ11gICovXG5mdW5jdGlvbiB1bmVzY2FwZUNzcyhzOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcy5yZXBsYWNlKC9cXFxcKC4pL2csIFwiJDFcIik7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RDbGFzc2VzRnJvbVNlbGVjdG9yKHNlbGVjdG9yOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIC8vIE1hdGNoIGNsYXNzIHNlbGVjdG9ycyBpbmNsdWRpbmcgQ1NTIGVzY2FwZSBzZXF1ZW5jZXMgKGUuZy4gLmljb24tXFxbbWRpLS1jb2dcXF0pXG4gIGNvbnN0IG1hdGNoZXMgPSBzZWxlY3Rvci5tYXRjaEFsbCgvXFwuKFthLXpBLVpfLV0oPzpbYS16QS1aMC05Xy1dfFxcXFxbXlxcc10pKikvZyk7XG4gIHJldHVybiBbLi4ubWF0Y2hlc10ubWFwKChtKSA9PiB1bmVzY2FwZUNzcyhtWzFdKSk7XG59XG5cbi8vIEVsZW1lbnRzIHRoYXQgYXJlIGFsd2F5cyBrZXB0IChmdW5kYW1lbnRhbCByZXNldCB0YXJnZXRzKS5cbi8vIEV2ZXJ5dGhpbmcgZWxzZSAoc3ViLCBzdXAsIGltZywgc2VsZWN0LCB0ZXh0YXJlYSwgZXRjLikgaXMgc3RyaXBwZWRcbi8vIHVubGVzcyBpdCBhcHBlYXJzIGFsb25nc2lkZSBhIHNhZmVsaXN0ZWQgY2xhc3MuXG5jb25zdCBBTFdBWVNfS0VFUF9TRUxFQ1RPUlMgPSBuZXcgU2V0KFtcbiAgXCIqXCIsIFwiaHRtbFwiLCBcImJvZHlcIiwgXCI6cm9vdFwiLCBcIjo6YmVmb3JlXCIsIFwiOjphZnRlclwiLFxuICBcIjpiZWZvcmVcIiwgXCI6YWZ0ZXJcIiwgXCI6OmJhY2tkcm9wXCIsXG5dKTtcblxuLyoqXG4gKiBFeHRyYWN0IGFsbCBgW2RhdGEtc2xvdD1cIi4uLlwiXWAgYXR0cmlidXRlIHZhbHVlcyBmcm9tIGEgc2VsZWN0b3IuIEhhbmRsZXNcbiAqIHF1b3RlZCBhbmQgdW5xdW90ZWQgZm9ybXMgKExpZ2h0bmluZyBDU1Mgc3RyaXBzIHF1b3RlcyB3aGVuIHRoZSB2YWx1ZSBpcyBhXG4gKiBzaW1wbGUgaWRlbnRpZmllci1saWtlIHRva2VuLCBzbyBwb3N0LW1pbmlmeSBDU1Mgb2Z0ZW4gbG9va3MgbGlrZVxuICogYFtkYXRhLXNsb3Q9Y2hlY2tib3gtZGVmYXVsdC1pbmRpY2F0b3ItLWNoZWNrbWFya11gKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REYXRhU2xvdFZhbHVlcyhzZWw6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgdmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCByZSA9IC9cXFtkYXRhLXNsb3Q9KD86XCIoW15cIl0rKVwifCcoW14nXSspJ3woW15cXF1cXHNdKykpXFxdL2c7XG4gIGZvciAoY29uc3QgbSBvZiBzZWwubWF0Y2hBbGwocmUpKSB7XG4gICAgY29uc3QgdiA9IG1bMV0gPz8gbVsyXSA/PyBtWzNdO1xuICAgIGlmICh2KSB2YWx1ZXMucHVzaCh2KTtcbiAgfVxuICByZXR1cm4gdmFsdWVzO1xufVxuXG4vKipcbiAqIFRydWUgd2hlbiBldmVyeSBgW2RhdGEtc2xvdD1cIlhcIl1gIGluIGBzZWxgIGJlbG9uZ3MgdG8gYSB1c2VkIGNvbXBvbmVudCDigJRcbiAqIFggbWF0Y2hlcyBvbmUgb2YgYHVzZWRCZW1Sb290c2AgYXMgZXhhY3QsIG9yIGFzIGByb290LWAsIGByb290X19gLCBgcm9vdC0tYFxuICogcHJlZml4LiBSZXR1cm5zIGZhbHNlIHdoZW4gdGhlIHNlbGVjdG9yIGhhcyBubyBgW2RhdGEtc2xvdF1gIGF0IGFsbFxuICogKGNhbGxlciBkZWNpZGVzIHZpYSBvdGhlciBoZXVyaXN0aWNzKSBvciB3aGVuIGFueSBzbG90IGRvZXNuJ3QgbWF0Y2guXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRhU2xvdHNNYXRjaFVzZWRSb290cyhzZWw6IHN0cmluZywgdXNlZEJlbVJvb3RzOiBTZXQ8c3RyaW5nPik6IGJvb2xlYW4ge1xuICBjb25zdCBzbG90cyA9IGV4dHJhY3REYXRhU2xvdFZhbHVlcyhzZWwpO1xuICBpZiAoc2xvdHMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gIGZvciAoY29uc3Qgc2xvdCBvZiBzbG90cykge1xuICAgIGxldCBtYXRjaGVkID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCByb290IG9mIHVzZWRCZW1Sb290cykge1xuICAgICAgaWYgKFxuICAgICAgICBzbG90ID09PSByb290IHx8XG4gICAgICAgIHNsb3Quc3RhcnRzV2l0aChgJHtyb290fS1gKSB8fFxuICAgICAgICBzbG90LnN0YXJ0c1dpdGgoYCR7cm9vdH1fX2ApIHx8XG4gICAgICAgIHNsb3Quc3RhcnRzV2l0aChgJHtyb290fS0tYClcbiAgICAgICkge1xuICAgICAgICBtYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghbWF0Y2hlZCkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNLZWVwYWJsZU5vbkNsYXNzU2VsZWN0b3IoXG4gIHNlbDogc3RyaW5nLFxuICB1c2VkQmVtUm9vdHM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpLFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHN0cmlwcGVkID0gc2VsLnRyaW0oKTtcblxuICAvLyBFeGFjdCBtYXRjaCBvbiBmdW5kYW1lbnRhbCBzZWxlY3RvcnNcbiAgZm9yIChjb25zdCBlbCBvZiBBTFdBWVNfS0VFUF9TRUxFQ1RPUlMpIHtcbiAgICBpZiAoc3RyaXBwZWQgPT09IGVsKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBbGxvdyBwc2V1ZG8tZWxlbWVudHMvY2xhc3NlcyBhdHRhY2hlZCB0byBmdW5kYW1lbnRhbCBzZWxlY3RvcnNcbiAgICAvLyBlLmcuICo6OmJlZm9yZSwgaHRtbDpub3QoW2RhdGEtdGhlbWVdKVxuICAgIGlmIChzdHJpcHBlZC5zdGFydHNXaXRoKGVsICsgXCI6XCIpIHx8IHN0cmlwcGVkLnN0YXJ0c1dpdGgoZWwgKyBcIltcIikgfHwgc3RyaXBwZWQuc3RhcnRzV2l0aChlbCArIFwiIFwiKSkgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBLZWVwIDpyb290IHdpdGggcHNldWRvL2F0dHIgKHRoZW1lIHNlbGVjdG9ycyBsaWtlIDpyb290Om5vdChbZGF0YS10aGVtZV0pKVxuICBpZiAoL146cm9vdC8udGVzdChzdHJpcHBlZCkpIHJldHVybiB0cnVlO1xuXG4gIC8vIEtlZXAgYXR0cmlidXRlLW9ubHkgc2VsZWN0b3JzIGxpa2UgW2RhdGEtdGhlbWU9ZGFya10g4oCUIHRoZW1lIHZhcmlhYmxlIGRlY2xhcmF0aW9uc1xuICBpZiAoL15cXFtkYXRhLXRoZW1lLy50ZXN0KHN0cmlwcGVkKSkgcmV0dXJuIHRydWU7XG5cbiAgLy8gS2VlcCBbaGlkZGVuXSByZXNldCBydWxlc1xuICBpZiAoL15cXFtoaWRkZW4vLnRlc3Qoc3RyaXBwZWQpKSByZXR1cm4gdHJ1ZTtcblxuICAvLyBLZWVwIHB1cmUgYXR0cmlidXRlLXNlbGVjdG9yIHJ1bGVzIHRoYXQgdGFyZ2V0IGEgY29tcG9uZW50LXNjb3BlZFxuICAvLyBbZGF0YS1zbG90PVwiPHJvb3Q+Li4uXCJdIHdoZW4gdGhlIG93bmluZyBjb21wb25lbnQgaXMgdXNlZCBieSB0aGUgY29uc3VtZXIuXG4gIC8vIFdpdGhvdXQgdGhpcywgYmFzZS1zdGF0ZSBydWxlcyBsaWtlXG4gIC8vICAgW2RhdGEtc2xvdD1cImNoZWNrYm94LWRlZmF1bHQtaW5kaWNhdG9yLS1jaGVja21hcmtcIl0geyBvcGFjaXR5OiAwOyAuLi4gfVxuICAvLyBnZXQgZHJvcHBlZCB3aGlsZSB0aGVpciBgZGF0YS1zZWxlY3RlZD10cnVlYCBjb3VudGVycGFydHMgc3Vydml2ZSwgbGVhdmluZ1xuICAvLyB0aGUgaW5kaWNhdG9yIGRyYXduIGF0IHJlc3QuXG4gIGlmIChkYXRhU2xvdHNNYXRjaFVzZWRSb290cyhzdHJpcHBlZCwgdXNlZEJlbVJvb3RzKSkgcmV0dXJuIHRydWU7XG5cbiAgLy8gRHJvcCBldmVyeXRoaW5nIGVsc2U6IDpob3N0LCA6d2hlcmUoc2VsZWN0Li4uKSwgZWxlbWVudCBzZWxlY3RvcnMgKHN1Yiwgc3VwLCBpbWcsIGV0Yy4pXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1cmdlQ2xhc3NlcyhcbiAgY3NzOiBzdHJpbmcsXG4gIGtpbGxMaXN0OiBTZXQ8c3RyaW5nPixcbiAgdXNlZEJlbVJvb3RzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHJvb3QgPSBwb3N0Y3NzLnBhcnNlKGNzcyk7XG5cbiAgLy8gUGFzcyAxOiByZW1vdmUgc2VsZWN0b3JzIHdoZXJlIEFMTCBjbGFzc2VzIGFyZSBvbiB0aGUga2lsbC1saXN0XG4gIC8vIChpLmUuIHRoZXkgYmVsb25nIGV4Y2x1c2l2ZWx5IHRvIHVudXNlZCBVSSBjb21wb25lbnRzKS5cbiAgLy8gQW55IHNlbGVjdG9yIHdpdGggZXZlbiBvbmUgY2xhc3MgTk9UIG9uIHRoZSBraWxsLWxpc3QgaXMga2VwdC5cbiAgcm9vdC53YWxrUnVsZXMoKHJ1bGUpID0+IHtcbiAgICBjb25zdCBzZWxlY3RvcnMgPSBydWxlLnNlbGVjdG9ycztcbiAgICBjb25zdCBrZXB0OiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBzZWwgb2Ygc2VsZWN0b3JzKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0gZXh0cmFjdENsYXNzZXNGcm9tU2VsZWN0b3Ioc2VsKTtcbiAgICAgIGlmIChjbGFzc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoaXNLZWVwYWJsZU5vbkNsYXNzU2VsZWN0b3Ioc2VsLCB1c2VkQmVtUm9vdHMpKSB7XG4gICAgICAgICAga2VwdC5wdXNoKHNlbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEtlZXAgaWYgQU5ZIGNsYXNzIGlzIG5vdCBvbiB0aGUga2lsbC1saXN0XG4gICAgICBpZiAoY2xhc3Nlcy5zb21lKChjKSA9PiAha2lsbExpc3QuaGFzKGMpKSkge1xuICAgICAgICBrZXB0LnB1c2goc2VsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoa2VwdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJ1bGUucmVtb3ZlKCk7XG4gICAgfSBlbHNlIGlmIChrZXB0Lmxlbmd0aCA8IHNlbGVjdG9ycy5sZW5ndGgpIHtcbiAgICAgIHJ1bGUuc2VsZWN0b3JzID0ga2VwdDtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFBhc3MgMjogY29sbGVjdCBhbmltYXRpb24gbmFtZXMgcmVmZXJlbmNlZCBieSBzdXJ2aXZpbmcgcnVsZXNcbiAgY29uc3QgdXNlZEtleWZyYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICByb290LndhbGtEZWNscygvXmFuaW1hdGlvbigtbmFtZSk/JC8sIChkZWNsKSA9PiB7XG4gICAgLy8gYW5pbWF0aW9uLW5hbWUgY2FuIGJlIGNvbW1hLXNlcGFyYXRlZFxuICAgIGZvciAoY29uc3QgcGFydCBvZiBkZWNsLnZhbHVlLnNwbGl0KFwiLFwiKSkge1xuICAgICAgY29uc3QgbmFtZSA9IHBhcnQudHJpbSgpLnNwbGl0KC9cXHMrLylbMF07XG4gICAgICBpZiAobmFtZSAmJiBuYW1lICE9PSBcIm5vbmVcIiAmJiBuYW1lICE9PSBcImluaXRpYWxcIiAmJiBuYW1lICE9PSBcImluaGVyaXRcIikge1xuICAgICAgICB1c2VkS2V5ZnJhbWVzLmFkZChuYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIFBhc3MgMzogcmVtb3ZlIHVudXNlZCBAa2V5ZnJhbWVzXG4gIHJvb3Qud2Fsa0F0UnVsZXMoXCJrZXlmcmFtZXNcIiwgKGF0UnVsZSkgPT4ge1xuICAgIGlmICghdXNlZEtleWZyYW1lcy5oYXMoYXRSdWxlLnBhcmFtcy50cmltKCkpKSB7XG4gICAgICBhdFJ1bGUucmVtb3ZlKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBQYXNzIDQ6IGNvbGxlY3QgZm9udCBmYW1pbGllcyByZWZlcmVuY2VkIGJ5IHN1cnZpdmluZyBydWxlc1xuICBjb25zdCB1c2VkRm9udHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcm9vdC53YWxrRGVjbHMoL15mb250KC1mYW1pbHkpPyQvLCAoZGVjbCkgPT4ge1xuICAgIC8vIEV4dHJhY3QgZm9udCBmYW1pbHkgbmFtZXMgKHJvdWdoIGJ1dCBjYXRjaGVzIGNvbW1vbiBwYXR0ZXJucylcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZGVjbC52YWx1ZS5zcGxpdChcIixcIikpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBwYXJ0LnRyaW0oKS5yZXBsYWNlKC9eW1wiJ118W1wiJ10kL2csIFwiXCIpO1xuICAgICAgaWYgKG5hbWUpIHVzZWRGb250cy5hZGQobmFtZSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBQYXNzIDU6IHJlbW92ZSB1bnVzZWQgQGZvbnQtZmFjZVxuICByb290LndhbGtBdFJ1bGVzKFwiZm9udC1mYWNlXCIsIChhdFJ1bGUpID0+IHtcbiAgICBsZXQgZmFtaWx5ID0gXCJcIjtcbiAgICBhdFJ1bGUud2Fsa0RlY2xzKFwiZm9udC1mYW1pbHlcIiwgKGRlY2wpID0+IHtcbiAgICAgIGZhbWlseSA9IGRlY2wudmFsdWUudHJpbSgpLnJlcGxhY2UoL15bXCInXXxbXCInXSQvZywgXCJcIik7XG4gICAgfSk7XG4gICAgaWYgKGZhbWlseSAmJiAhdXNlZEZvbnRzLmhhcyhmYW1pbHkpKSB7XG4gICAgICBhdFJ1bGUucmVtb3ZlKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBQYXNzIDY6IGNsZWFuIGVtcHR5IGF0LXJ1bGVzXG4gIGxldCBjbGVhbmVkID0gdHJ1ZTtcbiAgd2hpbGUgKGNsZWFuZWQpIHtcbiAgICBjbGVhbmVkID0gZmFsc2U7XG4gICAgcm9vdC53YWxrQXRSdWxlcygoYXRSdWxlKSA9PiB7XG4gICAgICBpZiAoYXRSdWxlLm5vZGVzICYmIGF0UnVsZS5ub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYXRSdWxlLnJlbW92ZSgpO1xuICAgICAgICBjbGVhbmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByb290LnRvU3RyaW5nKCk7XG59XG5cbi8vIOKUgOKUgCBMZXZlbCAyOiBhdHRyaWJ1dGUgcHVyZ2UgKHBvc3Rjc3MpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiBwdXJnZUF0dHJpYnV0ZXMoY3NzOiBzdHJpbmcsIGF0dHJTYWZlbGlzdDogU2V0PHN0cmluZz4pOiBzdHJpbmcge1xuICBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZShjc3MpO1xuXG4gIHJvb3Qud2Fsa1J1bGVzKChydWxlKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0b3JzID0gcnVsZS5zZWxlY3RvcnM7XG4gICAgY29uc3Qga2VwdDogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3Qgc2VsIG9mIHNlbGVjdG9ycykge1xuICAgICAgY29uc3QgYXR0ck1hdGNoZXMgPSBzZWwubWF0Y2hBbGwoL1xcWyhkYXRhLVthLXotXSt8YXJpYS1bYS16LV0rKT1cIihbXlwiXSspXCJcXF0vZyk7XG4gICAgICBsZXQgc2hvdWxkS2VlcCA9IHRydWU7XG5cbiAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgYXR0ck1hdGNoZXMpIHtcbiAgICAgICAgaWYgKG1hdGNoWzFdID09PSBcImRhdGEtc2xvdFwiKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgYXR0clNlbGVjdG9yID0gYFske21hdGNoWzFdfT1cIiR7bWF0Y2hbMl19XCJdYDtcbiAgICAgICAgaWYgKCFhdHRyU2FmZWxpc3QuaGFzKGF0dHJTZWxlY3RvcikpIHtcbiAgICAgICAgICBzaG91bGRLZWVwID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZEtlZXApIGtlcHQucHVzaChzZWwpO1xuICAgIH1cblxuICAgIGlmIChrZXB0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcnVsZS5yZW1vdmUoKTtcbiAgICB9IGVsc2UgaWYgKGtlcHQubGVuZ3RoIDwgc2VsZWN0b3JzLmxlbmd0aCkge1xuICAgICAgcnVsZS5zZWxlY3RvcnMgPSBrZXB0O1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJvb3QudG9TdHJpbmcoKTtcbn1cblxuLy8g4pSA4pSAIExldmVsIDM6IHVudXNlZCBDU1MgdmFyaWFibGUgY2xlYW51cCAocG9zdGNzcykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIGNsZWFuVW51c2VkVmFycyhjc3M6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBjaGFuZ2VkID0gdHJ1ZTtcbiAgbGV0IHJlc3VsdCA9IGNzcztcblxuICB3aGlsZSAoY2hhbmdlZCkge1xuICAgIGNoYW5nZWQgPSBmYWxzZTtcbiAgICBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZShyZXN1bHQpO1xuXG4gICAgY29uc3QgZGVjbGFyZWQgPSBuZXcgTWFwPHN0cmluZywgeyBydWxlOiBSdWxlIHwgQXRSdWxlOyBwcm9wOiBzdHJpbmcgfVtdPigpO1xuICAgIHJvb3Qud2Fsa0RlY2xzKC9eLS0vLCAoZGVjbCkgPT4ge1xuICAgICAgY29uc3QgZW50cmllcyA9IGRlY2xhcmVkLmdldChkZWNsLnByb3ApID8/IFtdO1xuICAgICAgZW50cmllcy5wdXNoKHsgcnVsZTogZGVjbC5wYXJlbnQgYXMgUnVsZSwgcHJvcDogZGVjbC5wcm9wIH0pO1xuICAgICAgZGVjbGFyZWQuc2V0KGRlY2wucHJvcCwgZW50cmllcyk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZWZlcmVuY2VkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgcm9vdC53YWxrRGVjbHMoKGRlY2wpID0+IHtcbiAgICAgIGNvbnN0IHJlZnMgPSBkZWNsLnZhbHVlLm1hdGNoQWxsKC92YXJcXChcXHMqKC0tW2EtekEtWjAtOV8tXSspL2cpO1xuICAgICAgZm9yIChjb25zdCByZWYgb2YgcmVmcykgcmVmZXJlbmNlZC5hZGQocmVmWzFdKTtcbiAgICB9KTtcblxuICAgIGZvciAoY29uc3QgW3Zhck5hbWUsIGVudHJpZXNdIG9mIGRlY2xhcmVkKSB7XG4gICAgICBpZiAoIXJlZmVyZW5jZWQuaGFzKHZhck5hbWUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgIGVudHJ5LnJ1bGUud2Fsa0RlY2xzKGVudHJ5LnByb3AsIChkZWNsKSA9PiB7XG4gICAgICAgICAgICBkZWNsLnJlbW92ZSgpO1xuICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByb290LndhbGtSdWxlcygocnVsZSkgPT4ge1xuICAgICAgaWYgKHJ1bGUubm9kZXMgJiYgcnVsZS5ub2Rlcy5sZW5ndGggPT09IDApIHJ1bGUucmVtb3ZlKCk7XG4gICAgfSk7XG4gICAgcm9vdC53YWxrQXRSdWxlcygoYXRSdWxlKSA9PiB7XG4gICAgICBpZiAoYXRSdWxlLm5vZGVzICYmIGF0UnVsZS5ub2Rlcy5sZW5ndGggPT09IDApIGF0UnVsZS5yZW1vdmUoKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdCA9IHJvb3QudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIOKUgOKUgCBNaW5pZmljYXRpb246IExpZ2h0bmluZyBDU1Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIG1pbmlmeShjc3M6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgY29kZSB9ID0gdHJhbnNmb3JtKHtcbiAgICBmaWxlbmFtZTogXCJwdXJnZWQuY3NzXCIsXG4gICAgY29kZTogQnVmZmVyLmZyb20oY3NzKSxcbiAgICBtaW5pZnk6IHRydWUsXG4gICAgZXJyb3JSZWNvdmVyeTogdHJ1ZSxcbiAgfSk7XG4gIHJldHVybiBjb2RlLnRvU3RyaW5nKCk7XG59XG5cbi8vIOKUgOKUgCBNYWluIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICBjb25zdCB7IGRpc3REaXIsIHNyY0RpciwgbWFuaWZlc3RQYXRoIH0gPSBwYXJzZUFyZ3MocHJvY2Vzcy5hcmd2KTtcblxuICAvLyAxLiBMb2FkIG1hbmlmZXN0XG4gIGNvbnN0IG1hbmlmZXN0OiBQdXJnZU1hbmlmZXN0ID0gSlNPTi5wYXJzZShcbiAgICBhd2FpdCBCdW4uZmlsZShtYW5pZmVzdFBhdGgpLnRleHQoKSxcbiAgKTtcbiAgY29uc3QgdG90YWxDb21wb25lbnRzID0gbmV3IFNldChPYmplY3Qua2V5cyhtYW5pZmVzdCkubWFwKGsgPT4gay5zcGxpdChcIi5cIilbMF0pKS5zaXplO1xuICBjb25zb2xlLmxvZyhgW2Nzcy1wdXJnZV0gTWFuaWZlc3QgbG9hZGVkOiAke09iamVjdC5rZXlzKG1hbmlmZXN0KS5sZW5ndGh9IGVudHJpZXMgKCR7dG90YWxDb21wb25lbnRzfSBjb21wb25lbnRzKWApO1xuXG4gIC8vIDIuIFNjYW4gY29uc3VtZXIgc291cmNlIGZvciBkaXJlY3RseSBpbXBvcnRlZCBjb21wb25lbnRzXG4gIGNvbnN0IGRpcmVjdEltcG9ydHMgPSBhd2FpdCBzY2FuSW1wb3J0ZWRDb21wb25lbnRzKHNyY0Rpcik7XG4gIGNvbnNvbGUubG9nKGBbY3NzLXB1cmdlXSBEaXJlY3QgaW1wb3J0cyBmcm9tIGFwcDogJHtkaXJlY3RJbXBvcnRzLnNpemV9IC8gJHt0b3RhbENvbXBvbmVudHN9YCk7XG5cbiAgLy8gMy4gUmVzb2x2ZSB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcyBmcm9tIG1hbmlmZXN0IGRlcHNcbiAgY29uc3QgZGVwR3JhcGggPSBidWlsZERlcEdyYXBoRnJvbU1hbmlmZXN0KG1hbmlmZXN0KTtcbiAgY29uc3QgaW1wb3J0ZWRDb21wb25lbnRzID0gcmVzb2x2ZVRyYW5zaXRpdmVEZXBzKGRpcmVjdEltcG9ydHMsIGRlcEdyYXBoKTtcbiAgY29uc3QgdHJhbnNpdGl2ZSA9IGltcG9ydGVkQ29tcG9uZW50cy5zaXplIC0gZGlyZWN0SW1wb3J0cy5zaXplO1xuICBjb25zb2xlLmxvZyhgW2Nzcy1wdXJnZV0gVHJhbnNpdGl2ZSBkZXBzOiArJHt0cmFuc2l0aXZlfSDihpIgJHtpbXBvcnRlZENvbXBvbmVudHMuc2l6ZX0gdG90YWwgdXNlZCBjb21wb25lbnRzYCk7XG5cbiAgLy8gNC4gQnVpbGQga2lsbC1saXN0IChjbGFzc2VzIGZyb20gY29tcG9uZW50cyBuZXZlciBpbXBvcnRlZCkgKyBhdHRyIHNhZmVsaXN0XG4gIGNvbnN0IHsga2lsbExpc3QsIHVzZWRCZW1Sb290cyB9ID0gYnVpbGRLaWxsTGlzdChtYW5pZmVzdCwgaW1wb3J0ZWRDb21wb25lbnRzKTtcbiAgY29uc29sZS5sb2coYFtjc3MtcHVyZ2VdIEtpbGwtbGlzdDogJHtraWxsTGlzdC5zaXplfSBjbGFzc2VzIGZyb20gJHt0b3RhbENvbXBvbmVudHMgLSBpbXBvcnRlZENvbXBvbmVudHMuc2l6ZX0gdW51c2VkIGNvbXBvbmVudHNgKTtcbiAgY29uc29sZS5sb2coYFtjc3MtcHVyZ2VdIFVzZWQgQkVNIHJvb3RzOiAke3VzZWRCZW1Sb290cy5zaXplfSAocHJlc2VydmVzIFtkYXRhLXNsb3RdIHJ1bGVzIGZvciB1c2VkIGNvbXBvbmVudHMpYCk7XG5cbiAgLy8gQWxzbyBzY2FuIGZvciBwcm9wLWxldmVsIGF0dHIgcHVyZ2luZ1xuICBjb25zdCB1c2FnZXMgPSBhd2FpdCBzY2FuQ29uc3VtZXJTb3VyY2Uoc3JjRGlyKTtcbiAgY29uc3QgeyBhdHRyU2FmZWxpc3QgfSA9IGJ1aWxkU2FmZWxpc3RzKHVzYWdlcywgbWFuaWZlc3QpO1xuXG4gIC8vIDQuIEdsb2IgQ1NTIGZpbGVzIGluIGRpc3RcbiAgY29uc3QgZ2xvYiA9IG5ldyBHbG9iKFwiKiovKi5jc3NcIik7XG4gIGxldCB0b3RhbEJlZm9yZSA9IDA7XG4gIGxldCB0b3RhbEFmdGVyID0gMDtcblxuICBmb3IgYXdhaXQgKGNvbnN0IHJlbFBhdGggb2YgZ2xvYi5zY2FuKHsgY3dkOiBkaXN0RGlyIH0pKSB7XG4gICAgY29uc3QgZnVsbFBhdGggPSBgJHtkaXN0RGlyfS8ke3JlbFBhdGh9YDtcbiAgICBjb25zdCBvcmlnaW5hbENzcyA9IGF3YWl0IEJ1bi5maWxlKGZ1bGxQYXRoKS50ZXh0KCk7XG4gICAgY29uc3Qgb3JpZ2luYWxTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgob3JpZ2luYWxDc3MsIFwidXRmLThcIik7XG4gICAgdG90YWxCZWZvcmUgKz0gb3JpZ2luYWxTaXplO1xuXG4gICAgY29uc29sZS5sb2coYFtjc3MtcHVyZ2VdIFByb2Nlc3NpbmcgJHtyZWxQYXRofSAoJHsob3JpZ2luYWxTaXplIC8gMTAyNCkudG9GaXhlZCgxKX0gS0IpYCk7XG5cbiAgICAvLyBMZXZlbCAxOiBjbGFzcy1sZXZlbCBwdXJnZSAodW51c2VkIGNvbXBvbmVudHMgb25seSlcbiAgICBsZXQgcHVyZ2VkQ3NzID0gcHVyZ2VDbGFzc2VzKG9yaWdpbmFsQ3NzLCBraWxsTGlzdCwgdXNlZEJlbVJvb3RzKTtcbiAgICBjb25zdCBhZnRlckwxID0gQnVmZmVyLmJ5dGVMZW5ndGgocHVyZ2VkQ3NzLCBcInV0Zi04XCIpO1xuICAgIGNvbnNvbGUubG9nKGBbY3NzLXB1cmdlXSAgIEwxIGNsYXNzIHB1cmdlOiAkeyhvcmlnaW5hbFNpemUgLyAxMDI0KS50b0ZpeGVkKDEpfSDihpIgJHsoYWZ0ZXJMMSAvIDEwMjQpLnRvRml4ZWQoMSl9IEtCYCk7XG5cbiAgICAvLyBMZXZlbCAyOiBhdHRyaWJ1dGUtbGV2ZWwgcHVyZ2VcbiAgICBwdXJnZWRDc3MgPSBwdXJnZUF0dHJpYnV0ZXMocHVyZ2VkQ3NzLCBhdHRyU2FmZWxpc3QpO1xuICAgIGNvbnN0IGFmdGVyTDIgPSBCdWZmZXIuYnl0ZUxlbmd0aChwdXJnZWRDc3MsIFwidXRmLThcIik7XG4gICAgY29uc29sZS5sb2coYFtjc3MtcHVyZ2VdICAgTDIgYXR0ciBwdXJnZTogJHsoYWZ0ZXJMMSAvIDEwMjQpLnRvRml4ZWQoMSl9IOKGkiAkeyhhZnRlckwyIC8gMTAyNCkudG9GaXhlZCgxKX0gS0JgKTtcblxuICAgIC8vIExldmVsIDM6IHVudXNlZCBDU1MgdmFyaWFibGUgY2xlYW51cFxuICAgIHB1cmdlZENzcyA9IGNsZWFuVW51c2VkVmFycyhwdXJnZWRDc3MpO1xuICAgIGNvbnN0IGFmdGVyTDMgPSBCdWZmZXIuYnl0ZUxlbmd0aChwdXJnZWRDc3MsIFwidXRmLThcIik7XG4gICAgY29uc29sZS5sb2coYFtjc3MtcHVyZ2VdICAgTDMgdmFyIGNsZWFudXA6IOKGkiAkeyhhZnRlckwzIC8gMTAyNCkudG9GaXhlZCgxKX0gS0JgKTtcblxuICAgIC8vIEZpbmFsOiBtaW5pZmljYXRpb24gdmlhIExpZ2h0bmluZyBDU1NcbiAgICBwdXJnZWRDc3MgPSBtaW5pZnkocHVyZ2VkQ3NzKTtcbiAgICBjb25zdCBmaW5hbFNpemUgPSBCdWZmZXIuYnl0ZUxlbmd0aChwdXJnZWRDc3MsIFwidXRmLThcIik7XG4gICAgdG90YWxBZnRlciArPSBmaW5hbFNpemU7XG4gICAgY29uc29sZS5sb2coYFtjc3MtcHVyZ2VdICAgTWluaWZ5IChsaWdodG5pbmdjc3MpOiDihpIgJHsoZmluYWxTaXplIC8gMTAyNCkudG9GaXhlZCgxKX0gS0JgKTtcbiAgICBjb25zb2xlLmxvZyhgW2Nzcy1wdXJnZV0gICBGaW5hbDogJHsob3JpZ2luYWxTaXplIC8gMTAyNCkudG9GaXhlZCgxKX0g4oaSICR7KGZpbmFsU2l6ZSAvIDEwMjQpLnRvRml4ZWQoMSl9IEtCICgkeygoMSAtIGZpbmFsU2l6ZSAvIG9yaWdpbmFsU2l6ZSkgKiAxMDApLnRvRml4ZWQoMSl9JSByZWR1Y3Rpb24pYCk7XG5cbiAgICBhd2FpdCBCdW4ud3JpdGUoZnVsbFBhdGgsIHB1cmdlZENzcyk7XG4gIH1cblxuICBjb25zb2xlLmxvZyhgXFxuW2Nzcy1wdXJnZV0gVG90YWw6ICR7KHRvdGFsQmVmb3JlIC8gMTAyNCkudG9GaXhlZCgxKX0g4oaSICR7KHRvdGFsQWZ0ZXIgLyAxMDI0KS50b0ZpeGVkKDEpfSBLQiAoJHsoKDEgLSB0b3RhbEFmdGVyIC8gdG90YWxCZWZvcmUpICogMTAwKS50b0ZpeGVkKDEpfSUgcmVkdWN0aW9uKWApO1xufVxuXG5pZiAoaW1wb3J0Lm1ldGEubWFpbikge1xuICBtYWluKCk7XG59XG4iLAogICAgImltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3QgeyB0cmFuc2Zvcm0sIHRyYW5zZm9ybVN0eWxlQXR0cmlidXRlLCBidW5kbGUsIGJ1bmRsZUFzeW5jLCBicm93c2Vyc2xpc3RUb1RhcmdldHMsIGNvbXBvc2VWaXNpdG9ycywgRmVhdHVyZXMgfSA9IGluZGV4O1xuZXhwb3J0IHsgdHJhbnNmb3JtLCB0cmFuc2Zvcm1TdHlsZUF0dHJpYnV0ZSwgYnVuZGxlLCBidW5kbGVBc3luYywgYnJvd3NlcnNsaXN0VG9UYXJnZXRzLCBjb21wb3NlVmlzaXRvcnMsIEZlYXR1cmVzIH07XG4iLAogICAgIi8qKlxuICogQ29uc3VtZXItc2lkZSBKU1ggc2Nhbm5lci5cbiAqXG4gKiBXYWxrcyBhIGNvbnN1bWVyJ3Mgc291cmNlIHRyZWUsIGZpbmRzIGNvbXBvbmVudCBpbXBvcnRzIGZyb20gQHBhdGhzY2FsZS91aSxcbiAqIGNvbGxlY3RzIHByb3AgdmFsdWVzLCBhbmQgY3Jvc3MtcmVmZXJlbmNlcyB3aXRoIHRoZSBwdXJnZSBtYW5pZmVzdCB0byBidWlsZFxuICogTGV2ZWwgMSAoY2xhc3MpIGFuZCBMZXZlbCAyIChhdHRyaWJ1dGUpIHNhZmVsaXN0cy5cbiAqXG4gKiBVc2FnZTogIGJ1biBydW4gc3JjL3NjYW4tY29uc3VtZXIudHMgPGNvbnN1bWVyLXNyYy1kaXI+IDxwdXJnZS1tYW5pZmVzdC5qc29uPlxuICovXG5cbmltcG9ydCBzd2MgZnJvbSBcIkBzd2MvY29yZVwiO1xuaW1wb3J0IHsgR2xvYiB9IGZyb20gXCJidW5cIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbi8vIOKUgOKUgCBUeXBlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuaW50ZXJmYWNlIENvbXBvbmVudE1hbmlmZXN0IHtcbiAgY2xhc3Nlczoge1xuICAgIGFsd2F5czogc3RyaW5nW107XG4gICAgYnlQcm9wOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPj47XG4gIH07XG4gIGF0dHJzPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG4gIGRlcHM/OiBzdHJpbmdbXTtcbn1cblxudHlwZSBQdXJnZU1hbmlmZXN0ID0gUmVjb3JkPHN0cmluZywgQ29tcG9uZW50TWFuaWZlc3Q+O1xuXG4vKiogV2hhdCB3ZSBjb2xsZWN0IHBlciBjb21wb25lbnQgdXNhZ2UgZnJvbSBKU1ggKi9cbmludGVyZmFjZSBQcm9wVXNhZ2Uge1xuICBjb21wb25lbnQ6IHN0cmluZztcbiAgcHJvcHM6IE1hcDxzdHJpbmcsIHN0cmluZyB8IFwiRFlOQU1JQ1wiPjsgLy8gcHJvcE5hbWUg4oaSIGxpdGVyYWwgdmFsdWUgb3IgRFlOQU1JQ1xuICBib29sZWFuUHJvcHM6IFNldDxzdHJpbmc+OyAvLyBwcm9wcyBwcmVzZW50IHdpdGhvdXQgYSB2YWx1ZSAodHJ1dGh5KVxuICBoYXNTcHJlYWQ6IGJvb2xlYW47XG59XG5cbi8vIOKUgOKUgCBBU1Qgd2Fsa2VyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiB3YWxrQVNUKG5vZGU6IGFueSwgdmlzaXRvcjogKG5vZGU6IGFueSkgPT4gdm9pZCkge1xuICBpZiAoIW5vZGUgfHwgdHlwZW9mIG5vZGUgIT09IFwib2JqZWN0XCIpIHJldHVybjtcbiAgdmlzaXRvcihub2RlKTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobm9kZSkpIHtcbiAgICBpZiAoa2V5ID09PSBcInNwYW5cIikgY29udGludWU7XG4gICAgY29uc3QgdmFsID0gbm9kZVtrZXldO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWwpIHdhbGtBU1QoaXRlbSwgdmlzaXRvcik7XG4gICAgfSBlbHNlIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgd2Fsa0FTVCh2YWwsIHZpc2l0b3IpO1xuICAgIH1cbiAgfVxufVxuXG4vKiogRXh0cmFjdCBAcGF0aHNjYWxlL3VpIGltcG9ydHMgZnJvbSBhIHBhcnNlZCBtb2R1bGUgKi9cbmZ1bmN0aW9uIGV4dHJhY3RVSUltcG9ydHMoYXN0OiBhbnkpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgaW1wb3J0cyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGZvciAoY29uc3Qgbm9kZSBvZiBhc3QuYm9keSkge1xuICAgIGlmIChub2RlLnR5cGUgIT09IFwiSW1wb3J0RGVjbGFyYXRpb25cIikgY29udGludWU7XG4gICAgY29uc3Qgc3JjID0gbm9kZS5zb3VyY2U/LnZhbHVlIGFzIHN0cmluZztcbiAgICBpZiAoIXNyYyB8fCAhc3JjLnN0YXJ0c1dpdGgoXCJAcGF0aHNjYWxlL3VpXCIpKSBjb250aW51ZTtcblxuICAgIGZvciAoY29uc3Qgc3BlYyBvZiBub2RlLnNwZWNpZmllcnMpIHtcbiAgICAgIGlmIChzcGVjLnR5cGUgPT09IFwiSW1wb3J0U3BlY2lmaWVyXCIpIHtcbiAgICAgICAgY29uc3QgaW1wb3J0ZWQgPSBzcGVjLmltcG9ydGVkPy52YWx1ZSA/PyBzcGVjLmxvY2FsPy52YWx1ZTtcbiAgICAgICAgY29uc3QgbG9jYWwgPSBzcGVjLmxvY2FsPy52YWx1ZTtcbiAgICAgICAgaWYgKGxvY2FsICYmIGltcG9ydGVkKSBpbXBvcnRzLnNldChsb2NhbCwgaW1wb3J0ZWQpO1xuICAgICAgfSBlbHNlIGlmIChzcGVjLnR5cGUgPT09IFwiSW1wb3J0RGVmYXVsdFNwZWNpZmllclwiKSB7XG4gICAgICAgIGNvbnN0IGxvY2FsID0gc3BlYy5sb2NhbD8udmFsdWU7XG4gICAgICAgIGlmIChsb2NhbCkgaW1wb3J0cy5zZXQobG9jYWwsIGxvY2FsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGltcG9ydHM7XG59XG5cbi8qKiBFeHRyYWN0IEpTWCB1c2FnZXMgb2YgVUkgY29tcG9uZW50cyAqL1xuZnVuY3Rpb24gZXh0cmFjdEpTWFVzYWdlcyhhc3Q6IGFueSwgdWlDb21wb25lbnRzOiBNYXA8c3RyaW5nLCBzdHJpbmc+KTogUHJvcFVzYWdlW10ge1xuICBjb25zdCB1c2FnZXM6IFByb3BVc2FnZVtdID0gW107XG5cbiAgd2Fsa0FTVChhc3QsIChub2RlKSA9PiB7XG4gICAgaWYgKG5vZGUudHlwZSAhPT0gXCJKU1hPcGVuaW5nRWxlbWVudFwiKSByZXR1cm47XG5cbiAgICBsZXQgZWxlbWVudE5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGxldCByb290TmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAobm9kZS5uYW1lPy50eXBlID09PSBcIklkZW50aWZpZXJcIikge1xuICAgICAgZWxlbWVudE5hbWUgPSBub2RlLm5hbWUudmFsdWU7XG4gICAgICByb290TmFtZSA9IGVsZW1lbnROYW1lO1xuICAgIH0gZWxzZSBpZiAobm9kZS5uYW1lPy50eXBlID09PSBcIkpTWE1lbWJlckV4cHJlc3Npb25cIikge1xuICAgICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgICBsZXQgY3Vyc29yID0gbm9kZS5uYW1lO1xuICAgICAgd2hpbGUgKGN1cnNvcj8udHlwZSA9PT0gXCJKU1hNZW1iZXJFeHByZXNzaW9uXCIpIHtcbiAgICAgICAgcGFydHMudW5zaGlmdChjdXJzb3IucHJvcGVydHk/LnZhbHVlKTtcbiAgICAgICAgY3Vyc29yID0gY3Vyc29yLm9iamVjdDtcbiAgICAgIH1cbiAgICAgIGlmIChjdXJzb3I/LnR5cGUgPT09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgICAgIHBhcnRzLnVuc2hpZnQoY3Vyc29yLnZhbHVlKTtcbiAgICAgICAgcm9vdE5hbWUgPSBjdXJzb3IudmFsdWU7XG4gICAgICB9XG4gICAgICBlbGVtZW50TmFtZSA9IHBhcnRzLmpvaW4oXCIuXCIpO1xuICAgIH1cblxuICAgIGlmICghcm9vdE5hbWUgfHwgIXVpQ29tcG9uZW50cy5oYXMocm9vdE5hbWUpKSByZXR1cm47XG5cbiAgICBjb25zdCB1c2FnZTogUHJvcFVzYWdlID0ge1xuICAgICAgY29tcG9uZW50OiBlbGVtZW50TmFtZSEsXG4gICAgICBwcm9wczogbmV3IE1hcCgpLFxuICAgICAgYm9vbGVhblByb3BzOiBuZXcgU2V0KCksXG4gICAgICBoYXNTcHJlYWQ6IGZhbHNlLFxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IGF0dHIgb2Ygbm9kZS5hdHRyaWJ1dGVzIHx8IFtdKSB7XG4gICAgICBpZiAoYXR0ci50eXBlID09PSBcIlNwcmVhZEVsZW1lbnRcIiB8fCBhdHRyLnR5cGUgPT09IFwiSlNYU3ByZWFkQXR0cmlidXRlXCIpIHtcbiAgICAgICAgdXNhZ2UuaGFzU3ByZWFkID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoYXR0ci50eXBlICE9PSBcIkpTWEF0dHJpYnV0ZVwiKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgcHJvcE5hbWUgPSBhdHRyLm5hbWU/LnZhbHVlO1xuICAgICAgaWYgKCFwcm9wTmFtZSkgY29udGludWU7XG5cbiAgICAgIGlmICghYXR0ci52YWx1ZSkge1xuICAgICAgICB1c2FnZS5ib29sZWFuUHJvcHMuYWRkKHByb3BOYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoYXR0ci52YWx1ZS50eXBlID09PSBcIlN0cmluZ0xpdGVyYWxcIikge1xuICAgICAgICB1c2FnZS5wcm9wcy5zZXQocHJvcE5hbWUsIGF0dHIudmFsdWUudmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXNhZ2UucHJvcHMuc2V0KHByb3BOYW1lLCBcIkRZTkFNSUNcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXNhZ2VzLnB1c2godXNhZ2UpO1xuICB9KTtcblxuICByZXR1cm4gdXNhZ2VzO1xufVxuXG4vLyDilIDilIAgU2FmZWxpc3QgYnVpbGRlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuaW50ZXJmYWNlIFNhZmVsaXN0cyB7XG4gIGNsYXNzU2FmZWxpc3Q6IFNldDxzdHJpbmc+O1xuICBhdHRyU2FmZWxpc3Q6IFNldDxzdHJpbmc+O1xufVxuXG5mdW5jdGlvbiBidWlsZFNhZmVsaXN0cyhcbiAgYWxsVXNhZ2VzOiBQcm9wVXNhZ2VbXSxcbiAgbWFuaWZlc3Q6IFB1cmdlTWFuaWZlc3QsXG4pOiBTYWZlbGlzdHMge1xuICBjb25zdCBjbGFzc1NhZmVsaXN0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IGF0dHJTYWZlbGlzdCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGNvbnN0IGNvbXBvbmVudFVzYWdlcyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9wVXNhZ2VbXT4oKTtcbiAgZm9yIChjb25zdCB1c2FnZSBvZiBhbGxVc2FnZXMpIHtcbiAgICBjb25zdCBleGlzdGluZyA9IGNvbXBvbmVudFVzYWdlcy5nZXQodXNhZ2UuY29tcG9uZW50KSA/PyBbXTtcbiAgICBleGlzdGluZy5wdXNoKHVzYWdlKTtcbiAgICBjb21wb25lbnRVc2FnZXMuc2V0KHVzYWdlLmNvbXBvbmVudCwgZXhpc3RpbmcpO1xuICB9XG5cbiAgZm9yIChjb25zdCBbZW50cnlOYW1lLCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXMobWFuaWZlc3QpKSB7XG4gICAgY29uc3QgbWF0Y2hpbmdVc2FnZXMgPSBmaW5kTWF0Y2hpbmdVc2FnZXMoZW50cnlOYW1lLCBjb21wb25lbnRVc2FnZXMpO1xuXG4gICAgaWYgKG1hdGNoaW5nVXNhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjbHMgb2YgZW50cnkuY2xhc3Nlcy5hbHdheXMpIHtcbiAgICAgIGNsYXNzU2FmZWxpc3QuYWRkKGNscyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbcHJvcE9yU2xvdCwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGVudHJ5LmNsYXNzZXMuYnlQcm9wKSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGlmIChpc1Byb3BVc2VkKHByb3BPclNsb3QsIG1hdGNoaW5nVXNhZ2VzKSkge1xuICAgICAgICAgIGZvciAoY29uc3QgY2xzIG9mIHZhbHVlKSBjbGFzc1NhZmVsaXN0LmFkZChjbHMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB1c2VkVmFsdWVzID0gZ2V0VXNlZEVudW1WYWx1ZXMocHJvcE9yU2xvdCwgbWF0Y2hpbmdVc2FnZXMpO1xuICAgICAgICBpZiAodXNlZFZhbHVlcyA9PT0gXCJBTExcIikge1xuICAgICAgICAgIGZvciAoY29uc3QgY2xhc3NlcyBvZiBPYmplY3QudmFsdWVzKHZhbHVlKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjbHMgb2YgY2xhc3NlcykgY2xhc3NTYWZlbGlzdC5hZGQoY2xzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgdXNlZFZhbHVlcykge1xuICAgICAgICAgICAgaWYgKHZhbHVlW3ZhbF0pIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBjbHMgb2YgdmFsdWVbdmFsXSkgY2xhc3NTYWZlbGlzdC5hZGQoY2xzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW50cnkuYXR0cnMpIHtcbiAgICAgIGZvciAoY29uc3QgW3Byb3BOYW1lLCBhdHRyTWFwXSBvZiBPYmplY3QuZW50cmllcyhlbnRyeS5hdHRycykpIHtcbiAgICAgICAgaWYgKGlzUHJvcFVzZWQocHJvcE5hbWUsIG1hdGNoaW5nVXNhZ2VzKSkge1xuICAgICAgICAgIGZvciAoY29uc3QgW2F0dHIsIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0ck1hcCkpIHtcbiAgICAgICAgICAgIGF0dHJTYWZlbGlzdC5hZGQoYCR7YXR0cn09JHt2YWx9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgY2xhc3NTYWZlbGlzdCwgYXR0clNhZmVsaXN0IH07XG59XG5cbmZ1bmN0aW9uIGZpbmRNYXRjaGluZ1VzYWdlcyhcbiAgZW50cnlOYW1lOiBzdHJpbmcsXG4gIHVzYWdlTWFwOiBNYXA8c3RyaW5nLCBQcm9wVXNhZ2VbXT4sXG4pOiBQcm9wVXNhZ2VbXSB7XG4gIGlmICh1c2FnZU1hcC5oYXMoZW50cnlOYW1lKSkge1xuICAgIHJldHVybiB1c2FnZU1hcC5nZXQoZW50cnlOYW1lKSE7XG4gIH1cblxuICBjb25zdCByZXN1bHRzOiBQcm9wVXNhZ2VbXSA9IFtdO1xuICBmb3IgKGNvbnN0IFt1c2FnZU5hbWUsIHVzYWdlc10gb2YgdXNhZ2VNYXApIHtcbiAgICBpZiAodXNhZ2VOYW1lID09PSBlbnRyeU5hbWUpIHtcbiAgICAgIHJlc3VsdHMucHVzaCguLi51c2FnZXMpO1xuICAgIH1cbiAgICBpZiAoZW50cnlOYW1lLmluY2x1ZGVzKFwiLlwiKSkge1xuICAgICAgY29uc3QgW2ZhbWlseSwgcGFydF0gPSBlbnRyeU5hbWUuc3BsaXQoXCIuXCIpO1xuICAgICAgaWYgKHBhcnQgPT09IGZhbWlseSAmJiB1c2FnZU5hbWUgPT09IGZhbWlseSkge1xuICAgICAgICByZXN1bHRzLnB1c2goLi4udXNhZ2VzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIGlzUHJvcFVzZWQocHJvcE5hbWU6IHN0cmluZywgdXNhZ2VzOiBQcm9wVXNhZ2VbXSk6IGJvb2xlYW4ge1xuICBmb3IgKGNvbnN0IHVzYWdlIG9mIHVzYWdlcykge1xuICAgIGlmICh1c2FnZS5oYXNTcHJlYWQpIHJldHVybiB0cnVlO1xuICAgIGlmICh1c2FnZS5ib29sZWFuUHJvcHMuaGFzKHByb3BOYW1lKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHVzYWdlLnByb3BzLmhhcyhwcm9wTmFtZSkpIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0VXNlZEVudW1WYWx1ZXMoc2xvdE5hbWU6IHN0cmluZywgdXNhZ2VzOiBQcm9wVXNhZ2VbXSk6IFNldDxzdHJpbmc+IHwgXCJBTExcIiB7XG4gIGNvbnN0IHZhbHVlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IHVzYWdlIG9mIHVzYWdlcykge1xuICAgIGlmICh1c2FnZS5oYXNTcHJlYWQpIHJldHVybiBcIkFMTFwiO1xuICAgIGNvbnN0IHZhbCA9IHVzYWdlLnByb3BzLmdldChzbG90TmFtZSk7XG4gICAgaWYgKHZhbCA9PT0gXCJEWU5BTUlDXCIpIHJldHVybiBcIkFMTFwiO1xuICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCkgdmFsdWVzLmFkZCh2YWwpO1xuICAgIGlmICh1c2FnZS5ib29sZWFuUHJvcHMuaGFzKHNsb3ROYW1lKSkgcmV0dXJuIFwiQUxMXCI7XG4gIH1cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuLy8g4pSA4pSAIENvbnN1bWVyIHNvdXJjZSBzY2FubmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuYXN5bmMgZnVuY3Rpb24gc2NhbkNvbnN1bWVyU291cmNlKHNyY0Rpcjogc3RyaW5nKTogUHJvbWlzZTxQcm9wVXNhZ2VbXT4ge1xuICBjb25zdCBhbGxVc2FnZXM6IFByb3BVc2FnZVtdID0gW107XG4gIGNvbnN0IGdsb2IgPSBuZXcgR2xvYihcIioqLyoue3RzeCx0cyxqc3gsanN9XCIpO1xuXG4gIGZvciBhd2FpdCAoY29uc3QgcmVsUGF0aCBvZiBnbG9iLnNjYW4oeyBjd2Q6IHNyY0RpciB9KSkge1xuICAgIGlmIChyZWxQYXRoLmluY2x1ZGVzKFwibm9kZV9tb2R1bGVzXCIpKSBjb250aW51ZTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihzcmNEaXIsIHJlbFBhdGgpO1xuICAgIGNvbnN0IGNvZGUgPSBhd2FpdCBCdW4uZmlsZShmdWxsUGF0aCkudGV4dCgpO1xuICAgIGlmICghY29kZS5pbmNsdWRlcyhcIkBwYXRoc2NhbGUvdWlcIikpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgaXNUc3ggPSAvXFwuW3RqXXN4JC8udGVzdChyZWxQYXRoKTtcbiAgICBjb25zdCBhc3QgPSBhd2FpdCBzd2MucGFyc2UoY29kZSwgeyBzeW50YXg6IFwidHlwZXNjcmlwdFwiLCB0c3g6IGlzVHN4IH0pO1xuICAgIGNvbnN0IHVpSW1wb3J0cyA9IGV4dHJhY3RVSUltcG9ydHMoYXN0KTtcbiAgICBpZiAodWlJbXBvcnRzLnNpemUgPT09IDApIGNvbnRpbnVlO1xuXG4gICAgYWxsVXNhZ2VzLnB1c2goLi4uZXh0cmFjdEpTWFVzYWdlcyhhc3QsIHVpSW1wb3J0cykpO1xuICB9XG5cbiAgcmV0dXJuIGFsbFVzYWdlcztcbn1cblxuLy8g4pSA4pSAIE1haW4gKHN0YW5kYWxvbmUgQ0xJKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3QgW3NyY0RpciwgbWFuaWZlc3RQYXRoXSA9IHByb2Nlc3MuYXJndi5zbGljZSgyKTtcbiAgaWYgKCFzcmNEaXIgfHwgIW1hbmlmZXN0UGF0aCkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJVc2FnZTogYnVuIHJ1biBzcmMvc2Nhbi1jb25zdW1lci50cyA8Y29uc3VtZXItc3JjLWRpcj4gPHB1cmdlLW1hbmlmZXN0Lmpzb24+XCIpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIGNvbnN0IG1hbmlmZXN0OiBQdXJnZU1hbmlmZXN0ID0gSlNPTi5wYXJzZShcbiAgICBhd2FpdCBCdW4uZmlsZShtYW5pZmVzdFBhdGgpLnRleHQoKSxcbiAgKTtcbiAgY29uc3QgcmVzb2x2ZWRTcmMgPSBwYXRoLnJlc29sdmUoc3JjRGlyKTtcbiAgY29uc29sZS5sb2coYFNjYW5uaW5nICR7cmVzb2x2ZWRTcmN9IGZvciBAcGF0aHNjYWxlL3VpIGNvbXBvbmVudCB1c2FnZeKApmApO1xuICBjb25zb2xlLmxvZyhgTWFuaWZlc3Q6ICR7T2JqZWN0LmtleXMobWFuaWZlc3QpLmxlbmd0aH0gZW50cmllc1xcbmApO1xuXG4gIGNvbnN0IHVzYWdlcyA9IGF3YWl0IHNjYW5Db25zdW1lclNvdXJjZShyZXNvbHZlZFNyYyk7XG4gIGNvbnN0IHsgY2xhc3NTYWZlbGlzdCwgYXR0clNhZmVsaXN0IH0gPSBidWlsZFNhZmVsaXN0cyh1c2FnZXMsIG1hbmlmZXN0KTtcblxuICBjb25zb2xlLmxvZyhcIj09PSBDbGFzcyBTYWZlbGlzdCA9PT1cIik7XG4gIGZvciAoY29uc3QgY2xzIG9mIFsuLi5jbGFzc1NhZmVsaXN0XS5zb3J0KCkpIHtcbiAgICBjb25zb2xlLmxvZyhgICAke2Nsc31gKTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKGBcXG49PT0gQXR0cmlidXRlIFNhZmVsaXN0ID09PWApO1xuICBmb3IgKGNvbnN0IGF0dHIgb2YgWy4uLmF0dHJTYWZlbGlzdF0uc29ydCgpKSB7XG4gICAgY29uc29sZS5sb2coYCAgWyR7YXR0cn1dYCk7XG4gIH1cblxuICBjb25zb2xlLmxvZyhgXFxuVG90YWw6ICR7Y2xhc3NTYWZlbGlzdC5zaXplfSBjbGFzc2VzLCAke2F0dHJTYWZlbGlzdC5zaXplfSBhdHRyaWJ1dGUgc2VsZWN0b3JzYCk7XG59XG5cbi8vIE9ubHkgcnVuIENMSSB3aGVuIGludm9rZWQgZGlyZWN0bHkgKG5vdCB3aGVuIGltcG9ydGVkIGFzIGEgbW9kdWxlKVxuaWYgKGltcG9ydC5tZXRhLm1haW4pIHtcbiAgbWFpbigpO1xufVxuXG5leHBvcnQgeyBleHRyYWN0VUlJbXBvcnRzLCBleHRyYWN0SlNYVXNhZ2VzLCBidWlsZFNhZmVsaXN0cywgc2NhbkNvbnN1bWVyU291cmNlIH07XG5leHBvcnQgdHlwZSB7IFByb3BVc2FnZSwgUHVyZ2VNYW5pZmVzdCwgQ29tcG9uZW50TWFuaWZlc3QsIFNhZmVsaXN0cyB9O1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFLQSxJQUFNLFVBQVUsTUFBTSxRQUFRLGFBQWE7QUFBQSxFQUUzQyxJQUFJLFNBQVM7QUFBQSxFQUNiLElBQU0sWUFBWSxNQUFNO0FBQUEsSUFDdEIsSUFBSSxDQUFDLFFBQVE7QUFBQSxNQUVYLElBQUksUUFBUSxLQUFLLFFBQVEsUUFBUTtBQUFBLFFBQy9CLE1BQU0sT0FBTyxRQUFRLE9BQU87QUFBQSxRQUM1QixRQUFRLE9BQU8saUJBQWlCO0FBQUEsUUFDaEMsU0FBUyxRQUFRLE9BQU8sVUFBVTtBQUFBLFFBQ2xDLFFBQVEsT0FBTyxpQkFBaUI7QUFBQSxNQUNsQyxFQUFPO0FBQUEsUUFDTCxTQUFTLENBQUM7QUFBQTtBQUFBLElBRWQ7QUFBQSxJQUNBLE9BQU87QUFBQTtBQUFBLEVBR1QsT0FBTyxVQUFVLEVBQUUsU0FBUyxVQUFVO0FBQUE7Ozs7RUNsQnRDLElBQU07QUFBQSxFQUVOLElBQU0sV0FBVztBQUFBLEVB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pathscale/rsbuild-plugin-ui-css-purge",
3
- "version": "0.9.0",
3
+ "version": "0.9.2",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -14,7 +14,10 @@
14
14
  "rsbuild-plugin-ui-css-purge": "dist/postbuild-purge.js",
15
15
  "generate-manifest": "src/generate-manifest.ts"
16
16
  },
17
- "files": ["dist", "src/generate-manifest.ts"],
17
+ "files": [
18
+ "dist",
19
+ "src/generate-manifest.ts"
20
+ ],
18
21
  "dependencies": {
19
22
  "@swc/core": "^1.15.24",
20
23
  "lightningcss": "^1.32.0",