@payloadcms/richtext-lexical 0.1.0-beta.1 → 0.1.0-beta.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.
Files changed (46) hide show
  1. package/dist/field/features/Blocks/afterReadPromise.d.ts +5 -0
  2. package/dist/field/features/Blocks/afterReadPromise.d.ts.map +1 -0
  3. package/dist/field/features/Blocks/afterReadPromise.js +52 -0
  4. package/dist/field/features/Blocks/component/BlockContent.d.ts +14 -0
  5. package/dist/field/features/Blocks/component/BlockContent.d.ts.map +1 -0
  6. package/dist/field/features/Blocks/component/BlockContent.js +163 -0
  7. package/dist/field/features/Blocks/component/index.d.ts.map +1 -1
  8. package/dist/field/features/Blocks/component/index.js +21 -104
  9. package/dist/field/features/Blocks/component/index.scss +24 -1
  10. package/dist/field/features/Blocks/drawer/index.d.ts.map +1 -1
  11. package/dist/field/features/Blocks/drawer/index.js +9 -7
  12. package/dist/field/features/Blocks/index.d.ts.map +1 -1
  13. package/dist/field/features/Blocks/index.js +36 -18
  14. package/dist/field/features/Blocks/nodes/BlocksNode.d.ts +5 -4
  15. package/dist/field/features/Blocks/nodes/BlocksNode.d.ts.map +1 -1
  16. package/dist/field/features/Blocks/nodes/BlocksNode.js +1 -1
  17. package/dist/field/features/Blocks/plugin/index.js +3 -3
  18. package/dist/field/features/Link/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
  19. package/dist/field/features/Link/plugins/floatingLinkEditor/LinkEditor/index.js +9 -4
  20. package/dist/field/features/Link/plugins/floatingLinkEditor/index.scss +2 -2
  21. package/dist/field/features/Relationship/nodes/components/RelationshipComponent.d.ts.map +1 -1
  22. package/dist/field/features/Relationship/nodes/components/RelationshipComponent.js +2 -1
  23. package/dist/field/features/Relationship/nodes/components/index.scss +8 -0
  24. package/dist/field/features/Upload/component/index.scss +1 -0
  25. package/dist/field/features/Upload/nodes/UploadNode.d.ts.map +1 -1
  26. package/dist/field/features/Upload/nodes/UploadNode.js +1 -1
  27. package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarDropdown/index.scss +1 -1
  28. package/dist/field/lexical/plugins/FloatingSelectToolbar/index.scss +1 -1
  29. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts +7 -0
  30. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts.map +1 -1
  31. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +8 -3
  32. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts +2 -2
  33. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts.map +1 -1
  34. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js +19 -11
  35. package/dist/field/lexical/plugins/SlashMenu/index.d.ts.map +1 -1
  36. package/dist/field/lexical/plugins/SlashMenu/index.js +14 -2
  37. package/dist/field/lexical/plugins/SlashMenu/index.scss +9 -2
  38. package/dist/field/lexical/plugins/handles/AddBlockHandlePlugin/index.js +4 -3
  39. package/dist/field/lexical/theme/EditorTheme.scss +3 -2
  40. package/dist/index.d.ts +1 -1
  41. package/dist/index.js +4 -4
  42. package/dist/populate/recurseNestedFields.d.ts.map +1 -1
  43. package/dist/populate/recurseNestedFields.js +3 -1
  44. package/package.json +2 -2
  45. package/src/index.ts +1 -1
  46. package/dist/field/features/Upload/nodes/UploadNode.scss +0 -4
@@ -45,6 +45,7 @@ class SlashMenuGroup {
45
45
  }
46
46
  class SlashMenuOption {
47
47
  Icon;
48
+ displayName;
48
49
  // Icon for display
49
50
  key;
50
51
  // TBD
@@ -63,6 +64,7 @@ class SlashMenuOption {
63
64
  };
64
65
  this.setRefElement = this.setRefElement.bind(this);
65
66
  this.title = title;
67
+ this.displayName = options.displayName;
66
68
  this.keywords = options.keywords || [];
67
69
  this.Icon = options.Icon;
68
70
  this.keyboardShortcut = options.keyboardShortcut;
@@ -397,8 +399,11 @@ function useMenuAnchorRef(resolution, setResolution, className) {
397
399
  if (left + menuWidth > rootElementRect.right) {
398
400
  containerDiv.style.left = `${rootElementRect.right - menuWidth + window.scrollX}px`;
399
401
  }
400
- const margin = 10;
401
- if ((top + menuHeight > window.innerHeight || top + menuHeight > rootElementRect.bottom) && top - rootElementRect.top > menuHeight) {
402
+ const wouldGoOffTopOfScreen = top < menuHeight;
403
+ const wouldGoOffBottomOfContainer = top + menuHeight > rootElementRect.bottom;
404
+ // Position slash menu above the cursor instead of below (default) if it would otherwise go off the bottom of the screen.
405
+ if ((top + menuHeight > window.innerHeight || wouldGoOffBottomOfContainer && !wouldGoOffTopOfScreen) && top - rootElementRect.top > menuHeight) {
406
+ const margin = 24;
402
407
  containerDiv.style.top = `${top + VERTICAL_OFFSET - menuHeight + window.scrollY - (height + margin)}px`;
403
408
  }
404
409
  }
@@ -454,4 +459,4 @@ function useMenuAnchorRef(resolution, setResolution, className) {
454
459
  return anchorElementRef;
455
460
  }
456
461
 
457
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L0xleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luL0xleGljYWxNZW51LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExleGljYWxDb21tYW5kLCBMZXhpY2FsRWRpdG9yLCBUZXh0Tm9kZSB9IGZyb20gJ2xleGljYWwnXG5pbXBvcnQgdHlwZSB7IE11dGFibGVSZWZPYmplY3QsIFJlYWN0UG9ydGFsIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZUxleGljYWxDb21wb3NlckNvbnRleHQgfSBmcm9tICdAbGV4aWNhbC9yZWFjdC9MZXhpY2FsQ29tcG9zZXJDb250ZXh0J1xuaW1wb3J0IHsgbWVyZ2VSZWdpc3RlciB9IGZyb20gJ0BsZXhpY2FsL3V0aWxzJ1xuaW1wb3J0IHtcbiAgJGdldFNlbGVjdGlvbixcbiAgJGlzUmFuZ2VTZWxlY3Rpb24sXG4gIENPTU1BTkRfUFJJT1JJVFlfTE9XLFxuICBLRVlfQVJST1dfRE9XTl9DT01NQU5ELFxuICBLRVlfQVJST1dfVVBfQ09NTUFORCxcbiAgS0VZX0VOVEVSX0NPTU1BTkQsXG4gIEtFWV9FU0NBUEVfQ09NTUFORCxcbiAgS0VZX1RBQl9DT01NQU5ELFxuICBjcmVhdGVDb21tYW5kLFxufSBmcm9tICdsZXhpY2FsJ1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmV4cG9ydCB0eXBlIE1lbnVUZXh0TWF0Y2ggPSB7XG4gIGxlYWRPZmZzZXQ6IG51bWJlclxuICBtYXRjaGluZ1N0cmluZzogc3RyaW5nXG4gIHJlcGxhY2VhYmxlU3RyaW5nOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgTWVudVJlc29sdXRpb24gPSB7XG4gIGdldFJlY3Q6ICgpID0+IERPTVJlY3RcbiAgbWF0Y2g/OiBNZW51VGV4dE1hdGNoXG59XG5cbmV4cG9ydCBjb25zdCBQVU5DVFVBVElPTiA9ICdcXFxcLixcXFxcK1xcXFwqXFxcXD9cXFxcJFxcXFxAXFxcXHwje31cXFxcKFxcXFwpXFxcXF5cXFxcLVxcXFxbXFxcXF1cXFxcXFxcXC8hJVxcJ1wifj08Pl86OydcblxuZXhwb3J0IGNsYXNzIFNsYXNoTWVudUdyb3VwIHtcbiAgb3B0aW9uczogQXJyYXk8U2xhc2hNZW51T3B0aW9uPlxuICB0aXRsZTogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBTbGFzaE1lbnVPcHRpb24ge1xuICBJY29uOiBSZWFjdC5GQ1xuXG4gIC8vIEljb24gZm9yIGRpc3BsYXlcbiAga2V5OiBzdHJpbmdcbiAgLy8gVEJEXG4gIGtleWJvYXJkU2hvcnRjdXQ/OiBzdHJpbmdcbiAgLy8gRm9yIGV4dHJhIHNlYXJjaGluZy5cbiAga2V5d29yZHM6IEFycmF5PHN0cmluZz5cbiAgLy8gV2hhdCBoYXBwZW5zIHdoZW4geW91IHNlbGVjdCB0aGlzIG9wdGlvbj9cbiAgb25TZWxlY3Q6ICh7IGVkaXRvciwgcXVlcnlTdHJpbmcgfTogeyBlZGl0b3I6IExleGljYWxFZGl0b3I7IHF1ZXJ5U3RyaW5nOiBzdHJpbmcgfSkgPT4gdm9pZFxuICByZWY/OiBNdXRhYmxlUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD5cblxuICAvLyBXaGF0IHNob3dzIHVwIGluIHRoZSBlZGl0b3JcbiAgdGl0bGU6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgSWNvbjogUmVhY3QuRkNcbiAgICAgIGtleWJvYXJkU2hvcnRjdXQ/OiBzdHJpbmdcbiAgICAgIGtleXdvcmRzPzogQXJyYXk8c3RyaW5nPlxuICAgICAgb25TZWxlY3Q6ICh7IGVkaXRvciwgcXVlcnlTdHJpbmcgfTogeyBlZGl0b3I6IExleGljYWxFZGl0b3I7IHF1ZXJ5U3RyaW5nOiBzdHJpbmcgfSkgPT4gdm9pZFxuICAgIH0sXG4gICkge1xuICAgIHRoaXMua2V5ID0gdGl0bGVcbiAgICB0aGlzLnJlZiA9IHsgY3VycmVudDogbnVsbCB9XG4gICAgdGhpcy5zZXRSZWZFbGVtZW50ID0gdGhpcy5zZXRSZWZFbGVtZW50LmJpbmQodGhpcylcblxuICAgIHRoaXMudGl0bGUgPSB0aXRsZVxuICAgIHRoaXMua2V5d29yZHMgPSBvcHRpb25zLmtleXdvcmRzIHx8IFtdXG4gICAgdGhpcy5JY29uID0gb3B0aW9ucy5JY29uXG4gICAgdGhpcy5rZXlib2FyZFNob3J0Y3V0ID0gb3B0aW9ucy5rZXlib2FyZFNob3J0Y3V0XG4gICAgdGhpcy5vblNlbGVjdCA9IG9wdGlvbnMub25TZWxlY3QuYmluZCh0aGlzKVxuICB9XG5cbiAgc2V0UmVmRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwpIHtcbiAgICB0aGlzLnJlZiA9IHsgY3VycmVudDogZWxlbWVudCB9XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgTWVudVJlbmRlckZuID0gKFxuICBhbmNob3JFbGVtZW50UmVmOiBNdXRhYmxlUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD4sXG4gIGl0ZW1Qcm9wczoge1xuICAgIGdyb3Vwc1dpdGhPcHRpb25zOiBBcnJheTxTbGFzaE1lbnVHcm91cD5cbiAgICBzZWxlY3RPcHRpb25BbmRDbGVhblVwOiAoc2VsZWN0ZWRPcHRpb246IFNsYXNoTWVudU9wdGlvbikgPT4gdm9pZFxuICAgIHNlbGVjdGVkT3B0aW9uS2V5OiBudWxsIHwgc3RyaW5nXG4gICAgc2V0U2VsZWN0ZWRPcHRpb25LZXk6IChvcHRpb25LZXk6IHN0cmluZykgPT4gdm9pZFxuICB9LFxuICBtYXRjaGluZ1N0cmluZzogbnVsbCB8IHN0cmluZyxcbikgPT4gSlNYLkVsZW1lbnQgfCBSZWFjdFBvcnRhbCB8IG51bGxcblxuY29uc3Qgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCA9ICh0YXJnZXQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gIGNvbnN0IHR5cGVhaGVhZENvbnRhaW5lck5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHlwZWFoZWFkLW1lbnUnKVxuICBpZiAoIXR5cGVhaGVhZENvbnRhaW5lck5vZGUpIHJldHVyblxuXG4gIGNvbnN0IHR5cGVhaGVhZFJlY3QgPSB0eXBlYWhlYWRDb250YWluZXJOb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG5cbiAgaWYgKHR5cGVhaGVhZFJlY3QudG9wICsgdHlwZWFoZWFkUmVjdC5oZWlnaHQgPiB3aW5kb3cuaW5uZXJIZWlnaHQpIHtcbiAgICB0eXBlYWhlYWRDb250YWluZXJOb2RlLnNjcm9sbEludG9WaWV3KHtcbiAgICAgIGJsb2NrOiAnY2VudGVyJyxcbiAgICB9KVxuICB9XG5cbiAgaWYgKHR5cGVhaGVhZFJlY3QudG9wIDwgMCkge1xuICAgIHR5cGVhaGVhZENvbnRhaW5lck5vZGUuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgYmxvY2s6ICdjZW50ZXInLFxuICAgIH0pXG4gIH1cblxuICB0YXJnZXQuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnIH0pXG59XG5cbi8qKlxuICogV2FsayBiYWNrd2FyZHMgYWxvbmcgdXNlciBpbnB1dCBhbmQgZm9yd2FyZCB0aHJvdWdoIGVudGl0eSB0aXRsZSB0byB0cnlcbiAqIGFuZCByZXBsYWNlIG1vcmUgb2YgdGhlIHVzZXIncyB0ZXh0IHdpdGggZW50aXR5LlxuICovXG5mdW5jdGlvbiBnZXRGdWxsTWF0Y2hPZmZzZXQoZG9jdW1lbnRUZXh0OiBzdHJpbmcsIGVudHJ5VGV4dDogc3RyaW5nLCBvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gIGxldCB0cmlnZ2VyT2Zmc2V0ID0gb2Zmc2V0XG4gIGZvciAobGV0IGkgPSB0cmlnZ2VyT2Zmc2V0OyBpIDw9IGVudHJ5VGV4dC5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkb2N1bWVudFRleHQuc3Vic3RyKC1pKSA9PT0gZW50cnlUZXh0LnN1YnN0cigwLCBpKSkge1xuICAgICAgdHJpZ2dlck9mZnNldCA9IGlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRyaWdnZXJPZmZzZXRcbn1cblxuLyoqXG4gKiBTcGxpdCBMZXhpY2FsIFRleHROb2RlIGFuZCByZXR1cm4gYSBuZXcgVGV4dE5vZGUgb25seSBjb250YWluaW5nIG1hdGNoZWQgdGV4dC5cbiAqIENvbW1vbiB1c2UgY2FzZXMgaW5jbHVkZTogcmVtb3ZpbmcgdGhlIG5vZGUsIHJlcGxhY2luZyB3aXRoIGEgbmV3IG5vZGUuXG4gKi9cbmZ1bmN0aW9uICRzcGxpdE5vZGVDb250YWluaW5nUXVlcnkobWF0Y2g6IE1lbnVUZXh0TWF0Y2gpOiBUZXh0Tm9kZSB8IG51bGwge1xuICBjb25zdCBzZWxlY3Rpb24gPSAkZ2V0U2VsZWN0aW9uKClcbiAgaWYgKCEkaXNSYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pIHx8ICFzZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgYW5jaG9yID0gc2VsZWN0aW9uLmFuY2hvclxuICBpZiAoYW5jaG9yLnR5cGUgIT09ICd0ZXh0Jykge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgYW5jaG9yTm9kZSA9IGFuY2hvci5nZXROb2RlKClcbiAgaWYgKCFhbmNob3JOb2RlLmlzU2ltcGxlVGV4dCgpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCBzZWxlY3Rpb25PZmZzZXQgPSBhbmNob3Iub2Zmc2V0XG4gIGNvbnN0IHRleHRDb250ZW50ID0gYW5jaG9yTm9kZS5nZXRUZXh0Q29udGVudCgpLnNsaWNlKDAsIHNlbGVjdGlvbk9mZnNldClcbiAgY29uc3QgY2hhcmFjdGVyT2Zmc2V0ID0gbWF0Y2gucmVwbGFjZWFibGVTdHJpbmcubGVuZ3RoXG4gIGNvbnN0IHF1ZXJ5T2Zmc2V0ID0gZ2V0RnVsbE1hdGNoT2Zmc2V0KHRleHRDb250ZW50LCBtYXRjaC5tYXRjaGluZ1N0cmluZywgY2hhcmFjdGVyT2Zmc2V0KVxuICBjb25zdCBzdGFydE9mZnNldCA9IHNlbGVjdGlvbk9mZnNldCAtIHF1ZXJ5T2Zmc2V0XG4gIGlmIChzdGFydE9mZnNldCA8IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGxldCBuZXdOb2RlXG4gIGlmIChzdGFydE9mZnNldCA9PT0gMCkge1xuICAgIDtbbmV3Tm9kZV0gPSBhbmNob3JOb2RlLnNwbGl0VGV4dChzZWxlY3Rpb25PZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgO1ssIG5ld05vZGVdID0gYW5jaG9yTm9kZS5zcGxpdFRleHQoc3RhcnRPZmZzZXQsIHNlbGVjdGlvbk9mZnNldClcbiAgfVxuXG4gIHJldHVybiBuZXdOb2RlXG59XG5cbi8vIEdvdCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80MjU0MzkwOC8yMDEzNTgwXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgaW5jbHVkZUhpZGRlbjogYm9vbGVhbixcbik6IEhUTUxCb2R5RWxlbWVudCB8IEhUTUxFbGVtZW50IHtcbiAgbGV0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICBjb25zdCBleGNsdWRlU3RhdGljUGFyZW50ID0gc3R5bGUucG9zaXRpb24gPT09ICdhYnNvbHV0ZSdcbiAgY29uc3Qgb3ZlcmZsb3dSZWdleCA9IGluY2x1ZGVIaWRkZW4gPyAvKGF1dG98c2Nyb2xsfGhpZGRlbikvIDogLyhhdXRvfHNjcm9sbCkvXG4gIGlmIChzdHlsZS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBkb2N1bWVudC5ib2R5XG4gIH1cbiAgZm9yIChsZXQgcGFyZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBlbGVtZW50OyAocGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQpOyApIHtcbiAgICBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUocGFyZW50KVxuICAgIGlmIChleGNsdWRlU3RhdGljUGFyZW50ICYmIHN0eWxlLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKG92ZXJmbG93UmVnZXgudGVzdChzdHlsZS5vdmVyZmxvdyArIHN0eWxlLm92ZXJmbG93WSArIHN0eWxlLm92ZXJmbG93WCkpIHtcbiAgICAgIHJldHVybiBwYXJlbnRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmJvZHlcbn1cblxuZnVuY3Rpb24gaXNUcmlnZ2VyVmlzaWJsZUluTmVhcmVzdFNjcm9sbENvbnRhaW5lcihcbiAgdGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHRSZWN0ID0gdGFyZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICBjb25zdCBjUmVjdCA9IGNvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgcmV0dXJuIHRSZWN0LnRvcCA+IGNSZWN0LnRvcCAmJiB0UmVjdC50b3AgPCBjUmVjdC5ib3R0b21cbn1cblxuLy8gUmVwb3NpdGlvbiB0aGUgbWVudSBvbiBzY3JvbGwsIHdpbmRvdyByZXNpemUsIGFuZCBlbGVtZW50IHJlc2l6ZS5cbmV4cG9ydCBmdW5jdGlvbiB1c2VEeW5hbWljUG9zaXRpb25pbmcoXG4gIHJlc29sdXRpb246IE1lbnVSZXNvbHV0aW9uIHwgbnVsbCxcbiAgdGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsLFxuICBvblJlcG9zaXRpb246ICgpID0+IHZvaWQsXG4gIG9uVmlzaWJpbGl0eUNoYW5nZT86IChpc0luVmlldzogYm9vbGVhbikgPT4gdm9pZCxcbikge1xuICBjb25zdCBbZWRpdG9yXSA9IHVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0YXJnZXRFbGVtZW50ICE9IG51bGwgJiYgcmVzb2x1dGlvbiAhPSBudWxsKSB7XG4gICAgICBjb25zdCByb290RWxlbWVudCA9IGVkaXRvci5nZXRSb290RWxlbWVudCgpXG4gICAgICBjb25zdCByb290U2Nyb2xsUGFyZW50ID1cbiAgICAgICAgcm9vdEVsZW1lbnQgIT0gbnVsbCA/IGdldFNjcm9sbFBhcmVudChyb290RWxlbWVudCwgZmFsc2UpIDogZG9jdW1lbnQuYm9keVxuICAgICAgbGV0IHRpY2tpbmcgPSBmYWxzZVxuICAgICAgbGV0IHByZXZpb3VzSXNJblZpZXcgPSBpc1RyaWdnZXJWaXNpYmxlSW5OZWFyZXN0U2Nyb2xsQ29udGFpbmVyKFxuICAgICAgICB0YXJnZXRFbGVtZW50LFxuICAgICAgICByb290U2Nyb2xsUGFyZW50LFxuICAgICAgKVxuICAgICAgY29uc3QgaGFuZGxlU2Nyb2xsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRpY2tpbmcpIHtcbiAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG9uUmVwb3NpdGlvbigpXG4gICAgICAgICAgICB0aWNraW5nID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRpY2tpbmcgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNJblZpZXcgPSBpc1RyaWdnZXJWaXNpYmxlSW5OZWFyZXN0U2Nyb2xsQ29udGFpbmVyKHRhcmdldEVsZW1lbnQsIHJvb3RTY3JvbGxQYXJlbnQpXG4gICAgICAgIGlmIChpc0luVmlldyAhPT0gcHJldmlvdXNJc0luVmlldykge1xuICAgICAgICAgIHByZXZpb3VzSXNJblZpZXcgPSBpc0luVmlld1xuICAgICAgICAgIGlmIChvblZpc2liaWxpdHlDaGFuZ2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgb25WaXNpYmlsaXR5Q2hhbmdlKGlzSW5WaWV3KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIob25SZXBvc2l0aW9uKVxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG9uUmVwb3NpdGlvbilcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbCwge1xuICAgICAgICBjYXB0dXJlOiB0cnVlLFxuICAgICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgfSlcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGFyZ2V0RWxlbWVudClcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZSh0YXJnZXRFbGVtZW50KVxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25SZXBvc2l0aW9uKVxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwsIHRydWUpXG4gICAgICB9XG4gICAgfVxuICB9LCBbdGFyZ2V0RWxlbWVudCwgZWRpdG9yLCBvblZpc2liaWxpdHlDaGFuZ2UsIG9uUmVwb3NpdGlvbiwgcmVzb2x1dGlvbl0pXG59XG5cbmV4cG9ydCBjb25zdCBTQ1JPTExfVFlQRUFIRUFEX09QVElPTl9JTlRPX1ZJRVdfQ09NTUFORDogTGV4aWNhbENvbW1hbmQ8e1xuICBpbmRleDogbnVtYmVyXG4gIG9wdGlvbjogU2xhc2hNZW51T3B0aW9uXG59PiA9IGNyZWF0ZUNvbW1hbmQoJ1NDUk9MTF9UWVBFQUhFQURfT1BUSU9OX0lOVE9fVklFV19DT01NQU5EJylcblxuZXhwb3J0IGZ1bmN0aW9uIExleGljYWxNZW51KHtcbiAgYW5jaG9yRWxlbWVudFJlZixcbiAgY2xvc2UsXG4gIGVkaXRvcixcbiAgLy8gZ3JvdXBzV2l0aE9wdGlvbnMgZmlsdGVyaW5nIGlzIGFscmVhZHkgaGFuZGxlZCBpbiBTbGFzaE1lbnUvaW5kZXgudHN4LiBUaHVzLCBncm91cHNXaXRoT3B0aW9ucyBhbHdheXMgY29udGFpbnMgdGhlIG1hdGNoaW5nIG9wdGlvbnMuXG4gIGdyb3Vwc1dpdGhPcHRpb25zLFxuICBtZW51UmVuZGVyRm4sXG4gIG9uU2VsZWN0T3B0aW9uLFxuICByZXNvbHV0aW9uLFxuICBzaG91bGRTcGxpdE5vZGVXaXRoUXVlcnkgPSBmYWxzZSxcbn06IHtcbiAgYW5jaG9yRWxlbWVudFJlZjogTXV0YWJsZVJlZk9iamVjdDxIVE1MRWxlbWVudD5cbiAgY2xvc2U6ICgpID0+IHZvaWRcbiAgZWRpdG9yOiBMZXhpY2FsRWRpdG9yXG4gIGdyb3Vwc1dpdGhPcHRpb25zOiBBcnJheTxTbGFzaE1lbnVHcm91cD5cbiAgbWVudVJlbmRlckZuOiBNZW51UmVuZGVyRm5cbiAgb25TZWxlY3RPcHRpb246IChcbiAgICBvcHRpb246IFNsYXNoTWVudU9wdGlvbixcbiAgICB0ZXh0Tm9kZUNvbnRhaW5pbmdRdWVyeTogVGV4dE5vZGUgfCBudWxsLFxuICAgIGNsb3NlTWVudTogKCkgPT4gdm9pZCxcbiAgICBtYXRjaGluZ1N0cmluZzogc3RyaW5nLFxuICApID0+IHZvaWRcbiAgcmVzb2x1dGlvbjogTWVudVJlc29sdXRpb25cbiAgc2hvdWxkU3BsaXROb2RlV2l0aFF1ZXJ5PzogYm9vbGVhblxufSk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbktleSwgc2V0U2VsZWN0ZWRPcHRpb25LZXldID0gdXNlU3RhdGU8bnVsbCB8IHN0cmluZz4obnVsbClcblxuICBjb25zdCBtYXRjaGluZ1N0cmluZyA9IChyZXNvbHV0aW9uLm1hdGNoICYmIHJlc29sdXRpb24ubWF0Y2gubWF0Y2hpbmdTdHJpbmcpIHx8ICcnXG5cbiAgY29uc3QgdXBkYXRlU2VsZWN0ZWRPcHRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBTbGFzaE1lbnVPcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IHJvb3RFbGVtID0gZWRpdG9yLmdldFJvb3RFbGVtZW50KClcbiAgICAgIGlmIChyb290RWxlbSAhPT0gbnVsbCkge1xuICAgICAgICByb290RWxlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsICd0eXBlYWhlYWQtaXRlbS0nICsgb3B0aW9uLmtleSlcbiAgICAgICAgc2V0U2VsZWN0ZWRPcHRpb25LZXkob3B0aW9uLmtleSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtlZGl0b3JdLFxuICApXG5cbiAgY29uc3Qgc2V0U2VsZWN0ZWRPcHRpb25LZXlUb0ZpcnN0TWF0Y2hpbmdPcHRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgLy8gc2V0IHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZmlyc3Qgb2YgdGhlIG1hdGNoaW5nIG9uZXNcbiAgICBpZiAoZ3JvdXBzV2l0aE9wdGlvbnMgIT09IG51bGwgJiYgbWF0Y2hpbmdTdHJpbmcgIT0gbnVsbCkge1xuICAgICAgLy8gZ3JvdXBzV2l0aE9wdGlvbnMgZmlsdGVyaW5nIGlzIGFscmVhZHkgaGFuZGxlZCBpbiBTbGFzaE1lbnUvaW5kZXgudHN4LiBUaHVzLCBncm91cHNXaXRoT3B0aW9ucyBhbHdheXMgY29udGFpbnMgdGhlIG1hdGNoaW5nIG9wdGlvbnMuXG4gICAgICBjb25zdCBhbGxPcHRpb25zID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLm9wdGlvbnMpXG5cbiAgICAgIGlmIChhbGxPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBmaXJzdE1hdGNoaW5nT3B0aW9uID0gYWxsT3B0aW9uc1swXVxuICAgICAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbihmaXJzdE1hdGNoaW5nT3B0aW9uKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2dyb3Vwc1dpdGhPcHRpb25zLCB1cGRhdGVTZWxlY3RlZE9wdGlvbiwgbWF0Y2hpbmdTdHJpbmddKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRPcHRpb25LZXlUb0ZpcnN0TWF0Y2hpbmdPcHRpb24oKVxuICB9LCBbbWF0Y2hpbmdTdHJpbmcsIHNldFNlbGVjdGVkT3B0aW9uS2V5VG9GaXJzdE1hdGNoaW5nT3B0aW9uXSlcblxuICBjb25zdCBzZWxlY3RPcHRpb25BbmRDbGVhblVwID0gdXNlQ2FsbGJhY2soXG4gICAgKHNlbGVjdGVkT3B0aW9uOiBTbGFzaE1lbnVPcHRpb24pID0+IHtcbiAgICAgIGVkaXRvci51cGRhdGUoKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZUNvbnRhaW5pbmdRdWVyeSA9XG4gICAgICAgICAgcmVzb2x1dGlvbi5tYXRjaCAhPSBudWxsICYmIHNob3VsZFNwbGl0Tm9kZVdpdGhRdWVyeVxuICAgICAgICAgICAgPyAkc3BsaXROb2RlQ29udGFpbmluZ1F1ZXJ5KHJlc29sdXRpb24ubWF0Y2gpXG4gICAgICAgICAgICA6IG51bGxcblxuICAgICAgICBvblNlbGVjdE9wdGlvbihcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbixcbiAgICAgICAgICB0ZXh0Tm9kZUNvbnRhaW5pbmdRdWVyeSxcbiAgICAgICAgICBjbG9zZSxcbiAgICAgICAgICByZXNvbHV0aW9uLm1hdGNoID8gcmVzb2x1dGlvbi5tYXRjaC5tYXRjaGluZ1N0cmluZyA6ICcnLFxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2VkaXRvciwgc2hvdWxkU3BsaXROb2RlV2l0aFF1ZXJ5LCByZXNvbHV0aW9uLm1hdGNoLCBvblNlbGVjdE9wdGlvbiwgY2xvc2VdLFxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdEVsZW0gPSBlZGl0b3IuZ2V0Um9vdEVsZW1lbnQoKVxuICAgICAgaWYgKHJvb3RFbGVtICE9PSBudWxsKSB7XG4gICAgICAgIHJvb3RFbGVtLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JylcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtlZGl0b3JdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGdyb3Vwc1dpdGhPcHRpb25zID09PSBudWxsKSB7XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbktleShudWxsKVxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRPcHRpb25LZXkgPT09IG51bGwpIHtcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9uS2V5VG9GaXJzdE1hdGNoaW5nT3B0aW9uKClcbiAgICB9XG4gIH0sIFtcbiAgICBncm91cHNXaXRoT3B0aW9ucyxcbiAgICBzZWxlY3RlZE9wdGlvbktleSxcbiAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbixcbiAgICBzZXRTZWxlY3RlZE9wdGlvbktleVRvRmlyc3RNYXRjaGluZ09wdGlvbixcbiAgXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiBtZXJnZVJlZ2lzdGVyKFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZChcbiAgICAgICAgU0NST0xMX1RZUEVBSEVBRF9PUFRJT05fSU5UT19WSUVXX0NPTU1BTkQsXG4gICAgICAgICh7IG9wdGlvbiB9KSA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvbi5yZWYgJiYgb3B0aW9uLnJlZi5jdXJyZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNjcm9sbEludG9WaWV3SWZOZWVkZWQob3B0aW9uLnJlZi5jdXJyZW50KVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgIClcbiAgfSwgW2VkaXRvciwgdXBkYXRlU2VsZWN0ZWRPcHRpb25dKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuIG1lcmdlUmVnaXN0ZXIoXG4gICAgICBlZGl0b3IucmVnaXN0ZXJDb21tYW5kPEtleWJvYXJkRXZlbnQ+KFxuICAgICAgICBLRVlfQVJST1dfRE9XTl9DT01NQU5ELFxuICAgICAgICAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV2ZW50ID0gcGF5bG9hZFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGdyb3Vwc1dpdGhPcHRpb25zICE9PSBudWxsICYmXG4gICAgICAgICAgICBncm91cHNXaXRoT3B0aW9ucy5sZW5ndGggJiZcbiAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uS2V5ICE9PSBudWxsXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxPcHRpb25zID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLm9wdGlvbnMpXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gYWxsT3B0aW9ucy5maW5kSW5kZXgoKG9wdGlvbikgPT4gb3B0aW9uLmtleSA9PT0gc2VsZWN0ZWRPcHRpb25LZXkpXG5cbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4ICE9PSBhbGxPcHRpb25zLmxlbmd0aCAtIDEgPyBzZWxlY3RlZEluZGV4ICsgMSA6IDBcblxuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWRPcHRpb24gPSBhbGxPcHRpb25zW25ld1NlbGVjdGVkSW5kZXhdXG5cbiAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uKG5ld1NlbGVjdGVkT3B0aW9uKVxuICAgICAgICAgICAgaWYgKG5ld1NlbGVjdGVkT3B0aW9uLnJlZiAhPSBudWxsICYmIG5ld1NlbGVjdGVkT3B0aW9uLnJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgIGVkaXRvci5kaXNwYXRjaENvbW1hbmQoU0NST0xMX1RZUEVBSEVBRF9PUFRJT05fSU5UT19WSUVXX0NPTU1BTkQsIHtcbiAgICAgICAgICAgICAgICBpbmRleDogbmV3U2VsZWN0ZWRJbmRleCxcbiAgICAgICAgICAgICAgICBvcHRpb246IG5ld1NlbGVjdGVkT3B0aW9uLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZDxLZXlib2FyZEV2ZW50PihcbiAgICAgICAgS0VZX0FSUk9XX1VQX0NPTU1BTkQsXG4gICAgICAgIChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXZlbnQgPSBwYXlsb2FkXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZ3JvdXBzV2l0aE9wdGlvbnMgIT09IG51bGwgJiZcbiAgICAgICAgICAgIGdyb3Vwc1dpdGhPcHRpb25zLmxlbmd0aCAmJlxuICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb25LZXkgIT09IG51bGxcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbE9wdGlvbnMgPSBncm91cHNXaXRoT3B0aW9ucy5mbGF0TWFwKChncm91cCkgPT4gZ3JvdXAub3B0aW9ucylcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPSBhbGxPcHRpb25zLmZpbmRJbmRleCgob3B0aW9uKSA9PiBvcHRpb24ua2V5ID09PSBzZWxlY3RlZE9wdGlvbktleSlcblxuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWRJbmRleCA9IHNlbGVjdGVkSW5kZXggIT09IDAgPyBzZWxlY3RlZEluZGV4IC0gMSA6IGFsbE9wdGlvbnMubGVuZ3RoIC0gMVxuXG4gICAgICAgICAgICBjb25zdCBuZXdTZWxlY3RlZE9wdGlvbiA9IGFsbE9wdGlvbnNbbmV3U2VsZWN0ZWRJbmRleF1cblxuICAgICAgICAgICAgdXBkYXRlU2VsZWN0ZWRPcHRpb24obmV3U2VsZWN0ZWRPcHRpb24pXG4gICAgICAgICAgICBpZiAobmV3U2VsZWN0ZWRPcHRpb24ucmVmICE9IG51bGwgJiYgbmV3U2VsZWN0ZWRPcHRpb24ucmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChuZXdTZWxlY3RlZE9wdGlvbi5yZWYuY3VycmVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIENPTU1BTkRfUFJJT1JJVFlfTE9XLFxuICAgICAgKSxcbiAgICAgIGVkaXRvci5yZWdpc3RlckNvbW1hbmQ8S2V5Ym9hcmRFdmVudD4oXG4gICAgICAgIEtFWV9FU0NBUEVfQ09NTUFORCxcbiAgICAgICAgKHBheWxvYWQpID0+IHtcbiAgICAgICAgICBjb25zdCBldmVudCA9IHBheWxvYWRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcbiAgICAgICAgICBjbG9zZSgpXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZDxLZXlib2FyZEV2ZW50PihcbiAgICAgICAgS0VZX1RBQl9DT01NQU5ELFxuICAgICAgICAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV2ZW50ID0gcGF5bG9hZFxuXG4gICAgICAgICAgaWYgKGdyb3Vwc1dpdGhPcHRpb25zID09PSBudWxsIHx8IHNlbGVjdGVkT3B0aW9uS2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYWxsT3B0aW9ucyA9IGdyb3Vwc1dpdGhPcHRpb25zLmZsYXRNYXAoKGdyb3VwKSA9PiBncm91cC5vcHRpb25zKVxuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gYWxsT3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi5rZXkgPT09IHNlbGVjdGVkT3B0aW9uS2V5KVxuICAgICAgICAgIGlmICghc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuICAgICAgICAgIHNlbGVjdE9wdGlvbkFuZENsZWFuVXAoc2VsZWN0ZWRPcHRpb24pXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZChcbiAgICAgICAgS0VZX0VOVEVSX0NPTU1BTkQsXG4gICAgICAgIChldmVudDogS2V5Ym9hcmRFdmVudCB8IG51bGwpID0+IHtcbiAgICAgICAgICBpZiAoZ3JvdXBzV2l0aE9wdGlvbnMgPT09IG51bGwgfHwgc2VsZWN0ZWRPcHRpb25LZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBhbGxPcHRpb25zID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLm9wdGlvbnMpXG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSBhbGxPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLmtleSA9PT0gc2VsZWN0ZWRPcHRpb25LZXkpXG4gICAgICAgICAgaWYgKCFzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGV2ZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxlY3RPcHRpb25BbmRDbGVhblVwKHNlbGVjdGVkT3B0aW9uKVxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIENPTU1BTkRfUFJJT1JJVFlfTE9XLFxuICAgICAgKSxcbiAgICApXG4gIH0sIFtcbiAgICBzZWxlY3RPcHRpb25BbmRDbGVhblVwLFxuICAgIGNsb3NlLFxuICAgIGVkaXRvcixcbiAgICBncm91cHNXaXRoT3B0aW9ucyxcbiAgICBzZWxlY3RlZE9wdGlvbktleSxcbiAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbixcbiAgXSlcblxuICBjb25zdCBsaXN0SXRlbVByb3BzID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgZ3JvdXBzV2l0aE9wdGlvbnMsXG4gICAgICBzZWxlY3RPcHRpb25BbmRDbGVhblVwLFxuICAgICAgc2VsZWN0ZWRPcHRpb25LZXksXG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbktleSxcbiAgICB9KSxcbiAgICBbc2VsZWN0T3B0aW9uQW5kQ2xlYW5VcCwgc2VsZWN0ZWRPcHRpb25LZXksIGdyb3Vwc1dpdGhPcHRpb25zXSxcbiAgKVxuXG4gIHJldHVybiBtZW51UmVuZGVyRm4oXG4gICAgYW5jaG9yRWxlbWVudFJlZixcbiAgICBsaXN0SXRlbVByb3BzLFxuICAgIHJlc29sdXRpb24ubWF0Y2ggPyByZXNvbHV0aW9uLm1hdGNoLm1hdGNoaW5nU3RyaW5nIDogJycsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZU1lbnVBbmNob3JSZWYoXG4gIHJlc29sdXRpb246IE1lbnVSZXNvbHV0aW9uIHwgbnVsbCxcbiAgc2V0UmVzb2x1dGlvbjogKHI6IE1lbnVSZXNvbHV0aW9uIHwgbnVsbCkgPT4gdm9pZCxcbiAgY2xhc3NOYW1lPzogc3RyaW5nLFxuKTogTXV0YWJsZVJlZk9iamVjdDxIVE1MRWxlbWVudD4ge1xuICBjb25zdCBbZWRpdG9yXSA9IHVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKVxuICBjb25zdCBhbmNob3JFbGVtZW50UmVmID0gdXNlUmVmPEhUTUxFbGVtZW50Pihkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSlcbiAgY29uc3QgcG9zaXRpb25NZW51ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHJvb3RFbGVtZW50ID0gZWRpdG9yLmdldFJvb3RFbGVtZW50KClcbiAgICBjb25zdCBjb250YWluZXJEaXYgPSBhbmNob3JFbGVtZW50UmVmLmN1cnJlbnRcblxuICAgIGNvbnN0IFZFUlRJQ0FMX09GRlNFVCA9IDMyIGFzIGNvbnN0XG5cbiAgICBjb25zdCBtZW51RWxlID0gY29udGFpbmVyRGl2LmZpcnN0Q2hpbGQgYXMgRWxlbWVudFxuICAgIGlmIChyb290RWxlbWVudCAhPT0gbnVsbCAmJiByZXNvbHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB7IGhlaWdodCwgbGVmdCwgdG9wLCB3aWR0aCB9ID0gcmVzb2x1dGlvbi5nZXRSZWN0KClcbiAgICAgIGNvbnRhaW5lckRpdi5zdHlsZS50b3AgPSBgJHt0b3AgKyB3aW5kb3cuc2Nyb2xsWSArIFZFUlRJQ0FMX09GRlNFVH1weGBcbiAgICAgIGNvbnRhaW5lckRpdi5zdHlsZS5sZWZ0ID0gYCR7bGVmdCArIHdpbmRvdy5zY3JvbGxYfXB4YFxuICAgICAgY29udGFpbmVyRGl2LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGBcbiAgICAgIGNvbnRhaW5lckRpdi5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YFxuICAgICAgaWYgKG1lbnVFbGUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgbWVudVJlY3QgPSBtZW51RWxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgIGNvbnN0IG1lbnVIZWlnaHQgPSBtZW51UmVjdC5oZWlnaHRcbiAgICAgICAgY29uc3QgbWVudVdpZHRoID0gbWVudVJlY3Qud2lkdGhcblxuICAgICAgICBjb25zdCByb290RWxlbWVudFJlY3QgPSByb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuXG4gICAgICAgIGlmIChsZWZ0ICsgbWVudVdpZHRoID4gcm9vdEVsZW1lbnRSZWN0LnJpZ2h0KSB7XG4gICAgICAgICAgY29udGFpbmVyRGl2LnN0eWxlLmxlZnQgPSBgJHtyb290RWxlbWVudFJlY3QucmlnaHQgLSBtZW51V2lkdGggKyB3aW5kb3cuc2Nyb2xsWH1weGBcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXJnaW4gPSAxMFxuICAgICAgICBpZiAoXG4gICAgICAgICAgKHRvcCArIG1lbnVIZWlnaHQgPiB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgdG9wICsgbWVudUhlaWdodCA+IHJvb3RFbGVtZW50UmVjdC5ib3R0b20pICYmXG4gICAgICAgICAgdG9wIC0gcm9vdEVsZW1lbnRSZWN0LnRvcCA+IG1lbnVIZWlnaHRcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29udGFpbmVyRGl2LnN0eWxlLnRvcCA9IGAke1xuICAgICAgICAgICAgdG9wICsgVkVSVElDQUxfT0ZGU0VUIC0gbWVudUhlaWdodCArIHdpbmRvdy5zY3JvbGxZIC0gKGhlaWdodCArIG1hcmdpbilcbiAgICAgICAgICB9cHhgXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFjb250YWluZXJEaXYuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgaWYgKGNsYXNzTmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgY29udGFpbmVyRGl2LmNsYXNzTmFtZSA9IGNsYXNzTmFtZVxuICAgICAgICB9XG4gICAgICAgIGNvbnRhaW5lckRpdi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnVHlwZWFoZWFkIG1lbnUnKVxuICAgICAgICBjb250YWluZXJEaXYuc2V0QXR0cmlidXRlKCdpZCcsICd0eXBlYWhlYWQtbWVudScpXG4gICAgICAgIGNvbnRhaW5lckRpdi5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbGlzdGJveCcpXG4gICAgICAgIGNvbnRhaW5lckRpdi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuICAgICAgICBjb250YWluZXJEaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKGNvbnRhaW5lckRpdilcbiAgICAgIH1cbiAgICAgIGFuY2hvckVsZW1lbnRSZWYuY3VycmVudCA9IGNvbnRhaW5lckRpdlxuICAgICAgcm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJywgJ3R5cGVhaGVhZC1tZW51JylcbiAgICB9XG4gIH0sIFtlZGl0b3IsIHJlc29sdXRpb24sIGNsYXNzTmFtZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCByb290RWxlbWVudCA9IGVkaXRvci5nZXRSb290RWxlbWVudCgpXG4gICAgaWYgKHJlc29sdXRpb24gIT09IG51bGwpIHtcbiAgICAgIHBvc2l0aW9uTWVudSgpXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAocm9vdEVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICByb290RWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtY29udHJvbHMnKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGFpbmVyRGl2ID0gYW5jaG9yRWxlbWVudFJlZi5jdXJyZW50XG4gICAgICAgIGlmIChjb250YWluZXJEaXYgIT09IG51bGwgJiYgY29udGFpbmVyRGl2LmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgY29udGFpbmVyRGl2LnJlbW92ZSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtlZGl0b3IsIHBvc2l0aW9uTWVudSwgcmVzb2x1dGlvbl0pXG5cbiAgY29uc3Qgb25WaXNpYmlsaXR5Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGlzSW5WaWV3OiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAocmVzb2x1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoIWlzSW5WaWV3KSB7XG4gICAgICAgICAgc2V0UmVzb2x1dGlvbihudWxsKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbcmVzb2x1dGlvbiwgc2V0UmVzb2x1dGlvbl0sXG4gIClcblxuICB1c2VEeW5hbWljUG9zaXRpb25pbmcocmVzb2x1dGlvbiwgYW5jaG9yRWxlbWVudFJlZi5jdXJyZW50LCBwb3NpdGlvbk1lbnUsIG9uVmlzaWJpbGl0eUNoYW5nZSlcblxuICByZXR1cm4gYW5jaG9yRWxlbWVudFJlZlxufVxuXG5leHBvcnQgdHlwZSBUcmlnZ2VyRm4gPSAodGV4dDogc3RyaW5nLCBlZGl0b3I6IExleGljYWxFZGl0b3IpID0+IE1lbnVUZXh0TWF0Y2ggfCBudWxsXG4iXSwibmFtZXMiOlsiUFVOQ1RVQVRJT04iLCJTbGFzaE1lbnVHcm91cCIsIlNsYXNoTWVudU9wdGlvbiIsImdldFNjcm9sbFBhcmVudCIsInVzZUR5bmFtaWNQb3NpdGlvbmluZyIsIlNDUk9MTF9UWVBFQUhFQURfT1BUSU9OX0lOVE9fVklFV19DT01NQU5EIiwiTGV4aWNhbE1lbnUiLCJ1c2VNZW51QW5jaG9yUmVmIiwib3B0aW9ucyIsInRpdGxlIiwiSWNvbiIsImtleSIsImtleWJvYXJkU2hvcnRjdXQiLCJrZXl3b3JkcyIsIm9uU2VsZWN0IiwicmVmIiwiY29uc3RydWN0b3IiLCJjdXJyZW50Iiwic2V0UmVmRWxlbWVudCIsImJpbmQiLCJlbGVtZW50Iiwic2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCIsInRhcmdldCIsInR5cGVhaGVhZENvbnRhaW5lck5vZGUiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwidHlwZWFoZWFkUmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInRvcCIsImhlaWdodCIsIndpbmRvdyIsImlubmVySGVpZ2h0Iiwic2Nyb2xsSW50b1ZpZXciLCJibG9jayIsImdldEZ1bGxNYXRjaE9mZnNldCIsImRvY3VtZW50VGV4dCIsImVudHJ5VGV4dCIsIm9mZnNldCIsInRyaWdnZXJPZmZzZXQiLCJpIiwibGVuZ3RoIiwic3Vic3RyIiwiJHNwbGl0Tm9kZUNvbnRhaW5pbmdRdWVyeSIsIm1hdGNoIiwic2VsZWN0aW9uIiwiJGdldFNlbGVjdGlvbiIsIiRpc1JhbmdlU2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJhbmNob3IiLCJ0eXBlIiwiYW5jaG9yTm9kZSIsImdldE5vZGUiLCJpc1NpbXBsZVRleHQiLCJzZWxlY3Rpb25PZmZzZXQiLCJ0ZXh0Q29udGVudCIsImdldFRleHRDb250ZW50Iiwic2xpY2UiLCJjaGFyYWN0ZXJPZmZzZXQiLCJyZXBsYWNlYWJsZVN0cmluZyIsInF1ZXJ5T2Zmc2V0IiwibWF0Y2hpbmdTdHJpbmciLCJzdGFydE9mZnNldCIsIm5ld05vZGUiLCJzcGxpdFRleHQiLCJpbmNsdWRlSGlkZGVuIiwic3R5bGUiLCJnZXRDb21wdXRlZFN0eWxlIiwiZXhjbHVkZVN0YXRpY1BhcmVudCIsInBvc2l0aW9uIiwib3ZlcmZsb3dSZWdleCIsImJvZHkiLCJwYXJlbnQiLCJwYXJlbnRFbGVtZW50IiwidGVzdCIsIm92ZXJmbG93Iiwib3ZlcmZsb3dZIiwib3ZlcmZsb3dYIiwiaXNUcmlnZ2VyVmlzaWJsZUluTmVhcmVzdFNjcm9sbENvbnRhaW5lciIsInRhcmdldEVsZW1lbnQiLCJjb250YWluZXJFbGVtZW50IiwidFJlY3QiLCJjUmVjdCIsImJvdHRvbSIsInJlc29sdXRpb24iLCJvblJlcG9zaXRpb24iLCJvblZpc2liaWxpdHlDaGFuZ2UiLCJlZGl0b3IiLCJ1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IiwidXNlRWZmZWN0Iiwicm9vdEVsZW1lbnQiLCJnZXRSb290RWxlbWVudCIsInJvb3RTY3JvbGxQYXJlbnQiLCJ0aWNraW5nIiwicHJldmlvdXNJc0luVmlldyIsImhhbmRsZVNjcm9sbCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImlzSW5WaWV3IiwicmVzaXplT2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJjYXB0dXJlIiwicGFzc2l2ZSIsIm9ic2VydmUiLCJ1bm9ic2VydmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY3JlYXRlQ29tbWFuZCIsImFuY2hvckVsZW1lbnRSZWYiLCJjbG9zZSIsImdyb3Vwc1dpdGhPcHRpb25zIiwibWVudVJlbmRlckZuIiwib25TZWxlY3RPcHRpb24iLCJzaG91bGRTcGxpdE5vZGVXaXRoUXVlcnkiLCJzZWxlY3RlZE9wdGlvbktleSIsInNldFNlbGVjdGVkT3B0aW9uS2V5IiwidXNlU3RhdGUiLCJ1cGRhdGVTZWxlY3RlZE9wdGlvbiIsInVzZUNhbGxiYWNrIiwib3B0aW9uIiwicm9vdEVsZW0iLCJzZXRBdHRyaWJ1dGUiLCJzZXRTZWxlY3RlZE9wdGlvbktleVRvRmlyc3RNYXRjaGluZ09wdGlvbiIsImFsbE9wdGlvbnMiLCJmbGF0TWFwIiwiZ3JvdXAiLCJmaXJzdE1hdGNoaW5nT3B0aW9uIiwic2VsZWN0T3B0aW9uQW5kQ2xlYW5VcCIsInNlbGVjdGVkT3B0aW9uIiwidXBkYXRlIiwidGV4dE5vZGVDb250YWluaW5nUXVlcnkiLCJyZW1vdmVBdHRyaWJ1dGUiLCJ1c2VMYXlvdXRFZmZlY3QiLCJtZXJnZVJlZ2lzdGVyIiwicmVnaXN0ZXJDb21tYW5kIiwiQ09NTUFORF9QUklPUklUWV9MT1ciLCJLRVlfQVJST1dfRE9XTl9DT01NQU5EIiwicGF5bG9hZCIsImV2ZW50Iiwic2VsZWN0ZWRJbmRleCIsImZpbmRJbmRleCIsIm5ld1NlbGVjdGVkSW5kZXgiLCJuZXdTZWxlY3RlZE9wdGlvbiIsImRpc3BhdGNoQ29tbWFuZCIsImluZGV4IiwicHJldmVudERlZmF1bHQiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJLRVlfQVJST1dfVVBfQ09NTUFORCIsIktFWV9FU0NBUEVfQ09NTUFORCIsIktFWV9UQUJfQ09NTUFORCIsImZpbmQiLCJLRVlfRU5URVJfQ09NTUFORCIsImxpc3RJdGVtUHJvcHMiLCJ1c2VNZW1vIiwic2V0UmVzb2x1dGlvbiIsImNsYXNzTmFtZSIsInVzZVJlZiIsImNyZWF0ZUVsZW1lbnQiLCJwb3NpdGlvbk1lbnUiLCJjb250YWluZXJEaXYiLCJWRVJUSUNBTF9PRkZTRVQiLCJtZW51RWxlIiwiZmlyc3RDaGlsZCIsImxlZnQiLCJ3aWR0aCIsImdldFJlY3QiLCJzY3JvbGxZIiwic2Nyb2xsWCIsIm1lbnVSZWN0IiwibWVudUhlaWdodCIsIm1lbnVXaWR0aCIsInJvb3RFbGVtZW50UmVjdCIsInJpZ2h0IiwibWFyZ2luIiwiaXNDb25uZWN0ZWQiLCJkaXNwbGF5IiwiYXBwZW5kIiwicmVtb3ZlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQTZCYUEsV0FBVztlQUFYQTs7SUFFQUMsY0FBYztlQUFkQTs7SUFLQUMsZUFBZTtlQUFmQTs7SUEySEdDLGVBQWU7ZUFBZkE7O0lBZ0NBQyxxQkFBcUI7ZUFBckJBOztJQWlESEMseUNBQXlDO2VBQXpDQTs7SUFLR0MsV0FBVztlQUFYQTs7SUE4UEFDLGdCQUFnQjtlQUFoQkE7Ozt3Q0FoZjBCO3VCQUNaO3lCQVd2Qjt1QkFDNEU7QUFhNUUsTUFBTVAsY0FBYztBQUVwQixNQUFNQztJQUNYTyxRQUErQjtJQUMvQkMsTUFBYTtBQUNmO0FBRU8sTUFBTVA7SUFDWFEsS0FBYztJQUVkLG1CQUFtQjtJQUNuQkMsSUFBVztJQUNYLE1BQU07SUFDTkMsaUJBQXlCO0lBQ3pCLHVCQUF1QjtJQUN2QkMsU0FBdUI7SUFDdkIsNENBQTRDO0lBQzVDQyxTQUEyRjtJQUMzRkMsSUFBMEM7SUFFMUMsOEJBQThCO0lBQzlCTixNQUFhO0lBRWJPLFlBQ0VQLEtBQWEsRUFDYkQsT0FLQyxDQUNEO1FBQ0EsSUFBSSxDQUFDRyxHQUFHLEdBQUdGO1FBQ1gsSUFBSSxDQUFDTSxHQUFHLEdBQUc7WUFBRUUsU0FBUztRQUFLO1FBQzNCLElBQUksQ0FBQ0MsYUFBYSxHQUFHLElB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
462
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L0xleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luL0xleGljYWxNZW51LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IGkxOG4gfSBmcm9tICdpMThuZXh0J1xuaW1wb3J0IHR5cGUgeyBMZXhpY2FsQ29tbWFuZCwgTGV4aWNhbEVkaXRvciwgVGV4dE5vZGUgfSBmcm9tICdsZXhpY2FsJ1xuaW1wb3J0IHR5cGUgeyBNdXRhYmxlUmVmT2JqZWN0LCBSZWFjdFBvcnRhbCB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IH0gZnJvbSAnQGxleGljYWwvcmVhY3QvTGV4aWNhbENvbXBvc2VyQ29udGV4dCdcbmltcG9ydCB7IG1lcmdlUmVnaXN0ZXIgfSBmcm9tICdAbGV4aWNhbC91dGlscydcbmltcG9ydCB7XG4gICRnZXRTZWxlY3Rpb24sXG4gICRpc1JhbmdlU2VsZWN0aW9uLFxuICBDT01NQU5EX1BSSU9SSVRZX0xPVyxcbiAgS0VZX0FSUk9XX0RPV05fQ09NTUFORCxcbiAgS0VZX0FSUk9XX1VQX0NPTU1BTkQsXG4gIEtFWV9FTlRFUl9DT01NQU5ELFxuICBLRVlfRVNDQVBFX0NPTU1BTkQsXG4gIEtFWV9UQUJfQ09NTUFORCxcbiAgY3JlYXRlQ29tbWFuZCxcbn0gZnJvbSAnbGV4aWNhbCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgdHlwZSBNZW51VGV4dE1hdGNoID0ge1xuICBsZWFkT2Zmc2V0OiBudW1iZXJcbiAgbWF0Y2hpbmdTdHJpbmc6IHN0cmluZ1xuICByZXBsYWNlYWJsZVN0cmluZzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIE1lbnVSZXNvbHV0aW9uID0ge1xuICBnZXRSZWN0OiAoKSA9PiBET01SZWN0XG4gIG1hdGNoPzogTWVudVRleHRNYXRjaFxufVxuXG5leHBvcnQgY29uc3QgUFVOQ1RVQVRJT04gPSAnXFxcXC4sXFxcXCtcXFxcKlxcXFw/XFxcXCRcXFxcQFxcXFx8I3t9XFxcXChcXFxcKVxcXFxeXFxcXC1cXFxcW1xcXFxdXFxcXFxcXFwvISVcXCdcIn49PD5fOjsnXG5cbmV4cG9ydCBjbGFzcyBTbGFzaE1lbnVHcm91cCB7XG4gIG9wdGlvbnM6IEFycmF5PFNsYXNoTWVudU9wdGlvbj5cbiAgdGl0bGU6IHN0cmluZ1xufVxuXG5leHBvcnQgY2xhc3MgU2xhc2hNZW51T3B0aW9uIHtcbiAgSWNvbjogUmVhY3QuRkNcblxuICBkaXNwbGF5TmFtZT86ICh7IGkxOG4gfTogeyBpMThuOiBpMThuIH0pID0+IHN0cmluZ1xuICAvLyBJY29uIGZvciBkaXNwbGF5XG4gIGtleTogc3RyaW5nXG4gIC8vIFRCRFxuICBrZXlib2FyZFNob3J0Y3V0Pzogc3RyaW5nXG4gIC8vIEZvciBleHRyYSBzZWFyY2hpbmcuXG4gIGtleXdvcmRzOiBBcnJheTxzdHJpbmc+XG4gIC8vIFdoYXQgaGFwcGVucyB3aGVuIHlvdSBzZWxlY3QgdGhpcyBvcHRpb24/XG4gIG9uU2VsZWN0OiAoeyBlZGl0b3IsIHF1ZXJ5U3RyaW5nIH06IHsgZWRpdG9yOiBMZXhpY2FsRWRpdG9yOyBxdWVyeVN0cmluZzogc3RyaW5nIH0pID0+IHZvaWRcblxuICByZWY/OiBNdXRhYmxlUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD5cblxuICAvLyBXaGF0IHNob3dzIHVwIGluIHRoZSBlZGl0b3JcbiAgdGl0bGU6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgSWNvbjogUmVhY3QuRkNcbiAgICAgIGRpc3BsYXlOYW1lPzogKHsgaTE4biB9OiB7IGkxOG46IGkxOG4gfSkgPT4gc3RyaW5nXG4gICAgICBrZXlib2FyZFNob3J0Y3V0Pzogc3RyaW5nXG4gICAgICBrZXl3b3Jkcz86IEFycmF5PHN0cmluZz5cbiAgICAgIG9uU2VsZWN0OiAoeyBlZGl0b3IsIHF1ZXJ5U3RyaW5nIH06IHsgZWRpdG9yOiBMZXhpY2FsRWRpdG9yOyBxdWVyeVN0cmluZzogc3RyaW5nIH0pID0+IHZvaWRcbiAgICB9LFxuICApIHtcbiAgICB0aGlzLmtleSA9IHRpdGxlXG4gICAgdGhpcy5yZWYgPSB7IGN1cnJlbnQ6IG51bGwgfVxuICAgIHRoaXMuc2V0UmVmRWxlbWVudCA9IHRoaXMuc2V0UmVmRWxlbWVudC5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLnRpdGxlID0gdGl0bGVcbiAgICB0aGlzLmRpc3BsYXlOYW1lID0gb3B0aW9ucy5kaXNwbGF5TmFtZVxuICAgIHRoaXMua2V5d29yZHMgPSBvcHRpb25zLmtleXdvcmRzIHx8IFtdXG4gICAgdGhpcy5JY29uID0gb3B0aW9ucy5JY29uXG4gICAgdGhpcy5rZXlib2FyZFNob3J0Y3V0ID0gb3B0aW9ucy5rZXlib2FyZFNob3J0Y3V0XG4gICAgdGhpcy5vblNlbGVjdCA9IG9wdGlvbnMub25TZWxlY3QuYmluZCh0aGlzKVxuICB9XG5cbiAgc2V0UmVmRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwpIHtcbiAgICB0aGlzLnJlZiA9IHsgY3VycmVudDogZWxlbWVudCB9XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgTWVudVJlbmRlckZuID0gKFxuICBhbmNob3JFbGVtZW50UmVmOiBNdXRhYmxlUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD4sXG4gIGl0ZW1Qcm9wczoge1xuICAgIGdyb3Vwc1dpdGhPcHRpb25zOiBBcnJheTxTbGFzaE1lbnVHcm91cD5cbiAgICBzZWxlY3RPcHRpb25BbmRDbGVhblVwOiAoc2VsZWN0ZWRPcHRpb246IFNsYXNoTWVudU9wdGlvbikgPT4gdm9pZFxuICAgIHNlbGVjdGVkT3B0aW9uS2V5OiBudWxsIHwgc3RyaW5nXG4gICAgc2V0U2VsZWN0ZWRPcHRpb25LZXk6IChvcHRpb25LZXk6IHN0cmluZykgPT4gdm9pZFxuICB9LFxuICBtYXRjaGluZ1N0cmluZzogbnVsbCB8IHN0cmluZyxcbikgPT4gSlNYLkVsZW1lbnQgfCBSZWFjdFBvcnRhbCB8IG51bGxcblxuY29uc3Qgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCA9ICh0YXJnZXQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gIGNvbnN0IHR5cGVhaGVhZENvbnRhaW5lck5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHlwZWFoZWFkLW1lbnUnKVxuICBpZiAoIXR5cGVhaGVhZENvbnRhaW5lck5vZGUpIHJldHVyblxuXG4gIGNvbnN0IHR5cGVhaGVhZFJlY3QgPSB0eXBlYWhlYWRDb250YWluZXJOb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG5cbiAgaWYgKHR5cGVhaGVhZFJlY3QudG9wICsgdHlwZWFoZWFkUmVjdC5oZWlnaHQgPiB3aW5kb3cuaW5uZXJIZWlnaHQpIHtcbiAgICB0eXBlYWhlYWRDb250YWluZXJOb2RlLnNjcm9sbEludG9WaWV3KHtcbiAgICAgIGJsb2NrOiAnY2VudGVyJyxcbiAgICB9KVxuICB9XG5cbiAgaWYgKHR5cGVhaGVhZFJlY3QudG9wIDwgMCkge1xuICAgIHR5cGVhaGVhZENvbnRhaW5lck5vZGUuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgYmxvY2s6ICdjZW50ZXInLFxuICAgIH0pXG4gIH1cblxuICB0YXJnZXQuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnIH0pXG59XG5cbi8qKlxuICogV2FsayBiYWNrd2FyZHMgYWxvbmcgdXNlciBpbnB1dCBhbmQgZm9yd2FyZCB0aHJvdWdoIGVudGl0eSB0aXRsZSB0byB0cnlcbiAqIGFuZCByZXBsYWNlIG1vcmUgb2YgdGhlIHVzZXIncyB0ZXh0IHdpdGggZW50aXR5LlxuICovXG5mdW5jdGlvbiBnZXRGdWxsTWF0Y2hPZmZzZXQoZG9jdW1lbnRUZXh0OiBzdHJpbmcsIGVudHJ5VGV4dDogc3RyaW5nLCBvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gIGxldCB0cmlnZ2VyT2Zmc2V0ID0gb2Zmc2V0XG4gIGZvciAobGV0IGkgPSB0cmlnZ2VyT2Zmc2V0OyBpIDw9IGVudHJ5VGV4dC5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkb2N1bWVudFRleHQuc3Vic3RyKC1pKSA9PT0gZW50cnlUZXh0LnN1YnN0cigwLCBpKSkge1xuICAgICAgdHJpZ2dlck9mZnNldCA9IGlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRyaWdnZXJPZmZzZXRcbn1cblxuLyoqXG4gKiBTcGxpdCBMZXhpY2FsIFRleHROb2RlIGFuZCByZXR1cm4gYSBuZXcgVGV4dE5vZGUgb25seSBjb250YWluaW5nIG1hdGNoZWQgdGV4dC5cbiAqIENvbW1vbiB1c2UgY2FzZXMgaW5jbHVkZTogcmVtb3ZpbmcgdGhlIG5vZGUsIHJlcGxhY2luZyB3aXRoIGEgbmV3IG5vZGUuXG4gKi9cbmZ1bmN0aW9uICRzcGxpdE5vZGVDb250YWluaW5nUXVlcnkobWF0Y2g6IE1lbnVUZXh0TWF0Y2gpOiBUZXh0Tm9kZSB8IG51bGwge1xuICBjb25zdCBzZWxlY3Rpb24gPSAkZ2V0U2VsZWN0aW9uKClcbiAgaWYgKCEkaXNSYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pIHx8ICFzZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgYW5jaG9yID0gc2VsZWN0aW9uLmFuY2hvclxuICBpZiAoYW5jaG9yLnR5cGUgIT09ICd0ZXh0Jykge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgYW5jaG9yTm9kZSA9IGFuY2hvci5nZXROb2RlKClcbiAgaWYgKCFhbmNob3JOb2RlLmlzU2ltcGxlVGV4dCgpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCBzZWxlY3Rpb25PZmZzZXQgPSBhbmNob3Iub2Zmc2V0XG4gIGNvbnN0IHRleHRDb250ZW50ID0gYW5jaG9yTm9kZS5nZXRUZXh0Q29udGVudCgpLnNsaWNlKDAsIHNlbGVjdGlvbk9mZnNldClcbiAgY29uc3QgY2hhcmFjdGVyT2Zmc2V0ID0gbWF0Y2gucmVwbGFjZWFibGVTdHJpbmcubGVuZ3RoXG4gIGNvbnN0IHF1ZXJ5T2Zmc2V0ID0gZ2V0RnVsbE1hdGNoT2Zmc2V0KHRleHRDb250ZW50LCBtYXRjaC5tYXRjaGluZ1N0cmluZywgY2hhcmFjdGVyT2Zmc2V0KVxuICBjb25zdCBzdGFydE9mZnNldCA9IHNlbGVjdGlvbk9mZnNldCAtIHF1ZXJ5T2Zmc2V0XG4gIGlmIChzdGFydE9mZnNldCA8IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGxldCBuZXdOb2RlXG4gIGlmIChzdGFydE9mZnNldCA9PT0gMCkge1xuICAgIDtbbmV3Tm9kZV0gPSBhbmNob3JOb2RlLnNwbGl0VGV4dChzZWxlY3Rpb25PZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgO1ssIG5ld05vZGVdID0gYW5jaG9yTm9kZS5zcGxpdFRleHQoc3RhcnRPZmZzZXQsIHNlbGVjdGlvbk9mZnNldClcbiAgfVxuXG4gIHJldHVybiBuZXdOb2RlXG59XG5cbi8vIEdvdCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80MjU0MzkwOC8yMDEzNTgwXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgaW5jbHVkZUhpZGRlbjogYm9vbGVhbixcbik6IEhUTUxCb2R5RWxlbWVudCB8IEhUTUxFbGVtZW50IHtcbiAgbGV0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICBjb25zdCBleGNsdWRlU3RhdGljUGFyZW50ID0gc3R5bGUucG9zaXRpb24gPT09ICdhYnNvbHV0ZSdcbiAgY29uc3Qgb3ZlcmZsb3dSZWdleCA9IGluY2x1ZGVIaWRkZW4gPyAvKGF1dG98c2Nyb2xsfGhpZGRlbikvIDogLyhhdXRvfHNjcm9sbCkvXG4gIGlmIChzdHlsZS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBkb2N1bWVudC5ib2R5XG4gIH1cbiAgZm9yIChsZXQgcGFyZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBlbGVtZW50OyAocGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQpOyApIHtcbiAgICBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUocGFyZW50KVxuICAgIGlmIChleGNsdWRlU3RhdGljUGFyZW50ICYmIHN0eWxlLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKG92ZXJmbG93UmVnZXgudGVzdChzdHlsZS5vdmVyZmxvdyArIHN0eWxlLm92ZXJmbG93WSArIHN0eWxlLm92ZXJmbG93WCkpIHtcbiAgICAgIHJldHVybiBwYXJlbnRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmJvZHlcbn1cblxuZnVuY3Rpb24gaXNUcmlnZ2VyVmlzaWJsZUluTmVhcmVzdFNjcm9sbENvbnRhaW5lcihcbiAgdGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHRSZWN0ID0gdGFyZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICBjb25zdCBjUmVjdCA9IGNvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgcmV0dXJuIHRSZWN0LnRvcCA+IGNSZWN0LnRvcCAmJiB0UmVjdC50b3AgPCBjUmVjdC5ib3R0b21cbn1cblxuLy8gUmVwb3NpdGlvbiB0aGUgbWVudSBvbiBzY3JvbGwsIHdpbmRvdyByZXNpemUsIGFuZCBlbGVtZW50IHJlc2l6ZS5cbmV4cG9ydCBmdW5jdGlvbiB1c2VEeW5hbWljUG9zaXRpb25pbmcoXG4gIHJlc29sdXRpb246IE1lbnVSZXNvbHV0aW9uIHwgbnVsbCxcbiAgdGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsLFxuICBvblJlcG9zaXRpb246ICgpID0+IHZvaWQsXG4gIG9uVmlzaWJpbGl0eUNoYW5nZT86IChpc0luVmlldzogYm9vbGVhbikgPT4gdm9pZCxcbikge1xuICBjb25zdCBbZWRpdG9yXSA9IHVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0YXJnZXRFbGVtZW50ICE9IG51bGwgJiYgcmVzb2x1dGlvbiAhPSBudWxsKSB7XG4gICAgICBjb25zdCByb290RWxlbWVudCA9IGVkaXRvci5nZXRSb290RWxlbWVudCgpXG4gICAgICBjb25zdCByb290U2Nyb2xsUGFyZW50ID1cbiAgICAgICAgcm9vdEVsZW1lbnQgIT0gbnVsbCA/IGdldFNjcm9sbFBhcmVudChyb290RWxlbWVudCwgZmFsc2UpIDogZG9jdW1lbnQuYm9keVxuICAgICAgbGV0IHRpY2tpbmcgPSBmYWxzZVxuICAgICAgbGV0IHByZXZpb3VzSXNJblZpZXcgPSBpc1RyaWdnZXJWaXNpYmxlSW5OZWFyZXN0U2Nyb2xsQ29udGFpbmVyKFxuICAgICAgICB0YXJnZXRFbGVtZW50LFxuICAgICAgICByb290U2Nyb2xsUGFyZW50LFxuICAgICAgKVxuICAgICAgY29uc3QgaGFuZGxlU2Nyb2xsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRpY2tpbmcpIHtcbiAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG9uUmVwb3NpdGlvbigpXG4gICAgICAgICAgICB0aWNraW5nID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRpY2tpbmcgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNJblZpZXcgPSBpc1RyaWdnZXJWaXNpYmxlSW5OZWFyZXN0U2Nyb2xsQ29udGFpbmVyKHRhcmdldEVsZW1lbnQsIHJvb3RTY3JvbGxQYXJlbnQpXG4gICAgICAgIGlmIChpc0luVmlldyAhPT0gcHJldmlvdXNJc0luVmlldykge1xuICAgICAgICAgIHByZXZpb3VzSXNJblZpZXcgPSBpc0luVmlld1xuICAgICAgICAgIGlmIChvblZpc2liaWxpdHlDaGFuZ2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgb25WaXNpYmlsaXR5Q2hhbmdlKGlzSW5WaWV3KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIob25SZXBvc2l0aW9uKVxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG9uUmVwb3NpdGlvbilcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbCwge1xuICAgICAgICBjYXB0dXJlOiB0cnVlLFxuICAgICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgfSlcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGFyZ2V0RWxlbWVudClcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZSh0YXJnZXRFbGVtZW50KVxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25SZXBvc2l0aW9uKVxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwsIHRydWUpXG4gICAgICB9XG4gICAgfVxuICB9LCBbdGFyZ2V0RWxlbWVudCwgZWRpdG9yLCBvblZpc2liaWxpdHlDaGFuZ2UsIG9uUmVwb3NpdGlvbiwgcmVzb2x1dGlvbl0pXG59XG5cbmV4cG9ydCBjb25zdCBTQ1JPTExfVFlQRUFIRUFEX09QVElPTl9JTlRPX1ZJRVdfQ09NTUFORDogTGV4aWNhbENvbW1hbmQ8e1xuICBpbmRleDogbnVtYmVyXG4gIG9wdGlvbjogU2xhc2hNZW51T3B0aW9uXG59PiA9IGNyZWF0ZUNvbW1hbmQoJ1NDUk9MTF9UWVBFQUhFQURfT1BUSU9OX0lOVE9fVklFV19DT01NQU5EJylcblxuZXhwb3J0IGZ1bmN0aW9uIExleGljYWxNZW51KHtcbiAgYW5jaG9yRWxlbWVudFJlZixcbiAgY2xvc2UsXG4gIGVkaXRvcixcbiAgLy8gZ3JvdXBzV2l0aE9wdGlvbnMgZmlsdGVyaW5nIGlzIGFscmVhZHkgaGFuZGxlZCBpbiBTbGFzaE1lbnUvaW5kZXgudHN4LiBUaHVzLCBncm91cHNXaXRoT3B0aW9ucyBhbHdheXMgY29udGFpbnMgdGhlIG1hdGNoaW5nIG9wdGlvbnMuXG4gIGdyb3Vwc1dpdGhPcHRpb25zLFxuICBtZW51UmVuZGVyRm4sXG4gIG9uU2VsZWN0T3B0aW9uLFxuICByZXNvbHV0aW9uLFxuICBzaG91bGRTcGxpdE5vZGVXaXRoUXVlcnkgPSBmYWxzZSxcbn06IHtcbiAgYW5jaG9yRWxlbWVudFJlZjogTXV0YWJsZVJlZk9iamVjdDxIVE1MRWxlbWVudD5cbiAgY2xvc2U6ICgpID0+IHZvaWRcbiAgZWRpdG9yOiBMZXhpY2FsRWRpdG9yXG4gIGdyb3Vwc1dpdGhPcHRpb25zOiBBcnJheTxTbGFzaE1lbnVHcm91cD5cbiAgbWVudVJlbmRlckZuOiBNZW51UmVuZGVyRm5cbiAgb25TZWxlY3RPcHRpb246IChcbiAgICBvcHRpb246IFNsYXNoTWVudU9wdGlvbixcbiAgICB0ZXh0Tm9kZUNvbnRhaW5pbmdRdWVyeTogVGV4dE5vZGUgfCBudWxsLFxuICAgIGNsb3NlTWVudTogKCkgPT4gdm9pZCxcbiAgICBtYXRjaGluZ1N0cmluZzogc3RyaW5nLFxuICApID0+IHZvaWRcbiAgcmVzb2x1dGlvbjogTWVudVJlc29sdXRpb25cbiAgc2hvdWxkU3BsaXROb2RlV2l0aFF1ZXJ5PzogYm9vbGVhblxufSk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbktleSwgc2V0U2VsZWN0ZWRPcHRpb25LZXldID0gdXNlU3RhdGU8bnVsbCB8IHN0cmluZz4obnVsbClcblxuICBjb25zdCBtYXRjaGluZ1N0cmluZyA9IChyZXNvbHV0aW9uLm1hdGNoICYmIHJlc29sdXRpb24ubWF0Y2gubWF0Y2hpbmdTdHJpbmcpIHx8ICcnXG5cbiAgY29uc3QgdXBkYXRlU2VsZWN0ZWRPcHRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBTbGFzaE1lbnVPcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IHJvb3RFbGVtID0gZWRpdG9yLmdldFJvb3RFbGVtZW50KClcbiAgICAgIGlmIChyb290RWxlbSAhPT0gbnVsbCkge1xuICAgICAgICByb290RWxlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsICd0eXBlYWhlYWQtaXRlbS0nICsgb3B0aW9uLmtleSlcbiAgICAgICAgc2V0U2VsZWN0ZWRPcHRpb25LZXkob3B0aW9uLmtleSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtlZGl0b3JdLFxuICApXG5cbiAgY29uc3Qgc2V0U2VsZWN0ZWRPcHRpb25LZXlUb0ZpcnN0TWF0Y2hpbmdPcHRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgLy8gc2V0IHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZmlyc3Qgb2YgdGhlIG1hdGNoaW5nIG9uZXNcbiAgICBpZiAoZ3JvdXBzV2l0aE9wdGlvbnMgIT09IG51bGwgJiYgbWF0Y2hpbmdTdHJpbmcgIT0gbnVsbCkge1xuICAgICAgLy8gZ3JvdXBzV2l0aE9wdGlvbnMgZmlsdGVyaW5nIGlzIGFscmVhZHkgaGFuZGxlZCBpbiBTbGFzaE1lbnUvaW5kZXgudHN4LiBUaHVzLCBncm91cHNXaXRoT3B0aW9ucyBhbHdheXMgY29udGFpbnMgdGhlIG1hdGNoaW5nIG9wdGlvbnMuXG4gICAgICBjb25zdCBhbGxPcHRpb25zID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLm9wdGlvbnMpXG5cbiAgICAgIGlmIChhbGxPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBmaXJzdE1hdGNoaW5nT3B0aW9uID0gYWxsT3B0aW9uc1swXVxuICAgICAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbihmaXJzdE1hdGNoaW5nT3B0aW9uKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2dyb3Vwc1dpdGhPcHRpb25zLCB1cGRhdGVTZWxlY3RlZE9wdGlvbiwgbWF0Y2hpbmdTdHJpbmddKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRPcHRpb25LZXlUb0ZpcnN0TWF0Y2hpbmdPcHRpb24oKVxuICB9LCBbbWF0Y2hpbmdTdHJpbmcsIHNldFNlbGVjdGVkT3B0aW9uS2V5VG9GaXJzdE1hdGNoaW5nT3B0aW9uXSlcblxuICBjb25zdCBzZWxlY3RPcHRpb25BbmRDbGVhblVwID0gdXNlQ2FsbGJhY2soXG4gICAgKHNlbGVjdGVkT3B0aW9uOiBTbGFzaE1lbnVPcHRpb24pID0+IHtcbiAgICAgIGVkaXRvci51cGRhdGUoKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZUNvbnRhaW5pbmdRdWVyeSA9XG4gICAgICAgICAgcmVzb2x1dGlvbi5tYXRjaCAhPSBudWxsICYmIHNob3VsZFNwbGl0Tm9kZVdpdGhRdWVyeVxuICAgICAgICAgICAgPyAkc3BsaXROb2RlQ29udGFpbmluZ1F1ZXJ5KHJlc29sdXRpb24ubWF0Y2gpXG4gICAgICAgICAgICA6IG51bGxcblxuICAgICAgICBvblNlbGVjdE9wdGlvbihcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbixcbiAgICAgICAgICB0ZXh0Tm9kZUNvbnRhaW5pbmdRdWVyeSxcbiAgICAgICAgICBjbG9zZSxcbiAgICAgICAgICByZXNvbHV0aW9uLm1hdGNoID8gcmVzb2x1dGlvbi5tYXRjaC5tYXRjaGluZ1N0cmluZyA6ICcnLFxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2VkaXRvciwgc2hvdWxkU3BsaXROb2RlV2l0aFF1ZXJ5LCByZXNvbHV0aW9uLm1hdGNoLCBvblNlbGVjdE9wdGlvbiwgY2xvc2VdLFxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdEVsZW0gPSBlZGl0b3IuZ2V0Um9vdEVsZW1lbnQoKVxuICAgICAgaWYgKHJvb3RFbGVtICE9PSBudWxsKSB7XG4gICAgICAgIHJvb3RFbGVtLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JylcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtlZGl0b3JdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGdyb3Vwc1dpdGhPcHRpb25zID09PSBudWxsKSB7XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbktleShudWxsKVxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRPcHRpb25LZXkgPT09IG51bGwpIHtcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9uS2V5VG9GaXJzdE1hdGNoaW5nT3B0aW9uKClcbiAgICB9XG4gIH0sIFtcbiAgICBncm91cHNXaXRoT3B0aW9ucyxcbiAgICBzZWxlY3RlZE9wdGlvbktleSxcbiAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbixcbiAgICBzZXRTZWxlY3RlZE9wdGlvbktleVRvRmlyc3RNYXRjaGluZ09wdGlvbixcbiAgXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiBtZXJnZVJlZ2lzdGVyKFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZChcbiAgICAgICAgU0NST0xMX1RZUEVBSEVBRF9PUFRJT05fSU5UT19WSUVXX0NPTU1BTkQsXG4gICAgICAgICh7IG9wdGlvbiB9KSA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvbi5yZWYgJiYgb3B0aW9uLnJlZi5jdXJyZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNjcm9sbEludG9WaWV3SWZOZWVkZWQob3B0aW9uLnJlZi5jdXJyZW50KVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgIClcbiAgfSwgW2VkaXRvciwgdXBkYXRlU2VsZWN0ZWRPcHRpb25dKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuIG1lcmdlUmVnaXN0ZXIoXG4gICAgICBlZGl0b3IucmVnaXN0ZXJDb21tYW5kPEtleWJvYXJkRXZlbnQ+KFxuICAgICAgICBLRVlfQVJST1dfRE9XTl9DT01NQU5ELFxuICAgICAgICAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV2ZW50ID0gcGF5bG9hZFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGdyb3Vwc1dpdGhPcHRpb25zICE9PSBudWxsICYmXG4gICAgICAgICAgICBncm91cHNXaXRoT3B0aW9ucy5sZW5ndGggJiZcbiAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uS2V5ICE9PSBudWxsXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxPcHRpb25zID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLm9wdGlvbnMpXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gYWxsT3B0aW9ucy5maW5kSW5kZXgoKG9wdGlvbikgPT4gb3B0aW9uLmtleSA9PT0gc2VsZWN0ZWRPcHRpb25LZXkpXG5cbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4ICE9PSBhbGxPcHRpb25zLmxlbmd0aCAtIDEgPyBzZWxlY3RlZEluZGV4ICsgMSA6IDBcblxuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWRPcHRpb24gPSBhbGxPcHRpb25zW25ld1NlbGVjdGVkSW5kZXhdXG5cbiAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uKG5ld1NlbGVjdGVkT3B0aW9uKVxuICAgICAgICAgICAgaWYgKG5ld1NlbGVjdGVkT3B0aW9uLnJlZiAhPSBudWxsICYmIG5ld1NlbGVjdGVkT3B0aW9uLnJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgIGVkaXRvci5kaXNwYXRjaENvbW1hbmQoU0NST0xMX1RZUEVBSEVBRF9PUFRJT05fSU5UT19WSUVXX0NPTU1BTkQsIHtcbiAgICAgICAgICAgICAgICBpbmRleDogbmV3U2VsZWN0ZWRJbmRleCxcbiAgICAgICAgICAgICAgICBvcHRpb246IG5ld1NlbGVjdGVkT3B0aW9uLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZDxLZXlib2FyZEV2ZW50PihcbiAgICAgICAgS0VZX0FSUk9XX1VQX0NPTU1BTkQsXG4gICAgICAgIChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXZlbnQgPSBwYXlsb2FkXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZ3JvdXBzV2l0aE9wdGlvbnMgIT09IG51bGwgJiZcbiAgICAgICAgICAgIGdyb3Vwc1dpdGhPcHRpb25zLmxlbmd0aCAmJlxuICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb25LZXkgIT09IG51bGxcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbE9wdGlvbnMgPSBncm91cHNXaXRoT3B0aW9ucy5mbGF0TWFwKChncm91cCkgPT4gZ3JvdXAub3B0aW9ucylcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPSBhbGxPcHRpb25zLmZpbmRJbmRleCgob3B0aW9uKSA9PiBvcHRpb24ua2V5ID09PSBzZWxlY3RlZE9wdGlvbktleSlcblxuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWRJbmRleCA9IHNlbGVjdGVkSW5kZXggIT09IDAgPyBzZWxlY3RlZEluZGV4IC0gMSA6IGFsbE9wdGlvbnMubGVuZ3RoIC0gMVxuXG4gICAgICAgICAgICBjb25zdCBuZXdTZWxlY3RlZE9wdGlvbiA9IGFsbE9wdGlvbnNbbmV3U2VsZWN0ZWRJbmRleF1cblxuICAgICAgICAgICAgdXBkYXRlU2VsZWN0ZWRPcHRpb24obmV3U2VsZWN0ZWRPcHRpb24pXG4gICAgICAgICAgICBpZiAobmV3U2VsZWN0ZWRPcHRpb24ucmVmICE9IG51bGwgJiYgbmV3U2VsZWN0ZWRPcHRpb24ucmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChuZXdTZWxlY3RlZE9wdGlvbi5yZWYuY3VycmVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIENPTU1BTkRfUFJJT1JJVFlfTE9XLFxuICAgICAgKSxcbiAgICAgIGVkaXRvci5yZWdpc3RlckNvbW1hbmQ8S2V5Ym9hcmRFdmVudD4oXG4gICAgICAgIEtFWV9FU0NBUEVfQ09NTUFORCxcbiAgICAgICAgKHBheWxvYWQpID0+IHtcbiAgICAgICAgICBjb25zdCBldmVudCA9IHBheWxvYWRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcbiAgICAgICAgICBjbG9zZSgpXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZDxLZXlib2FyZEV2ZW50PihcbiAgICAgICAgS0VZX1RBQl9DT01NQU5ELFxuICAgICAgICAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV2ZW50ID0gcGF5bG9hZFxuXG4gICAgICAgICAgaWYgKGdyb3Vwc1dpdGhPcHRpb25zID09PSBudWxsIHx8IHNlbGVjdGVkT3B0aW9uS2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYWxsT3B0aW9ucyA9IGdyb3Vwc1dpdGhPcHRpb25zLmZsYXRNYXAoKGdyb3VwKSA9PiBncm91cC5vcHRpb25zKVxuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gYWxsT3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi5rZXkgPT09IHNlbGVjdGVkT3B0aW9uS2V5KVxuICAgICAgICAgIGlmICghc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuICAgICAgICAgIHNlbGVjdE9wdGlvbkFuZENsZWFuVXAoc2VsZWN0ZWRPcHRpb24pXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZChcbiAgICAgICAgS0VZX0VOVEVSX0NPTU1BTkQsXG4gICAgICAgIChldmVudDogS2V5Ym9hcmRFdmVudCB8IG51bGwpID0+IHtcbiAgICAgICAgICBpZiAoZ3JvdXBzV2l0aE9wdGlvbnMgPT09IG51bGwgfHwgc2VsZWN0ZWRPcHRpb25LZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBhbGxPcHRpb25zID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLm9wdGlvbnMpXG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSBhbGxPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLmtleSA9PT0gc2VsZWN0ZWRPcHRpb25LZXkpXG4gICAgICAgICAgaWYgKCFzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGV2ZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxlY3RPcHRpb25BbmRDbGVhblVwKHNlbGVjdGVkT3B0aW9uKVxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIENPTU1BTkRfUFJJT1JJVFlfTE9XLFxuICAgICAgKSxcbiAgICApXG4gIH0sIFtcbiAgICBzZWxlY3RPcHRpb25BbmRDbGVhblVwLFxuICAgIGNsb3NlLFxuICAgIGVkaXRvcixcbiAgICBncm91cHNXaXRoT3B0aW9ucyxcbiAgICBzZWxlY3RlZE9wdGlvbktleSxcbiAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbixcbiAgXSlcblxuICBjb25zdCBsaXN0SXRlbVByb3BzID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgZ3JvdXBzV2l0aE9wdGlvbnMsXG4gICAgICBzZWxlY3RPcHRpb25BbmRDbGVhblVwLFxuICAgICAgc2VsZWN0ZWRPcHRpb25LZXksXG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbktleSxcbiAgICB9KSxcbiAgICBbc2VsZWN0T3B0aW9uQW5kQ2xlYW5VcCwgc2VsZWN0ZWRPcHRpb25LZXksIGdyb3Vwc1dpdGhPcHRpb25zXSxcbiAgKVxuXG4gIHJldHVybiBtZW51UmVuZGVyRm4oXG4gICAgYW5jaG9yRWxlbWVudFJlZixcbiAgICBsaXN0SXRlbVByb3BzLFxuICAgIHJlc29sdXRpb24ubWF0Y2ggPyByZXNvbHV0aW9uLm1hdGNoLm1hdGNoaW5nU3RyaW5nIDogJycsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZU1lbnVBbmNob3JSZWYoXG4gIHJlc29sdXRpb246IE1lbnVSZXNvbHV0aW9uIHwgbnVsbCxcbiAgc2V0UmVzb2x1dGlvbjogKHI6IE1lbnVSZXNvbHV0aW9uIHwgbnVsbCkgPT4gdm9pZCxcbiAgY2xhc3NOYW1lPzogc3RyaW5nLFxuKTogTXV0YWJsZVJlZk9iamVjdDxIVE1MRWxlbWVudD4ge1xuICBjb25zdCBbZWRpdG9yXSA9IHVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKVxuICBjb25zdCBhbmNob3JFbGVtZW50UmVmID0gdXNlUmVmPEhUTUxFbGVtZW50Pihkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSlcbiAgY29uc3QgcG9zaXRpb25NZW51ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHJvb3RFbGVtZW50ID0gZWRpdG9yLmdldFJvb3RFbGVtZW50KClcbiAgICBjb25zdCBjb250YWluZXJEaXYgPSBhbmNob3JFbGVtZW50UmVmLmN1cnJlbnRcblxuICAgIGNvbnN0IFZFUlRJQ0FMX09GRlNFVCA9IDMyIGFzIGNvbnN0XG5cbiAgICBjb25zdCBtZW51RWxlID0gY29udGFpbmVyRGl2LmZpcnN0Q2hpbGQgYXMgRWxlbWVudFxuICAgIGlmIChyb290RWxlbWVudCAhPT0gbnVsbCAmJiByZXNvbHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB7IGhlaWdodCwgbGVmdCwgdG9wLCB3aWR0aCB9ID0gcmVzb2x1dGlvbi5nZXRSZWN0KClcbiAgICAgIGNvbnRhaW5lckRpdi5zdHlsZS50b3AgPSBgJHt0b3AgKyB3aW5kb3cuc2Nyb2xsWSArIFZFUlRJQ0FMX09GRlNFVH1weGBcbiAgICAgIGNvbnRhaW5lckRpdi5zdHlsZS5sZWZ0ID0gYCR7bGVmdCArIHdpbmRvdy5zY3JvbGxYfXB4YFxuICAgICAgY29udGFpbmVyRGl2LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGBcbiAgICAgIGNvbnRhaW5lckRpdi5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YFxuICAgICAgaWYgKG1lbnVFbGUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgbWVudVJlY3QgPSBtZW51RWxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgIGNvbnN0IG1lbnVIZWlnaHQgPSBtZW51UmVjdC5oZWlnaHRcbiAgICAgICAgY29uc3QgbWVudVdpZHRoID0gbWVudVJlY3Qud2lkdGhcblxuICAgICAgICBjb25zdCByb290RWxlbWVudFJlY3QgPSByb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuXG4gICAgICAgIGlmIChsZWZ0ICsgbWVudVdpZHRoID4gcm9vdEVsZW1lbnRSZWN0LnJpZ2h0KSB7XG4gICAgICAgICAgY29udGFpbmVyRGl2LnN0eWxlLmxlZnQgPSBgJHtyb290RWxlbWVudFJlY3QucmlnaHQgLSBtZW51V2lkdGggKyB3aW5kb3cuc2Nyb2xsWH1weGBcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdvdWxkR29PZmZUb3BPZlNjcmVlbiA9IHRvcCA8IG1lbnVIZWlnaHRcbiAgICAgICAgY29uc3Qgd291bGRHb09mZkJvdHRvbU9mQ29udGFpbmVyID0gdG9wICsgbWVudUhlaWdodCA+IHJvb3RFbGVtZW50UmVjdC5ib3R0b21cblxuICAgICAgICAvLyBQb3NpdGlvbiBzbGFzaCBtZW51IGFib3ZlIHRoZSBjdXJzb3IgaW5zdGVhZCBvZiBiZWxvdyAoZGVmYXVsdCkgaWYgaXQgd291bGQgb3RoZXJ3aXNlIGdvIG9mZiB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4uXG4gICAgICAgIGlmIChcbiAgICAgICAgICAodG9wICsgbWVudUhlaWdodCA+IHdpbmRvdy5pbm5lckhlaWdodCB8fFxuICAgICAgICAgICAgKHdvdWxkR29PZmZCb3R0b21PZkNvbnRhaW5lciAmJiAhd291bGRHb09mZlRvcE9mU2NyZWVuKSkgJiZcbiAgICAgICAgICB0b3AgLSByb290RWxlbWVudFJlY3QudG9wID4gbWVudUhlaWdodFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBtYXJnaW4gPSAyNFxuICAgICAgICAgIGNvbnRhaW5lckRpdi5zdHlsZS50b3AgPSBgJHtcbiAgICAgICAgICAgIHRvcCArIFZFUlRJQ0FMX09GRlNFVCAtIG1lbnVIZWlnaHQgKyB3aW5kb3cuc2Nyb2xsWSAtIChoZWlnaHQgKyBtYXJnaW4pXG4gICAgICAgICAgfXB4YFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghY29udGFpbmVyRGl2LmlzQ29ubmVjdGVkKSB7XG4gICAgICAgIGlmIChjbGFzc05hbWUgIT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRhaW5lckRpdi5jbGFzc05hbWUgPSBjbGFzc05hbWVcbiAgICAgICAgfVxuICAgICAgICBjb250YWluZXJEaXYuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ1R5cGVhaGVhZCBtZW51JylcbiAgICAgICAgY29udGFpbmVyRGl2LnNldEF0dHJpYnV0ZSgnaWQnLCAndHlwZWFoZWFkLW1lbnUnKVxuICAgICAgICBjb250YWluZXJEaXYuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2xpc3Rib3gnKVxuICAgICAgICBjb250YWluZXJEaXYuc3R5bGUuZGlzcGxheSA9ICdibG9jaydcbiAgICAgICAgY29udGFpbmVyRGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJ1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChjb250YWluZXJEaXYpXG4gICAgICB9XG4gICAgICBhbmNob3JFbGVtZW50UmVmLmN1cnJlbnQgPSBjb250YWluZXJEaXZcbiAgICAgIHJvb3RFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1jb250cm9scycsICd0eXBlYWhlYWQtbWVudScpXG4gICAgfVxuICB9LCBbZWRpdG9yLCByZXNvbHV0aW9uLCBjbGFzc05hbWVdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgcm9vdEVsZW1lbnQgPSBlZGl0b3IuZ2V0Um9vdEVsZW1lbnQoKVxuICAgIGlmIChyZXNvbHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBwb3NpdGlvbk1lbnUoKVxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaWYgKHJvb3RFbGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgcm9vdEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckRpdiA9IGFuY2hvckVsZW1lbnRSZWYuY3VycmVudFxuICAgICAgICBpZiAoY29udGFpbmVyRGl2ICE9PSBudWxsICYmIGNvbnRhaW5lckRpdi5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgIGNvbnRhaW5lckRpdi5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCBbZWRpdG9yLCBwb3NpdGlvbk1lbnUsIHJlc29sdXRpb25dKVxuXG4gIGNvbnN0IG9uVmlzaWJpbGl0eUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChpc0luVmlldzogYm9vbGVhbikgPT4ge1xuICAgICAgaWYgKHJlc29sdXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgaWYgKCFpc0luVmlldykge1xuICAgICAgICAgIHNldFJlc29sdXRpb24obnVsbClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW3Jlc29sdXRpb24sIHNldFJlc29sdXRpb25dLFxuICApXG5cbiAgdXNlRHluYW1pY1Bvc2l0aW9uaW5nKHJlc29sdXRpb24sIGFuY2hvckVsZW1lbnRSZWYuY3VycmVudCwgcG9zaXRpb25NZW51LCBvblZpc2liaWxpdHlDaGFuZ2UpXG5cbiAgcmV0dXJuIGFuY2hvckVsZW1lbnRSZWZcbn1cblxuZXhwb3J0IHR5cGUgVHJpZ2dlckZuID0gKHRleHQ6IHN0cmluZywgZWRpdG9yOiBMZXhpY2FsRWRpdG9yKSA9PiBNZW51VGV4dE1hdGNoIHwgbnVsbFxuIl0sIm5hbWVzIjpbIlBVTkNUVUFUSU9OIiwiU2xhc2hNZW51R3JvdXAiLCJTbGFzaE1lbnVPcHRpb24iLCJnZXRTY3JvbGxQYXJlbnQiLCJ1c2VEeW5hbWljUG9zaXRpb25pbmciLCJTQ1JPTExfVFlQRUFIRUFEX09QVElPTl9JTlRPX1ZJRVdfQ09NTUFORCIsIkxleGljYWxNZW51IiwidXNlTWVudUFuY2hvclJlZiIsIm9wdGlvbnMiLCJ0aXRsZSIsIkljb24iLCJkaXNwbGF5TmFtZSIsImtleSIsImtleWJvYXJkU2hvcnRjdXQiLCJrZXl3b3JkcyIsIm9uU2VsZWN0IiwicmVmIiwiY29uc3RydWN0b3IiLCJjdXJyZW50Iiwic2V0UmVmRWxlbWVudCIsImJpbmQiLCJlbGVtZW50Iiwic2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCIsInRhcmdldCIsInR5cGVhaGVhZENvbnRhaW5lck5vZGUiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwidHlwZWFoZWFkUmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInRvcCIsImhlaWdodCIsIndpbmRvdyIsImlubmVySGVpZ2h0Iiwic2Nyb2xsSW50b1ZpZXciLCJibG9jayIsImdldEZ1bGxNYXRjaE9mZnNldCIsImRvY3VtZW50VGV4dCIsImVudHJ5VGV4dCIsIm9mZnNldCIsInRyaWdnZXJPZmZzZXQiLCJpIiwibGVuZ3RoIiwic3Vic3RyIiwiJHNwbGl0Tm9kZUNvbnRhaW5pbmdRdWVyeSIsIm1hdGNoIiwic2VsZWN0aW9uIiwiJGdldFNlbGVjdGlvbiIsIiRpc1JhbmdlU2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJhbmNob3IiLCJ0eXBlIiwiYW5jaG9yTm9kZSIsImdldE5vZGUiLCJpc1NpbXBsZVRleHQiLCJzZWxlY3Rpb25PZmZzZXQiLCJ0ZXh0Q29udGVudCIsImdldFRleHRDb250ZW50Iiwic2xpY2UiLCJjaGFyYWN0ZXJPZmZzZXQiLCJyZXBsYWNlYWJsZVN0cmluZyIsInF1ZXJ5T2Zmc2V0IiwibWF0Y2hpbmdTdHJpbmciLCJzdGFydE9mZnNldCIsIm5ld05vZGUiLCJzcGxpdFRleHQiLCJpbmNsdWRlSGlkZGVuIiwic3R5bGUiLCJnZXRDb21wdXRlZFN0eWxlIiwiZXhjbHVkZVN0YXRpY1BhcmVudCIsInBvc2l0aW9uIiwib3ZlcmZsb3dSZWdleCIsImJvZHkiLCJwYXJlbnQiLCJwYXJlbnRFbGVtZW50IiwidGVzdCIsIm92ZXJmbG93Iiwib3ZlcmZsb3dZIiwib3ZlcmZsb3dYIiwiaXNUcmlnZ2VyVmlzaWJsZUluTmVhcmVzdFNjcm9sbENvbnRhaW5lciIsInRhcmdldEVsZW1lbnQiLCJjb250YWluZXJFbGVtZW50IiwidFJlY3QiLCJjUmVjdCIsImJvdHRvbSIsInJlc29sdXRpb24iLCJvblJlcG9zaXRpb24iLCJvblZpc2liaWxpdHlDaGFuZ2UiLCJlZGl0b3IiLCJ1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IiwidXNlRWZmZWN0Iiwicm9vdEVsZW1lbnQiLCJnZXRSb290RWxlbWVudCIsInJvb3RTY3JvbGxQYXJlbnQiLCJ0aWNraW5nIiwicHJldmlvdXNJc0luVmlldyIsImhhbmRsZVNjcm9sbCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImlzSW5WaWV3IiwicmVzaXplT2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJjYXB0dXJlIiwicGFzc2l2ZSIsIm9ic2VydmUiLCJ1bm9ic2VydmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY3JlYXRlQ29tbWFuZCIsImFuY2hvckVsZW1lbnRSZWYiLCJjbG9zZSIsImdyb3Vwc1dpdGhPcHRpb25zIiwibWVudVJlbmRlckZuIiwib25TZWxlY3RPcHRpb24iLCJzaG91bGRTcGxpdE5vZGVXaXRoUXVlcnkiLCJzZWxlY3RlZE9wdGlvbktleSIsInNldFNlbGVjdGVkT3B0aW9uS2V5IiwidXNlU3RhdGUiLCJ1cGRhdGVTZWxlY3RlZE9wdGlvbiIsInVzZUNhbGxiYWNrIiwib3B0aW9uIiwicm9vdEVsZW0iLCJzZXRBdHRyaWJ1dGUiLCJzZXRTZWxlY3RlZE9wdGlvbktleVRvRmlyc3RNYXRjaGluZ09wdGlvbiIsImFsbE9wdGlvbnMiLCJmbGF0TWFwIiwiZ3JvdXAiLCJmaXJzdE1hdGNoaW5nT3B0aW9uIiwic2VsZWN0T3B0aW9uQW5kQ2xlYW5VcCIsInNlbGVjdGVkT3B0aW9uIiwidXBkYXRlIiwidGV4dE5vZGVDb250YWluaW5nUXVlcnkiLCJyZW1vdmVBdHRyaWJ1dGUiLCJ1c2VMYXlvdXRFZmZlY3QiLCJtZXJnZVJlZ2lzdGVyIiwicmVnaXN0ZXJDb21tYW5kIiwiQ09NTUFORF9QUklPUklUWV9MT1ciLCJLRVlfQVJST1dfRE9XTl9DT01NQU5EIiwicGF5bG9hZCIsImV2ZW50Iiwic2VsZWN0ZWRJbmRleCIsImZpbmRJbmRleCIsIm5ld1NlbGVjdGVkSW5kZXgiLCJuZXdTZWxlY3RlZE9wdGlvbiIsImRpc3BhdGNoQ29tbWFuZCIsImluZGV4IiwicHJldmVudERlZmF1bHQiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJLRVlfQVJST1dfVVBfQ09NTUFORCIsIktFWV9FU0NBUEVfQ09NTUFORCIsIktFWV9UQUJfQ09NTUFORCIsImZpbmQiLCJLRVlfRU5URVJfQ09NTUFORCIsImxpc3RJdGVtUHJvcHMiLCJ1c2VNZW1vIiwic2V0UmVzb2x1dGlvbiIsImNsYXNzTmFtZSIsInVzZVJlZiIsImNyZWF0ZUVsZW1lbnQiLCJwb3NpdGlvbk1lbnUiLCJjb250YWluZXJEaXYiLCJWRVJUSUNBTF9PRkZTRVQiLCJtZW51RWxlIiwiZmlyc3RDaGlsZCIsImxlZnQiLCJ3aWR0aCIsImdldFJlY3QiLCJzY3JvbGxZIiwic2Nyb2xsWCIsIm1lbnVSZWN0IiwibWVudUhlaWdodCIsIm1lbnVXaWR0aCIsInJvb3RFbGVtZW50UmVjdCIsInJpZ2h0Iiwid291bGRHb09mZlRvcE9mU2NyZWVuIiwid291bGRHb09mZkJvdHRvbU9mQ29udGFpbmVyIiwibWFyZ2luIiwiaXNDb25uZWN0ZWQiLCJkaXNwbGF5IiwiYXBwZW5kIiwicmVtb3ZlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQThCYUEsV0FBVztlQUFYQTs7SUFFQUMsY0FBYztlQUFkQTs7SUFLQUMsZUFBZTtlQUFmQTs7SUErSEdDLGVBQWU7ZUFBZkE7O0lBZ0NBQyxxQkFBcUI7ZUFBckJBOztJQWlESEMseUNBQXlDO2VBQXpDQTs7SUFLR0MsV0FBVztlQUFYQTs7SUE4UEFDLGdCQUFnQjtlQUFoQkE7Ozt3Q0FwZjBCO3VCQUNaO3lCQVd2Qjt1QkFDNEU7QUFhNUUsTUFBTVAsY0FBYztBQUVwQixNQUFNQztJQUNYTyxRQUErQjtJQUMvQkMsTUFBYTtBQUNmO0FBRU8sTUFBTVA7SUFDWFEsS0FBYztJQUVkQyxZQUFrRDtJQUNsRCxtQkFBbUI7SUFDbkJDLElBQVc7SUFDWCxNQUFNO0lBQ05DLGlCQUF5QjtJQUN6Qix1QkFBdUI7SUFDdkJDLFNBQXVCO0lBQ3ZCLDRDQUE0QztJQUM1Q0MsU0FBMkY7SUFFM0ZDLElBQTBDO0lBRTFDLDhCQUE4QjtJQUM5QlAsTUFBYTtJQUViUSxZQUNFUixLQUFhLEVBQ2JELE9BTUMsQ0FDRDtRQUNBLElBQUksQ0FBQ0ksR0FBRyxHQUFHSDtRQUNYLElBQUksQ0FBQ08sR0FBRyxHQUFHO1lBQUVFLFNBQVM7UUFBSztRQUMzQixJQUFJLENBQUNDLGFBQWEsR0FBRyxJQUFJLENBQUNBLGFBQWEsQ0FBQ0MsSUFBSSxDQUFDLElBQUk7UUFFakQsSUFBSSxDQUFDWCxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDRSxXQUFXLEdBQUdILFFBQVFHLFdBQVc7UUFDdEMsSUFBSSxDQUFDRyxRQUFRLEdBQUdOLFFBQVFNLFFBQVEsSUFBSSxFQUFFO1FBQ3RDLElBQUksQ0FBQ0osSUFBSSxHQUFHRixRQUFRRSxJQUFJO1FBQ3hCLElBQUksQ0FBQ0csZ0JBQWdCLEdBQUdMLFFBQVFLLGdCQUFnQjtRQUNoRCxJQUFJLENBQUNFLFFBQVEsR0FBR1AsUUFBUU8sUUFBUSxDQUFDSyxJQUFJLENBQUMsSUFBSTtJQUM1QztJQUVBRCxjQUFjRSxPQUEyQixFQUFFO1FBQ3pDLElBQUksQ0FBQ0wsR0FBRyxHQUFHO1lBQUVFLFNBQVNHO1FBQVE7SUFDaEM7QUFDRjtBQWFBLE1BQU1DLHlCQUF5QixDQUFDQztJQUM5QixNQUFNQyx5QkFBeUJDLFNBQVNDLGNBQWMsQ0FBQztJQUN2RCxJQUFJLENBQUNGLHdCQUF3QjtJQUU3QixNQUFNRyxnQkFBZ0JILHVCQUF1QkkscUJBQXFCO0lBRWxFLElBQUlELGNBQWNFLEdBQUcsR0FBR0YsY0FBY0csTUFBTSxHQUFHQyxPQUFPQyxXQUFXLEVBQUU7UUFDakVSLHVCQUF1QlMsY0FBYyxDQUFDO1lBQ3BDQyxPQUFPO1FBQ1Q7SUFDRjtJQUVBLElBQUlQLGNBQWNFLEdBQUcsR0FBRyxHQUFHO1FBQ3pCTCx1QkFBdUJTLGNBQWMsQ0FBQztZQUNwQ0MsT0FBTztRQUNUO0lBQ0Y7SUFFQVgsT0FBT1UsY0FBYyxDQUFDO1FBQUVDLE9BQU87SUFBVTtBQUMzQztBQUVBOzs7Q0FHQyxHQUNELFNBQVNDLG1CQUFtQkMsWUFBb0IsRUFBRUMsU0FBaUIsRUFBRUMsTUFBYztJQUNqRixJQUFJQyxnQkFBZ0JEO0lBQ3BCLElBQUssSUFBSUUsSUFBSUQsZUFBZUMsS0FBS0gsVUFBVUksTUFBTSxFQUFFRCxJQUFLO1FBQ3RELElBQUlKLGFBQWFNLE1BQU0sQ0FBQyxDQUFDRixPQUFPSCxVQUFVSyxNQUFNLENBQUMsR0FBR0YsSUFBSTtZQUN0REQsZ0JBQWdCQztRQUNsQjtJQUNGO0lBQ0EsT0FBT0Q7QUFDVDtBQUVBOzs7Q0FHQyxHQUNELFNBQVNJLDBCQUEwQkMsS0FBb0I7SUFDckQsTUFBTUMsWUFBWUMsSUFBQUEsc0JBQWE7SUFDL0IsSUFBSSxDQUFDQyxJQUFBQSwwQkFBaUIsRUFBQ0YsY0FBYyxDQUFDQSxVQUFVRyxXQUFXLElBQUk7UUFDN0QsT0FBTztJQUNUO0lBQ0EsTUFBTUMsU0FBU0osVUFBVUksTUFBTTtJQUMvQixJQUFJQSxPQUFPQyxJQUFJLEtBQUssUUFBUTtRQUMxQixPQUFPO0lBQ1Q7SUFDQSxNQUFNQyxhQUFhRixPQUFPRyxPQUFPO0lBQ2pDLElBQUksQ0FBQ0QsV0FBV0UsWUFBWSxJQUFJO1FBQzlCLE9BQU87SUFDVDtJQUNBLE1BQU1DLGtCQUFrQkwsT0FBT1gsTUFBTTtJQUNyQyxNQUFNaUIsY0FBY0osV0FBV0ssY0FBYyxHQUFHQyxLQUFLLENBQUMsR0FBR0g7SUFDekQsTUFBTUksa0JBQWtCZCxNQUFNZSxpQkFBaUIsQ0FBQ2xCLE1BQU07SUFDdEQsTUFBTW1CLGNBQWN6QixtQkFBbUJvQixhQUFhWCxNQUFNaUIsY0FBYyxFQUFFSDtJQUMxRSxNQUFNSSxjQUFjUixrQkFBa0JNO0lBQ3RDLElBQUlFLGNBQWMsR0FBRztRQUNuQixPQUFPO0lBQ1Q7SUFDQSxJQUFJQztJQUNKLElBQUlELGdCQUFnQixHQUFHO1FBQ3BCLENBQUNDLFFBQVEsR0FBR1osV0FBV2EsU0FBUyxDQUFDVjtJQUNwQyxPQUFPO1FBQ0osR0FBR1MsUUFBUSxHQUFHWixXQUFXYSxTQUFTLENBQUNGLGFBQWFSO0lBQ25EO0lBRUEsT0FBT1M7QUFDVDtBQUdPLFNBQVM1RCxnQkFDZGtCLE9BQW9CLEVBQ3BCNEMsYUFBc0I7SUFFdEIsSUFBSUMsUUFBUUMsaUJBQWlCOUM7SUFDN0IsTUFBTStDLHNCQUFzQkYsTUFBTUcsUUFBUSxLQUFLO0lBQy9DLE1BQU1DLGdCQUFnQkwsZ0JBQWdCLHlCQUF5QjtJQUMvRCxJQUFJQyxNQUFNRyxRQUFRLEtBQUssU0FBUztRQUM5QixPQUFPNUMsU0FBUzhDLElBQUk7SUFDdEI7SUFDQSxJQUFLLElBQUlDLFNBQTZCbkQsU0FBVW1ELFNBQVNBLE9BQU9DLGFBQWEsRUFBSztRQUNoRlAsUUFBUUMsaUJBQWlCSztRQUN6QixJQUFJSix1QkFBdUJGLE1BQU1HLFFBQVEsS0FBSyxVQUFVO1lBQ3REO1FBQ0Y7UUFDQSxJQUFJQyxjQUFjSSxJQUFJLENBQUNSLE1BQU1TLFFBQVEsR0FBR1QsTUFBTVUsU0FBUyxHQUFHVixNQUFNVyxTQUFTLEdBQUc7WUFDMUUsT0FBT0w7UUFDVDtJQUNGO0lBQ0EsT0FBTy9DLFNBQVM4QyxJQUFJO0FBQ3RCO0FBRUEsU0FBU08seUNBQ1BDLGFBQTBCLEVBQzFCQyxnQkFBNkI7SUFFN0IsTUFBTUMsUUFBUUYsY0FBY25ELHFCQUFxQjtJQUNqRCxNQUFNc0QsUUFBUUYsaUJBQWlCcEQscUJBQXFCO0lBQ3BELE9BQU9xRCxNQUFNcEQsR0FBRyxHQUFHcUQsTUFBTXJELEdBQUcsSUFBSW9ELE1BQU1wRCxHQUFHLEdBQUdxRCxNQUFNQyxNQUFNO0FBQzFEO0FBR08sU0FBUy9FLHNCQUNkZ0YsVUFBaUMsRUFDakNMLGFBQWlDLEVBQ2pDTSxZQUF3QixFQUN4QkMsa0JBQWdEO0lBRWhELE1BQU0sQ0FBQ0MsT0FBTyxHQUFHQyxJQUFBQSxpREFBeUI7SUFDMUNDLElBQUFBLGdCQUFTLEVBQUM7UUFDUixJQUFJVixpQkFBaUIsUUFBUUssY0FBYyxNQUFNO1lBQy9DLE1BQU1NLGNBQWNILE9BQU9JLGNBQWM7WUFDekMsTUFBTUMsbUJBQ0pGLGVBQWUsT0FBT3ZGLGdCQUFnQnVGLGFBQWEsU0FBU2pFLFNBQVM4QyxJQUFJO1lBQzNFLElBQUlzQixVQUFVO1lBQ2QsSUFBSUMsbUJBQW1CaEIseUNBQ3JCQyxlQUNBYTtZQUVGLE1BQU1HLGVBQWU7Z0JBQ25CLElBQUksQ0FBQ0YsU0FBUztvQkFDWjlELE9BQU9pRSxxQkFBcUIsQ0FBQzt3QkFDM0JYO3dCQUNBUSxVQUFVO29CQUNaO29CQUNBQSxVQUFVO2dCQUNaO2dCQUNBLE1BQU1JLFdBQVduQix5Q0FBeUNDLGVBQWVhO2dCQUN6RSxJQUFJSyxhQUFhSCxrQkFBa0I7b0JBQ2pDQSxtQkFBbUJHO29CQUNuQixJQUFJWCxzQkFBc0IsTUFBTTt3QkFDOUJBLG1CQUFtQlc7b0JBQ3JCO2dCQUNGO1lBQ0Y7WUFDQSxNQUFNQyxpQkFBaUIsSUFBSUMsZUFBZWQ7WUFDMUN0RCxPQUFPcUUsZ0JBQWdCLENBQUMsVUFBVWY7WUFDbEM1RCxTQUFTMkUsZ0JBQWdCLENBQUMsVUFBVUwsY0FBYztnQkFDaERNLFNBQVM7Z0JBQ1RDLFNBQVM7WUFDWDtZQUNBSixlQUFlSyxPQUFPLENBQUN4QjtZQUN2QixPQUFPO2dCQUNMbUIsZUFBZU0sU0FBUyxDQUFDekI7Z0JBQ3pCaEQsT0FBTzBFLG1CQUFtQixDQUFDLFVBQVVwQjtnQkFDckM1RCxTQUFTZ0YsbUJBQW1CLENBQUMsVUFBVVYsY0FBYztZQUN2RDtRQUNGO0lBQ0YsR0FBRztRQUFDaEI7UUFBZVE7UUFBUUQ7UUFBb0JEO1FBQWNEO0tBQVc7QUFDMUU7QUFFTyxNQUFNL0UsNENBR1JxRyxJQUFBQSxzQkFBYSxFQUFDO0FBRVosU0FBU3BHLFlBQVksRUFDMUJxRyxnQkFBZ0IsRUFDaEJDLEtBQUssRUFDTHJCLE1BQU0sRUFDTix1SUFBdUk7QUFDdklzQixpQkFBaUIsRUFDakJDLFlBQVksRUFDWkMsY0FBYyxFQUNkM0IsVUFBVSxFQUNWNEIsMkJBQTJCLEtBQUssRUFlakM7SUFDQyxNQUFNLENBQUNDLG1CQUFtQkMscUJBQXFCLEdBQUdDLElBQUFBLGVBQVEsRUFBZ0I7SUFFMUUsTUFBTXRELGlCQUFpQixBQUFDdUIsV0FBV3hDLEtBQUssSUFBSXdDLFdBQVd4QyxLQUFLLENBQUNpQixjQUFjLElBQUs7SUFFaEYsTUFBTXVELHVCQUF1QkMsSUFBQUEsa0JBQVcsRUFDdEMsQ0FBQ0M7UUFDQyxNQUFNQyxXQUFXaEMsT0FBT0ksY0FBYztRQUN0QyxJQUFJNEIsYUFBYSxNQUFNO1lBQ3JCQSxTQUFTQyxZQUFZLENBQUMseUJBQXlCLG9CQUFvQkYsT0FBTzFHLEdBQUc7WUFDN0VzRyxxQkFBcUJJLE9BQU8xRyxHQUFHO1FBQ2pDO0lBQ0YsR0FDQTtRQUFDMkU7S0FBTztJQUdWLE1BQU1rQyw0Q0FBNENKLElBQUFBLGtCQUFXLEVBQUM7UUFDNUQsd0RBQXdEO1FBQ3hELElBQUlSLHNCQUFzQixRQUFRaEQsa0JBQWtCLE1BQU07WUFDeEQsdUlBQXVJO1lBQ3ZJLE1BQU02RCxhQUFhYixrQkFBa0JjLE9BQU8sQ0FBQyxDQUFDQyxRQUFVQSxNQUFNcEgsT0FBTztZQUVyRSxJQUFJa0gsV0FBV2pGLE1BQU0sRUFBRTtnQkFDckIsTUFBTW9GLHNCQUFzQkgsVUFBVSxDQUFDLEVBQUU7Z0JBQ3pDTixxQkFBcUJTO1lBQ3ZCO1FBQ0Y7SUFDRixHQUFHO1FBQUNoQjtRQUFtQk87UUFBc0J2RDtLQUFlO0lBRTVENEIsSUFBQUEsZ0JBQVMsRUFBQztRQUNSZ0M7SUFDRixHQUFHO1FBQUM1RDtRQUFnQjREO0tBQTBDO0lBRTlELE1BQU1LLHlCQUF5QlQsSUFBQUEsa0JBQVcsRUFDeEMsQ0FBQ1U7UUFDQ3hDLE9BQU95QyxNQUFNLENBQUM7WUFDWixNQUFNQywwQkFDSjdDLFdBQVd4QyxLQUFLLElBQUksUUFBUW9FLDJCQUN4QnJFLDBCQUEwQnlDLFdBQVd4QyxLQUFLLElBQzFDO1lBRU5tRSxlQUNFZ0IsZ0JBQ0FFLHlCQUNBckIsT0FDQXhCLFdBQVd4QyxLQUFLLEdBQUd3QyxXQUFXeEMsS0FBSyxDQUFDaUIsY0FBYyxHQUFHO1FBRXpEO0lBQ0YsR0FDQTtRQUFDMEI7UUFBUXlCO1FBQTBCNUIsV0FBV3hDLEtBQUs7UUFBRW1FO1FBQWdCSDtLQUFNO0lBRzdFbkIsSUFBQUEsZ0JBQVMsRUFBQztRQUNSLE9BQU87WUFDTCxNQUFNOEIsV0FBV2hDLE9BQU9JLGNBQWM7WUFDdEMsSUFBSTRCLGFBQWEsTUFBTTtnQkFDckJBLFNBQVNXLGVBQWUsQ0FBQztZQUMzQjtRQUNGO0lBQ0YsR0FBRztRQUFDM0M7S0FBTztJQUVYNEMsSUFBQUEsc0JBQWUsRUFBQztRQUNkLElBQUl0QixzQkFBc0IsTUFBTTtZQUM5QksscUJBQXFCO1FBQ3ZCLE9BQU8sSUFBSUQsc0JBQXNCLE1BQU07WUFDckNRO1FBQ0Y7SUFDRixHQUFHO1FBQ0RaO1FBQ0FJO1FBQ0FHO1FBQ0FLO0tBQ0Q7SUFFRGhDLElBQUFBLGdCQUFTLEVBQUM7UUFDUixPQUFPMkMsSUFBQUEsb0JBQWEsRUFDbEI3QyxPQUFPOEMsZUFBZSxDQUNwQmhJLDJDQUNBLENBQUMsRUFBRWlILE1BQU0sRUFBRTtZQUNULElBQUlBLE9BQU90RyxHQUFHLElBQUlzRyxPQUFPdEcsR0FBRyxDQUFDRSxPQUFPLElBQUksTUFBTTtnQkFDNUNJLHVCQUF1QmdHLE9BQU90RyxHQUFHLENBQUNFLE9BQU87Z0JBQ3pDLE9BQU87WUFDVDtZQUVBLE9BQU87UUFDVCxHQUNBb0gsNkJBQW9CO0lBRzFCLEdBQUc7UUFBQy9DO1FBQVE2QjtLQUFxQjtJQUVqQzNCLElBQUFBLGdCQUFTLEVBQUM7UUFDUixPQUFPMkMsSUFBQUEsb0JBQWEsRUFDbEI3QyxPQUFPOEMsZUFBZSxDQUNwQkUsK0JBQXNCLEVBQ3RCLENBQUNDO1lBQ0MsTUFBTUMsUUFBUUQ7WUFDZCxJQUNFM0Isc0JBQXNCLFFBQ3RCQSxrQkFBa0JwRSxNQUFNLElBQ3hCd0Usc0JBQXNCLE1BQ3RCO2dCQUNBLE1BQU1TLGFBQWFiLGtCQUFrQmMsT0FBTyxDQUFDLENBQUNDLFFBQVVBLE1BQU1wSCxPQUFPO2dCQUNyRSxNQUFNa0ksZ0JBQWdCaEIsV0FBV2lCLFNBQVMsQ0FBQyxDQUFDckIsU0FBV0EsT0FBTzFHLEdBQUcsS0FBS3FHO2dCQUV0RSxNQUFNMkIsbUJBQW1CRixrQkFBa0JoQixXQUFXakYsTUFBTSxHQUFHLElBQUlpRyxnQkFBZ0IsSUFBSTtnQkFFdkYsTUFBTUcsb0JBQW9CbkIsVUFBVSxDQUFDa0IsaUJBQWlCO2dCQUV0RHhCLHFCQUFxQnlCO2dCQUNyQixJQUFJQSxrQkFBa0I3SCxHQUFHLElBQUksUUFBUTZILGtCQUFrQjdILEdBQUcsQ0FBQ0UsT0FBTyxFQUFFO29CQUNsRXFFLE9BQU91RCxlQUFlLENBQUN6SSwyQ0FBMkM7d0JBQ2hFMEksT0FBT0g7d0JBQ1B0QixRQUFRdUI7b0JBQ1Y7Z0JBQ0Y7Z0JBQ0FKLE1BQU1PLGNBQWM7Z0JBQ3BCUCxNQUFNUSx3QkFBd0I7WUFDaEM7WUFDQSxPQUFPO1FBQ1QsR0FDQVgsNkJBQW9CLEdBRXRCL0MsT0FBTzhDLGVBQWUsQ0FDcEJhLDZCQUFvQixFQUNwQixDQUFDVjtZQUNDLE1BQU1DLFFBQVFEO1lBQ2QsSUFDRTNCLHNCQUFzQixRQUN0QkEsa0JBQWtCcEUsTUFBTSxJQUN4QndFLHNCQUFzQixNQUN0QjtnQkFDQSxNQUFNUyxhQUFhYixrQkFBa0JjLE9BQU8sQ0FBQyxDQUFDQyxRQUFVQSxNQUFNcEgsT0FBTztnQkFDckUsTUFBTWtJLGdCQUFnQmhCLFdBQVdpQixTQUFTLENBQUMsQ0FBQ3JCLFNBQVdBLE9BQU8xRyxHQUFHLEtBQUtxRztnQkFFdEUsTUFBTTJCLG1CQUFtQkYsa0JBQWtCLElBQUlBLGdCQUFnQixJQUFJaEIsV0FBV2pGLE1BQU0sR0FBRztnQkFFdkYsTUFBTW9HLG9CQUFvQm5CLFVBQVUsQ0FBQ2tCLGlCQUFpQjtnQkFFdER4QixxQkFBcUJ5QjtnQkFDckIsSUFBSUEsa0JBQWtCN0gsR0FBRyxJQUFJLFFBQVE2SCxrQkFBa0I3SCxHQUFHLENBQUNFLE9BQU8sRUFBRTtvQkFDbEVJLHVCQUF1QnVILGtCQUFrQjdILEdBQUcsQ0FBQ0UsT0FBTztnQkFDdEQ7Z0JBQ0F1SCxNQUFNTyxjQUFjO2dCQUNwQlAsTUFBTVEsd0JBQXdCO1lBQ2hDO1lBQ0EsT0FBTztRQUNULEdBQ0FYLDZCQUFvQixHQUV0Qi9DLE9BQU84QyxlQUFlLENBQ3BCYywyQkFBa0IsRUFDbEIsQ0FBQ1g7WUFDQyxNQUFNQyxRQUFRRDtZQUNkQyxNQUFNTyxjQUFjO1lBQ3BCUCxNQUFNUSx3QkFBd0I7WUFDOUJyQztZQUNBLE9BQU87UUFDVCxHQUNBMEIsNkJBQW9CLEdBRXRCL0MsT0FBTzhDLGVBQWUsQ0FDcEJlLHdCQUFlLEVBQ2YsQ0FBQ1o7WUFDQyxNQUFNQyxRQUFRRDtZQUVkLElBQUkzQixzQkFBc0IsUUFBUUksc0JBQXNCLE1BQU07Z0JBQzVELE9BQU87WUFDVDtZQUNBLE1BQU1TLGFBQWFiLGtCQUFrQmMsT0FBTyxDQUFDLENBQUNDLFFBQVVBLE1BQU1wSCxPQUFPO1lBQ3JFLE1BQU11SCxpQkFBaUJMLFdBQVcyQixJQUFJLENBQUMsQ0FBQy9CLFNBQVdBLE9BQU8xRyxHQUFHLEtBQUtxRztZQUNsRSxJQUFJLENBQUNjLGdCQUFnQjtnQkFDbkIsT0FBTztZQUNUO1lBRUFVLE1BQU1PLGNBQWM7WUFDcEJQLE1BQU1RLHdCQUF3QjtZQUM5Qm5CLHVCQUF1QkM7WUFDdkIsT0FBTztRQUNULEdBQ0FPLDZCQUFvQixHQUV0Qi9DLE9BQU84QyxlQUFlLENBQ3BCaUIsMEJBQWlCLEVBQ2pCLENBQUNiO1lBQ0MsSUFBSTVCLHNCQUFzQixRQUFRSSxzQkFBc0IsTUFBTTtnQkFDNUQsT0FBTztZQUNUO1lBQ0EsTUFBTVMsYUFBYWIsa0JBQWtCYyxPQUFPLENBQUMsQ0FBQ0MsUUFBVUEsTUFBTXBILE9BQU87WUFDckUsTUFBTXVILGlCQUFpQkwsV0FBVzJCLElBQUksQ0FBQyxDQUFDL0IsU0FBV0EsT0FBTzFHLEdBQUcsS0FBS3FHO1lBQ2xFLElBQUksQ0FBQ2MsZ0JBQWdCO2dCQUNuQixPQUFPO1lBQ1Q7WUFFQSxJQUFJVSxVQUFVLE1BQU07Z0JBQ2xCQSxNQUFNTyxjQUFjO2dCQUNwQlAsTUFBTVEsd0JBQXdCO1lBQ2hDO1lBQ0FuQix1QkFBdUJDO1lBQ3ZCLE9BQU87UUFDVCxHQUNBTyw2QkFBb0I7SUFHMUIsR0FBRztRQUNEUjtRQUNBbEI7UUFDQXJCO1FBQ0FzQjtRQUNBSTtRQUNBRztLQUNEO0lBRUQsTUFBTW1DLGdCQUFnQkMsSUFBQUEsY0FBTyxFQUMzQixJQUFPLENBQUE7WUFDTDNDO1lBQ0FpQjtZQUNBYjtZQUNBQztRQUNGLENBQUEsR0FDQTtRQUFDWTtRQUF3QmI7UUFBbUJKO0tBQWtCO0lBR2hFLE9BQU9DLGFBQ0xILGtCQUNBNEMsZUFDQW5FLFdBQVd4QyxLQUFLLEdBQUd3QyxXQUFXeEMsS0FBSyxDQUFDaUIsY0FBYyxHQUFHO0FBRXpEO0FBRU8sU0FBU3RELGlCQUNkNkUsVUFBaUMsRUFDakNxRSxhQUFpRCxFQUNqREMsU0FBa0I7SUFFbEIsTUFBTSxDQUFDbkUsT0FBTyxHQUFHQyxJQUFBQSxpREFBeUI7SUFDMUMsTUFBTW1CLG1CQUFtQmdELElBQUFBLGFBQU0sRUFBY2xJLFNBQVNtSSxhQUFhLENBQUM7SUFDcEUsTUFBTUMsZUFBZXhDLElBQUFBLGtCQUFXLEVBQUM7UUFDL0IsTUFBTTNCLGNBQWNILE9BQU9JLGNBQWM7UUFDekMsTUFBTW1FLGVBQWVuRCxpQkFBaUJ6RixPQUFPO1FBRTdDLE1BQU02SSxrQkFBa0I7UUFFeEIsTUFBTUMsVUFBVUYsYUFBYUcsVUFBVTtRQUN2QyxJQUFJdkUsZ0JBQWdCLFFBQVFOLGVBQWUsTUFBTTtZQUMvQyxNQUFNLEVBQUV0RCxNQUFNLEVBQUVvSSxJQUFJLEVBQUVySSxHQUFHLEVBQUVzSSxLQUFLLEVBQUUsR0FBRy9FLFdBQVdnRixPQUFPO1lBQ3ZETixhQUFhNUYsS0FBSyxDQUFDckMsR0FBRyxHQUFHLENBQUMsRUFBRUEsTUFBTUUsT0FBT3NJLE9BQU8sR0FBR04sZ0JBQWdCLEVBQUUsQ0FBQztZQUN0RUQsYUFBYTVGLEtBQUssQ0FBQ2dHLElBQUksR0FBRyxDQUFDLEVBQUVBLE9BQU9uSSxPQUFPdUksT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN0RFIsYUFBYTVGLEtBQUssQ0FBQ3BDLE1BQU0sR0FBRyxDQUFDLEVBQUVBLE9BQU8sRUFBRSxDQUFDO1lBQ3pDZ0ksYUFBYTVGLEtBQUssQ0FBQ2lHLEtBQUssR0FBRyxDQUFDLEVBQUVBLE1BQU0sRUFBRSxDQUFDO1lBQ3ZDLElBQUlILFlBQVksTUFBTTtnQkFDcEIsTUFBTU8sV0FBV1AsUUFBUXBJLHFCQUFxQjtnQkFDOUMsTUFBTTRJLGFBQWFELFNBQVN6SSxNQUFNO2dCQUNsQyxNQUFNMkksWUFBWUYsU0FBU0osS0FBSztnQkFFaEMsTUFBTU8sa0JBQWtCaEYsWUFBWTlELHFCQUFxQjtnQkFFekQsSUFBSXNJLE9BQU9PLFlBQVlDLGdCQUFnQkMsS0FBSyxFQUFFO29CQUM1Q2IsYUFBYTVGLEtBQUssQ0FBQ2dHLElBQUksR0FBRyxDQUFDLEVBQUVRLGdCQUFnQkMsS0FBSyxHQUFHRixZQUFZMUksT0FBT3VJLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3JGO2dCQUVBLE1BQU1NLHdCQUF3Qi9JLE1BQU0ySTtnQkFDcEMsTUFBTUssOEJBQThCaEosTUFBTTJJLGFBQWFFLGdCQUFnQnZGLE1BQU07Z0JBRTdFLHlIQUF5SDtnQkFDekgsSUFDRSxBQUFDdEQsQ0FBQUEsTUFBTTJJLGFBQWF6SSxPQUFPQyxXQUFXLElBQ25DNkksK0JBQStCLENBQUNELHFCQUFxQixLQUN4RC9JLE1BQU02SSxnQkFBZ0I3SSxHQUFHLEdBQUcySSxZQUM1QjtvQkFDQSxNQUFNTSxTQUFTO29CQUNmaEIsYUFBYTVGLEtBQUssQ0FBQ3JDLEdBQUcsR0FBRyxDQUFDLEVBQ3hCQSxNQUFNa0ksa0JBQWtCUyxhQUFhekksT0FBT3NJLE9BQU8sR0FBSXZJLENBQUFBLFNBQVNnSixNQUFLLEVBQ3RFLEVBQUUsQ0FBQztnQkFDTjtZQUNGO1lBRUEsSUFBSSxDQUFDaEIsYUFBYWlCLFdBQVcsRUFBRTtnQkFDN0IsSUFBSXJCLGFBQWEsTUFBTTtvQkFDckJJLGFBQWFKLFNBQVMsR0FBR0E7Z0JBQzNCO2dCQUNBSSxhQUFhdEMsWUFBWSxDQUFDLGNBQWM7Z0JBQ3hDc0MsYUFBYXRDLFlBQVksQ0FBQyxNQUFNO2dCQUNoQ3NDLGFBQWF0QyxZQUFZLENBQUMsUUFBUTtnQkFDbENzQyxhQUFhNUYsS0FBSyxDQUFDOEcsT0FBTyxHQUFHO2dCQUM3QmxCLGFBQWE1RixLQUFLLENBQUNHLFFBQVEsR0FBRztnQkFDOUI1QyxTQUFTOEMsSUFBSSxDQUFDMEcsTUFBTSxDQUFDbkI7WUFDdkI7WUFDQW5ELGlCQUFpQnpGLE9BQU8sR0FBRzRJO1lBQzNCcEUsWUFBWThCLFlBQVksQ0FBQyxpQkFBaUI7UUFDNUM7SUFDRixHQUFHO1FBQUNqQztRQUFRSDtRQUFZc0U7S0FBVTtJQUVsQ2pFLElBQUFBLGdCQUFTLEVBQUM7UUFDUixNQUFNQyxjQUFjSCxPQUFPSSxjQUFjO1FBQ3pDLElBQUlQLGVBQWUsTUFBTTtZQUN2QnlFO1lBQ0EsT0FBTztnQkFDTCxJQUFJbkUsZ0JBQWdCLE1BQU07b0JBQ3hCQSxZQUFZd0MsZUFBZSxDQUFDO2dCQUM5QjtnQkFFQSxNQUFNNEIsZUFBZW5ELGlCQUFpQnpGLE9BQU87Z0JBQzdDLElBQUk0SSxpQkFBaUIsUUFBUUEsYUFBYWlCLFdBQVcsRUFBRTtvQkFDckRqQixhQUFhb0IsTUFBTTtnQkFDckI7WUFDRjtRQUNGO0lBQ0YsR0FBRztRQUFDM0Y7UUFBUXNFO1FBQWN6RTtLQUFXO0lBRXJDLE1BQU1FLHFCQUFxQitCLElBQUFBLGtCQUFXLEVBQ3BDLENBQUNwQjtRQUNDLElBQUliLGVBQWUsTUFBTTtZQUN2QixJQUFJLENBQUNhLFVBQVU7Z0JBQ2J3RCxjQUFjO1lBQ2hCO1FBQ0Y7SUFDRixHQUNBO1FBQUNyRTtRQUFZcUU7S0FBYztJQUc3QnJKLHNCQUFzQmdGLFlBQVl1QixpQkFBaUJ6RixPQUFPLEVBQUUySSxjQUFjdkU7SUFFMUUsT0FBT3FCO0FBQ1QifQ==
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import type { LexicalCommand, TextNode } from 'lexical';
2
+ import type { LexicalCommand, ParagraphNode, TextNode } from 'lexical';
3
3
  import type { MenuRenderFn, MenuResolution, MenuTextMatch, SlashMenuGroup, SlashMenuOption, TriggerFn } from './LexicalMenu';
4
4
  export declare const PUNCTUATION = "\\.,\\+\\*\\?\\$\\@\\|#{}\\(\\)\\^\\-\\[\\]\\\\/!%'\"~=<>_:;";
5
5
  export declare function getScrollParent(element: HTMLElement, includeHidden: boolean): HTMLBodyElement | HTMLElement;
@@ -19,7 +19,7 @@ export type TypeaheadMenuPluginProps = {
19
19
  triggerFn: TriggerFn;
20
20
  };
21
21
  export declare const ENABLE_SLASH_MENU_COMMAND: LexicalCommand<{
22
- rect: DOMRect;
22
+ node: ParagraphNode;
23
23
  }>;
24
24
  export declare function LexicalTypeaheadMenuPlugin({ anchorClassName, groupsWithOptions, menuRenderFn, onClose, onOpen, onQueryChange, onSelectOption, triggerFn, }: TypeaheadMenuPluginProps): JSX.Element | null;
25
25
  export { MenuRenderFn, MenuResolution, MenuTextMatch, TriggerFn };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,cAAc,EAAiC,QAAQ,EAAE,MAAM,SAAS,CAAA;AActF,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,aAAa,EACb,cAAc,EACd,eAAe,EACf,SAAS,EACV,MAAM,eAAe,CAAA;AAItB,eAAO,MAAM,WAAW,iEAAiE,CAAA;AA2EzF,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,EACpB,aAAa,EAAE,OAAO,GACrB,eAAe,GAAG,WAAW,CAiB/B;AAED,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAErD,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,EACf,EAAE,SAAc,EAAE,SAAa,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5E,SAAS,CAgCX;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,KAAK,CAAC,cAAc,CAAC,CAAA;IACxC,YAAY,EAAE,YAAY,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAA;IAC7C,aAAa,EAAE,CAAC,cAAc,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI,CAAA;IACtD,cAAc,EAAE,CACd,MAAM,EAAE,eAAe,EACvB,uBAAuB,EAAE,QAAQ,GAAG,IAAI,EACxC,SAAS,EAAE,MAAM,IAAI,EACrB,cAAc,EAAE,MAAM,KACnB,IAAI,CAAA;IACT,SAAS,EAAE,SAAS,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,yBAAyB,EAAE,cAAc,CAAC;IACrD,IAAI,EAAE,OAAO,CAAA;CACd,CAA8C,CAAA;AAE/C,wBAAgB,0BAA0B,CAAC,EACzC,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,OAAO,EACP,MAAM,EACN,aAAa,EACb,cAAc,EACd,SAAS,GACV,EAAE,wBAAwB,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAgH/C;AAED,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EACV,cAAc,EAEd,aAAa,EAEb,QAAQ,EACT,MAAM,SAAS,CAAA;AAchB,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,aAAa,EACb,cAAc,EACd,eAAe,EACf,SAAS,EACV,MAAM,eAAe,CAAA;AAItB,eAAO,MAAM,WAAW,iEAAiE,CAAA;AA4EzF,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,EACpB,aAAa,EAAE,OAAO,GACrB,eAAe,GAAG,WAAW,CAiB/B;AAED,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAErD,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,EACf,EAAE,SAAc,EAAE,SAAa,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5E,SAAS,CAgCX;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,KAAK,CAAC,cAAc,CAAC,CAAA;IACxC,YAAY,EAAE,YAAY,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAA;IAC7C,aAAa,EAAE,CAAC,cAAc,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI,CAAA;IACtD,cAAc,EAAE,CACd,MAAM,EAAE,eAAe,EACvB,uBAAuB,EAAE,QAAQ,GAAG,IAAI,EACxC,SAAS,EAAE,MAAM,IAAI,EACrB,cAAc,EAAE,MAAM,KACnB,IAAI,CAAA;IACT,SAAS,EAAE,SAAS,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,yBAAyB,EAAE,cAAc,CAAC;IACrD,IAAI,EAAE,aAAa,CAAA;CACpB,CAA8C,CAAA;AAE/C,wBAAgB,0BAA0B,CAAC,EACzC,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,OAAO,EACP,MAAM,EACN,aAAa,EACb,cAAc,EACd,SAAS,GACV,EAAE,wBAAwB,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAyH/C;AAED,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,CAAA"}
@@ -98,7 +98,8 @@ function tryToPositionRange(leadOffset, range, editorWindow) {
98
98
  }
99
99
  try {
100
100
  range.setStart(anchorNode, startOffset);
101
- range.setEnd(anchorNode, endOffset);
101
+ // if endOffset is 0, positioning the range for when you click the plus button to open the slash menu will fial
102
+ range.setEnd(anchorNode, endOffset > 1 ? endOffset : 1);
102
103
  } catch (error) {
103
104
  return false;
104
105
  }
@@ -203,7 +204,7 @@ function LexicalTypeaheadMenuPlugin({ anchorClassName, groupsWithOptions, menuRe
203
204
  ]);
204
205
  // This is mainly used for the AddBlockHandlePlugin, so that the slash menu can be opened from there
205
206
  (0, _react.useEffect)(()=>{
206
- return (0, _utils.mergeRegister)(editor.registerCommand(ENABLE_SLASH_MENU_COMMAND, ({ rect })=>{
207
+ return (0, _utils.mergeRegister)(editor.registerCommand(ENABLE_SLASH_MENU_COMMAND, ({ node })=>{
207
208
  editor.getEditorState().read(()=>{
208
209
  const match = {
209
210
  leadOffset: 0,
@@ -211,13 +212,18 @@ function LexicalTypeaheadMenuPlugin({ anchorClassName, groupsWithOptions, menuRe
211
212
  replaceableString: ''
212
213
  };
213
214
  if (match !== null && !isSelectionOnEntityBoundary(editor, match.leadOffset)) {
214
- if (rect !== null) {
215
- startTransition(()=>openTypeahead({
216
- getRect: ()=>{
217
- return rect;
218
- },
219
- match
220
- }));
215
+ if (node !== null) {
216
+ const editorWindow = editor._window ?? window;
217
+ const range = editorWindow.document.createRange();
218
+ const isRangePositioned = tryToPositionRange(match.leadOffset, range, editorWindow);
219
+ if (isRangePositioned !== null) {
220
+ startTransition(()=>openTypeahead({
221
+ getRect: ()=>{
222
+ return range.getBoundingClientRect();
223
+ },
224
+ match
225
+ }));
226
+ }
221
227
  return;
222
228
  }
223
229
  }
@@ -245,7 +251,9 @@ function LexicalTypeaheadMenuPlugin({ anchorClassName, groupsWithOptions, menuRe
245
251
  const isRangePositioned = tryToPositionRange(match.leadOffset, range, editorWindow);
246
252
  if (isRangePositioned !== null) {
247
253
  startTransition(()=>openTypeahead({
248
- getRect: ()=>range.getBoundingClientRect(),
254
+ getRect: ()=>{
255
+ return range.getBoundingClientRect();
256
+ },
249
257
  match
250
258
  }));
251
259
  return;
@@ -278,4 +286,4 @@ function LexicalTypeaheadMenuPlugin({ anchorClassName, groupsWithOptions, menuRe
278
286
  });
279
287
  }
280
288
 
281
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L0xleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExleGljYWxDb21tYW5kLCBMZXhpY2FsRWRpdG9yLCBSYW5nZVNlbGVjdGlvbiwgVGV4dE5vZGUgfSBmcm9tICdsZXhpY2FsJ1xuXG5pbXBvcnQgeyB1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IH0gZnJvbSAnQGxleGljYWwvcmVhY3QvTGV4aWNhbENvbXBvc2VyQ29udGV4dCdcbmltcG9ydCB7IG1lcmdlUmVnaXN0ZXIgfSBmcm9tICdAbGV4aWNhbC91dGlscydcbmltcG9ydCB7XG4gICRnZXRTZWxlY3Rpb24sXG4gICRpc1JhbmdlU2VsZWN0aW9uLFxuICAkaXNUZXh0Tm9kZSxcbiAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gIGNyZWF0ZUNvbW1hbmQsXG59IGZyb20gJ2xleGljYWwnXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB0eXBlIHtcbiAgTWVudVJlbmRlckZuLFxuICBNZW51UmVzb2x1dGlvbixcbiAgTWVudVRleHRNYXRjaCxcbiAgU2xhc2hNZW51R3JvdXAsXG4gIFNsYXNoTWVudU9wdGlvbixcbiAgVHJpZ2dlckZuLFxufSBmcm9tICcuL0xleGljYWxNZW51J1xuXG5pbXBvcnQgeyBMZXhpY2FsTWVudSwgdXNlTWVudUFuY2hvclJlZiB9IGZyb20gJy4vTGV4aWNhbE1lbnUnXG5cbmV4cG9ydCBjb25zdCBQVU5DVFVBVElPTiA9ICdcXFxcLixcXFxcK1xcXFwqXFxcXD9cXFxcJFxcXFxAXFxcXHwje31cXFxcKFxcXFwpXFxcXF5cXFxcLVxcXFxbXFxcXF1cXFxcXFxcXC8hJVxcJ1wifj08Pl86OydcblxuZnVuY3Rpb24gZ2V0VGV4dFVwVG9BbmNob3Ioc2VsZWN0aW9uOiBSYW5nZVNlbGVjdGlvbik6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCBhbmNob3IgPSBzZWxlY3Rpb24uYW5jaG9yXG4gIGlmIChhbmNob3IudHlwZSAhPT0gJ3RleHQnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCBhbmNob3JOb2RlID0gYW5jaG9yLmdldE5vZGUoKVxuICBpZiAoIWFuY2hvck5vZGUuaXNTaW1wbGVUZXh0KCkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IGFuY2hvck9mZnNldCA9IGFuY2hvci5vZmZzZXRcbiAgcmV0dXJuIGFuY2hvck5vZGUuZ2V0VGV4dENvbnRlbnQoKS5zbGljZSgwLCBhbmNob3JPZmZzZXQpXG59XG5cbmZ1bmN0aW9uIHRyeVRvUG9zaXRpb25SYW5nZShsZWFkT2Zmc2V0OiBudW1iZXIsIHJhbmdlOiBSYW5nZSwgZWRpdG9yV2luZG93OiBXaW5kb3cpOiBib29sZWFuIHtcbiAgY29uc3QgZG9tU2VsZWN0aW9uID0gZWRpdG9yV2luZG93LmdldFNlbGVjdGlvbigpXG4gIGlmIChkb21TZWxlY3Rpb24gPT09IG51bGwgfHwgIWRvbVNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGNvbnN0IGFuY2hvck5vZGUgPSBkb21TZWxlY3Rpb24uYW5jaG9yTm9kZVxuICBjb25zdCBzdGFydE9mZnNldCA9IGxlYWRPZmZzZXRcbiAgY29uc3QgZW5kT2Zmc2V0ID0gZG9tU2VsZWN0aW9uLmFuY2hvck9mZnNldFxuXG4gIGlmIChhbmNob3JOb2RlID09IG51bGwgfHwgZW5kT2Zmc2V0ID09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmFuZ2Uuc2V0U3RhcnQoYW5jaG9yTm9kZSwgc3RhcnRPZmZzZXQpXG4gICAgcmFuZ2Uuc2V0RW5kKGFuY2hvck5vZGUsIGVuZE9mZnNldClcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGdldFF1ZXJ5VGV4dEZvclNlYXJjaChlZGl0b3I6IExleGljYWxFZGl0b3IpOiBudWxsIHwgc3RyaW5nIHtcbiAgbGV0IHRleHQgPSBudWxsXG4gIGVkaXRvci5nZXRFZGl0b3JTdGF0ZSgpLnJlYWQoKCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9ICRnZXRTZWxlY3Rpb24oKVxuICAgIGlmICghJGlzUmFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRleHQgPSBnZXRUZXh0VXBUb0FuY2hvcihzZWxlY3Rpb24pXG4gIH0pXG4gIHJldHVybiB0ZXh0XG59XG5cbmZ1bmN0aW9uIGlzU2VsZWN0aW9uT25FbnRpdHlCb3VuZGFyeShlZGl0b3I6IExleGljYWxFZGl0b3IsIG9mZnNldDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGlmIChvZmZzZXQgIT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gZWRpdG9yLmdldEVkaXRvclN0YXRlKCkucmVhZCgoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gJGdldFNlbGVjdGlvbigpXG4gICAgaWYgKCRpc1JhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpIHtcbiAgICAgIGNvbnN0IGFuY2hvciA9IHNlbGVjdGlvbi5hbmNob3JcbiAgICAgIGNvbnN0IGFuY2hvck5vZGUgPSBhbmNob3IuZ2V0Tm9kZSgpXG4gICAgICBjb25zdCBwcmV2U2libGluZyA9IGFuY2hvck5vZGUuZ2V0UHJldmlvdXNTaWJsaW5nKClcbiAgICAgIHJldHVybiAkaXNUZXh0Tm9kZShwcmV2U2libGluZykgJiYgcHJldlNpYmxpbmcuaXNUZXh0RW50aXR5KClcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHN0YXJ0VHJhbnNpdGlvbihjYWxsYmFjazogKCkgPT4gdm9pZCkge1xuICBpZiAoUmVhY3Quc3RhcnRUcmFuc2l0aW9uKSB7XG4gICAgUmVhY3Quc3RhcnRUcmFuc2l0aW9uKGNhbGxiYWNrKVxuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrKClcbiAgfVxufVxuXG4vLyBHb3QgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDI1NDM5MDgvMjAxMzU4MFxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIGluY2x1ZGVIaWRkZW46IGJvb2xlYW4sXG4pOiBIVE1MQm9keUVsZW1lbnQgfCBIVE1MRWxlbWVudCB7XG4gIGxldCBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgY29uc3QgZXhjbHVkZVN0YXRpY1BhcmVudCA9IHN0eWxlLnBvc2l0aW9uID09PSAnYWJzb2x1dGUnXG4gIGNvbnN0IG92ZXJmbG93UmVnZXggPSBpbmNsdWRlSGlkZGVuID8gLyhhdXRvfHNjcm9sbHxoaWRkZW4pLyA6IC8oYXV0b3xzY3JvbGwpL1xuICBpZiAoc3R5bGUucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuYm9keVxuICB9XG4gIGZvciAobGV0IHBhcmVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gZWxlbWVudDsgKHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50KTsgKSB7XG4gICAgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHBhcmVudClcbiAgICBpZiAoZXhjbHVkZVN0YXRpY1BhcmVudCAmJiBzdHlsZS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChvdmVyZmxvd1JlZ2V4LnRlc3Qoc3R5bGUub3ZlcmZsb3cgKyBzdHlsZS5vdmVyZmxvd1kgKyBzdHlsZS5vdmVyZmxvd1gpKSB7XG4gICAgICByZXR1cm4gcGFyZW50XG4gICAgfVxuICB9XG4gIHJldHVybiBkb2N1bWVudC5ib2R5XG59XG5cbmV4cG9ydCB7IHVzZUR5bmFtaWNQb3NpdGlvbmluZyB9IGZyb20gJy4vTGV4aWNhbE1lbnUnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VCYXNpY1R5cGVhaGVhZFRyaWdnZXJNYXRjaChcbiAgdHJpZ2dlcjogc3RyaW5nLFxuICB7IG1heExlbmd0aCA9IDc1LCBtaW5MZW5ndGggPSAxIH06IHsgbWF4TGVuZ3RoPzogbnVtYmVyOyBtaW5MZW5ndGg/OiBudW1iZXIgfSxcbik6IFRyaWdnZXJGbiB7XG4gIHJldHVybiB1c2VDYWxsYmFjayhcbiAgICAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZENoYXJzID0gJ1teJyArIHRyaWdnZXIgKyBQVU5DVFVBVElPTiArICdcXFxcc10nXG4gICAgICBjb25zdCBUeXBlYWhlYWRUcmlnZ2VyUmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAnKF58XFxcXHN8XFxcXCgpKCcgK1xuICAgICAgICAgICdbJyArXG4gICAgICAgICAgdHJpZ2dlciArXG4gICAgICAgICAgJ10nICtcbiAgICAgICAgICAnKCg/OicgK1xuICAgICAgICAgIHZhbGlkQ2hhcnMgK1xuICAgICAgICAgICcpezAsJyArXG4gICAgICAgICAgbWF4TGVuZ3RoICtcbiAgICAgICAgICAnfSknICtcbiAgICAgICAgICAnKSQnLFxuICAgICAgKVxuICAgICAgY29uc3QgbWF0Y2ggPSBUeXBlYWhlYWRUcmlnZ2VyUmVnZXguZXhlYyh0ZXh0KVxuICAgICAgaWYgKG1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1heWJlTGVhZGluZ1doaXRlc3BhY2UgPSBtYXRjaFsxXVxuICAgICAgICBjb25zdCBtYXRjaGluZ1N0cmluZyA9IG1hdGNoWzNdXG4gICAgICAgIGlmIChtYXRjaGluZ1N0cmluZy5sZW5ndGggPj0gbWluTGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxlYWRPZmZzZXQ6IG1hdGNoLmluZGV4ICsgbWF5YmVMZWFkaW5nV2hpdGVzcGFjZS5sZW5ndGgsXG4gICAgICAgICAgICBtYXRjaGluZ1N0cmluZyxcbiAgICAgICAgICAgIHJlcGxhY2VhYmxlU3RyaW5nOiBtYXRjaFsyXSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcbiAgICBbbWF4TGVuZ3RoLCBtaW5MZW5ndGgsIHRyaWdnZXJdLFxuICApXG59XG5cbmV4cG9ydCB0eXBlIFR5cGVhaGVhZE1lbnVQbHVnaW5Qcm9wcyA9IHtcbiAgYW5jaG9yQ2xhc3NOYW1lPzogc3RyaW5nXG4gIGdyb3Vwc1dpdGhPcHRpb25zOiBBcnJheTxTbGFzaE1lbnVHcm91cD5cbiAgbWVudVJlbmRlckZuOiBNZW51UmVuZGVyRm5cbiAgb25DbG9zZT86ICgpID0+IHZvaWRcbiAgb25PcGVuPzogKHJlc29sdXRpb246IE1lbnVSZXNvbHV0aW9uKSA9PiB2b2lkXG4gIG9uUXVlcnlDaGFuZ2U6IChtYXRjaGluZ1N0cmluZzogbnVsbCB8IHN0cmluZykgPT4gdm9pZFxuICBvblNlbGVjdE9wdGlvbjogKFxuICAgIG9wdGlvbjogU2xhc2hNZW51T3B0aW9uLFxuICAgIHRleHROb2RlQ29udGFpbmluZ1F1ZXJ5OiBUZXh0Tm9kZSB8IG51bGwsXG4gICAgY2xvc2VNZW51OiAoKSA9PiB2b2lkLFxuICAgIG1hdGNoaW5nU3RyaW5nOiBzdHJpbmcsXG4gICkgPT4gdm9pZFxuICB0cmlnZ2VyRm46IFRyaWdnZXJGblxufVxuXG5leHBvcnQgY29uc3QgRU5BQkxFX1NMQVNIX01FTlVfQ09NTUFORDogTGV4aWNhbENvbW1hbmQ8e1xuICByZWN0OiBET01SZWN0XG59PiA9IGNyZWF0ZUNvbW1hbmQoJ0VOQUJMRV9TTEFTSF9NRU5VX0NPTU1BTkQnKVxuXG5leHBvcnQgZnVuY3Rpb24gTGV4aWNhbFR5cGVhaGVhZE1lbnVQbHVnaW4oe1xuICBhbmNob3JDbGFzc05hbWUsXG4gIGdyb3Vwc1dpdGhPcHRpb25zLFxuICBtZW51UmVuZGVyRm4sXG4gIG9uQ2xvc2UsXG4gIG9uT3BlbixcbiAgb25RdWVyeUNoYW5nZSxcbiAgb25TZWxlY3RPcHRpb24sXG4gIHRyaWdnZXJGbixcbn06IFR5cGVhaGVhZE1lbnVQbHVnaW5Qcm9wcyk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IFtlZGl0b3JdID0gdXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpXG4gIGNvbnN0IFtyZXNvbHV0aW9uLCBzZXRSZXNvbHV0aW9uXSA9IHVzZVN0YXRlPE1lbnVSZXNvbHV0aW9uIHwgbnVsbD4obnVsbClcbiAgY29uc3QgYW5jaG9yRWxlbWVudFJlZiA9IHVzZU1lbnVBbmNob3JSZWYocmVzb2x1dGlvbiwgc2V0UmVzb2x1dGlvbiwgYW5jaG9yQ2xhc3NOYW1lKVxuXG4gIGNvbnN0IGNsb3NlVHlwZWFoZWFkID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFJlc29sdXRpb24obnVsbClcbiAgICBpZiAob25DbG9zZSAhPSBudWxsICYmIHJlc29sdXRpb24gIT09IG51bGwpIHtcbiAgICAgIG9uQ2xvc2UoKVxuICAgIH1cbiAgfSwgW29uQ2xvc2UsIHJlc29sdXRpb25dKVxuXG4gIGNvbnN0IG9wZW5UeXBlYWhlYWQgPSB1c2VDYWxsYmFjayhcbiAgICAocmVzOiBNZW51UmVzb2x1dGlvbikgPT4ge1xuICAgICAgc2V0UmVzb2x1dGlvbihyZXMpXG4gICAgICBpZiAob25PcGVuICE9IG51bGwgJiYgcmVzb2x1dGlvbiA9PT0gbnVsbCkge1xuICAgICAgICBvbk9wZW4ocmVzKVxuICAgICAgfVxuICAgIH0sXG4gICAgW29uT3BlbiwgcmVzb2x1dGlvbl0sXG4gIClcblxuICAvLyBUaGlzIGlzIG1haW5seSB1c2VkIGZvciB0aGUgQWRkQmxvY2tIYW5kbGVQbHVnaW4sIHNvIHRoYXQgdGhlIHNsYXNoIG1lbnUgY2FuIGJlIG9wZW5lZCBmcm9tIHRoZXJlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuIG1lcmdlUmVnaXN0ZXIoXG4gICAgICBlZGl0b3IucmVnaXN0ZXJDb21tYW5kKFxuICAgICAgICBFTkFCTEVfU0xBU0hfTUVOVV9DT01NQU5ELFxuICAgICAgICAoeyByZWN0IH0pID0+IHtcbiAgICAgICAgICBlZGl0b3IuZ2V0RWRpdG9yU3RhdGUoKS5yZWFkKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoOiBNZW51VGV4dE1hdGNoID0ge1xuICAgICAgICAgICAgICBsZWFkT2Zmc2V0OiAwLFxuICAgICAgICAgICAgICBtYXRjaGluZ1N0cmluZzogJycsXG4gICAgICAgICAgICAgIHJlcGxhY2VhYmxlU3RyaW5nOiAnJyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCAmJiAhaXNTZWxlY3Rpb25PbkVudGl0eUJvdW5kYXJ5KGVkaXRvciwgbWF0Y2gubGVhZE9mZnNldCkpIHtcbiAgICAgICAgICAgICAgaWYgKHJlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzdGFydFRyYW5zaXRpb24oKCkgPT5cbiAgICAgICAgICAgICAgICAgIG9wZW5UeXBlYWhlYWQoe1xuICAgICAgICAgICAgICAgICAgICBnZXRSZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlY3RcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2gsXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ09NTUFORF9QUklPUklUWV9MT1csXG4gICAgICApLFxuICAgIClcbiAgfSwgW2VkaXRvciwgb3BlblR5cGVhaGVhZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB1cGRhdGVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGVkaXRvci5nZXRFZGl0b3JTdGF0ZSgpLnJlYWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBlZGl0b3JXaW5kb3cgPSBlZGl0b3IuX3dpbmRvdyA/PyB3aW5kb3dcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBlZGl0b3JXaW5kb3cuZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSAkZ2V0U2VsZWN0aW9uKClcbiAgICAgICAgY29uc3QgdGV4dCA9IGdldFF1ZXJ5VGV4dEZvclNlYXJjaChlZGl0b3IpXG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICEkaXNSYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pIHx8XG4gICAgICAgICAgIXNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpIHx8XG4gICAgICAgICAgdGV4dCA9PT0gbnVsbCB8fFxuICAgICAgICAgIHJhbmdlID09PSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgIGNsb3NlVHlwZWFoZWFkKClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1hdGNoID0gdHJpZ2dlckZuKHRleHQsIGVkaXRvcilcbiAgICAgICAgb25RdWVyeUNoYW5nZShtYXRjaCA/IG1hdGNoLm1hdGNoaW5nU3RyaW5nIDogbnVsbClcblxuICAgICAgICBpZiAobWF0Y2ggIT09IG51bGwgJiYgIWlzU2VsZWN0aW9uT25FbnRpdHlCb3VuZGFyeShlZGl0b3IsIG1hdGNoLmxlYWRPZmZzZXQpKSB7XG4gICAgICAgICAgY29uc3QgaXNSYW5nZVBvc2l0aW9uZWQgPSB0cnlUb1Bvc2l0aW9uUmFuZ2UobWF0Y2gubGVhZE9mZnNldCwgcmFuZ2UsIGVkaXRvcldpbmRvdylcbiAgICAgICAgICBpZiAoaXNSYW5nZVBvc2l0aW9uZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN0YXJ0VHJhbnNpdGlvbigoKSA9PlxuICAgICAgICAgICAgICBvcGVuVHlwZWFoZWFkKHtcbiAgICAgICAgICAgICAgICBnZXRSZWN0OiAoKSA9PiByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgICAgICAgICBtYXRjaCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2xvc2VUeXBlYWhlYWQoKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCByZW1vdmVVcGRhdGVMaXN0ZW5lciA9IGVkaXRvci5yZWdpc3RlclVwZGF0ZUxpc3RlbmVyKHVwZGF0ZUxpc3RlbmVyKVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHJlbW92ZVVwZGF0ZUxpc3RlbmVyKClcbiAgICB9XG4gIH0sIFtlZGl0b3IsIHRyaWdnZXJGbiwgb25RdWVyeUNoYW5nZSwgcmVzb2x1dGlvbiwgY2xvc2VUeXBlYWhlYWQsIG9wZW5UeXBlYWhlYWRdKVxuXG4gIHJldHVybiByZXNvbHV0aW9uID09PSBudWxsIHx8IGVkaXRvciA9PT0gbnVsbCA/IG51bGwgOiAoXG4gICAgPExleGljYWxNZW51XG4gICAgICBhbmNob3JFbGVtZW50UmVmPXthbmNob3JFbGVtZW50UmVmfVxuICAgICAgY2xvc2U9e2Nsb3NlVHlwZWFoZWFkfVxuICAgICAgZWRpdG9yPXtlZGl0b3J9XG4gICAgICBncm91cHNXaXRoT3B0aW9ucz17Z3JvdXBzV2l0aE9wdGlvbnN9XG4gICAgICBtZW51UmVuZGVyRm49e21lbnVSZW5kZXJGbn1cbiAgICAgIG9uU2VsZWN0T3B0aW9uPXtvblNlbGVjdE9wdGlvbn1cbiAgICAgIHJlc29sdXRpb249e3Jlc29sdXRpb259XG4gICAgICBzaG91bGRTcGxpdE5vZGVXaXRoUXVlcnlcbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCB7IE1lbnVSZW5kZXJGbiwgTWVudVJlc29sdXRpb24sIE1lbnVUZXh0TWF0Y2gsIFRyaWdnZXJGbiB9XG4iXSwibmFtZXMiOlsiUFVOQ1RVQVRJT04iLCJnZXRTY3JvbGxQYXJlbnQiLCJ1c2VEeW5hbWljUG9zaXRpb25pbmciLCJ1c2VCYXNpY1R5cGVhaGVhZFRyaWdnZXJNYXRjaCIsIkVOQUJMRV9TTEFTSF9NRU5VX0NPTU1BTkQiLCJMZXhpY2FsVHlwZWFoZWFkTWVudVBsdWdpbiIsImdldFRleHRVcFRvQW5jaG9yIiwic2VsZWN0aW9uIiwiYW5jaG9yIiwidHlwZSIsImFuY2hvck5vZGUiLCJnZXROb2RlIiwiaXNTaW1wbGVUZXh0IiwiYW5jaG9yT2Zmc2V0Iiwib2Zmc2V0IiwiZ2V0VGV4dENvbnRlbnQiLCJzbGljZSIsInRyeVRvUG9zaXRpb25SYW5nZSIsImxlYWRPZmZzZXQiLCJyYW5nZSIsImVkaXRvcldpbmRvdyIsImRvbVNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsImlzQ29sbGFwc2VkIiwic3RhcnRPZmZzZXQiLCJlbmRPZmZzZXQiLCJzZXRTdGFydCIsInNldEVuZCIsImVycm9yIiwiZ2V0UXVlcnlUZXh0Rm9yU2VhcmNoIiwiZWRpdG9yIiwidGV4dCIsImdldEVkaXRvclN0YXRlIiwicmVhZCIsIiRnZXRTZWxlY3Rpb24iLCIkaXNSYW5nZVNlbGVjdGlvbiIsImlzU2VsZWN0aW9uT25FbnRpdHlCb3VuZGFyeSIsInByZXZTaWJsaW5nIiwiZ2V0UHJldmlvdXNTaWJsaW5nIiwiJGlzVGV4dE5vZGUiLCJpc1RleHRFbnRpdHkiLCJzdGFydFRyYW5zaXRpb24iLCJjYWxsYmFjayIsIlJlYWN0IiwiZWxlbWVudCIsImluY2x1ZGVIaWRkZW4iLCJzdHlsZSIsImdldENvbXB1dGVkU3R5bGUiLCJleGNsdWRlU3RhdGljUGFyZW50IiwicG9zaXRpb24iLCJvdmVyZmxvd1JlZ2V4IiwiZG9jdW1lbnQiLCJib2R5IiwicGFyZW50IiwicGFyZW50RWxlbWVudCIsInRlc3QiLCJvdmVyZmxvdyIsIm92ZXJmbG93WSIsIm92ZXJmbG93WCIsInRyaWdnZXIiLCJtYXhMZW5ndGgiLCJtaW5MZW5ndGgiLCJ1c2VDYWxsYmFjayIsInZhbGlkQ2hhcnMiLCJUeXBlYWhlYWRUcmlnZ2VyUmVnZXgiLCJSZWdFeHAiLCJtYXRjaCIsImV4ZWMiLCJtYXliZUxlYWRpbmdXaGl0ZXNwYWNlIiwibWF0Y2hpbmdTdHJpbmciLCJsZW5ndGgiLCJpbmRleCIsInJlcGxhY2VhYmxlU3RyaW5nIiwiY3JlYXRlQ29tbWFuZCIsImFuY2hvckNsYXNzTmFtZSIsImdyb3Vwc1dpdGhPcHRpb25zIiwibWVudVJlbmRlckZuIiwib25DbG9zZSIsIm9uT3BlbiIsIm9uUXVlcnlDaGFuZ2UiLCJvblNlbGVjdE9wdGlvbiIsInRyaWdnZXJGbiIsInVzZUxleGljYWxDb21wb3NlckNvbnRleHQiLCJyZXNvbHV0aW9uIiwic2V0UmVzb2x1dGlvbiIsInVzZVN0YXRlIiwiYW5jaG9yRWxlbWVudFJlZiIsInVzZU1lbnVBbmNob3JSZWYiLCJjbG9zZVR5cGVhaGVhZCIsIm9wZW5UeXBlYWhlYWQiLCJyZXMiLCJ1c2VFZmZlY3QiLCJtZXJnZVJlZ2lzdGVyIiwicmVnaXN0ZXJDb21tYW5kIiwicmVjdCIsImdldFJlY3QiLCJDT01NQU5EX1BSSU9SSVRZX0xPVyIsInVwZGF0ZUxpc3RlbmVyIiwiX3dpbmRvdyIsIndpbmRvdyIsImNyZWF0ZVJhbmdlIiwiaXNSYW5nZVBvc2l0aW9uZWQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJyZW1vdmVVcGRhdGVMaXN0ZW5lciIsInJlZ2lzdGVyVXBkYXRlTGlzdGVuZXIiLCJMZXhpY2FsTWVudSIsImNsb3NlIiwic2hvdWxkU3BsaXROb2RlV2l0aFF1ZXJ5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQXlCYUEsV0FBVztlQUFYQTs7SUEyRUdDLGVBQWU7ZUFBZkE7O0lBc0JQQyxxQkFBcUI7ZUFBckJBLGtDQUFxQjs7SUFFZEMsNkJBQTZCO2VBQTdCQTs7SUFxREhDLHlCQUF5QjtlQUF6QkE7O0lBSUdDLDBCQUEwQjtlQUExQkE7Ozt3Q0FuTDBCO3VCQUNaO3lCQU92QjsrREFDMEM7NkJBWUg7Ozs7Ozs7Ozs7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
289
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L0xleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIExleGljYWxDb21tYW5kLFxuICBMZXhpY2FsRWRpdG9yLFxuICBQYXJhZ3JhcGhOb2RlLFxuICBSYW5nZVNlbGVjdGlvbixcbiAgVGV4dE5vZGUsXG59IGZyb20gJ2xleGljYWwnXG5cbmltcG9ydCB7IHVzZUxleGljYWxDb21wb3NlckNvbnRleHQgfSBmcm9tICdAbGV4aWNhbC9yZWFjdC9MZXhpY2FsQ29tcG9zZXJDb250ZXh0J1xuaW1wb3J0IHsgbWVyZ2VSZWdpc3RlciB9IGZyb20gJ0BsZXhpY2FsL3V0aWxzJ1xuaW1wb3J0IHtcbiAgJGdldFNlbGVjdGlvbixcbiAgJGlzUmFuZ2VTZWxlY3Rpb24sXG4gICRpc1RleHROb2RlLFxuICBDT01NQU5EX1BSSU9SSVRZX0xPVyxcbiAgY3JlYXRlQ29tbWFuZCxcbn0gZnJvbSAnbGV4aWNhbCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHR5cGUge1xuICBNZW51UmVuZGVyRm4sXG4gIE1lbnVSZXNvbHV0aW9uLFxuICBNZW51VGV4dE1hdGNoLFxuICBTbGFzaE1lbnVHcm91cCxcbiAgU2xhc2hNZW51T3B0aW9uLFxuICBUcmlnZ2VyRm4sXG59IGZyb20gJy4vTGV4aWNhbE1lbnUnXG5cbmltcG9ydCB7IExleGljYWxNZW51LCB1c2VNZW51QW5jaG9yUmVmIH0gZnJvbSAnLi9MZXhpY2FsTWVudSdcblxuZXhwb3J0IGNvbnN0IFBVTkNUVUFUSU9OID0gJ1xcXFwuLFxcXFwrXFxcXCpcXFxcP1xcXFwkXFxcXEBcXFxcfCN7fVxcXFwoXFxcXClcXFxcXlxcXFwtXFxcXFtcXFxcXVxcXFxcXFxcLyElXFwnXCJ+PTw+Xzo7J1xuXG5mdW5jdGlvbiBnZXRUZXh0VXBUb0FuY2hvcihzZWxlY3Rpb246IFJhbmdlU2VsZWN0aW9uKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0IGFuY2hvciA9IHNlbGVjdGlvbi5hbmNob3JcbiAgaWYgKGFuY2hvci50eXBlICE9PSAndGV4dCcpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IGFuY2hvck5vZGUgPSBhbmNob3IuZ2V0Tm9kZSgpXG4gIGlmICghYW5jaG9yTm9kZS5pc1NpbXBsZVRleHQoKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgYW5jaG9yT2Zmc2V0ID0gYW5jaG9yLm9mZnNldFxuICByZXR1cm4gYW5jaG9yTm9kZS5nZXRUZXh0Q29udGVudCgpLnNsaWNlKDAsIGFuY2hvck9mZnNldClcbn1cblxuZnVuY3Rpb24gdHJ5VG9Qb3NpdGlvblJhbmdlKGxlYWRPZmZzZXQ6IG51bWJlciwgcmFuZ2U6IFJhbmdlLCBlZGl0b3JXaW5kb3c6IFdpbmRvdyk6IGJvb2xlYW4ge1xuICBjb25zdCBkb21TZWxlY3Rpb24gPSBlZGl0b3JXaW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgaWYgKGRvbVNlbGVjdGlvbiA9PT0gbnVsbCB8fCAhZG9tU2VsZWN0aW9uLmlzQ29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgY29uc3QgYW5jaG9yTm9kZSA9IGRvbVNlbGVjdGlvbi5hbmNob3JOb2RlXG4gIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gbGVhZE9mZnNldFxuICBjb25zdCBlbmRPZmZzZXQgPSBkb21TZWxlY3Rpb24uYW5jaG9yT2Zmc2V0XG5cbiAgaWYgKGFuY2hvck5vZGUgPT0gbnVsbCB8fCBlbmRPZmZzZXQgPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdHJ5IHtcbiAgICByYW5nZS5zZXRTdGFydChhbmNob3JOb2RlLCBzdGFydE9mZnNldClcbiAgICAvLyBpZiBlbmRPZmZzZXQgaXMgMCwgcG9zaXRpb25pbmcgdGhlIHJhbmdlIGZvciB3aGVuIHlvdSBjbGljayB0aGUgcGx1cyBidXR0b24gdG8gb3BlbiB0aGUgc2xhc2ggbWVudSB3aWxsIGZpYWxcbiAgICByYW5nZS5zZXRFbmQoYW5jaG9yTm9kZSwgZW5kT2Zmc2V0ID4gMSA/IGVuZE9mZnNldCA6IDEpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBnZXRRdWVyeVRleHRGb3JTZWFyY2goZWRpdG9yOiBMZXhpY2FsRWRpdG9yKTogbnVsbCB8IHN0cmluZyB7XG4gIGxldCB0ZXh0ID0gbnVsbFxuICBlZGl0b3IuZ2V0RWRpdG9yU3RhdGUoKS5yZWFkKCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSAkZ2V0U2VsZWN0aW9uKClcbiAgICBpZiAoISRpc1JhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0ZXh0ID0gZ2V0VGV4dFVwVG9BbmNob3Ioc2VsZWN0aW9uKVxuICB9KVxuICByZXR1cm4gdGV4dFxufVxuXG5mdW5jdGlvbiBpc1NlbGVjdGlvbk9uRW50aXR5Qm91bmRhcnkoZWRpdG9yOiBMZXhpY2FsRWRpdG9yLCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICBpZiAob2Zmc2V0ICE9PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIGVkaXRvci5nZXRFZGl0b3JTdGF0ZSgpLnJlYWQoKCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9ICRnZXRTZWxlY3Rpb24oKVxuICAgIGlmICgkaXNSYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pKSB7XG4gICAgICBjb25zdCBhbmNob3IgPSBzZWxlY3Rpb24uYW5jaG9yXG4gICAgICBjb25zdCBhbmNob3JOb2RlID0gYW5jaG9yLmdldE5vZGUoKVxuICAgICAgY29uc3QgcHJldlNpYmxpbmcgPSBhbmNob3JOb2RlLmdldFByZXZpb3VzU2libGluZygpXG4gICAgICByZXR1cm4gJGlzVGV4dE5vZGUocHJldlNpYmxpbmcpICYmIHByZXZTaWJsaW5nLmlzVGV4dEVudGl0eSgpXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9KVxufVxuXG5mdW5jdGlvbiBzdGFydFRyYW5zaXRpb24oY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcbiAgaWYgKFJlYWN0LnN0YXJ0VHJhbnNpdGlvbikge1xuICAgIFJlYWN0LnN0YXJ0VHJhbnNpdGlvbihjYWxsYmFjaylcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjaygpXG4gIH1cbn1cblxuLy8gR290IGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQyNTQzOTA4LzIwMTM1ODBcbmV4cG9ydCBmdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQoXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICBpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuKTogSFRNTEJvZHlFbGVtZW50IHwgSFRNTEVsZW1lbnQge1xuICBsZXQgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gIGNvbnN0IGV4Y2x1ZGVTdGF0aWNQYXJlbnQgPSBzdHlsZS5wb3NpdGlvbiA9PT0gJ2Fic29sdXRlJ1xuICBjb25zdCBvdmVyZmxvd1JlZ2V4ID0gaW5jbHVkZUhpZGRlbiA/IC8oYXV0b3xzY3JvbGx8aGlkZGVuKS8gOiAvKGF1dG98c2Nyb2xsKS9cbiAgaWYgKHN0eWxlLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmJvZHlcbiAgfVxuICBmb3IgKGxldCBwYXJlbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7IChwYXJlbnQgPSBwYXJlbnQucGFyZW50RWxlbWVudCk7ICkge1xuICAgIHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnQpXG4gICAgaWYgKGV4Y2x1ZGVTdGF0aWNQYXJlbnQgJiYgc3R5bGUucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAob3ZlcmZsb3dSZWdleC50ZXN0KHN0eWxlLm92ZXJmbG93ICsgc3R5bGUub3ZlcmZsb3dZICsgc3R5bGUub3ZlcmZsb3dYKSkge1xuICAgICAgcmV0dXJuIHBhcmVudFxuICAgIH1cbiAgfVxuICByZXR1cm4gZG9jdW1lbnQuYm9keVxufVxuXG5leHBvcnQgeyB1c2VEeW5hbWljUG9zaXRpb25pbmcgfSBmcm9tICcuL0xleGljYWxNZW51J1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlQmFzaWNUeXBlYWhlYWRUcmlnZ2VyTWF0Y2goXG4gIHRyaWdnZXI6IHN0cmluZyxcbiAgeyBtYXhMZW5ndGggPSA3NSwgbWluTGVuZ3RoID0gMSB9OiB7IG1heExlbmd0aD86IG51bWJlcjsgbWluTGVuZ3RoPzogbnVtYmVyIH0sXG4pOiBUcmlnZ2VyRm4ge1xuICByZXR1cm4gdXNlQ2FsbGJhY2soXG4gICAgKHRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdmFsaWRDaGFycyA9ICdbXicgKyB0cmlnZ2VyICsgUFVOQ1RVQVRJT04gKyAnXFxcXHNdJ1xuICAgICAgY29uc3QgVHlwZWFoZWFkVHJpZ2dlclJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgJyhefFxcXFxzfFxcXFwoKSgnICtcbiAgICAgICAgICAnWycgK1xuICAgICAgICAgIHRyaWdnZXIgK1xuICAgICAgICAgICddJyArXG4gICAgICAgICAgJygoPzonICtcbiAgICAgICAgICB2YWxpZENoYXJzICtcbiAgICAgICAgICAnKXswLCcgK1xuICAgICAgICAgIG1heExlbmd0aCArXG4gICAgICAgICAgJ30pJyArXG4gICAgICAgICAgJykkJyxcbiAgICAgIClcbiAgICAgIGNvbnN0IG1hdGNoID0gVHlwZWFoZWFkVHJpZ2dlclJlZ2V4LmV4ZWModGV4dClcbiAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtYXliZUxlYWRpbmdXaGl0ZXNwYWNlID0gbWF0Y2hbMV1cbiAgICAgICAgY29uc3QgbWF0Y2hpbmdTdHJpbmcgPSBtYXRjaFszXVxuICAgICAgICBpZiAobWF0Y2hpbmdTdHJpbmcubGVuZ3RoID49IG1pbkxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsZWFkT2Zmc2V0OiBtYXRjaC5pbmRleCArIG1heWJlTGVhZGluZ1doaXRlc3BhY2UubGVuZ3RoLFxuICAgICAgICAgICAgbWF0Y2hpbmdTdHJpbmcsXG4gICAgICAgICAgICByZXBsYWNlYWJsZVN0cmluZzogbWF0Y2hbMl0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG4gICAgW21heExlbmd0aCwgbWluTGVuZ3RoLCB0cmlnZ2VyXSxcbiAgKVxufVxuXG5leHBvcnQgdHlwZSBUeXBlYWhlYWRNZW51UGx1Z2luUHJvcHMgPSB7XG4gIGFuY2hvckNsYXNzTmFtZT86IHN0cmluZ1xuICBncm91cHNXaXRoT3B0aW9uczogQXJyYXk8U2xhc2hNZW51R3JvdXA+XG4gIG1lbnVSZW5kZXJGbjogTWVudVJlbmRlckZuXG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkXG4gIG9uT3Blbj86IChyZXNvbHV0aW9uOiBNZW51UmVzb2x1dGlvbikgPT4gdm9pZFxuICBvblF1ZXJ5Q2hhbmdlOiAobWF0Y2hpbmdTdHJpbmc6IG51bGwgfCBzdHJpbmcpID0+IHZvaWRcbiAgb25TZWxlY3RPcHRpb246IChcbiAgICBvcHRpb246IFNsYXNoTWVudU9wdGlvbixcbiAgICB0ZXh0Tm9kZUNvbnRhaW5pbmdRdWVyeTogVGV4dE5vZGUgfCBudWxsLFxuICAgIGNsb3NlTWVudTogKCkgPT4gdm9pZCxcbiAgICBtYXRjaGluZ1N0cmluZzogc3RyaW5nLFxuICApID0+IHZvaWRcbiAgdHJpZ2dlckZuOiBUcmlnZ2VyRm5cbn1cblxuZXhwb3J0IGNvbnN0IEVOQUJMRV9TTEFTSF9NRU5VX0NPTU1BTkQ6IExleGljYWxDb21tYW5kPHtcbiAgbm9kZTogUGFyYWdyYXBoTm9kZVxufT4gPSBjcmVhdGVDb21tYW5kKCdFTkFCTEVfU0xBU0hfTUVOVV9DT01NQU5EJylcblxuZXhwb3J0IGZ1bmN0aW9uIExleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luKHtcbiAgYW5jaG9yQ2xhc3NOYW1lLFxuICBncm91cHNXaXRoT3B0aW9ucyxcbiAgbWVudVJlbmRlckZuLFxuICBvbkNsb3NlLFxuICBvbk9wZW4sXG4gIG9uUXVlcnlDaGFuZ2UsXG4gIG9uU2VsZWN0T3B0aW9uLFxuICB0cmlnZ2VyRm4sXG59OiBUeXBlYWhlYWRNZW51UGx1Z2luUHJvcHMpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICBjb25zdCBbZWRpdG9yXSA9IHVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKVxuICBjb25zdCBbcmVzb2x1dGlvbiwgc2V0UmVzb2x1dGlvbl0gPSB1c2VTdGF0ZTxNZW51UmVzb2x1dGlvbiB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGFuY2hvckVsZW1lbnRSZWYgPSB1c2VNZW51QW5jaG9yUmVmKHJlc29sdXRpb24sIHNldFJlc29sdXRpb24sIGFuY2hvckNsYXNzTmFtZSlcblxuICBjb25zdCBjbG9zZVR5cGVhaGVhZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRSZXNvbHV0aW9uKG51bGwpXG4gICAgaWYgKG9uQ2xvc2UgIT0gbnVsbCAmJiByZXNvbHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICB9XG4gIH0sIFtvbkNsb3NlLCByZXNvbHV0aW9uXSlcblxuICBjb25zdCBvcGVuVHlwZWFoZWFkID0gdXNlQ2FsbGJhY2soXG4gICAgKHJlczogTWVudVJlc29sdXRpb24pID0+IHtcbiAgICAgIHNldFJlc29sdXRpb24ocmVzKVxuICAgICAgaWYgKG9uT3BlbiAhPSBudWxsICYmIHJlc29sdXRpb24gPT09IG51bGwpIHtcbiAgICAgICAgb25PcGVuKHJlcylcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbk9wZW4sIHJlc29sdXRpb25dLFxuICApXG5cbiAgLy8gVGhpcyBpcyBtYWlubHkgdXNlZCBmb3IgdGhlIEFkZEJsb2NrSGFuZGxlUGx1Z2luLCBzbyB0aGF0IHRoZSBzbGFzaCBtZW51IGNhbiBiZSBvcGVuZWQgZnJvbSB0aGVyZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiBtZXJnZVJlZ2lzdGVyKFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZChcbiAgICAgICAgRU5BQkxFX1NMQVNIX01FTlVfQ09NTUFORCxcbiAgICAgICAgKHsgbm9kZSB9KSA9PiB7XG4gICAgICAgICAgZWRpdG9yLmdldEVkaXRvclN0YXRlKCkucmVhZCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaDogTWVudVRleHRNYXRjaCA9IHtcbiAgICAgICAgICAgICAgbGVhZE9mZnNldDogMCxcbiAgICAgICAgICAgICAgbWF0Y2hpbmdTdHJpbmc6ICcnLFxuICAgICAgICAgICAgICByZXBsYWNlYWJsZVN0cmluZzogJycsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2ggIT09IG51bGwgJiYgIWlzU2VsZWN0aW9uT25FbnRpdHlCb3VuZGFyeShlZGl0b3IsIG1hdGNoLmxlYWRPZmZzZXQpKSB7XG4gICAgICAgICAgICAgIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdG9yV2luZG93ID0gZWRpdG9yLl93aW5kb3cgPz8gd2luZG93XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBlZGl0b3JXaW5kb3cuZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaXNSYW5nZVBvc2l0aW9uZWQgPSB0cnlUb1Bvc2l0aW9uUmFuZ2UobWF0Y2gubGVhZE9mZnNldCwgcmFuZ2UsIGVkaXRvcldpbmRvdylcbiAgICAgICAgICAgICAgICBpZiAoaXNSYW5nZVBvc2l0aW9uZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIHN0YXJ0VHJhbnNpdGlvbigoKSA9PlxuICAgICAgICAgICAgICAgICAgICBvcGVuVHlwZWFoZWFkKHtcbiAgICAgICAgICAgICAgICAgICAgICBnZXRSZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG1hdGNoLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBDT01NQU5EX1BSSU9SSVRZX0xPVyxcbiAgICAgICksXG4gICAgKVxuICB9LCBbZWRpdG9yLCBvcGVuVHlwZWFoZWFkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgZWRpdG9yLmdldEVkaXRvclN0YXRlKCkucmVhZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVkaXRvcldpbmRvdyA9IGVkaXRvci5fd2luZG93ID8/IHdpbmRvd1xuICAgICAgICBjb25zdCByYW5nZSA9IGVkaXRvcldpbmRvdy5kb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9ICRnZXRTZWxlY3Rpb24oKVxuICAgICAgICBjb25zdCB0ZXh0ID0gZ2V0UXVlcnlUZXh0Rm9yU2VhcmNoKGVkaXRvcilcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgISRpc1JhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikgfHxcbiAgICAgICAgICAhc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkgfHxcbiAgICAgICAgICB0ZXh0ID09PSBudWxsIHx8XG4gICAgICAgICAgcmFuZ2UgPT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2xvc2VUeXBlYWhlYWQoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWF0Y2ggPSB0cmlnZ2VyRm4odGV4dCwgZWRpdG9yKVxuICAgICAgICBvblF1ZXJ5Q2hhbmdlKG1hdGNoID8gbWF0Y2gubWF0Y2hpbmdTdHJpbmcgOiBudWxsKVxuXG4gICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCAmJiAhaXNTZWxlY3Rpb25PbkVudGl0eUJvdW5kYXJ5KGVkaXRvciwgbWF0Y2gubGVhZE9mZnNldCkpIHtcbiAgICAgICAgICBjb25zdCBpc1JhbmdlUG9zaXRpb25lZCA9IHRyeVRvUG9zaXRpb25SYW5nZShtYXRjaC5sZWFkT2Zmc2V0LCByYW5nZSwgZWRpdG9yV2luZG93KVxuICAgICAgICAgIGlmIChpc1JhbmdlUG9zaXRpb25lZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3RhcnRUcmFuc2l0aW9uKCgpID0+XG4gICAgICAgICAgICAgIG9wZW5UeXBlYWhlYWQoe1xuICAgICAgICAgICAgICAgIGdldFJlY3Q6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWF0Y2gsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNsb3NlVHlwZWFoZWFkKClcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3QgcmVtb3ZlVXBkYXRlTGlzdGVuZXIgPSBlZGl0b3IucmVnaXN0ZXJVcGRhdGVMaXN0ZW5lcih1cGRhdGVMaXN0ZW5lcilcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICByZW1vdmVVcGRhdGVMaXN0ZW5lcigpXG4gICAgfVxuICB9LCBbZWRpdG9yLCB0cmlnZ2VyRm4sIG9uUXVlcnlDaGFuZ2UsIHJlc29sdXRpb24sIGNsb3NlVHlwZWFoZWFkLCBvcGVuVHlwZWFoZWFkXSlcblxuICByZXR1cm4gcmVzb2x1dGlvbiA9PT0gbnVsbCB8fCBlZGl0b3IgPT09IG51bGwgPyBudWxsIDogKFxuICAgIDxMZXhpY2FsTWVudVxuICAgICAgYW5jaG9yRWxlbWVudFJlZj17YW5jaG9yRWxlbWVudFJlZn1cbiAgICAgIGNsb3NlPXtjbG9zZVR5cGVhaGVhZH1cbiAgICAgIGVkaXRvcj17ZWRpdG9yfVxuICAgICAgZ3JvdXBzV2l0aE9wdGlvbnM9e2dyb3Vwc1dpdGhPcHRpb25zfVxuICAgICAgbWVudVJlbmRlckZuPXttZW51UmVuZGVyRm59XG4gICAgICBvblNlbGVjdE9wdGlvbj17b25TZWxlY3RPcHRpb259XG4gICAgICByZXNvbHV0aW9uPXtyZXNvbHV0aW9ufVxuICAgICAgc2hvdWxkU3BsaXROb2RlV2l0aFF1ZXJ5XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBNZW51UmVuZGVyRm4sIE1lbnVSZXNvbHV0aW9uLCBNZW51VGV4dE1hdGNoLCBUcmlnZ2VyRm4gfVxuIl0sIm5hbWVzIjpbIlBVTkNUVUFUSU9OIiwiZ2V0U2Nyb2xsUGFyZW50IiwidXNlRHluYW1pY1Bvc2l0aW9uaW5nIiwidXNlQmFzaWNUeXBlYWhlYWRUcmlnZ2VyTWF0Y2giLCJFTkFCTEVfU0xBU0hfTUVOVV9DT01NQU5EIiwiTGV4aWNhbFR5cGVhaGVhZE1lbnVQbHVnaW4iLCJnZXRUZXh0VXBUb0FuY2hvciIsInNlbGVjdGlvbiIsImFuY2hvciIsInR5cGUiLCJhbmNob3JOb2RlIiwiZ2V0Tm9kZSIsImlzU2ltcGxlVGV4dCIsImFuY2hvck9mZnNldCIsIm9mZnNldCIsImdldFRleHRDb250ZW50Iiwic2xpY2UiLCJ0cnlUb1Bvc2l0aW9uUmFuZ2UiLCJsZWFkT2Zmc2V0IiwicmFuZ2UiLCJlZGl0b3JXaW5kb3ciLCJkb21TZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb24iLCJpc0NvbGxhcHNlZCIsInN0YXJ0T2Zmc2V0IiwiZW5kT2Zmc2V0Iiwic2V0U3RhcnQiLCJzZXRFbmQiLCJlcnJvciIsImdldFF1ZXJ5VGV4dEZvclNlYXJjaCIsImVkaXRvciIsInRleHQiLCJnZXRFZGl0b3JTdGF0ZSIsInJlYWQiLCIkZ2V0U2VsZWN0aW9uIiwiJGlzUmFuZ2VTZWxlY3Rpb24iLCJpc1NlbGVjdGlvbk9uRW50aXR5Qm91bmRhcnkiLCJwcmV2U2libGluZyIsImdldFByZXZpb3VzU2libGluZyIsIiRpc1RleHROb2RlIiwiaXNUZXh0RW50aXR5Iiwic3RhcnRUcmFuc2l0aW9uIiwiY2FsbGJhY2siLCJSZWFjdCIsImVsZW1lbnQiLCJpbmNsdWRlSGlkZGVuIiwic3R5bGUiLCJnZXRDb21wdXRlZFN0eWxlIiwiZXhjbHVkZVN0YXRpY1BhcmVudCIsInBvc2l0aW9uIiwib3ZlcmZsb3dSZWdleCIsImRvY3VtZW50IiwiYm9keSIsInBhcmVudCIsInBhcmVudEVsZW1lbnQiLCJ0ZXN0Iiwib3ZlcmZsb3ciLCJvdmVyZmxvd1kiLCJvdmVyZmxvd1giLCJ0cmlnZ2VyIiwibWF4TGVuZ3RoIiwibWluTGVuZ3RoIiwidXNlQ2FsbGJhY2siLCJ2YWxpZENoYXJzIiwiVHlwZWFoZWFkVHJpZ2dlclJlZ2V4IiwiUmVnRXhwIiwibWF0Y2giLCJleGVjIiwibWF5YmVMZWFkaW5nV2hpdGVzcGFjZSIsIm1hdGNoaW5nU3RyaW5nIiwibGVuZ3RoIiwiaW5kZXgiLCJyZXBsYWNlYWJsZVN0cmluZyIsImNyZWF0ZUNvbW1hbmQiLCJhbmNob3JDbGFzc05hbWUiLCJncm91cHNXaXRoT3B0aW9ucyIsIm1lbnVSZW5kZXJGbiIsIm9uQ2xvc2UiLCJvbk9wZW4iLCJvblF1ZXJ5Q2hhbmdlIiwib25TZWxlY3RPcHRpb24iLCJ0cmlnZ2VyRm4iLCJ1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IiwicmVzb2x1dGlvbiIsInNldFJlc29sdXRpb24iLCJ1c2VTdGF0ZSIsImFuY2hvckVsZW1lbnRSZWYiLCJ1c2VNZW51QW5jaG9yUmVmIiwiY2xvc2VUeXBlYWhlYWQiLCJvcGVuVHlwZWFoZWFkIiwicmVzIiwidXNlRWZmZWN0IiwibWVyZ2VSZWdpc3RlciIsInJlZ2lzdGVyQ29tbWFuZCIsIm5vZGUiLCJfd2luZG93Iiwid2luZG93IiwiY3JlYXRlUmFuZ2UiLCJpc1JhbmdlUG9zaXRpb25lZCIsImdldFJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJDT01NQU5EX1BSSU9SSVRZX0xPVyIsInVwZGF0ZUxpc3RlbmVyIiwicmVtb3ZlVXBkYXRlTGlzdGVuZXIiLCJyZWdpc3RlclVwZGF0ZUxpc3RlbmVyIiwiTGV4aWNhbE1lbnUiLCJjbG9zZSIsInNob3VsZFNwbGl0Tm9kZVdpdGhRdWVyeSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUErQmFBLFdBQVc7ZUFBWEE7O0lBNEVHQyxlQUFlO2VBQWZBOztJQXNCUEMscUJBQXFCO2VBQXJCQSxrQ0FBcUI7O0lBRWRDLDZCQUE2QjtlQUE3QkE7O0lBcURIQyx5QkFBeUI7ZUFBekJBOztJQUlHQywwQkFBMEI7ZUFBMUJBOzs7d0NBcEwwQjt1QkFDWjt5QkFPdkI7K0RBQzBDOzZCQVlIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXZDLE1BQU1MLGNBQWM7QUFFM0IsU0FBU00sa0JBQWtCQyxTQUF5QjtJQUNsRCxNQUFNQyxTQUFTRCxVQUFVQyxNQUFNO0lBQy9CLElBQUlBLE9BQU9DLElBQUksS0FBSyxRQUFRO1FBQzFCLE9BQU87SUFDVDtJQUNBLE1BQU1DLGFBQWFGLE9BQU9HLE9BQU87SUFDakMsSUFBSSxDQUFDRCxXQUFXRSxZQUFZLElBQUk7UUFDOUIsT0FBTztJQUNUO0lBQ0EsTUFBTUMsZUFBZUwsT0FBT00sTUFBTTtJQUNsQyxPQUFPSixXQUFXSyxjQUFjLEdBQUdDLEtBQUssQ0FBQyxHQUFHSDtBQUM5QztBQUVBLFNBQVNJLG1CQUFtQkMsVUFBa0Is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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/field/lexical/plugins/SlashMenu/index.tsx"],"names":[],"mappings":";AAeA,OAAO,cAAc,CAAA;AAsCrB,wBAAgB,eAAe,IAAI,GAAG,CAAC,OAAO,CAyI7C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/field/lexical/plugins/SlashMenu/index.tsx"],"names":[],"mappings":";AAgBA,OAAO,cAAc,CAAA;AAkDrB,wBAAgB,eAAe,IAAI,GAAG,CAAC,OAAO,CAyI7C"}
@@ -11,6 +11,7 @@ Object.defineProperty(exports, "SlashMenuPlugin", {
11
11
  const _LexicalComposerContext = require("@lexical/react/LexicalComposerContext");
12
12
  const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
13
13
  const _reactdom = /*#__PURE__*/ _interop_require_wildcard(require("react-dom"));
14
+ const _reacti18next = require("react-i18next");
14
15
  const _EditorConfigProvider = require("../../config/EditorConfigProvider");
15
16
  const _LexicalTypeaheadMenuPlugin = require("./LexicalTypeaheadMenuPlugin");
16
17
  require("./index.scss");
@@ -54,10 +55,21 @@ function _interop_require_wildcard(obj, nodeInterop) {
54
55
  return newObj;
55
56
  }
56
57
  function SlashMenuItem({ index, isSelected, onClick, onMouseEnter, option }) {
58
+ const { i18n } = (0, _reacti18next.useTranslation)('fields');
57
59
  let className = 'item';
58
60
  if (isSelected) {
59
61
  className += ' selected';
60
62
  }
63
+ let title = option.title;
64
+ if (option.displayName && typeof option.displayName === 'function') {
65
+ title = option.displayName({
66
+ i18n
67
+ });
68
+ }
69
+ // Crop title to max. 50 characters
70
+ if (title.length > 25) {
71
+ title = title.substring(0, 25) + '...';
72
+ }
61
73
  return /*#__PURE__*/ _react.createElement("button", {
62
74
  "aria-selected": isSelected,
63
75
  className: className,
@@ -71,7 +83,7 @@ function SlashMenuItem({ index, isSelected, onClick, onMouseEnter, option }) {
71
83
  type: "button"
72
84
  }, /*#__PURE__*/ _react.createElement(option.Icon, null), /*#__PURE__*/ _react.createElement("span", {
73
85
  className: "text"
74
- }, option.title));
86
+ }, title));
75
87
  }
76
88
  function SlashMenuPlugin() {
77
89
  const [editor] = (0, _LexicalComposerContext.useLexicalComposerContext)();
@@ -184,4 +196,4 @@ function SlashMenuPlugin() {
184
196
  }));
185
197
  }
186
198
 
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFRleHROb2RlIH0gZnJvbSAnbGV4aWNhbCdcblxuaW1wb3J0IHsgdXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCB9IGZyb20gJ0BsZXhpY2FsL3JlYWN0L0xleGljYWxDb21wb3NlckNvbnRleHQnXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJ1xuXG5pbXBvcnQgdHlwZSB7IFNsYXNoTWVudUdyb3VwIH0gZnJvbSAnLi9MZXhpY2FsVHlwZWFoZWFkTWVudVBsdWdpbi9MZXhpY2FsTWVudSdcbmltcG9ydCB0eXBlIHsgU2xhc2hNZW51T3B0aW9uIH0gZnJvbSAnLi9MZXhpY2FsVHlwZWFoZWFkTWVudVBsdWdpbi9MZXhpY2FsTWVudSdcblxuaW1wb3J0IHsgdXNlRWRpdG9yQ29uZmlnQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbmZpZy9FZGl0b3JDb25maWdQcm92aWRlcidcbmltcG9ydCB7XG4gIExleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luLFxuICB1c2VCYXNpY1R5cGVhaGVhZFRyaWdnZXJNYXRjaCxcbn0gZnJvbSAnLi9MZXhpY2FsVHlwZWFoZWFkTWVudVBsdWdpbidcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5mdW5jdGlvbiBTbGFzaE1lbnVJdGVtKHtcbiAgaW5kZXgsXG4gIGlzU2VsZWN0ZWQsXG4gIG9uQ2xpY2ssXG4gIG9uTW91c2VFbnRlcixcbiAgb3B0aW9uLFxufToge1xuICBpbmRleDogbnVtYmVyXG4gIGlzU2VsZWN0ZWQ6IGJvb2xlYW5cbiAgb25DbGljazogKCkgPT4gdm9pZFxuICBvbk1vdXNlRW50ZXI6ICgpID0+IHZvaWRcbiAgb3B0aW9uOiBTbGFzaE1lbnVPcHRpb25cbn0pIHtcbiAgbGV0IGNsYXNzTmFtZSA9ICdpdGVtJ1xuICBpZiAoaXNTZWxlY3RlZCkge1xuICAgIGNsYXNzTmFtZSArPSAnIHNlbGVjdGVkJ1xuICB9XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgYXJpYS1zZWxlY3RlZD17aXNTZWxlY3RlZH1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgaWQ9eyd0eXBlYWhlYWQtaXRlbS0nICsgaW5kZXh9XG4gICAgICBrZXk9e29wdGlvbi5rZXl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgb25Nb3VzZUVudGVyPXtvbk1vdXNlRW50ZXJ9XG4gICAgICByZWY9e29wdGlvbi5zZXRSZWZFbGVtZW50fVxuICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICB0YWJJbmRleD17LTF9XG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICA+XG4gICAgICA8b3B0aW9uLkljb24gLz5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHRcIj57b3B0aW9uLnRpdGxlfTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU2xhc2hNZW51UGx1Z2luKCk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgW2VkaXRvcl0gPSB1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0KClcbiAgY29uc3QgW3F1ZXJ5U3RyaW5nLCBzZXRRdWVyeVN0cmluZ10gPSB1c2VTdGF0ZTxudWxsIHwgc3RyaW5nPihudWxsKVxuICBjb25zdCB7IGVkaXRvckNvbmZpZyB9ID0gdXNlRWRpdG9yQ29uZmlnQ29udGV4dCgpXG5cbiAgY29uc3QgY2hlY2tGb3JUcmlnZ2VyTWF0Y2ggPSB1c2VCYXNpY1R5cGVhaGVhZFRyaWdnZXJNYXRjaCgnLycsIHtcbiAgICBtaW5MZW5ndGg6IDAsXG4gIH0pXG5cbiAgY29uc3QgZ2V0RHluYW1pY09wdGlvbnMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgbGV0IGdyb3VwV2l0aE9wdGlvbnM6IEFycmF5PFNsYXNoTWVudUdyb3VwPiA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IGR5bmFtaWNPcHRpb24gb2YgZWRpdG9yQ29uZmlnPy5mZWF0dXJlcy5zbGFzaE1lbnUuZHluYW1pY09wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGR5bmFtaWNHcm91cFdpdGhPcHRpb25zID0gZHluYW1pY09wdGlvbih7XG4gICAgICAgIGVkaXRvcixcbiAgICAgICAgcXVlcnlTdHJpbmcsXG4gICAgICB9KVxuICAgICAgZ3JvdXBXaXRoT3B0aW9ucyA9IGdyb3VwV2l0aE9wdGlvbnMuY29uY2F0KGR5bmFtaWNHcm91cFdpdGhPcHRpb25zKVxuICAgIH1cblxuICAgIHJldHVybiBncm91cFdpdGhPcHRpb25zXG4gIH0sIFtlZGl0b3IsIHF1ZXJ5U3RyaW5nLCBlZGl0b3JDb25maWc/LmZlYXR1cmVzXSlcblxuICBjb25zdCBncm91cHM6IFNsYXNoTWVudUdyb3VwW10gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBsZXQgZ3JvdXBzV2l0aE9wdGlvbnM6IFNsYXNoTWVudUdyb3VwW10gPSBbXVxuICAgIGZvciAoY29uc3QgZ3JvdXBXaXRoT3B0aW9uIG9mIGVkaXRvckNvbmZpZz8uZmVhdHVyZXMuc2xhc2hNZW51Lmdyb3Vwc1dpdGhPcHRpb25zID8/IFtdKSB7XG4gICAgICBncm91cHNXaXRoT3B0aW9ucy5wdXNoKGdyb3VwV2l0aE9wdGlvbilcbiAgICB9XG5cbiAgICBpZiAocXVlcnlTdHJpbmcpIHtcbiAgICAgIC8vIEZpbHRlciBjdXJyZW50IGdyb3VwcyBmaXJzdFxuICAgICAgZ3JvdXBzV2l0aE9wdGlvbnMgPSBncm91cHNXaXRoT3B0aW9ucy5tYXAoKGdyb3VwKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IGdyb3VwLm9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+IHtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChxdWVyeVN0cmluZywgJ2dpJykuZXhlYyhvcHRpb24udGl0bGUpIHx8IG9wdGlvbi5rZXl3b3JkcyAhPSBudWxsXG4gICAgICAgICAgICA/IG9wdGlvbi5rZXl3b3Jkcy5zb21lKChrZXl3b3JkKSA9PiBuZXcgUmVnRXhwKHF1ZXJ5U3RyaW5nLCAnZ2knKS5leGVjKGtleXdvcmQpKVxuICAgICAgICAgICAgOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgICBpZiAoZmlsdGVyZWRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICAgIG9wdGlvbnM6IGZpbHRlcmVkT3B0aW9ucyxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0pXG5cbiAgICAgIGdyb3Vwc1dpdGhPcHRpb25zID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmlsdGVyKChncm91cCkgPT4gZ3JvdXAgIT0gbnVsbClcblxuICAgICAgLy8gTm93IGFkZCBkeW5hbWljIGdyb3Vwc1xuICAgICAgY29uc3QgZHluYW1pY09wdGlvbkdyb3VwcyA9IGdldER5bmFtaWNPcHRpb25zKClcblxuICAgICAgLy8gbWVyZ2UgZHluYW1pYyBvcHRpb25zIGludG8gZ3JvdXBzXG4gICAgICBmb3IgKGNvbnN0IGR5bmFtaWNHcm91cCBvZiBkeW5hbWljT3B0aW9uR3JvdXBzKSB7XG4gICAgICAgIC8vIDEuIGZpbmQgdGhlIGdyb3VwIHdpdGggdGhlIHNhbWUgbmFtZSBvciBjcmVhdGUgbmV3IG9uZVxuICAgICAgICBsZXQgZ3JvdXAgPSBncm91cHNXaXRoT3B0aW9ucy5maW5kKChncm91cCkgPT4gZ3JvdXAudGl0bGUgPT09IGR5bmFtaWNHcm91cC50aXRsZSlcbiAgICAgICAgaWYgKCFncm91cCkge1xuICAgICAgICAgIGdyb3VwID0ge1xuICAgICAgICAgICAgLi4uZHluYW1pY0dyb3VwLFxuICAgICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdyb3Vwc1dpdGhPcHRpb25zID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgKGdyb3VwKSA9PiBncm91cC50aXRsZSAhPT0gZHluYW1pY0dyb3VwLnRpdGxlLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDIuIEFkZCBvcHRpb25zIHRvIGdyb3VwIG9wdGlvbnMgYXJyYXkgYW5kIGFkZCB0byBzYW5pdGl6ZWQuc2xhc2hNZW51Lmdyb3Vwc1dpdGhPcHRpb25zXG4gICAgICAgIGlmIChncm91cD8ub3B0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgZ3JvdXAub3B0aW9ucyA9IGdyb3VwLm9wdGlvbnMuY29uY2F0KGdyb3VwLm9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgICAgZ3JvdXBzV2l0aE9wdGlvbnMucHVzaChncm91cClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZ3JvdXBzV2l0aE9wdGlvbnNcbiAgfSwgW2dldER5bmFtaWNPcHRpb25zLCBxdWVyeVN0cmluZywgZWRpdG9yQ29uZmlnPy5mZWF0dXJlc10pXG5cbiAgY29uc3Qgb25TZWxlY3RPcHRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBzZWxlY3RlZE9wdGlvbjogU2xhc2hNZW51T3B0aW9uLFxuICAgICAgbm9kZVRvUmVtb3ZlOiBUZXh0Tm9kZSB8IG51bGwsXG4gICAgICBjbG9zZU1lbnU6ICgpID0+IHZvaWQsXG4gICAgICBtYXRjaGluZ1N0cmluZzogc3RyaW5nLFxuICAgICkgPT4ge1xuICAgICAgZWRpdG9yLnVwZGF0ZSgoKSA9PiB7XG4gICAgICAgIGlmIChub2RlVG9SZW1vdmUpIHtcbiAgICAgICAgICBub2RlVG9SZW1vdmUucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgICBzZWxlY3RlZE9wdGlvbi5vblNlbGVjdCh7IGVkaXRvciwgcXVlcnlTdHJpbmc6IG1hdGNoaW5nU3RyaW5nIH0pXG4gICAgICAgIGNsb3NlTWVudSgpXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2VkaXRvcl0sXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIDxMZXhpY2FsVHlwZWFoZWFkTWVudVBsdWdpblxuICAgICAgICBncm91cHNXaXRoT3B0aW9ucz17Z3JvdXBzfVxuICAgICAgICBtZW51UmVuZGVyRm49eyhcbiAgICAgICAgICBhbmNob3JFbGVtZW50UmVmLFxuICAgICAgICAgIHsgc2VsZWN0T3B0aW9uQW5kQ2xlYW5VcCwgc2VsZWN0ZWRPcHRpb25LZXksIHNldFNlbGVjdGVkT3B0aW9uS2V5IH0sXG4gICAgICAgICkgPT5cbiAgICAgICAgICBhbmNob3JFbGVtZW50UmVmLmN1cnJlbnQgJiYgZ3JvdXBzLmxlbmd0aFxuICAgICAgICAgICAgPyBSZWFjdERPTS5jcmVhdGVQb3J0YWwoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0eXBlYWhlYWQtcG9wb3ZlciBzbGFzaC1tZW51XCI+XG4gICAgICAgICAgICAgICAgICB7Z3JvdXBzLm1hcCgoZ3JvdXApID0+IChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncm91cFwiIGtleT17Z3JvdXAudGl0bGV9PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JvdXAtdGl0bGVcIj57Z3JvdXAudGl0bGV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAge2dyb3VwLm9wdGlvbnMubWFwKChvcHRpb24sIG9pOiBudW1iZXIpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTbGFzaE1lbnVJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtvaX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c2VsZWN0ZWRPcHRpb25LZXkgPT09IG9wdGlvbi5rZXl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17b3B0aW9uLmtleX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkT3B0aW9uS2V5KG9wdGlvbi5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0T3B0aW9uQW5kQ2xlYW5VcChvcHRpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkT3B0aW9uS2V5KG9wdGlvbi5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbj17b3B0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj4sXG4gICAgICAgICAgICAgICAgYW5jaG9yRWxlbWVudFJlZi5jdXJyZW50LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgfVxuICAgICAgICBvblF1ZXJ5Q2hhbmdlPXtzZXRRdWVyeVN0cmluZ31cbiAgICAgICAgb25TZWxlY3RPcHRpb249e29uU2VsZWN0T3B0aW9ufVxuICAgICAgICB0cmlnZ2VyRm49e2NoZWNrRm9yVHJpZ2dlck1hdGNofVxuICAgICAgLz5cbiAgICA8L1JlYWN0LkZyYWdtZW50PlxuICApXG59XG4iXSwibmFtZXMiOlsiU2xhc2hNZW51UGx1Z2luIiwiU2xhc2hNZW51SXRlbSIsImluZGV4IiwiaXNTZWxlY3RlZCIsIm9uQ2xpY2siLCJvbk1vdXNlRW50ZXIiLCJvcHRpb24iLCJjbGFzc05hbWUiLCJidXR0b24iLCJhcmlhLXNlbGVjdGVkIiwiaWQiLCJrZXkiLCJyZWYiLCJzZXRSZWZFbGVtZW50Iiwicm9sZSIsInRhYkluZGV4IiwidHlwZSIsIkljb24iLCJzcGFuIiwidGl0bGUiLCJlZGl0b3IiLCJ1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IiwicXVlcnlTdHJpbmciLCJzZXRRdWVyeVN0cmluZyIsInVzZVN0YXRlIiwiZWRpdG9yQ29uZmlnIiwidXNlRWRpdG9yQ29uZmlnQ29udGV4dCIsImNoZWNrRm9yVHJpZ2dlck1hdGNoIiwidXNlQmFzaWNUeXBlYWhlYWRUcmlnZ2VyTWF0Y2giLCJtaW5MZW5ndGgiLCJnZXREeW5hbWljT3B0aW9ucyIsInVzZUNhbGxiYWNrIiwiZ3JvdXBXaXRoT3B0aW9ucyIsImR5bmFtaWNPcHRpb24iLCJmZWF0dXJlcyIsInNsYXNoTWVudSIsImR5bmFtaWNPcHRpb25zIiwiZHluYW1pY0dyb3VwV2l0aE9wdGlvbnMiLCJjb25jYXQiLCJncm91cHMiLCJ1c2VNZW1vIiwiZ3JvdXBzV2l0aE9wdGlvbnMiLCJncm91cFdpdGhPcHRpb24iLCJwdXNoIiwibWFwIiwiZ3JvdXAiLCJmaWx0ZXJlZE9wdGlvbnMiLCJvcHRpb25zIiwiZmlsdGVyIiwiUmVnRXhwIiwiZXhlYyIsImtleXdvcmRzIiwic29tZSIsImtleXdvcmQiLCJsZW5ndGgiLCJkeW5hbWljT3B0aW9uR3JvdXBzIiwiZHluYW1pY0dyb3VwIiwiZmluZCIsIm9uU2VsZWN0T3B0aW9uIiwic2VsZWN0ZWRPcHRpb24iLCJub2RlVG9SZW1vdmUiLCJjbG9zZU1lbnUiLCJtYXRjaGluZ1N0cmluZyIsInVwZGF0ZSIsInJlbW92ZSIsIm9uU2VsZWN0IiwiUmVhY3QiLCJGcmFnbWVudCIsIkxleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luIiwibWVudVJlbmRlckZuIiwiYW5jaG9yRWxlbWVudFJlZiIsInNlbGVjdE9wdGlvbkFuZENsZWFuVXAiLCJzZWxlY3RlZE9wdGlvbktleSIsInNldFNlbGVjdGVkT3B0aW9uS2V5IiwiY3VycmVudCIsIlJlYWN0RE9NIiwiY3JlYXRlUG9ydGFsIiwiZGl2Iiwib2kiLCJvblF1ZXJ5Q2hhbmdlIiwidHJpZ2dlckZuIl0sIm1hcHBpbmdzIjoiOzs7OytCQXFEZ0JBOzs7ZUFBQUE7Ozt3Q0FuRDBCOytEQUNLO2tFQUVyQjtzQ0FLYTs0Q0FJaEM7UUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVQLFNBQVNDLGNBQWMsRUFDckJDLEtBQUssRUFDTEMsVUFBVSxFQUNWQyxPQUFPLEVBQ1BDLFlBQVksRUFDWkMsTUFBTSxFQU9QO0lBQ0MsSUFBSUMsWUFBWTtJQUNoQixJQUFJSixZQUFZO1FBQ2RJLGFBQWE7SUFDZjtJQUNBLHFCQUNFLHFCQUFDQztRQUNDQyxpQkFBZU47UUFDZkksV0FBV0E7UUFDWEcsSUFBSSxvQkFBb0JSO1FBQ3hCUyxLQUFLTCxPQUFPSyxHQUFHO1FBQ2ZQLFNBQVNBO1FBQ1RDLGNBQWNBO1FBQ2RPLEtBQUtOLE9BQU9PLGFBQWE7UUFDekJDLE1BQUs7UUFDTEMsVUFBVSxDQUFDO1FBQ1hDLE1BQUs7cUJBRUwscUJBQUNWLE9BQU9XLElBQUksdUJBQ1oscUJBQUNDO1FBQUtYLFdBQVU7T0FBUUQsT0FBT2EsS0FBSztBQUcxQztBQUVPLFNBQVNuQjtJQUNkLE1BQU0sQ0FBQ29CLE9BQU8sR0FBR0MsSUFBQUEsaURBQXlCO0lBQzFDLE1BQU0sQ0FBQ0MsYUFBYUMsZUFBZSxHQUFHQyxJQUFBQSxlQUFRLEVBQWdCO0lBQzlELE1BQU0sRUFBRUMsWUFBWSxFQUFFLEdBQUdDLElBQUFBLDRDQUFzQjtJQUUvQyxNQUFNQyx1QkFBdUJDLElBQUFBLHlEQUE2QixFQUFDLEtBQUs7UUFDOURDLFdBQVc7SUFDYjtJQUVBLE1BQU1DLG9CQUFvQkMsSUFBQUEsa0JBQVcsRUFBQztRQUNwQyxJQUFJQyxtQkFBMEMsRUFBRTtRQUVoRCxLQUFLLE1BQU1DLGlCQUFpQlIsY0FBY1MsU0FBU0MsVUFBVUMsZUFBZ0I7WUFDM0UsTUFBTUMsMEJBQTBCSixjQUFjO2dCQUM1Q2I7Z0JBQ0FFO1lBQ0Y7WUFDQVUsbUJBQW1CQSxpQkFBaUJNLE1BQU0sQ0FBQ0Q7UUFDN0M7UUFFQSxPQUFPTDtJQUNULEdBQUc7UUFBQ1o7UUFBUUU7UUFBYUcsY0FBY1M7S0FBUztJQUVoRCxNQUFNSyxTQUEyQkMsSUFBQUEsY0FBTyxFQUFDO1FBQ3ZDLElBQUlDLG9CQUFzQyxFQUFFO1FBQzVDLEtBQUssTUFBTUMsbUJBQW1CakIsY0FBY1MsU0FBU0MsVUFBVU0scUJBQXFCLEVBQUUsQ0FBRTtZQUN0RkEsa0JBQWtCRSxJQUFJLENBQUNEO1FBQ3pCO1FBRUEsSUFBSXBCLGFBQWE7WUFDZiw4QkFBOEI7WUFDOUJtQixvQkFBb0JBLGtCQUFrQkcsR0FBRyxDQUFDLENBQUNDO2dCQUN6QyxNQUFNQyxrQkFBa0JELE1BQU1FLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDLENBQUMxQztvQkFDNUMsT0FBTyxJQUFJMkMsT0FBTzNCLGFBQWEsTUFBTTRCLElBQUksQ0FBQzVDLE9BQU9hLEtBQUssS0FBS2IsT0FBTzZDLFFBQVEsSUFBSSxPQUMxRTdDLE9BQU82QyxRQUFRLENBQUNDLElBQUksQ0FBQyxDQUFDQyxVQUFZLElBQUlKLE9BQU8zQixhQUFhLE1BQU00QixJQUFJLENBQUNHLFlBQ3JFO2dCQUNOO2dCQUNBLElBQUlQLGdCQUFnQlEsTUFBTSxFQUFFO29CQUMxQixPQUFPO3dCQUNMLEdBQUdULEtBQUs7d0JBQ1JFLFNBQVNEO29CQUNYO2dCQUNGO2dCQUNBLE9BQU87WUFDVDtZQUVBTCxvQkFBb0JBLGtCQUFrQk8sTUFBTSxDQUFDLENBQUNILFFBQVVBLFNBQVM7WUFFakUseUJBQXlCO1lBQ3pCLE1BQU1VLHNCQUFzQnpCO1lBRTVCLG9DQUFvQztZQUNwQyxLQUFLLE1BQU0wQixnQkFBZ0JELG9CQUFxQjtnQkFDOUMseURBQXlEO2dCQUN6RCxJQUFJVixRQUFRSixrQkFBa0JnQixJQUFJLENBQUMsQ0FBQ1osUUFBVUEsTUFBTTFCLEtBQUssS0FBS3FDLGFBQWFyQyxLQUFLO2dCQUNoRixJQUFJLENBQUMwQixPQUFPO29CQUNWQSxRQUFRO3dCQUNOLEdBQUdXLFlBQVk7d0JBQ2ZULFNBQVMsRUFBRTtvQkFDYjtnQkFDRixPQUFPO29CQUNMTixvQkFBb0JBLGtCQUFrQk8sTUFBTSxDQUMxQyxDQUFDSCxRQUFVQSxNQUFNMUIsS0FBSyxLQUFLcUMsYUFBYXJDLEtBQUs7Z0JBRWpEO2dCQUVBLHlGQUF5RjtnQkFDekYsSUFBSTBCLE9BQU9FLFNBQVNPLFFBQVE7b0JBQzFCVCxNQUFNRSxPQUFPLEdBQUdGLE1BQU1FLE9BQU8sQ0FBQ1QsTUFBTSxDQUFDTyxNQUFNRSxPQUFPO2dCQUNwRDtnQkFDQU4sa0JBQWtCRSxJQUFJLENBQUNFO1lBQ3pCO1FBQ0Y7UUFFQSxPQUFPSjtJQUNULEdBQUc7UUFBQ1g7UUFBbUJSO1FBQWFHLGNBQWNTO0tBQVM7SUFFM0QsTUFBTXdCLGlCQUFpQjNCLElBQUFBLGtCQUFXLEVBQ2hDLENBQ0U0QixnQkFDQUMsY0FDQUMsV0FDQUM7UUFFQTFDLE9BQU8yQyxNQUFNLENBQUM7WUFDWixJQUFJSCxjQUFjO2dCQUNoQkEsYUFBYUksTUFBTTtZQUNyQjtZQUNBTCxlQUFlTSxRQUFRLENBQUM7Z0JBQUU3QztnQkFBUUUsYUFBYXdDO1lBQWU7WUFDOUREO1FBQ0Y7SUFDRixHQUNBO1FBQUN6QztLQUFPO0lBR1YscUJBQ0UscUJBQUM4QyxPQUFNQyxRQUFRLHNCQUNiLHFCQUFDQyxzREFBMEI7UUFDekIzQixtQkFBbUJGO1FBQ25COEIsY0FBYyxDQUNaQyxrQkFDQSxFQUFFQyxzQkFBc0IsRUFBRUMsaUJBQWlCLEVBQUVDLG9CQUFvQixFQUFFLEdBRW5FSCxpQkFBaUJJLE9BQU8sSUFBSW5DLE9BQU9lLE1BQU0saUJBQ3JDcUIsVUFBU0MsWUFBWSxlQUNuQixxQkFBQ0M7Z0JBQUl0RSxXQUFVO2VBQ1pnQyxPQUFPSyxHQUFHLENBQUMsQ0FBQ0Msc0JBQ1gscUJBQUNnQztvQkFBSXRFLFdBQVU7b0JBQVFJLEtBQUtrQyxNQUFNMUIsS0FBSztpQ0FDckMscUJBQUMwRDtvQkFBSXRFLFdBQVU7bUJBQWVzQyxNQUFNMUIsS0FBSyxHQUN4QzBCLE1BQU1FLE9BQU8sQ0FBQ0gsR0FBRyxDQUFDLENBQUN0QyxRQUFRd0UsbUJBQzFCLHFCQUFDN0U7d0JBQ0NDLE9BQU80RTt3QkFDUDNFLFlBQVlxRSxzQkFBc0JsRSxPQUFPSyxHQUFHO3dCQUM1Q0EsS0FBS0wsT0FBT0ssR0FBRzt3QkFDZlAsU0FBUzs0QkFDUHFFLHFCQUFxQm5FLE9BQU9LLEdBQUc7NEJBQy9CNEQsdUJBQXVCakU7d0JBQ3pCO3dCQUNBRCxjQUFjOzRCQUNab0UscUJBQXFCbkUsT0FBT0ssR0FBRzt3QkFDakM7d0JBQ0FMLFFBQVFBOzRCQU1sQmdFLGlCQUFpQkksT0FBTyxJQUUxQjtRQUVOSyxlQUFleEQ7UUFDZm1DLGdCQUFnQkE7UUFDaEJzQixXQUFXckQ7O0FBSW5CIn0=
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFRleHROb2RlIH0gZnJvbSAnbGV4aWNhbCdcblxuaW1wb3J0IHsgdXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCB9IGZyb20gJ0BsZXhpY2FsL3JlYWN0L0xleGljYWxDb21wb3NlckNvbnRleHQnXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuXG5pbXBvcnQgdHlwZSB7IFNsYXNoTWVudUdyb3VwIH0gZnJvbSAnLi9MZXhpY2FsVHlwZWFoZWFkTWVudVBsdWdpbi9MZXhpY2FsTWVudSdcbmltcG9ydCB0eXBlIHsgU2xhc2hNZW51T3B0aW9uIH0gZnJvbSAnLi9MZXhpY2FsVHlwZWFoZWFkTWVudVBsdWdpbi9MZXhpY2FsTWVudSdcblxuaW1wb3J0IHsgdXNlRWRpdG9yQ29uZmlnQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbmZpZy9FZGl0b3JDb25maWdQcm92aWRlcidcbmltcG9ydCB7XG4gIExleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luLFxuICB1c2VCYXNpY1R5cGVhaGVhZFRyaWdnZXJNYXRjaCxcbn0gZnJvbSAnLi9MZXhpY2FsVHlwZWFoZWFkTWVudVBsdWdpbidcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5mdW5jdGlvbiBTbGFzaE1lbnVJdGVtKHtcbiAgaW5kZXgsXG4gIGlzU2VsZWN0ZWQsXG4gIG9uQ2xpY2ssXG4gIG9uTW91c2VFbnRlcixcbiAgb3B0aW9uLFxufToge1xuICBpbmRleDogbnVtYmVyXG4gIGlzU2VsZWN0ZWQ6IGJvb2xlYW5cbiAgb25DbGljazogKCkgPT4gdm9pZFxuICBvbk1vdXNlRW50ZXI6ICgpID0+IHZvaWRcbiAgb3B0aW9uOiBTbGFzaE1lbnVPcHRpb25cbn0pIHtcbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbignZmllbGRzJylcblxuICBsZXQgY2xhc3NOYW1lID0gJ2l0ZW0nXG4gIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgY2xhc3NOYW1lICs9ICcgc2VsZWN0ZWQnXG4gIH1cblxuICBsZXQgdGl0bGUgPSBvcHRpb24udGl0bGVcbiAgaWYgKG9wdGlvbi5kaXNwbGF5TmFtZSAmJiB0eXBlb2Ygb3B0aW9uLmRpc3BsYXlOYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGl0bGUgPSBvcHRpb24uZGlzcGxheU5hbWUoeyBpMThuIH0pXG4gIH1cbiAgLy8gQ3JvcCB0aXRsZSB0byBtYXguIDUwIGNoYXJhY3RlcnNcbiAgaWYgKHRpdGxlLmxlbmd0aCA+IDI1KSB7XG4gICAgdGl0bGUgPSB0aXRsZS5zdWJzdHJpbmcoMCwgMjUpICsgJy4uLidcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgYXJpYS1zZWxlY3RlZD17aXNTZWxlY3RlZH1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgaWQ9eyd0eXBlYWhlYWQtaXRlbS0nICsgaW5kZXh9XG4gICAgICBrZXk9e29wdGlvbi5rZXl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgb25Nb3VzZUVudGVyPXtvbk1vdXNlRW50ZXJ9XG4gICAgICByZWY9e29wdGlvbi5zZXRSZWZFbGVtZW50fVxuICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICB0YWJJbmRleD17LTF9XG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICA+XG4gICAgICA8b3B0aW9uLkljb24gLz5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHRcIj57dGl0bGV9PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTbGFzaE1lbnVQbHVnaW4oKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCBbZWRpdG9yXSA9IHVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKVxuICBjb25zdCBbcXVlcnlTdHJpbmcsIHNldFF1ZXJ5U3RyaW5nXSA9IHVzZVN0YXRlPG51bGwgfCBzdHJpbmc+KG51bGwpXG4gIGNvbnN0IHsgZWRpdG9yQ29uZmlnIH0gPSB1c2VFZGl0b3JDb25maWdDb250ZXh0KClcblxuICBjb25zdCBjaGVja0ZvclRyaWdnZXJNYXRjaCA9IHVzZUJhc2ljVHlwZWFoZWFkVHJpZ2dlck1hdGNoKCcvJywge1xuICAgIG1pbkxlbmd0aDogMCxcbiAgfSlcblxuICBjb25zdCBnZXREeW5hbWljT3B0aW9ucyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBsZXQgZ3JvdXBXaXRoT3B0aW9uczogQXJyYXk8U2xhc2hNZW51R3JvdXA+ID0gW11cblxuICAgIGZvciAoY29uc3QgZHluYW1pY09wdGlvbiBvZiBlZGl0b3JDb25maWc/LmZlYXR1cmVzLnNsYXNoTWVudS5keW5hbWljT3B0aW9ucykge1xuICAgICAgY29uc3QgZHluYW1pY0dyb3VwV2l0aE9wdGlvbnMgPSBkeW5hbWljT3B0aW9uKHtcbiAgICAgICAgZWRpdG9yLFxuICAgICAgICBxdWVyeVN0cmluZyxcbiAgICAgIH0pXG4gICAgICBncm91cFdpdGhPcHRpb25zID0gZ3JvdXBXaXRoT3B0aW9ucy5jb25jYXQoZHluYW1pY0dyb3VwV2l0aE9wdGlvbnMpXG4gICAgfVxuXG4gICAgcmV0dXJuIGdyb3VwV2l0aE9wdGlvbnNcbiAgfSwgW2VkaXRvciwgcXVlcnlTdHJpbmcsIGVkaXRvckNvbmZpZz8uZmVhdHVyZXNdKVxuXG4gIGNvbnN0IGdyb3VwczogU2xhc2hNZW51R3JvdXBbXSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCBncm91cHNXaXRoT3B0aW9uczogU2xhc2hNZW51R3JvdXBbXSA9IFtdXG4gICAgZm9yIChjb25zdCBncm91cFdpdGhPcHRpb24gb2YgZWRpdG9yQ29uZmlnPy5mZWF0dXJlcy5zbGFzaE1lbnUuZ3JvdXBzV2l0aE9wdGlvbnMgPz8gW10pIHtcbiAgICAgIGdyb3Vwc1dpdGhPcHRpb25zLnB1c2goZ3JvdXBXaXRoT3B0aW9uKVxuICAgIH1cblxuICAgIGlmIChxdWVyeVN0cmluZykge1xuICAgICAgLy8gRmlsdGVyIGN1cnJlbnQgZ3JvdXBzIGZpcnN0XG4gICAgICBncm91cHNXaXRoT3B0aW9ucyA9IGdyb3Vwc1dpdGhPcHRpb25zLm1hcCgoZ3JvdXApID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRPcHRpb25zID0gZ3JvdXAub3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4ge1xuICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHF1ZXJ5U3RyaW5nLCAnZ2knKS5leGVjKG9wdGlvbi50aXRsZSkgfHwgb3B0aW9uLmtleXdvcmRzICE9IG51bGxcbiAgICAgICAgICAgID8gb3B0aW9uLmtleXdvcmRzLnNvbWUoKGtleXdvcmQpID0+IG5ldyBSZWdFeHAocXVlcnlTdHJpbmcsICdnaScpLmV4ZWMoa2V5d29yZCkpXG4gICAgICAgICAgICA6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmdyb3VwLFxuICAgICAgICAgICAgb3B0aW9uczogZmlsdGVyZWRPcHRpb25zLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfSlcblxuICAgICAgZ3JvdXBzV2l0aE9wdGlvbnMgPSBncm91cHNXaXRoT3B0aW9ucy5maWx0ZXIoKGdyb3VwKSA9PiBncm91cCAhPSBudWxsKVxuXG4gICAgICAvLyBOb3cgYWRkIGR5bmFtaWMgZ3JvdXBzXG4gICAgICBjb25zdCBkeW5hbWljT3B0aW9uR3JvdXBzID0gZ2V0RHluYW1pY09wdGlvbnMoKVxuXG4gICAgICAvLyBtZXJnZSBkeW5hbWljIG9wdGlvbnMgaW50byBncm91cHNcbiAgICAgIGZvciAoY29uc3QgZHluYW1pY0dyb3VwIG9mIGR5bmFtaWNPcHRpb25Hcm91cHMpIHtcbiAgICAgICAgLy8gMS4gZmluZCB0aGUgZ3JvdXAgd2l0aCB0aGUgc2FtZSBuYW1lIG9yIGNyZWF0ZSBuZXcgb25lXG4gICAgICAgIGxldCBncm91cCA9IGdyb3Vwc1dpdGhPcHRpb25zLmZpbmQoKGdyb3VwKSA9PiBncm91cC50aXRsZSA9PT0gZHluYW1pY0dyb3VwLnRpdGxlKVxuICAgICAgICBpZiAoIWdyb3VwKSB7XG4gICAgICAgICAgZ3JvdXAgPSB7XG4gICAgICAgICAgICAuLi5keW5hbWljR3JvdXAsXG4gICAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JvdXBzV2l0aE9wdGlvbnMgPSBncm91cHNXaXRoT3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAoZ3JvdXApID0+IGdyb3VwLnRpdGxlICE9PSBkeW5hbWljR3JvdXAudGl0bGUsXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gQWRkIG9wdGlvbnMgdG8gZ3JvdXAgb3B0aW9ucyBhcnJheSBhbmQgYWRkIHRvIHNhbml0aXplZC5zbGFzaE1lbnUuZ3JvdXBzV2l0aE9wdGlvbnNcbiAgICAgICAgaWYgKGdyb3VwPy5vcHRpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgICBncm91cC5vcHRpb25zID0gZ3JvdXAub3B0aW9ucy5jb25jYXQoZ3JvdXAub3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgICBncm91cHNXaXRoT3B0aW9ucy5wdXNoKGdyb3VwKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBncm91cHNXaXRoT3B0aW9uc1xuICB9LCBbZ2V0RHluYW1pY09wdGlvbnMsIHF1ZXJ5U3RyaW5nLCBlZGl0b3JDb25maWc/LmZlYXR1cmVzXSlcblxuICBjb25zdCBvblNlbGVjdE9wdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIHNlbGVjdGVkT3B0aW9uOiBTbGFzaE1lbnVPcHRpb24sXG4gICAgICBub2RlVG9SZW1vdmU6IFRleHROb2RlIHwgbnVsbCxcbiAgICAgIGNsb3NlTWVudTogKCkgPT4gdm9pZCxcbiAgICAgIG1hdGNoaW5nU3RyaW5nOiBzdHJpbmcsXG4gICAgKSA9PiB7XG4gICAgICBlZGl0b3IudXBkYXRlKCgpID0+IHtcbiAgICAgICAgaWYgKG5vZGVUb1JlbW92ZSkge1xuICAgICAgICAgIG5vZGVUb1JlbW92ZS5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgICAgIHNlbGVjdGVkT3B0aW9uLm9uU2VsZWN0KHsgZWRpdG9yLCBxdWVyeVN0cmluZzogbWF0Y2hpbmdTdHJpbmcgfSlcbiAgICAgICAgY2xvc2VNZW51KClcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbZWRpdG9yXSxcbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPExleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luXG4gICAgICAgIGdyb3Vwc1dpdGhPcHRpb25zPXtncm91cHN9XG4gICAgICAgIG1lbnVSZW5kZXJGbj17KFxuICAgICAgICAgIGFuY2hvckVsZW1lbnRSZWYsXG4gICAgICAgICAgeyBzZWxlY3RPcHRpb25BbmRDbGVhblVwLCBzZWxlY3RlZE9wdGlvbktleSwgc2V0U2VsZWN0ZWRPcHRpb25LZXkgfSxcbiAgICAgICAgKSA9PlxuICAgICAgICAgIGFuY2hvckVsZW1lbnRSZWYuY3VycmVudCAmJiBncm91cHMubGVuZ3RoXG4gICAgICAgICAgICA/IFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInR5cGVhaGVhZC1wb3BvdmVyIHNsYXNoLW1lbnVcIj5cbiAgICAgICAgICAgICAgICAgIHtncm91cHMubWFwKChncm91cCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyb3VwXCIga2V5PXtncm91cC50aXRsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncm91cC10aXRsZVwiPntncm91cC50aXRsZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICB7Z3JvdXAub3B0aW9ucy5tYXAoKG9wdGlvbiwgb2k6IG51bWJlcikgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFNsYXNoTWVudUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9e29pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzZWxlY3RlZE9wdGlvbktleSA9PT0gb3B0aW9uLmtleX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtvcHRpb24ua2V5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRPcHRpb25LZXkob3B0aW9uLmtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RPcHRpb25BbmRDbGVhblVwKG9wdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRPcHRpb25LZXkob3B0aW9uLmtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uPXtvcHRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvZGl2PixcbiAgICAgICAgICAgICAgICBhbmNob3JFbGVtZW50UmVmLmN1cnJlbnQsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICB9XG4gICAgICAgIG9uUXVlcnlDaGFuZ2U9e3NldFF1ZXJ5U3RyaW5nfVxuICAgICAgICBvblNlbGVjdE9wdGlvbj17b25TZWxlY3RPcHRpb259XG4gICAgICAgIHRyaWdnZXJGbj17Y2hlY2tGb3JUcmlnZ2VyTWF0Y2h9XG4gICAgICAvPlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gIClcbn1cbiJdLCJuYW1lcyI6WyJTbGFzaE1lbnVQbHVnaW4iLCJTbGFzaE1lbnVJdGVtIiwiaW5kZXgiLCJpc1NlbGVjdGVkIiwib25DbGljayIsIm9uTW91c2VFbnRlciIsIm9wdGlvbiIsImkxOG4iLCJ1c2VUcmFuc2xhdGlvbiIsImNsYXNzTmFtZSIsInRpdGxlIiwiZGlzcGxheU5hbWUiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJidXR0b24iLCJhcmlhLXNlbGVjdGVkIiwiaWQiLCJrZXkiLCJyZWYiLCJzZXRSZWZFbGVtZW50Iiwicm9sZSIsInRhYkluZGV4IiwidHlwZSIsIkljb24iLCJzcGFuIiwiZWRpdG9yIiwidXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCIsInF1ZXJ5U3RyaW5nIiwic2V0UXVlcnlTdHJpbmciLCJ1c2VTdGF0ZSIsImVkaXRvckNvbmZpZyIsInVzZUVkaXRvckNvbmZpZ0NvbnRleHQiLCJjaGVja0ZvclRyaWdnZXJNYXRjaCIsInVzZUJhc2ljVHlwZWFoZWFkVHJpZ2dlck1hdGNoIiwibWluTGVuZ3RoIiwiZ2V0RHluYW1pY09wdGlvbnMiLCJ1c2VDYWxsYmFjayIsImdyb3VwV2l0aE9wdGlvbnMiLCJkeW5hbWljT3B0aW9uIiwiZmVhdHVyZXMiLCJzbGFzaE1lbnUiLCJkeW5hbWljT3B0aW9ucyIsImR5bmFtaWNHcm91cFdpdGhPcHRpb25zIiwiY29uY2F0IiwiZ3JvdXBzIiwidXNlTWVtbyIsImdyb3Vwc1dpdGhPcHRpb25zIiwiZ3JvdXBXaXRoT3B0aW9uIiwicHVzaCIsIm1hcCIsImdyb3VwIiwiZmlsdGVyZWRPcHRpb25zIiwib3B0aW9ucyIsImZpbHRlciIsIlJlZ0V4cCIsImV4ZWMiLCJrZXl3b3JkcyIsInNvbWUiLCJrZXl3b3JkIiwiZHluYW1pY09wdGlvbkdyb3VwcyIsImR5bmFtaWNHcm91cCIsImZpbmQiLCJvblNlbGVjdE9wdGlvbiIsInNlbGVjdGVkT3B0aW9uIiwibm9kZVRvUmVtb3ZlIiwiY2xvc2VNZW51IiwibWF0Y2hpbmdTdHJpbmciLCJ1cGRhdGUiLCJyZW1vdmUiLCJvblNlbGVjdCIsIlJlYWN0IiwiRnJhZ21lbnQiLCJMZXhpY2FsVHlwZWFoZWFkTWVudVBsdWdpbiIsIm1lbnVSZW5kZXJGbiIsImFuY2hvckVsZW1lbnRSZWYiLCJzZWxlY3RPcHRpb25BbmRDbGVhblVwIiwic2VsZWN0ZWRPcHRpb25LZXkiLCJzZXRTZWxlY3RlZE9wdGlvbktleSIsImN1cnJlbnQiLCJSZWFjdERPTSIsImNyZWF0ZVBvcnRhbCIsImRpdiIsIm9pIiwib25RdWVyeUNoYW5nZSIsInRyaWdnZXJGbiJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFrRWdCQTs7O2VBQUFBOzs7d0NBaEUwQjsrREFDSztrRUFFckI7OEJBQ0s7c0NBS1E7NENBSWhDO1FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFUCxTQUFTQyxjQUFjLEVBQ3JCQyxLQUFLLEVBQ0xDLFVBQVUsRUFDVkMsT0FBTyxFQUNQQyxZQUFZLEVBQ1pDLE1BQU0sRUFPUDtJQUNDLE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdDLElBQUFBLDRCQUFjLEVBQUM7SUFFaEMsSUFBSUMsWUFBWTtJQUNoQixJQUFJTixZQUFZO1FBQ2RNLGFBQWE7SUFDZjtJQUVBLElBQUlDLFFBQVFKLE9BQU9JLEtBQUs7SUFDeEIsSUFBSUosT0FBT0ssV0FBVyxJQUFJLE9BQU9MLE9BQU9LLFdBQVcsS0FBSyxZQUFZO1FBQ2xFRCxRQUFR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
@@ -2,7 +2,7 @@
2
2
 
3
3
  html[data-theme='light'] {
4
4
  .slash-menu {
5
- box-shadow: 0px 6px 20px 0px rgba(0, 0, 0, 0.2);
5
+ @include shadow-m;
6
6
  }
7
7
  }
8
8
 
@@ -12,6 +12,9 @@ html[data-theme='light'] {
12
12
  color: var(--color-base-800);
13
13
  border-radius: 4px;
14
14
  list-style: none;
15
+ font-family: var(--font-body);
16
+ max-height: 300px;
17
+ overflow-y: scroll;
15
18
 
16
19
  .group {
17
20
  padding-bottom: 8px;
@@ -24,7 +27,10 @@ html[data-theme='light'] {
24
27
  }
25
28
 
26
29
  .item {
27
- padding-left: 8px;
30
+ all: unset;
31
+ padding-left: 12px;
32
+ font-size: 13px;
33
+ box-sizing: border-box;
28
34
  background: none;
29
35
  border: none;
30
36
  color: var(--color-base-900);
@@ -40,6 +46,7 @@ html[data-theme='light'] {
40
46
 
41
47
  .text {
42
48
  margin-left: 6px;
49
+ text-wrap: nowrap;
43
50
  }
44
51
 
45
52
  .icon {