igniteui-angular 13.1.0-rc.1 → 13.1.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/esm2020/lib/action-strip/grid-actions/grid-editing-actions.component.mjs +2 -2
  2. package/esm2020/lib/data-operations/pivot-sort-strategy.mjs +44 -0
  3. package/esm2020/lib/data-operations/pivot-strategy.mjs +2 -43
  4. package/esm2020/lib/grids/cell.component.mjs +1 -2
  5. package/esm2020/lib/grids/common/grid.interface.mjs +1 -1
  6. package/esm2020/lib/grids/filtering/excel-style/excel-style-search.component.mjs +6 -3
  7. package/esm2020/lib/grids/grid-base.directive.mjs +11 -11
  8. package/esm2020/lib/grids/hierarchical-grid/hierarchical-cell.component.mjs +2 -2
  9. package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid-api.service.mjs +3 -3
  10. package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.mjs +10 -10
  11. package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid-navigation.service.mjs +3 -3
  12. package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +31 -30
  13. package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid.module.mjs +1 -1
  14. package/esm2020/lib/grids/hierarchical-grid/hierarchical-row.component.mjs +2 -2
  15. package/esm2020/lib/grids/hierarchical-grid/row-island.component.mjs +12 -13
  16. package/esm2020/lib/grids/pivot-grid/pivot-data-selector.component.mjs +2 -5
  17. package/esm2020/lib/grids/pivot-grid/pivot-grid-dimensions.mjs +2 -2
  18. package/esm2020/lib/grids/pivot-grid/pivot-grid.component.mjs +13 -13
  19. package/esm2020/lib/grids/pivot-grid/pivot-grid.pipes.mjs +7 -9
  20. package/esm2020/lib/grids/pivot-grid/pivot-header-row.component.mjs +6 -9
  21. package/esm2020/lib/grids/pivot-grid/pivot-row-dimension-content.component.mjs +9 -10
  22. package/esm2020/lib/grids/pivot-grid/pivot-row-dimension-header-group.component.mjs +1 -1
  23. package/esm2020/lib/grids/pivot-grid/pivot-row.component.mjs +1 -1
  24. package/esm2020/lib/grids/pivot-grid/pivot-sort-util.mjs +26 -0
  25. package/esm2020/lib/grids/pivot-grid/pivot-util.mjs +1 -23
  26. package/esm2020/lib/grids/resizing/pivot-grid/pivot-resize-handle.directive.mjs +1 -1
  27. package/esm2020/lib/grids/resizing/resize-handle.directive.mjs +1 -1
  28. package/esm2020/lib/grids/resizing/resizer.component.mjs +1 -1
  29. package/esm2020/lib/grids/resizing/resizing.service.mjs +1 -1
  30. package/esm2020/lib/grids/row.directive.mjs +1 -1
  31. package/esm2020/lib/grids/state.directive.mjs +2 -2
  32. package/esm2020/lib/grids/toolbar/grid-toolbar.base.mjs +1 -1
  33. package/esm2020/lib/grids/tree-grid/tree-grid.component.mjs +5 -7
  34. package/esm2020/lib/progressbar/progressbar.component.mjs +1 -2
  35. package/esm2020/lib/services/exporter-common/base-export-service.mjs +3 -3
  36. package/esm2020/public_api.mjs +2 -1
  37. package/fesm2015/igniteui-angular.mjs +276 -290
  38. package/fesm2015/igniteui-angular.mjs.map +1 -1
  39. package/fesm2020/igniteui-angular.mjs +276 -289
  40. package/fesm2020/igniteui-angular.mjs.map +1 -1
  41. package/lib/data-operations/pivot-sort-strategy.d.ts +16 -0
  42. package/lib/data-operations/pivot-strategy.d.ts +0 -14
  43. package/lib/grids/cell.component.d.ts +2 -2
  44. package/lib/grids/common/grid.interface.d.ts +3 -3
  45. package/lib/grids/grid-base.directive.d.ts +6 -7
  46. package/lib/grids/hierarchical-grid/hierarchical-grid-api.service.d.ts +1 -1
  47. package/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.d.ts +4 -8
  48. package/lib/grids/hierarchical-grid/hierarchical-grid.component.d.ts +11 -6
  49. package/lib/grids/hierarchical-grid/row-island.component.d.ts +5 -5
  50. package/lib/grids/pivot-grid/pivot-grid-dimensions.d.ts +1 -1
  51. package/lib/grids/pivot-grid/pivot-grid.component.d.ts +4 -2
  52. package/lib/grids/pivot-grid/pivot-grid.pipes.d.ts +2 -2
  53. package/lib/grids/pivot-grid/pivot-header-row.component.d.ts +1 -1
  54. package/lib/grids/pivot-grid/pivot-row-dimension-content.component.d.ts +6 -6
  55. package/lib/grids/pivot-grid/pivot-sort-util.d.ts +5 -0
  56. package/lib/grids/pivot-grid/pivot-util.d.ts +0 -1
  57. package/lib/grids/row.directive.d.ts +3 -3
  58. package/lib/grids/tree-grid/tree-grid.component.d.ts +2 -4
  59. package/lib/progressbar/progressbar.component.d.ts +1 -1
  60. package/package.json +1 -1
  61. package/public_api.d.ts +1 -0
  62. package/schematics/tsconfig.tsbuildinfo +1 -1
@@ -53,4 +53,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
53
53
  schemas: [CUSTOM_ELEMENTS_SCHEMA]
54
54
  }]
55
55
  }] });
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpY2FsLWdyaWQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2hpZXJhcmNoaWNhbC1ncmlkL2hpZXJhcmNoaWNhbC1ncmlkLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN2RyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFHakY7O0dBRUc7QUF3QkgsTUFBTSxPQUFPLHlCQUF5Qjs7c0hBQXpCLHlCQUF5Qjt1SEFBekIseUJBQXlCLGlCQXJCOUIsNEJBQTRCO1FBQzVCLDJCQUEyQjtRQUMzQixxQkFBcUI7UUFDckIsd0JBQXdCO1FBQ3hCLGdDQUFnQztRQUNoQyx1QkFBdUI7UUFDdkIsNkJBQTZCLGFBVzdCLGFBQWEsYUFSYixhQUFhO1FBQ2IsNEJBQTRCO1FBQzVCLDJCQUEyQjtRQUMzQixnQ0FBZ0M7UUFDaEMscUJBQXFCO1FBQ3JCLHdCQUF3Qjt1SEFPbkIseUJBQXlCLFlBTHpCO1lBQ0wsYUFBYTtTQUNoQixFQVRHLGFBQWE7MkZBWVIseUJBQXlCO2tCQXZCckMsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUU7d0JBQ1YsNEJBQTRCO3dCQUM1QiwyQkFBMkI7d0JBQzNCLHFCQUFxQjt3QkFDckIsd0JBQXdCO3dCQUN4QixnQ0FBZ0M7d0JBQ2hDLHVCQUF1Qjt3QkFDdkIsNkJBQTZCO3FCQUNoQztvQkFDRCxPQUFPLEVBQUU7d0JBQ0wsYUFBYTt3QkFDYiw0QkFBNEI7d0JBQzVCLDJCQUEyQjt3QkFDM0IsZ0NBQWdDO3dCQUNoQyxxQkFBcUI7d0JBQ3JCLHdCQUF3QjtxQkFDM0I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLGFBQWE7cUJBQ2hCO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hHcmlkTW9kdWxlIH0gZnJvbSAnLi4vZ3JpZC9ncmlkLm1vZHVsZSc7XG5pbXBvcnQgeyBJZ3hDaGlsZEdyaWRSb3dDb21wb25lbnQsIElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hIaWVyYXJjaGljYWxSb3dDb21wb25lbnQgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IElneEdyaWRIaWVyYXJjaGljYWxQaXBlLCBJZ3hHcmlkSGllcmFyY2hpY2FsUGFnaW5nUGlwZSB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWdyaWQucGlwZXMnO1xuaW1wb3J0IHsgSWd4Um93SXNsYW5kQ29tcG9uZW50IH0gZnJvbSAnLi9yb3ctaXNsYW5kLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hIaWVyYXJjaGljYWxHcmlkQ2VsbENvbXBvbmVudCB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IElneEdyaWRDb21wb25lbnQgfSBmcm9tICcuLi9ncmlkL2dyaWQuY29tcG9uZW50JztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBOZ01vZHVsZSh7XHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgICBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50LFxyXG4gICAgICAgIElneEhpZXJhcmNoaWNhbFJvd0NvbXBvbmVudCxcclxuICAgICAgICBJZ3hSb3dJc2xhbmRDb21wb25lbnQsXHJcbiAgICAgICAgSWd4Q2hpbGRHcmlkUm93Q29tcG9uZW50LFxyXG4gICAgICAgIElneEhpZXJhcmNoaWNhbEdyaWRDZWxsQ29tcG9uZW50LFxyXG4gICAgICAgIElneEdyaWRIaWVyYXJjaGljYWxQaXBlLFxyXG4gICAgICAgIElneEdyaWRIaWVyYXJjaGljYWxQYWdpbmdQaXBlXHJcbiAgICBdLFxyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICAgIElneEdyaWRNb2R1bGUsXHJcbiAgICAgICAgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCxcclxuICAgICAgICBJZ3hIaWVyYXJjaGljYWxSb3dDb21wb25lbnQsXHJcbiAgICAgICAgSWd4SGllcmFyY2hpY2FsR3JpZENlbGxDb21wb25lbnQsXHJcbiAgICAgICAgSWd4Um93SXNsYW5kQ29tcG9uZW50LFxyXG4gICAgICAgIElneENoaWxkR3JpZFJvd0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBJZ3hHcmlkTW9kdWxlLFxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxuZXhwb3J0IGNsYXNzIElneEhpZXJhcmNoaWNhbEdyaWRNb2R1bGUge1xufVxuIl19
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpY2FsLWdyaWQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2hpZXJhcmNoaWNhbC1ncmlkL2hpZXJhcmNoaWNhbC1ncmlkLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN2RyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFFakY7O0dBRUc7QUF3QkgsTUFBTSxPQUFPLHlCQUF5Qjs7c0hBQXpCLHlCQUF5Qjt1SEFBekIseUJBQXlCLGlCQXJCOUIsNEJBQTRCO1FBQzVCLDJCQUEyQjtRQUMzQixxQkFBcUI7UUFDckIsd0JBQXdCO1FBQ3hCLGdDQUFnQztRQUNoQyx1QkFBdUI7UUFDdkIsNkJBQTZCLGFBVzdCLGFBQWEsYUFSYixhQUFhO1FBQ2IsNEJBQTRCO1FBQzVCLDJCQUEyQjtRQUMzQixnQ0FBZ0M7UUFDaEMscUJBQXFCO1FBQ3JCLHdCQUF3Qjt1SEFPbkIseUJBQXlCLFlBTHpCO1lBQ0wsYUFBYTtTQUNoQixFQVRHLGFBQWE7MkZBWVIseUJBQXlCO2tCQXZCckMsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUU7d0JBQ1YsNEJBQTRCO3dCQUM1QiwyQkFBMkI7d0JBQzNCLHFCQUFxQjt3QkFDckIsd0JBQXdCO3dCQUN4QixnQ0FBZ0M7d0JBQ2hDLHVCQUF1Qjt3QkFDdkIsNkJBQTZCO3FCQUNoQztvQkFDRCxPQUFPLEVBQUU7d0JBQ0wsYUFBYTt3QkFDYiw0QkFBNEI7d0JBQzVCLDJCQUEyQjt3QkFDM0IsZ0NBQWdDO3dCQUNoQyxxQkFBcUI7d0JBQ3JCLHdCQUF3QjtxQkFDM0I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLGFBQWE7cUJBQ2hCO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElneEdyaWRNb2R1bGUgfSBmcm9tICcuLi9ncmlkL2dyaWQubW9kdWxlJztcclxuaW1wb3J0IHsgSWd4Q2hpbGRHcmlkUm93Q29tcG9uZW50LCBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9oaWVyYXJjaGljYWwtZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJZ3hIaWVyYXJjaGljYWxSb3dDb21wb25lbnQgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1yb3cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSWd4R3JpZEhpZXJhcmNoaWNhbFBpcGUsIElneEdyaWRIaWVyYXJjaGljYWxQYWdpbmdQaXBlIH0gZnJvbSAnLi9oaWVyYXJjaGljYWwtZ3JpZC5waXBlcyc7XHJcbmltcG9ydCB7IElneFJvd0lzbGFuZENvbXBvbmVudCB9IGZyb20gJy4vcm93LWlzbGFuZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJZ3hIaWVyYXJjaGljYWxHcmlkQ2VsbENvbXBvbmVudCB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWNlbGwuY29tcG9uZW50JztcclxuXHJcbi8qKlxyXG4gKiBAaGlkZGVuXHJcbiAqL1xyXG5ATmdNb2R1bGUoe1xyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgICAgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCxcclxuICAgICAgICBJZ3hIaWVyYXJjaGljYWxSb3dDb21wb25lbnQsXHJcbiAgICAgICAgSWd4Um93SXNsYW5kQ29tcG9uZW50LFxyXG4gICAgICAgIElneENoaWxkR3JpZFJvd0NvbXBvbmVudCxcclxuICAgICAgICBJZ3hIaWVyYXJjaGljYWxHcmlkQ2VsbENvbXBvbmVudCxcclxuICAgICAgICBJZ3hHcmlkSGllcmFyY2hpY2FsUGlwZSxcclxuICAgICAgICBJZ3hHcmlkSGllcmFyY2hpY2FsUGFnaW5nUGlwZVxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgICBJZ3hHcmlkTW9kdWxlLFxyXG4gICAgICAgIElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQsXHJcbiAgICAgICAgSWd4SGllcmFyY2hpY2FsUm93Q29tcG9uZW50LFxyXG4gICAgICAgIElneEhpZXJhcmNoaWNhbEdyaWRDZWxsQ29tcG9uZW50LFxyXG4gICAgICAgIElneFJvd0lzbGFuZENvbXBvbmVudCxcclxuICAgICAgICBJZ3hDaGlsZEdyaWRSb3dDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgSWd4R3JpZE1vZHVsZSxcclxuICAgIF0sXHJcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIElneEhpZXJhcmNoaWNhbEdyaWRNb2R1bGUge1xyXG59XHJcbiJdfQ==
@@ -109,7 +109,7 @@ export class IgxHierarchicalRowComponent extends IgxRowDirective {
109
109
  if (grid.gridAPI.crudService.cellInEditMode) {
110
110
  grid.gridAPI.crudService.endEdit();
111
111
  }
112
- grid.hgridAPI.getChildGrids(true).forEach(g => {
112
+ grid.gridAPI.getChildGrids(true).forEach(g => {
113
113
  if (g.gridAPI.crudService.cellInEditMode) {
114
114
  g.gridAPI.crudService.endEdit();
115
115
  }
@@ -143,4 +143,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
143
143
  type: HostBinding,
144
144
  args: ['class.igx-grid__tr--highlighted']
145
145
  }] } });
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpY2FsLXJvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvaGllcmFyY2hpY2FsLWdyaWQvaGllcmFyY2hpY2FsLXJvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvaGllcmFyY2hpY2FsLWdyaWQvaGllcmFyY2hpY2FsLXJvdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBRVosU0FBUyxFQUNULFdBQVcsRUFDZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7OztBQVNqRixNQUFNLE9BQU8sMkJBQTRCLFNBQVEsZUFBZTtJQU5oRTs7UUErQmMsa0JBQWEsR0FBRyxpQ0FBaUMsQ0FBQztRQUNsRCxtQkFBYyxHQUFHLHFCQUFxQixDQUFDO1FBcUVqRDs7O1dBR0c7UUFDSSxXQUFNLEdBQUcsR0FBRyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDO1FBRUY7OztXQUdHO1FBQ0ksYUFBUSxHQUFHLEdBQUcsRUFBRTtZQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQztLQStCTDtJQWhIRzs7T0FFRztJQUNI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QUMsc0JBQXNCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBTzVELHdCQUF3QjtzQkFEakMsU0FBUzt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFrQy9ELGFBQWE7c0JBRHZCLFdBQVc7dUJBQUMsOEJBQThCO2dCQWFoQyxXQUFXO3NCQURyQixXQUFXO3VCQUFDLGlDQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIGZvcndhcmRSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBUZW1wbGF0ZVJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneFJvd0RpcmVjdGl2ZSB9IGZyb20gJy4uL3Jvdy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZENlbGxDb21wb25lbnQgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmlkVHlwZSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHNlbGVjdG9yOiAnaWd4LWhpZXJhcmNoaWNhbC1ncmlkLXJvdycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2hpZXJhcmNoaWNhbC1yb3cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogSWd4Um93RGlyZWN0aXZlLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJZ3hIaWVyYXJjaGljYWxSb3dDb21wb25lbnQpIH1dXG59KVxuZXhwb3J0IGNsYXNzIElneEhpZXJhcmNoaWNhbFJvd0NvbXBvbmVudCBleHRlbmRzIElneFJvd0RpcmVjdGl2ZSB7XG4gICAgQFZpZXdDaGlsZCgnZXhwYW5kZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwdWJsaWMgZXhwYW5kZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgQFZpZXdDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IElneEhpZXJhcmNoaWNhbEdyaWRDZWxsQ29tcG9uZW50KSwgeyByZWFkOiBJZ3hIaWVyYXJjaGljYWxHcmlkQ2VsbENvbXBvbmVudCB9KVxuICAgIHByb3RlY3RlZCBfY2VsbHM6IFF1ZXJ5TGlzdDxJZ3hIaWVyYXJjaGljYWxHcmlkQ2VsbENvbXBvbmVudD47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdEV4cGFuZGVkVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdEV4cGFuZGVkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdEVtcHR5VGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdEVtcHR5VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdENvbGxhcHNlZFRlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRDb2xsYXBzZWRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIHByb3RlY3RlZCBleHBhbmRlckNsYXNzID0gJ2lneC1ncmlkX19oaWVyYXJjaGljYWwtZXhwYW5kZXInO1xuICAgIHByb3RlY3RlZCByb2xBY3Rpb25DbGFzcyA9ICdpZ3gtZ3JpZF9fdHItYWN0aW9uJztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGV4cGFuZGVyQ2xhc3NSZXNvbHZlZCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFtgJHt0aGlzLmV4cGFuZGVyQ2xhc3N9ICR7dGhpcy5yb2xBY3Rpb25DbGFzc31gXTogIXRoaXMucGlubmVkIHx8IHRoaXMuZGlzYWJsZWQsXG4gICAgICAgICAgICBbYCR7dGhpcy5leHBhbmRlckNsYXNzfS0tZW1wdHlgXTogdGhpcy5waW5uZWQgJiYgIXRoaXMuZGlzYWJsZWRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHZpZXdJbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCArICh0aGlzLmdyaWQucGFnaW5hdG9yPy5wYWdlIHx8IDApICogKHRoaXMuZ3JpZC5wYWdpbmF0b3I/LnBlclBhZ2UgfHwgMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSByb3cgaXMgZXhwYW5kZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IFJvd0V4cGFuZGVkID0gdGhpcy5ncmlkMS5yb3dMaXN0LmZpcnN0LmV4cGFuZGVkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZXhwYW5kZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcm93X2V4cGFuc2lvbl9zdGF0ZSh0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ci0tZXhwYW5kZWQnKVxuICAgIHB1YmxpYyBnZXQgZXhwYW5kZWRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kZWQgJiYgIXRoaXMucGlubmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzQ2hpbGRyZW4oKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZ3JpZC5jaGlsZExheW91dEtleXMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ci0taGlnaGxpZ2h0ZWQnKVxuICAgIHB1YmxpYyBnZXQgaGlnaGxpZ2h0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQgJiYgdGhpcy5ncmlkLmhpZ2hsaWdodGVkUm93SUQgPT09IHRoaXMua2V5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwYW5kZXJDbGljayhldmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy50b2dnbGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSBoaWVyYXJjaGljYWwgcm93LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQxLnJvd0xpc3QuZmlyc3QudG9nZ2xlKClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlKCkge1xuICAgICAgICBpZiAodGhpcy5hZGRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5kRWRpdCh0aGlzLmdyaWQucm9vdEdyaWQpO1xuICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS5zZXRfcm93X2V4cGFuc2lvbl9zdGF0ZSh0aGlzLmtleSwgIXRoaXMuZXhwYW5kZWQpO1xuICAgICAgICB0aGlzLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5ncmlkLnNlbGVjdFJvd3MoW3RoaXMua2V5XSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzZWxlY3QgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZ3JpZC5kZXNlbGVjdFJvd3MoW3RoaXMua2V5XSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGljb25UZW1wbGF0ZSgpIHtcbiAgICAgICAgbGV0IGV4cGFuZGFibGUgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5ncmlkLmhhc0NoaWxkcmVuS2V5KSB7XG4gICAgICAgICAgICBleHBhbmRhYmxlID0gdGhpcy5kYXRhW3RoaXMuZ3JpZC5oYXNDaGlsZHJlbktleV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFleHBhbmRhYmxlIHx8ICh0aGlzLnBpbm5lZCAmJiAhdGhpcy5kaXNhYmxlZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRFbXB0eVRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnJvd0V4cGFuZGVkSW5kaWNhdG9yVGVtcGxhdGUgfHwgdGhpcy5kZWZhdWx0RXhwYW5kZWRUZW1wbGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQucm93Q29sbGFwc2VkSW5kaWNhdG9yVGVtcGxhdGUgfHwgdGhpcy5kZWZhdWx0Q29sbGFwc2VkVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPOiBjb25zaWRlciBtb3ZpbmcgaW50byBDUlVEXG4gICAgcHJvdGVjdGVkIGVuZEVkaXQoZ3JpZDogR3JpZFR5cGUpIHtcbiAgICAgICAgaWYgKGdyaWQuZ3JpZEFQSS5jcnVkU2VydmljZS5jZWxsSW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgZ3JpZC5ncmlkQVBJLmNydWRTZXJ2aWNlLmVuZEVkaXQoKTtcbiAgICAgICAgfVxuICAgICAgICBncmlkLmhncmlkQVBJLmdldENoaWxkR3JpZHModHJ1ZSkuZm9yRWFjaChnID0+IHtcbiAgICAgICAgICAgIGlmIChnLmdyaWRBUEkuY3J1ZFNlcnZpY2UuY2VsbEluRWRpdE1vZGUpIHtcbiAgICAgICAgICAgICAgICBnLmdyaWRBUEkuY3J1ZFNlcnZpY2UuZW5kRWRpdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PSdhZGRSb3dVSSA/IGFkZFRlbXAgOiBkZWZhdWx0VGVtcCc+PC9uZy1jb250YWluZXI+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRFeHBhbmRlZFRlbXBsYXRlPlxuICAgIDxpZ3gtaWNvbiBbYWN0aXZlXT0nIWFkZGVkJz5leHBhbmRfbW9yZTwvaWd4LWljb24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRDb2xsYXBzZWRUZW1wbGF0ZT5cbiAgICA8aWd4LWljb24gW2FjdGl2ZV09JyFhZGRlZCc+Y2hldnJvbl9yaWdodDwvaWd4LWljb24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRFbXB0eVRlbXBsYXRlPlxuICAgIDxpZ3gtaWNvbj48L2lneC1pY29uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhZGRUZW1wPlxuICAgIDxkaXYgY2xhc3M9J2lneC1ncmlkX190ci0taW5uZXInIFtjbGFzcy5pZ3gtZ3JpZF9fdHItLWFkZC1hbmltYXRlXT0ndHJpZ2dlckFkZEFuaW1hdGlvbkNsYXNzJyAoYW5pbWF0aW9uZW5kKT0nYW5pbWF0aW9uRW5kSGFuZGxlcigpJz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD0nZGVmYXVsdFRlbXAnPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRlbXA+XG4gICAgPCEtLSBEcmFnIGluZGljYXRvciAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93RHJhZ2dhYmxlXCI+XG4gICAgICAgIDxkaXYgW2NsYXNzXT1cInJlc29sdmVEcmFnSW5kaWNhdG9yQ2xhc3Nlc1wiIFtpZ3hSb3dEcmFnXT1cInRoaXNcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgW2dob3N0VGVtcGxhdGVdPVwidGhpcy5ncmlkLmdldERyYWdHaG9zdEN1c3RvbVRlbXBsYXRlKClcIiAocG9pbnRlcmRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aGlzLmdyaWQuZHJhZ0luZGljYXRvckljb25UZW1wbGF0ZSA/IHRoaXMuZ3JpZC5kcmFnSW5kaWNhdG9ySWNvblRlbXBsYXRlIDogdGhpcy5ncmlkLmRyYWdJbmRpY2F0b3JJY29uQmFzZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gU2VsZWN0IFJvdyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1Jvd1NlbGVjdG9yc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX2NieC1zZWxlY3Rpb24gaWd4LWdyaWRfX3RyLWFjdGlvblwiIChjbGljayk9XCJvblJvd1NlbGVjdG9yQ2xpY2soJGV2ZW50KVwiIChwb2ludGVyZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJvd1NlbGVjdG9yVGVtcGxhdGUgPyB0aGlzLmdyaWQucm93U2VsZWN0b3JUZW1wbGF0ZSA6IHJvd1NlbGVjdG9yQmFzZVRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiB2aWV3SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0lEOiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Q6IHNlbGVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzZWxlY3Q6IGRlc2VsZWN0IH19XCI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gUm93IEV4cGFuZGVyIC0tPlxuICAgIDxkaXYgIChjbGljayk9XCJleHBhbmRlckNsaWNrKCRldmVudClcIiAobW91c2Vkb3duKT0nJGV2ZW50LnByZXZlbnREZWZhdWx0KCknIFtuZ0NsYXNzXT1cImV4cGFuZGVyQ2xhc3NSZXNvbHZlZFwiICpuZ0lmPVwiaGFzQ2hpbGRyZW5cIiAjZXhwYW5kZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpY29uVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiB0aGlzIH1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGlubmVkQ29sdW1ucy5sZW5ndGggPiAwICYmIGdyaWQuaXNQaW5uaW5nVG9TdGFydFwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwaW5uZWRDZWxsc1RlbXBsYXRlOyBjb250ZXh0OiB0aGlzXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy10ZW1wbGF0ZSBpZ3hHcmlkRm9yIGxldC1jb2wgW2lneEdyaWRGb3JPZl09XCJ1bnBpbm5lZENvbHVtbnMgfCBpZ3hOb3RHcm91cGVkXCIgW2lneEZvclNjcm9sbENvbnRhaW5lcl09XCJncmlkLnBhcmVudFZpcnREaXJcIiBsZXQtY29sSW5kZXg9XCJpbmRleFwiIFtpZ3hGb3JTaXplUHJvcE5hbWVdPSdcImNhbGNQaXhlbFdpZHRoXCInIFtpZ3hGb3JTY3JvbGxPcmllbnRhdGlvbl09XCInaG9yaXpvbnRhbCdcIiBbaWd4Rm9yQ29udGFpbmVyU2l6ZV09J2dyaWQudW5waW5uZWRXaWR0aCcgW2lneEZvclRyYWNrQnldPSdncmlkLnRyYWNrQ29sdW1uQ2hhbmdlcycgI2lneERpclJlZj5cbiAgICAgICAgPGlneC1oaWVyYXJjaGljYWwtZ3JpZC1jZWxsXG4gICAgICAgICAgICBjbGFzcz1cImlneC1ncmlkX190ZCBpZ3gtZ3JpZF9fdGQtLWZ3XCJcbiAgICAgICAgICAgIFtjbGFzcy5pZ3gtZ3JpZF9fdGQtLWVkaXRlZF09XCJrZXkgfCB0cmFuc2FjdGlvblN0YXRlOmNvbC5maWVsZDpncmlkLnJvd0VkaXRhYmxlOmdyaWQudHJhbnNhY3Rpb25zOmdyaWQucGlwZVRyaWdnZXI6Z3JpZC5ncmlkQVBJLmNydWRTZXJ2aWNlLmNlbGw6Z3JpZC5ncmlkQVBJLmNydWRTZXJ2aWNlLnJvd1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImdyaWRJRCArICdfJyArIGNvbC5maWVsZCB8IGlneFN0cmluZ1JlcGxhY2U6Jy4nOidfJ1wiXG4gICAgICAgICAgICBbY2xhc3MuaWd4LWdyaWRfX3RkLS1udW1iZXJdPVwiY29sLmRhdGFUeXBlID09PSAnbnVtYmVyJyB8fCBjb2wuZGF0YVR5cGUgPT09ICdwZXJjZW50JyB8fCBjb2wuZGF0YVR5cGUgPT09ICdjdXJyZW5jeSdcIlxuICAgICAgICAgICAgW2NsYXNzLmlneC1ncmlkX190ZC0tYm9vbF09XCJjb2wuZGF0YVR5cGUgPT09ICdib29sZWFuJ1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJjb2wuY2VsbENsYXNzZXMgfCBpZ3hDZWxsU3R5bGVDbGFzc2VzOmRhdGFbY29sLmZpZWxkXTpkYXRhOmNvbC5maWVsZDp2aWV3SW5kZXg6Z3JpZC5waXBlVHJpZ2dlclwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJjb2wuY2VsbFN0eWxlcyB8IGlneENlbGxTdHlsZXM6ZGF0YVtjb2wuZmllbGRdOmRhdGE6Y29sLmZpZWxkOnZpZXdJbmRleDpncmlkLnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgICAgIFtlZGl0TW9kZV09XCJjb2wuZWRpdGFibGUgJiYgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnRhcmdldEluRWRpdChpbmRleCwgY29sLmluZGV4KVwiXG4gICAgICAgICAgICBbY29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICBbZm9ybWF0dGVyXT1cImNvbC5mb3JtYXR0ZXJcIlxuICAgICAgICAgICAgW2ludFJvd109XCJ0aGlzXCJcbiAgICAgICAgICAgIFthY3RpdmVdPVwiaXNDZWxsQWN0aXZlKGNvbC52aXNpYmxlSW5kZXgpXCJcbiAgICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImNlbGxIZWlnaHRcIlxuICAgICAgICAgICAgW3Jvd0RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cImNvbC53aWR0aFwiXG4gICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoXT1cImNvbC53aWR0aFwiXG4gICAgICAgICAgICBbc3R5bGUuZmxleC1iYXNpc109XCJjb2wud2lkdGhcIlxuICAgICAgICAgICAgW3dpZHRoXT1cImNvbC5nZXRDZWxsV2lkdGgoKVwiXG4gICAgICAgICAgICBbdmlzaWJsZUNvbHVtbkluZGV4XT1cImNvbC52aXNpYmxlSW5kZXhcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImRhdGEgfCBkYXRhTWFwcGVyOmNvbC5maWVsZDpncmlkLnBpcGVUcmlnZ2VyOmRhdGFbY29sLmZpZWxkXTpjb2wuaGFzTmVzdGVkUGF0aFwiXG4gICAgICAgICAgICBbY2VsbFRlbXBsYXRlXT1cImNvbC5ib2R5VGVtcGxhdGVcIlxuICAgICAgICAgICAgW2xhc3RTZWFyY2hJbmZvXT1cImdyaWQubGFzdFNlYXJjaEluZm9cIlxuICAgICAgICAgICAgW2NlbGxTZWxlY3Rpb25Nb2RlXT1cImdyaWQuY2VsbFNlbGVjdGlvblwiXG4gICAgICAgICAgICBbZGlzcGxheVBpbm5lZENoaXBdPVwic2hvdWxkRGlzcGxheVBpbm5lZENoaXAoY29sLnZpc2libGVJbmRleClcIj5cbiAgICAgICAgPC9pZ3gtaGllcmFyY2hpY2FsLWdyaWQtY2VsbD5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBpbm5lZENvbHVtbnMubGVuZ3RoID4gMCAmJiAhZ3JpZC5pc1Bpbm5pbmdUb1N0YXJ0XCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInBpbm5lZENlbGxzVGVtcGxhdGU7IGNvbnRleHQ6IHRoaXNcIj48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLXRlbXBsYXRlICNyb3dTZWxlY3RvckJhc2VUZW1wbGF0ZT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX19jYngtcGFkZGluZ1wiPlxuICAgICAgICAgICAgPGlneC1jaGVja2JveFxuICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGVsZXRlZFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVUcmFuc2l0aW9uc109XCJncmlkLmRpc2FibGVUcmFuc2l0aW9uc1wiXG4gICAgICAgICAgICAgICAgW2FyaWEtbGFiZWxdPVwicm93Q2hlY2tib3hBcmlhTGFiZWxcIj5cbiAgICAgICAgICAgIDwvaWd4LWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlICNwaW5uZWRDZWxsc1RlbXBsYXRlIGxldC1jb2w+XG4gICAgICAgIDxpZ3gtaGllcmFyY2hpY2FsLWdyaWQtY2VsbCAqbmdGb3I9XCJsZXQgY29sIG9mIHBpbm5lZENvbHVtbnMgfCBpZ3hOb3RHcm91cGVkXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LWdyaWRfX3RkIGlneC1ncmlkX190ZC0tZncgaWd4LWdyaWRfX3RkLS1waW5uZWRcIlxuICAgICAgICAgICAgW2NsYXNzLmlneC1ncmlkX190ZC0tZWRpdGVkXT1cImtleSB8IHRyYW5zYWN0aW9uU3RhdGU6Y29sLmZpZWxkOmdyaWQucm93RWRpdGFibGU6Z3JpZC50cmFuc2FjdGlvbnM6Z3JpZC5waXBlVHJpZ2dlcjpncmlkLmdyaWRBUEkuY3J1ZFNlcnZpY2UuY2VsbDpncmlkLmdyaWRBUEkuY3J1ZFNlcnZpY2Uucm93XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZ3JpZElEICsgJ18nICsgY29sLmZpZWxkIHwgaWd4U3RyaW5nUmVwbGFjZTonLic6J18nXCJcbiAgICAgICAgICAgIFtjbGFzcy5pZ3gtZ3JpZF9fdGQtLW51bWJlcl09XCJjb2wuZGF0YVR5cGUgPT09ICdudW1iZXInIHx8IGNvbC5kYXRhVHlwZSA9PT0gJ3BlcmNlbnQnIHx8IGNvbC5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5J1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJjb2wuY2VsbENsYXNzZXMgfCBpZ3hDZWxsU3R5bGVDbGFzc2VzOmRhdGFbY29sLmZpZWxkXTpkYXRhOmNvbC5maWVsZDp2aWV3SW5kZXg6Z3JpZC5waXBlVHJpZ2dlclwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJjb2wuY2VsbFN0eWxlcyB8IGlneENlbGxTdHlsZXM6ZGF0YVtjb2wuZmllbGRdOmRhdGE6Y29sLmZpZWxkOnZpZXdJbmRleDpncmlkLnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgICAgIFtlZGl0TW9kZV09XCJjb2wuZWRpdGFibGUgJiYgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnRhcmdldEluRWRpdChpbmRleCwgY29sLmluZGV4KVwiXG4gICAgICAgICAgICBbY29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICBbZm9ybWF0dGVyXT1cImNvbC5mb3JtYXR0ZXJcIlxuICAgICAgICAgICAgW2ludFJvd109XCJ0aGlzXCJcbiAgICAgICAgICAgIFthY3RpdmVdPVwiaXNDZWxsQWN0aXZlKGNvbC52aXNpYmxlSW5kZXgpXCJcbiAgICAgICAgICAgIFtmaXJzdFBpbm5lZF09XCJjb2wuaXNGaXJzdFBpbm5lZFwiXG4gICAgICAgICAgICBbbGFzdFBpbm5lZF09XCJjb2wuaXNMYXN0UGlubmVkXCJcbiAgICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImNlbGxIZWlnaHRcIlxuICAgICAgICAgICAgW3Jvd0RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cImNvbC53aWR0aFwiXG4gICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoXT1cImNvbC53aWR0aFwiXG4gICAgICAgICAgICBbc3R5bGUuZmxleC1iYXNpc109XCJjb2wud2lkdGhcIlxuICAgICAgICAgICAgW3N0eWxlLmxlZnRdPVwiY29sLnJpZ2h0UGlubmVkT2Zmc2V0XCJcbiAgICAgICAgICAgIFt3aWR0aF09XCJjb2wuZ2V0Q2VsbFdpZHRoKClcIlxuICAgICAgICAgICAgW3Zpc2libGVDb2x1bW5JbmRleF09XCJjb2wudmlzaWJsZUluZGV4XCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJkYXRhIHwgZGF0YU1hcHBlcjpjb2wuZmllbGQ6Z3JpZC5waXBlVHJpZ2dlcjpkYXRhW2NvbC5maWVsZF06Y29sLmhhc05lc3RlZFBhdGhcIlxuICAgICAgICAgICAgW2NlbGxUZW1wbGF0ZV09XCJjb2wuYm9keVRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtsYXN0U2VhcmNoSW5mb109XCJncmlkLmxhc3RTZWFyY2hJbmZvXCJcbiAgICAgICAgICAgIFtjZWxsU2VsZWN0aW9uTW9kZV09XCJncmlkLmNlbGxTZWxlY3Rpb25cIlxuICAgICAgICAgICAgW2Rpc3BsYXlQaW5uZWRDaGlwXT1cInNob3VsZERpc3BsYXlQaW5uZWRDaGlwKGNvbC52aXNpYmxlSW5kZXgpXCI+XG4gICAgICAgIDwvaWd4LWhpZXJhcmNoaWNhbC1ncmlkLWNlbGw+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpY2FsLXJvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvaGllcmFyY2hpY2FsLWdyaWQvaGllcmFyY2hpY2FsLXJvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvaGllcmFyY2hpY2FsLWdyaWQvaGllcmFyY2hpY2FsLXJvdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBRVosU0FBUyxFQUNULFdBQVcsRUFDZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7OztBQVNqRixNQUFNLE9BQU8sMkJBQTRCLFNBQVEsZUFBZTtJQU5oRTs7UUErQmMsa0JBQWEsR0FBRyxpQ0FBaUMsQ0FBQztRQUNsRCxtQkFBYyxHQUFHLHFCQUFxQixDQUFDO1FBcUVqRDs7O1dBR0c7UUFDSSxXQUFNLEdBQUcsR0FBRyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDO1FBRUY7OztXQUdHO1FBQ0ksYUFBUSxHQUFHLEdBQUcsRUFBRTtZQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQztLQStCTDtJQWhIRzs7T0FFRztJQUNI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QUMsc0JBQXNCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBTzVELHdCQUF3QjtzQkFEakMsU0FBUzt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFrQy9ELGFBQWE7c0JBRHZCLFdBQVc7dUJBQUMsOEJBQThCO2dCQWFoQyxXQUFXO3NCQURyQixXQUFXO3VCQUFDLGlDQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIGZvcndhcmRSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBUZW1wbGF0ZVJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneFJvd0RpcmVjdGl2ZSB9IGZyb20gJy4uL3Jvdy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZENlbGxDb21wb25lbnQgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmlkVHlwZSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHNlbGVjdG9yOiAnaWd4LWhpZXJhcmNoaWNhbC1ncmlkLXJvdycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2hpZXJhcmNoaWNhbC1yb3cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogSWd4Um93RGlyZWN0aXZlLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJZ3hIaWVyYXJjaGljYWxSb3dDb21wb25lbnQpIH1dXG59KVxuZXhwb3J0IGNsYXNzIElneEhpZXJhcmNoaWNhbFJvd0NvbXBvbmVudCBleHRlbmRzIElneFJvd0RpcmVjdGl2ZSB7XG4gICAgQFZpZXdDaGlsZCgnZXhwYW5kZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwdWJsaWMgZXhwYW5kZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgQFZpZXdDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IElneEhpZXJhcmNoaWNhbEdyaWRDZWxsQ29tcG9uZW50KSwgeyByZWFkOiBJZ3hIaWVyYXJjaGljYWxHcmlkQ2VsbENvbXBvbmVudCB9KVxuICAgIHByb3RlY3RlZCBfY2VsbHM6IFF1ZXJ5TGlzdDxJZ3hIaWVyYXJjaGljYWxHcmlkQ2VsbENvbXBvbmVudD47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdEV4cGFuZGVkVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdEV4cGFuZGVkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdEVtcHR5VGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdEVtcHR5VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdENvbGxhcHNlZFRlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRDb2xsYXBzZWRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIHByb3RlY3RlZCBleHBhbmRlckNsYXNzID0gJ2lneC1ncmlkX19oaWVyYXJjaGljYWwtZXhwYW5kZXInO1xuICAgIHByb3RlY3RlZCByb2xBY3Rpb25DbGFzcyA9ICdpZ3gtZ3JpZF9fdHItYWN0aW9uJztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGV4cGFuZGVyQ2xhc3NSZXNvbHZlZCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFtgJHt0aGlzLmV4cGFuZGVyQ2xhc3N9ICR7dGhpcy5yb2xBY3Rpb25DbGFzc31gXTogIXRoaXMucGlubmVkIHx8IHRoaXMuZGlzYWJsZWQsXG4gICAgICAgICAgICBbYCR7dGhpcy5leHBhbmRlckNsYXNzfS0tZW1wdHlgXTogdGhpcy5waW5uZWQgJiYgIXRoaXMuZGlzYWJsZWRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHZpZXdJbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCArICh0aGlzLmdyaWQucGFnaW5hdG9yPy5wYWdlIHx8IDApICogKHRoaXMuZ3JpZC5wYWdpbmF0b3I/LnBlclBhZ2UgfHwgMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSByb3cgaXMgZXhwYW5kZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IFJvd0V4cGFuZGVkID0gdGhpcy5ncmlkMS5yb3dMaXN0LmZpcnN0LmV4cGFuZGVkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZXhwYW5kZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcm93X2V4cGFuc2lvbl9zdGF0ZSh0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ci0tZXhwYW5kZWQnKVxuICAgIHB1YmxpYyBnZXQgZXhwYW5kZWRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kZWQgJiYgIXRoaXMucGlubmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzQ2hpbGRyZW4oKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZ3JpZC5jaGlsZExheW91dEtleXMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ci0taGlnaGxpZ2h0ZWQnKVxuICAgIHB1YmxpYyBnZXQgaGlnaGxpZ2h0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQgJiYgdGhpcy5ncmlkLmhpZ2hsaWdodGVkUm93SUQgPT09IHRoaXMua2V5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwYW5kZXJDbGljayhldmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy50b2dnbGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSBoaWVyYXJjaGljYWwgcm93LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQxLnJvd0xpc3QuZmlyc3QudG9nZ2xlKClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlKCkge1xuICAgICAgICBpZiAodGhpcy5hZGRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5kRWRpdCh0aGlzLmdyaWQucm9vdEdyaWQpO1xuICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS5zZXRfcm93X2V4cGFuc2lvbl9zdGF0ZSh0aGlzLmtleSwgIXRoaXMuZXhwYW5kZWQpO1xuICAgICAgICB0aGlzLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5ncmlkLnNlbGVjdFJvd3MoW3RoaXMua2V5XSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzZWxlY3QgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZ3JpZC5kZXNlbGVjdFJvd3MoW3RoaXMua2V5XSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGljb25UZW1wbGF0ZSgpIHtcbiAgICAgICAgbGV0IGV4cGFuZGFibGUgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5ncmlkLmhhc0NoaWxkcmVuS2V5KSB7XG4gICAgICAgICAgICBleHBhbmRhYmxlID0gdGhpcy5kYXRhW3RoaXMuZ3JpZC5oYXNDaGlsZHJlbktleV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFleHBhbmRhYmxlIHx8ICh0aGlzLnBpbm5lZCAmJiAhdGhpcy5kaXNhYmxlZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRFbXB0eVRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnJvd0V4cGFuZGVkSW5kaWNhdG9yVGVtcGxhdGUgfHwgdGhpcy5kZWZhdWx0RXhwYW5kZWRUZW1wbGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQucm93Q29sbGFwc2VkSW5kaWNhdG9yVGVtcGxhdGUgfHwgdGhpcy5kZWZhdWx0Q29sbGFwc2VkVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPOiBjb25zaWRlciBtb3ZpbmcgaW50byBDUlVEXG4gICAgcHJvdGVjdGVkIGVuZEVkaXQoZ3JpZDogR3JpZFR5cGUpIHtcbiAgICAgICAgaWYgKGdyaWQuZ3JpZEFQSS5jcnVkU2VydmljZS5jZWxsSW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgZ3JpZC5ncmlkQVBJLmNydWRTZXJ2aWNlLmVuZEVkaXQoKTtcbiAgICAgICAgfVxuICAgICAgICBncmlkLmdyaWRBUEkuZ2V0Q2hpbGRHcmlkcyh0cnVlKS5mb3JFYWNoKGcgPT4ge1xuICAgICAgICAgICAgaWYgKGcuZ3JpZEFQSS5jcnVkU2VydmljZS5jZWxsSW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgICAgIGcuZ3JpZEFQSS5jcnVkU2VydmljZS5lbmRFZGl0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9J2FkZFJvd1VJID8gYWRkVGVtcCA6IGRlZmF1bHRUZW1wJz48L25nLWNvbnRhaW5lcj5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEV4cGFuZGVkVGVtcGxhdGU+XG4gICAgPGlneC1pY29uIFthY3RpdmVdPSchYWRkZWQnPmV4cGFuZF9tb3JlPC9pZ3gtaWNvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdENvbGxhcHNlZFRlbXBsYXRlPlxuICAgIDxpZ3gtaWNvbiBbYWN0aXZlXT0nIWFkZGVkJz5jaGV2cm9uX3JpZ2h0PC9pZ3gtaWNvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEVtcHR5VGVtcGxhdGU+XG4gICAgPGlneC1pY29uPjwvaWd4LWljb24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FkZFRlbXA+XG4gICAgPGRpdiBjbGFzcz0naWd4LWdyaWRfX3RyLS1pbm5lcicgW2NsYXNzLmlneC1ncmlkX190ci0tYWRkLWFuaW1hdGVdPSd0cmlnZ2VyQWRkQW5pbWF0aW9uQ2xhc3MnIChhbmltYXRpb25lbmQpPSdhbmltYXRpb25FbmRIYW5kbGVyKCknPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PSdkZWZhdWx0VGVtcCc+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0VGVtcD5cbiAgICA8IS0tIERyYWcgaW5kaWNhdG9yIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3dEcmFnZ2FibGVcIj5cbiAgICAgICAgPGRpdiBbY2xhc3NdPVwicmVzb2x2ZURyYWdJbmRpY2F0b3JDbGFzc2VzXCIgW2lneFJvd0RyYWddPVwidGhpc1wiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBbZ2hvc3RUZW1wbGF0ZV09XCJ0aGlzLmdyaWQuZ2V0RHJhZ0dob3N0Q3VzdG9tVGVtcGxhdGUoKVwiIChwb2ludGVyZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRoaXMuZ3JpZC5kcmFnSW5kaWNhdG9ySWNvblRlbXBsYXRlID8gdGhpcy5ncmlkLmRyYWdJbmRpY2F0b3JJY29uVGVtcGxhdGUgOiB0aGlzLmdyaWQuZHJhZ0luZGljYXRvckljb25CYXNlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBTZWxlY3QgUm93IC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93Um93U2VsZWN0b3JzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fY2J4LXNlbGVjdGlvbiBpZ3gtZ3JpZF9fdHItYWN0aW9uXCIgKGNsaWNrKT1cIm9uUm93U2VsZWN0b3JDbGljaygkZXZlbnQpXCIgKHBvaW50ZXJkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQucm93U2VsZWN0b3JUZW1wbGF0ZSA/IHRoaXMuZ3JpZC5yb3dTZWxlY3RvclRlbXBsYXRlIDogcm93U2VsZWN0b3JCYXNlVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHZpZXdJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93SUQ6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdDogc2VsZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNlbGVjdDogZGVzZWxlY3QgfX1cIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBSb3cgRXhwYW5kZXIgLS0+XG4gICAgPGRpdiAgKGNsaWNrKT1cImV4cGFuZGVyQ2xpY2soJGV2ZW50KVwiIChtb3VzZWRvd24pPSckZXZlbnQucHJldmVudERlZmF1bHQoKScgW25nQ2xhc3NdPVwiZXhwYW5kZXJDbGFzc1Jlc29sdmVkXCIgKm5nSWY9XCJoYXNDaGlsZHJlblwiICNleHBhbmRlcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImljb25UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHRoaXMgfVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwaW5uZWRDb2x1bW5zLmxlbmd0aCA+IDAgJiYgZ3JpZC5pc1Bpbm5pbmdUb1N0YXJ0XCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInBpbm5lZENlbGxzVGVtcGxhdGU7IGNvbnRleHQ6IHRoaXNcIj48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLXRlbXBsYXRlIGlneEdyaWRGb3IgbGV0LWNvbCBbaWd4R3JpZEZvck9mXT1cInVucGlubmVkQ29sdW1ucyB8IGlneE5vdEdyb3VwZWRcIiBbaWd4Rm9yU2Nyb2xsQ29udGFpbmVyXT1cImdyaWQucGFyZW50VmlydERpclwiIGxldC1jb2xJbmRleD1cImluZGV4XCIgW2lneEZvclNpemVQcm9wTmFtZV09J1wiY2FsY1BpeGVsV2lkdGhcIicgW2lneEZvclNjcm9sbE9yaWVudGF0aW9uXT1cIidob3Jpem9udGFsJ1wiIFtpZ3hGb3JDb250YWluZXJTaXplXT0nZ3JpZC51bnBpbm5lZFdpZHRoJyBbaWd4Rm9yVHJhY2tCeV09J2dyaWQudHJhY2tDb2x1bW5DaGFuZ2VzJyAjaWd4RGlyUmVmPlxuICAgICAgICA8aWd4LWhpZXJhcmNoaWNhbC1ncmlkLWNlbGxcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LWdyaWRfX3RkIGlneC1ncmlkX190ZC0tZndcIlxuICAgICAgICAgICAgW2NsYXNzLmlneC1ncmlkX190ZC0tZWRpdGVkXT1cImtleSB8IHRyYW5zYWN0aW9uU3RhdGU6Y29sLmZpZWxkOmdyaWQucm93RWRpdGFibGU6Z3JpZC50cmFuc2FjdGlvbnM6Z3JpZC5waXBlVHJpZ2dlcjpncmlkLmdyaWRBUEkuY3J1ZFNlcnZpY2UuY2VsbDpncmlkLmdyaWRBUEkuY3J1ZFNlcnZpY2Uucm93XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZ3JpZElEICsgJ18nICsgY29sLmZpZWxkIHwgaWd4U3RyaW5nUmVwbGFjZTonLic6J18nXCJcbiAgICAgICAgICAgIFtjbGFzcy5pZ3gtZ3JpZF9fdGQtLW51bWJlcl09XCJjb2wuZGF0YVR5cGUgPT09ICdudW1iZXInIHx8IGNvbC5kYXRhVHlwZSA9PT0gJ3BlcmNlbnQnIHx8IGNvbC5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5J1wiXG4gICAgICAgICAgICBbY2xhc3MuaWd4LWdyaWRfX3RkLS1ib29sXT1cImNvbC5kYXRhVHlwZSA9PT0gJ2Jvb2xlYW4nXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbC5jZWxsQ2xhc3NlcyB8IGlneENlbGxTdHlsZUNsYXNzZXM6ZGF0YVtjb2wuZmllbGRdOmRhdGE6Y29sLmZpZWxkOnZpZXdJbmRleDpncmlkLnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cImNvbC5jZWxsU3R5bGVzIHwgaWd4Q2VsbFN0eWxlczpkYXRhW2NvbC5maWVsZF06ZGF0YTpjb2wuZmllbGQ6dmlld0luZGV4OmdyaWQucGlwZVRyaWdnZXJcIlxuICAgICAgICAgICAgW2VkaXRNb2RlXT1cImNvbC5lZGl0YWJsZSAmJiB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UudGFyZ2V0SW5FZGl0KGluZGV4LCBjb2wuaW5kZXgpXCJcbiAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sXCJcbiAgICAgICAgICAgIFtmb3JtYXR0ZXJdPVwiY29sLmZvcm1hdHRlclwiXG4gICAgICAgICAgICBbaW50Um93XT1cInRoaXNcIlxuICAgICAgICAgICAgW2FjdGl2ZV09XCJpc0NlbGxBY3RpdmUoY29sLnZpc2libGVJbmRleClcIlxuICAgICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiY2VsbEhlaWdodFwiXG4gICAgICAgICAgICBbcm93RGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzXT1cImNvbC53aWR0aFwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiY29sLmdldENlbGxXaWR0aCgpXCJcbiAgICAgICAgICAgIFt2aXNpYmxlQ29sdW1uSW5kZXhdPVwiY29sLnZpc2libGVJbmRleFwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiZGF0YSB8IGRhdGFNYXBwZXI6Y29sLmZpZWxkOmdyaWQucGlwZVRyaWdnZXI6ZGF0YVtjb2wuZmllbGRdOmNvbC5oYXNOZXN0ZWRQYXRoXCJcbiAgICAgICAgICAgIFtjZWxsVGVtcGxhdGVdPVwiY29sLmJvZHlUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbGFzdFNlYXJjaEluZm9dPVwiZ3JpZC5sYXN0U2VhcmNoSW5mb1wiXG4gICAgICAgICAgICBbY2VsbFNlbGVjdGlvbk1vZGVdPVwiZ3JpZC5jZWxsU2VsZWN0aW9uXCJcbiAgICAgICAgICAgIFtkaXNwbGF5UGlubmVkQ2hpcF09XCJzaG91bGREaXNwbGF5UGlubmVkQ2hpcChjb2wudmlzaWJsZUluZGV4KVwiPlxuICAgICAgICA8L2lneC1oaWVyYXJjaGljYWwtZ3JpZC1jZWxsPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGlubmVkQ29sdW1ucy5sZW5ndGggPiAwICYmICFncmlkLmlzUGlubmluZ1RvU3RhcnRcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwicGlubmVkQ2VsbHNUZW1wbGF0ZTsgY29udGV4dDogdGhpc1wiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctdGVtcGxhdGUgI3Jvd1NlbGVjdG9yQmFzZVRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX2NieC1wYWRkaW5nXCI+XG4gICAgICAgICAgICA8aWd4LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkZWxldGVkXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZVRyYW5zaXRpb25zXT1cImdyaWQuZGlzYWJsZVRyYW5zaXRpb25zXCJcbiAgICAgICAgICAgICAgICBbYXJpYS1sYWJlbF09XCJyb3dDaGVja2JveEFyaWFMYWJlbFwiPlxuICAgICAgICAgICAgPC9pZ3gtY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgI3Bpbm5lZENlbGxzVGVtcGxhdGUgbGV0LWNvbD5cbiAgICAgICAgPGlneC1oaWVyYXJjaGljYWwtZ3JpZC1jZWxsICpuZ0Zvcj1cImxldCBjb2wgb2YgcGlubmVkQ29sdW1ucyB8IGlneE5vdEdyb3VwZWRcIlxuICAgICAgICAgICAgY2xhc3M9XCJpZ3gtZ3JpZF9fdGQgaWd4LWdyaWRfX3RkLS1mdyBpZ3gtZ3JpZF9fdGQtLXBpbm5lZFwiXG4gICAgICAgICAgICBbY2xhc3MuaWd4LWdyaWRfX3RkLS1lZGl0ZWRdPVwia2V5IHwgdHJhbnNhY3Rpb25TdGF0ZTpjb2wuZmllbGQ6Z3JpZC5yb3dFZGl0YWJsZTpncmlkLnRyYW5zYWN0aW9uczpncmlkLnBpcGVUcmlnZ2VyOmdyaWQuZ3JpZEFQSS5jcnVkU2VydmljZS5jZWxsOmdyaWQuZ3JpZEFQSS5jcnVkU2VydmljZS5yb3dcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJncmlkSUQgKyAnXycgKyBjb2wuZmllbGQgfCBpZ3hTdHJpbmdSZXBsYWNlOicuJzonXydcIlxuICAgICAgICAgICAgW2NsYXNzLmlneC1ncmlkX190ZC0tbnVtYmVyXT1cImNvbC5kYXRhVHlwZSA9PT0gJ251bWJlcicgfHwgY29sLmRhdGFUeXBlID09PSAncGVyY2VudCcgfHwgY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbC5jZWxsQ2xhc3NlcyB8IGlneENlbGxTdHlsZUNsYXNzZXM6ZGF0YVtjb2wuZmllbGRdOmRhdGE6Y29sLmZpZWxkOnZpZXdJbmRleDpncmlkLnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cImNvbC5jZWxsU3R5bGVzIHwgaWd4Q2VsbFN0eWxlczpkYXRhW2NvbC5maWVsZF06ZGF0YTpjb2wuZmllbGQ6dmlld0luZGV4OmdyaWQucGlwZVRyaWdnZXJcIlxuICAgICAgICAgICAgW2VkaXRNb2RlXT1cImNvbC5lZGl0YWJsZSAmJiB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UudGFyZ2V0SW5FZGl0KGluZGV4LCBjb2wuaW5kZXgpXCJcbiAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sXCJcbiAgICAgICAgICAgIFtmb3JtYXR0ZXJdPVwiY29sLmZvcm1hdHRlclwiXG4gICAgICAgICAgICBbaW50Um93XT1cInRoaXNcIlxuICAgICAgICAgICAgW2FjdGl2ZV09XCJpc0NlbGxBY3RpdmUoY29sLnZpc2libGVJbmRleClcIlxuICAgICAgICAgICAgW2ZpcnN0UGlubmVkXT1cImNvbC5pc0ZpcnN0UGlubmVkXCJcbiAgICAgICAgICAgIFtsYXN0UGlubmVkXT1cImNvbC5pc0xhc3RQaW5uZWRcIlxuICAgICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiY2VsbEhlaWdodFwiXG4gICAgICAgICAgICBbcm93RGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzXT1cImNvbC53aWR0aFwiXG4gICAgICAgICAgICBbc3R5bGUubGVmdF09XCJjb2wucmlnaHRQaW5uZWRPZmZzZXRcIlxuICAgICAgICAgICAgW3dpZHRoXT1cImNvbC5nZXRDZWxsV2lkdGgoKVwiXG4gICAgICAgICAgICBbdmlzaWJsZUNvbHVtbkluZGV4XT1cImNvbC52aXNpYmxlSW5kZXhcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImRhdGEgfCBkYXRhTWFwcGVyOmNvbC5maWVsZDpncmlkLnBpcGVUcmlnZ2VyOmRhdGFbY29sLmZpZWxkXTpjb2wuaGFzTmVzdGVkUGF0aFwiXG4gICAgICAgICAgICBbY2VsbFRlbXBsYXRlXT1cImNvbC5ib2R5VGVtcGxhdGVcIlxuICAgICAgICAgICAgW2xhc3RTZWFyY2hJbmZvXT1cImdyaWQubGFzdFNlYXJjaEluZm9cIlxuICAgICAgICAgICAgW2NlbGxTZWxlY3Rpb25Nb2RlXT1cImdyaWQuY2VsbFNlbGVjdGlvblwiXG4gICAgICAgICAgICBbZGlzcGxheVBpbm5lZENoaXBdPVwic2hvdWxkRGlzcGxheVBpbm5lZENoaXAoY29sLnZpc2libGVJbmRleClcIj5cbiAgICAgICAgPC9pZ3gtaGllcmFyY2hpY2FsLWdyaWQtY2VsbD5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -21,13 +21,13 @@ import * as i5 from "../filtering/grid-filtering.service";
21
21
  import * as i6 from "../summaries/grid-summary.service";
22
22
  import * as i7 from "./row-island-api.service";
23
23
  import * as i8 from "../../core/utils";
24
- import * as i9 from "../../services/public_api";
24
+ import * as i9 from "./hierarchical-grid-api.service";
25
+ import * as i10 from "../../services/public_api";
25
26
  export class IgxRowIslandComponent extends IgxHierarchicalGridBaseDirective {
26
- constructor(selectionService, colResizingService, gridAPI, transactionFactory, elementRef, zone, document, cdr, resolver, differs, viewRef, moduleRef, factoryResolver, injector, appRef, navigation, filteringService, overlayService, summaryService, _displayDensityOptions, rowIslandAPI, localeId, platform) {
27
- super(selectionService, colResizingService, gridAPI, transactionFactory, elementRef, zone, document, cdr, resolver, differs, viewRef, appRef, moduleRef, factoryResolver, injector, navigation, filteringService, overlayService, summaryService, _displayDensityOptions, localeId, platform);
27
+ constructor(selectionService, colResizingService, gridAPI, transactionFactory, elementRef, zone, document, cdr, resolver, differs, viewRef, moduleRef, injector, appRef, navigation, filteringService, overlayService, summaryService, _displayDensityOptions, rowIslandAPI, localeId, platform) {
28
+ super(selectionService, colResizingService, gridAPI, transactionFactory, elementRef, zone, document, cdr, resolver, differs, viewRef, appRef, moduleRef, injector, navigation, filteringService, overlayService, summaryService, _displayDensityOptions, localeId, platform);
28
29
  this.selectionService = selectionService;
29
30
  this.colResizingService = colResizingService;
30
- this.gridAPI = gridAPI;
31
31
  this.transactionFactory = transactionFactory;
32
32
  this.document = document;
33
33
  this.overlayService = overlayService;
@@ -84,7 +84,6 @@ export class IgxRowIslandComponent extends IgxHierarchicalGridBaseDirective {
84
84
  this.rootGrid = null;
85
85
  this.layout_id = `igx-row-island-`;
86
86
  this.isInit = false;
87
- this.hgridAPI = gridAPI;
88
87
  }
89
88
  /**
90
89
  * Sets if all immediate children of the grids for this `IgxRowIslandComponent` should be expanded/collapsed.
@@ -153,7 +152,7 @@ export class IgxRowIslandComponent extends IgxHierarchicalGridBaseDirective {
153
152
  */
154
153
  ngOnInit() {
155
154
  this.filteringService.grid = this;
156
- this.rootGrid = this.hgridAPI.grid;
155
+ this.rootGrid = this.gridAPI.grid;
157
156
  this.rowIslandAPI.rowIsland = this;
158
157
  this.ri_columnListDiffer = this.differs.find([]).create(null);
159
158
  }
@@ -205,7 +204,7 @@ export class IgxRowIslandComponent extends IgxHierarchicalGridBaseDirective {
205
204
  this.parentIsland.rowIslandAPI.registerChildRowIsland(this);
206
205
  }
207
206
  else {
208
- this.rootGrid.hgridAPI.registerChildRowIsland(this);
207
+ this.rootGrid.gridAPI.registerChildRowIsland(this);
209
208
  }
210
209
  this._init = false;
211
210
  // Create the child toolbar if the parent island has a toolbar definition
@@ -240,12 +239,12 @@ export class IgxRowIslandComponent extends IgxHierarchicalGridBaseDirective {
240
239
  if (this.parentIsland) {
241
240
  this.getGridsForIsland(this.key).forEach(grid => {
242
241
  this.cleanGridState(grid);
243
- grid.hgridAPI.unsetChildRowIsland(this);
242
+ grid.gridAPI.unsetChildRowIsland(this);
244
243
  });
245
244
  this.parentIsland.rowIslandAPI.unsetChildRowIsland(this);
246
245
  }
247
246
  else {
248
- this.rootGrid.hgridAPI.unsetChildRowIsland(this);
247
+ this.rootGrid.gridAPI.unsetChildRowIsland(this);
249
248
  this.cleanGridState(this.rootGrid);
250
249
  }
251
250
  }
@@ -299,7 +298,7 @@ export class IgxRowIslandComponent extends IgxHierarchicalGridBaseDirective {
299
298
  grid.onRowIslandChange();
300
299
  }
301
300
  }
302
- IgxRowIslandComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: IgxRowIslandComponent, deps: [{ token: i1.IgxGridSelectionService }, { token: i2.IgxColumnResizingService }, { token: IGX_GRID_SERVICE_BASE }, { token: i3.IgxFlatTransactionFactory }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: DOCUMENT }, { token: i0.ChangeDetectorRef }, { token: i0.ComponentFactoryResolver }, { token: i0.IterableDiffers }, { token: i0.ViewContainerRef }, { token: i0.NgModuleRef }, { token: i0.ComponentFactoryResolver }, { token: i0.Injector }, { token: i0.ApplicationRef }, { token: i4.IgxHierarchicalGridNavigationService }, { token: i5.IgxFilteringService }, { token: IgxOverlayService }, { token: i6.IgxGridSummaryService }, { token: DisplayDensityToken, optional: true }, { token: i7.IgxRowIslandAPIService }, { token: LOCALE_ID }, { token: i8.PlatformUtil }], target: i0.ɵɵFactoryTarget.Component });
301
+ IgxRowIslandComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: IgxRowIslandComponent, deps: [{ token: i1.IgxGridSelectionService }, { token: i2.IgxColumnResizingService }, { token: IGX_GRID_SERVICE_BASE }, { token: i3.IgxFlatTransactionFactory }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: DOCUMENT }, { token: i0.ChangeDetectorRef }, { token: i0.ComponentFactoryResolver }, { token: i0.IterableDiffers }, { token: i0.ViewContainerRef }, { token: i0.NgModuleRef }, { token: i0.Injector }, { token: i0.ApplicationRef }, { token: i4.IgxHierarchicalGridNavigationService }, { token: i5.IgxFilteringService }, { token: IgxOverlayService }, { token: i6.IgxGridSummaryService }, { token: DisplayDensityToken, optional: true }, { token: i7.IgxRowIslandAPIService }, { token: LOCALE_ID }, { token: i8.PlatformUtil }], target: i0.ɵɵFactoryTarget.Component });
303
302
  IgxRowIslandComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: IgxRowIslandComponent, selector: "igx-row-island", inputs: { key: "key", expandChildren: "expandChildren" }, outputs: { layoutChange: "layoutChange", gridCreated: "gridCreated", gridInitialized: "gridInitialized" }, providers: [
304
303
  IgxRowIslandAPIService,
305
304
  IgxFilteringService,
@@ -317,13 +316,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
317
316
  IgxGridSelectionService
318
317
  ]
319
318
  }]
320
- }], ctorParameters: function () { return [{ type: i1.IgxGridSelectionService }, { type: i2.IgxColumnResizingService }, { type: undefined, decorators: [{
319
+ }], ctorParameters: function () { return [{ type: i1.IgxGridSelectionService }, { type: i2.IgxColumnResizingService }, { type: i9.IgxHierarchicalGridAPIService, decorators: [{
321
320
  type: Inject,
322
321
  args: [IGX_GRID_SERVICE_BASE]
323
322
  }] }, { type: i3.IgxFlatTransactionFactory }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: undefined, decorators: [{
324
323
  type: Inject,
325
324
  args: [DOCUMENT]
326
- }] }, { type: i0.ChangeDetectorRef }, { type: i0.ComponentFactoryResolver }, { type: i0.IterableDiffers }, { type: i0.ViewContainerRef }, { type: i0.NgModuleRef }, { type: i0.ComponentFactoryResolver }, { type: i0.Injector }, { type: i0.ApplicationRef }, { type: i4.IgxHierarchicalGridNavigationService }, { type: i5.IgxFilteringService }, { type: i9.IgxOverlayService, decorators: [{
325
+ }] }, { type: i0.ChangeDetectorRef }, { type: i0.ComponentFactoryResolver }, { type: i0.IterableDiffers }, { type: i0.ViewContainerRef }, { type: i0.NgModuleRef }, { type: i0.Injector }, { type: i0.ApplicationRef }, { type: i4.IgxHierarchicalGridNavigationService }, { type: i5.IgxFilteringService }, { type: i10.IgxOverlayService, decorators: [{
327
326
  type: Inject,
328
327
  args: [IgxOverlayService]
329
328
  }] }, { type: i6.IgxGridSummaryService }, { type: undefined, decorators: [{
@@ -360,4 +359,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
360
359
  }], expandChildren: [{
361
360
  type: Input
362
361
  }] } });
363
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWlzbGFuZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvaGllcmFyY2hpY2FsLWdyaWQvcm93LWlzbGFuZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLGVBQWUsRUFFZixZQUFZLEVBQ1osTUFBTSxFQUVOLEtBQUssRUFHTCxTQUFTLEVBTVQsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUVkLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQTBCLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFeEYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFdEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR2xFLE9BQU8sRUFBNkIscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RixPQUFPLEVBQUUsdUJBQXVCLEVBQWlDLE1BQU0sbUJBQW1CLENBQUM7QUFDM0YsT0FBTyxFQUFFLHVCQUF1QixF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QUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUlyRCx1QkFBdUI7c0JBRDdCLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUluRCxZQUFZO3NCQURsQixlQUFlO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUU7Z0JBT3hGLFlBQVk7c0JBRGxCLE1BQU07Z0JBZ0JBLFdBQVc7c0JBRGpCLE1BQU07Z0JBaUJBLGVBQWU7c0JBRHJCLE1BQU07Z0JBZ0NJLGNBQWM7c0JBRHhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBBcHBsaWNhdGlvblJlZixcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIEl0ZXJhYmxlQ2hhbmdlUmVjb3JkLFxuICAgIEl0ZXJhYmxlRGlmZmVycyxcbiAgICBMT0NBTEVfSUQsXG4gICAgTmdNb2R1bGVSZWYsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbEdyaWRBUElTZXJ2aWNlIH0gZnJvbSAnLi9oaWVyYXJjaGljYWwtZ3JpZC1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJZ3hGaWx0ZXJpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsdGVyaW5nL2dyaWQtZmlsdGVyaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgSURpc3BsYXlEZW5zaXR5T3B0aW9ucywgRGlzcGxheURlbnNpdHlUb2tlbiB9IGZyb20gJy4uLy4uL2NvcmUvZGlzcGxheURlbnNpdHknO1xuaW1wb3J0IHsgSWd4R3JpZFN1bW1hcnlTZXJ2aWNlIH0gZnJvbSAnLi4vc3VtbWFyaWVzL2dyaWQtc3VtbWFyeS5zZXJ2aWNlJztcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbEdyaWRCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi9oaWVyYXJjaGljYWwtZ3JpZC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hIaWVyYXJjaGljYWxHcmlkTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1ncmlkLW5hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlbGVjdGlvbi9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hPdmVybGF5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgZmlyc3QsIGZpbHRlciwgdGFrZVVudGlsLCBwbHVjayB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElneENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4uL2NvbHVtbnMvY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hSb3dJc2xhbmRBUElTZXJ2aWNlIH0gZnJvbSAnLi9yb3ctaXNsYW5kLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4Q29sdW1uUmVzaXppbmdTZXJ2aWNlIH0gZnJvbSAnLi4vcmVzaXppbmcvcmVzaXppbmcuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkU2VydmljZVR5cGUsIEdyaWRUeXBlLCBJR1hfR1JJRF9TRVJWSUNFX0JBU0UgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4R3JpZFRvb2xiYXJEaXJlY3RpdmUsIElneEdyaWRUb29sYmFyVGVtcGxhdGVDb250ZXh0IH0gZnJvbSAnLi4vdG9vbGJhci9jb21tb24nO1xuaW1wb3J0IHsgSWd4QWN0aW9uU3RyaXBDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hY3Rpb24tc3RyaXAvYWN0aW9uLXN0cmlwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hQYWdpbmF0b3JEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9wYWdpbmF0b3IvcGFnaW5hdG9yLWludGVyZmFjZXMnO1xuaW1wb3J0IHsgSWd4RmxhdFRyYW5zYWN0aW9uRmFjdG9yeSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uLWZhY3Rvcnkuc2VydmljZSc7XG5pbXBvcnQgeyBJR3JpZENyZWF0ZWRFdmVudEFyZ3MgfSBmcm9tICcuL2V2ZW50cyc7XG5cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHNlbGVjdG9yOiAnaWd4LXJvdy1pc2xhbmQnLFxuICAgIHRlbXBsYXRlOiBgYCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgSWd4Um93SXNsYW5kQVBJU2VydmljZSxcbiAgICAgICAgSWd4RmlsdGVyaW5nU2VydmljZSxcbiAgICAgICAgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2VcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIElneFJvd0lzbGFuZENvbXBvbmVudCBleHRlbmRzIElneEhpZXJhcmNoaWNhbEdyaWRCYXNlRGlyZWN0aXZlXG4gICAgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBrZXkgb2YgdGhlIHJvdyBpc2xhbmQgYnkgd2hpY2ggY2hpbGQgZGF0YSB3b3VsZCBiZSB0YWtlbiBmcm9tIHRoZSByb3cgZGF0YSBpZiBzdWNoIGlzIHByb3ZpZGVkLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWhpZXJhcmNoaWNhbC1ncmlkIFtkYXRhXT1cIkRhdGFcIiBbYXV0b0dlbmVyYXRlXT1cInRydWVcIj5cbiAgICAgKiAgICAgIDxpZ3gtcm93LWlzbGFuZCBba2V5XT1cIidjaGlsZERhdGEnXCI+XG4gICAgICogICAgICAgICAgPCEtLSAuLi4gLS0+XG4gICAgICogICAgICA8L2lneC1yb3ctaXNsYW5kPlxuICAgICAqIDwvaWd4LWhpZXJhcmNoaWNhbC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneFJvd0lzbGFuZENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGtleTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4Um93SXNsYW5kQ29tcG9uZW50LCB7IHJlYWQ6IElneFJvd0lzbGFuZENvbXBvbmVudCwgZGVzY2VuZGFudHM6IGZhbHNlIH0pXG4gICAgcHVibGljIGNoaWxkcmVuID0gbmV3IFF1ZXJ5TGlzdDxJZ3hSb3dJc2xhbmRDb21wb25lbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hDb2x1bW5Db21wb25lbnQsIHsgcmVhZDogSWd4Q29sdW1uQ29tcG9uZW50LCBkZXNjZW5kYW50czogZmFsc2UgfSlcbiAgICBwdWJsaWMgY2hpbGRDb2x1bW5zID0gbmV3IFF1ZXJ5TGlzdDxJZ3hDb2x1bW5Db21wb25lbnQ+KCk7XG5cbiAgICBAQ29udGVudENoaWxkKElneEdyaWRUb29sYmFyRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHVibGljIGlzbGFuZFRvb2xiYXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8SWd4R3JpZFRvb2xiYXJUZW1wbGF0ZUNvbnRleHQ+O1xuXG4gICAgQENvbnRlbnRDaGlsZChJZ3hQYWdpbmF0b3JEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBwdWJsaWMgaXNsYW5kUGFnaW5hdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAQ29udGVudENoaWxkcmVuKElneEFjdGlvblN0cmlwQ29tcG9uZW50LCB7IHJlYWQ6IElneEFjdGlvblN0cmlwQ29tcG9uZW50LCBkZXNjZW5kYW50czogZmFsc2UgfSlcbiAgICBwdWJsaWMgYWN0aW9uU3RyaXBzOiBRdWVyeUxpc3Q8SWd4QWN0aW9uU3RyaXBDb21wb25lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBsYXlvdXRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGVtbWl0ZWQgd2hlbiBhIGdyaWQgaXMgYmVpbmcgY3JlYXRlZCBiYXNlZCBvbiB0aGlzIHJvdyBpc2xhbmQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtaGllcmFyY2hpY2FsLWdyaWQgW2RhdGFdPVwiRGF0YVwiIFthdXRvR2VuZXJhdGVdPVwidHJ1ZVwiPlxuICAgICAqICAgICAgPGlneC1yb3ctaXNsYW5kIFtrZXldPVwiJ2NoaWxkRGF0YSdcIiAoZ3JpZENyZWF0ZWQpPVwiZ3JpZENyZWF0ZWQoJGV2ZW50KVwiICNyb3dJc2xhbmQ+XG4gICAgICogICAgICAgICAgPCEtLSAuLi4gLS0+XG4gICAgICogICAgICA8L2lneC1yb3ctaXNsYW5kPlxuICAgICAqIDwvaWd4LWhpZXJhcmNoaWNhbC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneFJvd0lzbGFuZENvbXBvbmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBncmlkQ3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUdyaWRDcmVhdGVkRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBhZnRlciBhIGdyaWQgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgZm9yIHRoaXMgcm93IGlzbGFuZC5cbiAgICAgKiBUaGUgZW1pdHRpbmcgaXMgZG9uZSBpbiBgbmdBZnRlclZpZXdJbml0YC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1oaWVyYXJjaGljYWwtZ3JpZCBbZGF0YV09XCJEYXRhXCIgW2F1dG9HZW5lcmF0ZV09XCJ0cnVlXCI+XG4gICAgICogICAgICA8aWd4LXJvdy1pc2xhbmQgW2tleV09XCInY2hpbGREYXRhJ1wiIChncmlkSW5pdGlhbGl6ZWQpPVwiZ3JpZEluaXRpYWxpemVkKCRldmVudClcIiAjcm93SXNsYW5kPlxuICAgICAqICAgICAgICAgIDwhLS0gLi4uIC0tPlxuICAgICAqICAgICAgPC9pZ3gtcm93LWlzbGFuZD5cbiAgICAgKiA8L2lneC1oaWVyYXJjaGljYWwtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hSb3dJc2xhbmRDb21wb25lbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgZ3JpZEluaXRpYWxpemVkID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZENyZWF0ZWRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGluaXRpYWxDaGFuZ2VzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHJvb3RHcmlkID0gbnVsbDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGF0YTogYW55W10gfCBudWxsO1xuICAgIHB1YmxpYyByZWFkb25seSBmaWx0ZXJlZERhdGE6IGFueVtdO1xuXG4gICAgcHJpdmF0ZSByaV9jb2x1bW5MaXN0RGlmZmVyO1xuICAgIHByaXZhdGUgbGF5b3V0X2lkID0gYGlneC1yb3ctaXNsYW5kLWA7XG4gICAgcHJpdmF0ZSBpc0luaXQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgaWYgYWxsIGltbWVkaWF0ZSBjaGlsZHJlbiBvZiB0aGUgZ3JpZHMgZm9yIHRoaXMgYElneFJvd0lzbGFuZENvbXBvbmVudGAgc2hvdWxkIGJlIGV4cGFuZGVkL2NvbGxhcHNlZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1oaWVyYXJjaGljYWwtZ3JpZCBbZGF0YV09XCJEYXRhXCIgW2F1dG9HZW5lcmF0ZV09XCJ0cnVlXCI+XG4gICAgICogICAgICA8aWd4LXJvdy1pc2xhbmQgW2tleV09XCInY2hpbGREYXRhJ1wiIFtleHBhbmRDaGlsZHJlbl09XCJ0cnVlXCIgI3Jvd0lzbGFuZD5cbiAgICAgKiAgICAgICAgICA8IS0tIC4uLiAtLT5cbiAgICAgKiAgICAgIDwvaWd4LXJvdy1pc2xhbmQ+XG4gICAgICogPC9pZ3gtaGllcmFyY2hpY2FsLWdyaWQ+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Um93SXNsYW5kQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGV4cGFuZENoaWxkcmVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRFeHBhbmRTdGF0ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnJvd0lzbGFuZEFQSS5nZXRDaGlsZEdyaWRzKCkuZm9yRWFjaCgoZ3JpZCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY29udGFpbnMoZ3JpZC5uYXRpdmVFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIC8vIERldGVjdCBjaGFuZ2VzIHJpZ2h0IGF3YXkgaWYgdGhlIGdyaWQgaXMgdmlzaWJsZVxuICAgICAgICAgICAgICAgIGdyaWQuZXhwYW5kQ2hpbGRyZW4gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBncmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEVsc2UgZGVmZXIgdGhlIGRldGVjdGlvbiBvbiBjaGFuZ2VzIHdoZW4gdGhlIGdyaWQgZ2V0cyBpbnRvIHZpZXcgZm9yIHBlcmZvcm1hbmNlLlxuICAgICAgICAgICAgICAgIGdyaWQudXBkYXRlT25SZW5kZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGlmIGFsbCBpbW1lZGlhdGUgY2hpbGRyZW4gb2YgdGhlIGdyaWRzIGZvciB0aGlzIGBJZ3hSb3dJc2xhbmRDb21wb25lbnRgIGhhdmUgYmVlbiBzZXQgdG8gYmUgZXhwYW5kZWQvY29sbGFwc2VkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBleHBhbmRlZCA9IHRoaXMucm93SXNsYW5kLmV4cGFuZENoaWxkcmVuO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneFJvd0lzbGFuZENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZXhwYW5kQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0RXhwYW5kU3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaWQoKSB7XG4gICAgICAgIGNvbnN0IHBJZCA9IHRoaXMucGFyZW50SWQgPyB0aGlzLnBhcmVudElkLnN1YnN0cmluZyh0aGlzLnBhcmVudElkLmluZGV4T2YodGhpcy5sYXlvdXRfaWQpICsgdGhpcy5sYXlvdXRfaWQubGVuZ3RoKSArICctJyA6ICcnO1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRfaWQgKyBwSWQgKyB0aGlzLmtleTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBwYXJlbnRJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50SXNsYW5kID8gdGhpcy5wYXJlbnRJc2xhbmQuaWQgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGxldmVsKCkge1xuICAgICAgICBsZXQgcHRyID0gdGhpcy5wYXJlbnRJc2xhbmQ7XG4gICAgICAgIGxldCBsdmwgPSAwO1xuICAgICAgICB3aGlsZSAocHRyKSB7XG4gICAgICAgICAgICBsdmwrKztcbiAgICAgICAgICAgIHB0ciA9IHB0ci5wYXJlbnRJc2xhbmQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGx2bCArIDE7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBzZWxlY3Rpb25TZXJ2aWNlOiBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgcHVibGljIGNvbFJlc2l6aW5nU2VydmljZTogSWd4Q29sdW1uUmVzaXppbmdTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KElHWF9HUklEX1NFUlZJQ0VfQkFTRSkgcHVibGljIGdyaWRBUEk6IEdyaWRTZXJ2aWNlVHlwZSxcbiAgICAgICAgcHJvdGVjdGVkIHRyYW5zYWN0aW9uRmFjdG9yeTogSWd4RmxhdFRyYW5zYWN0aW9uRmFjdG9yeSxcbiAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHpvbmU6IE5nWm9uZSxcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHVibGljIGRvY3VtZW50LFxuICAgICAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICBkaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsXG4gICAgICAgIHZpZXdSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIG1vZHVsZVJlZjogTmdNb2R1bGVSZWY8YW55PixcbiAgICAgICAgZmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgICAgbmF2aWdhdGlvbjogSWd4SGllcmFyY2hpY2FsR3JpZE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBmaWx0ZXJpbmdTZXJ2aWNlOiBJZ3hGaWx0ZXJpbmdTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KElneE92ZXJsYXlTZXJ2aWNlKSBwcm90ZWN0ZWQgb3ZlcmxheVNlcnZpY2U6IElneE92ZXJsYXlTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgc3VtbWFyeVNlcnZpY2U6IElneEdyaWRTdW1tYXJ5U2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEaXNwbGF5RGVuc2l0eVRva2VuKSBwcm90ZWN0ZWQgX2Rpc3BsYXlEZW5zaXR5T3B0aW9uczogSURpc3BsYXlEZW5zaXR5T3B0aW9ucyxcbiAgICAgICAgcHVibGljIHJvd0lzbGFuZEFQSTogSWd4Um93SXNsYW5kQVBJU2VydmljZSxcbiAgICAgICAgQEluamVjdChMT0NBTEVfSUQpIGxvY2FsZUlkOiBzdHJpbmcsXG4gICAgICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsKSB7XG4gICAgICAgIHN1cGVyKFxuICAgICAgICAgICAgc2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgICAgIGNvbFJlc2l6aW5nU2VydmljZSxcbiAgICAgICAgICAgIGdyaWRBUEksXG4gICAgICAgICAgICB0cmFuc2FjdGlvbkZhY3RvcnksXG4gICAgICAgICAgICBlbGVtZW50UmVmLFxuICAgICAgICAgICAgem9uZSxcbiAgICAgICAgICAgIGRvY3VtZW50LFxuICAgICAgICAgICAgY2RyLFxuICAgICAgICAgICAgcmVzb2x2ZXIsXG4gICAgICAgICAgICBkaWZmZXJzLFxuICAgICAgICAgICAgdmlld1JlZixcbiAgICAgICAgICAgIGFwcFJlZixcbiAgICAgICAgICAgIG1vZHVsZVJlZixcbiAgICAgICAgICAgIGZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgICAgIGluamVjdG9yLFxuICAgICAgICAgICAgbmF2aWdhdGlvbixcbiAgICAgICAgICAgIGZpbHRlcmluZ1NlcnZpY2UsXG4gICAgICAgICAgICBvdmVybGF5U2VydmljZSxcbiAgICAgICAgICAgIHN1bW1hcnlTZXJ2aWNlLFxuICAgICAgICAgICAgX2Rpc3BsYXlEZW5zaXR5T3B0aW9ucyxcbiAgICAgICAgICAgIGxvY2FsZUlkLFxuICAgICAgICAgICAgcGxhdGZvcm1cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5oZ3JpZEFQSSA9IGdyaWRBUEkgYXMgSWd4SGllcmFyY2hpY2FsR3JpZEFQSVNlcnZpY2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmdyaWQgPSB0aGlzIGFzIGFueTtcbiAgICAgICAgdGhpcy5yb290R3JpZCA9IHRoaXMuaGdyaWRBUEkuZ3JpZDtcbiAgICAgICAgdGhpcy5yb3dJc2xhbmRBUEkucm93SXNsYW5kID0gdGhpcztcbiAgICAgICAgdGhpcy5yaV9jb2x1bW5MaXN0RGlmZmVyID0gdGhpcy5kaWZmZXJzLmZpbmQoW10pLmNyZWF0ZShudWxsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVDaGlsZHJlbigpO1xuICAgICAgICB0aGlzLmNoaWxkcmVuLm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgICB0aGlzLmNoaWxkcmVuLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNoaWxkcmVuKCk7XG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIGV4aXN0aW5nIGdyaWRzIHNpbmNlIHRoZWlyIGNoaWxkIHJpIGhhdmUgYmVlbiBjaGFuZ2VkLlxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0R3JpZHNGb3JJc2xhbmQodGhpcy5rZXkpLmZvckVhY2goZ3JpZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIChncmlkIGFzIGFueSkub25Sb3dJc2xhbmRDaGFuZ2UodGhpcy5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbmVzdGVkQ29sdW1ucyA9IHRoaXMuY2hpbGRyZW4ubWFwKChsYXlvdXQpID0+IGxheW91dC5jb2x1bW5MaXN0LnRvQXJyYXkoKSk7XG4gICAgICAgIGNvbnN0IGNvbHNBcnJheSA9IFtdLmNvbmNhdC5hcHBseShbXSwgbmVzdGVkQ29sdW1ucyk7XG4gICAgICAgIGNvbnN0IHRvcENvbHMgPSB0aGlzLmNvbHVtbkxpc3QuZmlsdGVyKChpdGVtKSA9PiBjb2xzQXJyYXkuaW5kZXhPZihpdGVtKSA9PT0gLTEpO1xuICAgICAgICB0aGlzLmNoaWxkQ29sdW1ucy5yZXNldCh0b3BDb2xzKTtcbiAgICAgICAgdGhpcy5jb2x1bW5MaXN0LmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbkxpc3QoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBoYW5kbGUgY29sdW1uIGNoYW5nZXMgc28gdGhhdCB0aGV5IGFyZSBwYXNzZWQgdG8gY2hpbGQgZ3JpZCBpbnN0YW5jZXMgd2hlbiBjb2x1bW5DaGFuZ2UgaXMgZW1pdHRlZC5cbiAgICAgICAgdGhpcy5yaV9jb2x1bW5MaXN0RGlmZmVyLmRpZmYodGhpcy5jaGlsZENvbHVtbnMpO1xuICAgICAgICB0aGlzLmNoaWxkQ29sdW1ucy50b0FycmF5KCkuZm9yRWFjaCh4ID0+IHguY29sdW1uQ2hhbmdlLnBpcGUodGFrZVVudGlsKHguZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVDb2x1bW5MaXN0KCkpKTtcbiAgICAgICAgdGhpcy5jaGlsZENvbHVtbnMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChjaGFuZ2U6IFF1ZXJ5TGlzdDxJZ3hDb2x1bW5Db21wb25lbnQ+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkaWZmID0gdGhpcy5yaV9jb2x1bW5MaXN0RGlmZmVyLmRpZmYoY2hhbmdlKTtcbiAgICAgICAgICAgIGlmIChkaWZmKSB7XG4gICAgICAgICAgICAgICAgZGlmZi5mb3JFYWNoQWRkZWRJdGVtKChyZWNvcmQ6IEl0ZXJhYmxlQ2hhbmdlUmVjb3JkPElneENvbHVtbkNvbXBvbmVudD4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkLml0ZW0uY29sdW1uQ2hhbmdlLnBpcGUodGFrZVVudGlsKHJlY29yZC5pdGVtLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlQ29sdW1uTGlzdCgpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWN0aW9uU3RyaXAgPSB0aGlzLmFjdGlvblN0cmlwcy5maXJzdDtcbiAgICAgICAgaWYgKHRoaXMuYWN0aW9uU3RyaXApIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uU3RyaXAubWVudU92ZXJsYXlTZXR0aW5ncy5vdXRsZXQgPSB0aGlzLm91dGxldDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLnJvd0lzbGFuZEFQSS5yZWdpc3Rlcih0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50SXNsYW5kKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudElzbGFuZC5yb3dJc2xhbmRBUEkucmVnaXN0ZXJDaGlsZFJvd0lzbGFuZCh0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucm9vdEdyaWQuaGdyaWRBUEkucmVnaXN0ZXJDaGlsZFJvd0lzbGFuZCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbml0ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBjaGlsZCB0b29sYmFyIGlmIHRoZSBwYXJlbnQgaXNsYW5kIGhhcyBhIHRvb2xiYXIgZGVmaW5pdGlvblxuICAgICAgICB0aGlzLmdyaWRDcmVhdGVkLnBpcGUocGx1Y2soJ2dyaWQnKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoZ3JpZCA9PiB7XG4gICAgICAgICAgICBncmlkLnJlbmRlcmVkJC5waXBlKGZpcnN0KCksIGZpbHRlcigoKSA9PiAhIXRoaXMuaXNsYW5kVG9vbGJhclRlbXBsYXRlKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IGdyaWQudG9vbGJhck91dGxldC5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5pc2xhbmRUb29sYmFyVGVtcGxhdGUsIHsgJGltcGxpY2l0OiBncmlkIH0pKTtcbiAgICAgICAgICAgIGdyaWQucmVuZGVyZWQkLnBpcGUoZmlyc3QoKSwgZmlsdGVyKCgpID0+ICEhdGhpcy5pc2xhbmRQYWdpbmF0b3JUZW1wbGF0ZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdEdyaWQucGFnaW5hdG9yTGlzdC5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gZ3JpZC5zZXRVcFBhZ2luYXRvcigpKTtcbiAgICAgICAgICAgICAgICAgICAgZ3JpZC5wYWdpbmF0b3JPdXRsZXQuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuaXNsYW5kUGFnaW5hdG9yVGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5sYXlvdXRDaGFuZ2UuZW1pdChjaGFuZ2VzKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzSW5pdCkge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsQ2hhbmdlcy5wdXNoKGNoYW5nZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLy8gT3ZlcnJpZGUgdGhlIGJhc2UgZGVzdHJveSBiZWNhdXNlIHdlIGRvbid0IGhhdmUgcmVuZGVyZWQgYW55dGhpbmcgdG8gdXNlIHJlbW92ZUV2ZW50TGlzdGVuZXIgb25cbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICAgIHRoaXMucm93SXNsYW5kQVBJLnVuc2V0KHRoaXMuaWQpO1xuICAgICAgICBpZiAodGhpcy5wYXJlbnRJc2xhbmQpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0R3JpZHNGb3JJc2xhbmQodGhpcy5rZXkpLmZvckVhY2goZ3JpZCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhbkdyaWRTdGF0ZShncmlkKTtcbiAgICAgICAgICAgICAgICBncmlkLmhncmlkQVBJLnVuc2V0Q2hpbGRSb3dJc2xhbmQodGhpcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucGFyZW50SXNsYW5kLnJvd0lzbGFuZEFQSS51bnNldENoaWxkUm93SXNsYW5kKHRoaXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb290R3JpZC5oZ3JpZEFQSS51bnNldENoaWxkUm93SXNsYW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5jbGVhbkdyaWRTdGF0ZSh0aGlzLnJvb3RHcmlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVmbG93KCkgeyB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGNhbGN1bGF0ZUdyaWRIZWlnaHQoKSB7IH1cblxuICAgIHByb3RlY3RlZCB1cGRhdGVDb2x1bW5MaXN0KCkge1xuICAgICAgICBjb25zdCBuZXN0ZWRDb2x1bW5zID0gdGhpcy5jaGlsZHJlbi5tYXAoKGxheW91dCkgPT4gbGF5b3V0LmNvbHVtbkxpc3QudG9BcnJheSgpKTtcbiAgICAgICAgY29uc3QgY29sc0FycmF5ID0gW10uY29uY2F0LmFwcGx5KFtdLCBuZXN0ZWRDb2x1bW5zKTtcbiAgICAgICAgY29uc3QgdG9wQ29scyA9IHRoaXMuY29sdW1uTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChjb2xzQXJyYXkuaW5kZXhPZihpdGVtKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAvKiBSZXNldCB0aGUgZGVmYXVsdCB3aWR0aCBvZiB0aGUgY29sdW1ucyB0aGF0IGNvbWUgaW50byB0aGlzIHJvdyBpc2xhbmQsXG4gICAgICAgICAgICAgICAgYmVjYXVzZSB0aGUgcm9vdCBjYXRjaGVzIHRoZW0gZmlyc3QgZHVyaW5nIHRoZSBkZXRlY3RDaGFuZ2VzKCkgYW5kIHNldHMgdGhlaXIgZGVmYXVsdFdpZHRoLiAqL1xuICAgICAgICAgICAgICAgIGl0ZW0uZGVmYXVsdFdpZHRoID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jaGlsZENvbHVtbnMucmVzZXQodG9wQ29scyk7XG5cbiAgICAgICAgaWYgKHRoaXMucGFyZW50SXNsYW5kKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudElzbGFuZC5jb2x1bW5MaXN0Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb290R3JpZC5jb2x1bW5MaXN0Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yb3dJc2xhbmRBUEkuZ2V0Q2hpbGRHcmlkcygpLmZvckVhY2goKGdyaWQ6IEdyaWRUeXBlKSA9PiB7XG4gICAgICAgICAgICBncmlkLmNyZWF0ZUNvbHVtbnNMaXN0KHRoaXMuY2hpbGRDb2x1bW5zLnRvQXJyYXkoKSk7XG4gICAgICAgICAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnMoZ3JpZC5uYXRpdmVFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGdyaWQudXBkYXRlT25SZW5kZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlQ2hpbGRyZW4oKSB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmZpcnN0ID09PSB0aGlzKSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnJlc2V0KHRoaXMuY2hpbGRyZW4udG9BcnJheSgpLnNsaWNlKDEpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50SXNsYW5kID0gdGhpcztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhbkdyaWRTdGF0ZShncmlkKSB7XG4gICAgICAgIGdyaWQuY2hpbGRHcmlkVGVtcGxhdGVzLmZvckVhY2goKHRtcGwpID0+IHtcbiAgICAgICAgICAgIHRtcGwub3duZXIuY2xlYW5WaWV3KHRtcGwuY29udGV4dC50ZW1wbGF0ZUlEKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGdyaWQuY2hpbGRHcmlkVGVtcGxhdGVzLmNsZWFyKCk7XG4gICAgICAgIGdyaWQub25Sb3dJc2xhbmRDaGFuZ2UoKTtcbiAgICB9XG59XG4iXX0=
362
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWlzbGFuZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvaGllcmFyY2hpY2FsLWdyaWQvcm93LWlzbGFuZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLGVBQWUsRUFFZixZQUFZLEVBQ1osTUFBTSxFQUVOLEtBQUssRUFHTCxTQUFTLEVBTVQsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUVkLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQTBCLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFeEYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFdEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR2xFLE9BQU8sRUFBWSxxQkFBcUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNFLE9BQU8sRUFBRSx1QkFBdUIsRUFBaUMsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRixPQUFPLEVBQUUsdUJBQXVCLEVB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RUFBRSxXQUFXLEVBQUU7Z0JBSW5ELFlBQVk7c0JBRGxCLGVBQWU7dUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTtnQkFPeEYsWUFBWTtzQkFEbEIsTUFBTTtnQkFnQkEsV0FBVztzQkFEakIsTUFBTTtnQkFpQkEsZUFBZTtzQkFEckIsTUFBTTtnQkFnQ0ksY0FBYztzQkFEeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEFwcGxpY2F0aW9uUmVmLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgSXRlcmFibGVDaGFuZ2VSZWNvcmQsXG4gICAgSXRlcmFibGVEaWZmZXJzLFxuICAgIExPQ0FMRV9JRCxcbiAgICBOZ01vZHVsZVJlZixcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZEFQSVNlcnZpY2UgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1ncmlkLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElneEZpbHRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi9maWx0ZXJpbmcvZ3JpZC1maWx0ZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJRGlzcGxheURlbnNpdHlPcHRpb25zLCBEaXNwbGF5RGVuc2l0eVRva2VuIH0gZnJvbSAnLi4vLi4vY29yZS9kaXNwbGF5RGVuc2l0eSc7XG5pbXBvcnQgeyBJZ3hHcmlkU3VtbWFyeVNlcnZpY2UgfSBmcm9tICcuLi9zdW1tYXJpZXMvZ3JpZC1zdW1tYXJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZEJhc2VEaXJlY3RpdmUgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1ncmlkLWJhc2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbEdyaWROYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWdyaWQtbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElneE92ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBmaXJzdCwgZmlsdGVyLCB0YWtlVW50aWwsIHBsdWNrIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSWd4Q29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi4vY29sdW1ucy9jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IElneFJvd0lzbGFuZEFQSVNlcnZpY2UgfSBmcm9tICcuL3Jvdy1pc2xhbmQtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5SZXNpemluZ1NlcnZpY2UgfSBmcm9tICcuLi9yZXNpemluZy9yZXNpemluZy5zZXJ2aWNlJztcbmltcG9ydCB7IEdyaWRUeXBlLCBJR1hfR1JJRF9TRVJWSUNFX0JBU0UgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4R3JpZFRvb2xiYXJEaXJlY3RpdmUsIElneEdyaWRUb29sYmFyVGVtcGxhdGVDb250ZXh0IH0gZnJvbSAnLi4vdG9vbGJhci9jb21tb24nO1xuaW1wb3J0IHsgSWd4QWN0aW9uU3RyaXBDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hY3Rpb24tc3RyaXAvYWN0aW9uLXN0cmlwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hQYWdpbmF0b3JEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9wYWdpbmF0b3IvcGFnaW5hdG9yLWludGVyZmFjZXMnO1xuaW1wb3J0IHsgSWd4RmxhdFRyYW5zYWN0aW9uRmFjdG9yeSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uLWZhY3Rvcnkuc2VydmljZSc7XG5pbXBvcnQgeyBJR3JpZENyZWF0ZWRFdmVudEFyZ3MgfSBmcm9tICcuL2V2ZW50cyc7XG5cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHNlbGVjdG9yOiAnaWd4LXJvdy1pc2xhbmQnLFxuICAgIHRlbXBsYXRlOiBgYCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgSWd4Um93SXNsYW5kQVBJU2VydmljZSxcbiAgICAgICAgSWd4RmlsdGVyaW5nU2VydmljZSxcbiAgICAgICAgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2VcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIElneFJvd0lzbGFuZENvbXBvbmVudCBleHRlbmRzIElneEhpZXJhcmNoaWNhbEdyaWRCYXNlRGlyZWN0aXZlXG4gICAgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBrZXkgb2YgdGhlIHJvdyBpc2xhbmQgYnkgd2hpY2ggY2hpbGQgZGF0YSB3b3VsZCBiZSB0YWtlbiBmcm9tIHRoZSByb3cgZGF0YSBpZiBzdWNoIGlzIHByb3ZpZGVkLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWhpZXJhcmNoaWNhbC1ncmlkIFtkYXRhXT1cIkRhdGFcIiBbYXV0b0dlbmVyYXRlXT1cInRydWVcIj5cbiAgICAgKiAgICAgIDxpZ3gtcm93LWlzbGFuZCBba2V5XT1cIidjaGlsZERhdGEnXCI+XG4gICAgICogICAgICAgICAgPCEtLSAuLi4gLS0+XG4gICAgICogICAgICA8L2lneC1yb3ctaXNsYW5kPlxuICAgICAqIDwvaWd4LWhpZXJhcmNoaWNhbC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneFJvd0lzbGFuZENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGtleTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4Um93SXNsYW5kQ29tcG9uZW50LCB7IHJlYWQ6IElneFJvd0lzbGFuZENvbXBvbmVudCwgZGVzY2VuZGFudHM6IGZhbHNlIH0pXG4gICAgcHVibGljIGNoaWxkcmVuID0gbmV3IFF1ZXJ5TGlzdDxJZ3hSb3dJc2xhbmRDb21wb25lbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hDb2x1bW5Db21wb25lbnQsIHsgcmVhZDogSWd4Q29sdW1uQ29tcG9uZW50LCBkZXNjZW5kYW50czogZmFsc2UgfSlcbiAgICBwdWJsaWMgY2hpbGRDb2x1bW5zID0gbmV3IFF1ZXJ5TGlzdDxJZ3hDb2x1bW5Db21wb25lbnQ+KCk7XG5cbiAgICBAQ29udGVudENoaWxkKElneEdyaWRUb29sYmFyRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHVibGljIGlzbGFuZFRvb2xiYXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8SWd4R3JpZFRvb2xiYXJUZW1wbGF0ZUNvbnRleHQ+O1xuXG4gICAgQENvbnRlbnRDaGlsZChJZ3hQYWdpbmF0b3JEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBwdWJsaWMgaXNsYW5kUGFnaW5hdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAQ29udGVudENoaWxkcmVuKElneEFjdGlvblN0cmlwQ29tcG9uZW50LCB7IHJlYWQ6IElneEFjdGlvblN0cmlwQ29tcG9uZW50LCBkZXNjZW5kYW50czogZmFsc2UgfSlcbiAgICBwdWJsaWMgYWN0aW9uU3RyaXBzOiBRdWVyeUxpc3Q8SWd4QWN0aW9uU3RyaXBDb21wb25lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBsYXlvdXRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGVtbWl0ZWQgd2hlbiBhIGdyaWQgaXMgYmVpbmcgY3JlYXRlZCBiYXNlZCBvbiB0aGlzIHJvdyBpc2xhbmQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtaGllcmFyY2hpY2FsLWdyaWQgW2RhdGFdPVwiRGF0YVwiIFthdXRvR2VuZXJhdGVdPVwidHJ1ZVwiPlxuICAgICAqICAgICAgPGlneC1yb3ctaXNsYW5kIFtrZXldPVwiJ2NoaWxkRGF0YSdcIiAoZ3JpZENyZWF0ZWQpPVwiZ3JpZENyZWF0ZWQoJGV2ZW50KVwiICNyb3dJc2xhbmQ+XG4gICAgICogICAgICAgICAgPCEtLSAuLi4gLS0+XG4gICAgICogICAgICA8L2lneC1yb3ctaXNsYW5kPlxuICAgICAqIDwvaWd4LWhpZXJhcmNoaWNhbC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneFJvd0lzbGFuZENvbXBvbmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBncmlkQ3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUdyaWRDcmVhdGVkRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBhZnRlciBhIGdyaWQgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgZm9yIHRoaXMgcm93IGlzbGFuZC5cbiAgICAgKiBUaGUgZW1pdHRpbmcgaXMgZG9uZSBpbiBgbmdBZnRlclZpZXdJbml0YC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1oaWVyYXJjaGljYWwtZ3JpZCBbZGF0YV09XCJEYXRhXCIgW2F1dG9HZW5lcmF0ZV09XCJ0cnVlXCI+XG4gICAgICogICAgICA8aWd4LXJvdy1pc2xhbmQgW2tleV09XCInY2hpbGREYXRhJ1wiIChncmlkSW5pdGlhbGl6ZWQpPVwiZ3JpZEluaXRpYWxpemVkKCRldmVudClcIiAjcm93SXNsYW5kPlxuICAgICAqICAgICAgICAgIDwhLS0gLi4uIC0tPlxuICAgICAqICAgICAgPC9pZ3gtcm93LWlzbGFuZD5cbiAgICAgKiA8L2lneC1oaWVyYXJjaGljYWwtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hSb3dJc2xhbmRDb21wb25lbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgZ3JpZEluaXRpYWxpemVkID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZENyZWF0ZWRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGluaXRpYWxDaGFuZ2VzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHJvb3RHcmlkOiBHcmlkVHlwZSA9IG51bGw7XG4gICAgcHVibGljIHJlYWRvbmx5IGRhdGE6IGFueVtdIHwgbnVsbDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZmlsdGVyZWREYXRhOiBhbnlbXTtcblxuICAgIHByaXZhdGUgcmlfY29sdW1uTGlzdERpZmZlcjtcbiAgICBwcml2YXRlIGxheW91dF9pZCA9IGBpZ3gtcm93LWlzbGFuZC1gO1xuICAgIHByaXZhdGUgaXNJbml0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGlmIGFsbCBpbW1lZGlhdGUgY2hpbGRyZW4gb2YgdGhlIGdyaWRzIGZvciB0aGlzIGBJZ3hSb3dJc2xhbmRDb21wb25lbnRgIHNob3VsZCBiZSBleHBhbmRlZC9jb2xsYXBzZWQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtaGllcmFyY2hpY2FsLWdyaWQgW2RhdGFdPVwiRGF0YVwiIFthdXRvR2VuZXJhdGVdPVwidHJ1ZVwiPlxuICAgICAqICAgICAgPGlneC1yb3ctaXNsYW5kIFtrZXldPVwiJ2NoaWxkRGF0YSdcIiBbZXhwYW5kQ2hpbGRyZW5dPVwidHJ1ZVwiICNyb3dJc2xhbmQ+XG4gICAgICogICAgICAgICAgPCEtLSAuLi4gLS0+XG4gICAgICogICAgICA8L2lneC1yb3ctaXNsYW5kPlxuICAgICAqIDwvaWd4LWhpZXJhcmNoaWNhbC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneFJvd0lzbGFuZENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBleHBhbmRDaGlsZHJlbih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kZWZhdWx0RXhwYW5kU3RhdGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5yb3dJc2xhbmRBUEkuZ2V0Q2hpbGRHcmlkcygpLmZvckVhY2goKGdyaWQpID0+IHtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGdyaWQubmF0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAvLyBEZXRlY3QgY2hhbmdlcyByaWdodCBhd2F5IGlmIHRoZSBncmlkIGlzIHZpc2libGVcbiAgICAgICAgICAgICAgICBncmlkLmV4cGFuZENoaWxkcmVuID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBFbHNlIGRlZmVyIHRoZSBkZXRlY3Rpb24gb24gY2hhbmdlcyB3aGVuIHRoZSBncmlkIGdldHMgaW50byB2aWV3IGZvciBwZXJmb3JtYW5jZS5cbiAgICAgICAgICAgICAgICBncmlkLnVwZGF0ZU9uUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBpZiBhbGwgaW1tZWRpYXRlIGNoaWxkcmVuIG9mIHRoZSBncmlkcyBmb3IgdGhpcyBgSWd4Um93SXNsYW5kQ29tcG9uZW50YCBoYXZlIGJlZW4gc2V0IHRvIGJlIGV4cGFuZGVkL2NvbGxhcHNlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgZXhwYW5kZWQgPSB0aGlzLnJvd0lzbGFuZC5leHBhbmRDaGlsZHJlbjtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hSb3dJc2xhbmRDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGV4cGFuZENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdEV4cGFuZFN0YXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlkKCkge1xuICAgICAgICBjb25zdCBwSWQgPSB0aGlzLnBhcmVudElkID8gdGhpcy5wYXJlbnRJZC5zdWJzdHJpbmcodGhpcy5wYXJlbnRJZC5pbmRleE9mKHRoaXMubGF5b3V0X2lkKSArIHRoaXMubGF5b3V0X2lkLmxlbmd0aCkgKyAnLScgOiAnJztcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0X2lkICsgcElkICsgdGhpcy5rZXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcGFyZW50SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudElzbGFuZCA/IHRoaXMucGFyZW50SXNsYW5kLmlkIDogbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBsZXZlbCgpIHtcbiAgICAgICAgbGV0IHB0ciA9IHRoaXMucGFyZW50SXNsYW5kO1xuICAgICAgICBsZXQgbHZsID0gMDtcbiAgICAgICAgd2hpbGUgKHB0cikge1xuICAgICAgICAgICAgbHZsKys7XG4gICAgICAgICAgICBwdHIgPSBwdHIucGFyZW50SXNsYW5kO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsdmwgKyAxO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgc2VsZWN0aW9uU2VydmljZTogSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBjb2xSZXNpemluZ1NlcnZpY2U6IElneENvbHVtblJlc2l6aW5nU2VydmljZSxcbiAgICAgICAgQEluamVjdChJR1hfR1JJRF9TRVJWSUNFX0JBU0UpIGdyaWRBUEk6IElneEhpZXJhcmNoaWNhbEdyaWRBUElTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgdHJhbnNhY3Rpb25GYWN0b3J5OiBJZ3hGbGF0VHJhbnNhY3Rpb25GYWN0b3J5LFxuICAgICAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgem9uZTogTmdab25lLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwdWJsaWMgZG9jdW1lbnQsXG4gICAgICAgIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIGRpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICAgICAgdmlld1JlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgbW9kdWxlUmVmOiBOZ01vZHVsZVJlZjxhbnk+LFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIGFwcFJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgICAgIG5hdmlnYXRpb246IElneEhpZXJhcmNoaWNhbEdyaWROYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgZmlsdGVyaW5nU2VydmljZTogSWd4RmlsdGVyaW5nU2VydmljZSxcbiAgICAgICAgQEluamVjdChJZ3hPdmVybGF5U2VydmljZSkgcHJvdGVjdGVkIG92ZXJsYXlTZXJ2aWNlOiBJZ3hPdmVybGF5U2VydmljZSxcbiAgICAgICAgcHVibGljIHN1bW1hcnlTZXJ2aWNlOiBJZ3hHcmlkU3VtbWFyeVNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRGlzcGxheURlbnNpdHlUb2tlbikgcHJvdGVjdGVkIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnM6IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMsXG4gICAgICAgIHB1YmxpYyByb3dJc2xhbmRBUEk6IElneFJvd0lzbGFuZEFQSVNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoTE9DQUxFX0lEKSBsb2NhbGVJZDogc3RyaW5nLFxuICAgICAgICBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCkge1xuICAgICAgICBzdXBlcihcbiAgICAgICAgICAgIHNlbGVjdGlvblNlcnZpY2UsXG4gICAgICAgICAgICBjb2xSZXNpemluZ1NlcnZpY2UsXG4gICAgICAgICAgICBncmlkQVBJLFxuICAgICAgICAgICAgdHJhbnNhY3Rpb25GYWN0b3J5LFxuICAgICAgICAgICAgZWxlbWVudFJlZixcbiAgICAgICAgICAgIHpvbmUsXG4gICAgICAgICAgICBkb2N1bWVudCxcbiAgICAgICAgICAgIGNkcixcbiAgICAgICAgICAgIHJlc29sdmVyLFxuICAgICAgICAgICAgZGlmZmVycyxcbiAgICAgICAgICAgIHZpZXdSZWYsXG4gICAgICAgICAgICBhcHBSZWYsXG4gICAgICAgICAgICBtb2R1bGVSZWYsXG4gICAgICAgICAgICBpbmplY3RvcixcbiAgICAgICAgICAgIG5hdmlnYXRpb24sXG4gICAgICAgICAgICBmaWx0ZXJpbmdTZXJ2aWNlLFxuICAgICAgICAgICAgb3ZlcmxheVNlcnZpY2UsXG4gICAgICAgICAgICBzdW1tYXJ5U2VydmljZSxcbiAgICAgICAgICAgIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMsXG4gICAgICAgICAgICBsb2NhbGVJZCxcbiAgICAgICAgICAgIHBsYXRmb3JtXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmdyaWQgPSB0aGlzIGFzIEdyaWRUeXBlO1xuICAgICAgICB0aGlzLnJvb3RHcmlkID0gdGhpcy5ncmlkQVBJLmdyaWQ7XG4gICAgICAgIHRoaXMucm93SXNsYW5kQVBJLnJvd0lzbGFuZCA9IHRoaXM7XG4gICAgICAgIHRoaXMucmlfY29sdW1uTGlzdERpZmZlciA9IHRoaXMuZGlmZmVycy5maW5kKFtdKS5jcmVhdGUobnVsbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ2hpbGRyZW4oKTtcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDaGlsZHJlbigpO1xuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBleGlzdGluZyBncmlkcyBzaW5jZSB0aGVpciBjaGlsZCByaSBoYXZlIGJlZW4gY2hhbmdlZC5cbiAgICAgICAgICAgICAgICB0aGlzLmdldEdyaWRzRm9ySXNsYW5kKHRoaXMua2V5KS5mb3JFYWNoKGdyaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAoZ3JpZCBhcyBhbnkpLm9uUm93SXNsYW5kQ2hhbmdlKHRoaXMuY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG5lc3RlZENvbHVtbnMgPSB0aGlzLmNoaWxkcmVuLm1hcCgobGF5b3V0KSA9PiBsYXlvdXQuY29sdW1uTGlzdC50b0FycmF5KCkpO1xuICAgICAgICBjb25zdCBjb2xzQXJyYXkgPSBbXS5jb25jYXQuYXBwbHkoW10sIG5lc3RlZENvbHVtbnMpO1xuICAgICAgICBjb25zdCB0b3BDb2xzID0gdGhpcy5jb2x1bW5MaXN0LmZpbHRlcigoaXRlbSkgPT4gY29sc0FycmF5LmluZGV4T2YoaXRlbSkgPT09IC0xKTtcbiAgICAgICAgdGhpcy5jaGlsZENvbHVtbnMucmVzZXQodG9wQ29scyk7XG4gICAgICAgIHRoaXMuY29sdW1uTGlzdC5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5MaXN0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gaGFuZGxlIGNvbHVtbiBjaGFuZ2VzIHNvIHRoYXQgdGhleSBhcmUgcGFzc2VkIHRvIGNoaWxkIGdyaWQgaW5zdGFuY2VzIHdoZW4gY29sdW1uQ2hhbmdlIGlzIGVtaXR0ZWQuXG4gICAgICAgIHRoaXMucmlfY29sdW1uTGlzdERpZmZlci5kaWZmKHRoaXMuY2hpbGRDb2x1bW5zKTtcbiAgICAgICAgdGhpcy5jaGlsZENvbHVtbnMudG9BcnJheSgpLmZvckVhY2goeCA9PiB4LmNvbHVtbkNoYW5nZS5waXBlKHRha2VVbnRpbCh4LmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlQ29sdW1uTGlzdCgpKSk7XG4gICAgICAgIHRoaXMuY2hpbGRDb2x1bW5zLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoY2hhbmdlOiBRdWVyeUxpc3Q8SWd4Q29sdW1uQ29tcG9uZW50PikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGlmZiA9IHRoaXMucmlfY29sdW1uTGlzdERpZmZlci5kaWZmKGNoYW5nZSk7XG4gICAgICAgICAgICBpZiAoZGlmZikge1xuICAgICAgICAgICAgICAgIGRpZmYuZm9yRWFjaEFkZGVkSXRlbSgocmVjb3JkOiBJdGVyYWJsZUNoYW5nZVJlY29yZDxJZ3hDb2x1bW5Db21wb25lbnQ+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlY29yZC5pdGVtLmNvbHVtbkNoYW5nZS5waXBlKHRha2VVbnRpbChyZWNvcmQuaXRlbS5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUNvbHVtbkxpc3QoKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFjdGlvblN0cmlwID0gdGhpcy5hY3Rpb25TdHJpcHMuZmlyc3Q7XG4gICAgICAgIGlmICh0aGlzLmFjdGlvblN0cmlwKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGlvblN0cmlwLm1lbnVPdmVybGF5U2V0dGluZ3Mub3V0bGV0ID0gdGhpcy5vdXRsZXQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5yb3dJc2xhbmRBUEkucmVnaXN0ZXIodGhpcyk7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudElzbGFuZCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRJc2xhbmQucm93SXNsYW5kQVBJLnJlZ2lzdGVyQ2hpbGRSb3dJc2xhbmQodGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvb3RHcmlkLmdyaWRBUEkucmVnaXN0ZXJDaGlsZFJvd0lzbGFuZCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbml0ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBjaGlsZCB0b29sYmFyIGlmIHRoZSBwYXJlbnQgaXNsYW5kIGhhcyBhIHRvb2xiYXIgZGVmaW5pdGlvblxuICAgICAgICB0aGlzLmdyaWRDcmVhdGVkLnBpcGUocGx1Y2soJ2dyaWQnKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoZ3JpZCA9PiB7XG4gICAgICAgICAgICBncmlkLnJlbmRlcmVkJC5waXBlKGZpcnN0KCksIGZpbHRlcigoKSA9PiAhIXRoaXMuaXNsYW5kVG9vbGJhclRlbXBsYXRlKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IGdyaWQudG9vbGJhck91dGxldC5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5pc2xhbmRUb29sYmFyVGVtcGxhdGUsIHsgJGltcGxpY2l0OiBncmlkIH0pKTtcbiAgICAgICAgICAgIGdyaWQucmVuZGVyZWQkLnBpcGUoZmlyc3QoKSwgZmlsdGVyKCgpID0+ICEhdGhpcy5pc2xhbmRQYWdpbmF0b3JUZW1wbGF0ZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdEdyaWQucGFnaW5hdG9yTGlzdC5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gZ3JpZC5zZXRVcFBhZ2luYXRvcigpKTtcbiAgICAgICAgICAgICAgICAgICAgZ3JpZC5wYWdpbmF0b3JPdXRsZXQuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuaXNsYW5kUGFnaW5hdG9yVGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5sYXlvdXRDaGFuZ2UuZW1pdChjaGFuZ2VzKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzSW5pdCkge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsQ2hhbmdlcy5wdXNoKGNoYW5nZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLy8gT3ZlcnJpZGUgdGhlIGJhc2UgZGVzdHJveSBiZWNhdXNlIHdlIGRvbid0IGhhdmUgcmVuZGVyZWQgYW55dGhpbmcgdG8gdXNlIHJlbW92ZUV2ZW50TGlzdGVuZXIgb25cbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICAgIHRoaXMucm93SXNsYW5kQVBJLnVuc2V0KHRoaXMuaWQpO1xuICAgICAgICBpZiAodGhpcy5wYXJlbnRJc2xhbmQpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0R3JpZHNGb3JJc2xhbmQodGhpcy5rZXkpLmZvckVhY2goZ3JpZCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhbkdyaWRTdGF0ZShncmlkKTtcbiAgICAgICAgICAgICAgICBncmlkLmdyaWRBUEkudW5zZXRDaGlsZFJvd0lzbGFuZCh0aGlzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRJc2xhbmQucm93SXNsYW5kQVBJLnVuc2V0Q2hpbGRSb3dJc2xhbmQodGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvb3RHcmlkLmdyaWRBUEkudW5zZXRDaGlsZFJvd0lzbGFuZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYW5HcmlkU3RhdGUodGhpcy5yb290R3JpZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHJlZmxvdygpIHsgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBjYWxjdWxhdGVHcmlkSGVpZ2h0KCkgeyB9XG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlQ29sdW1uTGlzdCgpIHtcbiAgICAgICAgY29uc3QgbmVzdGVkQ29sdW1ucyA9IHRoaXMuY2hpbGRyZW4ubWFwKChsYXlvdXQpID0+IGxheW91dC5jb2x1bW5MaXN0LnRvQXJyYXkoKSk7XG4gICAgICAgIGNvbnN0IGNvbHNBcnJheSA9IFtdLmNvbmNhdC5hcHBseShbXSwgbmVzdGVkQ29sdW1ucyk7XG4gICAgICAgIGNvbnN0IHRvcENvbHMgPSB0aGlzLmNvbHVtbkxpc3QuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29sc0FycmF5LmluZGV4T2YoaXRlbSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgLyogUmVzZXQgdGhlIGRlZmF1bHQgd2lkdGggb2YgdGhlIGNvbHVtbnMgdGhhdCBjb21lIGludG8gdGhpcyByb3cgaXNsYW5kLFxuICAgICAgICAgICAgICAgIGJlY2F1c2UgdGhlIHJvb3QgY2F0Y2hlcyB0aGVtIGZpcnN0IGR1cmluZyB0aGUgZGV0ZWN0Q2hhbmdlcygpIGFuZCBzZXRzIHRoZWlyIGRlZmF1bHRXaWR0aC4gKi9cbiAgICAgICAgICAgICAgICBpdGVtLmRlZmF1bHRXaWR0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2hpbGRDb2x1bW5zLnJlc2V0KHRvcENvbHMpO1xuXG4gICAgICAgIGlmICh0aGlzLnBhcmVudElzbGFuZCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRJc2xhbmQuY29sdW1uTGlzdC5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucm9vdEdyaWQuY29sdW1uTGlzdC5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucm93SXNsYW5kQVBJLmdldENoaWxkR3JpZHMoKS5mb3JFYWNoKChncmlkOiBHcmlkVHlwZSkgPT4ge1xuICAgICAgICAgICAgZ3JpZC5jcmVhdGVDb2x1bW5zTGlzdCh0aGlzLmNoaWxkQ29sdW1ucy50b0FycmF5KCkpO1xuICAgICAgICAgICAgaWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGdyaWQubmF0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICBncmlkLnVwZGF0ZU9uUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUNoaWxkcmVuKCkge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5maXJzdCA9PT0gdGhpcykge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5yZXNldCh0aGlzLmNoaWxkcmVuLnRvQXJyYXkoKS5zbGljZSgxKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudElzbGFuZCA9IHRoaXM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYW5HcmlkU3RhdGUoZ3JpZCkge1xuICAgICAgICBncmlkLmNoaWxkR3JpZFRlbXBsYXRlcy5mb3JFYWNoKCh0bXBsKSA9PiB7XG4gICAgICAgICAgICB0bXBsLm93bmVyLmNsZWFuVmlldyh0bXBsLmNvbnRleHQudGVtcGxhdGVJRCk7XG4gICAgICAgIH0pO1xuICAgICAgICBncmlkLmNoaWxkR3JpZFRlbXBsYXRlcy5jbGVhcigpO1xuICAgICAgICBncmlkLm9uUm93SXNsYW5kQ2hhbmdlKCk7XG4gICAgfVxufVxuIl19