@ng-nest/ui 18.0.4 → 18.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/auto-complete/auto-complete.component.d.ts +0 -2
  2. package/cascade/cascade.component.d.ts +0 -2
  3. package/checkbox/checkbox.component.d.ts +1 -3
  4. package/color-picker/color-picker.component.d.ts +0 -2
  5. package/esm2022/auto-complete/auto-complete.component.mjs +1 -10
  6. package/esm2022/cascade/cascade.component.mjs +1 -8
  7. package/esm2022/checkbox/checkbox.component.mjs +1 -7
  8. package/esm2022/color-picker/color-picker.component.mjs +1 -7
  9. package/esm2022/dialog/dialog.component.mjs +1 -3
  10. package/esm2022/find/find.component.mjs +1 -7
  11. package/esm2022/form/control.component.mjs +7 -5
  12. package/esm2022/input-number/input-number.component.mjs +1 -5
  13. package/esm2022/radio/radio.component.mjs +1 -7
  14. package/esm2022/resizable/resizable.directive.mjs +1 -2
  15. package/esm2022/select/select-portal.component.mjs +3 -3
  16. package/esm2022/select/select.component.mjs +48 -28
  17. package/esm2022/select/select.property.mjs +7 -2
  18. package/esm2022/slider-select/slider-select.component.mjs +6 -2
  19. package/esm2022/switch/switch.component.mjs +1 -5
  20. package/esm2022/table/table-body.component.mjs +1 -2
  21. package/esm2022/textarea/textarea.component.mjs +1 -5
  22. package/esm2022/tree-select/tree-select.component.mjs +1 -7
  23. package/fesm2022/ng-nest-ui-auto-complete.mjs +0 -9
  24. package/fesm2022/ng-nest-ui-auto-complete.mjs.map +1 -1
  25. package/fesm2022/ng-nest-ui-cascade.mjs +0 -7
  26. package/fesm2022/ng-nest-ui-cascade.mjs.map +1 -1
  27. package/fesm2022/ng-nest-ui-checkbox.mjs +0 -6
  28. package/fesm2022/ng-nest-ui-checkbox.mjs.map +1 -1
  29. package/fesm2022/ng-nest-ui-color-picker.mjs +0 -6
  30. package/fesm2022/ng-nest-ui-color-picker.mjs.map +1 -1
  31. package/fesm2022/ng-nest-ui-dialog.mjs +0 -2
  32. package/fesm2022/ng-nest-ui-dialog.mjs.map +1 -1
  33. package/fesm2022/ng-nest-ui-find.mjs +0 -6
  34. package/fesm2022/ng-nest-ui-find.mjs.map +1 -1
  35. package/fesm2022/ng-nest-ui-form.mjs +6 -4
  36. package/fesm2022/ng-nest-ui-form.mjs.map +1 -1
  37. package/fesm2022/ng-nest-ui-input-number.mjs +0 -4
  38. package/fesm2022/ng-nest-ui-input-number.mjs.map +1 -1
  39. package/fesm2022/ng-nest-ui-radio.mjs +0 -6
  40. package/fesm2022/ng-nest-ui-radio.mjs.map +1 -1
  41. package/fesm2022/ng-nest-ui-resizable.mjs +0 -1
  42. package/fesm2022/ng-nest-ui-resizable.mjs.map +1 -1
  43. package/fesm2022/ng-nest-ui-select.mjs +55 -30
  44. package/fesm2022/ng-nest-ui-select.mjs.map +1 -1
  45. package/fesm2022/ng-nest-ui-slider-select.mjs +5 -1
  46. package/fesm2022/ng-nest-ui-slider-select.mjs.map +1 -1
  47. package/fesm2022/ng-nest-ui-switch.mjs +0 -4
  48. package/fesm2022/ng-nest-ui-switch.mjs.map +1 -1
  49. package/fesm2022/ng-nest-ui-table.mjs +0 -1
  50. package/fesm2022/ng-nest-ui-table.mjs.map +1 -1
  51. package/fesm2022/ng-nest-ui-textarea.mjs +0 -4
  52. package/fesm2022/ng-nest-ui-textarea.mjs.map +1 -1
  53. package/fesm2022/ng-nest-ui-tree-select.mjs +0 -6
  54. package/fesm2022/ng-nest-ui-tree-select.mjs.map +1 -1
  55. package/find/find.component.d.ts +0 -2
  56. package/input-number/input-number.component.d.ts +0 -2
  57. package/package.json +91 -91
  58. package/radio/radio.component.d.ts +1 -3
  59. package/select/select.component.d.ts +1 -1
  60. package/select/select.property.d.ts +11 -6
  61. package/slider-select/slider-select.component.d.ts +1 -1
  62. package/switch/switch.component.d.ts +0 -2
  63. package/textarea/textarea.component.d.ts +0 -2
  64. package/tree-select/tree-select.component.d.ts +0 -1
@@ -615,12 +615,6 @@ export class XTreeSelectComponent extends XTreeSelectProperty {
615
615
  setPortal() {
616
616
  this.portalAttached() && this.portal?.overlayRef?.updatePositionStrategy(this.setPlacement());
617
617
  }
618
- formControlChanges() {
619
- this.setData();
620
- this.ngOnInit();
621
- this.writeValue(this.value());
622
- this.ngAfterViewInit();
623
- }
624
618
  onKeydown($event) {
625
619
  this.keydownSubject.next($event);
626
620
  if ($event.keyCode !== TAB && !this.search()) {
@@ -646,4 +640,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
646
640
  type: Component,
647
641
  args: [{ selector: `${XTreeSelectPrefix}`, standalone: true, imports: [FormsModule, ReactiveFormsModule, XInputComponent, XTagComponent, XOutletDirective], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [XValueAccessor(XTreeSelectComponent)], template: "<div #treeSelect class=\"x-tree-select\" [class.x-tree-select-multiple]=\"multiple()\">\r\n <div class=\"x-tree-select-row\">\r\n <x-input\r\n #inputCom\r\n type=\"text\"\r\n [label]=\"label()\"\r\n [labelWidth]=\"labelWidth()\"\r\n [labelAlign]=\"labelAlign()\"\r\n [justify]=\"justify()\"\r\n [align]=\"align()\"\r\n [direction]=\"direction()\"\r\n [disabled]=\"disabledComputed()\"\r\n [required]=\"requiredComputed()\"\r\n [validator]=\"validatorComputed()\"\r\n [icon]=\"icon()\"\r\n [iconSpin]=\"iconSpin()\"\r\n [placeholder]=\"placeholder()\"\r\n [readonly]=\"getReadonly()\"\r\n [clearable]=\"showClearable()\"\r\n [(ngModel)]=\"displayValue\"\r\n [valueTpl]=\"valueTplSignal() ? valueTplSignal() : nodeTpl()\"\r\n [valueTplContext]=\"valueTplContextSignal()\"\r\n [size]=\"size()\"\r\n [bordered]=\"bordered()\"\r\n [before]=\"before()\"\r\n [after]=\"after()\"\r\n [pattern]=\"patternComputed()\"\r\n [message]=\"messageComputed()\"\r\n [pointer]=\"true\"\r\n [(active)]=\"active\"\r\n (clearEmit)=\"clearEmit()\"\r\n (xKeydown)=\"onKeydown($event)\"\r\n (xInput)=\"onInput($event)\"\r\n (xFocus)=\"onFocus($event)\"\r\n (xClick)=\"showPortal(true)\"\r\n (xMouseenter)=\"menter()\"\r\n (xMouseleave)=\"mleave()\"\r\n (xComposition)=\"composition.set($event)\"\r\n ></x-input>\r\n </div>\r\n</div>\r\n\r\n<ng-template #multipleValueTpl>\r\n @for (node of displayNodes(); track node.id; let i = $index) {\r\n <x-tag\r\n [@.disabled]=\"true\"\r\n [bordered]=\"false\"\r\n [closable]=\"!disabled()\"\r\n [type]=\"'info'\"\r\n (close)=\"closeNode($event, node, i)\"\r\n [size]=\"size()\"\r\n >{{ showPath() ? node.path : node.label }}</x-tag\r\n >\r\n }\r\n @if (showDisplayMore()) {\r\n <x-tag [@.disabled]=\"true\" [bordered]=\"false\" [type]=\"'info'\" [size]=\"size()\">\r\n <ng-container *xOutlet=\"getMaxTagContent(); context: { $surplus: selectedSurplus(), $total: selectedTotal() }\">{{\r\n displayMore()\r\n }}</ng-container>\r\n </x-tag>\r\n }\r\n @if (search()) {\r\n <x-input\r\n #multipleInput\r\n [bordered]=\"false\"\r\n [size]=\"size()\"\r\n [(ngModel)]=\"multipleSearchValue\"\r\n (xInput)=\"onInput($event)\"\r\n (xKeydown)=\"onKeydown($event)\"\r\n ></x-input>\r\n }\r\n</ng-template>\r\n", styles: ["@charset \"UTF-8\";x-tree-select{display:inline-block;width:12rem}.x-tree-select{margin:0;padding:0;width:100%}.x-tree-select x-input{width:100%;color:#252022}.x-tree-select-multiple .x-input-value-template-value{display:flex;align-items:center;margin-bottom:.125rem;flex-wrap:wrap;width:initial;height:initial!important;left:.125rem!important}.x-tree-select-multiple .x-input-value-template-value>x-tag{display:inline-flex;margin-left:.0625rem;margin-top:.125rem}.x-tree-select-multiple .x-input-value-template-value>x-tag .x-tag-big{height:var(--x-height-large);line-height:var(--x-height-large);padding:0 var(--x-padding-large)}.x-tree-select-multiple .x-input-value-template-value>x-tag .x-tag-big>.x-icon{right:calc(-var(--x-padding-large)/2)}.x-tree-select-multiple .x-input-value-template-value>x-tag .x-tag-large{height:var(--x-height-medium);line-height:var(--x-height-medium);padding:0 var(--x-padding-medium)}.x-tree-select-multiple .x-input-value-template-value>x-tag .x-tag-large>.x-icon{right:calc(-var(--x-padding-medium)/2)}.x-tree-select-multiple .x-input-value-template-value>x-tag .x-tag-medium{height:var(--x-height-small);line-height:var(--x-height-small);padding:0 var(--x-padding-small)}.x-tree-select-multiple .x-input-value-template-value>x-tag .x-tag-medium>.x-icon{right:calc(-var(--x-padding-small)/2)}.x-tree-select-multiple .x-input-value-template-value>x-tag .x-tag-small{height:var(--x-height-mini);line-height:var(--x-height-mini);padding:0 var(--x-padding-mini)}.x-tree-select-multiple .x-input-value-template-value>x-tag .x-tag-small>.x-icon{right:calc(-var(--x-padding-mini)/2)}.x-tree-select-multiple .x-input-value-template-value>x-tag .x-tag-mini{height:1.125rem;line-height:1.125rem;padding:0 .125rem}.x-tree-select-multiple .x-input-value-template-value>x-tag .x-tag-mini>.x-icon{right:-.0625rem}.x-tree-select-multiple .x-input-value-template-value>x-input{margin-top:.125rem;width:5rem}.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-big>.x-input-row>.x-input-input>input,.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-big>.x-input-row>.x-input-input>.x-input-row-before:not(.x-input-row-before-template),.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-big>.x-input-row>.x-input-input>.x-input-row-after:not(.x-input-row-after-template),.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-big>.x-input-row>.x-input-input>.x-input-value-template-value{height:var(--x-height-large);line-height:var(--x-height-large);padding:0 var(--x-padding-large)}.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-big>.x-input-row>.x-input-input>.x-input-max-length{height:var(--x-height-large);line-height:var(--x-height-large)}.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-big>.x-input-row>.x-input-row-before:not(.x-input-row-before-template),.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-big>.x-input-row>.x-input-row-after:not(.x-input-row-after-template){height:var(--x-height-large);line-height:var(--x-height-large);padding:0 var(--x-padding-large)}.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-big>label{height:var(--x-height-large);line-height:var(--x-height-large)}.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-large>.x-input-row>.x-input-input>input,.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-large>.x-input-row>.x-input-input>.x-input-row-before:not(.x-input-row-before-template),.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-large>.x-input-row>.x-input-input>.x-input-row-after:not(.x-input-row-after-template),.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-large>.x-input-row>.x-input-input>.x-input-value-template-value{height:var(--x-height-medium);line-height:var(--x-height-medium);padding:0 var(--x-padding-medium)}.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-large>.x-input-row>.x-input-input>.x-input-max-length{height:var(--x-height-medium);line-height:var(--x-height-medium)}.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-large>.x-input-row>.x-input-row-before:not(.x-input-row-before-template),.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-large>.x-input-row>.x-input-row-after:not(.x-input-row-after-template){height:var(--x-height-medium);line-height:var(--x-height-medium);padding:0 var(--x-padding-medium)}.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-large>label{height:var(--x-height-medium);line-height:var(--x-height-medium)}.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-medium>.x-input-row>.x-input-input>input,.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-medium>.x-input-row>.x-input-input>.x-input-row-before:not(.x-input-row-before-template),.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-medium>.x-input-row>.x-input-input>.x-input-row-after:not(.x-input-row-after-template),.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-medium>.x-input-row>.x-input-input>.x-input-value-template-value{height:var(--x-height-small);line-height:var(--x-height-small);padding:0 var(--x-padding-small)}.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-medium>.x-input-row>.x-input-input>.x-input-max-length{height:var(--x-height-small);line-height:var(--x-height-small)}.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-medium>.x-input-row>.x-input-row-before:not(.x-input-row-before-template),.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-medium>.x-input-row>.x-input-row-after:not(.x-input-row-after-template){height:var(--x-height-small);line-height:var(--x-height-small);padding:0 var(--x-padding-small)}.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-medium>label{height:var(--x-height-small);line-height:var(--x-height-small)}.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-small>.x-input-row>.x-input-input>input,.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-small>.x-input-row>.x-input-input>.x-input-row-before:not(.x-input-row-before-template),.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-small>.x-input-row>.x-input-input>.x-input-row-after:not(.x-input-row-after-template),.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-small>.x-input-row>.x-input-input>.x-input-value-template-value{height:var(--x-height-mini);line-height:var(--x-height-mini);padding:0 var(--x-padding-mini)}.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-small>.x-input-row>.x-input-input>.x-input-max-length{height:var(--x-height-mini);line-height:var(--x-height-mini)}.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-small>.x-input-row>.x-input-row-before:not(.x-input-row-before-template),.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-small>.x-input-row>.x-input-row-after:not(.x-input-row-after-template){height:var(--x-height-mini);line-height:var(--x-height-mini);padding:0 var(--x-padding-mini)}.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-small>label{height:var(--x-height-mini);line-height:var(--x-height-mini)}.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-mini>.x-input-row>.x-input-input>input,.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-mini>.x-input-row>.x-input-input>.x-input-row-before:not(.x-input-row-before-template),.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-mini>.x-input-row>.x-input-input>.x-input-row-after:not(.x-input-row-after-template),.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-mini>.x-input-row>.x-input-input>.x-input-value-template-value{height:1.125rem;line-height:1.125rem;padding:0 .125rem}.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-mini>.x-input-row>.x-input-input>.x-input-max-length{height:1.125rem;line-height:1.125rem}.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-mini>.x-input-row>.x-input-row-before:not(.x-input-row-before-template),.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-mini>.x-input-row>.x-input-row-after:not(.x-input-row-after-template){height:1.125rem;line-height:1.125rem;padding:0 .125rem}.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-mini>label{height:1.125rem;line-height:1.125rem}.x-tree-select-multiple .x-input-value-template-value>x-input .x-input-row>.x-input-input>input{background-color:transparent}.x-tree-select-portal{padding:.25rem;color:var(--x-text);width:100%;border-radius:var(--x-border-small-radius);box-shadow:var(--x-box-shadow);position:relative;display:flex;flex-direction:column;background-color:var(--x-background-100);overflow:hidden auto;max-height:calc(calc(var(--x-font-size) + .875rem) * 6 + var(--x-border-width) * 7)}.x-tree-select-portal x-tree{width:100%}.x-tree-select-portal x-empty{margin:1rem;display:block}.x-tree-select-portal-virtual-scroll{padding:0;overflow:hidden}.x-tree-select-portal-virtual-scroll .x-tree-content{padding:.25rem}\n"] }]
648
642
  }], ctorParameters: () => [] });
649
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdHJlZS1zZWxlY3QvdHJlZS1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdHJlZS1zZWxlY3QvdHJlZS1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUNMLFNBQVMsRUFFVCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUdWLGdCQUFnQixFQUVoQixNQUFNLEVBR04sU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBRU4sTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRyxPQUFPLEVBQ0wsUUFBUSxFQUNSLGFBQWEsRUFDYixTQUFTLEVBQ1QsUUFBUSxFQUVSLGNBQWMsRUFDZCxXQUFXLEVBQ1gsUUFBUSxFQUNSLFNBQVMsRUFDVCxPQUFPLEVBQ1AsT0FBTyxFQUNQLFNBQVMsRUFFVCxRQUFRLEVBRVQsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsY0FBYyxFQUFxQix3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RSxPQUFPLEVBQ0wsT0FBTyxFQUtSLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLG9CQUFv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LENBQUM7UUFJRCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0RSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsRixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1RSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1RSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFGLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25GLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sQ0FBQyxH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Q0FBQyxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQWtCO1FBQ3hCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlHLENBQUM7aUlBL25CVSxvQkFBb0I7cUhBQXBCLG9CQUFvQiw0REFGcEIsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsQ0FBQywrZ0JDcEVuRCx3OEVBd0VBLHlyU0RUWSxXQUFXLG90QkFBRSxtQkFBbUIsK0JBQUUsZUFBZSxvREFBRSxhQUFhLGtEQUFFLGdCQUFnQjs7MkZBT2pGLG9CQUFvQjtrQkFWaEMsU0FBUzsrQkFDRSxHQUFHLGlCQUFpQixFQUFFLGNBQ3BCLElBQUksV0FDUCxDQUFDLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixDQUFDLGlCQUc5RSxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsY0FBYyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YmplY3QsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBPbkNoYW5nZXMsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxuICBUZW1wbGF0ZVJlZixcclxuICBpbmplY3QsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgdmlld0NoaWxkLFxyXG4gIGNvbXB1dGVkLFxyXG4gIHNpZ25hbCxcclxuICBDb21wb25lbnRSZWYsXHJcbiAgZWZmZWN0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFhUcmVlU2VsZWN0Tm9kZSwgWFRyZWVTZWxlY3RQcm9wZXJ0eSwgWFRyZWVTZWxlY3RQcmVmaXggfSBmcm9tICcuL3RyZWUtc2VsZWN0LnByb3BlcnR5JztcclxuaW1wb3J0IHtcclxuICBYSXNFbXB0eSxcclxuICBYSXNPYnNlcnZhYmxlLFxyXG4gIFhJc0NoYW5nZSxcclxuICBYU2V0RGF0YSxcclxuICBYUG9zaXRpb25Ub3BCb3R0b20sXHJcbiAgWElzT2JqZWN0QXJyYXksXHJcbiAgWElzRnVuY3Rpb24sXHJcbiAgWElzQXJyYXksXHJcbiAgWElzU3RyaW5nLFxyXG4gIFhSZW1vdmUsXHJcbiAgWFJlc2l6ZSxcclxuICBYQ29tcHV0ZWQsXHJcbiAgWFJlc2l6ZU9ic2VydmVyLFxyXG4gIFhQYXJlbnRzLFxyXG4gIFhQbGFjZW1lbnRcclxufSBmcm9tICdAbmctbmVzdC91aS9jb3JlJztcclxuaW1wb3J0IHsgWFBvcnRhbFNlcnZpY2UsIFhQb3J0YWxPdmVybGF5UmVmLCBYUG9ydGFsQ29ubmVjdGVkUG9zaXRpb24gfSBmcm9tICdAbmctbmVzdC91aS9wb3J0YWwnO1xyXG5pbXBvcnQgeyBYSW5wdXRDb21wb25lbnQgfSBmcm9tICdAbmctbmVzdC91aS9pbnB1dCc7XHJcbmltcG9ydCB7IFhUcmVlU2VsZWN0UG9ydGFsQ29tcG9uZW50IH0gZnJvbSAnLi90cmVlLXNlbGVjdC1wb3J0YWwuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBPdmVybGF5LFxyXG4gIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSxcclxuICBDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25DaGFuZ2UsXHJcbiAgT3ZlcmxheUNvbmZpZyxcclxuICBPdmVybGF5UmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwsIHRocm90dGxlVGltZSwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IERPV05fQVJST1csIFVQX0FSUk9XLCBFTlRFUiwgTUFDX0VOVEVSLCBMRUZUX0FSUk9XLCBSSUdIVF9BUlJPVywgVEFCLCBCQUNLU1BBQ0UgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xyXG5pbXBvcnQgeyBYVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0BuZy1uZXN0L3VpL2Jhc2UtZm9ybSc7XHJcbmltcG9ydCB7IFhJMThuVHJlZVNlbGVjdCwgWEkxOG5TZXJ2aWNlLCB6aF9DTiB9IGZyb20gJ0BuZy1uZXN0L3VpL2kxOG4nO1xyXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFhUYWdDb21wb25lbnQgfSBmcm9tICdAbmctbmVzdC91aS90YWcnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgWE91dGxldERpcmVjdGl2ZSB9IGZyb20gJ0BuZy1uZXN0L3VpL291dGxldCc7XHJcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IGAke1hUcmVlU2VsZWN0UHJlZml4fWAsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFhJbnB1dENvbXBvbmVudCwgWFRhZ0NvbXBvbmVudCwgWE91dGxldERpcmVjdGl2ZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90cmVlLXNlbGVjdC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbWFZhbHVlQWNjZXNzb3IoWFRyZWVTZWxlY3RDb21wb25lbnQpXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgWFRyZWVTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBYVHJlZVNlbGVjdFByb3BlcnR5IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSB1blN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXIhOiBYUmVzaXplT2JzZXJ2ZXI7XHJcbiAgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xyXG4gIHByaXZhdGUgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcclxuICBvdmVycmlkZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIHByaXZhdGUgcG9ydGFsU2VydmljZSA9IGluamVjdChYUG9ydGFsU2VydmljZSk7XHJcbiAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xyXG4gIHByaXZhdGUgb3ZlcmxheSA9IGluamVjdChPdmVybGF5KTtcclxuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoWEkxOG5TZXJ2aWNlKTtcclxuICBwcml2YXRlIGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XHJcblxyXG4gIGxvY2FsZSA9IHRvU2lnbmFsKHRoaXMuaTE4bi5sb2NhbGVDaGFuZ2UucGlwZShtYXAoKHgpID0+IHgudHJlZVNlbGVjdCBhcyBYSTE4blRyZWVTZWxlY3QpKSwge1xyXG4gICAgaW5pdGlhbFZhbHVlOiB6aF9DTi50cmVlU2VsZWN0XHJcbiAgfSk7XHJcblxyXG4gIGlucHV0Q29tID0gdmlld0NoaWxkLnJlcXVpcmVkPFhJbnB1dENvbXBvbmVudD4oJ2lucHV0Q29tJyk7XHJcbiAgdHJlZVNlbGVjdCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oJ3RyZWVTZWxlY3QnKTtcclxuICBtdWx0aXBsZVZhbHVlVHBsID0gdmlld0NoaWxkLnJlcXVpcmVkPFRlbXBsYXRlUmVmPHZvaWQ+PignbXVsdGlwbGVWYWx1ZVRwbCcpO1xyXG4gIG11bHRpcGxlSW5wdXQgPSB2aWV3Q2hpbGQ8WElucHV0Q29tcG9uZW50PignbXVsdGlwbGVJbnB1dCcpO1xyXG5cclxuICBnZXRSZWFkb25seSA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLnJlYWRvbmx5KCkgJiYgIXRoaXMuc2VhcmNoKCkpIHx8ICh0aGlzLnNlYXJjaCgpICYmIEJvb2xlYW4odGhpcy5tdWx0aXBsZSgpKSkpO1xyXG4gIGdldE1heFRhZ0NvbnRlbnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm1heFRhZ0NvbnRlbnQoKSB8fCB0aGlzLmxvY2FsZSgpLm1heFRhZ0NvbnRlbnQpO1xyXG4gIG9iamVjdEFycmF5ID0gY29tcHV0ZWQoKCkgPT4gWElzT2JqZWN0QXJyYXkodGhpcy52YWx1ZSgpKSk7XHJcblxyXG4gIG92ZXJyaWRlIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUoKSkge1xyXG4gICAgICBpZiAoWElzRW1wdHkodmFsdWUpKSB7XHJcbiAgICAgICAgdmFsdWUgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIVhJc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIHZhbHVlID0gW3ZhbHVlXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy52YWx1ZS5zZXQodmFsdWUpO1xyXG4gICAgdGhpcy5zZXREaXNwbGF5VmFsdWUoKTtcclxuICB9XHJcblxyXG4gIGVudGVyID0gc2lnbmFsKGZhbHNlKTtcclxuICBzaG93Q2xlYXJhYmxlID0gc2lnbmFsKGZhbHNlKTtcclxuICBkaXNwbGF5VmFsdWUgPSBzaWduYWwoJycpO1xyXG4gIG11bHRpcGxlU2VhcmNoVmFsdWUgPSBzaWduYWwoJycpO1xyXG4gIG5vZGVzID0gc2lnbmFsPFhUcmVlU2VsZWN0Tm9kZVtdPihbXSk7XHJcbiAgc2VsZWN0ZWROb2RlcyA9IHNpZ25hbDxYVHJlZVNlbGVjdE5vZGVbXT4oW10pO1xyXG4gIGRpc3BsYXlOb2RlcyA9IHNpZ25hbDxYVHJlZVNlbGVjdE5vZGVbXT4oW10pO1xyXG4gIGRpc3BsYXlNb3JlID0gc2lnbmFsKCcnKTtcclxuICBzaG93RGlzcGxheU1vcmUgPSBzaWduYWwoZmFsc2UpO1xyXG4gIHNlYXJjaE5vZGVzID0gc2lnbmFsPFhUcmVlU2VsZWN0Tm9kZVtdPihbXSk7XHJcbiAgY2xvbmVOb2RlcyA9IHNpZ25hbDxYVHJlZVNlbGVjdE5vZGVbXT4oW10pO1xyXG4gIHBvcnRhbCE6IFhQb3J0YWxPdmVybGF5UmVmPFhUcmVlU2VsZWN0UG9ydGFsQ29tcG9uZW50PjtcclxuICBpY29uID0gc2lnbmFsKCdmdG8tY2hldnJvbi1kb3duJyk7XHJcbiAgaWNvblNwaW4gPSBzaWduYWwoZmFsc2UpO1xyXG4gIGFuaW1hdGluZyA9IHNpZ25hbChmYWxzZSk7XHJcbiAgc2VsZWN0ZWRTdXJwbHVzID0gc2lnbmFsKDApO1xyXG4gIHNlbGVjdGVkVG90YWwgPSBzaWduYWwoMCk7XHJcbiAgdmFsdWVUcGxDb250ZXh0U2lnbmFsID0gc2lnbmFsPHsgJG5vZGU6IGFueTsgJGlzVmFsdWU6IGJvb2xlYW4gfT4oeyAkbm9kZTogbnVsbCwgJGlzVmFsdWU6IHRydWUgfSk7XHJcbiAgY2xvc2VTdWJqZWN0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuICBrZXlkb3duU3ViamVjdDogU3ViamVjdDxLZXlib2FyZEV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgaW5wdXRDaGFuZ2U6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgY29tcG9zaXRpb24gPSBzaWduYWwoZmFsc2UpO1xyXG4gIG11bHRpcGxlSW5wdXRTaXplQ2hhbmdlID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xyXG4gIHZhbHVlVHBsU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUoKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZVZhbHVlVHBsKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy52YWx1ZVRwbCgpO1xyXG4gIH0pO1xyXG4gIHByaXZhdGUgcmVhbFBsYWNlbWVudCA9IHNpZ25hbDxYUGxhY2VtZW50IHwgbnVsbD4obnVsbCk7XHJcbiAgcG9ydGFsQ29tcG9uZW50ID0gc2lnbmFsPENvbXBvbmVudFJlZjxYVHJlZVNlbGVjdFBvcnRhbENvbXBvbmVudD4gfCBudWxsPihudWxsKTtcclxuICBwb3J0YWxPdmVybGF5UmVmID0gc2lnbmFsPE92ZXJsYXlSZWYgfCBudWxsPihudWxsKTtcclxuICBpbnB1dENoYW5nZWQgPSB0b1NpZ25hbCh0aGlzLmlucHV0Q2hhbmdlKTtcclxuICBwb3J0YWxEYXRhID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLm5vZGVzKCk7XHJcbiAgICBpZiAoWElzRnVuY3Rpb24odGhpcy5kYXRhKCkpKSByZXR1cm4gbm9kZXM7XHJcbiAgICBpZiAoWElzRW1wdHkodGhpcy5pbnB1dENoYW5nZWQoKSkpIHJldHVybiBub2RlcztcclxuICAgIHJldHVybiB0aGlzLnNlYXJjaE5vZGVzKCk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnBvcnRhbENvbXBvbmVudCgpPy5zZXRJbnB1dCgnZGF0YScsIHRoaXMucG9ydGFsRGF0YSgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ3ZhbHVlJywgdGhpcy52YWx1ZSgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ3BsYWNlbWVudCcsIHRoaXMucmVhbFBsYWNlbWVudCgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ211bHRpcGxlJywgdGhpcy5tdWx0aXBsZSgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ25vZGVUcGwnLCB0aGlzLm5vZGVUcGwoKSkpO1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdpbnB1dENvbScsIHRoaXMuaW5wdXRDb20oKSkpO1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdwb3J0YWxNYXhIZWlnaHQnLCB0aGlzLnBvcnRhbE1heEhlaWdodCgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ29iamVjdEFycmF5JywgdGhpcy5vYmplY3RBcnJheSgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ3NlbGVjdEFsbCcsIHRoaXMuc2VsZWN0QWxsKCkpKTtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnBvcnRhbENvbXBvbmVudCgpPy5zZXRJbnB1dCgnc2VsZWN0QWxsVGV4dCcsIHRoaXMuc2VsZWN0QWxsVGV4dCgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ2Nhc2VTZW5zaXRpdmUnLCB0aGlzLmNhc2VTZW5zaXRpdmUoKSkpO1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdzZWFyY2gnLCB0aGlzLnNlYXJjaCgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ3ZpcnR1YWxTY3JvbGwnLCB0aGlzLnZpcnR1YWxTY3JvbGwoKSkpO1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdzaXplJywgdGhpcy5zaXplKCkpKTtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnBvcnRhbENvbXBvbmVudCgpPy5zZXRJbnB1dCgna2V5d29yZFRleHQnLCB0aGlzLmlucHV0Q2hhbmdlZCgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ29ubHlMZWFmJywgdGhpcy5vbmx5TGVhZigpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ2V4cGFuZGVkTGV2ZWwnLCB0aGlzLmV4cGFuZGVkTGV2ZWwoKSkpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNldFN1YmplY3QoKTtcclxuICAgIHRoaXMuc2V0UGFyYW50U2Nyb2xsKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBjb25zdCB7IGRhdGEgfSA9IGNoYW5nZXM7XHJcbiAgICBYSXNDaGFuZ2UoZGF0YSkgJiYgdGhpcy5zZXREYXRhKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnNldFBvcnRhbCgpO1xyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUoKSAmJiB0aGlzLmlucHV0Q29tKCkuaW5wdXRWYWx1ZVJlZigpKSB7XHJcbiAgICAgIFhSZXNpemUodGhpcy5pbnB1dENvbSgpLmlucHV0VmFsdWVSZWYoKT8ubmF0aXZlRWxlbWVudClcclxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMzApLCB0YWtlVW50aWwodGhpcy51blN1YmplY3QpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSB4LnJlc2l6ZU9ic2VydmVyO1xyXG4gICAgICAgICAgdGhpcy5zZXRNdXRpcGxlSW5wdXRTaXplKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMudW5TdWJqZWN0Lm5leHQoKTtcclxuICAgIHRoaXMudW5TdWJqZWN0LmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XHJcbiAgfVxyXG5cclxuICBzZXREYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuYXN5bmMoKSkgcmV0dXJuO1xyXG4gICAgWFNldERhdGE8WFRyZWVTZWxlY3ROb2RlPih0aGlzLmRhdGEoKSwgdGhpcy51blN1YmplY3QpLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICB0aGlzLm5vZGVzLnNldCh4KTtcclxuICAgICAgdGhpcy5zZXREaXNwbGF5VmFsdWUoKTtcclxuICAgICAgdGhpcy5zZXRQb3J0YWwoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ViamVjdCgpIHtcclxuICAgIHRoaXMuY2xvc2VTdWJqZWN0LnBpcGUodGFrZVVudGlsKHRoaXMudW5TdWJqZWN0KSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5jbG9zZVBvcnRhbCgpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmlucHV0Q2hhbmdlXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZSgpKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsKHRoaXMudW5TdWJqZWN0KSlcclxuICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMubW9kZWxDaGFuZ2UoeCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5rZXlkb3duU3ViamVjdC5waXBlKHRocm90dGxlVGltZSgxMCksIHRha2VVbnRpbCh0aGlzLnVuU3ViamVjdCkpLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICBjb25zdCBrZXlDb2RlID0geC5rZXlDb2RlO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXRoaXMucG9ydGFsQXR0YWNoZWQoKSAmJlxyXG4gICAgICAgIFtET1dOX0FSUk9XLCBVUF9BUlJPVywgTEVGVF9BUlJPVywgUklHSFRfQVJST1csIEVOVEVSLCBNQUNfRU5URVIsIEJBQ0tTUEFDRV0uaW5jbHVkZXMoa2V5Q29kZSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dENoYW5nZS5uZXh0KHRoaXMuZGlzcGxheVZhbHVlKCkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMubXVsdGlwbGVJbnB1dFNpemVDaGFuZ2UucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0YWtlVW50aWwodGhpcy51blN1YmplY3QpKS5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgaWYgKHRoaXMubXVsdGlwbGVJbnB1dCgpKSB7XHJcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLm11bHRpcGxlSW5wdXQoKSEuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoaW5wdXQsICd3aWR0aCcsIGAke3h9cHhgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQYXJhbnRTY3JvbGwoKSB7XHJcbiAgICBpZiAoIXRoaXMuZG9jdW1lbnQpIHJldHVybjtcclxuICAgIGNvbnN0IHBhcmVudHMgPSBYUGFyZW50cyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICBsZXQgZmlyc3RTY3JvbGw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcbiAgICBmb3IgKGxldCBpdGVtIG9mIHBhcmVudHMpIHtcclxuICAgICAgaWYgKGl0ZW0uY2xpZW50SGVpZ2h0IDwgaXRlbS5zY3JvbGxIZWlnaHQpIHtcclxuICAgICAgICBmaXJzdFNjcm9sbCA9IGl0ZW07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChmaXJzdFNjcm9sbCAmJiBmaXJzdFNjcm9sbC50YWdOYW1lICE9PSAnQk9EWScpIHtcclxuICAgICAgZnJvbUV2ZW50KGZpcnN0U2Nyb2xsLCAnc2Nyb2xsJylcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLnBvcnRhbEF0dGFjaGVkKCkhKSxcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnVuU3ViamVjdClcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBvcnRhbD8ub3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKTtcclxuICAgICAgICAgIGNvbnN0IGVyYWN0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICBjb25zdCBmcmVjdCA9IGZpcnN0U2Nyb2xsIS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgIGlmIChlcmFjdC50b3AgKyBlcmFjdC5oZWlnaHQgLSBmcmVjdC50b3AgPCAwIHx8IGVyYWN0LmJvdHRvbSA+IGZyZWN0LmJvdHRvbSkge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlU3ViamVjdC5uZXh0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRNdXRpcGxlSW5wdXRTaXplKCkge1xyXG4gICAgY29uc3QgaXZmID0gdGhpcy5pbnB1dENvbSgpLmlucHV0VmFsdWVSZWYoKT8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudDtcclxuICAgIGxldCB7IGNsaWVudFdpZHRoLCBzY3JvbGxIZWlnaHQgfSA9IGl2ZjtcclxuICAgIGNvbnN0IGxlbiA9IGl2Zi5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICBsZXQgbGFzdFJvd1RhZ1RvcCA9IC0xO1xyXG4gICAgbGV0IGxpbmVzID0gMTtcclxuICAgIGxldCByb3dUYWdUb3AgPSAtMTtcclxuICAgIGxldCBsYXN0Um93VGFnc1dpZHRoID0gMDtcclxuICAgIGxldCBtYXJnaW5MZWZ0ID0gMDtcclxuICAgIGxldCBtYXJnaW5Ub3AgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGNvbnN0IGVsZSA9IGl2Zi5jaGlsZHJlbltpXSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgaWYgKGVsZS50YWdOYW1lID09PSAnWC1UQUcnKSB7XHJcbiAgICAgICAgY29uc3QgeyBvZmZzZXRUb3AsIG9mZnNldFdpZHRoIH0gPSBlbGU7XHJcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBYQ29tcHV0ZWQoZWxlKTtcclxuICAgICAgICBtYXJnaW5MZWZ0ID0gTnVtYmVyKHN0eWxlLm1hcmdpbkxlZnQucmVwbGFjZSgncHgnLCAnJykpO1xyXG4gICAgICAgIG1hcmdpblRvcCA9IE51bWJlcihzdHlsZS5tYXJnaW5Ub3AucmVwbGFjZSgncHgnLCAnJykpO1xyXG4gICAgICAgIGlmIChyb3dUYWdUb3AgPT09IC0xKSB7XHJcbiAgICAgICAgICByb3dUYWdUb3AgPSBvZmZzZXRUb3A7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyb3dUYWdUb3AgIT09IG9mZnNldFRvcCkge1xyXG4gICAgICAgICAgbGluZXMrKztcclxuICAgICAgICAgIHJvd1RhZ1RvcCA9IG9mZnNldFRvcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxhc3RSb3dUYWdUb3AgPT09IC0xKSB7XHJcbiAgICAgICAgICBsYXN0Um93VGFnVG9wID0gb2Zmc2V0VG9wO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGFzdFJvd1RhZ1RvcCA9PT0gb2Zmc2V0VG9wKSB7XHJcbiAgICAgICAgICBsYXN0Um93VGFnc1dpZHRoICs9IG9mZnNldFdpZHRoICsgbWFyZ2luTGVmdDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGhlaWdodCA9IHNjcm9sbEhlaWdodCArIChsaW5lcyA+IDEgPyBtYXJnaW5Ub3AgOiAwKTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5pbnB1dENvbSgpLmlucHV0UmVmKCkubmF0aXZlRWxlbWVudCwgJ2hlaWdodCcsIGAke2hlaWdodH1weGApO1xyXG4gICAgaWYgKHRoaXMubXVsdGlwbGVJbnB1dCgpKSB7XHJcbiAgICAgIHRoaXMubXVsdGlwbGVJbnB1dFNpemVDaGFuZ2UubmV4dChjbGllbnRXaWR0aCAtIGxhc3RSb3dUYWdzV2lkdGggLSBtYXJnaW5MZWZ0KTtcclxuICAgIH1cclxuICAgIHRoaXMucG9ydGFsPy5vdmVybGF5UmVmPy51cGRhdGVQb3NpdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgbWVudGVyKCkge1xyXG4gICAgdGhpcy5lbnRlci5zZXQodHJ1ZSk7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZENvbXB1dGVkKCkgfHwgIXRoaXMuY2xlYXJhYmxlKCkgfHwgdGhpcy5pY29uU3BpbigpKSByZXR1cm47XHJcbiAgICBpZiAoIVhJc0VtcHR5KHRoaXMuZGlzcGxheVZhbHVlKCkpKSB7XHJcbiAgICAgIHRoaXMuaWNvbi5zZXQoJycpO1xyXG4gICAgICB0aGlzLnNob3dDbGVhcmFibGUuc2V0KHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWxlYXZlKCkge1xyXG4gICAgdGhpcy5lbnRlci5zZXQoZmFsc2UpO1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWRDb21wdXRlZCgpIHx8ICF0aGlzLmNsZWFyYWJsZSgpIHx8IHRoaXMuaWNvblNwaW4oKSkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuY2xlYXJhYmxlKCkpIHtcclxuICAgICAgdGhpcy5pY29uLnNldCgnZnRvLWNoZXZyb24tZG93bicpO1xyXG4gICAgICB0aGlzLnNob3dDbGVhcmFibGUuc2V0KGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1vZGVsQ2hhbmdlKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcclxuICAgIGlmIChYSXNGdW5jdGlvbih0aGlzLmRhdGEoKSkpIHtcclxuICAgICAgaWYgKCF0aGlzLnBvcnRhbEF0dGFjaGVkKCkpIHtcclxuICAgICAgICB0aGlzLnNob3dQb3J0YWwoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmljb24uc2V0KCdmdG8tbG9hZGVyJyk7XHJcbiAgICAgIHRoaXMuaWNvblNwaW4uc2V0KHRydWUpO1xyXG4gICAgICBYU2V0RGF0YTxYVHJlZVNlbGVjdE5vZGU+KHRoaXMuZGF0YSgpLCB0aGlzLnVuU3ViamVjdCwgdHJ1ZSwgdmFsdWUgYXMgYW55KS5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLmljb24uc2V0KCcnKTtcclxuICAgICAgICB0aGlzLmljb25TcGluLnNldChmYWxzZSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVudGVyKCkgJiYgdGhpcy5jbGVhcmFibGUoKSkge1xyXG4gICAgICAgICAgdGhpcy5zaG93Q2xlYXJhYmxlLnNldChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubm9kZXMuc2V0KHgpO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubm9kZXMoKSkge1xyXG4gICAgICBpZiAoIXRoaXMucG9ydGFsQXR0YWNoZWQoKSkge1xyXG4gICAgICAgIHRoaXMuc2hvd1BvcnRhbCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChYSXNFbXB0eSh2YWx1ZSkpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaE5vZGVzLnNldChbXHJcbiAgICAgICAgICAuLi50aGlzLm5vZGVzKCkubWFwKCh4KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByZXMgPSB7IC4uLnggfTtcclxuICAgICAgICAgICAgZGVsZXRlIHJlcy5jaGlsZHJlbjtcclxuICAgICAgICAgICAgZGVsZXRlIHJlcy5jaGlsZHJlbkxvYWRlZDtcclxuICAgICAgICAgICAgZGVsZXRlIHJlcy5sZWFmO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICBdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNldFNlYXJjaE5vZGVzKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2VhcmNoTm9kZXModmFsdWU6IHN0cmluZyB8IG51bWJlcikge1xyXG4gICAgbGV0IG5vZGVzOiBYVHJlZVNlbGVjdE5vZGVbXSA9IFtdO1xyXG4gICAgY29uc3QgZ2V0UGFyZW50ID0gKG5vZGU6IFhUcmVlU2VsZWN0Tm9kZSkgPT4ge1xyXG4gICAgICBpZiAoWElzRW1wdHkobm9kZS5waWQpKSByZXR1cm47XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMubm9kZXMoKS5maW5kKCh4KSA9PiB4LmlkID09PSBub2RlLnBpZCkgYXMgWFRyZWVTZWxlY3ROb2RlO1xyXG4gICAgICBwYXJlbnQub3BlbiA9IHRydWU7XHJcbiAgICAgIGlmICghWElzRW1wdHkocGFyZW50KSkge1xyXG4gICAgICAgIGlmIChub2Rlcy5ldmVyeSgoeCkgPT4geC5pZCAhPT0gcGFyZW50LmlkKSkge1xyXG4gICAgICAgICAgbm9kZXMucHVzaChwYXJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGlmICh0aGlzLmNhc2VTZW5zaXRpdmUoKSkge1xyXG4gICAgICBub2RlcyA9IHRoaXMubm9kZXMoKS5maWx0ZXIoKHgpID0+IHgubGFiZWwuaW5kZXhPZih2YWx1ZSkgPj0gMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBub2RlcyA9IHRoaXMubm9kZXMoKS5maWx0ZXIoXHJcbiAgICAgICAgKHgpID0+ICh4LmxhYmVsIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKS5pbmRleE9mKCh2YWx1ZSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkpID49IDBcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IG5vZGUgb2Ygbm9kZXMpIHtcclxuICAgICAgZ2V0UGFyZW50KG5vZGUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWFyY2hOb2Rlcy5zZXQoXHJcbiAgICAgIG5vZGVzLm1hcCgoeCkgPT4ge1xyXG4gICAgICAgIGxldCByZXMgPSB7IC4uLnggfTtcclxuICAgICAgICBkZWxldGUgcmVzLmNoaWxkcmVuO1xyXG4gICAgICAgIGRlbGV0ZSByZXMuY2hpbGRyZW5Mb2FkZWQ7XHJcbiAgICAgICAgZGVsZXRlIHJlcy5sZWFmO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJFbWl0KCkge1xyXG4gICAgdGhpcy52YWx1ZS5zZXQodGhpcy5tdWx0aXBsZSgpID8gW10gOiAnJyk7XHJcbiAgICB0aGlzLmRpc3BsYXlWYWx1ZS5zZXQoJycpO1xyXG4gICAgdGhpcy5tdWx0aXBsZVNlYXJjaFZhbHVlLnNldCgnJyk7XHJcbiAgICB0aGlzLnNlbGVjdGVkTm9kZXMuc2V0KFtdKTtcclxuICAgIHRoaXMuc2V0RGlzcGxheU5vZGVzKCk7XHJcbiAgICB0aGlzLnZhbHVlVHBsQ29udGV4dFNpZ25hbC51cGRhdGUoKHgpID0+IHtcclxuICAgICAgeC4kbm9kZSA9IG51bGw7XHJcbiAgICAgIHJldHVybiB7IC4uLnggfTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5tbGVhdmUoKTtcclxuICAgIHRoaXMuaW5wdXRDaGFuZ2UubmV4dCgnJyk7XHJcbiAgICBpZiAodGhpcy5vbkNoYW5nZSkgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKCkpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzcGxheVZhbHVlKGNsaWNrTm9kZT86IFhUcmVlU2VsZWN0Tm9kZSkge1xyXG4gICAgaWYgKHRoaXMubm9kZXMoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKCkpIHtcclxuICAgICAgICBpZiAoWElzRW1wdHkodGhpcy52YWx1ZSgpKSkge1xyXG4gICAgICAgICAgdGhpcy52YWx1ZS5zZXQoW10pO1xyXG4gICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUuc2V0KCcnKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2Rlcy5zZXQoW10pO1xyXG4gICAgICAgICAgdGhpcy5kaXNwbGF5Tm9kZXMuc2V0KFtdKTtcclxuICAgICAgICAgIHRoaXMuZGlzcGxheU1vcmUuc2V0KCcnKTtcclxuICAgICAgICAgIHRoaXMudmFsdWVUcGxDb250ZXh0U2lnbmFsLnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICB4LiRub2RlID0gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgLi4ueCB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnNldERpc3BsYXlOb2RlcygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgaWRzID0gW107XHJcbiAgICAgICAgICBsZXQgc2VsZWN0ZWQgPSBbXTtcclxuICAgICAgICAgIGlmICh0aGlzLm9iamVjdEFycmF5KCkpIHtcclxuICAgICAgICAgICAgaWRzID0gdGhpcy52YWx1ZSgpLm1hcCgoeDogWFRyZWVTZWxlY3ROb2RlKSA9PiB4LmlkKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlkcyA9IHRoaXMudmFsdWUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjbGlja05vZGUpIHtcclxuICAgICAgICAgICAgbGV0IGlueCA9IHRoaXMuc2VsZWN0ZWROb2RlcygpLmZpbmRJbmRleCgoeDogWFRyZWVTZWxlY3ROb2RlKSA9PiB4LmlkID09PSBjbGlja05vZGUuaWQpO1xyXG4gICAgICAgICAgICBpZiAoaW54ID49IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMudXBkYXRlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBYUmVtb3ZlKHgsICh5KSA9PiB5LmlkID09PSBjbGlja05vZGUuaWQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi54XTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMudXBkYXRlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB4LnB1c2goY2xpY2tOb2RlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4ueF07XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGlkIG9mIGlkcykge1xyXG4gICAgICAgICAgICAgIGxldCBub2RlID0gdGhpcy5ub2RlcygpLmZpbmQoKHgpID0+IHguaWQgPT09IGlkKTtcclxuICAgICAgICAgICAgICBpZiAobm9kZSkgc2VsZWN0ZWQucHVzaChub2RlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMuc2V0KHNlbGVjdGVkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLnNob3dQYXRoKCkpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgbm9kZSBvZiB0aGlzLnNlbGVjdGVkTm9kZXMoKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHBhcmVudHMgPSB0aGlzLmdldFBhcmVudFBhdGgobm9kZSk7XHJcbiAgICAgICAgICAgICAgbm9kZS5wYXRoID0gcGFyZW50cy5tYXAoKHgpID0+IHgubGFiZWwpLmpvaW4odGhpcy5zZXBhcmF0b3IoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc2V0RGlzcGxheU5vZGVzKCk7XHJcbiAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZS5zZXQoXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcygpXHJcbiAgICAgICAgICAgICAgLm1hcCgoeCkgPT4geC5sYWJlbClcclxuICAgICAgICAgICAgICAuam9pbih0aGlzLnNlcGFyYXRvcigpKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMudmFsdWVUcGxDb250ZXh0U2lnbmFsLnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICB4LiRub2RlID0gWy4uLnRoaXMuc2VsZWN0ZWROb2RlcygpXTtcclxuICAgICAgICAgICAgcmV0dXJuIHsgLi4ueCB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBub2RlID0gdGhpcy5ub2RlcygpLmZpbmQoKHgpID0+IHguaWQgPT09IHRoaXMudmFsdWUoKSk7XHJcbiAgICAgICAgaWYgKG5vZGUpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnNob3dQYXRoKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgcGFyZW50cyA9IHRoaXMuZ2V0UGFyZW50UGF0aChub2RlKTtcclxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUuc2V0KHBhcmVudHMubWFwKCh4KSA9PiB4LmxhYmVsKS5qb2luKHRoaXMuc2VwYXJhdG9yKCkpKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlLnNldChub2RlLmxhYmVsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudmFsdWVUcGxDb250ZXh0U2lnbmFsLnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICB4LiRub2RlID0gbm9kZTtcclxuICAgICAgICAgICAgcmV0dXJuIHsgLi4ueCB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlLnNldCgnJyk7XHJcbiAgICAgICAgICB0aGlzLnZhbHVlVHBsQ29udGV4dFNpZ25hbC51cGRhdGUoKHgpID0+IHtcclxuICAgICAgICAgICAgeC4kbm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnggfTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UGFyZW50UGF0aChub2RlOiBYVHJlZVNlbGVjdE5vZGUpIHtcclxuICAgIGxldCByZXM6IFhUcmVlU2VsZWN0Tm9kZVtdID0gW25vZGVdO1xyXG4gICAgY29uc3QgZ2V0UGFyZW50ID0gKG5kOiBYVHJlZVNlbGVjdE5vZGUpID0+IHtcclxuICAgICAgbGV0IHBhcmVudCA9IHRoaXMubm9kZXMoKS5maW5kKCh4KSA9PiBuZC5waWQgJiYgeC5pZCA9PT0gbmQucGlkKTtcclxuICAgICAgaWYgKHBhcmVudCkge1xyXG4gICAgICAgIHJlcyA9IFtwYXJlbnQsIC4uLnJlc107XHJcbiAgICAgICAgZ2V0UGFyZW50KHBhcmVudCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBnZXRQYXJlbnQobm9kZSk7XHJcblxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIGNsb3NlTm9kZShldmVudDogRXZlbnQsIG5vZGU6IFhUcmVlU2VsZWN0Tm9kZSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgbGV0IGlueCA9IC0xO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0QXJyYXkoKSkge1xyXG4gICAgICBpbnggPSB0aGlzLnZhbHVlKCkuZmluZEluZGV4KCh5OiBYVHJlZVNlbGVjdE5vZGUpID0+IHkuaWQgPT09IG5vZGUuaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW54ID0gdGhpcy52YWx1ZSgpLmZpbmRJbmRleCgoeTogbnVtYmVyIHwgc3RyaW5nKSA9PiB5ID09PSBub2RlLmlkKTtcclxuICAgIH1cclxuICAgIGlmIChpbnggPj0gMCkge1xyXG4gICAgICB0aGlzLnZhbHVlLnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgIHguc3BsaWNlKGlueCwgMSk7XHJcbiAgICAgICAgcmV0dXJuIFsuLi54XTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmICh0aGlzLm9uQ2hhbmdlKSB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUoKSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWROb2Rlcy51cGRhdGUoKHgpID0+IHtcclxuICAgICAgICB4LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgcmV0dXJuIFsuLi54XTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc2V0RGlzcGxheU5vZGVzKCk7XHJcbiAgICB9XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIHNldERpc3BsYXlOb2RlcygpIHtcclxuICAgIGlmICghdGhpcy5tdWx0aXBsZSgpKSByZXR1cm47XHJcbiAgICBjb25zdCBtYXhsZW4gPSB0aGlzLnNlbGVjdGVkTm9kZXMoKS5sZW5ndGg7XHJcbiAgICBsZXQgbGVuID0gMDtcclxuICAgIGlmICh0aGlzLm1heFRhZ0NvdW50KCkgPj0gMCkge1xyXG4gICAgICBsZW4gPSBtYXhsZW4gPiB0aGlzLm1heFRhZ0NvdW50KCkhID8gdGhpcy5tYXhUYWdDb3VudCgpISA6IG1heGxlbjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxlbiA9IG1heGxlbjtcclxuICAgIH1cclxuICAgIGxldCBtb3JlID0gbWF4bGVuIC0gbGVuO1xyXG4gICAgbW9yZSA9IG1vcmUgPCAwID8gMCA6IG1vcmU7XHJcbiAgICB0aGlzLmRpc3BsYXlOb2Rlcy5zZXQodGhpcy5zZWxlY3RlZE5vZGVzKCkuc2xpY2UoMCwgbGVuKSk7XHJcbiAgICB0aGlzLnNob3dEaXNwbGF5TW9yZS5zZXQobW9yZSA+IDApO1xyXG4gICAgaWYgKFhJc1N0cmluZyh0aGlzLmdldE1heFRhZ0NvbnRlbnQoKSkpIHtcclxuICAgICAgdGhpcy5kaXNwbGF5TW9yZS5zZXQobW9yZSA+IDAgPyAodGhpcy5nZXRNYXhUYWdDb250ZW50KCkgYXMgc3RyaW5nKS5yZXBsYWNlKC9cXHtcXHtzdXJwbHVzXFx9XFx9L2csIGAke21vcmV9YCkgOiAnJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU3VycGx1cy5zZXQobW9yZSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUb3RhbC5zZXQobWF4bGVuKTtcclxuICAgIH1cclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRNdXRpcGxlSW5wdXRTaXplKCkpO1xyXG4gIH1cclxuXHJcbiAgcG9ydGFsQXR0YWNoZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3J0YWw/Lm92ZXJsYXlSZWY/Lmhhc0F0dGFjaGVkKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZVBvcnRhbCgpIHtcclxuICAgIGlmICh0aGlzLnBvcnRhbEF0dGFjaGVkKCkpIHtcclxuICAgICAgdGhpcy5wb3J0YWw/Lm92ZXJsYXlSZWY/LmRldGFjaCgpO1xyXG4gICAgICB0aGlzLmFjdGl2ZS5zZXQoZmFsc2UpO1xyXG4gICAgICB0aGlzLm11bHRpcGxlU2VhcmNoVmFsdWUuc2V0KCcnKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBkZXN0cm95UG9ydGFsKCkge1xyXG4gICAgdGhpcy5wb3J0YWw/Lm92ZXJsYXlSZWY/LmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIHNob3dQb3J0YWwoY2xpY2sgPSBmYWxzZSkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWRDb21wdXRlZCgpIHx8IHRoaXMuaWNvblNwaW4oKSB8fCB0aGlzLmFuaW1hdGluZygpKSByZXR1cm47XHJcbiAgICB0aGlzLmFjdGl2ZS5zZXQodHJ1ZSk7XHJcbiAgICBpZiAoKHRoaXMuYXN5bmMoKSAmJiBYSXNPYnNlcnZhYmxlKHRoaXMuZGF0YSgpKSAmJiB0aGlzLm5vZGVzKCkubGVuZ3RoID09PSAwKSB8fCBYSXNGdW5jdGlvbih0aGlzLmRhdGEoKSkpIHtcclxuICAgICAgdGhpcy5pY29uLnNldCgnZnRvLWxvYWRlcicpO1xyXG4gICAgICB0aGlzLmljb25TcGluLnNldCh0cnVlKTtcclxuICAgICAgWFNldERhdGE8WFRyZWVTZWxlY3ROb2RlPih0aGlzLmRhdGEoKSwgdGhpcy51blN1YmplY3QsIHRydWUsIGNsaWNrID8gJycgOiB0aGlzLmRpc3BsYXlWYWx1ZSgpKS5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLmljb24uc2V0KCdmdG8tY2hldnJvbi1kb3duJyk7XHJcbiAgICAgICAgdGhpcy5pY29uU3Bpbi5zZXQoZmFsc2UpO1xyXG4gICAgICAgIGlmICghdGhpcy5lbnRlcigpICYmIHRoaXMuY2xlYXJhYmxlKCkpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd0NsZWFyYWJsZS5zZXQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm5vZGVzLnNldCh4KTtcclxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoKCkpIHRoaXMuc2V0RGlzcGxheVZhbHVlKCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVQb3J0YWwoKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNyZWF0ZVBvcnRhbCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VhcmNoKCkgJiYgdGhpcy5tdWx0aXBsZSgpICYmIHRoaXMubXVsdGlwbGVJbnB1dCgpKSB7XHJcbiAgICAgIHRoaXMubXVsdGlwbGVJbnB1dCgpIS5pbnB1dEZvY3VzKCdmb2N1cycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbnB1dENvbSgpLmlucHV0Rm9jdXMoJ2ZvY3VzJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVQb3J0YWwoKSB7XHJcbiAgICBjb25zdCBib3ggPSB0aGlzLmlucHV0Q29tKCkuaW5wdXRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgY29uc3QgY29uZmlnOiBPdmVybGF5Q29uZmlnID0ge1xyXG4gICAgICBiYWNrZHJvcENsYXNzOiAnJyxcclxuICAgICAgd2lkdGg6IGJveC53aWR0aCxcclxuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5zZXRQbGFjZW1lbnQoKSxcclxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKVxyXG4gICAgfTtcclxuICAgIHRoaXMuc2V0UG9zaXRpb24oY29uZmlnKTtcclxuICAgIHRoaXMucG9ydGFsID0gdGhpcy5wb3J0YWxTZXJ2aWNlLmF0dGFjaCh7XHJcbiAgICAgIGNvbnRlbnQ6IFhUcmVlU2VsZWN0UG9ydGFsQ29tcG9uZW50LFxyXG4gICAgICB2aWV3Q29udGFpbmVyUmVmOiB0aGlzLnZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgIG92ZXJsYXlDb25maWc6IGNvbmZpZ1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnBvcnRhbC5vdmVybGF5UmVmXHJcbiAgICAgID8ub3V0c2lkZVBvaW50ZXJFdmVudHMoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51blN1YmplY3QpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNldERpc3BsYXlWYWx1ZSgpO1xyXG4gICAgICAgIHRoaXMuY2xvc2VTdWJqZWN0Lm5leHQoKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnNldEluc3RhbmNlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRQb3NpdGlvbihjb25maWc6IE92ZXJsYXlDb25maWcpIHtcclxuICAgIGxldCBwb3NpdGlvbiA9IGNvbmZpZy5wb3NpdGlvblN0cmF0ZWd5IGFzIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneTtcclxuICAgIHBvc2l0aW9uLnBvc2l0aW9uQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLnVuU3ViamVjdCkpLnN1YnNjcmliZSgocG9zOiBDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25DaGFuZ2UpID0+IHtcclxuICAgICAgY29uc3QgcGxhY2UgPSBYUG9ydGFsQ29ubmVjdGVkUG9zaXRpb24uZ2V0KHBvcy5jb25uZWN0aW9uUGFpcikgYXMgWFBvc2l0aW9uVG9wQm90dG9tO1xyXG4gICAgICBpZiAocGxhY2UgIT09IHRoaXMucmVhbFBsYWNlbWVudCgpKSB7XHJcbiAgICAgICAgdGhpcy5yZWFsUGxhY2VtZW50LnNldChwbGFjZSk7XHJcbiAgICAgICAgdGhpcy5wb3J0YWxPdmVybGF5UmVmKCk/LnVwZGF0ZVBvc2l0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0SW5zdGFuY2UoKSB7XHJcbiAgICBsZXQgeyBjb21wb25lbnRSZWYsIG92ZXJsYXlSZWYgfSA9IHRoaXMucG9ydGFsO1xyXG4gICAgaWYgKCFjb21wb25lbnRSZWYgfHwgIW92ZXJsYXlSZWYpIHJldHVybjtcclxuICAgIHRoaXMucG9ydGFsQ29tcG9uZW50LnNldChjb21wb25lbnRSZWYpO1xyXG4gICAgdGhpcy5wb3J0YWxPdmVybGF5UmVmLnNldChvdmVybGF5UmVmKTtcclxuICAgIHRoaXMucmVhbFBsYWNlbWVudC5zZXQodGhpcy5wbGFjZW1lbnQoKSk7XHJcbiAgICBjb25zdCB7IG5vZGVDbGljaywgYW5pbWF0aW5nIH0gPSBjb21wb25lbnRSZWYuaW5zdGFuY2U7XHJcbiAgICBub2RlQ2xpY2suc3Vic2NyaWJlKCh4KSA9PiB0aGlzLm5vZGVDbGljayh4Lm5vZGUsIHgudmFsdWUpKTtcclxuICAgIGFuaW1hdGluZy5zdWJzY3JpYmUoKGluZzogYm9vbGVhbikgPT4gdGhpcy5hbmltYXRpbmcuc2V0KGluZykpO1xyXG4gIH1cclxuXHJcbiAgbm9kZUNsaWNrKG5vZGU6IFhUcmVlU2VsZWN0Tm9kZSwgdmFsdWU/OiBYVHJlZVNlbGVjdE5vZGVbXSB8IChzdHJpbmcgfCBudW1iZXIpW10pIHtcclxuICAgIGlmICh0aGlzLm11bHRpcGxlKCkpIHtcclxuICAgICAgdGhpcy52YWx1ZS5zZXQodmFsdWUpO1xyXG4gICAgICBpZiAodGhpcy5tdWx0aXBsZUlucHV0KCkpIHtcclxuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMubXVsdGlwbGVJbnB1dCgpIS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShpbnB1dCwgJ3dpZHRoJywgJzJyZW0nKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zZWFyY2goKSAmJiB0aGlzLm11bHRpcGxlU2VhcmNoVmFsdWUoKSAhPT0gJycpIHtcclxuICAgICAgICB0aGlzLm11bHRpcGxlU2VhcmNoVmFsdWUuc2V0KCcnKTtcclxuICAgICAgICB0aGlzLmlucHV0Q2hhbmdlLm5leHQoJycpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0RGlzcGxheVZhbHVlKG5vZGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbm9kZSA9IG5vZGUgYXMgWFRyZWVTZWxlY3ROb2RlO1xyXG4gICAgICBpZiAodGhpcy5zaG93UGF0aCgpKSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IHRoaXMuZ2V0UGFyZW50UGF0aChub2RlKTtcclxuICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZS5zZXQocGFyZW50cy5tYXAoKHgpID0+IHgubGFiZWwpLmpvaW4odGhpcy5zZXBhcmF0b3IoKSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheVZhbHVlLnNldChub2RlLmxhYmVsKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnZhbHVlVHBsQ29udGV4dFNpZ25hbC51cGRhdGUoKHgpID0+IHtcclxuICAgICAgICB4LiRub2RlID0gbm9kZTtcclxuICAgICAgICByZXR1cm4geyAuLi54IH07XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnZhbHVlLnNldChub2RlLmlkKTtcclxuICAgICAgdGhpcy5jbG9zZVN1YmplY3QubmV4dCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VhcmNoKCkgJiYgdGhpcy5tdWx0aXBsZSgpICYmIHRoaXMubXVsdGlwbGVJbnB1dCgpKSB7XHJcbiAgICAgIHRoaXMubXVsdGlwbGVJbnB1dCgpIS5pbnB1dEZvY3VzKCdmb2N1cycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbnB1dENvbSgpLmlucHV0Rm9jdXMoJ2ZvY3VzJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vbkNoYW5nZSkgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKCkpO1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbFZhbGlkYXRvcigpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0QWxsTm9kZXModmFsdWU6IFhUcmVlU2VsZWN0Tm9kZVtdIHwgKHN0cmluZyB8IG51bWJlcilbXSkge1xyXG4gICAgdGhpcy52YWx1ZS5zZXQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgc2V0UGxhY2VtZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMucG9ydGFsU2VydmljZS5zZXRQbGFjZW1lbnQoe1xyXG4gICAgICBlbGVtZW50UmVmOiB0aGlzLmlucHV0Q29tKCkuaW5wdXRSZWYoKSxcclxuICAgICAgcGxhY2VtZW50OiBbdGhpcy5wbGFjZW1lbnQoKSBhcyBYUG9zaXRpb25Ub3BCb3R0b20sICdib3R0b20nLCAndG9wJ10sXHJcbiAgICAgIHRyYW5zZm9ybU9yaWdpbk9uOiAneC10cmVlLXNlbGVjdC1wb3J0YWwnXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFBvcnRhbCgpIHtcclxuICAgIHRoaXMucG9ydGFsQXR0YWNoZWQoKSAmJiB0aGlzLnBvcnRhbD8ub3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLnNldFBsYWNlbWVudCgpKTtcclxuICB9XHJcblxyXG4gIGZvcm1Db250cm9sQ2hhbmdlcygpIHtcclxuICAgIHRoaXMuc2V0RGF0YSgpO1xyXG4gICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgdGhpcy53cml0ZVZhbHVlKHRoaXMudmFsdWUoKSk7XHJcbiAgICB0aGlzLm5nQWZ0ZXJWaWV3SW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgb25LZXlkb3duKCRldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgdGhpcy5rZXlkb3duU3ViamVjdC5uZXh0KCRldmVudCk7XHJcbiAgICBpZiAoJGV2ZW50LmtleUNvZGUgIT09IFRBQiAmJiAhdGhpcy5zZWFyY2goKSkge1xyXG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRm9jdXMoX2V2ZW50OiBFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoKCkgJiYgdGhpcy5tdWx0aXBsZSgpICYmIHRoaXMubXVsdGlwbGVJbnB1dCgpKSB7XHJcbiAgICAgIHRoaXMubXVsdGlwbGVJbnB1dCgpIS5pbnB1dEZvY3VzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlucHV0Q29tKCkuaW5wdXRGb2N1cygnZm9jdXMnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSW5wdXQoX2V2ZW50OiBJbnB1dEV2ZW50KSB7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sVmFsaWRhdG9yKCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW5wdXRDaGFuZ2UubmV4dCh0aGlzLm11bHRpcGxlKCkgPyB0aGlzLm11bHRpcGxlU2VhcmNoVmFsdWUoKSA6IHRoaXMuZGlzcGxheVZhbHVlKCkpKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiAjdHJlZVNlbGVjdCBjbGFzcz1cIngtdHJlZS1zZWxlY3RcIiBbY2xhc3MueC10cmVlLXNlbGVjdC1tdWx0aXBsZV09XCJtdWx0aXBsZSgpXCI+XHJcbiAgPGRpdiBjbGFzcz1cIngtdHJlZS1zZWxlY3Qtcm93XCI+XHJcbiAgICA8eC1pbnB1dFxyXG4gICAgICAjaW5wdXRDb21cclxuICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICBbbGFiZWxdPVwibGFiZWwoKVwiXHJcbiAgICAgIFtsYWJlbFdpZHRoXT1cImxhYmVsV2lkdGgoKVwiXHJcbiAgICAgIFtsYWJlbEFsaWduXT1cImxhYmVsQWxpZ24oKVwiXHJcbiAgICAgIFtqdXN0aWZ5XT1cImp1c3RpZnkoKVwiXHJcbiAgICAgIFthbGlnbl09XCJhbGlnbigpXCJcclxuICAgICAgW2RpcmVjdGlvbl09XCJkaXJlY3Rpb24oKVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZENvbXB1dGVkKClcIlxyXG4gICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRDb21wdXRlZCgpXCJcclxuICAgICAgW3ZhbGlkYXRvcl09XCJ2YWxpZGF0b3JDb21wdXRlZCgpXCJcclxuICAgICAgW2ljb25dPVwiaWNvbigpXCJcclxuICAgICAgW2ljb25TcGluXT1cImljb25TcGluKClcIlxyXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIoKVwiXHJcbiAgICAgIFtyZWFkb25seV09XCJnZXRSZWFkb25seSgpXCJcclxuICAgICAgW2NsZWFyYWJsZV09XCJzaG93Q2xlYXJhYmxlKClcIlxyXG4gICAgICBbKG5nTW9kZWwpXT1cImRpc3BsYXlWYWx1ZVwiXHJcbiAgICAgIFt2YWx1ZVRwbF09XCJ2YWx1ZVRwbFNpZ25hbCgpID8gdmFsdWVUcGxTaWduYWwoKSA6IG5vZGVUcGwoKVwiXHJcbiAgICAgIFt2YWx1ZVRwbENvbnRleHRdPVwidmFsdWVUcGxDb250ZXh0U2lnbmFsKClcIlxyXG4gICAgICBbc2l6ZV09XCJzaXplKClcIlxyXG4gICAgICBbYm9yZGVyZWRdPVwiYm9yZGVyZWQoKVwiXHJcbiAgICAgIFtiZWZvcmVdPVwiYmVmb3JlKClcIlxyXG4gICAgICBbYWZ0ZXJdPVwiYWZ0ZXIoKVwiXHJcbiAgICAgIFtwYXR0ZXJuXT1cInBhdHRlcm5Db21wdXRlZCgpXCJcclxuICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZUNvbXB1dGVkKClcIlxyXG4gICAgICBbcG9pbnRlcl09XCJ0cnVlXCJcclxuICAgICAgWyhhY3RpdmUpXT1cImFjdGl2ZVwiXHJcbiAgICAgIChjbGVhckVtaXQpPVwiY2xlYXJFbWl0KClcIlxyXG4gICAgICAoeEtleWRvd24pPVwib25LZXlkb3duKCRldmVudClcIlxyXG4gICAgICAoeElucHV0KT1cIm9uSW5wdXQoJGV2ZW50KVwiXHJcbiAgICAgICh4Rm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCJcclxuICAgICAgKHhDbGljayk9XCJzaG93UG9ydGFsKHRydWUpXCJcclxuICAgICAgKHhNb3VzZWVudGVyKT1cIm1lbnRlcigpXCJcclxuICAgICAgKHhNb3VzZWxlYXZlKT1cIm1sZWF2ZSgpXCJcclxuICAgICAgKHhDb21wb3NpdGlvbik9XCJjb21wb3NpdGlvbi5zZXQoJGV2ZW50KVwiXHJcbiAgICA+PC94LWlucHV0PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbXVsdGlwbGVWYWx1ZVRwbD5cclxuICBAZm9yIChub2RlIG9mIGRpc3BsYXlOb2RlcygpOyB0cmFjayBub2RlLmlkOyBsZXQgaSA9ICRpbmRleCkge1xyXG4gICAgPHgtdGFnXHJcbiAgICAgIFtALmRpc2FibGVkXT1cInRydWVcIlxyXG4gICAgICBbYm9yZGVyZWRdPVwiZmFsc2VcIlxyXG4gICAgICBbY2xvc2FibGVdPVwiIWRpc2FibGVkKClcIlxyXG4gICAgICBbdHlwZV09XCInaW5mbydcIlxyXG4gICAgICAoY2xvc2UpPVwiY2xvc2VOb2RlKCRldmVudCwgbm9kZSwgaSlcIlxyXG4gICAgICBbc2l6ZV09XCJzaXplKClcIlxyXG4gICAgICA+e3sgc2hvd1BhdGgoKSA/IG5vZGUucGF0aCA6IG5vZGUubGFiZWwgfX08L3gtdGFnXHJcbiAgICA+XHJcbiAgfVxyXG4gIEBpZiAoc2hvd0Rpc3BsYXlNb3JlKCkpIHtcclxuICAgIDx4LXRhZyBbQC5kaXNhYmxlZF09XCJ0cnVlXCIgW2JvcmRlcmVkXT1cImZhbHNlXCIgW3R5cGVdPVwiJ2luZm8nXCIgW3NpemVdPVwic2l6ZSgpXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKnhPdXRsZXQ9XCJnZXRNYXhUYWdDb250ZW50KCk7IGNvbnRleHQ6IHsgJHN1cnBsdXM6IHNlbGVjdGVkU3VycGx1cygpLCAkdG90YWw6IHNlbGVjdGVkVG90YWwoKSB9XCI+e3tcclxuICAgICAgICBkaXNwbGF5TW9yZSgpXHJcbiAgICAgIH19PC9uZy1jb250YWluZXI+XHJcbiAgICA8L3gtdGFnPlxyXG4gIH1cclxuICBAaWYgKHNlYXJjaCgpKSB7XHJcbiAgICA8eC1pbnB1dFxyXG4gICAgICAjbXVsdGlwbGVJbnB1dFxyXG4gICAgICBbYm9yZGVyZWRdPVwiZmFsc2VcIlxyXG4gICAgICBbc2l6ZV09XCJzaXplKClcIlxyXG4gICAgICBbKG5nTW9kZWwpXT1cIm11bHRpcGxlU2VhcmNoVmFsdWVcIlxyXG4gICAgICAoeElucHV0KT1cIm9uSW5wdXQoJGV2ZW50KVwiXHJcbiAgICAgICh4S2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50KVwiXHJcbiAgICA+PC94LWlucHV0PlxyXG4gIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
643
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdHJlZS1zZWxlY3QvdHJlZS1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdHJlZS1zZWxlY3QvdHJlZS1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUNMLFNBQVMsRUFFVCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUdWLGdCQUFnQixFQUVoQixNQUFNLEVBR04sU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBRU4sTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRyxPQUFPLEVBQ0wsUUFBUSxFQUNSLGFBQWEsRUFDYixTQUFTLEVBQ1QsUUFBUSxFQUVSLGNBQWMsRUFDZCxXQUFXLEVBQ1gsUUFBUSxFQUNSLFNBQVMsRUFDVCxPQUFPLEVBQ1AsT0FBTyxFQUNQLFNBQVMsRUFFVCxRQUFRLEVBRVQsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsY0FBYyxFQUFxQix3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RSxPQUFPLEVBQ0wsT0FBTyxFQUtSLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLG9CQUFv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LENBQUM7UUFJRCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0RSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsRixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1RSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1RSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFGLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25GLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sQ0FBQyxH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Q0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlHLENBQUM7aUlBeG5CVSxvQkFBb0I7cUhBQXBCLG9CQUFvQiw0REFGcEIsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsQ0FBQywrZ0JDcEVuRCx3OEVBd0VBLHlyU0RUWSxXQUFXLG90QkFBRSxtQkFBbUIsK0JBQUUsZUFBZSxvREFBRSxhQUFhLGtEQUFFLGdCQUFnQjs7MkZBT2pGLG9CQUFvQjtrQkFWaEMsU0FBUzsrQkFDRSxHQUFHLGlCQUFpQixFQUFFLGNBQ3BCLElBQUksV0FDUCxDQUFDLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixDQUFDLGlCQUc5RSxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsY0FBYyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YmplY3QsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBPbkNoYW5nZXMsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxuICBUZW1wbGF0ZVJlZixcclxuICBpbmplY3QsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgdmlld0NoaWxkLFxyXG4gIGNvbXB1dGVkLFxyXG4gIHNpZ25hbCxcclxuICBDb21wb25lbnRSZWYsXHJcbiAgZWZmZWN0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFhUcmVlU2VsZWN0Tm9kZSwgWFRyZWVTZWxlY3RQcm9wZXJ0eSwgWFRyZWVTZWxlY3RQcmVmaXggfSBmcm9tICcuL3RyZWUtc2VsZWN0LnByb3BlcnR5JztcclxuaW1wb3J0IHtcclxuICBYSXNFbXB0eSxcclxuICBYSXNPYnNlcnZhYmxlLFxyXG4gIFhJc0NoYW5nZSxcclxuICBYU2V0RGF0YSxcclxuICBYUG9zaXRpb25Ub3BCb3R0b20sXHJcbiAgWElzT2JqZWN0QXJyYXksXHJcbiAgWElzRnVuY3Rpb24sXHJcbiAgWElzQXJyYXksXHJcbiAgWElzU3RyaW5nLFxyXG4gIFhSZW1vdmUsXHJcbiAgWFJlc2l6ZSxcclxuICBYQ29tcHV0ZWQsXHJcbiAgWFJlc2l6ZU9ic2VydmVyLFxyXG4gIFhQYXJlbnRzLFxyXG4gIFhQbGFjZW1lbnRcclxufSBmcm9tICdAbmctbmVzdC91aS9jb3JlJztcclxuaW1wb3J0IHsgWFBvcnRhbFNlcnZpY2UsIFhQb3J0YWxPdmVybGF5UmVmLCBYUG9ydGFsQ29ubmVjdGVkUG9zaXRpb24gfSBmcm9tICdAbmctbmVzdC91aS9wb3J0YWwnO1xyXG5pbXBvcnQgeyBYSW5wdXRDb21wb25lbnQgfSBmcm9tICdAbmctbmVzdC91aS9pbnB1dCc7XHJcbmltcG9ydCB7IFhUcmVlU2VsZWN0UG9ydGFsQ29tcG9uZW50IH0gZnJvbSAnLi90cmVlLXNlbGVjdC1wb3J0YWwuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBPdmVybGF5LFxyXG4gIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSxcclxuICBDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25DaGFuZ2UsXHJcbiAgT3ZlcmxheUNvbmZpZyxcclxuICBPdmVybGF5UmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwsIHRocm90dGxlVGltZSwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IERPV05fQVJST1csIFVQX0FSUk9XLCBFTlRFUiwgTUFDX0VOVEVSLCBMRUZUX0FSUk9XLCBSSUdIVF9BUlJPVywgVEFCLCBCQUNLU1BBQ0UgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xyXG5pbXBvcnQgeyBYVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0BuZy1uZXN0L3VpL2Jhc2UtZm9ybSc7XHJcbmltcG9ydCB7IFhJMThuVHJlZVNlbGVjdCwgWEkxOG5TZXJ2aWNlLCB6aF9DTiB9IGZyb20gJ0BuZy1uZXN0L3VpL2kxOG4nO1xyXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFhUYWdDb21wb25lbnQgfSBmcm9tICdAbmctbmVzdC91aS90YWcnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgWE91dGxldERpcmVjdGl2ZSB9IGZyb20gJ0BuZy1uZXN0L3VpL291dGxldCc7XHJcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IGAke1hUcmVlU2VsZWN0UHJlZml4fWAsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFhJbnB1dENvbXBvbmVudCwgWFRhZ0NvbXBvbmVudCwgWE91dGxldERpcmVjdGl2ZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90cmVlLXNlbGVjdC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbWFZhbHVlQWNjZXNzb3IoWFRyZWVTZWxlY3RDb21wb25lbnQpXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgWFRyZWVTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBYVHJlZVNlbGVjdFByb3BlcnR5IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSB1blN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXIhOiBYUmVzaXplT2JzZXJ2ZXI7XHJcbiAgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xyXG4gIHByaXZhdGUgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcclxuICBvdmVycmlkZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIHByaXZhdGUgcG9ydGFsU2VydmljZSA9IGluamVjdChYUG9ydGFsU2VydmljZSk7XHJcbiAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xyXG4gIHByaXZhdGUgb3ZlcmxheSA9IGluamVjdChPdmVybGF5KTtcclxuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoWEkxOG5TZXJ2aWNlKTtcclxuICBwcml2YXRlIGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XHJcblxyXG4gIGxvY2FsZSA9IHRvU2lnbmFsKHRoaXMuaTE4bi5sb2NhbGVDaGFuZ2UucGlwZShtYXAoKHgpID0+IHgudHJlZVNlbGVjdCBhcyBYSTE4blRyZWVTZWxlY3QpKSwge1xyXG4gICAgaW5pdGlhbFZhbHVlOiB6aF9DTi50cmVlU2VsZWN0XHJcbiAgfSk7XHJcblxyXG4gIGlucHV0Q29tID0gdmlld0NoaWxkLnJlcXVpcmVkPFhJbnB1dENvbXBvbmVudD4oJ2lucHV0Q29tJyk7XHJcbiAgdHJlZVNlbGVjdCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oJ3RyZWVTZWxlY3QnKTtcclxuICBtdWx0aXBsZVZhbHVlVHBsID0gdmlld0NoaWxkLnJlcXVpcmVkPFRlbXBsYXRlUmVmPHZvaWQ+PignbXVsdGlwbGVWYWx1ZVRwbCcpO1xyXG4gIG11bHRpcGxlSW5wdXQgPSB2aWV3Q2hpbGQ8WElucHV0Q29tcG9uZW50PignbXVsdGlwbGVJbnB1dCcpO1xyXG5cclxuICBnZXRSZWFkb25seSA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLnJlYWRvbmx5KCkgJiYgIXRoaXMuc2VhcmNoKCkpIHx8ICh0aGlzLnNlYXJjaCgpICYmIEJvb2xlYW4odGhpcy5tdWx0aXBsZSgpKSkpO1xyXG4gIGdldE1heFRhZ0NvbnRlbnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm1heFRhZ0NvbnRlbnQoKSB8fCB0aGlzLmxvY2FsZSgpLm1heFRhZ0NvbnRlbnQpO1xyXG4gIG9iamVjdEFycmF5ID0gY29tcHV0ZWQoKCkgPT4gWElzT2JqZWN0QXJyYXkodGhpcy52YWx1ZSgpKSk7XHJcblxyXG4gIG92ZXJyaWRlIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUoKSkge1xyXG4gICAgICBpZiAoWElzRW1wdHkodmFsdWUpKSB7XHJcbiAgICAgICAgdmFsdWUgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIVhJc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIHZhbHVlID0gW3ZhbHVlXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy52YWx1ZS5zZXQodmFsdWUpO1xyXG4gICAgdGhpcy5zZXREaXNwbGF5VmFsdWUoKTtcclxuICB9XHJcblxyXG4gIGVudGVyID0gc2lnbmFsKGZhbHNlKTtcclxuICBzaG93Q2xlYXJhYmxlID0gc2lnbmFsKGZhbHNlKTtcclxuICBkaXNwbGF5VmFsdWUgPSBzaWduYWwoJycpO1xyXG4gIG11bHRpcGxlU2VhcmNoVmFsdWUgPSBzaWduYWwoJycpO1xyXG4gIG5vZGVzID0gc2lnbmFsPFhUcmVlU2VsZWN0Tm9kZVtdPihbXSk7XHJcbiAgc2VsZWN0ZWROb2RlcyA9IHNpZ25hbDxYVHJlZVNlbGVjdE5vZGVbXT4oW10pO1xyXG4gIGRpc3BsYXlOb2RlcyA9IHNpZ25hbDxYVHJlZVNlbGVjdE5vZGVbXT4oW10pO1xyXG4gIGRpc3BsYXlNb3JlID0gc2lnbmFsKCcnKTtcclxuICBzaG93RGlzcGxheU1vcmUgPSBzaWduYWwoZmFsc2UpO1xyXG4gIHNlYXJjaE5vZGVzID0gc2lnbmFsPFhUcmVlU2VsZWN0Tm9kZVtdPihbXSk7XHJcbiAgY2xvbmVOb2RlcyA9IHNpZ25hbDxYVHJlZVNlbGVjdE5vZGVbXT4oW10pO1xyXG4gIHBvcnRhbCE6IFhQb3J0YWxPdmVybGF5UmVmPFhUcmVlU2VsZWN0UG9ydGFsQ29tcG9uZW50PjtcclxuICBpY29uID0gc2lnbmFsKCdmdG8tY2hldnJvbi1kb3duJyk7XHJcbiAgaWNvblNwaW4gPSBzaWduYWwoZmFsc2UpO1xyXG4gIGFuaW1hdGluZyA9IHNpZ25hbChmYWxzZSk7XHJcbiAgc2VsZWN0ZWRTdXJwbHVzID0gc2lnbmFsKDApO1xyXG4gIHNlbGVjdGVkVG90YWwgPSBzaWduYWwoMCk7XHJcbiAgdmFsdWVUcGxDb250ZXh0U2lnbmFsID0gc2lnbmFsPHsgJG5vZGU6IGFueTsgJGlzVmFsdWU6IGJvb2xlYW4gfT4oeyAkbm9kZTogbnVsbCwgJGlzVmFsdWU6IHRydWUgfSk7XHJcbiAgY2xvc2VTdWJqZWN0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuICBrZXlkb3duU3ViamVjdDogU3ViamVjdDxLZXlib2FyZEV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgaW5wdXRDaGFuZ2U6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgY29tcG9zaXRpb24gPSBzaWduYWwoZmFsc2UpO1xyXG4gIG11bHRpcGxlSW5wdXRTaXplQ2hhbmdlID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xyXG4gIHZhbHVlVHBsU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUoKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZVZhbHVlVHBsKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy52YWx1ZVRwbCgpO1xyXG4gIH0pO1xyXG4gIHByaXZhdGUgcmVhbFBsYWNlbWVudCA9IHNpZ25hbDxYUGxhY2VtZW50IHwgbnVsbD4obnVsbCk7XHJcbiAgcG9ydGFsQ29tcG9uZW50ID0gc2lnbmFsPENvbXBvbmVudFJlZjxYVHJlZVNlbGVjdFBvcnRhbENvbXBvbmVudD4gfCBudWxsPihudWxsKTtcclxuICBwb3J0YWxPdmVybGF5UmVmID0gc2lnbmFsPE92ZXJsYXlSZWYgfCBudWxsPihudWxsKTtcclxuICBpbnB1dENoYW5nZWQgPSB0b1NpZ25hbCh0aGlzLmlucHV0Q2hhbmdlKTtcclxuICBwb3J0YWxEYXRhID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLm5vZGVzKCk7XHJcbiAgICBpZiAoWElzRnVuY3Rpb24odGhpcy5kYXRhKCkpKSByZXR1cm4gbm9kZXM7XHJcbiAgICBpZiAoWElzRW1wdHkodGhpcy5pbnB1dENoYW5nZWQoKSkpIHJldHVybiBub2RlcztcclxuICAgIHJldHVybiB0aGlzLnNlYXJjaE5vZGVzKCk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnBvcnRhbENvbXBvbmVudCgpPy5zZXRJbnB1dCgnZGF0YScsIHRoaXMucG9ydGFsRGF0YSgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ3ZhbHVlJywgdGhpcy52YWx1ZSgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ3BsYWNlbWVudCcsIHRoaXMucmVhbFBsYWNlbWVudCgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ211bHRpcGxlJywgdGhpcy5tdWx0aXBsZSgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ25vZGVUcGwnLCB0aGlzLm5vZGVUcGwoKSkpO1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdpbnB1dENvbScsIHRoaXMuaW5wdXRDb20oKSkpO1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdwb3J0YWxNYXhIZWlnaHQnLCB0aGlzLnBvcnRhbE1heEhlaWdodCgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ29iamVjdEFycmF5JywgdGhpcy5vYmplY3RBcnJheSgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ3NlbGVjdEFsbCcsIHRoaXMuc2VsZWN0QWxsKCkpKTtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnBvcnRhbENvbXBvbmVudCgpPy5zZXRJbnB1dCgnc2VsZWN0QWxsVGV4dCcsIHRoaXMuc2VsZWN0QWxsVGV4dCgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ2Nhc2VTZW5zaXRpdmUnLCB0aGlzLmNhc2VTZW5zaXRpdmUoKSkpO1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdzZWFyY2gnLCB0aGlzLnNlYXJjaCgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ3ZpcnR1YWxTY3JvbGwnLCB0aGlzLnZpcnR1YWxTY3JvbGwoKSkpO1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdzaXplJywgdGhpcy5zaXplKCkpKTtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnBvcnRhbENvbXBvbmVudCgpPy5zZXRJbnB1dCgna2V5d29yZFRleHQnLCB0aGlzLmlucHV0Q2hhbmdlZCgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ29ubHlMZWFmJywgdGhpcy5vbmx5TGVhZigpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ2V4cGFuZGVkTGV2ZWwnLCB0aGlzLmV4cGFuZGVkTGV2ZWwoKSkpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNldFN1YmplY3QoKTtcclxuICAgIHRoaXMuc2V0UGFyYW50U2Nyb2xsKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBjb25zdCB7IGRhdGEgfSA9IGNoYW5nZXM7XHJcbiAgICBYSXNDaGFuZ2UoZGF0YSkgJiYgdGhpcy5zZXREYXRhKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnNldFBvcnRhbCgpO1xyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUoKSAmJiB0aGlzLmlucHV0Q29tKCkuaW5wdXRWYWx1ZVJlZigpKSB7XHJcbiAgICAgIFhSZXNpemUodGhpcy5pbnB1dENvbSgpLmlucHV0VmFsdWVSZWYoKT8ubmF0aXZlRWxlbWVudClcclxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMzApLCB0YWtlVW50aWwodGhpcy51blN1YmplY3QpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSB4LnJlc2l6ZU9ic2VydmVyO1xyXG4gICAgICAgICAgdGhpcy5zZXRNdXRpcGxlSW5wdXRTaXplKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMudW5TdWJqZWN0Lm5leHQoKTtcclxuICAgIHRoaXMudW5TdWJqZWN0LmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XHJcbiAgfVxyXG5cclxuICBzZXREYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuYXN5bmMoKSkgcmV0dXJuO1xyXG4gICAgWFNldERhdGE8WFRyZWVTZWxlY3ROb2RlPih0aGlzLmRhdGEoKSwgdGhpcy51blN1YmplY3QpLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICB0aGlzLm5vZGVzLnNldCh4KTtcclxuICAgICAgdGhpcy5zZXREaXNwbGF5VmFsdWUoKTtcclxuICAgICAgdGhpcy5zZXRQb3J0YWwoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ViamVjdCgpIHtcclxuICAgIHRoaXMuY2xvc2VTdWJqZWN0LnBpcGUodGFrZVVudGlsKHRoaXMudW5TdWJqZWN0KSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5jbG9zZVBvcnRhbCgpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmlucHV0Q2hhbmdlXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZSgpKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsKHRoaXMudW5TdWJqZWN0KSlcclxuICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMubW9kZWxDaGFuZ2UoeCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5rZXlkb3duU3ViamVjdC5waXBlKHRocm90dGxlVGltZSgxMCksIHRha2VVbnRpbCh0aGlzLnVuU3ViamVjdCkpLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICBjb25zdCBrZXlDb2RlID0geC5rZXlDb2RlO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXRoaXMucG9ydGFsQXR0YWNoZWQoKSAmJlxyXG4gICAgICAgIFtET1dOX0FSUk9XLCBVUF9BUlJPVywgTEVGVF9BUlJPVywgUklHSFRfQVJST1csIEVOVEVSLCBNQUNfRU5URVIsIEJBQ0tTUEFDRV0uaW5jbHVkZXMoa2V5Q29kZSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dENoYW5nZS5uZXh0KHRoaXMuZGlzcGxheVZhbHVlKCkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMubXVsdGlwbGVJbnB1dFNpemVDaGFuZ2UucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0YWtlVW50aWwodGhpcy51blN1YmplY3QpKS5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgaWYgKHRoaXMubXVsdGlwbGVJbnB1dCgpKSB7XHJcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLm11bHRpcGxlSW5wdXQoKSEuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoaW5wdXQsICd3aWR0aCcsIGAke3h9cHhgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQYXJhbnRTY3JvbGwoKSB7XHJcbiAgICBpZiAoIXRoaXMuZG9jdW1lbnQpIHJldHVybjtcclxuICAgIGNvbnN0IHBhcmVudHMgPSBYUGFyZW50cyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICBsZXQgZmlyc3RTY3JvbGw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcbiAgICBmb3IgKGxldCBpdGVtIG9mIHBhcmVudHMpIHtcclxuICAgICAgaWYgKGl0ZW0uY2xpZW50SGVpZ2h0IDwgaXRlbS5zY3JvbGxIZWlnaHQpIHtcclxuICAgICAgICBmaXJzdFNjcm9sbCA9IGl0ZW07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChmaXJzdFNjcm9sbCAmJiBmaXJzdFNjcm9sbC50YWdOYW1lICE9PSAnQk9EWScpIHtcclxuICAgICAgZnJvbUV2ZW50KGZpcnN0U2Nyb2xsLCAnc2Nyb2xsJylcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLnBvcnRhbEF0dGFjaGVkKCkhKSxcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnVuU3ViamVjdClcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBvcnRhbD8ub3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKTtcclxuICAgICAgICAgIGNvbnN0IGVyYWN0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICBjb25zdCBmcmVjdCA9IGZpcnN0U2Nyb2xsIS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgIGlmIChlcmFjdC50b3AgKyBlcmFjdC5oZWlnaHQgLSBmcmVjdC50b3AgPCAwIHx8IGVyYWN0LmJvdHRvbSA+IGZyZWN0LmJvdHRvbSkge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlU3ViamVjdC5uZXh0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRNdXRpcGxlSW5wdXRTaXplKCkge1xyXG4gICAgY29uc3QgaXZmID0gdGhpcy5pbnB1dENvbSgpLmlucHV0VmFsdWVSZWYoKT8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudDtcclxuICAgIGxldCB7IGNsaWVudFdpZHRoLCBzY3JvbGxIZWlnaHQgfSA9IGl2ZjtcclxuICAgIGNvbnN0IGxlbiA9IGl2Zi5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICBsZXQgbGFzdFJvd1RhZ1RvcCA9IC0xO1xyXG4gICAgbGV0IGxpbmVzID0gMTtcclxuICAgIGxldCByb3dUYWdUb3AgPSAtMTtcclxuICAgIGxldCBsYXN0Um93VGFnc1dpZHRoID0gMDtcclxuICAgIGxldCBtYXJnaW5MZWZ0ID0gMDtcclxuICAgIGxldCBtYXJnaW5Ub3AgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGNvbnN0IGVsZSA9IGl2Zi5jaGlsZHJlbltpXSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgaWYgKGVsZS50YWdOYW1lID09PSAnWC1UQUcnKSB7XHJcbiAgICAgICAgY29uc3QgeyBvZmZzZXRUb3AsIG9mZnNldFdpZHRoIH0gPSBlbGU7XHJcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBYQ29tcHV0ZWQoZWxlKTtcclxuICAgICAgICBtYXJnaW5MZWZ0ID0gTnVtYmVyKHN0eWxlLm1hcmdpbkxlZnQucmVwbGFjZSgncHgnLCAnJykpO1xyXG4gICAgICAgIG1hcmdpblRvcCA9IE51bWJlcihzdHlsZS5tYXJnaW5Ub3AucmVwbGFjZSgncHgnLCAnJykpO1xyXG4gICAgICAgIGlmIChyb3dUYWdUb3AgPT09IC0xKSB7XHJcbiAgICAgICAgICByb3dUYWdUb3AgPSBvZmZzZXRUb3A7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyb3dUYWdUb3AgIT09IG9mZnNldFRvcCkge1xyXG4gICAgICAgICAgbGluZXMrKztcclxuICAgICAgICAgIHJvd1RhZ1RvcCA9IG9mZnNldFRvcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxhc3RSb3dUYWdUb3AgPT09IC0xKSB7XHJcbiAgICAgICAgICBsYXN0Um93VGFnVG9wID0gb2Zmc2V0VG9wO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGFzdFJvd1RhZ1RvcCA9PT0gb2Zmc2V0VG9wKSB7XHJcbiAgICAgICAgICBsYXN0Um93VGFnc1dpZHRoICs9IG9mZnNldFdpZHRoICsgbWFyZ2luTGVmdDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGhlaWdodCA9IHNjcm9sbEhlaWdodCArIChsaW5lcyA+IDEgPyBtYXJnaW5Ub3AgOiAwKTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5pbnB1dENvbSgpLmlucHV0UmVmKCkubmF0aXZlRWxlbWVudCwgJ2hlaWdodCcsIGAke2hlaWdodH1weGApO1xyXG4gICAgaWYgKHRoaXMubXVsdGlwbGVJbnB1dCgpKSB7XHJcbiAgICAgIHRoaXMubXVsdGlwbGVJbnB1dFNpemVDaGFuZ2UubmV4dChjbGllbnRXaWR0aCAtIGxhc3RSb3dUYWdzV2lkdGggLSBtYXJnaW5MZWZ0KTtcclxuICAgIH1cclxuICAgIHRoaXMucG9ydGFsPy5vdmVybGF5UmVmPy51cGRhdGVQb3NpdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgbWVudGVyKCkge1xyXG4gICAgdGhpcy5lbnRlci5zZXQodHJ1ZSk7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZENvbXB1dGVkKCkgfHwgIXRoaXMuY2xlYXJhYmxlKCkgfHwgdGhpcy5pY29uU3BpbigpKSByZXR1cm47XHJcbiAgICBpZiAoIVhJc0VtcHR5KHRoaXMuZGlzcGxheVZhbHVlKCkpKSB7XHJcbiAgICAgIHRoaXMuaWNvbi5zZXQoJycpO1xyXG4gICAgICB0aGlzLnNob3dDbGVhcmFibGUuc2V0KHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWxlYXZlKCkge1xyXG4gICAgdGhpcy5lbnRlci5zZXQoZmFsc2UpO1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWRDb21wdXRlZCgpIHx8ICF0aGlzLmNsZWFyYWJsZSgpIHx8IHRoaXMuaWNvblNwaW4oKSkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuY2xlYXJhYmxlKCkpIHtcclxuICAgICAgdGhpcy5pY29uLnNldCgnZnRvLWNoZXZyb24tZG93bicpO1xyXG4gICAgICB0aGlzLnNob3dDbGVhcmFibGUuc2V0KGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1vZGVsQ2hhbmdlKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcclxuICAgIGlmIChYSXNGdW5jdGlvbih0aGlzLmRhdGEoKSkpIHtcclxuICAgICAgaWYgKCF0aGlzLnBvcnRhbEF0dGFjaGVkKCkpIHtcclxuICAgICAgICB0aGlzLnNob3dQb3J0YWwoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmljb24uc2V0KCdmdG8tbG9hZGVyJyk7XHJcbiAgICAgIHRoaXMuaWNvblNwaW4uc2V0KHRydWUpO1xyXG4gICAgICBYU2V0RGF0YTxYVHJlZVNlbGVjdE5vZGU+KHRoaXMuZGF0YSgpLCB0aGlzLnVuU3ViamVjdCwgdHJ1ZSwgdmFsdWUgYXMgYW55KS5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLmljb24uc2V0KCcnKTtcclxuICAgICAgICB0aGlzLmljb25TcGluLnNldChmYWxzZSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVudGVyKCkgJiYgdGhpcy5jbGVhcmFibGUoKSkge1xyXG4gICAgICAgICAgdGhpcy5zaG93Q2xlYXJhYmxlLnNldChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubm9kZXMuc2V0KHgpO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubm9kZXMoKSkge1xyXG4gICAgICBpZiAoIXRoaXMucG9ydGFsQXR0YWNoZWQoKSkge1xyXG4gICAgICAgIHRoaXMuc2hvd1BvcnRhbCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChYSXNFbXB0eSh2YWx1ZSkpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaE5vZGVzLnNldChbXHJcbiAgICAgICAgICAuLi50aGlzLm5vZGVzKCkubWFwKCh4KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByZXMgPSB7IC4uLnggfTtcclxuICAgICAgICAgICAgZGVsZXRlIHJlcy5jaGlsZHJlbjtcclxuICAgICAgICAgICAgZGVsZXRlIHJlcy5jaGlsZHJlbkxvYWRlZDtcclxuICAgICAgICAgICAgZGVsZXRlIHJlcy5sZWFmO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICBdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNldFNlYXJjaE5vZGVzKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2VhcmNoTm9kZXModmFsdWU6IHN0cmluZyB8IG51bWJlcikge1xyXG4gICAgbGV0IG5vZGVzOiBYVHJlZVNlbGVjdE5vZGVbXSA9IFtdO1xyXG4gICAgY29uc3QgZ2V0UGFyZW50ID0gKG5vZGU6IFhUcmVlU2VsZWN0Tm9kZSkgPT4ge1xyXG4gICAgICBpZiAoWElzRW1wdHkobm9kZS5waWQpKSByZXR1cm47XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMubm9kZXMoKS5maW5kKCh4KSA9PiB4LmlkID09PSBub2RlLnBpZCkgYXMgWFRyZWVTZWxlY3ROb2RlO1xyXG4gICAgICBwYXJlbnQub3BlbiA9IHRydWU7XHJcbiAgICAgIGlmICghWElzRW1wdHkocGFyZW50KSkge1xyXG4gICAgICAgIGlmIChub2Rlcy5ldmVyeSgoeCkgPT4geC5pZCAhPT0gcGFyZW50LmlkKSkge1xyXG4gICAgICAgICAgbm9kZXMucHVzaChwYXJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGlmICh0aGlzLmNhc2VTZW5zaXRpdmUoKSkge1xyXG4gICAgICBub2RlcyA9IHRoaXMubm9kZXMoKS5maWx0ZXIoKHgpID0+IHgubGFiZWwuaW5kZXhPZih2YWx1ZSkgPj0gMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBub2RlcyA9IHRoaXMubm9kZXMoKS5maWx0ZXIoXHJcbiAgICAgICAgKHgpID0+ICh4LmxhYmVsIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKS5pbmRleE9mKCh2YWx1ZSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkpID49IDBcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IG5vZGUgb2Ygbm9kZXMpIHtcclxuICAgICAgZ2V0UGFyZW50KG5vZGUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWFyY2hOb2Rlcy5zZXQoXHJcbiAgICAgIG5vZGVzLm1hcCgoeCkgPT4ge1xyXG4gICAgICAgIGxldCByZXMgPSB7IC4uLnggfTtcclxuICAgICAgICBkZWxldGUgcmVzLmNoaWxkcmVuO1xyXG4gICAgICAgIGRlbGV0ZSByZXMuY2hpbGRyZW5Mb2FkZWQ7XHJcbiAgICAgICAgZGVsZXRlIHJlcy5sZWFmO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJFbWl0KCkge1xyXG4gICAgdGhpcy52YWx1ZS5zZXQodGhpcy5tdWx0aXBsZSgpID8gW10gOiAnJyk7XHJcbiAgICB0aGlzLmRpc3BsYXlWYWx1ZS5zZXQoJycpO1xyXG4gICAgdGhpcy5tdWx0aXBsZVNlYXJjaFZhbHVlLnNldCgnJyk7XHJcbiAgICB0aGlzLnNlbGVjdGVkTm9kZXMuc2V0KFtdKTtcclxuICAgIHRoaXMuc2V0RGlzcGxheU5vZGVzKCk7XHJcbiAgICB0aGlzLnZhbHVlVHBsQ29udGV4dFNpZ25hbC51cGRhdGUoKHgpID0+IHtcclxuICAgICAgeC4kbm9kZSA9IG51bGw7XHJcbiAgICAgIHJldHVybiB7IC4uLnggfTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5tbGVhdmUoKTtcclxuICAgIHRoaXMuaW5wdXRDaGFuZ2UubmV4dCgnJyk7XHJcbiAgICBpZiAodGhpcy5vbkNoYW5nZSkgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKCkpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzcGxheVZhbHVlKGNsaWNrTm9kZT86IFhUcmVlU2VsZWN0Tm9kZSkge1xyXG4gICAgaWYgKHRoaXMubm9kZXMoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKCkpIHtcclxuICAgICAgICBpZiAoWElzRW1wdHkodGhpcy52YWx1ZSgpKSkge1xyXG4gICAgICAgICAgdGhpcy52YWx1ZS5zZXQoW10pO1xyXG4gICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUuc2V0KCcnKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2Rlcy5zZXQoW10pO1xyXG4gICAgICAgICAgdGhpcy5kaXNwbGF5Tm9kZXMuc2V0KFtdKTtcclxuICAgICAgICAgIHRoaXMuZGlzcGxheU1vcmUuc2V0KCcnKTtcclxuICAgICAgICAgIHRoaXMudmFsdWVUcGxDb250ZXh0U2lnbmFsLnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICB4LiRub2RlID0gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgLi4ueCB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnNldERpc3BsYXlOb2RlcygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgaWRzID0gW107XHJcbiAgICAgICAgICBsZXQgc2VsZWN0ZWQgPSBbXTtcclxuICAgICAgICAgIGlmICh0aGlzLm9iamVjdEFycmF5KCkpIHtcclxuICAgICAgICAgICAgaWRzID0gdGhpcy52YWx1ZSgpLm1hcCgoeDogWFRyZWVTZWxlY3ROb2RlKSA9PiB4LmlkKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlkcyA9IHRoaXMudmFsdWUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjbGlja05vZGUpIHtcclxuICAgICAgICAgICAgbGV0IGlueCA9IHRoaXMuc2VsZWN0ZWROb2RlcygpLmZpbmRJbmRleCgoeDogWFRyZWVTZWxlY3ROb2RlKSA9PiB4LmlkID09PSBjbGlja05vZGUuaWQpO1xyXG4gICAgICAgICAgICBpZiAoaW54ID49IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMudXBkYXRlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBYUmVtb3ZlKHgsICh5KSA9PiB5LmlkID09PSBjbGlja05vZGUuaWQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi54XTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMudXBkYXRlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB4LnB1c2goY2xpY2tOb2RlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4ueF07XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGlkIG9mIGlkcykge1xyXG4gICAgICAgICAgICAgIGxldCBub2RlID0gdGhpcy5ub2RlcygpLmZpbmQoKHgpID0+IHguaWQgPT09IGlkKTtcclxuICAgICAgICAgICAgICBpZiAobm9kZSkgc2VsZWN0ZWQucHVzaChub2RlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMuc2V0KHNlbGVjdGVkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLnNob3dQYXRoKCkpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgbm9kZSBvZiB0aGlzLnNlbGVjdGVkTm9kZXMoKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHBhcmVudHMgPSB0aGlzLmdldFBhcmVudFBhdGgobm9kZSk7XHJcbiAgICAgICAgICAgICAgbm9kZS5wYXRoID0gcGFyZW50cy5tYXAoKHgpID0+IHgubGFiZWwpLmpvaW4odGhpcy5zZXBhcmF0b3IoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc2V0RGlzcGxheU5vZGVzKCk7XHJcbiAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZS5zZXQoXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcygpXHJcbiAgICAgICAgICAgICAgLm1hcCgoeCkgPT4geC5sYWJlbClcclxuICAgICAgICAgICAgICAuam9pbih0aGlzLnNlcGFyYXRvcigpKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMudmFsdWVUcGxDb250ZXh0U2lnbmFsLnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICB4LiRub2RlID0gWy4uLnRoaXMuc2VsZWN0ZWROb2RlcygpXTtcclxuICAgICAgICAgICAgcmV0dXJuIHsgLi4ueCB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBub2RlID0gdGhpcy5ub2RlcygpLmZpbmQoKHgpID0+IHguaWQgPT09IHRoaXMudmFsdWUoKSk7XHJcbiAgICAgICAgaWYgKG5vZGUpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnNob3dQYXRoKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgcGFyZW50cyA9IHRoaXMuZ2V0UGFyZW50UGF0aChub2RlKTtcclxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUuc2V0KHBhcmVudHMubWFwKCh4KSA9PiB4LmxhYmVsKS5qb2luKHRoaXMuc2VwYXJhdG9yKCkpKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlLnNldChub2RlLmxhYmVsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudmFsdWVUcGxDb250ZXh0U2lnbmFsLnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICB4LiRub2RlID0gbm9kZTtcclxuICAgICAgICAgICAgcmV0dXJuIHsgLi4ueCB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlLnNldCgnJyk7XHJcbiAgICAgICAgICB0aGlzLnZhbHVlVHBsQ29udGV4dFNpZ25hbC51cGRhdGUoKHgpID0+IHtcclxuICAgICAgICAgICAgeC4kbm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnggfTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UGFyZW50UGF0aChub2RlOiBYVHJlZVNlbGVjdE5vZGUpIHtcclxuICAgIGxldCByZXM6IFhUcmVlU2VsZWN0Tm9kZVtdID0gW25vZGVdO1xyXG4gICAgY29uc3QgZ2V0UGFyZW50ID0gKG5kOiBYVHJlZVNlbGVjdE5vZGUpID0+IHtcclxuICAgICAgbGV0IHBhcmVudCA9IHRoaXMubm9kZXMoKS5maW5kKCh4KSA9PiBuZC5waWQgJiYgeC5pZCA9PT0gbmQucGlkKTtcclxuICAgICAgaWYgKHBhcmVudCkge1xyXG4gICAgICAgIHJlcyA9IFtwYXJlbnQsIC4uLnJlc107XHJcbiAgICAgICAgZ2V0UGFyZW50KHBhcmVudCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBnZXRQYXJlbnQobm9kZSk7XHJcblxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIGNsb3NlTm9kZShldmVudDogRXZlbnQsIG5vZGU6IFhUcmVlU2VsZWN0Tm9kZSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgbGV0IGlueCA9IC0xO1xyXG4gICAgaWYgKHRoaXMub2JqZWN0QXJyYXkoKSkge1xyXG4gICAgICBpbnggPSB0aGlzLnZhbHVlKCkuZmluZEluZGV4KCh5OiBYVHJlZVNlbGVjdE5vZGUpID0+IHkuaWQgPT09IG5vZGUuaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW54ID0gdGhpcy52YWx1ZSgpLmZpbmRJbmRleCgoeTogbnVtYmVyIHwgc3RyaW5nKSA9PiB5ID09PSBub2RlLmlkKTtcclxuICAgIH1cclxuICAgIGlmIChpbnggPj0gMCkge1xyXG4gICAgICB0aGlzLnZhbHVlLnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgIHguc3BsaWNlKGlueCwgMSk7XHJcbiAgICAgICAgcmV0dXJuIFsuLi54XTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmICh0aGlzLm9uQ2hhbmdlKSB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUoKSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWROb2Rlcy51cGRhdGUoKHgpID0+IHtcclxuICAgICAgICB4LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgcmV0dXJuIFsuLi54XTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc2V0RGlzcGxheU5vZGVzKCk7XHJcbiAgICB9XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIHNldERpc3BsYXlOb2RlcygpIHtcclxuICAgIGlmICghdGhpcy5tdWx0aXBsZSgpKSByZXR1cm47XHJcbiAgICBjb25zdCBtYXhsZW4gPSB0aGlzLnNlbGVjdGVkTm9kZXMoKS5sZW5ndGg7XHJcbiAgICBsZXQgbGVuID0gMDtcclxuICAgIGlmICh0aGlzLm1heFRhZ0NvdW50KCkgPj0gMCkge1xyXG4gICAgICBsZW4gPSBtYXhsZW4gPiB0aGlzLm1heFRhZ0NvdW50KCkhID8gdGhpcy5tYXhUYWdDb3VudCgpISA6IG1heGxlbjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxlbiA9IG1heGxlbjtcclxuICAgIH1cclxuICAgIGxldCBtb3JlID0gbWF4bGVuIC0gbGVuO1xyXG4gICAgbW9yZSA9IG1vcmUgPCAwID8gMCA6IG1vcmU7XHJcbiAgICB0aGlzLmRpc3BsYXlOb2Rlcy5zZXQodGhpcy5zZWxlY3RlZE5vZGVzKCkuc2xpY2UoMCwgbGVuKSk7XHJcbiAgICB0aGlzLnNob3dEaXNwbGF5TW9yZS5zZXQobW9yZSA+IDApO1xyXG4gICAgaWYgKFhJc1N0cmluZyh0aGlzLmdldE1heFRhZ0NvbnRlbnQoKSkpIHtcclxuICAgICAgdGhpcy5kaXNwbGF5TW9yZS5zZXQobW9yZSA+IDAgPyAodGhpcy5nZXRNYXhUYWdDb250ZW50KCkgYXMgc3RyaW5nKS5yZXBsYWNlKC9cXHtcXHtzdXJwbHVzXFx9XFx9L2csIGAke21vcmV9YCkgOiAnJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU3VycGx1cy5zZXQobW9yZSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUb3RhbC5zZXQobWF4bGVuKTtcclxuICAgIH1cclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRNdXRpcGxlSW5wdXRTaXplKCkpO1xyXG4gIH1cclxuXHJcbiAgcG9ydGFsQXR0YWNoZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3J0YWw/Lm92ZXJsYXlSZWY/Lmhhc0F0dGFjaGVkKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZVBvcnRhbCgpIHtcclxuICAgIGlmICh0aGlzLnBvcnRhbEF0dGFjaGVkKCkpIHtcclxuICAgICAgdGhpcy5wb3J0YWw/Lm92ZXJsYXlSZWY/LmRldGFjaCgpO1xyXG4gICAgICB0aGlzLmFjdGl2ZS5zZXQoZmFsc2UpO1xyXG4gICAgICB0aGlzLm11bHRpcGxlU2VhcmNoVmFsdWUuc2V0KCcnKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBkZXN0cm95UG9ydGFsKCkge1xyXG4gICAgdGhpcy5wb3J0YWw/Lm92ZXJsYXlSZWY/LmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIHNob3dQb3J0YWwoY2xpY2sgPSBmYWxzZSkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWRDb21wdXRlZCgpIHx8IHRoaXMuaWNvblNwaW4oKSB8fCB0aGlzLmFuaW1hdGluZygpKSByZXR1cm47XHJcbiAgICB0aGlzLmFjdGl2ZS5zZXQodHJ1ZSk7XHJcbiAgICBpZiAoKHRoaXMuYXN5bmMoKSAmJiBYSXNPYnNlcnZhYmxlKHRoaXMuZGF0YSgpKSAmJiB0aGlzLm5vZGVzKCkubGVuZ3RoID09PSAwKSB8fCBYSXNGdW5jdGlvbih0aGlzLmRhdGEoKSkpIHtcclxuICAgICAgdGhpcy5pY29uLnNldCgnZnRvLWxvYWRlcicpO1xyXG4gICAgICB0aGlzLmljb25TcGluLnNldCh0cnVlKTtcclxuICAgICAgWFNldERhdGE8WFRyZWVTZWxlY3ROb2RlPih0aGlzLmRhdGEoKSwgdGhpcy51blN1YmplY3QsIHRydWUsIGNsaWNrID8gJycgOiB0aGlzLmRpc3BsYXlWYWx1ZSgpKS5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLmljb24uc2V0KCdmdG8tY2hldnJvbi1kb3duJyk7XHJcbiAgICAgICAgdGhpcy5pY29uU3Bpbi5zZXQoZmFsc2UpO1xyXG4gICAgICAgIGlmICghdGhpcy5lbnRlcigpICYmIHRoaXMuY2xlYXJhYmxlKCkpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd0NsZWFyYWJsZS5zZXQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm5vZGVzLnNldCh4KTtcclxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoKCkpIHRoaXMuc2V0RGlzcGxheVZhbHVlKCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVQb3J0YWwoKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNyZWF0ZVBvcnRhbCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VhcmNoKCkgJiYgdGhpcy5tdWx0aXBsZSgpICYmIHRoaXMubXVsdGlwbGVJbnB1dCgpKSB7XHJcbiAgICAgIHRoaXMubXVsdGlwbGVJbnB1dCgpIS5pbnB1dEZvY3VzKCdmb2N1cycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbnB1dENvbSgpLmlucHV0Rm9jdXMoJ2ZvY3VzJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVQb3J0YWwoKSB7XHJcbiAgICBjb25zdCBib3ggPSB0aGlzLmlucHV0Q29tKCkuaW5wdXRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgY29uc3QgY29uZmlnOiBPdmVybGF5Q29uZmlnID0ge1xyXG4gICAgICBiYWNrZHJvcENsYXNzOiAnJyxcclxuICAgICAgd2lkdGg6IGJveC53aWR0aCxcclxuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5zZXRQbGFjZW1lbnQoKSxcclxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKVxyXG4gICAgfTtcclxuICAgIHRoaXMuc2V0UG9zaXRpb24oY29uZmlnKTtcclxuICAgIHRoaXMucG9ydGFsID0gdGhpcy5wb3J0YWxTZXJ2aWNlLmF0dGFjaCh7XHJcbiAgICAgIGNvbnRlbnQ6IFhUcmVlU2VsZWN0UG9ydGFsQ29tcG9uZW50LFxyXG4gICAgICB2aWV3Q29udGFpbmVyUmVmOiB0aGlzLnZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgIG92ZXJsYXlDb25maWc6IGNvbmZpZ1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnBvcnRhbC5vdmVybGF5UmVmXHJcbiAgICAgID8ub3V0c2lkZVBvaW50ZXJFdmVudHMoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51blN1YmplY3QpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNldERpc3BsYXlWYWx1ZSgpO1xyXG4gICAgICAgIHRoaXMuY2xvc2VTdWJqZWN0Lm5leHQoKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnNldEluc3RhbmNlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRQb3NpdGlvbihjb25maWc6IE92ZXJsYXlDb25maWcpIHtcclxuICAgIGxldCBwb3NpdGlvbiA9IGNvbmZpZy5wb3NpdGlvblN0cmF0ZWd5IGFzIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneTtcclxuICAgIHBvc2l0aW9uLnBvc2l0aW9uQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLnVuU3ViamVjdCkpLnN1YnNjcmliZSgocG9zOiBDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25DaGFuZ2UpID0+IHtcclxuICAgICAgY29uc3QgcGxhY2UgPSBYUG9ydGFsQ29ubmVjdGVkUG9zaXRpb24uZ2V0KHBvcy5jb25uZWN0aW9uUGFpcikgYXMgWFBvc2l0aW9uVG9wQm90dG9tO1xyXG4gICAgICBpZiAocGxhY2UgIT09IHRoaXMucmVhbFBsYWNlbWVudCgpKSB7XHJcbiAgICAgICAgdGhpcy5yZWFsUGxhY2VtZW50LnNldChwbGFjZSk7XHJcbiAgICAgICAgdGhpcy5wb3J0YWxPdmVybGF5UmVmKCk/LnVwZGF0ZVBvc2l0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0SW5zdGFuY2UoKSB7XHJcbiAgICBsZXQgeyBjb21wb25lbnRSZWYsIG92ZXJsYXlSZWYgfSA9IHRoaXMucG9ydGFsO1xyXG4gICAgaWYgKCFjb21wb25lbnRSZWYgfHwgIW92ZXJsYXlSZWYpIHJldHVybjtcclxuICAgIHRoaXMucG9ydGFsQ29tcG9uZW50LnNldChjb21wb25lbnRSZWYpO1xyXG4gICAgdGhpcy5wb3J0YWxPdmVybGF5UmVmLnNldChvdmVybGF5UmVmKTtcclxuICAgIHRoaXMucmVhbFBsYWNlbWVudC5zZXQodGhpcy5wbGFjZW1lbnQoKSk7XHJcbiAgICBjb25zdCB7IG5vZGVDbGljaywgYW5pbWF0aW5nIH0gPSBjb21wb25lbnRSZWYuaW5zdGFuY2U7XHJcbiAgICBub2RlQ2xpY2suc3Vic2NyaWJlKCh4KSA9PiB0aGlzLm5vZGVDbGljayh4Lm5vZGUsIHgudmFsdWUpKTtcclxuICAgIGFuaW1hdGluZy5zdWJzY3JpYmUoKGluZzogYm9vbGVhbikgPT4gdGhpcy5hbmltYXRpbmcuc2V0KGluZykpO1xyXG4gIH1cclxuXHJcbiAgbm9kZUNsaWNrKG5vZGU6IFhUcmVlU2VsZWN0Tm9kZSwgdmFsdWU/OiBYVHJlZVNlbGVjdE5vZGVbXSB8IChzdHJpbmcgfCBudW1iZXIpW10pIHtcclxuICAgIGlmICh0aGlzLm11bHRpcGxlKCkpIHtcclxuICAgICAgdGhpcy52YWx1ZS5zZXQodmFsdWUpO1xyXG4gICAgICBpZiAodGhpcy5tdWx0aXBsZUlucHV0KCkpIHtcclxuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMubXVsdGlwbGVJbnB1dCgpIS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShpbnB1dCwgJ3dpZHRoJywgJzJyZW0nKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zZWFyY2goKSAmJiB0aGlzLm11bHRpcGxlU2VhcmNoVmFsdWUoKSAhPT0gJycpIHtcclxuICAgICAgICB0aGlzLm11bHRpcGxlU2VhcmNoVmFsdWUuc2V0KCcnKTtcclxuICAgICAgICB0aGlzLmlucHV0Q2hhbmdlLm5leHQoJycpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0RGlzcGxheVZhbHVlKG5vZGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbm9kZSA9IG5vZGUgYXMgWFRyZWVTZWxlY3ROb2RlO1xyXG4gICAgICBpZiAodGhpcy5zaG93UGF0aCgpKSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IHRoaXMuZ2V0UGFyZW50UGF0aChub2RlKTtcclxuICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZS5zZXQocGFyZW50cy5tYXAoKHgpID0+IHgubGFiZWwpLmpvaW4odGhpcy5zZXBhcmF0b3IoKSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheVZhbHVlLnNldChub2RlLmxhYmVsKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnZhbHVlVHBsQ29udGV4dFNpZ25hbC51cGRhdGUoKHgpID0+IHtcclxuICAgICAgICB4LiRub2RlID0gbm9kZTtcclxuICAgICAgICByZXR1cm4geyAuLi54IH07XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnZhbHVlLnNldChub2RlLmlkKTtcclxuICAgICAgdGhpcy5jbG9zZVN1YmplY3QubmV4dCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VhcmNoKCkgJiYgdGhpcy5tdWx0aXBsZSgpICYmIHRoaXMubXVsdGlwbGVJbnB1dCgpKSB7XHJcbiAgICAgIHRoaXMubXVsdGlwbGVJbnB1dCgpIS5pbnB1dEZvY3VzKCdmb2N1cycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbnB1dENvbSgpLmlucHV0Rm9jdXMoJ2ZvY3VzJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vbkNoYW5nZSkgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKCkpO1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbFZhbGlkYXRvcigpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0QWxsTm9kZXModmFsdWU6IFhUcmVlU2VsZWN0Tm9kZVtdIHwgKHN0cmluZyB8IG51bWJlcilbXSkge1xyXG4gICAgdGhpcy52YWx1ZS5zZXQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgc2V0UGxhY2VtZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMucG9ydGFsU2VydmljZS5zZXRQbGFjZW1lbnQoe1xyXG4gICAgICBlbGVtZW50UmVmOiB0aGlzLmlucHV0Q29tKCkuaW5wdXRSZWYoKSxcclxuICAgICAgcGxhY2VtZW50OiBbdGhpcy5wbGFjZW1lbnQoKSBhcyBYUG9zaXRpb25Ub3BCb3R0b20sICdib3R0b20nLCAndG9wJ10sXHJcbiAgICAgIHRyYW5zZm9ybU9yaWdpbk9uOiAneC10cmVlLXNlbGVjdC1wb3J0YWwnXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFBvcnRhbCgpIHtcclxuICAgIHRoaXMucG9ydGFsQXR0YWNoZWQoKSAmJiB0aGlzLnBvcnRhbD8ub3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLnNldFBsYWNlbWVudCgpKTtcclxuICB9XHJcblxyXG4gIG9uS2V5ZG93bigkZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIHRoaXMua2V5ZG93blN1YmplY3QubmV4dCgkZXZlbnQpO1xyXG4gICAgaWYgKCRldmVudC5rZXlDb2RlICE9PSBUQUIgJiYgIXRoaXMuc2VhcmNoKCkpIHtcclxuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkZvY3VzKF9ldmVudDogRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLnNlYXJjaCgpICYmIHRoaXMubXVsdGlwbGUoKSAmJiB0aGlzLm11bHRpcGxlSW5wdXQoKSkge1xyXG4gICAgICB0aGlzLm11bHRpcGxlSW5wdXQoKSEuaW5wdXRGb2N1cygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbnB1dENvbSgpLmlucHV0Rm9jdXMoJ2ZvY3VzJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbklucHV0KF9ldmVudDogSW5wdXRFdmVudCkge1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbFZhbGlkYXRvcigpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmlucHV0Q2hhbmdlLm5leHQodGhpcy5tdWx0aXBsZSgpID8gdGhpcy5tdWx0aXBsZVNlYXJjaFZhbHVlKCkgOiB0aGlzLmRpc3BsYXlWYWx1ZSgpKSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI3RyZWVTZWxlY3QgY2xhc3M9XCJ4LXRyZWUtc2VsZWN0XCIgW2NsYXNzLngtdHJlZS1zZWxlY3QtbXVsdGlwbGVdPVwibXVsdGlwbGUoKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ4LXRyZWUtc2VsZWN0LXJvd1wiPlxyXG4gICAgPHgtaW5wdXRcclxuICAgICAgI2lucHV0Q29tXHJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgW2xhYmVsXT1cImxhYmVsKClcIlxyXG4gICAgICBbbGFiZWxXaWR0aF09XCJsYWJlbFdpZHRoKClcIlxyXG4gICAgICBbbGFiZWxBbGlnbl09XCJsYWJlbEFsaWduKClcIlxyXG4gICAgICBbanVzdGlmeV09XCJqdXN0aWZ5KClcIlxyXG4gICAgICBbYWxpZ25dPVwiYWxpZ24oKVwiXHJcbiAgICAgIFtkaXJlY3Rpb25dPVwiZGlyZWN0aW9uKClcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRDb21wdXRlZCgpXCJcclxuICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkQ29tcHV0ZWQoKVwiXHJcbiAgICAgIFt2YWxpZGF0b3JdPVwidmFsaWRhdG9yQ29tcHV0ZWQoKVwiXHJcbiAgICAgIFtpY29uXT1cImljb24oKVwiXHJcbiAgICAgIFtpY29uU3Bpbl09XCJpY29uU3BpbigpXCJcclxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyKClcIlxyXG4gICAgICBbcmVhZG9ubHldPVwiZ2V0UmVhZG9ubHkoKVwiXHJcbiAgICAgIFtjbGVhcmFibGVdPVwic2hvd0NsZWFyYWJsZSgpXCJcclxuICAgICAgWyhuZ01vZGVsKV09XCJkaXNwbGF5VmFsdWVcIlxyXG4gICAgICBbdmFsdWVUcGxdPVwidmFsdWVUcGxTaWduYWwoKSA/IHZhbHVlVHBsU2lnbmFsKCkgOiBub2RlVHBsKClcIlxyXG4gICAgICBbdmFsdWVUcGxDb250ZXh0XT1cInZhbHVlVHBsQ29udGV4dFNpZ25hbCgpXCJcclxuICAgICAgW3NpemVdPVwic2l6ZSgpXCJcclxuICAgICAgW2JvcmRlcmVkXT1cImJvcmRlcmVkKClcIlxyXG4gICAgICBbYmVmb3JlXT1cImJlZm9yZSgpXCJcclxuICAgICAgW2FmdGVyXT1cImFmdGVyKClcIlxyXG4gICAgICBbcGF0dGVybl09XCJwYXR0ZXJuQ29tcHV0ZWQoKVwiXHJcbiAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VDb21wdXRlZCgpXCJcclxuICAgICAgW3BvaW50ZXJdPVwidHJ1ZVwiXHJcbiAgICAgIFsoYWN0aXZlKV09XCJhY3RpdmVcIlxyXG4gICAgICAoY2xlYXJFbWl0KT1cImNsZWFyRW1pdCgpXCJcclxuICAgICAgKHhLZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQpXCJcclxuICAgICAgKHhJbnB1dCk9XCJvbklucHV0KCRldmVudClcIlxyXG4gICAgICAoeEZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXHJcbiAgICAgICh4Q2xpY2spPVwic2hvd1BvcnRhbCh0cnVlKVwiXHJcbiAgICAgICh4TW91c2VlbnRlcik9XCJtZW50ZXIoKVwiXHJcbiAgICAgICh4TW91c2VsZWF2ZSk9XCJtbGVhdmUoKVwiXHJcbiAgICAgICh4Q29tcG9zaXRpb24pPVwiY29tcG9zaXRpb24uc2V0KCRldmVudClcIlxyXG4gICAgPjwveC1pbnB1dD5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI211bHRpcGxlVmFsdWVUcGw+XHJcbiAgQGZvciAobm9kZSBvZiBkaXNwbGF5Tm9kZXMoKTsgdHJhY2sgbm9kZS5pZDsgbGV0IGkgPSAkaW5kZXgpIHtcclxuICAgIDx4LXRhZ1xyXG4gICAgICBbQC5kaXNhYmxlZF09XCJ0cnVlXCJcclxuICAgICAgW2JvcmRlcmVkXT1cImZhbHNlXCJcclxuICAgICAgW2Nsb3NhYmxlXT1cIiFkaXNhYmxlZCgpXCJcclxuICAgICAgW3R5cGVdPVwiJ2luZm8nXCJcclxuICAgICAgKGNsb3NlKT1cImNsb3NlTm9kZSgkZXZlbnQsIG5vZGUsIGkpXCJcclxuICAgICAgW3NpemVdPVwic2l6ZSgpXCJcclxuICAgICAgPnt7IHNob3dQYXRoKCkgPyBub2RlLnBhdGggOiBub2RlLmxhYmVsIH19PC94LXRhZ1xyXG4gICAgPlxyXG4gIH1cclxuICBAaWYgKHNob3dEaXNwbGF5TW9yZSgpKSB7XHJcbiAgICA8eC10YWcgW0AuZGlzYWJsZWRdPVwidHJ1ZVwiIFtib3JkZXJlZF09XCJmYWxzZVwiIFt0eXBlXT1cIidpbmZvJ1wiIFtzaXplXT1cInNpemUoKVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICp4T3V0bGV0PVwiZ2V0TWF4VGFnQ29udGVudCgpOyBjb250ZXh0OiB7ICRzdXJwbHVzOiBzZWxlY3RlZFN1cnBsdXMoKSwgJHRvdGFsOiBzZWxlY3RlZFRvdGFsKCkgfVwiPnt7XHJcbiAgICAgICAgZGlzcGxheU1vcmUoKVxyXG4gICAgICB9fTwvbmctY29udGFpbmVyPlxyXG4gICAgPC94LXRhZz5cclxuICB9XHJcbiAgQGlmIChzZWFyY2goKSkge1xyXG4gICAgPHgtaW5wdXRcclxuICAgICAgI211bHRpcGxlSW5wdXRcclxuICAgICAgW2JvcmRlcmVkXT1cImZhbHNlXCJcclxuICAgICAgW3NpemVdPVwic2l6ZSgpXCJcclxuICAgICAgWyhuZ01vZGVsKV09XCJtdWx0aXBsZVNlYXJjaFZhbHVlXCJcclxuICAgICAgKHhJbnB1dCk9XCJvbklucHV0KCRldmVudClcIlxyXG4gICAgICAoeEtleWRvd24pPVwib25LZXlkb3duKCRldmVudClcIlxyXG4gICAgPjwveC1pbnB1dD5cclxuICB9XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
@@ -249,9 +249,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
249
249
  }] } });
250
250
 
251
251
  class XAutoCompleteComponent extends XAutoCompleteProperty {
252
- writeValue(value) {
253
- this.value.set(value);
254
- }
255
252
  constructor() {
256
253
  super();
257
254
  this.inputCom = viewChild.required('inputCom', { read: XInputComponent });
@@ -521,12 +518,6 @@ class XAutoCompleteComponent extends XAutoCompleteProperty {
521
518
  this.onChange && this.onChange(value);
522
519
  }
523
520
  }
524
- formControlChanges() {
525
- this.setData();
526
- this.ngOnInit();
527
- this.writeValue(this.value());
528
- this.ngAfterViewInit();
529
- }
530
521
  onKeydown($event) {
531
522
  this.keydownSubject.next($event);
532
523
  }