@talrace/ngx-noder 0.0.8 → 0.0.9

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 (93) hide show
  1. package/esm2022/lib/apart-components/add-link-dialog/add-link-dialog.component.mjs +15 -9
  2. package/esm2022/lib/apart-components/editor-toolbar/components/base-toolbar.component.mjs +8 -2
  3. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font/font.component.mjs +2 -2
  4. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font-size/font-size.component.mjs +3 -3
  5. package/esm2022/lib/apart-components/editor-toolbar/shared/toolbar-styles.helper.mjs +1 -8
  6. package/esm2022/lib/editor/components/edges/edge.component.mjs +2 -2
  7. package/esm2022/lib/editor/components/edges/edges.mjs +21 -2
  8. package/esm2022/lib/editor/components/image/input-handler/image-input.handler.mjs +18 -1
  9. package/esm2022/lib/editor/components/shared/services/custom-content.service.mjs +22 -56
  10. package/esm2022/lib/editor/components/table/components/table-cell.component.mjs +6 -6
  11. package/esm2022/lib/editor/components/table/components/table.component.mjs +13 -4
  12. package/esm2022/lib/editor/components/table/models/cell-data.model.mjs +3 -4
  13. package/esm2022/lib/editor/components/table/selection/table-selection.mjs +15 -5
  14. package/esm2022/lib/editor/content/constants/editor.const.mjs +9 -1
  15. package/esm2022/lib/editor/content/display-data/display-data.mjs +839 -0
  16. package/esm2022/lib/editor/content/display-data/general-properties.model.mjs +1 -1
  17. package/esm2022/lib/editor/content/display-data/models/paragraph-info.model.mjs +8 -0
  18. package/esm2022/lib/editor/content/display-data/paragraph.mjs +5 -1
  19. package/esm2022/lib/editor/content/display-data/text-line-info.mjs +2 -1
  20. package/esm2022/lib/editor/content/display-data/toolbar-styles.interface.mjs +1 -1
  21. package/esm2022/lib/editor/content/helpers/content-style.helper.mjs +12 -30
  22. package/esm2022/lib/editor/content/helpers/display-token.helper.mjs +62 -0
  23. package/esm2022/lib/editor/display/layers/cursor.layer.mjs +9 -8
  24. package/esm2022/lib/editor/display/layers/pages.layer.mjs +5 -5
  25. package/esm2022/lib/editor/display/layers/print.text.layer.mjs +2 -2
  26. package/esm2022/lib/editor/display/layers/selection.layer.mjs +15 -9
  27. package/esm2022/lib/editor/display/layers/text.layer.mjs +25 -27
  28. package/esm2022/lib/editor/display/print/print.renderer.mjs +8 -8
  29. package/esm2022/lib/editor/display/renderer.mjs +10 -10
  30. package/esm2022/lib/editor/display/rendering.helper.mjs +2 -4
  31. package/esm2022/lib/editor/display/virtual.renderer.mjs +5 -5
  32. package/esm2022/lib/editor/execution/edit.session.mjs +199 -755
  33. package/esm2022/lib/editor/execution/editor.mjs +116 -75
  34. package/esm2022/lib/editor/execution/helpers/format-style.helper.mjs +1 -33
  35. package/esm2022/lib/editor/execution/helpers/image.helpet.mjs +12 -0
  36. package/esm2022/lib/editor/execution/helpers/paragraph.helper.mjs +11 -3
  37. package/esm2022/lib/editor/execution/regulator.service.mjs +28 -20
  38. package/esm2022/lib/editor/gadgets/numbering/numbering-paragraph-style.model.mjs +13 -0
  39. package/esm2022/lib/editor/gadgets/numbering/numbering.helper.mjs +77 -10
  40. package/esm2022/lib/editor/gadgets/search/search.mjs +6 -6
  41. package/esm2022/lib/editor/interaction/editor.service.mjs +27 -6
  42. package/esm2022/lib/editor/interaction/input.handler.mjs +8 -5
  43. package/esm2022/lib/editor/interaction/mouse.handler.mjs +2 -1
  44. package/esm2022/lib/editor/operations/helpers/format-operations.helper.mjs +32 -2
  45. package/esm2022/lib/editor/operations/helpers/link-operations.helper.mjs +47 -12
  46. package/esm2022/lib/editor/operations/operations-helper.helper.mjs +13 -14
  47. package/esm2022/lib/editor/operations/save-commands.helper.mjs +2 -2
  48. package/esm2022/lib/editor/positioning/content.helper.mjs +15 -15
  49. package/esm2022/lib/editor/positioning/line-width.helper.mjs +5 -5
  50. package/esm2022/lib/editor/positioning/position.helper.mjs +34 -32
  51. package/esm2022/lib/editor/positioning/selection.mjs +42 -32
  52. package/esm2022/lib/editor/revision.helper.mjs +4 -3
  53. package/fesm2022/talrace-ngx-noder.mjs +3765 -3548
  54. package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
  55. package/lib/apart-components/add-link-dialog/add-link-dialog.component.d.ts +0 -1
  56. package/lib/apart-components/editor-toolbar/shared/toolbar-styles.helper.d.ts +0 -2
  57. package/lib/editor/components/image/input-handler/image-input.handler.d.ts +3 -0
  58. package/lib/editor/components/shared/services/custom-content.service.d.ts +3 -5
  59. package/lib/editor/components/table/components/table-cell.component.d.ts +1 -1
  60. package/lib/editor/components/table/components/table.component.d.ts +1 -0
  61. package/lib/editor/components/table/models/cell-data.model.d.ts +1 -1
  62. package/lib/editor/components/table/selection/table-selection.d.ts +2 -0
  63. package/lib/editor/content/constants/editor.const.d.ts +2 -0
  64. package/lib/editor/content/display-data/display-data.d.ts +103 -0
  65. package/lib/editor/content/display-data/general-properties.model.d.ts +5 -0
  66. package/lib/editor/content/display-data/models/paragraph-info.model.d.ts +9 -0
  67. package/lib/editor/content/display-data/paragraph.d.ts +1 -0
  68. package/lib/editor/content/display-data/text-line-info.d.ts +1 -0
  69. package/lib/editor/content/display-data/toolbar-styles.interface.d.ts +1 -1
  70. package/lib/editor/content/helpers/content-style.helper.d.ts +1 -2
  71. package/lib/editor/content/helpers/display-token.helper.d.ts +6 -0
  72. package/lib/editor/display/layers/text.layer.d.ts +1 -2
  73. package/lib/editor/display/print/print.renderer.d.ts +0 -2
  74. package/lib/editor/execution/edit.session.d.ts +11 -59
  75. package/lib/editor/execution/editor.d.ts +9 -6
  76. package/lib/editor/execution/helpers/format-style.helper.d.ts +0 -2
  77. package/lib/editor/execution/helpers/image.helpet.d.ts +4 -0
  78. package/lib/editor/execution/regulator.service.d.ts +1 -1
  79. package/lib/editor/gadgets/numbering/numbering-paragraph-style.model.d.ts +6 -0
  80. package/lib/editor/gadgets/numbering/numbering.helper.d.ts +10 -3
  81. package/lib/editor/interaction/editor.service.d.ts +12 -3
  82. package/lib/editor/operations/helpers/link-operations.helper.d.ts +5 -3
  83. package/lib/editor/positioning/content.helper.d.ts +6 -5
  84. package/lib/editor/positioning/position.helper.d.ts +3 -3
  85. package/lib/editor/positioning/selection.d.ts +3 -0
  86. package/package.json +1 -1
  87. package/src/_ngx-noder.theme.scss +31 -2
  88. package/esm2022/lib/editor/content/display-data/document.mjs +0 -134
  89. package/esm2022/lib/editor/content/display-data/pages.wrap.mjs +0 -226
  90. package/esm2022/lib/editor/execution/helpers/delta.helper.mjs +0 -18
  91. package/lib/editor/content/display-data/document.d.ts +0 -56
  92. package/lib/editor/content/display-data/pages.wrap.d.ts +0 -42
  93. package/lib/editor/execution/helpers/delta.helper.d.ts +0 -6
@@ -107,9 +107,8 @@ export class NoderTableComponent extends BaseNoderComponent {
107
107
  this.fillTableCells();
108
108
  }
109
109
  updateTable() {
110
- const cells = [].concat(...this.rowMatrix.map(x => x.cells));
111
- const uniqCells = new Set(cells.map(x => x.componentRef));
112
- uniqCells.forEach(x => this.componentService.removeComponent(x));
110
+ const cellRefs = new Set(this.rowMatrix.flatMap(row => row.cells).map(cell => cell.componentRef));
111
+ cellRefs.forEach(cellRef => this.componentService.removeComponent(cellRef));
113
112
  this.tableSelection.destroy();
114
113
  this.rowMatrix = [];
115
114
  this.tableEl.remove();
@@ -391,6 +390,16 @@ export class NoderTableComponent extends BaseNoderComponent {
391
390
  }
392
391
  return sum;
393
392
  }
393
+ updateCells() {
394
+ const rows = this.rowMatrix.length;
395
+ const cols = rows > 0 ? this.rowMatrix[0].cells.length : 0;
396
+ for (let i = 0; i < rows; i++) {
397
+ for (let j = 0; j < cols; j++) {
398
+ const cell = this.rowMatrix[i].cells[j];
399
+ cell.componentRef.instance.session.displayData.updateNextLineIndexes(0, cell.componentRef.instance.session.displayData.paragraphs.length - 1);
400
+ }
401
+ }
402
+ }
394
403
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NoderTableComponent, deps: [{ token: i1.ComponentService }, { token: i2.EditorService }, { token: i0.ElementRef }, { token: i3.OverlayService }], target: i0.ɵɵFactoryTarget.Component }); }
395
404
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NoderTableComponent, selector: "app-nod-table", usesInheritance: true, ngImport: i0, template: '', isInline: true, styles: [":host{position:relative}:host::ng-deep table{position:relative;border-collapse:collapse;background:transparent;empty-cells:show;border-spacing:0;overflow:visible;table-layout:fixed}:host::ng-deep td{position:relative;vertical-align:top;border:1px solid #000;margin:0;padding:0;height:inherit}:host::ng-deep .hidden-cell{display:none;cursor:not-allowed}:host::ng-deep .resizer-border{position:absolute;border:solid .5px blue;z-index:1}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
396
405
  }
@@ -398,4 +407,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
398
407
  type: Component,
399
408
  args: [{ selector: 'app-nod-table', template: '', changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{position:relative}:host::ng-deep table{position:relative;border-collapse:collapse;background:transparent;empty-cells:show;border-spacing:0;overflow:visible;table-layout:fixed}:host::ng-deep td{position:relative;vertical-align:top;border:1px solid #000;margin:0;padding:0;height:inherit}:host::ng-deep .hidden-cell{display:none;cursor:not-allowed}:host::ng-deep .resizer-border{position:absolute;border:solid .5px blue;z-index:1}\n"] }]
400
409
  }], ctorParameters: () => [{ type: i1.ComponentService }, { type: i2.EditorService }, { type: i0.ElementRef }, { type: i3.OverlayService }] });
401
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2NvbXBvbmVudHMvdGFibGUvY29tcG9uZW50cy90YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBSzNELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7O0FBUTdELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxrQkFBa0I7SUFDdkQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsT0FBcUIsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsR0FBZTtRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUN2QixDQUFDO0lBa0JELFlBQ1ksZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLEVBQWMsRUFDZCxjQUE4QjtRQUV0QyxLQUFLLEVBQUUsQ0FBQztRQUxBLHFCQUFnQixHQUFo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TSxDQUFDO1FBQ3hDLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUMvQixJQUFJLFFBQVEsR0FBRyxPQUFPLEVBQUU7Z0JBQ3BCLFFBQVEsR0FBRyxPQUFPLENBQUM7Z0JBQ25CLE1BQU07YUFDVDtZQUVELFVBQVUsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1NBQzVCO1FBRUQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU8sYUFBYSxDQUFDLEtBQWEsRUFBRSxHQUFXO1FBQzVDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNaLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDOUIsR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztTQUM1QztRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQzsrR0FuZlEsbUJBQW1CO21HQUFuQixtQkFBbUIsNEVBSmxCLEVBQUU7OzRGQUlILG1CQUFtQjtrQkFOL0IsU0FBUzsrQkFDSSxlQUFlLFlBQ2YsRUFBRSxtQkFFSyx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBCYXNlTm9kZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWJzdHJhY3QvYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2VsbERhdGFNb2RlbCB9IGZyb20gJy4uL21vZGVscy9jZWxsLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgQ2VsbFJlc2l6ZXIgfSBmcm9tICcuLi9jZWxsLXJlc2l6ZXIvY2VsbC1yZXNpemVyJztcbmltcG9ydCB7IENlbGxSZXNpemVyUGFyYW1ldGVyc01vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2NlbGwtcmVzaXplci1wYXJhbWV0ZXJzLm1vZGVsJztcbmltcG9ydCB7IENvbXBvbmVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvY29tcG9uZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuLi8uLi8uLi9leGVjdXRpb24vZWRpdC5zZXNzaW9uJztcbmltcG9ydCB7IEVkaXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmFjdGlvbi9lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBIUnVsZSB9IGZyb20gJy4uL2VudW1zL2hydWxlLmVudW0nO1xuaW1wb3J0IHsgTm9kZXJUYWJsZUNlbGxDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLWNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IE92ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL292ZXJsYXkuc2VydmljZSc7XG5pbXBvcnQgeyBSb3dEYXRhTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvcm93LWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgUm93TW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3Jvdy5tb2RlbCc7XG5pbXBvcnQgeyBTY2FsaW5nSGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vY29udGVudC9oZWxwZXJzL3NjYWxpbmcuaGVscGVyJztcbmltcG9ydCB7IFRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RhYmxlLm1vZGVsJztcbmltcG9ydCB7IFRhYmxlU2VsZWN0aW9uIH0gZnJvbSAnLi4vc2VsZWN0aW9uL3RhYmxlLXNlbGVjdGlvbic7XG5pbXBvcnQgeyBWZXJ0aWNhbE1lcmdlIH0gZnJvbSAnLi4vZW51bXMvdmVydGljYWwtbWVyZ2UuZW51bSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLW5vZC10YWJsZScsXG4gICAgdGVtcGxhdGU6ICcnLFxuICAgIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTm9kZXJUYWJsZUNvbXBvbmVudCBleHRlbmRzIEJhc2VOb2RlckNvbXBvbmVudCB7XG4gICAgZ2V0IHRhYmxlKCk6IFRhYmxlTW9kZWwge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50IGFzIFRhYmxlTW9kZWw7XG4gICAgfVxuICAgIHNldCB0YWJsZSh2YWw6IFRhYmxlTW9kZWwpIHtcbiAgICAgICAgdGhpcy5jb250ZW50ID0gdmFsO1xuICAgIH1cblxuICAgIHRhYmxlU2VsZWN0aW9uOiBUYWJsZVNlbGVjdGlvbjtcblxuICAgIHRhYmxlRWw6IEhUTUxUYWJsZUVsZW1lbnQ7XG5cbiAgICByZXNpemVyOiBDZWxsUmVzaXplcjtcblxuICAgIHJlc2l6ZXJFbDogSFRNTERpdkVsZW1lbnQ7XG5cbiAgICByb3dNYXRyaXg6IFJvd0RhdGFNb2RlbFtdID0gW107XG5cbiAgICBzcGxpdHM6IG51bWJlcltdID0gW107XG5cbiAgICByZWFkb25seSBtaW5Sb3dIZWlnaHQgPSAxOTtcblxuICAgIHJlYWRvbmx5IGJvcmRlclNpemUgPSAxO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY29tcG9uZW50U2VydmljZTogQ29tcG9uZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlZGl0b3JTZXJ2aWNlOiBFZGl0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIG92ZXJsYXlTZXJ2aWNlOiBPdmVybGF5U2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLnRhYmxlU2VsZWN0aW9uPy5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jcmVhdGVUYWJsZSgpO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZVByb3BlcnRpZXMoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVSZXNpemVyKCk7XG4gICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnJlc2l6ZXJFbCk7XG4gICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlRWwpO1xuICAgICAgICB0aGlzLnRhYmxlU2VsZWN0aW9uID0gbmV3IFRhYmxlU2VsZWN0aW9uKFxuICAgICAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLFxuICAgICAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZSxcbiAgICAgICAgICAgIHRoaXMucm93TWF0cml4LFxuICAgICAgICAgICAgdGhpcy50YWJsZSxcbiAgICAgICAgICAgIHRoaXMudGFibGVFbCxcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbklkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0Q2VsbFNlc3Npb24ocm93OiBudW1iZXIsIGNvbHVtbjogbnVtYmVyKTogRWRpdFNlc3Npb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dNYXRyaXhbcm93XS5jZWxsc1tjb2x1bW5dLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5zZXNzaW9uO1xuICAgIH1cblxuICAgIGdldENlbGxXaWR0aCh0YWJsZVJvdzogUm93TW9kZWwsIGNlbGxJbmRleDogbnVtYmVyLCBhYnNvbHV0ZUNlbGxJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRhYmxlUm93LmNlbGxzW2NlbGxJbmRleF0ud2lkdGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0YWJsZVJvdy5jZWxsc1tjZWxsSW5kZXhdLndpZHRoO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHdpZHRoID0gMDtcbiAgICAgICAgbGV0IGkgPSBhYnNvbHV0ZUNlbGxJbmRleDtcbiAgICAgICAgY29uc3QgY2VsbFNwYW5Db3VudCA9IGFic29sdXRlQ2VsbEluZGV4ICsgdGFibGVSb3cuY2VsbHNbY2VsbEluZGV4XS5ob3Jpem9udGFsTWVyZ2U7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgd2lkdGggKz0gdGhpcy50YWJsZS5jb2x1bW5zW2ldLndpZHRoO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9IHdoaWxlIChpIDwgY2VsbFNwYW5Db3VudCk7XG5cbiAgICAgICAgcmV0dXJuIHdpZHRoO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QWRqdXN0ZWRXaWR0aCh0YWJsZVJvdzogUm93TW9kZWwsIGNlbGxJbmRleDogbnVtYmVyLCBhYnNvbHV0ZUNlbGxJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgY2VsbFdpZHRoID0gdGhpcy5nZXRDZWxsV2lkdGgodGFibGVSb3csIGNlbGxJbmRleCwgYWJzb2x1dGVDZWxsSW5kZXgpO1xuXG4gICAgICAgIGlmICh0YWJsZVJvdy5jZWxsc1tjZWxsSW5kZXhdLndpZHRoVHlwZSA9PT0gJ3BjdCcpIHtcbiAgICAgICAgICAgIHRhYmxlUm93LmNlbGxzW2NlbGxJbmRleF0ud2lkdGhUeXBlID0gJ2R4YSc7XG4gICAgICAgICAgICByZXR1cm4gKGNlbGxXaWR0aCAqIHRoaXMuX3dpZHRoKSAvIDUwMDA7IC8vIDUwMDAgaXMgZXF1YWwgdG8gMTAwJSBpbiBkb2N4IHVuaXRzIG9mIG1lYXN1cmVtZW50XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU2NhbGluZ0hlbHBlci5zY2FsZShjZWxsV2lkdGgsIHRoaXMuZ2VuZXJhbFByb3BlcnRpZXMuc2NhbGluZ1JhdGlvKTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZXNpemVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlc2l6ZXJFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aGlzLnJlc2l6ZXJFbC5jbGFzc05hbWUgPSAncmVzaXplci1ib3JkZXInO1xuICAgICAgICB0aGlzLnJlc2l6ZXJFbC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYGRpc3BsYXk6bm9uZTtgKTtcbiAgICAgICAgdGhpcy5yZXNpemVyID0gbmV3IENlbGxSZXNpemVyKHRoaXMudGFibGUsIHRoaXMudGFibGVFbCwgdGhpcy5lZGl0b3JTZXJ2aWNlLCB0aGlzLnJlc2l6ZXJFbCk7XG4gICAgICAgIHRoaXMucmVzaXplci5zZXNzaW9uSWQgPSB0aGlzLnNlc3Npb25JZDtcbiAgICB9XG5cbiAgICBjcmVhdGVUYWJsZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWJsZUVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTtcbiAgICAgICAgdGhpcy5zZXRDb2xncm91cCgpO1xuICAgICAgICB0aGlzLmluc2VydFJvd3ModGhpcy50YWJsZS5yb3dzLmxlbmd0aCwgMCk7XG4gICAgICAgIHRoaXMuZmlsbFRhYmxlQ2VsbHMoKTtcbiAgICB9XG5cbiAgICB1cGRhdGVUYWJsZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2VsbHMgPSBbXS5jb25jYXQoLi4udGhpcy5yb3dNYXRyaXgubWFwKHggPT4geC5jZWxscykpIGFzIENlbGxEYXRhTW9kZWxbXTtcbiAgICAgICAgY29uc3QgdW5pcUNlbGxzID0gbmV3IFNldChjZWxscy5tYXAoeCA9PiB4LmNvbXBvbmVudFJlZikpO1xuICAgICAgICB1bmlxQ2VsbHMuZm9yRWFjaCh4ID0+IHRoaXMuY29tcG9uZW50U2VydmljZS5yZW1vdmVDb21wb25lbnQoeCkpO1xuICAgICAgICB0aGlzLnRhYmxlU2VsZWN0aW9uLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5yb3dNYXRyaXggPSBbXTtcbiAgICAgICAgdGhpcy50YWJsZUVsLnJlbW92ZSgpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgICB9XG5cbiAgICBpbnNlcnRSb3dzKHJvd3NDb3VudDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3dpZHRoID0gdGhpcy5nZXRUYWJsZVdpZHRoKCk7XG4gICAgICAgIGxldCByb3dJbmRleCA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHJvd0luZGV4IDwgcm93c0NvdW50KSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRSb3dJbmRleCA9IHRhcmdldEluZGV4ICsgcm93SW5kZXg7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLnRhYmxlRWwuaW5zZXJ0Um93KHRhcmdldFJvd0luZGV4KTtcbiAgICAgICAgICAgIHRoaXMucm93TWF0cml4LnNwbGljZSh0YXJnZXRSb3dJbmRleCwgMCwgbmV3IFJvd0RhdGFNb2RlbChyb3csIDAsIFtdKSk7XG4gICAgICAgICAgICB0aGlzLmluc2VydENlbGxzKHRhcmdldFJvd0luZGV4LCB0aGlzLnRhYmxlLnJvd3NbdGFyZ2V0Um93SW5kZXhdLmNlbGxzLmxlbmd0aCwgMCk7XG4gICAgICAgICAgICByb3dJbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maWxsVGFibGVSb3coKTtcbiAgICB9XG5cbiAgICBpbnNlcnRDZWxscyhyb3dJbmRleDogbnVtYmVyLCBjZWxsc0NvdW50OiBudW1iZXIsIHRhcmdldEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgbGV0IG1vZGVsVGFyZ2V0SW5kZXggPSB0aGlzLmdldE1vZGVsVGFyZ2V0SW5kZXgocm93SW5kZXgsIHRhcmdldEluZGV4KTtcbiAgICAgICAgdGhpcy5hZGRDZWxscyhyb3dJbmRleCwgY2VsbHNDb3VudCwgdGFyZ2V0SW5kZXgsIG1vZGVsVGFyZ2V0SW5kZXgpO1xuICAgIH1cblxuICAgIGdldE1vZGVsVGFyZ2V0SW5kZXgocm93SW5kZXg6IG51bWJlciwgdGFyZ2V0SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGxldCBhYnNvbHV0ZU1vZGVsQ2VsbENvdW50ID0gMDtcbiAgICAgICAgbGV0IG1vZGVsVGFyZ2V0SW5kZXggPSAwO1xuXG4gICAgICAgIHdoaWxlIChhYnNvbHV0ZU1vZGVsQ2VsbENvdW50IDwgdGFyZ2V0SW5kZXgpIHtcbiAgICAgICAgICAgIGFic29sdXRlTW9kZWxDZWxsQ291bnQgKz0gdGhpcy50YWJsZS5yb3dzW3Jvd0luZGV4XS5jZWxsc1ttb2RlbFRhcmdldEluZGV4XS5ob3Jpem9udGFsTWVyZ2UgPz8gMTtcblxuICAgICAgICAgICAgaWYgKGFic29sdXRlTW9kZWxDZWxsQ291bnQgPiB0YXJnZXRJbmRleCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtb2RlbFRhcmdldEluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbW9kZWxUYXJnZXRJbmRleDtcbiAgICB9XG5cbiAgICBhZGRDZWxscyhyb3dJbmRleDogbnVtYmVyLCBjZWxsc0NvdW50OiBudW1iZXIsIHRhcmdldEluZGV4OiBudW1iZXIsIG1vZGVsVGFyZ2V0SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGxldCBjdXJyZW50VGFyZ2V0SW5kZXggPSB0YXJnZXRJbmRleDtcblxuICAgICAgICB3aGlsZSAoaSA8IGNlbGxzQ291bnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsQ2VsbEluZGV4ID0gbW9kZWxUYXJnZXRJbmRleCArIGk7XG5cbiAgICAgICAgICAgIGlmICgodGhpcy50YWJsZS5yb3dzW3Jvd0luZGV4XS5jZWxsc1ttb2RlbENlbGxJbmRleF0udmVydGljYWxNZXJnZSBhcyBWZXJ0aWNhbE1lcmdlKSA9PT0gVmVydGljYWxNZXJnZS5NZXJnZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluaGVyaXRDZWxsRGF0YSA9IHRoaXMucm93TWF0cml4W3Jvd0luZGV4IC0gMV0uY2VsbHNbY3VycmVudFRhcmdldEluZGV4XTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMudGFibGUucm93c1tyb3dJbmRleF0uY2VsbHNbbW9kZWxDZWxsSW5kZXhdLmhvcml6b250YWxNZXJnZSA/PyAxO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkQWRkaXRpb25hbENlbGxzKHJvd0luZGV4LCBjdXJyZW50VGFyZ2V0SW5kZXgsIGNvdW50LCBpbmhlcml0Q2VsbERhdGEpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXRJbmRleCArPSBjb3VudDtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLnRhYmxlRWwucm93c1tyb3dJbmRleF0uaW5zZXJ0Q2VsbChjdXJyZW50VGFyZ2V0SW5kZXgpO1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5jb21wb25lbnRTZXJ2aWNlLmdlbmVyYXRlQW5kQXR0YWNoQ29tcG9uZW50KGNlbGwsIE5vZGVyVGFibGVDZWxsQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgdGFibGU6IHRoaXMudGFibGUsXG4gICAgICAgICAgICAgICAgY2VsbDogdGhpcy50YWJsZS5yb3dzW3Jvd0luZGV4XS5jZWxsc1ttb2RlbENlbGxJbmRleF0sXG4gICAgICAgICAgICAgICAgcGFyZW50U2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCxcbiAgICAgICAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICAgICAgICBjZWxsSW5kZXg6IG1vZGVsQ2VsbEluZGV4LFxuICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4OiBjdXJyZW50VGFyZ2V0SW5kZXgsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMuZ2V0QWRqdXN0ZWRXaWR0aCh0aGlzLnRhYmxlLnJvd3Nbcm93SW5kZXhdLCBtb2RlbENlbGxJbmRleCwgY3VycmVudFRhcmdldEluZGV4KSxcbiAgICAgICAgICAgICAgICBnZW5lcmFsUHJvcGVydGllczogdGhpcy5nZW5lcmFsUHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICBoZWlnaHRDaGFuZ2VkOiB0aGlzLmNlbGxIZWlnaHRDaGFuZ2VkLFxuICAgICAgICAgICAgICAgIHN0YXJ0UmVzaXppbmc6IHRoaXMuc3RhcnRSZXNpemluZ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBjZWxsQ29udGVudEhlaWdodCA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZS5nZXRDZWxsQ29udGVudEhlaWdodCgpO1xuICAgICAgICAgICAgY29uc3QgY2VsbERhdGEgPSBuZXcgQ2VsbERhdGFNb2RlbChjZWxsLCBjZWxsQ29udGVudEhlaWdodCwgY29tcG9uZW50UmVmKTtcbiAgICAgICAgICAgIHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5jZWxscy5zcGxpY2UoY3VycmVudFRhcmdldEluZGV4LCAwLCBjZWxsRGF0YSk7XG4gICAgICAgICAgICBjdXJyZW50VGFyZ2V0SW5kZXgrKztcblxuICAgICAgICAgICAgaWYgKHRoaXMudGFibGUucm93c1tyb3dJbmRleF0uY2VsbHNbbW9kZWxDZWxsSW5kZXhdLmhvcml6b250YWxNZXJnZSA+IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMudGFibGUucm93c1tyb3dJbmRleF0uY2VsbHNbbW9kZWxDZWxsSW5kZXhdLmhvcml6b250YWxNZXJnZSAtIDE7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRBZGRpdGlvbmFsQ2VsbHMocm93SW5kZXgsIGN1cnJlbnRUYXJnZXRJbmRleCwgY291bnQsIGNlbGxEYXRhKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0SW5kZXggKz0gY291bnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZEFkZGl0aW9uYWxDZWxscyhyb3dJbmRleDogbnVtYmVyLCBjZWxsSW5kZXg6IG51bWJlciwgY2VsbHNDb3VudDogbnVtYmVyLCBvcmlnaW5hbENlbGxEYXRhOiBDZWxsRGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY2VsbHNDb3VudDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBhZGRpdGlvbmFsQ2VsbCA9IHRoaXMudGFibGVFbC5yb3dzW3Jvd0luZGV4XS5pbnNlcnRDZWxsKGNlbGxJbmRleCk7XG4gICAgICAgICAgICBhZGRpdGlvbmFsQ2VsbC5jbGFzc0xpc3QuYWRkKCdoaWRkZW4tY2VsbCcpO1xuICAgICAgICAgICAgY29uc3QgY2VsbERhdGEgPSBuZXcgQ2VsbERhdGFNb2RlbChvcmlnaW5hbENlbGxEYXRhLmNlbGwsIG9yaWdpbmFsQ2VsbERhdGEuY2VsbENvbnRlbnRIZWlnaHQsIG9yaWdpbmFsQ2VsbERhdGEuY29tcG9uZW50UmVmKTtcbiAgICAgICAgICAgIHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5jZWxscy5zcGxpY2UoY2VsbEluZGV4LCAwLCBjZWxsRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRDb2xncm91cCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb2xkQ29sR3JvdXBzID0gdGhpcy50YWJsZUVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdjb2xncm91cCcpO1xuXG4gICAgICAgIGlmIChvbGRDb2xHcm91cHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlRWwucmVtb3ZlQ2hpbGQob2xkQ29sR3JvdXBzWzBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbGdyb3VwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY29sZ3JvdXAnKTtcbiAgICAgICAgbGV0IGkgPSAwO1xuXG4gICAgICAgIHdoaWxlIChpIDwgdGhpcy50YWJsZS5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgY29sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY29sJyk7XG4gICAgICAgICAgICBjb25zdCBzY2FsZWRXaWR0aCA9IFNjYWxpbmdIZWxwZXIuc2NhbGUodGhpcy50YWJsZS5jb2x1bW5zW2ldLndpZHRoLCB0aGlzLmdlbmVyYWxQcm9wZXJ0aWVzLnNjYWxpbmdSYXRpbyk7XG4gICAgICAgICAgICBjb2wuc3R5bGUud2lkdGggPSBgJHtzY2FsZWRXaWR0aH1weGA7XG4gICAgICAgICAgICBjb2xncm91cC5hcHBlbmRDaGlsZChjb2wpO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50YWJsZUVsLmluc2VydEFkamFjZW50RWxlbWVudCgnYWZ0ZXJiZWdpbicsIGNvbGdyb3VwKTtcbiAgICB9XG5cbiAgICBmaWxsVGFibGVSb3coKTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50YWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMudGFibGUucm93c1tpXS5oUnVsZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgSFJ1bGUuQXRMZWFzdDoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dIZWlnaHQgPSB0aGlzLmdldFJvd0hlaWdodChpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZUVsLnJvd3NbaV0uc3R5bGUubWluSGVpZ2h0ID0gYCR7dGhpcy50YWJsZS5yb3dzW2ldLmhlaWdodH1weGA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVFbC5yb3dzW2ldLnN0eWxlLmhlaWdodCA9IGAke3Jvd0hlaWdodH1weGA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93TWF0cml4W2ldLmhlaWdodCA9IHJvd0hlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgSFJ1bGUuRXhhY3Q6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVFbC5yb3dzW2ldLnN0eWxlLmhlaWdodCA9IGAke3RoaXMudGFibGUucm93c1tpXS5oZWlnaHR9cHhgO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtpXS5oZWlnaHQgPSB0aGlzLnRhYmxlLnJvd3NbaV0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0hlaWdodCA9IHRoaXMuZ2V0Um93SGVpZ2h0KGkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW5Sb3dIZWlnaHQgPSB0aGlzLnRhYmxlLnJvd3NbaV0uaGVpZ2h0ID8/IHRoaXMubWluUm93SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRIZWlnaHQgPSBtaW5Sb3dIZWlnaHQgPiByb3dIZWlnaHQgPyBtaW5Sb3dIZWlnaHQgOiByb3dIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVFbC5yb3dzW2ldLnN0eWxlLmhlaWdodCA9IGAke3Jlc3VsdEhlaWdodH1weGA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93TWF0cml4W2ldLmhlaWdodCA9IHJlc3VsdEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Um93SGVpZ2h0KHJvd0luZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBjZWxsSGVpZ2h0cyA9IHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5jZWxscy5tYXAoKHgsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoKHguY29tcG9uZW50UmVmLmluc3RhbmNlLmNlbGwudmVydGljYWxNZXJnZSBhcyBWZXJ0aWNhbE1lcmdlKSA9PT0gVmVydGljYWxNZXJnZS5SZXN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNMYXN0VmVydGljYWxNZXJnZWRDZWxsID0geC5jZWxsICE9PSB0aGlzLnJvd01hdHJpeFtyb3dJbmRleCArIDFdPy5jZWxsc1tpbmRleF0uY2VsbDtcblxuICAgICAgICAgICAgICAgIGlmIChpc0xhc3RWZXJ0aWNhbE1lcmdlZENlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSByb3dJbmRleCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50SGVpZ2h0ID0geC5jZWxsQ29udGVudEhlaWdodDtcblxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoeC5jZWxsID09PSB0aGlzLnJvd01hdHJpeFtpXT8uY2VsbHNbaW5kZXhdLmNlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRIZWlnaHQgLT0gdGhpcy5yb3dNYXRyaXhbaV0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB4LmNlbGxDb250ZW50SGVpZ2h0O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gTWF0aC5tYXgoLi4uY2VsbEhlaWdodHMpO1xuICAgIH1cblxuICAgIGZpbGxUYWJsZUNlbGxzKCk6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93TWF0cml4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMucm93TWF0cml4W2ldLmNlbGxzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtpIC0gMV0/LmNlbGxzW2pdPy5jZWxsID09PSB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tqXS5jZWxsIHx8XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93TWF0cml4W2ldLmNlbGxzW2pdLmNlbGwgPT09IHRoaXMucm93TWF0cml4W2ldLmNlbGxzW2ogLSAxXT8uY2VsbCB8fFxuICAgICAgICAgICAgICAgICAgICAodGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbal0uY29tcG9uZW50UmVmLmluc3RhbmNlLmNlbGwudmVydGljYWxNZXJnZSBhcyBWZXJ0aWNhbE1lcmdlKSA9PT0gVmVydGljYWxNZXJnZS5NZXJnZVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tqXS5jZWxsLmNvbFNwYW4gPSB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tqXS5jb21wb25lbnRSZWYuaW5zdGFuY2UuY2VsbC5ob3Jpem9udGFsTWVyZ2U7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbal0uY2VsbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tqXS5jb21wb25lbnRSZWYuaW5zdGFuY2UuY2VsbC5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDZWxsUm93U3BhbihpLCBqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldENlbGxSb3dTcGFuKHJvd0luZGV4OiBudW1iZXIsIGFic29sdXRlQ2VsbEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLmNlbGxzW2Fic29sdXRlQ2VsbEluZGV4XS5jZWxsLnJvd1NwYW4gPSAxO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICh0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uY2VsbHNbYWJzb2x1dGVDZWxsSW5kZXhdLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5jZWxsLnZlcnRpY2FsTWVyZ2UgYXMgVmVydGljYWxNZXJnZSkgIT09XG4gICAgICAgICAgICBWZXJ0aWNhbE1lcmdlLlJlc3RhcnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gcm93SW5kZXggKyAxOyBpIDwgdGhpcy5yb3dNYXRyaXgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1thYnNvbHV0ZUNlbGxJbmRleF0uY2VsbCA9PT0gdGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLmNlbGxzW2Fic29sdXRlQ2VsbEluZGV4XS5jZWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLmNlbGxzW2Fic29sdXRlQ2VsbEluZGV4XS5jZWxsLnJvd1NwYW4rKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRUYWJsZUhlaWdodCgpOiB2b2lkIHtcbiAgICAgICAgbGV0IGJvcmRlcnNIZWlnaHQgPSAwO1xuICAgICAgICBsZXQgcm93c0hlaWdodCA9IDE7XG5cbiAgICAgICAgZm9yIChsZXQgcm93IG9mIHRoaXMucm93TWF0cml4KSB7XG4gICAgICAgICAgICByb3dzSGVpZ2h0ICs9IHJvdy5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmIChyb3cuY2VsbHMuc29tZSh4ID0+ICF4LmNvbXBvbmVudFJlZi5pbnN0YW5jZS5jZWxsLnZlcnRpY2FsTWVyZ2UpKSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyc0hlaWdodCArPSB0aGlzLmJvcmRlclNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9oZWlnaHQgPSByb3dzSGVpZ2h0ICsgYm9yZGVyc0hlaWdodDtcbiAgICB9XG5cbiAgICBzdGFydFJlc2l6aW5nID0gKGNlbGxSZXNpemVyUGFyYW1ldGVyczogQ2VsbFJlc2l6ZXJQYXJhbWV0ZXJzTW9kZWwpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3Qgc3BsaXRSb3dJbmRleCA9IHRoaXMuZ2V0U3BsaXRSb3dJbmRleChjZWxsUmVzaXplclBhcmFtZXRlcnMucm93SW5kZXgpO1xuICAgICAgICB0aGlzLnJlc2l6ZXIucmVzaXplckhlaWdodCA9IHRoaXMuZ2V0Um93c0hlaWdodEJldHdlZW5TcGxpdHMoc3BsaXRSb3dJbmRleCk7XG4gICAgICAgIHRoaXMucmVzaXplci5zdGFydFkgPSB0aGlzLmdldFJvd3NIZWlnaHRCZWZvcmUoc3BsaXRSb3dJbmRleCk7XG4gICAgICAgIHRoaXMucmVzaXplci5zcGxpdFJvd0luZGV4ID0gc3BsaXRSb3dJbmRleDtcbiAgICAgICAgdGhpcy5yZXNpemVyLnRhYmxlSW5zZXJ0SW5kZXggPSB0aGlzLmluc2VydEluZGV4O1xuICAgICAgICB0aGlzLnJlc2l6ZXIub25TdGFydFJlc2l6aW5nKGNlbGxSZXNpemVyUGFyYW1ldGVycyk7XG4gICAgfTtcblxuICAgIHByb2Nlc3NTcGxpdChcbiAgICAgICAgbGVmdFNwYWNlT25QYWdlOiBudW1iZXIsXG4gICAgICAgIHNwYWNlQmV0d2VlblBhZ2VzQ29udGVudDogbnVtYmVyLFxuICAgICAgICBjb250ZW50SGVpZ2h0OiBudW1iZXJcbiAgICApOiB7IHNwbGl0c0NvdW50OiBudW1iZXI7IHRhYmxlSGVpZ2h0OiBudW1iZXI7IGxlZnRIZWlnaHQ6IG51bWJlciB9IHtcbiAgICAgICAgdGhpcy5yZW1vdmVTcGxpdHMoKTtcblxuICAgICAgICBpZiAobGVmdFNwYWNlT25QYWdlID49IHRoaXMuaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4geyBzcGxpdHNDb3VudDogMCwgdGFibGVIZWlnaHQ6IHRoaXMuaGVpZ2h0LCBsZWZ0SGVpZ2h0OiAwIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGVmdFNwYWNlT25QYWdlIDwgdGhpcy5yb3dNYXRyaXhbMF0uaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4geyBzcGxpdHNDb3VudDogMSwgdGFibGVIZWlnaHQ6IHRoaXMuaGVpZ2h0LCBsZWZ0SGVpZ2h0OiB0aGlzLmhlaWdodCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3BsaXRUYWJsZShsZWZ0U3BhY2VPblBhZ2UsIHNwYWNlQmV0d2VlblBhZ2VzQ29udGVudCwgY29udGVudEhlaWdodCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzcGxpdFRhYmxlKFxuICAgICAgICBsZWZ0U3BhY2VPblBhZ2U6IG51bWJlcixcbiAgICAgICAgc3BhY2VCZXR3ZWVuUGFnZXNDb250ZW50OiBudW1iZXIsXG4gICAgICAgIGNvbnRlbnRIZWlnaHQ6IG51bWJlclxuICAgICk6IHsgc3BsaXRzQ291bnQ6IG51bWJlcjsgdGFibGVIZWlnaHQ6IG51bWJlcjsgbGVmdEhlaWdodDogbnVtYmVyIH0ge1xuICAgICAgICBsZXQgbGVmdEhlaWdodCA9IDAsXG4gICAgICAgICAgICB0YWJsZUhlaWdodFdpdGhTcGxpdHMgPSB0aGlzLmhlaWdodCxcbiAgICAgICAgICAgIHJvd0luZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKHJvd0luZGV4IDwgdGhpcy5yb3dNYXRyaXgubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgeyBpbmRleCwgcm93c0hlaWdodCB9ID0gdGhpcy5nZXRSb3dJbmRleEJ5SGVpZ2h0KHJvd0luZGV4LCBsZWZ0U3BhY2VPblBhZ2UpO1xuICAgICAgICAgICAgcm93SW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5yb3dNYXRyaXgubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxlZnRIZWlnaHQgPSB0aGlzLnJvd01hdHJpeFxuICAgICAgICAgICAgICAgIC5zbGljZShpbmRleClcbiAgICAgICAgICAgICAgICAubWFwKHggPT4geC5oZWlnaHQpXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgocGFydGlhbFN1bSwgY3VycikgPT4gcGFydGlhbFN1bSArIGN1cnIgKyB0aGlzLmJvcmRlclNpemUpO1xuXG4gICAgICAgICAgICBjb25zdCBzcGxpdFJvd0hlaWdodCA9IHNwYWNlQmV0d2VlblBhZ2VzQ29udGVudCArIGxlZnRTcGFjZU9uUGFnZSAtIHJvd3NIZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVNwbGl0Um93KGluZGV4ICsgdGhpcy5zcGxpdHMubGVuZ3RoLCBzcGxpdFJvd0hlaWdodCk7XG4gICAgICAgICAgICB0aGlzLnNwbGl0cy5wdXNoKGluZGV4ICsgdGhpcy5zcGxpdHMubGVuZ3RoKTtcbiAgICAgICAgICAgIHRhYmxlSGVpZ2h0V2l0aFNwbGl0cyArPSBzcGxpdFJvd0hlaWdodDtcbiAgICAgICAgICAgIGxlZnRTcGFjZU9uUGFnZSA9IGNvbnRlbnRIZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3BsaXRzQ291bnQ6IHRoaXMuc3BsaXRzLmxlbmd0aCxcbiAgICAgICAgICAgIHRhYmxlSGVpZ2h0OiB0YWJsZUhlaWdodFdpdGhTcGxpdHMsXG4gICAgICAgICAgICBsZWZ0SGVpZ2h0XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSb3dJbmRleEJ5SGVpZ2h0KHN0YXJ0SW5kZXg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB7IGluZGV4OiBudW1iZXI7IHJvd3NIZWlnaHQ6IG51bWJlciB9IHtcbiAgICAgICAgaWYgKHN0YXJ0SW5kZXggPj0gdGhpcy5yb3dNYXRyaXgubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4geyBpbmRleDogdGhpcy5yb3dNYXRyaXgubGVuZ3RoLCByb3dzSGVpZ2h0OiAwIH07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGFibGVIZWlnaHQgPSB0aGlzLnJvd01hdHJpeFtzdGFydEluZGV4XS5oZWlnaHQgKyB0aGlzLmJvcmRlclNpemUsXG4gICAgICAgICAgICBpID0gc3RhcnRJbmRleDtcblxuICAgICAgICB3aGlsZSAodGFibGVIZWlnaHQgPCBoZWlnaHQpIHtcbiAgICAgICAgICAgIHRhYmxlSGVpZ2h0ICs9IHRoaXMucm93TWF0cml4W2kgKyAxXT8uaGVpZ2h0ICsgdGhpcy5ib3JkZXJTaXplO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgaW5kZXg6IGksIHJvd3NIZWlnaHQ6IHRhYmxlSGVpZ2h0IC0gdGhpcy5yb3dNYXRyaXhbaV0/LmhlaWdodCB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlU3BsaXRSb3coaW5kZXg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWJsZUVsLmluc2VydFJvdyhpbmRleCk7XG4gICAgICAgIHRoaXMudGFibGVFbC5yb3dzW2luZGV4XS5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuICAgICAgICB0aGlzLnRhYmxlRWwucm93c1tpbmRleF0uY2xhc3NMaXN0LmFkZCgnc3BsaXQtcm93Jyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVTcGxpdHMoKSB7XG4gICAgICAgIHRoaXMuc3BsaXRzID0gW107XG4gICAgICAgIHdoaWxlICh0aGlzLnRhYmxlRWwucXVlcnlTZWxlY3RvcignLnNwbGl0LXJvdycpKSB7XG4gICAgICAgICAgICBjb25zdCBlbCA9IHRoaXMudGFibGVFbC5xdWVyeVNlbGVjdG9yKCcuc3BsaXQtcm93Jyk7XG4gICAgICAgICAgICBlbC5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBjYWxjdWxhdGVQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudGFibGVFbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRUYWJsZUhlaWdodCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VGFibGVXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZS5jb2x1bW5zLnJlZHVjZSgocHJldiwgbmV4dCkgPT4gcHJldiArIG5leHQud2lkdGggKyB0aGlzLmJvcmRlclNpemUsIDEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2VsbEhlaWdodENoYW5nZWQgPSAocm93SW5kZXg6IG51bWJlciwgY2VsbEluZGV4OiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IHRhYmxlUm93ID0gdGhpcy50YWJsZS5yb3dzW3Jvd0luZGV4XTtcbiAgICAgICAgdGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLmNlbGxzW2NlbGxJbmRleF0uY2VsbENvbnRlbnRIZWlnaHQgPSBoZWlnaHQgPCB0aGlzLm1pblJvd0hlaWdodCA/IHRoaXMubWluUm93SGVpZ2h0IDogaGVpZ2h0O1xuXG4gICAgICAgIGlmICh0YWJsZVJvdy5oUnVsZSA9PT0gSFJ1bGUuRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvd0luZGV4V2l0aFNwbGl0ID0gdGhpcy5nZXRJbmRleEluY2x1ZGluZ1NwbGl0Um93cyh0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0ucm93KTtcblxuICAgICAgICBjb25zdCByb3cgPSB0aGlzLnRhYmxlRWwucm93c1tyb3dJbmRleFdpdGhTcGxpdF07XG4gICAgICAgIGNvbnN0IGN1cnJlbnRIZWlnaHQgPSByb3cub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBjb25zdCBjZWxsSGVpZ2h0cyA9IHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5jZWxscy5tYXAoeCA9PiB4LmNlbGxDb250ZW50SGVpZ2h0KTtcbiAgICAgICAgY29uc3QgbWF4Q2VsbENvbnRlbnRIZWlnaCA9IE1hdGgubWF4KC4uLmNlbGxIZWlnaHRzLCBoZWlnaHQpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIG1heENlbGxDb250ZW50SGVpZ2ggPiBjdXJyZW50SGVpZ2h0IHx8XG4gICAgICAgICAgICAobWF4Q2VsbENvbnRlbnRIZWlnaCA8IGN1cnJlbnRIZWlnaHQgJiYgKCF0YWJsZVJvdy5oZWlnaHQgfHwgdGFibGVSb3cuaGVpZ2h0IDw9IG1heENlbGxDb250ZW50SGVpZ2gpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJvdy5zdHlsZS5oZWlnaHQgPSBgJHttYXhDZWxsQ29udGVudEhlaWdofXB4YDtcbiAgICAgICAgICAgIHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5oZWlnaHQgPSBtYXhDZWxsQ29udGVudEhlaWdoO1xuICAgICAgICAgICAgdGhpcy5zZXRUYWJsZUhlaWdodCgpO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmNoYW5nZWRUYWJsZVNpemUodGhpcy5pbnNlcnRJbmRleCwgdGhpcy5zZXNzaW9uSWQpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgZ2V0U3BsaXRSb3dJbmRleChyb3dJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEluZGV4SW5jbHVkaW5nU3BsaXRSb3dzKHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5yb3cpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SW5kZXhJbmNsdWRpbmdTcGxpdFJvd3Mocm93OiBIVE1MVGFibGVSb3dFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy50YWJsZUVsLnJvd3MpLmluZGV4T2Yocm93KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJvd3NIZWlnaHRCZWZvcmUocm93SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLnNwbGl0cykge1xuICAgICAgICAgICAgaWYgKHJvd0luZGV4IDwgZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbmRleCA9IGVsZW1lbnQgKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Um93c0hlaWdodCgwLCBpbmRleCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSb3dzSGVpZ2h0QmV0d2VlblNwbGl0cyhyb3dJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSAwO1xuICAgICAgICBsZXQgZW5kSW5kZXggPSB0aGlzLnRhYmxlRWwucm93cy5sZW5ndGg7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLnNwbGl0cykge1xuICAgICAgICAgICAgaWYgKHJvd0luZGV4IDwgZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RhcnRJbmRleCA9IGVsZW1lbnQgKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Um93c0hlaWdodChzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSb3dzSGVpZ2h0KHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHN1bSA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICBzdW0gKz0gdGhpcy50YWJsZUVsLnJvd3NbaV0ub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1bTtcbiAgICB9XG59XG4iXX0=
410
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2NvbXBvbmVudHMvdGFibGUvY29tcG9uZW50cy90YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBSzNELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7O0FBUTdELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxrQkFBa0I7SUFDdkQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsT0FBcUIsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsR0FBZTtRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUN2QixDQUFDO0lBa0JELFlBQ1ksZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLEVBQWMsRUFDZCxjQUE4QjtRQUV0QyxLQUFLLEVBQUUsQ0FBQztRQUxBLHFCQUFnQixHQUFo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LElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQ3ZFLENBQUM7YUFDTDtTQUNKO0lBQ0wsQ0FBQzsrR0FoZ0JRLG1CQUFtQjttR0FBbkIsbUJBQW1CLDRFQUpsQixFQUFFOzs0RkFJSCxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0ksZUFBZSxZQUNmLEVBQUUsbUJBRUssdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQmFzZU5vZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Fic3RyYWN0L2Jhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IENlbGxEYXRhTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvY2VsbC1kYXRhLm1vZGVsJztcbmltcG9ydCB7IENlbGxSZXNpemVyIH0gZnJvbSAnLi4vY2VsbC1yZXNpemVyL2NlbGwtcmVzaXplcic7XG5pbXBvcnQgeyBDZWxsUmVzaXplclBhcmFtZXRlcnNNb2RlbCB9IGZyb20gJy4uL21vZGVscy9jZWxsLXJlc2l6ZXItcGFyYW1ldGVycy5tb2RlbCc7XG5pbXBvcnQgeyBDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2NvbXBvbmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEVkaXRTZXNzaW9uIH0gZnJvbSAnLi4vLi4vLi4vZXhlY3V0aW9uL2VkaXQuc2Vzc2lvbic7XG5pbXBvcnQgeyBFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJhY3Rpb24vZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgSFJ1bGUgfSBmcm9tICcuLi9lbnVtcy9ocnVsZS5lbnVtJztcbmltcG9ydCB7IE5vZGVyVGFibGVDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPdmVybGF5U2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9vdmVybGF5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUm93RGF0YU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3Jvdy1kYXRhLm1vZGVsJztcbmltcG9ydCB7IFJvd01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yb3cubW9kZWwnO1xuaW1wb3J0IHsgU2NhbGluZ0hlbHBlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRlbnQvaGVscGVycy9zY2FsaW5nLmhlbHBlcic7XG5pbXBvcnQgeyBUYWJsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBUYWJsZVNlbGVjdGlvbiB9IGZyb20gJy4uL3NlbGVjdGlvbi90YWJsZS1zZWxlY3Rpb24nO1xuaW1wb3J0IHsgVmVydGljYWxNZXJnZSB9IGZyb20gJy4uL2VudW1zL3ZlcnRpY2FsLW1lcmdlLmVudW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1ub2QtdGFibGUnLFxuICAgIHRlbXBsYXRlOiAnJyxcbiAgICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVyVGFibGVDb21wb25lbnQgZXh0ZW5kcyBCYXNlTm9kZXJDb21wb25lbnQge1xuICAgIGdldCB0YWJsZSgpOiBUYWJsZU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudCBhcyBUYWJsZU1vZGVsO1xuICAgIH1cbiAgICBzZXQgdGFibGUodmFsOiBUYWJsZU1vZGVsKSB7XG4gICAgICAgIHRoaXMuY29udGVudCA9IHZhbDtcbiAgICB9XG5cbiAgICB0YWJsZVNlbGVjdGlvbjogVGFibGVTZWxlY3Rpb247XG5cbiAgICB0YWJsZUVsOiBIVE1MVGFibGVFbGVtZW50O1xuXG4gICAgcmVzaXplcjogQ2VsbFJlc2l6ZXI7XG5cbiAgICByZXNpemVyRWw6IEhUTUxEaXZFbGVtZW50O1xuXG4gICAgcm93TWF0cml4OiBSb3dEYXRhTW9kZWxbXSA9IFtdO1xuXG4gICAgc3BsaXRzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgcmVhZG9ubHkgbWluUm93SGVpZ2h0ID0gMTk7XG5cbiAgICByZWFkb25seSBib3JkZXJTaXplID0gMTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNvbXBvbmVudFNlcnZpY2U6IENvbXBvbmVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZWRpdG9yU2VydmljZTogRWRpdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBvdmVybGF5U2VydmljZTogT3ZlcmxheVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy50YWJsZVNlbGVjdGlvbj8uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3JlYXRlVGFibGUoKTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVQcm9wZXJ0aWVzKCk7XG4gICAgICAgIHRoaXMuY3JlYXRlUmVzaXplcigpO1xuICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5yZXNpemVyRWwpO1xuICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy50YWJsZUVsKTtcbiAgICAgICAgdGhpcy50YWJsZVNlbGVjdGlvbiA9IG5ldyBUYWJsZVNlbGVjdGlvbihcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZSxcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVNlcnZpY2UsXG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeCxcbiAgICAgICAgICAgIHRoaXMudGFibGUsXG4gICAgICAgICAgICB0aGlzLnRhYmxlRWwsXG4gICAgICAgICAgICB0aGlzLnNlc3Npb25JZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldENlbGxTZXNzaW9uKHJvdzogbnVtYmVyLCBjb2x1bW46IG51bWJlcik6IEVkaXRTZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93TWF0cml4W3Jvd10uY2VsbHNbY29sdW1uXS5jb21wb25lbnRSZWYuaW5zdGFuY2Uuc2Vzc2lvbjtcbiAgICB9XG5cbiAgICBnZXRDZWxsV2lkdGgodGFibGVSb3c6IFJvd01vZGVsLCBjZWxsSW5kZXg6IG51bWJlciwgYWJzb2x1dGVDZWxsSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGlmICh0YWJsZVJvdy5jZWxsc1tjZWxsSW5kZXhdLndpZHRoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFibGVSb3cuY2VsbHNbY2VsbEluZGV4XS53aWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB3aWR0aCA9IDA7XG4gICAgICAgIGxldCBpID0gYWJzb2x1dGVDZWxsSW5kZXg7XG4gICAgICAgIGNvbnN0IGNlbGxTcGFuQ291bnQgPSBhYnNvbHV0ZUNlbGxJbmRleCArIHRhYmxlUm93LmNlbGxzW2NlbGxJbmRleF0uaG9yaXpvbnRhbE1lcmdlO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHdpZHRoICs9IHRoaXMudGFibGUuY29sdW1uc1tpXS53aWR0aDtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfSB3aGlsZSAoaSA8IGNlbGxTcGFuQ291bnQpO1xuXG4gICAgICAgIHJldHVybiB3aWR0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFkanVzdGVkV2lkdGgodGFibGVSb3c6IFJvd01vZGVsLCBjZWxsSW5kZXg6IG51bWJlciwgYWJzb2x1dGVDZWxsSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGNlbGxXaWR0aCA9IHRoaXMuZ2V0Q2VsbFdpZHRoKHRhYmxlUm93LCBjZWxsSW5kZXgsIGFic29sdXRlQ2VsbEluZGV4KTtcblxuICAgICAgICBpZiAodGFibGVSb3cuY2VsbHNbY2VsbEluZGV4XS53aWR0aFR5cGUgPT09ICdwY3QnKSB7XG4gICAgICAgICAgICB0YWJsZVJvdy5jZWxsc1tjZWxsSW5kZXhdLndpZHRoVHlwZSA9ICdkeGEnO1xuICAgICAgICAgICAgcmV0dXJuIChjZWxsV2lkdGggKiB0aGlzLl93aWR0aCkgLyA1MDAwOyAvLyA1MDAwIGlzIGVxdWFsIHRvIDEwMCUgaW4gZG9jeCB1bml0cyBvZiBtZWFzdXJlbWVudFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFNjYWxpbmdIZWxwZXIuc2NhbGUoY2VsbFdpZHRoLCB0aGlzLmdlbmVyYWxQcm9wZXJ0aWVzLnNjYWxpbmdSYXRpbyk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVzaXplcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemVyRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5yZXNpemVyRWwuY2xhc3NOYW1lID0gJ3Jlc2l6ZXItYm9yZGVyJztcbiAgICAgICAgdGhpcy5yZXNpemVyRWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIGBkaXNwbGF5Om5vbmU7YCk7XG4gICAgICAgIHRoaXMucmVzaXplciA9IG5ldyBDZWxsUmVzaXplcih0aGlzLnRhYmxlLCB0aGlzLnRhYmxlRWwsIHRoaXMuZWRpdG9yU2VydmljZSwgdGhpcy5yZXNpemVyRWwpO1xuICAgICAgICB0aGlzLnJlc2l6ZXIuc2Vzc2lvbklkID0gdGhpcy5zZXNzaW9uSWQ7XG4gICAgfVxuXG4gICAgY3JlYXRlVGFibGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7XG4gICAgICAgIHRoaXMuc2V0Q29sZ3JvdXAoKTtcbiAgICAgICAgdGhpcy5pbnNlcnRSb3dzKHRoaXMudGFibGUucm93cy5sZW5ndGgsIDApO1xuICAgICAgICB0aGlzLmZpbGxUYWJsZUNlbGxzKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlVGFibGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNlbGxSZWZzID0gbmV3IFNldCh0aGlzLnJvd01hdHJpeC5mbGF0TWFwKHJvdyA9PiByb3cuY2VsbHMpLm1hcChjZWxsID0+IGNlbGwuY29tcG9uZW50UmVmKSk7XG4gICAgICAgIGNlbGxSZWZzLmZvckVhY2goY2VsbFJlZiA9PiB0aGlzLmNvbXBvbmVudFNlcnZpY2UucmVtb3ZlQ29tcG9uZW50KGNlbGxSZWYpKTtcbiAgICAgICAgdGhpcy50YWJsZVNlbGVjdGlvbi5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMucm93TWF0cml4ID0gW107XG4gICAgICAgIHRoaXMudGFibGVFbC5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0Um93cyhyb3dzQ291bnQ6IG51bWJlciwgdGFyZ2V0SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl93aWR0aCA9IHRoaXMuZ2V0VGFibGVXaWR0aCgpO1xuICAgICAgICBsZXQgcm93SW5kZXggPSAwO1xuXG4gICAgICAgIHdoaWxlIChyb3dJbmRleCA8IHJvd3NDb3VudCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0Um93SW5kZXggPSB0YXJnZXRJbmRleCArIHJvd0luZGV4O1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy50YWJsZUVsLmluc2VydFJvdyh0YXJnZXRSb3dJbmRleCk7XG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeC5zcGxpY2UodGFyZ2V0Um93SW5kZXgsIDAsIG5ldyBSb3dEYXRhTW9kZWwocm93LCAwLCBbXSkpO1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRDZWxscyh0YXJnZXRSb3dJbmRleCwgdGhpcy50YWJsZS5yb3dzW3RhcmdldFJvd0luZGV4XS5jZWxscy5sZW5ndGgsIDApO1xuICAgICAgICAgICAgcm93SW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlsbFRhYmxlUm93KCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0Q2VsbHMocm93SW5kZXg6IG51bWJlciwgY2VsbHNDb3VudDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGxldCBtb2RlbFRhcmdldEluZGV4ID0gdGhpcy5nZXRNb2RlbFRhcmdldEluZGV4KHJvd0luZGV4LCB0YXJnZXRJbmRleCk7XG4gICAgICAgIHRoaXMuYWRkQ2VsbHMocm93SW5kZXgsIGNlbGxzQ291bnQsIHRhcmdldEluZGV4LCBtb2RlbFRhcmdldEluZGV4KTtcbiAgICB9XG5cbiAgICBnZXRNb2RlbFRhcmdldEluZGV4KHJvd0luZGV4OiBudW1iZXIsIHRhcmdldEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgYWJzb2x1dGVNb2RlbENlbGxDb3VudCA9IDA7XG4gICAgICAgIGxldCBtb2RlbFRhcmdldEluZGV4ID0gMDtcblxuICAgICAgICB3aGlsZSAoYWJzb2x1dGVNb2RlbENlbGxDb3VudCA8IHRhcmdldEluZGV4KSB7XG4gICAgICAgICAgICBhYnNvbHV0ZU1vZGVsQ2VsbENvdW50ICs9IHRoaXMudGFibGUucm93c1tyb3dJbmRleF0uY2VsbHNbbW9kZWxUYXJnZXRJbmRleF0uaG9yaXpvbnRhbE1lcmdlID8/IDE7XG5cbiAgICAgICAgICAgIGlmIChhYnNvbHV0ZU1vZGVsQ2VsbENvdW50ID4gdGFyZ2V0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbW9kZWxUYXJnZXRJbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1vZGVsVGFyZ2V0SW5kZXg7XG4gICAgfVxuXG4gICAgYWRkQ2VsbHMocm93SW5kZXg6IG51bWJlciwgY2VsbHNDb3VudDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyLCBtb2RlbFRhcmdldEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBsZXQgY3VycmVudFRhcmdldEluZGV4ID0gdGFyZ2V0SW5kZXg7XG5cbiAgICAgICAgd2hpbGUgKGkgPCBjZWxsc0NvdW50KSB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbENlbGxJbmRleCA9IG1vZGVsVGFyZ2V0SW5kZXggKyBpO1xuXG4gICAgICAgICAgICBpZiAoKHRoaXMudGFibGUucm93c1tyb3dJbmRleF0uY2VsbHNbbW9kZWxDZWxsSW5kZXhdLnZlcnRpY2FsTWVyZ2UgYXMgVmVydGljYWxNZXJnZSkgPT09IFZlcnRpY2FsTWVyZ2UuTWVyZ2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmhlcml0Q2VsbERhdGEgPSB0aGlzLnJvd01hdHJpeFtyb3dJbmRleCAtIDFdLmNlbGxzW2N1cnJlbnRUYXJnZXRJbmRleF07XG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLnRhYmxlLnJvd3Nbcm93SW5kZXhdLmNlbGxzW21vZGVsQ2VsbEluZGV4XS5ob3Jpem9udGFsTWVyZ2UgPz8gMTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEFkZGl0aW9uYWxDZWxscyhyb3dJbmRleCwgY3VycmVudFRhcmdldEluZGV4LCBjb3VudCwgaW5oZXJpdENlbGxEYXRhKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0SW5kZXggKz0gY291bnQ7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjZWxsID0gdGhpcy50YWJsZUVsLnJvd3Nbcm93SW5kZXhdLmluc2VydENlbGwoY3VycmVudFRhcmdldEluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29tcG9uZW50U2VydmljZS5nZW5lcmF0ZUFuZEF0dGFjaENvbXBvbmVudChjZWxsLCBOb2RlclRhYmxlQ2VsbENvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgIHRhYmxlOiB0aGlzLnRhYmxlLFxuICAgICAgICAgICAgICAgIGNlbGw6IHRoaXMudGFibGUucm93c1tyb3dJbmRleF0uY2VsbHNbbW9kZWxDZWxsSW5kZXhdLFxuICAgICAgICAgICAgICAgIHBhcmVudFNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgY2VsbEluZGV4OiBtb2RlbENlbGxJbmRleCxcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleDogY3VycmVudFRhcmdldEluZGV4LFxuICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLmdldEFkanVzdGVkV2lkdGgodGhpcy50YWJsZS5yb3dzW3Jvd0luZGV4XSwgbW9kZWxDZWxsSW5kZXgsIGN1cnJlbnRUYXJnZXRJbmRleCksXG4gICAgICAgICAgICAgICAgZ2VuZXJhbFByb3BlcnRpZXM6IHRoaXMuZ2VuZXJhbFByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgaGVpZ2h0Q2hhbmdlZDogdGhpcy5jZWxsSGVpZ2h0Q2hhbmdlZCxcbiAgICAgICAgICAgICAgICBzdGFydFJlc2l6aW5nOiB0aGlzLnN0YXJ0UmVzaXppbmdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgY2VsbENvbnRlbnRIZWlnaHQgPSBjb21wb25lbnRSZWYuaW5zdGFuY2UuZ2V0Q2VsbENvbnRlbnRIZWlnaHQoKTtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxEYXRhID0gbmV3IENlbGxEYXRhTW9kZWwoY2VsbCwgY2VsbENvbnRlbnRIZWlnaHQsIGNvbXBvbmVudFJlZik7XG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uY2VsbHMuc3BsaWNlKGN1cnJlbnRUYXJnZXRJbmRleCwgMCwgY2VsbERhdGEpO1xuICAgICAgICAgICAgY3VycmVudFRhcmdldEluZGV4Kys7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRhYmxlLnJvd3Nbcm93SW5kZXhdLmNlbGxzW21vZGVsQ2VsbEluZGV4XS5ob3Jpem9udGFsTWVyZ2UgPiAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLnRhYmxlLnJvd3Nbcm93SW5kZXhdLmNlbGxzW21vZGVsQ2VsbEluZGV4XS5ob3Jpem9udGFsTWVyZ2UgLSAxO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkQWRkaXRpb25hbENlbGxzKHJvd0luZGV4LCBjdXJyZW50VGFyZ2V0SW5kZXgsIGNvdW50LCBjZWxsRGF0YSk7XG4gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldEluZGV4ICs9IGNvdW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRBZGRpdGlvbmFsQ2VsbHMocm93SW5kZXg6IG51bWJlciwgY2VsbEluZGV4OiBudW1iZXIsIGNlbGxzQ291bnQ6IG51bWJlciwgb3JpZ2luYWxDZWxsRGF0YTogQ2VsbERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNlbGxzQ291bnQ7IGorKykge1xuICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbENlbGwgPSB0aGlzLnRhYmxlRWwucm93c1tyb3dJbmRleF0uaW5zZXJ0Q2VsbChjZWxsSW5kZXgpO1xuICAgICAgICAgICAgYWRkaXRpb25hbENlbGwuY2xhc3NMaXN0LmFkZCgnaGlkZGVuLWNlbGwnKTtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxEYXRhID0gbmV3IENlbGxEYXRhTW9kZWwob3JpZ2luYWxDZWxsRGF0YS5jZWxsLCBvcmlnaW5hbENlbGxEYXRhLmNlbGxDb250ZW50SGVpZ2h0LCBvcmlnaW5hbENlbGxEYXRhLmNvbXBvbmVudFJlZik7XG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uY2VsbHMuc3BsaWNlKGNlbGxJbmRleCwgMCwgY2VsbERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0Q29sZ3JvdXAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9sZENvbEdyb3VwcyA9IHRoaXMudGFibGVFbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29sZ3JvdXAnKTtcblxuICAgICAgICBpZiAob2xkQ29sR3JvdXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy50YWJsZUVsLnJlbW92ZUNoaWxkKG9sZENvbEdyb3Vwc1swXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb2xncm91cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NvbGdyb3VwJyk7XG4gICAgICAgIGxldCBpID0gMDtcblxuICAgICAgICB3aGlsZSAoaSA8IHRoaXMudGFibGUuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NvbCcpO1xuICAgICAgICAgICAgY29uc3Qgc2NhbGVkV2lkdGggPSBTY2FsaW5nSGVscGVyLnNjYWxlKHRoaXMudGFibGUuY29sdW1uc1tpXS53aWR0aCwgdGhpcy5nZW5lcmFsUHJvcGVydGllcy5zY2FsaW5nUmF0aW8pO1xuICAgICAgICAgICAgY29sLnN0eWxlLndpZHRoID0gYCR7c2NhbGVkV2lkdGh9cHhgO1xuICAgICAgICAgICAgY29sZ3JvdXAuYXBwZW5kQ2hpbGQoY29sKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGFibGVFbC5pbnNlcnRBZGphY2VudEVsZW1lbnQoJ2FmdGVyYmVnaW4nLCBjb2xncm91cCk7XG4gICAgfVxuXG4gICAgZmlsbFRhYmxlUm93KCk6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudGFibGUucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLnRhYmxlLnJvd3NbaV0uaFJ1bGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEhSdWxlLkF0TGVhc3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93SGVpZ2h0ID0gdGhpcy5nZXRSb3dIZWlnaHQoaSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVFbC5yb3dzW2ldLnN0eWxlLm1pbkhlaWdodCA9IGAke3RoaXMudGFibGUucm93c1tpXS5oZWlnaHR9cHhgO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRWwucm93c1tpXS5zdHlsZS5oZWlnaHQgPSBgJHtyb3dIZWlnaHR9cHhgO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtpXS5oZWlnaHQgPSByb3dIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEhSdWxlLkV4YWN0OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRWwucm93c1tpXS5zdHlsZS5oZWlnaHQgPSBgJHt0aGlzLnRhYmxlLnJvd3NbaV0uaGVpZ2h0fXB4YDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbaV0uaGVpZ2h0ID0gdGhpcy50YWJsZS5yb3dzW2ldLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dIZWlnaHQgPSB0aGlzLmdldFJvd0hlaWdodChpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluUm93SGVpZ2h0ID0gdGhpcy50YWJsZS5yb3dzW2ldLmhlaWdodCA/PyB0aGlzLm1pblJvd0hlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0SGVpZ2h0ID0gbWluUm93SGVpZ2h0ID4gcm93SGVpZ2h0ID8gbWluUm93SGVpZ2h0IDogcm93SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRWwucm93c1tpXS5zdHlsZS5oZWlnaHQgPSBgJHtyZXN1bHRIZWlnaHR9cHhgO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtpXS5oZWlnaHQgPSByZXN1bHRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFJvd0hlaWdodChyb3dJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgY2VsbEhlaWdodHMgPSB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uY2VsbHMubWFwKCh4LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKCh4LmNvbXBvbmVudFJlZi5pbnN0YW5jZS5jZWxsLnZlcnRpY2FsTWVyZ2UgYXMgVmVydGljYWxNZXJnZSkgPT09IFZlcnRpY2FsTWVyZ2UuUmVzdGFydCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTGFzdFZlcnRpY2FsTWVyZ2VkQ2VsbCA9IHguY2VsbCAhPT0gdGhpcy5yb3dNYXRyaXhbcm93SW5kZXggKyAxXT8uY2VsbHNbaW5kZXhdLmNlbGw7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNMYXN0VmVydGljYWxNZXJnZWRDZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gcm93SW5kZXggLSAxO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudEhlaWdodCA9IHguY2VsbENvbnRlbnRIZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHguY2VsbCA9PT0gdGhpcy5yb3dNYXRyaXhbaV0/LmNlbGxzW2luZGV4XS5jZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50SGVpZ2h0IC09IHRoaXMucm93TWF0cml4W2ldLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geC5jZWxsQ29udGVudEhlaWdodDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KC4uLmNlbGxIZWlnaHRzKTtcbiAgICB9XG5cbiAgICBmaWxsVGFibGVDZWxscygpOiB2b2lkIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd01hdHJpeC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLnJvd01hdHJpeFtpXS5jZWxscy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbaSAtIDFdPy5jZWxsc1tqXT8uY2VsbCA9PT0gdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbal0uY2VsbCB8fFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tqXS5jZWxsID09PSB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tqIC0gMV0/LmNlbGwgfHxcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMucm93TWF0cml4W2ldLmNlbGxzW2pdLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5jZWxsLnZlcnRpY2FsTWVyZ2UgYXMgVmVydGljYWxNZXJnZSkgPT09IFZlcnRpY2FsTWVyZ2UuTWVyZ2VcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbal0uY2VsbC5jb2xTcGFuID0gdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbal0uY29tcG9uZW50UmVmLmluc3RhbmNlLmNlbGwuaG9yaXpvbnRhbE1lcmdlO1xuICAgICAgICAgICAgICAgIHRoaXMucm93TWF0cml4W2ldLmNlbGxzW2pdLmNlbGwuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbal0uY29tcG9uZW50UmVmLmluc3RhbmNlLmNlbGwuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q2VsbFJvd1NwYW4oaSwgaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRDZWxsUm93U3Bhbihyb3dJbmRleDogbnVtYmVyLCBhYnNvbHV0ZUNlbGxJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5jZWxsc1thYnNvbHV0ZUNlbGxJbmRleF0uY2VsbC5yb3dTcGFuID0gMTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAodGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLmNlbGxzW2Fic29sdXRlQ2VsbEluZGV4XS5jb21wb25lbnRSZWYuaW5zdGFuY2UuY2VsbC52ZXJ0aWNhbE1lcmdlIGFzIFZlcnRpY2FsTWVyZ2UpICE9PVxuICAgICAgICAgICAgVmVydGljYWxNZXJnZS5SZXN0YXJ0XG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IHJvd0luZGV4ICsgMTsgaSA8IHRoaXMucm93TWF0cml4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbYWJzb2x1dGVDZWxsSW5kZXhdLmNlbGwgPT09IHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5jZWxsc1thYnNvbHV0ZUNlbGxJbmRleF0uY2VsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5jZWxsc1thYnNvbHV0ZUNlbGxJbmRleF0uY2VsbC5yb3dTcGFuKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0VGFibGVIZWlnaHQoKTogdm9pZCB7XG4gICAgICAgIGxldCBib3JkZXJzSGVpZ2h0ID0gMDtcbiAgICAgICAgbGV0IHJvd3NIZWlnaHQgPSAxO1xuXG4gICAgICAgIGZvciAobGV0IHJvdyBvZiB0aGlzLnJvd01hdHJpeCkge1xuICAgICAgICAgICAgcm93c0hlaWdodCArPSByb3cuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAocm93LmNlbGxzLnNvbWUoeCA9PiAheC5jb21wb25lbnRSZWYuaW5zdGFuY2UuY2VsbC52ZXJ0aWNhbE1lcmdlKSkge1xuICAgICAgICAgICAgICAgIGJvcmRlcnNIZWlnaHQgKz0gdGhpcy5ib3JkZXJTaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gcm93c0hlaWdodCArIGJvcmRlcnNIZWlnaHQ7XG4gICAgfVxuXG4gICAgc3RhcnRSZXNpemluZyA9IChjZWxsUmVzaXplclBhcmFtZXRlcnM6IENlbGxSZXNpemVyUGFyYW1ldGVyc01vZGVsKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IHNwbGl0Um93SW5kZXggPSB0aGlzLmdldFNwbGl0Um93SW5kZXgoY2VsbFJlc2l6ZXJQYXJhbWV0ZXJzLnJvd0luZGV4KTtcbiAgICAgICAgdGhpcy5yZXNpemVyLnJlc2l6ZXJIZWlnaHQgPSB0aGlzLmdldFJvd3NIZWlnaHRCZXR3ZWVuU3BsaXRzKHNwbGl0Um93SW5kZXgpO1xuICAgICAgICB0aGlzLnJlc2l6ZXIuc3RhcnRZID0gdGhpcy5nZXRSb3dzSGVpZ2h0QmVmb3JlKHNwbGl0Um93SW5kZXgpO1xuICAgICAgICB0aGlzLnJlc2l6ZXIuc3BsaXRSb3dJbmRleCA9IHNwbGl0Um93SW5kZXg7XG4gICAgICAgIHRoaXMucmVzaXplci50YWJsZUluc2VydEluZGV4ID0gdGhpcy5pbnNlcnRJbmRleDtcbiAgICAgICAgdGhpcy5yZXNpemVyLm9uU3RhcnRSZXNpemluZyhjZWxsUmVzaXplclBhcmFtZXRlcnMpO1xuICAgIH07XG5cbiAgICBwcm9jZXNzU3BsaXQoXG4gICAgICAgIGxlZnRTcGFjZU9uUGFnZTogbnVtYmVyLFxuICAgICAgICBzcGFjZUJldHdlZW5QYWdlc0NvbnRlbnQ6IG51bWJlcixcbiAgICAgICAgY29udGVudEhlaWdodDogbnVtYmVyXG4gICAgKTogeyBzcGxpdHNDb3VudDogbnVtYmVyOyB0YWJsZUhlaWdodDogbnVtYmVyOyBsZWZ0SGVpZ2h0OiBudW1iZXIgfSB7XG4gICAgICAgIHRoaXMucmVtb3ZlU3BsaXRzKCk7XG5cbiAgICAgICAgaWYgKGxlZnRTcGFjZU9uUGFnZSA+PSB0aGlzLmhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc3BsaXRzQ291bnQ6IDAsIHRhYmxlSGVpZ2h0OiB0aGlzLmhlaWdodCwgbGVmdEhlaWdodDogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxlZnRTcGFjZU9uUGFnZSA8IHRoaXMucm93TWF0cml4WzBdLmhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc3BsaXRzQ291bnQ6IDEsIHRhYmxlSGVpZ2h0OiB0aGlzLmhlaWdodCwgbGVmdEhlaWdodDogdGhpcy5oZWlnaHQgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnNwbGl0VGFibGUobGVmdFNwYWNlT25QYWdlLCBzcGFjZUJldHdlZW5QYWdlc0NvbnRlbnQsIGNvbnRlbnRIZWlnaHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3BsaXRUYWJsZShcbiAgICAgICAgbGVmdFNwYWNlT25QYWdlOiBudW1iZXIsXG4gICAgICAgIHNwYWNlQmV0d2VlblBhZ2VzQ29udGVudDogbnVtYmVyLFxuICAgICAgICBjb250ZW50SGVpZ2h0OiBudW1iZXJcbiAgICApOiB7IHNwbGl0c0NvdW50OiBudW1iZXI7IHRhYmxlSGVpZ2h0OiBudW1iZXI7IGxlZnRIZWlnaHQ6IG51bWJlciB9IHtcbiAgICAgICAgbGV0IGxlZnRIZWlnaHQgPSAwLFxuICAgICAgICAgICAgdGFibGVIZWlnaHRXaXRoU3BsaXRzID0gdGhpcy5oZWlnaHQsXG4gICAgICAgICAgICByb3dJbmRleCA9IDA7XG4gICAgICAgIHdoaWxlIChyb3dJbmRleCA8IHRoaXMucm93TWF0cml4Lmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IHsgaW5kZXgsIHJvd3NIZWlnaHQgfSA9IHRoaXMuZ2V0Um93SW5kZXhCeUhlaWdodChyb3dJbmRleCwgbGVmdFNwYWNlT25QYWdlKTtcbiAgICAgICAgICAgIHJvd0luZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMucm93TWF0cml4Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZWZ0SGVpZ2h0ID0gdGhpcy5yb3dNYXRyaXhcbiAgICAgICAgICAgICAgICAuc2xpY2UoaW5kZXgpXG4gICAgICAgICAgICAgICAgLm1hcCh4ID0+IHguaGVpZ2h0KVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKHBhcnRpYWxTdW0sIGN1cnIpID0+IHBhcnRpYWxTdW0gKyBjdXJyICsgdGhpcy5ib3JkZXJTaXplKTtcblxuICAgICAgICAgICAgY29uc3Qgc3BsaXRSb3dIZWlnaHQgPSBzcGFjZUJldHdlZW5QYWdlc0NvbnRlbnQgKyBsZWZ0U3BhY2VPblBhZ2UgLSByb3dzSGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVTcGxpdFJvdyhpbmRleCArIHRoaXMuc3BsaXRzLmxlbmd0aCwgc3BsaXRSb3dIZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5zcGxpdHMucHVzaChpbmRleCArIHRoaXMuc3BsaXRzLmxlbmd0aCk7XG4gICAgICAgICAgICB0YWJsZUhlaWdodFdpdGhTcGxpdHMgKz0gc3BsaXRSb3dIZWlnaHQ7XG4gICAgICAgICAgICBsZWZ0U3BhY2VPblBhZ2UgPSBjb250ZW50SGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNwbGl0c0NvdW50OiB0aGlzLnNwbGl0cy5sZW5ndGgsXG4gICAgICAgICAgICB0YWJsZUhlaWdodDogdGFibGVIZWlnaHRXaXRoU3BsaXRzLFxuICAgICAgICAgICAgbGVmdEhlaWdodFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Um93SW5kZXhCeUhlaWdodChzdGFydEluZGV4OiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogeyBpbmRleDogbnVtYmVyOyByb3dzSGVpZ2h0OiBudW1iZXIgfSB7XG4gICAgICAgIGlmIChzdGFydEluZGV4ID49IHRoaXMucm93TWF0cml4Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgaW5kZXg6IHRoaXMucm93TWF0cml4Lmxlbmd0aCwgcm93c0hlaWdodDogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRhYmxlSGVpZ2h0ID0gdGhpcy5yb3dNYXRyaXhbc3RhcnRJbmRleF0uaGVpZ2h0ICsgdGhpcy5ib3JkZXJTaXplLFxuICAgICAgICAgICAgaSA9IHN0YXJ0SW5kZXg7XG5cbiAgICAgICAgd2hpbGUgKHRhYmxlSGVpZ2h0IDwgaGVpZ2h0KSB7XG4gICAgICAgICAgICB0YWJsZUhlaWdodCArPSB0aGlzLnJvd01hdHJpeFtpICsgMV0/LmhlaWdodCArIHRoaXMuYm9yZGVyU2l6ZTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGluZGV4OiBpLCByb3dzSGVpZ2h0OiB0YWJsZUhlaWdodCAtIHRoaXMucm93TWF0cml4W2ldPy5oZWlnaHQgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVNwbGl0Um93KGluZGV4OiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVFbC5pbnNlcnRSb3coaW5kZXgpO1xuICAgICAgICB0aGlzLnRhYmxlRWwucm93c1tpbmRleF0uc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICAgICAgdGhpcy50YWJsZUVsLnJvd3NbaW5kZXhdLmNsYXNzTGlzdC5hZGQoJ3NwbGl0LXJvdycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlU3BsaXRzKCkge1xuICAgICAgICB0aGlzLnNwbGl0cyA9IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy50YWJsZUVsLnF1ZXJ5U2VsZWN0b3IoJy5zcGxpdC1yb3cnKSkge1xuICAgICAgICAgICAgY29uc3QgZWwgPSB0aGlzLnRhYmxlRWwucXVlcnlTZWxlY3RvcignLnNwbGl0LXJvdycpO1xuICAgICAgICAgICAgZWwucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2FsY3VsYXRlUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhYmxlRWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0VGFibGVIZWlnaHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRhYmxlV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGUuY29sdW1ucy5yZWR1Y2UoKHByZXYsIG5leHQpID0+IHByZXYgKyBuZXh0LndpZHRoICsgdGhpcy5ib3JkZXJTaXplLCAxKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNlbGxIZWlnaHRDaGFuZ2VkID0gKHJvd0luZGV4OiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCB0YWJsZVJvdyA9IHRoaXMudGFibGUucm93c1tyb3dJbmRleF07XG4gICAgICAgIHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5jZWxsc1tjZWxsSW5kZXhdLmNlbGxDb250ZW50SGVpZ2h0ID0gaGVpZ2h0IDwgdGhpcy5taW5Sb3dIZWlnaHQgPyB0aGlzLm1pblJvd0hlaWdodCA6IGhlaWdodDtcblxuICAgICAgICBpZiAodGFibGVSb3cuaFJ1bGUgPT09IEhSdWxlLkV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3dJbmRleFdpdGhTcGxpdCA9IHRoaXMuZ2V0SW5kZXhJbmNsdWRpbmdTcGxpdFJvd3ModGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLnJvdyk7XG5cbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy50YWJsZUVsLnJvd3Nbcm93SW5kZXhXaXRoU3BsaXRdO1xuICAgICAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gcm93Lm9mZnNldEhlaWdodDtcbiAgICAgICAgY29uc3QgY2VsbEhlaWdodHMgPSB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uY2VsbHMubWFwKHggPT4geC5jZWxsQ29udGVudEhlaWdodCk7XG4gICAgICAgIGNvbnN0IG1heENlbGxDb250ZW50SGVpZ2ggPSBNYXRoLm1heCguLi5jZWxsSGVpZ2h0cywgaGVpZ2h0KTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBtYXhDZWxsQ29udGVudEhlaWdoID4gY3VycmVudEhlaWdodCB8fFxuICAgICAgICAgICAgKG1heENlbGxDb250ZW50SGVpZ2ggPCBjdXJyZW50SGVpZ2h0ICYmICghdGFibGVSb3cuaGVpZ2h0IHx8IHRhYmxlUm93LmhlaWdodCA8PSBtYXhDZWxsQ29udGVudEhlaWdoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByb3cuc3R5bGUuaGVpZ2h0ID0gYCR7bWF4Q2VsbENvbnRlbnRIZWlnaH1weGA7XG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uaGVpZ2h0ID0gbWF4Q2VsbENvbnRlbnRIZWlnaDtcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVIZWlnaHQoKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5jaGFuZ2VkVGFibGVTaXplKHRoaXMuaW5zZXJ0SW5kZXgsIHRoaXMuc2Vzc2lvbklkKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIGdldFNwbGl0Um93SW5kZXgocm93SW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRJbmRleEluY2x1ZGluZ1NwbGl0Um93cyh0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0ucm93KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEluZGV4SW5jbHVkaW5nU3BsaXRSb3dzKHJvdzogSFRNTFRhYmxlUm93RWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMudGFibGVFbC5yb3dzKS5pbmRleE9mKHJvdyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSb3dzSGVpZ2h0QmVmb3JlKHJvd0luZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5zcGxpdHMpIHtcbiAgICAgICAgICAgIGlmIChyb3dJbmRleCA8IGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5kZXggPSBlbGVtZW50ICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFJvd3NIZWlnaHQoMCwgaW5kZXgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Um93c0hlaWdodEJldHdlZW5TcGxpdHMocm93SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGxldCBzdGFydEluZGV4ID0gMDtcbiAgICAgICAgbGV0IGVuZEluZGV4ID0gdGhpcy50YWJsZUVsLnJvd3MubGVuZ3RoO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5zcGxpdHMpIHtcbiAgICAgICAgICAgIGlmIChyb3dJbmRleCA8IGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBlbmRJbmRleCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBlbGVtZW50ICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFJvd3NIZWlnaHQoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Um93c0hlaWdodChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICAgICAgc3VtICs9IHRoaXMudGFibGVFbC5yb3dzW2ldLm9mZnNldEhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdW07XG4gICAgfVxuXG4gICAgdXBkYXRlQ2VsbHMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLnJvd01hdHJpeC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGNvbHMgPSByb3dzID4gMCA/IHRoaXMucm93TWF0cml4WzBdLmNlbGxzLmxlbmd0aCA6IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHM7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tqXTtcbiAgICAgICAgICAgICAgICBjZWxsLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5zZXNzaW9uLmRpc3BsYXlEYXRhLnVwZGF0ZU5leHRMaW5lSW5kZXhlcyhcbiAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgY2VsbC5jb21wb25lbnRSZWYuaW5zdGFuY2Uuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -10,9 +10,8 @@ export class CellDataModel {
10
10
  removeHighlightCell() {
11
11
  this.componentRef.instance.isHighlighted = false;
12
12
  }
13
- clearSelection() {
14
- this.componentRef.instance.clearSelection();
15
- this.componentRef.instance.renderer.cursorLayer.hideCursor();
13
+ disableEditorSelection() {
14
+ this.componentRef.instance.disableEditorSelection();
16
15
  }
17
16
  }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1kYXRhLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2NvbXBvbmVudHMvdGFibGUvbW9kZWxzL2NlbGwtZGF0YS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLE9BQU8sYUFBYTtJQUN0QixZQUNXLElBQTBCLEVBQzFCLGlCQUF5QixFQUN6QixZQUFtRDtRQUZuRCxTQUFJLEdBQUosSUFBSSxDQUFzQjtRQUMxQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQVE7UUFDekIsaUJBQVksR0FBWixZQUFZLENBQXVDO0lBQzNELENBQUM7SUFFRyxhQUFhO1FBQ2hCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDcEQsQ0FBQztJQUVNLG1CQUFtQjtRQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQ3JELENBQUM7SUFFTSxjQUFjO1FBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDakUsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE5vZGVyVGFibGVDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy90YWJsZS1jZWxsLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjbGFzcyBDZWxsRGF0YU1vZGVsIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBjZWxsOiBIVE1MVGFibGVDZWxsRWxlbWVudCxcbiAgICAgICAgcHVibGljIGNlbGxDb250ZW50SGVpZ2h0OiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxOb2RlclRhYmxlQ2VsbENvbXBvbmVudD5cbiAgICApIHt9XG5cbiAgICBwdWJsaWMgaGlnaGxpZ2h0Q2VsbCgpIHtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuaXNIaWdobGlnaHRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUhpZ2hsaWdodENlbGwoKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmlzSGlnaGxpZ2h0ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJTZWxlY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnJlbmRlcmVyLmN1cnNvckxheWVyLmhpZGVDdXJzb3IoKTtcbiAgICB9XG59XG4iXX0=
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1kYXRhLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2NvbXBvbmVudHMvdGFibGUvbW9kZWxzL2NlbGwtZGF0YS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLE9BQU8sYUFBYTtJQUN0QixZQUNXLElBQTBCLEVBQzFCLGlCQUF5QixFQUN6QixZQUFtRDtRQUZuRCxTQUFJLEdBQUosSUFBSSxDQUFzQjtRQUMxQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQVE7UUFDekIsaUJBQVksR0FBWixZQUFZLENBQXVDO0lBQzNELENBQUM7SUFFRyxhQUFhO1FBQ2hCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDcEQsQ0FBQztJQUVNLG1CQUFtQjtRQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQ3JELENBQUM7SUFFTSxzQkFBc0I7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTm9kZXJUYWJsZUNlbGxDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3RhYmxlLWNlbGwuY29tcG9uZW50JztcblxuZXhwb3J0IGNsYXNzIENlbGxEYXRhTW9kZWwge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGNlbGw6IEhUTUxUYWJsZUNlbGxFbGVtZW50LFxuICAgICAgICBwdWJsaWMgY2VsbENvbnRlbnRIZWlnaHQ6IG51bWJlcixcbiAgICAgICAgcHVibGljIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPE5vZGVyVGFibGVDZWxsQ29tcG9uZW50PlxuICAgICkge31cblxuICAgIHB1YmxpYyBoaWdobGlnaHRDZWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5pc0hpZ2hsaWdodGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSGlnaGxpZ2h0Q2VsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuaXNIaWdobGlnaHRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNhYmxlRWRpdG9yU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5kaXNhYmxlRWRpdG9yU2VsZWN0aW9uKCk7XG4gICAgfVxufVxuIl19
@@ -11,6 +11,7 @@ export class TableSelection {
11
11
  this.tableEl = tableEl;
12
12
  this.sessionId = sessionId;
13
13
  this.editorTagName = 'APP-NOD-EDITOR';
14
+ this.tableTagName = 'APP-NOD-TABLE';
14
15
  this.cellTagName = 'TD';
15
16
  this.draggableCellContent = ['APP-NOD-RESIZER'];
16
17
  this.addTableContextMenuSubscriptions();
@@ -60,8 +61,8 @@ export class TableSelection {
60
61
  this.removeMouseSubscriptions();
61
62
  this.clearSelectionInAllCells();
62
63
  this.addDocumentMouseMovementSubscriptions();
63
- const originSelectedCell = this.getCellIndexes(event.target);
64
- this.originSelectedCell = { ...originSelectedCell, isFocused: true };
64
+ const cell = this.getCellIndexes(event.target);
65
+ this.originSelectedCell = { ...cell, isFocused: true };
65
66
  });
66
67
  }
67
68
  addDocumentMouseMovementSubscriptions() {
@@ -99,7 +100,7 @@ export class TableSelection {
99
100
  }
100
101
  processMouseMove(event) {
101
102
  if (this.originSelectedCell?.isFocused && !this.isOriginCell(event)) {
102
- this.rowMatrix[this.originSelectedCell.rowIndex].cells[this.originSelectedCell.cellIndex].clearSelection();
103
+ this.rowMatrix[this.originSelectedCell.rowIndex].cells[this.originSelectedCell.cellIndex].disableEditorSelection();
103
104
  this.editorService.endMousePress();
104
105
  this.originSelectedCell.isFocused = false;
105
106
  }
@@ -209,6 +210,12 @@ export class TableSelection {
209
210
  };
210
211
  this.selectionRange = new SelectionRangeModel(rowIndexes, cellIndexes);
211
212
  }
213
+ clearSelection() {
214
+ if (!this.selectionRange) {
215
+ return;
216
+ }
217
+ this.clearSelectionInAllCells();
218
+ }
212
219
  clearSelectionInAllCells() {
213
220
  this.rowMatrix.forEach(row => {
214
221
  row.cells.forEach(cell => {
@@ -254,7 +261,10 @@ export class TableSelection {
254
261
  if (this.draggableCellContent.includes(currentElement.tagName)) {
255
262
  break;
256
263
  }
257
- canStartSelection = currentElement.tagName === this.cellTagName;
264
+ if (currentElement.tagName === this.tableTagName) {
265
+ canStartSelection = this.sessionId === +currentElement.getAttribute('data-session-id');
266
+ break;
267
+ }
258
268
  currentElement = currentElement.parentElement;
259
269
  }
260
270
  return canStartSelection;
@@ -363,4 +373,4 @@ export class TableSelection {
363
373
  return index;
364
374
  }
365
375
  }
366
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2NvbXBvbmVudHMvdGFibGUvc2VsZWN0aW9uL3RhYmxlLXNlbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFnQixZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBR3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRW5GLE1BQU0sT0FBTyxjQUFjO0lBcUJ2QixZQUNZLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFNBQXlCLEVBQ3pCLEtBQWlCLEVBQ2pCLE9BQXlCLEVBQ3pCLFNBQWlCO1FBTGpCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixjQUFTLEdBQVQsU0FBUyxDQUFnQjtRQUN6QixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQ3pCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFacEIsa0JBQWEsR0FBRyxnQkFBZ0IsQ0FBQztRQUVqQyxnQkFBVyxHQUFHLElBQUksQ0FBQztRQUVuQix5QkFBb0IsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFVaEQsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUU7WUFDckMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcs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O29CQUM1QyxTQUFTLEVBQUUsQ0FBQztpQkFDZixRQUFRLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7YUFDekQ7U0FDSjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZyb21FdmVudCwgU3Vic2NyaXB0aW9uLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQ2VsbERhdGFNb2RlbCB9IGZyb20gJy4uL21vZGVscy9jZWxsLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgRWRpdG9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2ludGVyYWN0aW9uL2VkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IE1vdXNlQnV0dG9uIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJhY3Rpb24vbW91c2UtYnV0dG9uLmVudW0nO1xuaW1wb3J0IHsgT3ZlcmxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvb3ZlcmxheS5zZXJ2aWNlJztcbmltcG9ydCB7IFJvd0RhdGFNb2RlbCB9IGZyb20gJy4uL21vZGVscy9yb3ctZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBTZWxlY3Rpb25SYW5nZU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NlbGVjdGlvbi1yYW5nZS5tb2RlbCc7XG5pbXBvcnQgeyBUYWJsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBUYWJsZU92ZXJsYXlNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vb3ZlcmxheS1tZW51L292ZXJsYXktbWVudS5jb21wb25lbnQnO1xuXG5leHBvcnQgY2xhc3MgVGFibGVTZWxlY3Rpb24ge1xuICAgIG9yaWdpblNlbGVjdGVkQ2VsbDogeyByb3dJbmRleDogbnVtYmVyOyBjZWxsSW5kZXg6IG51bWJlcjsgaXNGb2N1c2VkOiBib29sZWFuIH07XG5cbiAgICB0YWJsZUNvbnRleHRNZW51JDogU3Vic2NyaXB0aW9uO1xuXG4gICAgdGFibGVNb3VzZURvd24kOiBTdWJzY3JpcHRpb247XG5cbiAgICBkb2N1bWVudE1vdXNlRG93biQ6IFN1YnNjcmlwdGlvbjtcblxuICAgIGRvY3VtZW50TW91c2VNb3ZlJDogU3Vic2NyaXB0aW9uO1xuXG4gICAgZG9jdW1lbnRNb3VzZVVwJDogU3Vic2NyaXB0aW9uO1xuXG4gICAgc2VsZWN0aW9uUmFuZ2U6IFNlbGVjdGlvblJhbmdlTW9kZWwgfCBudWxsO1xuXG4gICAgcmVhZG9ubHkgZWRpdG9yVGFnTmFtZSA9ICdBUFAtTk9ELUVESVRPUic7XG5cbiAgICByZWFkb25seSBjZWxsVGFnTmFtZSA9ICdURCc7XG5cbiAgICByZWFkb25seSBkcmFnZ2FibGVDZWxsQ29udGVudCA9IFsnQVBQLU5PRC1SRVNJWkVSJ107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBlZGl0b3JTZXJ2aWNlOiBFZGl0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG92ZXJsYXlTZXJ2aWNlOiBPdmVybGF5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByb3dNYXRyaXg6IFJvd0RhdGFNb2RlbFtdLFxuICAgICAgICBwcml2YXRlIHRhYmxlOiBUYWJsZU1vZGVsLFxuICAgICAgICBwcml2YXRlIHRhYmxlRWw6IEhUTUxUYWJsZUVsZW1lbnQsXG4gICAgICAgIHByaXZhdGUgc2Vzc2lvbklkOiBudW1iZXJcbiAgICApIHtcbiAgICAgICAgdGhpcy5hZGRUYWJsZUNvbnRleHRNZW51U3Vic2NyaXB0aW9ucygpO1xuICAgICAgICB0aGlzLmFkZFRhYmxlTW91c2VEb3duU3Vic2NyaXB0aW9ucygpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnRhYmxlQ29udGV4dE1lbnUkPy51bnN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy50YWJsZUNvbnRleHRNZW51JC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGFibGVNb3VzZURvd24kPy51bnN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy50YWJsZU1vdXNlRG93biQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVtb3ZlTW91c2VTdWJzY3JpcHRpb25zKCk7XG4gICAgfVxuXG4gICAgYWRkVGFibGVDb250ZXh0TWVudVN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVDb250ZXh0TWVudSQgPSBmcm9tRXZlbnQodGhpcy50YWJsZUVsLCAnY29udGV4dG1lbnUnKS5zdWJzY3JpYmUoKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JTZXJ2aWNlLmlzVmlld09ubHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvblJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZUZvck1lbnVPdmVybGF5KGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoIXNlbGVjdGlvblJhbmdlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0YXJnZXRzID0gdGhpcy5nZXRUYXJnZXRzRm9yTWVudU92ZXJsYXkoc2VsZWN0aW9uUmFuZ2UpO1xuICAgICAgICAgICAgY29uc3QgY2FuUmVtb3ZlUm93cyA9IHNlbGVjdGlvblJhbmdlLnJvd0luZGV4ZXMuZW5kSW5kZXggLSBzZWxlY3Rpb25SYW5nZS5yb3dJbmRleGVzLnN0YXJ0SW5kZXggKyAxIDwgdGhpcy5yb3dNYXRyaXgubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgY2FuUmVtb3ZlQ29sdW1ucyA9XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UuY2VsbEluZGV4ZXMuZW5kSW5kZXggLSBzZWxlY3Rpb25SYW5nZS5jZWxsSW5kZXhlcy5zdGFydEluZGV4ICsgMSA8IHRoaXMucm93TWF0cml4WzBdLmNlbGxzLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UsXG4gICAgICAgICAgICAgICAgdGFyZ2V0cyxcbiAgICAgICAgICAgICAgICBjYW5SZW1vdmVSb3dzLFxuICAgICAgICAgICAgICAgIGNhblJlbW92ZUNvbHVtbnMsXG4gICAgICAgICAgICAgICAgdGFibGVJbnNlcnRJbmRleDogdGhpcy50YWJsZS5pbnNlcnRJbmRleCxcbiAgICAgICAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5vcGVuKFRhYmxlT3ZlcmxheU1lbnVDb21wb25lbnQsIGRhdGEsIGV2ZW50LngsIGV2ZW50LnkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhZGRUYWJsZU1vdXNlRG93blN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVNb3VzZURvd24kID0gZnJvbUV2ZW50KHRoaXMudGFibGVFbCwgJ21vdXNlZG93bicpLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBldmVudC5jdHJsS2V5IHx8XG4gICAgICAgICAgICAgICAgKGV2ZW50LmJ1dHRvbiBhcyBNb3VzZUJ1dHRvbikgPT09IE1vdXNlQnV0dG9uLlJpZ2h0IHx8XG4gICAgICAgICAgICAgICAgIXRoaXMuY2FuU3RhcnRTZWxlY3Rpb24oZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZU1vdXNlU3Vic2NyaXB0aW9ucygpO1xuICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbkluQWxsQ2VsbHMoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRG9jdW1lbnRNb3VzZU1vdmVtZW50U3Vic2NyaXB0aW9ucygpO1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luU2VsZWN0ZWRDZWxsID0gdGhpcy5nZXRDZWxsSW5kZXhlcyhldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5TZWxlY3RlZENlbGwgPSB7IC4uLm9yaWdpblNlbGVjdGVkQ2VsbCwgaXNGb2N1c2VkOiB0cnVlIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFkZERvY3VtZW50TW91c2VNb3ZlbWVudFN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRNb3VzZU1vdmUkID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnbW91c2Vtb3ZlJylcbiAgICAgICAgICAgIC5waXBlKHRocm90dGxlVGltZSgxMDApKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kb2N1bWVudE1vdXNlVXAkID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnbW91c2V1cCcpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZU1vdXNlU3Vic2NyaXB0aW9ucygpO1xuICAgICAgICAgICAgdGhpcy5hZGREb2N1bWVudE1vdXNlRG93blN1YnNjcmlwdGlvbnMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWRkRG9jdW1lbnRNb3VzZURvd25TdWJzY3JpcHRpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY3VtZW50TW91c2VEb3duJCA9IGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNlZG93bicpLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc09uRWRpdG9yQ2xpY2soZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KSB8fCB0aGlzLmlzT25UYWJsZUNsaWNrKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVNlcnZpY2UuY2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25JbkFsbENlbGxzKCk7XG4gICAgICAgICAgICB0aGlzLm9yaWdpblNlbGVjdGVkQ2VsbCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZU1vdXNlU3Vic2NyaXB0aW9ucygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVNb3VzZVN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50TW91c2VNb3ZlJD8udW5zdWJzY3JpYmUpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRNb3VzZU1vdmUkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kb2N1bWVudE1vdXNlVXAkPy51bnN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudE1vdXNlVXAkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kb2N1bWVudE1vdXNlRG93biQ/LnVuc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50TW91c2VEb3duJC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvY2Vzc01vdXNlTW92ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5vcmlnaW5TZWxlY3RlZENlbGw/LmlzRm9jdXNlZCAmJiAhdGhpcy5pc09yaWdpbkNlbGwoZXZlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeFt0aGlzLm9yaWdpblNlbGVjdGVkQ2VsbC5yb3dJbmRleF0uY2VsbHNbdGhpcy5vcmlnaW5TZWxlY3RlZENlbGwuY2VsbEluZGV4XS5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmVuZE1vdXNlUHJlc3MoKTtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm9yaWdpblNlbGVjdGVkQ2VsbD8uaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEFsbENlbGxzSW5CZXR3ZWVuKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdEFsbENlbGxzSW5CZXR3ZWVuKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5vcmlnaW5TZWxlY3RlZENlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbCA9IHRoaXMuZ2V0Q2VsbEluZGV4ZXMoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KSB8fCB0aGlzLmdldENlbGxJbmRleGVzT3V0c2lkZVRhYmxlKGV2ZW50KTtcblxuICAgICAgICBpZiAoIXNlbGVjdGVkQ2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbkluQWxsQ2VsbHMoKTtcblxuICAgICAgICBjb25zdCByb3dJbmRleGVzID0gdGhpcy5nZXRTdGFydEFuZEVuZEluZGV4ZXModGhpcy5vcmlnaW5TZWxlY3RlZENlbGwucm93SW5kZXgsIHNlbGVjdGVkQ2VsbC5yb3dJbmRleCk7XG4gICAgICAgIGNvbnN0IGNlbGxJbmRleGVzID0gdGhpcy5nZXRTdGFydEFuZEVuZEluZGV4ZXModGhpcy5vcmlnaW5TZWxlY3RlZENlbGwuY2VsbEluZGV4LCBzZWxlY3RlZENlbGwuY2VsbEluZGV4KTtcbiAgICAgICAgY29uc3QgY2VsbHM6IENlbGxEYXRhTW9kZWxbXSA9IFtdO1xuICAgICAgICBsZXQgY3VycmVudFJvd0luZGV4ID0gcm93SW5kZXhlcy5zdGFydEluZGV4O1xuXG4gICAgICAgIHdoaWxlIChjdXJyZW50Um93SW5kZXggPD0gcm93SW5kZXhlcy5lbmRJbmRleCkge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRDZWxsSW5kZXggPSBjZWxsSW5kZXhlcy5zdGFydEluZGV4O1xuXG4gICAgICAgICAgICB3aGlsZSAoY3VycmVudENlbGxJbmRleCA8PSBjZWxsSW5kZXhlcy5lbmRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNlbGxzLnB1c2godGhpcy5yb3dNYXRyaXhbY3VycmVudFJvd0luZGV4XS5jZWxsc1tjdXJyZW50Q2VsbEluZGV4XSk7XG4gICAgICAgICAgICAgICAgY3VycmVudENlbGxJbmRleCsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50Um93SW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaXFDZWxscyA9IG5ldyBTZXQoY2VsbHMpO1xuICAgICAgICB1bmlxQ2VsbHMuZm9yRWFjaChjZWxsID0+IGNlbGwuaGlnaGxpZ2h0Q2VsbCgpKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZSA9IG5ldyBTZWxlY3Rpb25SYW5nZU1vZGVsKHJvd0luZGV4ZXMsIGNlbGxJbmRleGVzKTtcbiAgICB9XG5cbiAgICBnZXRDZWxsSW5kZXhlcyhlbGVtZW50OiBIVE1MRWxlbWVudCk6IHsgcm93SW5kZXg6IG51bWJlcjsgY2VsbEluZGV4OiBudW1iZXIgfSB8IG51bGwge1xuICAgICAgICBsZXQgY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICBsZXQgc2VsZWN0ZWRDZWxsOiB7IHJvd0luZGV4OiBudW1iZXI7IGNlbGxJbmRleDogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcblxuICAgICAgICB3aGlsZSAoIXNlbGVjdGVkQ2VsbCAmJiBjdXJyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LnRhZ05hbWUgPT09IHRoaXMuY2VsbFRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENlbGwgPSB0aGlzLmdldFNlbGVjdGVkQ2VsbChjdXJyZW50RWxlbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZWxlY3RlZENlbGw7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0ZWRDZWxsKGVsOiBIVE1MRWxlbWVudCk6IHsgcm93SW5kZXg6IG51bWJlcjsgY2VsbEluZGV4OiBudW1iZXIgfSB8IG51bGwge1xuICAgICAgICBsZXQgc2VsZWN0ZWRDZWxsOiB7IHJvd0luZGV4OiBudW1iZXI7IGNlbGxJbmRleDogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcblxuICAgICAgICB0aGlzLnJvd01hdHJpeC5zb21lKChyb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjZWxsSW5kZXggPSByb3cuY2VsbHMuZmluZEluZGV4KHggPT4geC5jZWxsID09PSBlbCk7XG5cbiAgICAgICAgICAgIGlmIChjZWxsSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2VsbCA9IHsgcm93SW5kZXgsIGNlbGxJbmRleCB9O1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBzZWxlY3RlZENlbGw7XG4gICAgfVxuXG4gICAgZ2V0Q2VsbEluZGV4ZXNPdXRzaWRlVGFibGUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB7IHJvd0luZGV4OiBudW1iZXI7IGNlbGxJbmRleDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkQ2VsbDogeyByb3dJbmRleDogbnVtYmVyOyBjZWxsSW5kZXg6IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHRhYmxlUmVhY3QgPSB0aGlzLnRhYmxlRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgaWYgKGV2ZW50LmNsaWVudFkgPD0gdGFibGVSZWFjdC50b3AgfHwgZXZlbnQuY2xpZW50WSA+PSB0YWJsZVJlYWN0LmJvdHRvbSkge1xuICAgICAgICAgICAgdGhpcy5hZGRTZWxlY3Rpb25JbkFsbENlbGxzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuY2xpZW50WCA8PSB0YWJsZVJlYWN0LmxlZnQpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkQ2VsbCA9IHRoaXMuZ2V0Q2VsbEluZGV4ZXNPdXRzaWRlVGFibGVMZWZ0KGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5jbGllbnRYID49IHRhYmxlUmVhY3QucmlnaHQpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkQ2VsbCA9IHRoaXMuZ2V0Q2VsbEluZGV4ZXNPdXRzaWRlVGFibGVSaWdodHMoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkQ2VsbDtcbiAgICB9XG5cbiAgICBnZXRDZWxsSW5kZXhlc091dHNpZGVUYWJsZUxlZnQoZXZlbnQ6IE1vdXNlRXZlbnQpOiB7IHJvd0luZGV4OiBudW1iZXI7IGNlbGxJbmRleDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuZ2V0TmVhcmVzdFJvd0luZGV4KGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHsgcm93SW5kZXgsIGNlbGxJbmRleDogMCB9O1xuICAgIH1cblxuICAgIGdldENlbGxJbmRleGVzT3V0c2lkZVRhYmxlUmlnaHRzKGV2ZW50OiBNb3VzZUV2ZW50KTogeyByb3dJbmRleDogbnVtYmVyOyBjZWxsSW5kZXg6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLmdldE5lYXJlc3RSb3dJbmRleChldmVudCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgICAgY2VsbEluZGV4OiB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uY2VsbHMubGVuZ3RoIC0gMVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldE5lYXJlc3RSb3dJbmRleChldmVudDogTW91c2VFdmVudCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLnRhYmxlRWwucm93cztcbiAgICAgICAgY29uc3QgbWF4Um93SW5kZXggPSByb3dzLmxlbmd0aCAtIDE7XG4gICAgICAgIGxldCByb3dJbmRleCA9IC0xO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHJvd0luZGV4Kys7XG4gICAgICAgICAgICBjb25zdCByb3dSZWFjdCA9IHJvd3Nbcm93SW5kZXhdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICBpZiAoZXZlbnQuY2xpZW50WSA+PSByb3dSZWFjdC50b3AgJiYgZXZlbnQuY2xpZW50WSA8PSByb3dSZWFjdC5ib3R0b20pIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAocm93SW5kZXggPCBtYXhSb3dJbmRleCk7XG5cbiAgICAgICAgcmV0dXJuIHJvd0luZGV4O1xuICAgIH1cblxuICAgIGFkZFNlbGVjdGlvbkluQWxsQ2VsbHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm93TWF0cml4LmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIHJvdy5jZWxscy5mb3JFYWNoKGNlbGwgPT4ge1xuICAgICAgICAgICAgICAgIGNlbGwuaGlnaGxpZ2h0Q2VsbCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByb3dJbmRleGVzID0ge1xuICAgICAgICAgICAgc3RhcnRJbmRleDogMCxcbiAgICAgICAgICAgIGVuZEluZGV4OiB0aGlzLnJvd01hdHJpeC5sZW5ndGggLSAxXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNlbGxJbmRleGVzID0ge1xuICAgICAgICAgICAgc3RhcnRJbmRleDogMCxcbiAgICAgICAgICAgIGVuZEluZGV4OiBNYXRoLm1heCguLi50aGlzLnJvd01hdHJpeC5tYXAoeCA9PiB4LmNlbGxzLmxlbmd0aCkpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UgPSBuZXcgU2VsZWN0aW9uUmFuZ2VNb2RlbChyb3dJbmRleGVzLCBjZWxsSW5kZXhlcyk7XG4gICAgfVxuXG4gICAgY2xlYXJTZWxlY3Rpb25JbkFsbENlbGxzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJvd01hdHJpeC5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICByb3cuY2VsbHMuZm9yRWFjaChjZWxsID0+IHtcbiAgICAgICAgICAgICAgICBjZWxsLnJlbW92ZUhpZ2hsaWdodENlbGwoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZSA9IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0U3RhcnRBbmRFbmRJbmRleGVzKG9yaWdpbkluZGV4OiBudW1iZXIsIGN1cnJlbnRJbmRleDogbnVtYmVyKTogeyBzdGFydEluZGV4OiBudW1iZXI7IGVuZEluZGV4OiBudW1iZXIgfSB7XG4gICAgICAgIGNvbnN0IGluZGV4ZXMgPSBbb3JpZ2luSW5kZXgsIGN1cnJlbnRJbmRleF07XG4gICAgICAgIGluZGV4ZXMuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuXG4gICAgICAgIHJldHVybiB7IHN0YXJ0SW5kZXg6IGluZGV4ZXNbMF0sIGVuZEluZGV4OiBpbmRleGVzWzFdIH07XG4gICAgfVxuXG4gICAgaXNPcmlnaW5DZWxsKGV2ZW50OiBNb3VzZUV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbCA9IHRoaXMuZ2V0Q2VsbEluZGV4ZXMoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcblxuICAgICAgICBpZiAoIXNlbGVjdGVkQ2VsbCB8fCAhdGhpcy5vcmlnaW5TZWxlY3RlZENlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpblNlbGVjdGVkQ2VsbC5yb3dJbmRleCA9PT0gc2VsZWN0ZWRDZWxsLnJvd0luZGV4ICYmIHRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsLmNlbGxJbmRleCA9PT0gc2VsZWN0ZWRDZWxsLmNlbGxJbmRleDtcbiAgICB9XG5cbiAgICBpc09uRWRpdG9yQ2xpY2soZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGN1cnJlbnRFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgbGV0IGlzT25FZGl0b3JDbGljayA9IGZhbHNlO1xuXG4gICAgICAgIHdoaWxlICghaXNPbkVkaXRvckNsaWNrICYmIGN1cnJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBpc09uRWRpdG9yQ2xpY2sgPSBjdXJyZW50RWxlbWVudC50YWdOYW1lID09PSB0aGlzLmVkaXRvclRhZ05hbWU7XG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNPbkVkaXRvckNsaWNrO1xuICAgIH1cblxuICAgIGlzT25UYWJsZUNsaWNrKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBjdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIGxldCBpc09uVGFibGVDbGljayA9IGZhbHNlO1xuXG4gICAgICAgIHdoaWxlICghaXNPblRhYmxlQ2xpY2sgJiYgY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlzT25UYWJsZUNsaWNrID0gY3VycmVudEVsZW1lbnQgPT09IHRoaXMudGFibGVFbDtcbiAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpc09uVGFibGVDbGljaztcbiAgICB9XG5cbiAgICBjYW5TdGFydFNlbGVjdGlvbihlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICBsZXQgY2FuU3RhcnRTZWxlY3Rpb24gPSBmYWxzZTtcblxuICAgICAgICB3aGlsZSAoIWNhblN0YXJ0U2VsZWN0aW9uICYmIGN1cnJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kcmFnZ2FibGVDZWxsQ29udGVudC5pbmNsdWRlcyhjdXJyZW50RWxlbWVudC50YWdOYW1lKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYW5TdGFydFNlbGVjdGlvbiA9IGN1cnJlbnRFbGVtZW50LnRhZ05hbWUgPT09IHRoaXMuY2VsbFRhZ05hbWU7XG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FuU3RhcnRTZWxlY3Rpb247XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0aW9uUmFuZ2VGb3JNZW51T3ZlcmxheShlbGVtZW50OiBIVE1MRWxlbWVudCk6IFNlbGVjdGlvblJhbmdlTW9kZWwge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGwgPSB0aGlzLmdldENlbGxJbmRleGVzKGVsZW1lbnQpO1xuICAgICAgICBpZiAoIXNlbGVjdGVkQ2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0NlbGxJblNlbGVjdGlvbiA9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlICYmXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlLnJvd0luZGV4ZXMuc3RhcnRJbmRleCA8PSBzZWxlY3RlZENlbGwucm93SW5kZXggJiZcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5lbmRJbmRleCA+PSBzZWxlY3RlZENlbGwucm93SW5kZXggJiZcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UuY2VsbEluZGV4ZXMuc3RhcnRJbmRleCA8PSBzZWxlY3RlZENlbGwuY2VsbEluZGV4ICYmXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlLmNlbGxJbmRleGVzLmVuZEluZGV4ID49IHNlbGVjdGVkQ2VsbC5jZWxsSW5kZXg7XG5cbiAgICAgICAgaWYgKCFpc0NlbGxJblNlbGVjdGlvbiAmJiB0aGlzLnNlbGVjdGlvblJhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uSW5BbGxDZWxscygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzQ2VsbEluU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25SYW5nZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByb3dFbmRJbmRleCA9IHNlbGVjdGVkQ2VsbC5yb3dJbmRleDtcbiAgICAgICAgbGV0IGNvbHVtbkVuZEluZGV4ID0gc2VsZWN0ZWRDZWxsLmNlbGxJbmRleDtcblxuICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtyb3dFbmRJbmRleF0uY2VsbHNbc2VsZWN0ZWRDZWxsLmNlbGxJbmRleF0uY2VsbCA9PT1cbiAgICAgICAgICAgIHRoaXMucm93TWF0cml4W3Jvd0VuZEluZGV4ICsgMV0/LmNlbGxzW3NlbGVjdGVkQ2VsbC5jZWxsSW5kZXhdLmNlbGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByb3dFbmRJbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKHRoaXMucm93TWF0cml4W3Jvd0VuZEluZGV4XS5jZWxsc1tjb2x1bW5FbmRJbmRleF0uY2VsbCA9PT0gdGhpcy5yb3dNYXRyaXhbcm93RW5kSW5kZXhdLmNlbGxzW2NvbHVtbkVuZEluZGV4ICsgMV0/LmNlbGwpIHtcbiAgICAgICAgICAgIGNvbHVtbkVuZEluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdGlvblJhbmdlTW9kZWwoXG4gICAgICAgICAgICB7IHN0YXJ0SW5kZXg6IHNlbGVjdGVkQ2VsbC5yb3dJbmRleCwgZW5kSW5kZXg6IHJvd0VuZEluZGV4IH0sXG4gICAgICAgICAgICB7IHN0YXJ0SW5kZXg6IHNlbGVjdGVkQ2VsbC5jZWxsSW5kZXgsIGVuZEluZGV4OiBjb2x1bW5FbmRJbmRleCB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0VGFyZ2V0c0Zvck1lbnVPdmVybGF5KHNlbGVjdGlvblJhbmdlOiBTZWxlY3Rpb25SYW5nZU1vZGVsKTogU2VsZWN0aW9uUmFuZ2VNb2RlbCB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0aW9uUmFuZ2VNb2RlbChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4OiB0aGlzLmdldFRhcmdldFJvd1N0YXJ0SW5kZXgoc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5zdGFydEluZGV4KSxcbiAgICAgICAgICAgICAgICBlbmRJbmRleDogdGhpcy5nZXRUYXJnZXRSb3dFbmRJbmRleChzZWxlY3Rpb25SYW5nZS5yb3dJbmRleGVzLmVuZEluZGV4KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4OiB0aGlzLmdldFRhcmdldENvbHVtblN0YXJ0SW5kZXgoXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLnJvd0luZGV4ZXMuc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5lbmRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UuY2VsbEluZGV4ZXMuc3RhcnRJbmRleFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZW5kSW5kZXg6IHRoaXMuZ2V0VGFyZ2V0Q29sdW1uRW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLnJvd0luZGV4ZXMuc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5lbmRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UuY2VsbEluZGV4ZXMuZW5kSW5kZXhcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0VGFyZ2V0Um93U3RhcnRJbmRleChzdGFydEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBtZXJnZWRSb3dDZWxscyA9IHRoaXMucm93TWF0cml4W3N0YXJ0SW5kZXhdLmNlbGxzLmZpbHRlcihcbiAgICAgICAgICAgIHggPT4geC5jZWxsLnJvd1NwYW4gPiAxICYmIHguY29tcG9uZW50UmVmLmluc3RhbmNlLmNlbGwudmVydGljYWxNZXJnZVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghbWVyZ2VkUm93Q2VsbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhcnRJbmRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaXFDZWxscyA9IG5ldyBTZXQobWVyZ2VkUm93Q2VsbHMpO1xuICAgICAgICBsZXQgaW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gdGhpcy5yb3dNYXRyaXhbaW5kZXhdLmNlbGxzO1xuXG4gICAgICAgICAgICBpZiAoIWNlbGxzLnNvbWUoY2VsbCA9PiB1bmlxQ2VsbHMuaGFzKGNlbGwpKSkge1xuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGluZGV4LS07XG4gICAgICAgIH0gd2hpbGUgKGluZGV4ID49IDApO1xuXG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICBnZXRUYXJnZXRSb3dFbmRJbmRleChlbmRJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgbWVyZ2VkUm93Q2VsbHMgPSB0aGlzLnJvd01hdHJpeFtlbmRJbmRleF0uY2VsbHMuZmlsdGVyKHggPT4geC5jZWxsLnJvd1NwYW4gPiAxICYmIHguY29tcG9uZW50UmVmLmluc3RhbmNlLmNlbGwudmVydGljYWxNZXJnZSk7XG5cbiAgICAgICAgaWYgKCFtZXJnZWRSb3dDZWxscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmRJbmRleCArIDE7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmlxQ2VsbHMgPSBuZXcgU2V0KG1lcmdlZFJvd0NlbGxzKTtcbiAgICAgICAgbGV0IGluZGV4ID0gZW5kSW5kZXg7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgY29uc3QgY2VsbHMgPSB0aGlzLnJvd01hdHJpeFtpbmRleF0/LmNlbGxzO1xuXG4gICAgICAgICAgICBpZiAoIWNlbGxzPy5zb21lKGNlbGwgPT4gdW5pcUNlbGxzLmhhcyhjZWxsKSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfSB3aGlsZSAoaW5kZXggPD0gdGhpcy5yb3dNYXRyaXgubGVuZ3RoKTtcblxuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgZ2V0VGFyZ2V0Q29sdW1uU3RhcnRJbmRleChyb3dTdGFydEluZGV4OiBudW1iZXIsIHJvd0VuZEluZGV4OiBudW1iZXIsIGNlbGxTdGFydEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgaW5kZXggPSBjZWxsU3RhcnRJbmRleDtcblxuICAgICAgICBmb3IgKGxldCBpID0gcm93U3RhcnRJbmRleDsgaSA8PSByb3dFbmRJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbY2VsbFN0YXJ0SW5kZXhdLmNlbGwuY29sU3BhbiA+IDEpIHtcbiAgICAgICAgICAgICAgICBsZXQgY2VsbEluZGV4ID0gY2VsbFN0YXJ0SW5kZXg7XG5cbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbY2VsbEluZGV4XSB8fCB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tjZWxsSW5kZXhdLmNlbGwuY29sU3BhbiA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdJbmRleCA9IGNlbGxJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpbmRleCA8IG5ld0luZGV4ID8gaW5kZXggOiBuZXdJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgY2VsbEluZGV4LS07XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoY2VsbEluZGV4ID49IDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIGdldFRhcmdldENvbHVtbkVuZEluZGV4KHJvd1N0YXJ0SW5kZXg6IG51bWJlciwgcm93RW5kSW5kZXg6IG51bWJlciwgY2VsbEVuZEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgaW5kZXggPSBjZWxsRW5kSW5kZXggKyAxO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSByb3dFbmRJbmRleDsgaSA+PSByb3dTdGFydEluZGV4OyBpLS0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tjZWxsRW5kSW5kZXhdLmNlbGwuY29sU3BhbiA+IDEpIHtcbiAgICAgICAgICAgICAgICBsZXQgY2VsbEluZGV4ID0gY2VsbEVuZEluZGV4O1xuXG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucm93TWF0cml4W2ldLmNlbGxzW2NlbGxJbmRleF0gfHwgdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbY2VsbEluZGV4XS5jZWxsLmNvbFNwYW4gPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3SW5kZXggPSBjZWxsSW5kZXggKyAxO1xuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4ID4gbmV3SW5kZXggPyBpbmRleCA6IG5ld0luZGV4O1xuICAgICAgICAgICAgICAgICAgICBjZWxsSW5kZXgrKztcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChjZWxsSW5kZXggPD0gdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG59XG4iXX0=
376
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2NvbXBvbmVudHMvdGFibGUvc2VsZWN0aW9uL3RhYmxlLXNlbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFnQixZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBR3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRW5GLE1BQU0sT0FBTyxjQUFjO0lBdUJ2QixZQUNZLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFNBQXlCLEVBQ3pCLEtBQWlCLEVBQ2pCLE9BQXlCLEVBQ3pCLFNBQWlCO1FBTGpCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixjQUFTLEdBQVQsU0FBUyxDQUFnQjtRQUN6QixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQ3pCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFkcEIsa0JBQWEsR0FBRyxnQkFBZ0IsQ0FBQztRQUVqQyxpQkFBWSxHQUFHLGVBQWUsQ0FBQztRQUUvQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUVuQix5QkFBb0IsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFVaEQsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUU7WUFDckMs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QUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQUU7d0JBQzlGLE1BQU07cUJBQ1Q7b0JBRUQsTUFBTSxRQUFRLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztvQkFDL0IsS0FBSyxHQUFHLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO29CQUM1QyxTQUFTLEVBQUUsQ0FBQztpQkFDZixRQUFRLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7YUFDekQ7U0FDSjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZyb21FdmVudCwgU3Vic2NyaXB0aW9uLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQ2VsbERhdGFNb2RlbCB9IGZyb20gJy4uL21vZGVscy9jZWxsLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgRWRpdG9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2ludGVyYWN0aW9uL2VkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IE1vdXNlQnV0dG9uIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJhY3Rpb24vbW91c2UtYnV0dG9uLmVudW0nO1xuaW1wb3J0IHsgT3ZlcmxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvb3ZlcmxheS5zZXJ2aWNlJztcbmltcG9ydCB7IFJvd0RhdGFNb2RlbCB9IGZyb20gJy4uL21vZGVscy9yb3ctZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBTZWxlY3Rpb25SYW5nZU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NlbGVjdGlvbi1yYW5nZS5tb2RlbCc7XG5pbXBvcnQgeyBUYWJsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBUYWJsZU92ZXJsYXlNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vb3ZlcmxheS1tZW51L292ZXJsYXktbWVudS5jb21wb25lbnQnO1xuXG5leHBvcnQgY2xhc3MgVGFibGVTZWxlY3Rpb24ge1xuICAgIG9yaWdpblNlbGVjdGVkQ2VsbDogeyByb3dJbmRleDogbnVtYmVyOyBjZWxsSW5kZXg6IG51bWJlcjsgaXNGb2N1c2VkOiBib29sZWFuIH07XG5cbiAgICB0YWJsZUNvbnRleHRNZW51JDogU3Vic2NyaXB0aW9uO1xuXG4gICAgdGFibGVNb3VzZURvd24kOiBTdWJzY3JpcHRpb247XG5cbiAgICBkb2N1bWVudE1vdXNlRG93biQ6IFN1YnNjcmlwdGlvbjtcblxuICAgIGRvY3VtZW50TW91c2VNb3ZlJDogU3Vic2NyaXB0aW9uO1xuXG4gICAgZG9jdW1lbnRNb3VzZVVwJDogU3Vic2NyaXB0aW9uO1xuXG4gICAgc2VsZWN0aW9uUmFuZ2U6IFNlbGVjdGlvblJhbmdlTW9kZWwgfCBudWxsO1xuXG4gICAgcmVhZG9ubHkgZWRpdG9yVGFnTmFtZSA9ICdBUFAtTk9ELUVESVRPUic7XG5cbiAgICByZWFkb25seSB0YWJsZVRhZ05hbWUgPSAnQVBQLU5PRC1UQUJMRSc7XG5cbiAgICByZWFkb25seSBjZWxsVGFnTmFtZSA9ICdURCc7XG5cbiAgICByZWFkb25seSBkcmFnZ2FibGVDZWxsQ29udGVudCA9IFsnQVBQLU5PRC1SRVNJWkVSJ107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBlZGl0b3JTZXJ2aWNlOiBFZGl0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG92ZXJsYXlTZXJ2aWNlOiBPdmVybGF5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByb3dNYXRyaXg6IFJvd0RhdGFNb2RlbFtdLFxuICAgICAgICBwcml2YXRlIHRhYmxlOiBUYWJsZU1vZGVsLFxuICAgICAgICBwcml2YXRlIHRhYmxlRWw6IEhUTUxUYWJsZUVsZW1lbnQsXG4gICAgICAgIHByaXZhdGUgc2Vzc2lvbklkOiBudW1iZXJcbiAgICApIHtcbiAgICAgICAgdGhpcy5hZGRUYWJsZUNvbnRleHRNZW51U3Vic2NyaXB0aW9ucygpO1xuICAgICAgICB0aGlzLmFkZFRhYmxlTW91c2VEb3duU3Vic2NyaXB0aW9ucygpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnRhYmxlQ29udGV4dE1lbnUkPy51bnN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy50YWJsZUNvbnRleHRNZW51JC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGFibGVNb3VzZURvd24kPy51bnN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy50YWJsZU1vdXNlRG93biQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVtb3ZlTW91c2VTdWJzY3JpcHRpb25zKCk7XG4gICAgfVxuXG4gICAgYWRkVGFibGVDb250ZXh0TWVudVN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVDb250ZXh0TWVudSQgPSBmcm9tRXZlbnQodGhpcy50YWJsZUVsLCAnY29udGV4dG1lbnUnKS5zdWJzY3JpYmUoKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JTZXJ2aWNlLmlzVmlld09ubHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvblJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZUZvck1lbnVPdmVybGF5KGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoIXNlbGVjdGlvblJhbmdlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0YXJnZXRzID0gdGhpcy5nZXRUYXJnZXRzRm9yTWVudU92ZXJsYXkoc2VsZWN0aW9uUmFuZ2UpO1xuICAgICAgICAgICAgY29uc3QgY2FuUmVtb3ZlUm93cyA9IHNlbGVjdGlvblJhbmdlLnJvd0luZGV4ZXMuZW5kSW5kZXggLSBzZWxlY3Rpb25SYW5nZS5yb3dJbmRleGVzLnN0YXJ0SW5kZXggKyAxIDwgdGhpcy5yb3dNYXRyaXgubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgY2FuUmVtb3ZlQ29sdW1ucyA9XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UuY2VsbEluZGV4ZXMuZW5kSW5kZXggLSBzZWxlY3Rpb25SYW5nZS5jZWxsSW5kZXhlcy5zdGFydEluZGV4ICsgMSA8IHRoaXMucm93TWF0cml4WzBdLmNlbGxzLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UsXG4gICAgICAgICAgICAgICAgdGFyZ2V0cyxcbiAgICAgICAgICAgICAgICBjYW5SZW1vdmVSb3dzLFxuICAgICAgICAgICAgICAgIGNhblJlbW92ZUNvbHVtbnMsXG4gICAgICAgICAgICAgICAgdGFibGVJbnNlcnRJbmRleDogdGhpcy50YWJsZS5pbnNlcnRJbmRleCxcbiAgICAgICAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5vcGVuKFRhYmxlT3ZlcmxheU1lbnVDb21wb25lbnQsIGRhdGEsIGV2ZW50LngsIGV2ZW50LnkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhZGRUYWJsZU1vdXNlRG93blN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVNb3VzZURvd24kID0gZnJvbUV2ZW50KHRoaXMudGFibGVFbCwgJ21vdXNlZG93bicpLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBldmVudC5jdHJsS2V5IHx8XG4gICAgICAgICAgICAgICAgKGV2ZW50LmJ1dHRvbiBhcyBNb3VzZUJ1dHRvbikgPT09IE1vdXNlQnV0dG9uLlJpZ2h0IHx8XG4gICAgICAgICAgICAgICAgIXRoaXMuY2FuU3RhcnRTZWxlY3Rpb24oZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZU1vdXNlU3Vic2NyaXB0aW9ucygpO1xuICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbkluQWxsQ2VsbHMoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRG9jdW1lbnRNb3VzZU1vdmVtZW50U3Vic2NyaXB0aW9ucygpO1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHRoaXMuZ2V0Q2VsbEluZGV4ZXMoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsID0geyAuLi5jZWxsLCBpc0ZvY3VzZWQ6IHRydWUgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWRkRG9jdW1lbnRNb3VzZU1vdmVtZW50U3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudE1vdXNlTW92ZSQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZW1vdmUnKVxuICAgICAgICAgICAgLnBpcGUodGhyb3R0bGVUaW1lKDEwMCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZShldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRvY3VtZW50TW91c2VVcCQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZXVwJykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTW91c2VTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgICAgICB0aGlzLmFkZERvY3VtZW50TW91c2VEb3duU3Vic2NyaXB0aW9ucygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhZGREb2N1bWVudE1vdXNlRG93blN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRNb3VzZURvd24kID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnbW91c2Vkb3duJykuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzT25FZGl0b3JDbGljayhldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpIHx8IHRoaXMuaXNPblRhYmxlQ2xpY2soZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5jbG9zZSgpO1xuICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbkluQWxsQ2VsbHMoKTtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTW91c2VTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbW92ZU1vdXNlU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRNb3VzZU1vdmUkPy51bnN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudE1vdXNlTW92ZSQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50TW91c2VVcCQ/LnVuc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50TW91c2VVcCQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50TW91c2VEb3duJD8udW5zdWJzY3JpYmUpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRNb3VzZURvd24kLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9jZXNzTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm9yaWdpblNlbGVjdGVkQ2VsbD8uaXNGb2N1c2VkICYmICF0aGlzLmlzT3JpZ2luQ2VsbChldmVudCkpIHtcbiAgICAgICAgICAgIHRoaXMucm93TWF0cml4W3RoaXMub3JpZ2luU2VsZWN0ZWRDZWxsLnJvd0luZGV4XS5jZWxsc1t0aGlzLm9yaWdpblNlbGVjdGVkQ2VsbC5jZWxsSW5kZXhdLmRpc2FibGVFZGl0b3JTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5lbmRNb3VzZVByZXNzKCk7XG4gICAgICAgICAgICB0aGlzLm9yaWdpblNlbGVjdGVkQ2VsbC5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5vcmlnaW5TZWxlY3RlZENlbGw/LmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxDZWxsc0luQmV0d2VlbihldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3RBbGxDZWxsc0luQmV0d2VlbihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGwgPSB0aGlzLmdldENlbGxJbmRleGVzKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkgfHwgdGhpcy5nZXRDZWxsSW5kZXhlc091dHNpZGVUYWJsZShldmVudCk7XG5cbiAgICAgICAgaWYgKCFzZWxlY3RlZENlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25JbkFsbENlbGxzKCk7XG5cbiAgICAgICAgY29uc3Qgcm93SW5kZXhlcyA9IHRoaXMuZ2V0U3RhcnRBbmRFbmRJbmRleGVzKHRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsLnJvd0luZGV4LCBzZWxlY3RlZENlbGwucm93SW5kZXgpO1xuICAgICAgICBjb25zdCBjZWxsSW5kZXhlcyA9IHRoaXMuZ2V0U3RhcnRBbmRFbmRJbmRleGVzKHRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsLmNlbGxJbmRleCwgc2VsZWN0ZWRDZWxsLmNlbGxJbmRleCk7XG4gICAgICAgIGNvbnN0IGNlbGxzOiBDZWxsRGF0YU1vZGVsW10gPSBbXTtcbiAgICAgICAgbGV0IGN1cnJlbnRSb3dJbmRleCA9IHJvd0luZGV4ZXMuc3RhcnRJbmRleDtcblxuICAgICAgICB3aGlsZSAoY3VycmVudFJvd0luZGV4IDw9IHJvd0luZGV4ZXMuZW5kSW5kZXgpIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50Q2VsbEluZGV4ID0gY2VsbEluZGV4ZXMuc3RhcnRJbmRleDtcblxuICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRDZWxsSW5kZXggPD0gY2VsbEluZGV4ZXMuZW5kSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBjZWxscy5wdXNoKHRoaXMucm93TWF0cml4W2N1cnJlbnRSb3dJbmRleF0uY2VsbHNbY3VycmVudENlbGxJbmRleF0pO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRDZWxsSW5kZXgrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudFJvd0luZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmlxQ2VsbHMgPSBuZXcgU2V0KGNlbGxzKTtcbiAgICAgICAgdW5pcUNlbGxzLmZvckVhY2goY2VsbCA9PiBjZWxsLmhpZ2hsaWdodENlbGwoKSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UgPSBuZXcgU2VsZWN0aW9uUmFuZ2VNb2RlbChyb3dJbmRleGVzLCBjZWxsSW5kZXhlcyk7XG4gICAgfVxuXG4gICAgZ2V0Q2VsbEluZGV4ZXMoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB7IHJvd0luZGV4OiBudW1iZXI7IGNlbGxJbmRleDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICAgICAgbGV0IGN1cnJlbnRFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgbGV0IHNlbGVjdGVkQ2VsbDogeyByb3dJbmRleDogbnVtYmVyOyBjZWxsSW5kZXg6IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgd2hpbGUgKCFzZWxlY3RlZENlbGwgJiYgY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50RWxlbWVudC50YWdOYW1lID09PSB0aGlzLmNlbGxUYWdOYW1lKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDZWxsID0gdGhpcy5nZXRTZWxlY3RlZENlbGwoY3VycmVudEVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRDZWxsO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGVkQ2VsbChlbDogSFRNTEVsZW1lbnQpOiB7IHJvd0luZGV4OiBudW1iZXI7IGNlbGxJbmRleDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkQ2VsbDogeyByb3dJbmRleDogbnVtYmVyOyBjZWxsSW5kZXg6IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5yb3dNYXRyaXguc29tZSgocm93LCByb3dJbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2VsbEluZGV4ID0gcm93LmNlbGxzLmZpbmRJbmRleCh4ID0+IHguY2VsbCA9PT0gZWwpO1xuXG4gICAgICAgICAgICBpZiAoY2VsbEluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENlbGwgPSB7IHJvd0luZGV4LCBjZWxsSW5kZXggfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRDZWxsO1xuICAgIH1cblxuICAgIGdldENlbGxJbmRleGVzT3V0c2lkZVRhYmxlKGV2ZW50OiBNb3VzZUV2ZW50KTogeyByb3dJbmRleDogbnVtYmVyOyBjZWxsSW5kZXg6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgICAgIGxldCBzZWxlY3RlZENlbGw6IHsgcm93SW5kZXg6IG51bWJlcjsgY2VsbEluZGV4OiBudW1iZXIgfSB8IG51bGwgPSBudWxsO1xuICAgICAgICBjb25zdCB0YWJsZVJlYWN0ID0gdGhpcy50YWJsZUVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGlmIChldmVudC5jbGllbnRZIDw9IHRhYmxlUmVhY3QudG9wIHx8IGV2ZW50LmNsaWVudFkgPj0gdGFibGVSZWFjdC5ib3R0b20pIHtcbiAgICAgICAgICAgIHRoaXMuYWRkU2VsZWN0aW9uSW5BbGxDZWxscygpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmNsaWVudFggPD0gdGFibGVSZWFjdC5sZWZ0KSB7XG4gICAgICAgICAgICBzZWxlY3RlZENlbGwgPSB0aGlzLmdldENlbGxJbmRleGVzT3V0c2lkZVRhYmxlTGVmdChldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuY2xpZW50WCA+PSB0YWJsZVJlYWN0LnJpZ2h0KSB7XG4gICAgICAgICAgICBzZWxlY3RlZENlbGwgPSB0aGlzLmdldENlbGxJbmRleGVzT3V0c2lkZVRhYmxlUmlnaHRzKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZWxlY3RlZENlbGw7XG4gICAgfVxuXG4gICAgZ2V0Q2VsbEluZGV4ZXNPdXRzaWRlVGFibGVMZWZ0KGV2ZW50OiBNb3VzZUV2ZW50KTogeyByb3dJbmRleDogbnVtYmVyOyBjZWxsSW5kZXg6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLmdldE5lYXJlc3RSb3dJbmRleChldmVudCk7XG4gICAgICAgIHJldHVybiB7IHJvd0luZGV4LCBjZWxsSW5kZXg6IDAgfTtcbiAgICB9XG5cbiAgICBnZXRDZWxsSW5kZXhlc091dHNpZGVUYWJsZVJpZ2h0cyhldmVudDogTW91c2VFdmVudCk6IHsgcm93SW5kZXg6IG51bWJlcjsgY2VsbEluZGV4OiBudW1iZXIgfSB7XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gdGhpcy5nZXROZWFyZXN0Um93SW5kZXgoZXZlbnQpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICAgIGNlbGxJbmRleDogdGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLmNlbGxzLmxlbmd0aCAtIDFcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXROZWFyZXN0Um93SW5kZXgoZXZlbnQ6IE1vdXNlRXZlbnQpOiBudW1iZXIge1xuICAgICAgICBjb25zdCByb3dzID0gdGhpcy50YWJsZUVsLnJvd3M7XG4gICAgICAgIGNvbnN0IG1heFJvd0luZGV4ID0gcm93cy5sZW5ndGggLSAxO1xuICAgICAgICBsZXQgcm93SW5kZXggPSAtMTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgICByb3dJbmRleCsrO1xuICAgICAgICAgICAgY29uc3Qgcm93UmVhY3QgPSByb3dzW3Jvd0luZGV4XS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgICAgaWYgKGV2ZW50LmNsaWVudFkgPj0gcm93UmVhY3QudG9wICYmIGV2ZW50LmNsaWVudFkgPD0gcm93UmVhY3QuYm90dG9tKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKHJvd0luZGV4IDwgbWF4Um93SW5kZXgpO1xuXG4gICAgICAgIHJldHVybiByb3dJbmRleDtcbiAgICB9XG5cbiAgICBhZGRTZWxlY3Rpb25JbkFsbENlbGxzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJvd01hdHJpeC5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICByb3cuY2VsbHMuZm9yRWFjaChjZWxsID0+IHtcbiAgICAgICAgICAgICAgICBjZWxsLmhpZ2hsaWdodENlbGwoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgcm93SW5kZXhlcyA9IHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg6IDAsXG4gICAgICAgICAgICBlbmRJbmRleDogdGhpcy5yb3dNYXRyaXgubGVuZ3RoIC0gMVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjZWxsSW5kZXhlcyA9IHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg6IDAsXG4gICAgICAgICAgICBlbmRJbmRleDogTWF0aC5tYXgoLi4udGhpcy5yb3dNYXRyaXgubWFwKHggPT4geC5jZWxscy5sZW5ndGgpKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlID0gbmV3IFNlbGVjdGlvblJhbmdlTW9kZWwocm93SW5kZXhlcywgY2VsbEluZGV4ZXMpO1xuICAgIH1cblxuICAgIGNsZWFyU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uUmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uSW5BbGxDZWxscygpO1xuICAgIH1cblxuICAgIGNsZWFyU2VsZWN0aW9uSW5BbGxDZWxscygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yb3dNYXRyaXguZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgcm93LmNlbGxzLmZvckVhY2goY2VsbCA9PiB7XG4gICAgICAgICAgICAgICAgY2VsbC5yZW1vdmVIaWdobGlnaHRDZWxsKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UgPSBudWxsO1xuICAgIH1cblxuICAgIGdldFN0YXJ0QW5kRW5kSW5kZXhlcyhvcmlnaW5JbmRleDogbnVtYmVyLCBjdXJyZW50SW5kZXg6IG51bWJlcik6IHsgc3RhcnRJbmRleDogbnVtYmVyOyBlbmRJbmRleDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCBpbmRleGVzID0gW29yaWdpbkluZGV4LCBjdXJyZW50SW5kZXhdO1xuICAgICAgICBpbmRleGVzLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcblxuICAgICAgICByZXR1cm4geyBzdGFydEluZGV4OiBpbmRleGVzWzBdLCBlbmRJbmRleDogaW5kZXhlc1sxXSB9O1xuICAgIH1cblxuICAgIGlzT3JpZ2luQ2VsbChldmVudDogTW91c2VFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGwgPSB0aGlzLmdldENlbGxJbmRleGVzKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG5cbiAgICAgICAgaWYgKCFzZWxlY3RlZENlbGwgfHwgIXRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5TZWxlY3RlZENlbGwucm93SW5kZXggPT09IHNlbGVjdGVkQ2VsbC5yb3dJbmRleCAmJiB0aGlzLm9yaWdpblNlbGVjdGVkQ2VsbC5jZWxsSW5kZXggPT09IHNlbGVjdGVkQ2VsbC5jZWxsSW5kZXg7XG4gICAgfVxuXG4gICAgaXNPbkVkaXRvckNsaWNrKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBjdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIGxldCBpc09uRWRpdG9yQ2xpY2sgPSBmYWxzZTtcblxuICAgICAgICB3aGlsZSAoIWlzT25FZGl0b3JDbGljayAmJiBjdXJyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgaXNPbkVkaXRvckNsaWNrID0gY3VycmVudEVsZW1lbnQudGFnTmFtZSA9PT0gdGhpcy5lZGl0b3JUYWdOYW1lO1xuICAgICAgICAgICAgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlzT25FZGl0b3JDbGljaztcbiAgICB9XG5cbiAgICBpc09uVGFibGVDbGljayhlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICBsZXQgaXNPblRhYmxlQ2xpY2sgPSBmYWxzZTtcblxuICAgICAgICB3aGlsZSAoIWlzT25UYWJsZUNsaWNrICYmIGN1cnJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBpc09uVGFibGVDbGljayA9IGN1cnJlbnRFbGVtZW50ID09PSB0aGlzLnRhYmxlRWw7XG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNPblRhYmxlQ2xpY2s7XG4gICAgfVxuXG4gICAgY2FuU3RhcnRTZWxlY3Rpb24oZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGN1cnJlbnRFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgbGV0IGNhblN0YXJ0U2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgd2hpbGUgKCFjYW5TdGFydFNlbGVjdGlvbiAmJiBjdXJyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZHJhZ2dhYmxlQ2VsbENvbnRlbnQuaW5jbHVkZXMoY3VycmVudEVsZW1lbnQudGFnTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LnRhZ05hbWUgPT09IHRoaXMudGFibGVUYWdOYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FuU3RhcnRTZWxlY3Rpb24gPSB0aGlzLnNlc3Npb25JZCA9PT0gK2N1cnJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1zZXNzaW9uLWlkJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYW5TdGFydFNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3Rpb25SYW5nZUZvck1lbnVPdmVybGF5KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogU2VsZWN0aW9uUmFuZ2VNb2RlbCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbCA9IHRoaXMuZ2V0Q2VsbEluZGV4ZXMoZWxlbWVudCk7XG4gICAgICAgIGlmICghc2VsZWN0ZWRDZWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzQ2VsbEluU2VsZWN0aW9uID1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UgJiZcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5zdGFydEluZGV4IDw9IHNlbGVjdGVkQ2VsbC5yb3dJbmRleCAmJlxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZS5yb3dJbmRleGVzLmVuZEluZGV4ID49IHNlbGVjdGVkQ2VsbC5yb3dJbmRleCAmJlxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZS5jZWxsSW5kZXhlcy5zdGFydEluZGV4IDw9IHNlbGVjdGVkQ2VsbC5jZWxsSW5kZXggJiZcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UuY2VsbEluZGV4ZXMuZW5kSW5kZXggPj0gc2VsZWN0ZWRDZWxsLmNlbGxJbmRleDtcblxuICAgICAgICBpZiAoIWlzQ2VsbEluU2VsZWN0aW9uICYmIHRoaXMuc2VsZWN0aW9uUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25JbkFsbENlbGxzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNDZWxsSW5TZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblJhbmdlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJvd0VuZEluZGV4ID0gc2VsZWN0ZWRDZWxsLnJvd0luZGV4O1xuICAgICAgICBsZXQgY29sdW1uRW5kSW5kZXggPSBzZWxlY3RlZENlbGwuY2VsbEluZGV4O1xuXG4gICAgICAgIHdoaWxlIChcbiAgICAgICAgICAgIHRoaXMucm93TWF0cml4W3Jvd0VuZEluZGV4XS5jZWxsc1tzZWxlY3RlZENlbGwuY2VsbEluZGV4XS5jZWxsID09PVxuICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbcm93RW5kSW5kZXggKyAxXT8uY2VsbHNbc2VsZWN0ZWRDZWxsLmNlbGxJbmRleF0uY2VsbFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJvd0VuZEluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAodGhpcy5yb3dNYXRyaXhbcm93RW5kSW5kZXhdLmNlbGxzW2NvbHVtbkVuZEluZGV4XS5jZWxsID09PSB0aGlzLnJvd01hdHJpeFtyb3dFbmRJbmRleF0uY2VsbHNbY29sdW1uRW5kSW5kZXggKyAxXT8uY2VsbCkge1xuICAgICAgICAgICAgY29sdW1uRW5kSW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0aW9uUmFuZ2VNb2RlbChcbiAgICAgICAgICAgIHsgc3RhcnRJbmRleDogc2VsZWN0ZWRDZWxsLnJvd0luZGV4LCBlbmRJbmRleDogcm93RW5kSW5kZXggfSxcbiAgICAgICAgICAgIHsgc3RhcnRJbmRleDogc2VsZWN0ZWRDZWxsLmNlbGxJbmRleCwgZW5kSW5kZXg6IGNvbHVtbkVuZEluZGV4IH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRUYXJnZXRzRm9yTWVudU92ZXJsYXkoc2VsZWN0aW9uUmFuZ2U6IFNlbGVjdGlvblJhbmdlTW9kZWwpOiBTZWxlY3Rpb25SYW5nZU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3Rpb25SYW5nZU1vZGVsKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXg6IHRoaXMuZ2V0VGFyZ2V0Um93U3RhcnRJbmRleChzZWxlY3Rpb25SYW5nZS5yb3dJbmRleGVzLnN0YXJ0SW5kZXgpLFxuICAgICAgICAgICAgICAgIGVuZEluZGV4OiB0aGlzLmdldFRhcmdldFJvd0VuZEluZGV4KHNlbGVjdGlvblJhbmdlLnJvd0luZGV4ZXMuZW5kSW5kZXgpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXg6IHRoaXMuZ2V0VGFyZ2V0Q29sdW1uU3RhcnRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5zdGFydEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5yb3dJbmRleGVzLmVuZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5jZWxsSW5kZXhlcy5zdGFydEluZGV4XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBlbmRJbmRleDogdGhpcy5nZXRUYXJnZXRDb2x1bW5FbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5zdGFydEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5yb3dJbmRleGVzLmVuZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5jZWxsSW5kZXhlcy5lbmRJbmRleFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRUYXJnZXRSb3dTdGFydEluZGV4KHN0YXJ0SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IG1lcmdlZFJvd0NlbGxzID0gdGhpcy5yb3dNYXRyaXhbc3RhcnRJbmRleF0uY2VsbHMuZmlsdGVyKFxuICAgICAgICAgICAgeCA9PiB4LmNlbGwucm93U3BhbiA+IDEgJiYgeC5jb21wb25lbnRSZWYuaW5zdGFuY2UuY2VsbC52ZXJ0aWNhbE1lcmdlXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFtZXJnZWRSb3dDZWxscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGFydEluZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5pcUNlbGxzID0gbmV3IFNldChtZXJnZWRSb3dDZWxscyk7XG4gICAgICAgIGxldCBpbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgY29uc3QgY2VsbHMgPSB0aGlzLnJvd01hdHJpeFtpbmRleF0uY2VsbHM7XG5cbiAgICAgICAgICAgIGlmICghY2VsbHMuc29tZShjZWxsID0+IHVuaXFDZWxscy5oYXMoY2VsbCkpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5kZXgtLTtcbiAgICAgICAgfSB3aGlsZSAoaW5kZXggPj0gMCk7XG5cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIGdldFRhcmdldFJvd0VuZEluZGV4KGVuZEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBtZXJnZWRSb3dDZWxscyA9IHRoaXMucm93TWF0cml4W2VuZEluZGV4XS5jZWxscy5maWx0ZXIoeCA9PiB4LmNlbGwucm93U3BhbiA+IDEgJiYgeC5jb21wb25lbnRSZWYuaW5zdGFuY2UuY2VsbC52ZXJ0aWNhbE1lcmdlKTtcblxuICAgICAgICBpZiAoIW1lcmdlZFJvd0NlbGxzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGVuZEluZGV4ICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaXFDZWxscyA9IG5ldyBTZXQobWVyZ2VkUm93Q2VsbHMpO1xuICAgICAgICBsZXQgaW5kZXggPSBlbmRJbmRleDtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgICBjb25zdCBjZWxscyA9IHRoaXMucm93TWF0cml4W2luZGV4XT8uY2VsbHM7XG5cbiAgICAgICAgICAgIGlmICghY2VsbHM/LnNvbWUoY2VsbCA9PiB1bmlxQ2VsbHMuaGFzKGNlbGwpKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9IHdoaWxlIChpbmRleCA8PSB0aGlzLnJvd01hdHJpeC5sZW5ndGgpO1xuXG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICBnZXRUYXJnZXRDb2x1bW5TdGFydEluZGV4KHJvd1N0YXJ0SW5kZXg6IG51bWJlciwgcm93RW5kSW5kZXg6IG51bWJlciwgY2VsbFN0YXJ0SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGxldCBpbmRleCA9IGNlbGxTdGFydEluZGV4O1xuXG4gICAgICAgIGZvciAobGV0IGkgPSByb3dTdGFydEluZGV4OyBpIDw9IHJvd0VuZEluZGV4OyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tjZWxsU3RhcnRJbmRleF0uY2VsbC5jb2xTcGFuID4gMSkge1xuICAgICAgICAgICAgICAgIGxldCBjZWxsSW5kZXggPSBjZWxsU3RhcnRJbmRleDtcblxuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tjZWxsSW5kZXhdIHx8IHRoaXMucm93TWF0cml4W2ldLmNlbGxzW2NlbGxJbmRleF0uY2VsbC5jb2xTcGFuID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0luZGV4ID0gY2VsbEluZGV4O1xuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4IDwgbmV3SW5kZXggPyBpbmRleCA6IG5ld0luZGV4O1xuICAgICAgICAgICAgICAgICAgICBjZWxsSW5kZXgtLTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChjZWxsSW5kZXggPj0gMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgZ2V0VGFyZ2V0Q29sdW1uRW5kSW5kZXgocm93U3RhcnRJbmRleDogbnVtYmVyLCByb3dFbmRJbmRleDogbnVtYmVyLCBjZWxsRW5kSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGxldCBpbmRleCA9IGNlbGxFbmRJbmRleCArIDE7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IHJvd0VuZEluZGV4OyBpID49IHJvd1N0YXJ0SW5kZXg7IGktLSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucm93TWF0cml4W2ldLmNlbGxzW2NlbGxFbmRJbmRleF0uY2VsbC5jb2xTcGFuID4gMSkge1xuICAgICAgICAgICAgICAgIGxldCBjZWxsSW5kZXggPSBjZWxsRW5kSW5kZXg7XG5cbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbY2VsbEluZGV4XSB8fCB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tjZWxsSW5kZXhdLmNlbGwuY29sU3BhbiA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdJbmRleCA9IGNlbGxJbmRleCArIDE7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXggPiBuZXdJbmRleCA/IGluZGV4IDogbmV3SW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIGNlbGxJbmRleCsrO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNlbGxJbmRleCA8PSB0aGlzLnJvd01hdHJpeFtpXS5jZWxscy5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbn1cbiJdfQ==
@@ -3,6 +3,14 @@ import { HeadingModel } from '../../../models/generated/heading.model';
3
3
  import { ParagraphStyleModel } from '../../../models/generated/paragraph-style.model';
4
4
  import { TextStyleModel } from '../../../models/generated/text-style.model';
5
5
  import { VerticalAlignment } from '../vertical-alignment.enum';
6
+ export const DEFAULT_TOOLBAR_STYLES = () => ({
7
+ fontFamily: DEFAULT_FONT_FAMILY,
8
+ fontSize: DEFAULT_FONT_SIZE,
9
+ fontColor: DEFAULT_FONT_COLOR,
10
+ alignment: Alignment.left,
11
+ backgroundColor: DEFAULT_BACKGROUND_COLOR,
12
+ highlightColor: DEFAULT_BACKGROUND_COLOR
13
+ });
6
14
  export const DEFAULT_BACKGROUND_COLOR = 'transparent';
7
15
  export const DEFAULT_FONT_FAMILY = 'Roboto';
8
16
  export const DEFAULT_FONT_SIZE = 14;
@@ -59,4 +67,4 @@ export const DEFAULT_HEADINGS = [
59
67
  export const NEW_LINE_MARKUP = '\n';
60
68
  export const DEFAULT_TAB_WIDTH = 48;
61
69
  export const DEFAULT_EDGE_MAX_HEIGHT_MULTIPLIER = 0.4;
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbnN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2NvbnRlbnQvY29uc3RhbnRzL2VkaXRvci5jb25zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUvRCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxhQUFhLENBQUM7QUFDdEQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFDO0FBQzVDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUNwQyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUM7QUFDekMsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsU0FBUyxDQUFDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLFNBQVMsQ0FBQztBQUNsRCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxXQUFXLENBQUM7QUFDdEQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQUM7SUFDakQsY0FBYyxFQUFFLHdCQUF3QjtJQUN4QyxJQUFJLEVBQUUsS0FBSztJQUNYLFNBQVMsRUFBRSxrQkFBa0I7SUFDN0IsVUFBVSxFQUFFLG1CQUFtQjtJQUMvQixRQUFRLEVBQUUsaUJBQWlCO0lBQzNCLGNBQWMsRUFBRSx3QkFBd0I7SUFDeEMsV0FBVyxFQUFFLEtBQUs7SUFDbEIsTUFBTSxFQUFFLEtBQUs7SUFDYixhQUFhLEVBQUUsS0FBSztJQUNwQixTQUFTLEVBQUUsS0FBSztJQUNoQixpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO0NBQzVDLENBQUMsQ0FBQztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLElBQUksbUJBQW1CLENBQUM7SUFDM0QsU0FBUyxFQUFFLFNBQVMsQ0FBQyxJQUFJO0lBQ3pCLGVBQWUsRUFBRSx3QkFBd0I7SUFDekMsY0FBYyxFQUFFLHdCQUF3QjtJQUN4QyxlQUFlLEVBQUUsQ0FBQztJQUNsQixhQUFhLEVBQUUsQ0FBQztJQUNoQixVQUFVLEVBQUUsQ0FBQztJQUNiLFdBQVcsRUFBRSxDQUFDO0lBQ2QsV0FBVyxFQUFFLENBQUM7SUFDZCxVQUFVLEVBQUUsQ0FBQztJQUNiLFdBQVcsRUFBRSxDQUFDO0lBQ2QsV0FBVyxFQUFFLElBQUk7SUFDakIsY0FBYyxFQUFFLElBQUk7SUFDcEIsaUJBQWlCLEVBQUUsS0FBSztJQUN4QixpQkFBaUIsRUFBRSxLQUFLO0lBQ3hCLGdCQUFnQixFQUFFLEtBQUs7Q0FDMUIsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUc7SUFDNUIsSUFBSSxZQUFZLENBQUM7UUFDYixPQUFPLEVBQUUsSUFBSTtRQUNiLElBQUksRUFBRSx3QkFBd0I7UUFDOUIsY0FBYyxFQUFFLHVCQUF1QjtRQUN2QyxPQUFPLEVBQUUsd0JBQXdCO1FBQ2pDLFNBQVMsRUFBRSxrQkFBa0I7S0FDaEMsQ0FBQztJQUNGLElBQUksWUFBWSxDQUFDO1FBQ2IsT0FBTyxFQUFFLHdCQUF3QjtRQUNqQyxJQUFJLEVBQUUsd0JBQXdCO1FBQzlCLGNBQWMsRUFBRSx1QkFBdUI7UUFDdkMsT0FBTyxFQUFFLHNCQUFzQjtRQUMvQixTQUFTLEVBQUUsa0JBQWtCO0tBQ2hDLENBQUM7Q0FDTCxDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQztBQUNwQyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7QUFDcEMsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsR0FBRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWxpZ25tZW50IH0gZnJvbSAnLi4vLi4vcG9zaXRpb25pbmcvYWxpZ25tZW50cy5jb25zdCc7XG5pbXBvcnQgeyBIZWFkaW5nTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2hlYWRpbmcubW9kZWwnO1xuaW1wb3J0IHsgUGFyYWdyYXBoU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcGFyYWdyYXBoLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IFRleHRTdHlsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90ZXh0LXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IFZlcnRpY2FsQWxpZ25tZW50IH0gZnJvbSAnLi4vdmVydGljYWwtYWxpZ25tZW50LmVudW0nO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SID0gJ3RyYW5zcGFyZW50JztcbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZPTlRfRkFNSUxZID0gJ1JvYm90byc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9GT05UX1NJWkUgPSAxNDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZPTlRfQ09MT1IgPSAnIzAwMCc7XG5leHBvcnQgY29uc3QgSFlQRVJMSU5LX0ZPTlRfQ09MT1IgPSAnIzAwMDBFRSc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9IRUFESU5HX1NUWUxFX0lEID0gJ0RlZmF1bHQnO1xuZXhwb3J0IGNvbnN0IEhZUEVSTElOS19IRUFESU5HX1NUWUxFX0lEID0gJ0h5cGVybGluayc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9URVhUX1NUWUxFID0gbmV3IFRleHRTdHlsZU1vZGVsKHtcbiAgICBoaWdobGlnaHRDb2xvcjogREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SLFxuICAgIGJvbGQ6IGZhbHNlLFxuICAgIGZvbnRDb2xvcjogREVGQVVMVF9GT05UX0NPTE9SLFxuICAgIGZvbnRGYW1pbHk6IERFRkFVTFRfRk9OVF9GQU1JTFksXG4gICAgZm9udFNpemU6IERFRkFVTFRfRk9OVF9TSVpFLFxuICAgIGhlYWRpbmdTdHlsZUlkOiBERUZBVUxUX0hFQURJTkdfU1RZTEVfSUQsXG4gICAgaXNTbWFsbENhcHM6IGZhbHNlLFxuICAgIGl0YWxpYzogZmFsc2UsXG4gICAgc3RyaWtldGhyb3VnaDogZmFsc2UsXG4gICAgdW5kZXJsaW5lOiBmYWxzZSxcbiAgICB2ZXJ0aWNhbEFsaWdubWVudDogVmVydGljYWxBbGlnbm1lbnQuTm9uZVxufSk7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QQVJBR1JBUEhfU1RZTEUgPSBuZXcgUGFyYWdyYXBoU3R5bGVNb2RlbCh7XG4gICAgYWxpZ25tZW50OiBBbGlnbm1lbnQubGVmdCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUixcbiAgICBoZWFkaW5nU3R5bGVJZDogREVGQVVMVF9IRUFESU5HX1NUWUxFX0lELFxuICAgIGluZGVudEZpcnN0TGluZTogMCxcbiAgICBpbmRlbnRIYW5naW5nOiAwLFxuICAgIGluZGVudExlZnQ6IDAsXG4gICAgaW5kZW50UmlnaHQ6IDAsXG4gICAgbGluZVNwYWNpbmc6IDEsXG4gICAgc3BhY2VBZnRlcjogMCxcbiAgICBzcGFjZUJlZm9yZTogMCxcbiAgICBudW1iZXJpbmdJZDogbnVsbCxcbiAgICBudW1iZXJpbmdMZXZlbDogbnVsbCxcbiAgICBjb250ZXh0dWFsU3BhY2luZzogZmFsc2UsXG4gICAgYmVmb3JlQXV0b3NwYWNpbmc6IGZhbHNlLFxuICAgIGFmdGVyQXV0b3NwYWNpbmc6IGZhbHNlXG59KTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFQURJTkdTID0gW1xuICAgIG5ldyBIZWFkaW5nTW9kZWwoe1xuICAgICAgICBiYXNlZE9uOiBudWxsLFxuICAgICAgICBuYW1lOiBERUZBVUxUX0hFQURJTkdfU1RZTEVfSUQsXG4gICAgICAgIHBhcmFncmFwaFN0eWxlOiBERUZBVUxUX1BBUkFHUkFQSF9TVFlMRSxcbiAgICAgICAgc3R5bGVJZDogREVGQVVMVF9IRUFESU5HX1NUWUxFX0lELFxuICAgICAgICB0ZXh0U3R5bGU6IERFRkFVTFRfVEVYVF9TVFlMRVxuICAgIH0pLFxuICAgIG5ldyBIZWFkaW5nTW9kZWwoe1xuICAgICAgICBiYXNlZE9uOiBERUZBVUxUX0hFQURJTkdfU1RZTEVfSUQsXG4gICAgICAgIG5hbWU6ICdEZWZhdWx0IFBhcmFncmFwaCBGb250JyxcbiAgICAgICAgcGFyYWdyYXBoU3R5bGU6IERFRkFVTFRfUEFSQUdSQVBIX1NUWUxFLFxuICAgICAgICBzdHlsZUlkOiAnRGVmYXVsdFBhcmFncmFwaEZvbnQnLFxuICAgICAgICB0ZXh0U3R5bGU6IERFRkFVTFRfVEVYVF9TVFlMRVxuICAgIH0pXG5dO1xuZXhwb3J0IGNvbnN0IE5FV19MSU5FX01BUktVUCA9ICdcXG4nO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVEFCX1dJRFRIID0gNDg7XG5leHBvcnQgY29uc3QgREVGQVVMVF9FREdFX01BWF9IRUlHSFRfTVVMVElQTElFUiA9IDAuNDtcbiJdfQ==
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbnN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2NvbnRlbnQvY29uc3RhbnRzL2VkaXRvci5jb25zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUvRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLEVBQUUsQ0FDdkMsQ0FBQztJQUNHLFVBQVUsRUFBRSxtQkFBbUI7SUFDL0IsUUFBUSxFQUFFLGlCQUFpQjtJQUMzQixTQUFTLEVBQUUsa0JBQWtCO0lBQzdCLFNBQVMsRUFBRSxTQUFTLENBQUMsSUFBSTtJQUN6QixlQUFlLEVBQUUsd0JBQXdCO0lBQ3pDLGNBQWMsRUFBRSx3QkFBd0I7Q0FDeEIsQ0FBQSxDQUFDO0FBQ3pCLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLGFBQWEsQ0FBQztBQUN0RCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxRQUFRLENBQUM7QUFDNUMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQztBQUN6QyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxTQUFTLENBQUM7QUFDOUMsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsU0FBUyxDQUFDO0FBQ2xELE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLFdBQVcsQ0FBQztBQUN0RCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGNBQWMsQ0FBQztJQUNqRCxjQUFjLEVBQUUsd0JBQXdCO0lBQ3hDLElBQUksRUFBRSxLQUFLO0lBQ1gsU0FBUyxFQUFFLGtCQUFrQjtJQUM3QixVQUFVLEVBQUUsbUJBQW1CO0lBQy9CLFFBQVEsRUFBRSxpQkFBaUI7SUFDM0IsY0FBYyxFQUFFLHdCQUF3QjtJQUN4QyxXQUFXLEVBQUUsS0FBSztJQUNsQixNQUFNLEVBQUUsS0FBSztJQUNiLGFBQWEsRUFBRSxLQUFLO0lBQ3BCLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLElBQUk7Q0FDNUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQztJQUMzRCxTQUFTLEVBQUUsU0FBUyxDQUFDLElBQUk7SUFDekIsZUFBZSxFQUFFLHdCQUF3QjtJQUN6QyxjQUFjLEVBQUUsd0JBQXdCO0lBQ3hDLGVBQWUsRUFBRSxDQUFDO0lBQ2xCLGFBQWEsRUFBRSxDQUFDO0lBQ2hCLFVBQVUsRUFBRSxDQUFDO0lBQ2IsV0FBVyxFQUFFLENBQUM7SUFDZCxXQUFXLEVBQUUsQ0FBQztJQUNkLFVBQVUsRUFBRSxDQUFDO0lBQ2IsV0FBVyxFQUFFLENBQUM7SUFDZCxXQUFXLEVBQUUsSUFBSTtJQUNqQixjQUFjLEVBQUUsSUFBSTtJQUNwQixpQkFBaUIsRUFBRSxLQUFLO0lBQ3hCLGlCQUFpQixFQUFFLEtBQUs7SUFDeEIsZ0JBQWdCLEVBQUUsS0FBSztDQUMxQixDQUFDLENBQUM7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM1QixJQUFJLFlBQVksQ0FBQztRQUNiLE9BQU8sRUFBRSxJQUFJO1FBQ2IsSUFBSSxFQUFFLHdCQUF3QjtRQUM5QixjQUFjLEVBQUUsdUJBQXVCO1FBQ3ZDLE9BQU8sRUFBRSx3QkFBd0I7UUFDakMsU0FBUyxFQUFFLGtCQUFrQjtLQUNoQyxDQUFDO0lBQ0YsSUFBSSxZQUFZLENBQUM7UUFDYixPQUFPLEVBQUUsd0JBQXdCO1FBQ2pDLElBQUksRUFBRSx3QkFBd0I7UUFDOUIsY0FBYyxFQUFFLHVCQUF1QjtRQUN2QyxPQUFPLEVBQUUsc0JBQXNCO1FBQy9CLFNBQVMsRUFBRSxrQkFBa0I7S0FDaEMsQ0FBQztDQUNMLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUNwQyxNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRyxHQUFHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbGlnbm1lbnQgfSBmcm9tICcuLi8uLi9wb3NpdGlvbmluZy9hbGlnbm1lbnRzLmNvbnN0JztcbmltcG9ydCB7IEhlYWRpbmdNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaGVhZGluZy5tb2RlbCc7XG5pbXBvcnQgeyBJVG9vbGJhclN0eWxlcyB9IGZyb20gJy4uL2Rpc3BsYXktZGF0YS90b29sYmFyLXN0eWxlcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUGFyYWdyYXBoU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcGFyYWdyYXBoLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IFRleHRTdHlsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90ZXh0LXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IFZlcnRpY2FsQWxpZ25tZW50IH0gZnJvbSAnLi4vdmVydGljYWwtYWxpZ25tZW50LmVudW0nO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9UT09MQkFSX1NUWUxFUyA9ICgpID0+XG4gICAgKHtcbiAgICAgICAgZm9udEZhbWlseTogREVGQVVMVF9GT05UX0ZBTUlMWSxcbiAgICAgICAgZm9udFNpemU6IERFRkFVTFRfRk9OVF9TSVpFLFxuICAgICAgICBmb250Q29sb3I6IERFRkFVTFRfRk9OVF9DT0xPUixcbiAgICAgICAgYWxpZ25tZW50OiBBbGlnbm1lbnQubGVmdCxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IsXG4gICAgICAgIGhpZ2hsaWdodENvbG9yOiBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JcbiAgICB9IGFzIElUb29sYmFyU3R5bGVzKTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IgPSAndHJhbnNwYXJlbnQnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRk9OVF9GQU1JTFkgPSAnUm9ib3RvJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZPTlRfU0laRSA9IDE0O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRk9OVF9DT0xPUiA9ICcjMDAwJztcbmV4cG9ydCBjb25zdCBIWVBFUkxJTktfRk9OVF9DT0xPUiA9ICcjMDAwMEVFJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFQURJTkdfU1RZTEVfSUQgPSAnRGVmYXVsdCc7XG5leHBvcnQgY29uc3QgSFlQRVJMSU5LX0hFQURJTkdfU1RZTEVfSUQgPSAnSHlwZXJsaW5rJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX1RFWFRfU1RZTEUgPSBuZXcgVGV4dFN0eWxlTW9kZWwoe1xuICAgIGhpZ2hsaWdodENvbG9yOiBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IsXG4gICAgYm9sZDogZmFsc2UsXG4gICAgZm9udENvbG9yOiBERUZBVUxUX0ZPTlRfQ09MT1IsXG4gICAgZm9udEZhbWlseTogREVGQVVMVF9GT05UX0ZBTUlMWSxcbiAgICBmb250U2l6ZTogREVGQVVMVF9GT05UX1NJWkUsXG4gICAgaGVhZGluZ1N0eWxlSWQ6IERFRkFVTFRfSEVBRElOR19TVFlMRV9JRCxcbiAgICBpc1NtYWxsQ2FwczogZmFsc2UsXG4gICAgaXRhbGljOiBmYWxzZSxcbiAgICBzdHJpa2V0aHJvdWdoOiBmYWxzZSxcbiAgICB1bmRlcmxpbmU6IGZhbHNlLFxuICAgIHZlcnRpY2FsQWxpZ25tZW50OiBWZXJ0aWNhbEFsaWdubWVudC5Ob25lXG59KTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1BBUkFHUkFQSF9TVFlMRSA9IG5ldyBQYXJhZ3JhcGhTdHlsZU1vZGVsKHtcbiAgICBhbGlnbm1lbnQ6IEFsaWdubWVudC5sZWZ0LFxuICAgIGJhY2tncm91bmRDb2xvcjogREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SLFxuICAgIGhlYWRpbmdTdHlsZUlkOiBERUZBVUxUX0hFQURJTkdfU1RZTEVfSUQsXG4gICAgaW5kZW50Rmlyc3RMaW5lOiAwLFxuICAgIGluZGVudEhhbmdpbmc6IDAsXG4gICAgaW5kZW50TGVmdDogMCxcbiAgICBpbmRlbnRSaWdodDogMCxcbiAgICBsaW5lU3BhY2luZzogMSxcbiAgICBzcGFjZUFmdGVyOiAwLFxuICAgIHNwYWNlQmVmb3JlOiAwLFxuICAgIG51bWJlcmluZ0lkOiBudWxsLFxuICAgIG51bWJlcmluZ0xldmVsOiBudWxsLFxuICAgIGNvbnRleHR1YWxTcGFjaW5nOiBmYWxzZSxcbiAgICBiZWZvcmVBdXRvc3BhY2luZzogZmFsc2UsXG4gICAgYWZ0ZXJBdXRvc3BhY2luZzogZmFsc2Vcbn0pO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSEVBRElOR1MgPSBbXG4gICAgbmV3IEhlYWRpbmdNb2RlbCh7XG4gICAgICAgIGJhc2VkT246IG51bGwsXG4gICAgICAgIG5hbWU6IERFRkFVTFRfSEVBRElOR19TVFlMRV9JRCxcbiAgICAgICAgcGFyYWdyYXBoU3R5bGU6IERFRkFVTFRfUEFSQUdSQVBIX1NUWUxFLFxuICAgICAgICBzdHlsZUlkOiBERUZBVUxUX0hFQURJTkdfU1RZTEVfSUQsXG4gICAgICAgIHRleHRTdHlsZTogREVGQVVMVF9URVhUX1NUWUxFXG4gICAgfSksXG4gICAgbmV3IEhlYWRpbmdNb2RlbCh7XG4gICAgICAgIGJhc2VkT246IERFRkFVTFRfSEVBRElOR19TVFlMRV9JRCxcbiAgICAgICAgbmFtZTogJ0RlZmF1bHQgUGFyYWdyYXBoIEZvbnQnLFxuICAgICAgICBwYXJhZ3JhcGhTdHlsZTogREVGQVVMVF9QQVJBR1JBUEhfU1RZTEUsXG4gICAgICAgIHN0eWxlSWQ6ICdEZWZhdWx0UGFyYWdyYXBoRm9udCcsXG4gICAgICAgIHRleHRTdHlsZTogREVGQVVMVF9URVhUX1NUWUxFXG4gICAgfSlcbl07XG5leHBvcnQgY29uc3QgTkVXX0xJTkVfTUFSS1VQID0gJ1xcbic7XG5leHBvcnQgY29uc3QgREVGQVVMVF9UQUJfV0lEVEggPSA0ODtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0VER0VfTUFYX0hFSUdIVF9NVUxUSVBMSUVSID0gMC40O1xuIl19