@worktile/gantt 18.0.0-next.0 → 18.0.1

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.
@@ -276,7 +276,7 @@ export class NgxGanttComponent extends GanttUpper {
276
276
  provide: GANTT_ABSTRACT_TOKEN,
277
277
  useExisting: forwardRef(() => NgxGanttComponent)
278
278
  }
279
- ], queries: [{ propertyName: "table", first: true, predicate: NgxGanttTableComponent, descendants: true }, { propertyName: "tableEmptyTemplate", first: true, predicate: ["tableEmpty"], descendants: true, static: true }, { propertyName: "footerTemplate", first: true, predicate: ["footer"], descendants: true, static: true }, { propertyName: "columns", predicate: NgxGanttTableColumnComponent, descendants: true }], viewQueries: [{ propertyName: "ganttRoot", first: true, predicate: ["ganttRoot"], descendants: true }, { propertyName: "virtualScroll", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ngx-gantt-root #ganttRoot>\n <div class=\"gantt-header\">\n <gantt-table-header #tableHeader [columns]=\"columns\"></gantt-table-header>\n <div class=\"gantt-container-header\">\n <gantt-calendar-header [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"></gantt-calendar-header>\n </div>\n </div>\n <gantt-loader *ngIf=\"loading\"></gantt-loader>\n\n <cdk-virtual-scroll-viewport\n class=\"gantt-virtual-scroll-viewport\"\n [ngClass]=\"{\n 'gantt-normal-viewport': !virtualScrollEnabled,\n 'gantt-scroll-container': virtualScrollEnabled,\n 'with-footer': table?.tableFooterTemplate || footerTemplate\n }\"\n [style.top.px]=\"styles.headerHeight\"\n [itemSize]=\"styles.lineHeight\"\n [minBufferPx]=\"styles.lineHeight * 10\"\n [maxBufferPx]=\"styles.lineHeight * 20\"\n (scrolledIndexChange)=\"scrolledIndexChange($event)\"\n >\n <ng-container *cdkVirtualFor=\"let item of flatItems; trackBy: trackBy\"></ng-container>\n <div class=\"gantt-side\" [style.width.px]=\"tableHeader.tableWidth + 1\" [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-side-container\">\n <div class=\"gantt-table\">\n <gantt-table-body\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [columns]=\"columns\"\n [groupTemplate]=\"groupTemplate\"\n [emptyTemplate]=\"table.tableEmptyTemplate || tableEmptyTemplate\"\n [rowBeforeTemplate]=\"table?.rowBeforeTemplate\"\n [rowAfterTemplate]=\"table?.rowAfterTemplate\"\n [draggable]=\"table.draggable\"\n [dropEnterPredicate]=\"table.dropEnterPredicate\"\n (dragDropped)=\"table.dragDropped.emit($event)\"\n (dragStarted)=\"itemDragStarted($event)\"\n (dragEnded)=\"itemDragEnded($event)\"\n (itemClick)=\"selectItem($event)\"\n >\n </gantt-table-body>\n </div>\n </div>\n </div>\n <div class=\"gantt-container\">\n <gantt-calendar-grid\n [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"\n [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\"\n ></gantt-calendar-grid>\n <div class=\"gantt-main\">\n <gantt-main\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [itemTemplate]=\"itemTemplate\"\n [barTemplate]=\"barTemplate\"\n [rangeTemplate]=\"rangeTemplate\"\n [baselineTemplate]=\"baselineTemplate\"\n (barClick)=\"barClick.emit($event)\"\n (lineClick)=\"lineClick.emit($event)\"\n >\n </gantt-main>\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n\n <gantt-drag-backdrop [style.left.px]=\"tableHeader.tableWidth + 1\"></gantt-drag-backdrop>\n\n <div\n class=\"gantt-scrollbar\"\n [style.height.px]=\"ganttRoot.horizontalScrollbarHeight + 1\"\n [style.right.px]=\"ganttRoot.verticalScrollbarWidth\"\n >\n <div\n [style.width.px]=\"tableHeader.tableWidth\"\n class=\"gantt-table-scrollbar\"\n [class.with-scrollbar]=\"ganttRoot.horizontalScrollbarHeight\"\n ></div>\n <div class=\"gantt-main-scrollbar\">\n <div class=\"h-100\" [style.width.px]=\"view.width\"></div>\n </div>\n </div>\n\n <div class=\"gantt-footer\" [style.right.px]=\"ganttRoot.verticalScrollbarWidth\" [style.bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-table-footer\" [style.width.px]=\"tableHeader.tableWidth + 1\" *ngIf=\"table?.tableFooterTemplate\">\n <ng-template [ngTemplateOutlet]=\"table?.tableFooterTemplate\" [ngTemplateOutletContext]=\"{ columns: columns }\"> </ng-template>\n </div>\n <div class=\"gantt-container-footer\" *ngIf=\"footerTemplate\">\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"> </ng-template>\n </div>\n </div>\n</ngx-gantt-root>\n", dependencies: [{ kind: "component", type: NgxGanttRootComponent, selector: "ngx-gantt-root", inputs: ["sideWidth"] }, { kind: "component", type: GanttTableHeaderComponent, selector: "gantt-table-header", inputs: ["columns"] }, { kind: "component", type: GanttCalendarHeaderComponent, selector: "gantt-calendar-header" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: GanttLoaderComponent, selector: "gantt-loader" }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: GanttTableBodyComponent, selector: "gantt-table-body", inputs: ["viewportItems", "flatItems", "columns", "groupTemplate", "emptyTemplate", "rowBeforeTemplate", "rowAfterTemplate", "draggable", "dropEnterPredicate"], outputs: ["dragDropped", "dragStarted", "dragEnded", "itemClick"] }, { kind: "component", type: GanttCalendarGridComponent, selector: "gantt-calendar-grid" }, { kind: "component", type: GanttMainComponent, selector: "gantt-main", inputs: ["viewportItems", "flatItems", "groupHeaderTemplate", "itemTemplate", "barTemplate", "rangeTemplate", "baselineTemplate"], outputs: ["barClick", "lineClick"] }, { kind: "component", type: GanttDragBackdropComponent, selector: "gantt-drag-backdrop" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
279
+ ], queries: [{ propertyName: "table", first: true, predicate: NgxGanttTableComponent, descendants: true }, { propertyName: "tableEmptyTemplate", first: true, predicate: ["tableEmpty"], descendants: true, static: true }, { propertyName: "footerTemplate", first: true, predicate: ["footer"], descendants: true, static: true }, { propertyName: "columns", predicate: NgxGanttTableColumnComponent, descendants: true }], viewQueries: [{ propertyName: "ganttRoot", first: true, predicate: ["ganttRoot"], descendants: true }, { propertyName: "virtualScroll", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ngx-gantt-root #ganttRoot>\n <div class=\"gantt-header\">\n <gantt-table-header #tableHeader [columns]=\"columns\"></gantt-table-header>\n <div class=\"gantt-container-header\">\n <gantt-calendar-header [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"></gantt-calendar-header>\n </div>\n </div>\n <gantt-loader *ngIf=\"loading\"></gantt-loader>\n\n <cdk-virtual-scroll-viewport\n class=\"gantt-virtual-scroll-viewport\"\n [ngClass]=\"{\n 'gantt-normal-viewport': !virtualScrollEnabled,\n 'gantt-scroll-container': virtualScrollEnabled,\n 'with-footer': table?.tableFooterTemplate || footerTemplate\n }\"\n [style.top.px]=\"styles.headerHeight\"\n [itemSize]=\"styles.lineHeight\"\n [minBufferPx]=\"styles.lineHeight * 10\"\n [maxBufferPx]=\"styles.lineHeight * 20\"\n (scrolledIndexChange)=\"scrolledIndexChange($event)\"\n >\n <ng-container *cdkVirtualFor=\"let item of flatItems; trackBy: trackBy\"></ng-container>\n <div class=\"gantt-side\" [style.width.px]=\"tableHeader.tableWidth + 1\" [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-side-container\">\n <div class=\"gantt-table\">\n <gantt-table-body\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [columns]=\"columns\"\n [groupTemplate]=\"groupTemplate\"\n [emptyTemplate]=\"table.tableEmptyTemplate || tableEmptyTemplate\"\n [rowBeforeTemplate]=\"table?.rowBeforeTemplate\"\n [rowAfterTemplate]=\"table?.rowAfterTemplate\"\n [draggable]=\"table.draggable\"\n [dropEnterPredicate]=\"table.dropEnterPredicate\"\n (dragDropped)=\"table.dragDropped.emit($event)\"\n (dragStarted)=\"itemDragStarted($event)\"\n (dragEnded)=\"itemDragEnded($event)\"\n (itemClick)=\"selectItem($event)\"\n >\n </gantt-table-body>\n </div>\n </div>\n </div>\n <div class=\"gantt-container\">\n <gantt-calendar-grid\n [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"\n [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\"\n ></gantt-calendar-grid>\n <div class=\"gantt-main\">\n <gantt-main\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [itemTemplate]=\"itemTemplate\"\n [barTemplate]=\"barTemplate\"\n [rangeTemplate]=\"rangeTemplate\"\n [baselineTemplate]=\"baselineTemplate\"\n (barClick)=\"barClick.emit($event)\"\n (lineClick)=\"lineClick.emit($event)\"\n >\n </gantt-main>\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n\n <gantt-drag-backdrop [style.left.px]=\"tableHeader.tableWidth + 1\"></gantt-drag-backdrop>\n\n <div\n class=\"gantt-scrollbar\"\n [style.height.px]=\"ganttRoot.horizontalScrollbarHeight + 1\"\n [style.right.px]=\"ganttRoot.verticalScrollbarWidth\"\n [ngClass]=\"{ 'gantt-scrollbar-bg': table?.tableFooterTemplate }\"\n >\n <div\n [style.width.px]=\"tableHeader.tableWidth\"\n class=\"gantt-table-scrollbar\"\n [class.with-scrollbar]=\"ganttRoot.horizontalScrollbarHeight\"\n ></div>\n <div class=\"gantt-main-scrollbar\">\n <div class=\"h-100\" [style.width.px]=\"view.width\"></div>\n </div>\n </div>\n\n <div class=\"gantt-footer\" [style.right.px]=\"ganttRoot.verticalScrollbarWidth\" [style.bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-table-footer\" [style.width.px]=\"tableHeader.tableWidth + 1\" *ngIf=\"table?.tableFooterTemplate\">\n <ng-template [ngTemplateOutlet]=\"table?.tableFooterTemplate\" [ngTemplateOutletContext]=\"{ columns: columns }\"> </ng-template>\n </div>\n <div class=\"gantt-container-footer\" *ngIf=\"footerTemplate\">\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"> </ng-template>\n </div>\n </div>\n</ngx-gantt-root>\n", dependencies: [{ kind: "component", type: NgxGanttRootComponent, selector: "ngx-gantt-root", inputs: ["sideWidth"] }, { kind: "component", type: GanttTableHeaderComponent, selector: "gantt-table-header", inputs: ["columns"] }, { kind: "component", type: GanttCalendarHeaderComponent, selector: "gantt-calendar-header" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: GanttLoaderComponent, selector: "gantt-loader" }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: GanttTableBodyComponent, selector: "gantt-table-body", inputs: ["viewportItems", "flatItems", "columns", "groupTemplate", "emptyTemplate", "rowBeforeTemplate", "rowAfterTemplate", "draggable", "dropEnterPredicate"], outputs: ["dragDropped", "dragStarted", "dragEnded", "itemClick"] }, { kind: "component", type: GanttCalendarGridComponent, selector: "gantt-calendar-grid" }, { kind: "component", type: GanttMainComponent, selector: "gantt-main", inputs: ["viewportItems", "flatItems", "groupHeaderTemplate", "itemTemplate", "barTemplate", "rangeTemplate", "baselineTemplate"], outputs: ["barClick", "lineClick"] }, { kind: "component", type: GanttDragBackdropComponent, selector: "gantt-drag-backdrop" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
280
280
  }
281
281
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgxGanttComponent, decorators: [{
282
282
  type: Component,
@@ -304,7 +304,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
304
304
  GanttMainComponent,
305
305
  GanttDragBackdropComponent,
306
306
  NgTemplateOutlet
307
- ], template: "<ngx-gantt-root #ganttRoot>\n <div class=\"gantt-header\">\n <gantt-table-header #tableHeader [columns]=\"columns\"></gantt-table-header>\n <div class=\"gantt-container-header\">\n <gantt-calendar-header [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"></gantt-calendar-header>\n </div>\n </div>\n <gantt-loader *ngIf=\"loading\"></gantt-loader>\n\n <cdk-virtual-scroll-viewport\n class=\"gantt-virtual-scroll-viewport\"\n [ngClass]=\"{\n 'gantt-normal-viewport': !virtualScrollEnabled,\n 'gantt-scroll-container': virtualScrollEnabled,\n 'with-footer': table?.tableFooterTemplate || footerTemplate\n }\"\n [style.top.px]=\"styles.headerHeight\"\n [itemSize]=\"styles.lineHeight\"\n [minBufferPx]=\"styles.lineHeight * 10\"\n [maxBufferPx]=\"styles.lineHeight * 20\"\n (scrolledIndexChange)=\"scrolledIndexChange($event)\"\n >\n <ng-container *cdkVirtualFor=\"let item of flatItems; trackBy: trackBy\"></ng-container>\n <div class=\"gantt-side\" [style.width.px]=\"tableHeader.tableWidth + 1\" [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-side-container\">\n <div class=\"gantt-table\">\n <gantt-table-body\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [columns]=\"columns\"\n [groupTemplate]=\"groupTemplate\"\n [emptyTemplate]=\"table.tableEmptyTemplate || tableEmptyTemplate\"\n [rowBeforeTemplate]=\"table?.rowBeforeTemplate\"\n [rowAfterTemplate]=\"table?.rowAfterTemplate\"\n [draggable]=\"table.draggable\"\n [dropEnterPredicate]=\"table.dropEnterPredicate\"\n (dragDropped)=\"table.dragDropped.emit($event)\"\n (dragStarted)=\"itemDragStarted($event)\"\n (dragEnded)=\"itemDragEnded($event)\"\n (itemClick)=\"selectItem($event)\"\n >\n </gantt-table-body>\n </div>\n </div>\n </div>\n <div class=\"gantt-container\">\n <gantt-calendar-grid\n [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"\n [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\"\n ></gantt-calendar-grid>\n <div class=\"gantt-main\">\n <gantt-main\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [itemTemplate]=\"itemTemplate\"\n [barTemplate]=\"barTemplate\"\n [rangeTemplate]=\"rangeTemplate\"\n [baselineTemplate]=\"baselineTemplate\"\n (barClick)=\"barClick.emit($event)\"\n (lineClick)=\"lineClick.emit($event)\"\n >\n </gantt-main>\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n\n <gantt-drag-backdrop [style.left.px]=\"tableHeader.tableWidth + 1\"></gantt-drag-backdrop>\n\n <div\n class=\"gantt-scrollbar\"\n [style.height.px]=\"ganttRoot.horizontalScrollbarHeight + 1\"\n [style.right.px]=\"ganttRoot.verticalScrollbarWidth\"\n >\n <div\n [style.width.px]=\"tableHeader.tableWidth\"\n class=\"gantt-table-scrollbar\"\n [class.with-scrollbar]=\"ganttRoot.horizontalScrollbarHeight\"\n ></div>\n <div class=\"gantt-main-scrollbar\">\n <div class=\"h-100\" [style.width.px]=\"view.width\"></div>\n </div>\n </div>\n\n <div class=\"gantt-footer\" [style.right.px]=\"ganttRoot.verticalScrollbarWidth\" [style.bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-table-footer\" [style.width.px]=\"tableHeader.tableWidth + 1\" *ngIf=\"table?.tableFooterTemplate\">\n <ng-template [ngTemplateOutlet]=\"table?.tableFooterTemplate\" [ngTemplateOutletContext]=\"{ columns: columns }\"> </ng-template>\n </div>\n <div class=\"gantt-container-footer\" *ngIf=\"footerTemplate\">\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"> </ng-template>\n </div>\n </div>\n</ngx-gantt-root>\n" }]
307
+ ], template: "<ngx-gantt-root #ganttRoot>\n <div class=\"gantt-header\">\n <gantt-table-header #tableHeader [columns]=\"columns\"></gantt-table-header>\n <div class=\"gantt-container-header\">\n <gantt-calendar-header [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"></gantt-calendar-header>\n </div>\n </div>\n <gantt-loader *ngIf=\"loading\"></gantt-loader>\n\n <cdk-virtual-scroll-viewport\n class=\"gantt-virtual-scroll-viewport\"\n [ngClass]=\"{\n 'gantt-normal-viewport': !virtualScrollEnabled,\n 'gantt-scroll-container': virtualScrollEnabled,\n 'with-footer': table?.tableFooterTemplate || footerTemplate\n }\"\n [style.top.px]=\"styles.headerHeight\"\n [itemSize]=\"styles.lineHeight\"\n [minBufferPx]=\"styles.lineHeight * 10\"\n [maxBufferPx]=\"styles.lineHeight * 20\"\n (scrolledIndexChange)=\"scrolledIndexChange($event)\"\n >\n <ng-container *cdkVirtualFor=\"let item of flatItems; trackBy: trackBy\"></ng-container>\n <div class=\"gantt-side\" [style.width.px]=\"tableHeader.tableWidth + 1\" [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-side-container\">\n <div class=\"gantt-table\">\n <gantt-table-body\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [columns]=\"columns\"\n [groupTemplate]=\"groupTemplate\"\n [emptyTemplate]=\"table.tableEmptyTemplate || tableEmptyTemplate\"\n [rowBeforeTemplate]=\"table?.rowBeforeTemplate\"\n [rowAfterTemplate]=\"table?.rowAfterTemplate\"\n [draggable]=\"table.draggable\"\n [dropEnterPredicate]=\"table.dropEnterPredicate\"\n (dragDropped)=\"table.dragDropped.emit($event)\"\n (dragStarted)=\"itemDragStarted($event)\"\n (dragEnded)=\"itemDragEnded($event)\"\n (itemClick)=\"selectItem($event)\"\n >\n </gantt-table-body>\n </div>\n </div>\n </div>\n <div class=\"gantt-container\">\n <gantt-calendar-grid\n [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"\n [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\"\n ></gantt-calendar-grid>\n <div class=\"gantt-main\">\n <gantt-main\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [itemTemplate]=\"itemTemplate\"\n [barTemplate]=\"barTemplate\"\n [rangeTemplate]=\"rangeTemplate\"\n [baselineTemplate]=\"baselineTemplate\"\n (barClick)=\"barClick.emit($event)\"\n (lineClick)=\"lineClick.emit($event)\"\n >\n </gantt-main>\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n\n <gantt-drag-backdrop [style.left.px]=\"tableHeader.tableWidth + 1\"></gantt-drag-backdrop>\n\n <div\n class=\"gantt-scrollbar\"\n [style.height.px]=\"ganttRoot.horizontalScrollbarHeight + 1\"\n [style.right.px]=\"ganttRoot.verticalScrollbarWidth\"\n [ngClass]=\"{ 'gantt-scrollbar-bg': table?.tableFooterTemplate }\"\n >\n <div\n [style.width.px]=\"tableHeader.tableWidth\"\n class=\"gantt-table-scrollbar\"\n [class.with-scrollbar]=\"ganttRoot.horizontalScrollbarHeight\"\n ></div>\n <div class=\"gantt-main-scrollbar\">\n <div class=\"h-100\" [style.width.px]=\"view.width\"></div>\n </div>\n </div>\n\n <div class=\"gantt-footer\" [style.right.px]=\"ganttRoot.verticalScrollbarWidth\" [style.bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-table-footer\" [style.width.px]=\"tableHeader.tableWidth + 1\" *ngIf=\"table?.tableFooterTemplate\">\n <ng-template [ngTemplateOutlet]=\"table?.tableFooterTemplate\" [ngTemplateOutletContext]=\"{ columns: columns }\"> </ng-template>\n </div>\n <div class=\"gantt-container-footer\" *ngIf=\"footerTemplate\">\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"> </ng-template>\n </div>\n </div>\n</ngx-gantt-root>\n" }]
308
308
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i1.ViewportRuler }, { type: undefined, decorators: [{
309
309
  type: Inject,
310
310
  args: [GANTT_GLOBAL_CONFIG]
@@ -351,4 +351,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
351
351
  type: ViewChild,
352
352
  args: [CdkVirtualScrollViewport]
353
353
  }] } });
354
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2dhbnR0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3BhY2thZ2VzL2dhbnR0L3NyYy9nYW50dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsZUFBZSxFQUFFLHdCQUF3QixFQUFpQixNQUFNLHdCQUF3QixDQUFDO0FBQzdILE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEUsT0FBTyxFQUdILHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFFZixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEVBSU4sU0FBUyxFQUNULFVBQVUsRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVlqRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNoRyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUN0RyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNoRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUM3RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNuRyxPQUFPLEVB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TTtnQkFFd0MsS0FBSztzQkFBbkQsWUFBWTt1QkFBQyxzQkFBc0I7Z0JBRWtDLE9BQU87c0JBQTVFLGVBQWU7dUJBQUMsNEJBQTRCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUd0QixrQkFBa0I7c0JBQS9ELFlBQVk7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFcEIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUVvQixjQUFjO3NCQUF2RCxZQUFZO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRUgsYUFBYTtzQkFBakQsU0FBUzt1QkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsLCBDZGtWaXJ0dWFsRm9yT2YsIENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgVmlld3BvcnRSdWxlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgTmdDbGFzcywgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBmb3J3YXJkUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmluYWxpemUsIHNraXAsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gICAgR2FudHRHcm91cEludGVybmFsLFxuICAgIEdhbnR0SXRlbSxcbiAgICBHYW50dEl0ZW1JbnRlcm5hbCxcbiAgICBHYW50dExpbmVDbGlja0V2ZW50LFxuICAgIEdhbnR0TGlua0RyYWdFdmVudCxcbiAgICBHYW50dFNlbGVjdGVkRXZlbnQsXG4gICAgR2FudHRUYWJsZURyYWdFbmRlZEV2ZW50LFxuICAgIEdhbnR0VGFibGVEcmFnU3RhcnRlZEV2ZW50LFxuICAgIEdhbnR0VmlydHVhbFNjcm9sbGVkSW5kZXhDaGFuZ2VFdmVudFxufSBmcm9tICcuL2NsYXNzJztcbmltcG9ydCB7IEdhbnR0Q2FsZW5kYXJHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhbGVuZGFyL2dyaWQvY2FsZW5kYXItZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2FudHRDYWxlbmRhckhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYWxlbmRhci9oZWFkZXIvY2FsZW5kYXItaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHYW50dERyYWdCYWNrZHJvcENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9kcmFnLWJhY2tkcm9wL2RyYWctYmFja2Ryb3AuY29tcG9uZW50JztcbmltcG9ydCB7IEdhbnR0TG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2xvYWRlci9sb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEdhbnR0TWFpbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9tYWluL2dhbnR0LW1haW4uY29tcG9uZW50JztcbmltcG9ydCB7IEdhbnR0VGFibGVCb2R5Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlL2JvZHkvZ2FudHQtdGFibGUtYm9keS5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2FudHRUYWJsZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS9oZWFkZXIvZ2FudHQtdGFibGUtaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHQU5UVF9BQlNUUkFDVF9UT0tFTiB9IGZyb20gJy4vZ2FudHQtYWJzdHJhY3QnO1xuaW1wb3J0IHsgR0FOVFRfVVBQRVJfVE9LRU4sIEdhbnR0VXBwZXIgfSBmcm9tICcuL2dhbnR0LXVwcGVyJztcbmltcG9ydCB7IEdBTlRUX0dMT0JBTF9DT05GSUcsIEdhbnR0R2xvYmFsQ29uZmlnIH0gZnJvbSAnLi9nYW50dC5jb25maWcnO1xuaW1wb3J0IHsgTmd4R2FudHRSb290Q29tcG9uZW50IH0gZnJvbSAnLi9yb290LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ3hHYW50dFRhYmxlQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS9nYW50dC1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IE5neEdhbnR0VGFibGVDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlL2dhbnR0LXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHYW50dERhdGUgfSBmcm9tICcuL3V0aWxzL2RhdGUnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSwga2V5QnksIHJlY3Vyc2l2ZUl0ZW1zLCB1bmlxQnkgfSBmcm9tICcuL3V0aWxzL2hlbHBlcnMnO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3gtZ2FudHQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9nYW50dC5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEdBTlRUX1VQUEVSX1RPS0VOLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IE5neEdhbnR0Q29tcG9uZW50XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEdBTlRUX0FCU1RSQUNUX1RPS0VOLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTmd4R2FudHRDb21wb25lbnQpXG4gICAgICAgIH1cbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ3hHYW50dFJvb3RDb21wb25lbnQsXG4gICAgICAgIEdhbnR0VGFibGVIZWFkZXJDb21wb25lbnQsXG4gICAgICAgIEdhbnR0Q2FsZW5kYXJIZWFkZXJDb21wb25lbnQsXG4gICAgICAgIE5nSWYsXG4gICAgICAgIEdhbnR0TG9hZGVyQ29tcG9uZW50LFxuICAgICAgICBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsXG4gICAgICAgIENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIENka1ZpcnR1YWxGb3JPZixcbiAgICAgICAgR2FudHRUYWJsZUJvZHlDb21wb25lbnQsXG4gICAgICAgIEdhbnR0Q2FsZW5kYXJHcmlkQ29tcG9uZW50LFxuICAgICAgICBHYW50dE1haW5Db21wb25lbnQsXG4gICAgICAgIEdhbnR0RHJhZ0JhY2tkcm9wQ29tcG9uZW50LFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hHYW50dENvbXBvbmVudCBleHRlbmRzIEdhbnR0VXBwZXIgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gICAgQElucHV0KCkgbWF4TGV2ZWwgPSAyO1xuXG4gICAgQElucHV0KCkgYXN5bmM6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBjaGlsZHJlblJlc29sdmU6IChHYW50dEl0ZW0pID0+IE9ic2VydmFibGU8R2FudHRJdGVtW10+O1xuXG4gICAgQElucHV0KCkgb3ZlcnJpZGUgbGlua2FibGU6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBzZXQgbG9hZGluZyhsb2FkaW5nOiBib29sZWFuKSB7XG4gICAgICAgIGlmIChsb2FkaW5nKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sb2FkaW5nRGVsYXkgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZyA9IGxvYWRpbmc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIH0sIHRoaXMubG9hZGluZ0RlbGF5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZyA9IGxvYWRpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5sb2FkaW5nVGltZXIpO1xuICAgICAgICAgICAgdGhpcy5fbG9hZGluZyA9IGxvYWRpbmc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKSB2aXJ0dWFsU2Nyb2xsRW5hYmxlZCA9IHRydWU7XG5cbiAgICBASW5wdXQoKSBsb2FkaW5nRGVsYXkgPSAwO1xuXG4gICAgQE91dHB1dCgpIGxpbmtEcmFnU3RhcnRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRMaW5rRHJhZ0V2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpIG92ZXJyaWRlIGxpbmtEcmFnRW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0TGlua0RyYWdFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKSBsaW5lQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0TGluZUNsaWNrRXZlbnQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgc2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0U2VsZWN0ZWRFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKSB2aXJ0dWFsU2Nyb2xsZWRJbmRleENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRWaXJ0dWFsU2Nyb2xsZWRJbmRleENoYW5nZUV2ZW50PigpO1xuXG4gICAgQENvbnRlbnRDaGlsZChOZ3hHYW50dFRhYmxlQ29tcG9uZW50KSBvdmVycmlkZSB0YWJsZTogTmd4R2FudHRUYWJsZUNvbXBvbmVudDtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oTmd4R2FudHRUYWJsZUNvbHVtbkNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBjb2x1bW5zOiBRdWVyeUxpc3Q8Tmd4R2FudHRUYWJsZUNvbHVtbkNvbXBvbmVudD47XG5cbiAgICAvLyDmraTmqKHniYjlt7LmjKrliLAgdGFibGUg57uE5Lu25LiL77yM5Li65LqG5YW85a655q2k5aSE5pqC5pe25L+d55WZXG4gICAgQENvbnRlbnRDaGlsZCgndGFibGVFbXB0eScsIHsgc3RhdGljOiB0cnVlIH0pIHRhYmxlRW1wdHlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2dhbnR0Um9vdCcpIGdhbnR0Um9vdDogTmd4R2FudHRSb290Q29tcG9uZW50O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnZm9vdGVyJywgeyBzdGF0aWM6IHRydWUgfSkgZm9vdGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCkgdmlydHVhbFNjcm9sbDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gICAgZ2V0IGxvYWRpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkaW5nO1xuICAgIH1cblxuICAgIHB1YmxpYyBmbGF0SXRlbXM6IChHYW50dEdyb3VwSW50ZXJuYWwgfCBHYW50dEl0ZW1JbnRlcm5hbClbXSA9IFtdO1xuXG4gICAgcHVibGljIHZpZXdwb3J0SXRlbXM6IChHYW50dEdyb3VwSW50ZXJuYWwgfCBHYW50dEl0ZW1JbnRlcm5hbClbXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBfbG9hZGluZyA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBsb2FkaW5nVGltZXI7XG5cbiAgICBwcml2YXRlIHJhbmdlU3RhcnQgPSAwO1xuXG4gICAgcHJpdmF0ZSByYW5nZUVuZCA9IDA7XG5cbiAgICBwcml2YXRlIGZsYXRJdGVtc01hcDogRGljdGlvbmFyeTxHYW50dEdyb3VwSW50ZXJuYWwgfCBHYW50dEl0ZW1JbnRlcm5hbD47XG5cbiAgICBwcml2YXRlIGRyYWdnaW5nSXRlbTogR2FudHRJdGVtO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSB2aWV3cG9ydFJ1bGVyOiBWaWV3cG9ydFJ1bGVyLFxuICAgICAgICBASW5qZWN0KEdBTlRUX0dMT0JBTF9DT05GSUcpIGNvbmZpZzogR2FudHRHbG9iYWxDb25maWdcbiAgICApIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgY2RyLCBuZ1pvbmUsIGNvbmZpZyk7XG4gICAgICAgIHRoaXMuY29tcHV0ZUFsbFJlZnMgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5idWlsZEZsYXRJdGVtcygpO1xuICAgICAgICAvLyBOb3RlOiB0aGUgem9uZSBtYXkgYmUgbm9vcGVkIHRocm91Z2ggYEJvb3RzdHJhcE9wdGlvbnNgIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUgcm9vdCBtb2R1bGUuIFRoaXMgbWVhbnNcbiAgICAgICAgLy8gdGhlIGBvblN0YWJsZWAgd2lsbCBuZXZlciBlbWl0IGFueSB2YWx1ZS5cbiAgICAgICAgY29uc3Qgb25TdGFibGUkID0gdGhpcy5uZ1pvbmUuaXNTdGFibGUgPyBmcm9tKFByb21pc2UucmVzb2x2ZSgpKSA6IHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSk7XG4gICAgICAgIC8vIE5vcm1hbGx5IHRoaXMgaXNuJ3QgaW4gdGhlIHpvbmUsIGJ1dCBpdCBjYW4gY2F1c2UgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgZm9yIGFwcHNcbiAgICAgICAgLy8gdXNpbmcgYHpvbmUtcGF0Y2gtcnhqc2AgYmVjYXVzZSBpdCdsbCB0cmlnZ2VyIGEgY2hhbmdlIGRldGVjdGlvbiB3aGVuIGl0IHVuc3Vic2NyaWJlcy5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgb25TdGFibGUkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIubGlua0RyYWdTdGFydGVkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKChldmVudDogR2FudHRMaW5rRHJhZ0V2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlua0RyYWdTdGFydGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmxpbmtEcmFnRW5kZWQucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKGV2ZW50OiBHYW50dExpbmtEcmFnRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5rRHJhZ0VuZGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudmlldy5zdGFydCQucGlwZShza2lwKDEpLCB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21wdXRlVGVtcERhdGFSZWZzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy52aWV3cG9ydEl0ZW1zID0gdGhpcy5mbGF0SXRlbXMuc2xpY2UodGhpcy5yYW5nZVN0YXJ0LCB0aGlzLnJhbmdlRW5kKTtcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZVRlbXBEYXRhUmVmcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICAgICAgaWYgKCF0aGlzLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy52aWV3VHlwZSAmJiBjaGFuZ2VzLnZpZXdUeXBlLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld3BvcnRJdGVtcyA9IHRoaXMuZmxhdEl0ZW1zLnNsaWNlKHRoaXMucmFuZ2VTdGFydCwgdGhpcy5yYW5nZUVuZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlVGVtcERhdGFSZWZzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5vcmlnaW5JdGVtcyB8fCBjaGFuZ2VzLm9yaWdpbkdyb3Vwcykge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRGbGF0SXRlbXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdwb3J0SXRlbXMgPSB0aGlzLmZsYXRJdGVtcy5zbGljZSh0aGlzLnJhbmdlU3RhcnQsIHRoaXMucmFuZ2VFbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZVRlbXBEYXRhUmVmcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsLnJlbmRlcmVkUmFuZ2VTdHJlYW0ucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKHJhbmdlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlua3NFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmdhbnR0LWxpbmtzLW92ZXJsYXknKSBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAgICAgICAgICAgICBsaW5rc0VsZW1lbnQuc3R5bGUudG9wID0gYCR7LSh0aGlzLnN0eWxlcy5saW5lSGVpZ2h0ICogcmFuZ2Uuc3RhcnQpfXB4YDtcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmdlU3RhcnQgPSByYW5nZS5zdGFydDtcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmdlRW5kID0gcmFuZ2UuZW5kO1xuICAgICAgICAgICAgICAgIHRoaXMudmlld3BvcnRJdGVtcyA9IHRoaXMuZmxhdEl0ZW1zLnNsaWNlKHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kRHJhZ2dpbmdJdGVtVG9WaWV3cG9ydEl0ZW1zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlVGVtcERhdGFSZWZzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbEVuYWJsZWQgJiYgdGhpcy52aWV3cG9ydFJ1bGVyICYmIHRoaXMudmlydHVhbFNjcm9sbC5nZXRSZW5kZXJlZFJhbmdlKCkuZW5kID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgb25TdGFibGUkID0gdGhpcy5uZ1pvbmUuaXNTdGFibGUgPyBmcm9tKFByb21pc2UucmVzb2x2ZSgpKSA6IHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSk7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgb25TdGFibGUkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmdhbnR0Um9vdC52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbnR0Um9vdC5jb21wdXRlU2Nyb2xsQmFyT2Zmc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkRmxhdEl0ZW1zKCkge1xuICAgICAgICBjb25zdCB2aXJ0dWFsRGF0YSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5ncm91cHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgICAgICAgICAgIHZpcnR1YWxEYXRhLnB1c2goZ3JvdXApO1xuICAgICAgICAgICAgICAgIGlmIChncm91cC5leHBhbmRlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IHJlY3Vyc2l2ZUl0ZW1zKGdyb3VwLml0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgdmlydHVhbERhdGEucHVzaCguLi5pdGVtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZpcnR1YWxEYXRhLnB1c2goLi4ucmVjdXJzaXZlSXRlbXModGhpcy5pdGVtcykpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmxhdEl0ZW1zID0gWy4uLnZpcnR1YWxEYXRhXTtcbiAgICAgICAgdGhpcy5mbGF0SXRlbXNNYXAgPSBrZXlCeSh0aGlzLmZsYXRJdGVtcywgJ2lkJyk7XG4gICAgICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5yYW5nZVN0YXJ0ID0gMDtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VFbmQgPSB0aGlzLmZsYXRJdGVtcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFmdGVyRXhwYW5kKCkge1xuICAgICAgICB0aGlzLmJ1aWxkRmxhdEl0ZW1zKCk7XG4gICAgICAgIHRoaXMudmlld3BvcnRJdGVtcyA9IHRoaXMuZmxhdEl0ZW1zLnNsaWNlKHRoaXMucmFuZ2VTdGFydCwgdGhpcy5yYW5nZUVuZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wdXRlVGVtcERhdGFSZWZzKCkge1xuICAgICAgICBjb25zdCB0ZW1wSXRlbURhdGEgPSBbXTtcbiAgICAgICAgdGhpcy52aWV3cG9ydEl0ZW1zLmZvckVhY2goKGRhdGE6IEdhbnR0R3JvdXBJbnRlcm5hbCB8IEdhbnR0SXRlbUludGVybmFsKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWRhdGEuaGFzT3duUHJvcGVydHkoJ2l0ZW1zJykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gZGF0YSBhcyBHYW50dEl0ZW1JbnRlcm5hbDtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5saW5rcykge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmxpbmtzLmZvckVhY2goKGxpbmspID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZsYXRJdGVtc01hcFtsaW5rLmxpbmtdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcEl0ZW1EYXRhLnB1c2godGhpcy5mbGF0SXRlbXNNYXBbbGluay5saW5rXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0ZW1wSXRlbURhdGEucHVzaChkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29tcHV0ZUl0ZW1zUmVmcyguLi51bmlxQnkodGVtcEl0ZW1EYXRhLCAnaWQnKSk7XG4gICAgICAgIHRoaXMuZmxhdEl0ZW1zID0gWy4uLnRoaXMuZmxhdEl0ZW1zXTtcbiAgICAgICAgdGhpcy52aWV3cG9ydEl0ZW1zID0gWy4uLnRoaXMudmlld3BvcnRJdGVtc107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBlbmREcmFnZ2luZ0l0ZW1Ub1ZpZXdwb3J0SXRlbXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmRyYWdnaW5nSXRlbSkge1xuICAgICAgICAgICAgbGV0IGZsYXRJdGVtID0gdGhpcy52aWV3cG9ydEl0ZW1zLmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5pZCA9PT0gdGhpcy5kcmFnZ2luZ0l0ZW0uaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghZmxhdEl0ZW0pIHtcbiAgICAgICAgICAgICAgICBmbGF0SXRlbSA9IHRoaXMuZmxhdEl0ZW1zLmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaWQgPT09IHRoaXMuZHJhZ2dpbmdJdGVtLmlkO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChmbGF0SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdwb3J0SXRlbXMucHVzaChmbGF0SXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwYW5kQ2hpbGRyZW4oaXRlbTogR2FudHRJdGVtSW50ZXJuYWwpIHtcbiAgICAgICAgaWYgKCFpdGVtLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICBpdGVtLnNldEV4cGFuZCh0cnVlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFzeW5jICYmIHRoaXMuY2hpbGRyZW5SZXNvbHZlICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuUmVzb2x2ZShpdGVtLm9yaWdpbilcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJFeHBhbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZENoYW5nZS5lbWl0KGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uYWRkQ2hpbGRyZW4oaXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlSXRlbXNSZWZzKC4uLml0ZW0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlSXRlbXNSZWZzKC4uLml0ZW0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJFeHBhbmQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZENoYW5nZS5lbWl0KGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbS5zZXRFeHBhbmQoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5hZnRlckV4cGFuZCgpO1xuICAgICAgICAgICAgdGhpcy5leHBhbmRDaGFuZ2UuZW1pdChpdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdEl0ZW0oc2VsZWN0RXZlbnQ6IEdhbnR0U2VsZWN0ZWRFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZXZlbnQsIHNlbGVjdGVkVmFsdWUgfSA9IHNlbGVjdEV2ZW50O1xuICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnRvZ2dsZSgoc2VsZWN0ZWRWYWx1ZSBhcyBHYW50dEl0ZW0pLmlkKTtcblxuICAgICAgICBjb25zdCBzZWxlY3RlZElkcyA9IHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQ7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBjb25zdCBfc2VsZWN0ZWRWYWx1ZSA9IHRoaXMuZ2V0R2FudHRJdGVtcyhzZWxlY3RlZElkcykubWFwKChpdGVtKSA9PiBpdGVtLm9yaWdpbik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoeyBldmVudCwgY3VycmVudDogc2VsZWN0ZWRWYWx1ZSBhcyBHYW50dEl0ZW0sIHNlbGVjdGVkVmFsdWU6IF9zZWxlY3RlZFZhbHVlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgX3NlbGVjdGVkVmFsdWUgPSB0aGlzLmdldEdhbnR0SXRlbShzZWxlY3RlZElkc1swXSk/Lm9yaWdpbjtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdCh7IGV2ZW50LCBjdXJyZW50OiBzZWxlY3RlZFZhbHVlIGFzIEdhbnR0SXRlbSwgc2VsZWN0ZWRWYWx1ZTogX3NlbGVjdGVkVmFsdWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzY3JvbGxUb1RvZGF5KCkge1xuICAgICAgICB0aGlzLmdhbnR0Um9vdC5zY3JvbGxUb1RvZGF5KCk7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9EYXRlKGRhdGU6IG51bWJlciB8IEdhbnR0RGF0ZSkge1xuICAgICAgICB0aGlzLmdhbnR0Um9vdC5zY3JvbGxUb0RhdGUoZGF0ZSk7XG4gICAgfVxuXG4gICAgc2Nyb2xsZWRJbmRleENoYW5nZShpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudmlydHVhbFNjcm9sbGVkSW5kZXhDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIHJlbmRlcmVkUmFuZ2U6IHtcbiAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5yYW5nZVN0YXJ0LFxuICAgICAgICAgICAgICAgIGVuZDogdGhpcy5yYW5nZUVuZFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLmZsYXRJdGVtcy5sZW5ndGhcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZXhwYW5kR3JvdXBzKGV4cGFuZGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBzLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gICAgICAgICAgICBncm91cC5zZXRFeHBhbmQoZXhwYW5kZWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmFmdGVyRXhwYW5kKCk7XG4gICAgICAgIHRoaXMuZXhwYW5kQ2hhbmdlLm5leHQobnVsbCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBleHBhbmRHcm91cChncm91cDogR2FudHRHcm91cEludGVybmFsKSB7XG4gICAgICAgIGdyb3VwLnNldEV4cGFuZCghZ3JvdXAuZXhwYW5kZWQpO1xuICAgICAgICB0aGlzLmFmdGVyRXhwYW5kKCk7XG4gICAgICAgIHRoaXMuZXhwYW5kQ2hhbmdlLmVtaXQoKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIGl0ZW1EcmFnU3RhcnRlZChldmVudDogR2FudHRUYWJsZURyYWdTdGFydGVkRXZlbnQpIHtcbiAgICAgICAgdGhpcy50YWJsZS5kcmFnU3RhcnRlZC5lbWl0KGV2ZW50KTtcbiAgICAgICAgdGhpcy5kcmFnZ2luZ0l0ZW0gPSBldmVudC5zb3VyY2U7XG4gICAgfVxuXG4gICAgaXRlbURyYWdFbmRlZChldmVudDogR2FudHRUYWJsZURyYWdFbmRlZEV2ZW50KSB7XG4gICAgICAgIHRoaXMudGFibGUuZHJhZ0VuZGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICB0aGlzLmRyYWdnaW5nSXRlbSA9IG51bGw7XG4gICAgfVxufVxuIiwiPG5neC1nYW50dC1yb290ICNnYW50dFJvb3Q+XG4gIDxkaXYgY2xhc3M9XCJnYW50dC1oZWFkZXJcIj5cbiAgICA8Z2FudHQtdGFibGUtaGVhZGVyICN0YWJsZUhlYWRlciBbY29sdW1uc109XCJjb2x1bW5zXCI+PC9nYW50dC10YWJsZS1oZWFkZXI+XG4gICAgPGRpdiBjbGFzcz1cImdhbnR0LWNvbnRhaW5lci1oZWFkZXJcIj5cbiAgICAgIDxnYW50dC1jYWxlbmRhci1oZWFkZXIgW3N0eWxlLnBhZGRpbmctcmlnaHQucHhdPVwiZ2FudHRSb290LnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGhcIj48L2dhbnR0LWNhbGVuZGFyLWhlYWRlcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxnYW50dC1sb2FkZXIgKm5nSWY9XCJsb2FkaW5nXCI+PC9nYW50dC1sb2FkZXI+XG5cbiAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxuICAgIGNsYXNzPVwiZ2FudHQtdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdnYW50dC1ub3JtYWwtdmlld3BvcnQnOiAhdmlydHVhbFNjcm9sbEVuYWJsZWQsXG4gICAgICAnZ2FudHQtc2Nyb2xsLWNvbnRhaW5lcic6IHZpcnR1YWxTY3JvbGxFbmFibGVkLFxuICAgICAgJ3dpdGgtZm9vdGVyJzogdGFibGU/LnRhYmxlRm9vdGVyVGVtcGxhdGUgfHwgZm9vdGVyVGVtcGxhdGVcbiAgICB9XCJcbiAgICBbc3R5bGUudG9wLnB4XT1cInN0eWxlcy5oZWFkZXJIZWlnaHRcIlxuICAgIFtpdGVtU2l6ZV09XCJzdHlsZXMubGluZUhlaWdodFwiXG4gICAgW21pbkJ1ZmZlclB4XT1cInN0eWxlcy5saW5lSGVpZ2h0ICogMTBcIlxuICAgIFttYXhCdWZmZXJQeF09XCJzdHlsZXMubGluZUhlaWdodCAqIDIwXCJcbiAgICAoc2Nyb2xsZWRJbmRleENoYW5nZSk9XCJzY3JvbGxlZEluZGV4Q2hhbmdlKCRldmVudClcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqY2RrVmlydHVhbEZvcj1cImxldCBpdGVtIG9mIGZsYXRJdGVtczsgdHJhY2tCeTogdHJhY2tCeVwiPjwvbmctY29udGFpbmVyPlxuICAgIDxkaXYgY2xhc3M9XCJnYW50dC1zaWRlXCIgW3N0eWxlLndpZHRoLnB4XT1cInRhYmxlSGVhZGVyLnRhYmxlV2lkdGggKyAxXCIgW3N0eWxlLnBhZGRpbmctYm90dG9tLnB4XT1cImdhbnR0Um9vdC5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ2FudHQtc2lkZS1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdhbnR0LXRhYmxlXCI+XG4gICAgICAgICAgPGdhbnR0LXRhYmxlLWJvZHlcbiAgICAgICAgICAgIFtmbGF0SXRlbXNdPVwiZmxhdEl0ZW1zXCJcbiAgICAgICAgICAgIFt2aWV3cG9ydEl0ZW1zXT1cInZpZXdwb3J0SXRlbXNcIlxuICAgICAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgICAgICAgICBbZ3JvdXBUZW1wbGF0ZV09XCJncm91cFRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtlbXB0eVRlbXBsYXRlXT1cInRhYmxlLnRhYmxlRW1wdHlUZW1wbGF0ZSB8fCB0YWJsZUVtcHR5VGVtcGxhdGVcIlxuICAgICAgICAgICAgW3Jvd0JlZm9yZVRlbXBsYXRlXT1cInRhYmxlPy5yb3dCZWZvcmVUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbcm93QWZ0ZXJUZW1wbGF0ZV09XCJ0YWJsZT8ucm93QWZ0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbZHJhZ2dhYmxlXT1cInRhYmxlLmRyYWdnYWJsZVwiXG4gICAgICAgICAgICBbZHJvcEVudGVyUHJlZGljYXRlXT1cInRhYmxlLmRyb3BFbnRlclByZWRpY2F0ZVwiXG4gICAgICAgICAgICAoZHJhZ0Ryb3BwZWQpPVwidGFibGUuZHJhZ0Ryb3BwZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChkcmFnU3RhcnRlZCk9XCJpdGVtRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoZHJhZ0VuZGVkKT1cIml0ZW1EcmFnRW5kZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoaXRlbUNsaWNrKT1cInNlbGVjdEl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvZ2FudHQtdGFibGUtYm9keT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZ2FudHQtY29udGFpbmVyXCI+XG4gICAgICA8Z2FudHQtY2FsZW5kYXItZ3JpZFxuICAgICAgICBbc3R5bGUucGFkZGluZy1yaWdodC5weF09XCJnYW50dFJvb3QudmVydGljYWxTY3JvbGxiYXJXaWR0aFwiXG4gICAgICAgIFtzdHlsZS5wYWRkaW5nLWJvdHRvbS5weF09XCJnYW50dFJvb3QuaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodFwiXG4gICAgICA+PC9nYW50dC1jYWxlbmRhci1ncmlkPlxuICAgICAgPGRpdiBjbGFzcz1cImdhbnR0LW1haW5cIj5cbiAgICAgICAgPGdhbnR0LW1haW5cbiAgICAgICAgICBbZmxhdEl0ZW1zXT1cImZsYXRJdGVtc1wiXG4gICAgICAgICAgW3ZpZXdwb3J0SXRlbXNdPVwidmlld3BvcnRJdGVtc1wiXG4gICAgICAgICAgW2dyb3VwSGVhZGVyVGVtcGxhdGVdPVwiZ3JvdXBIZWFkZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgW2l0ZW1UZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIlxuICAgICAgICAgIFtiYXJUZW1wbGF0ZV09XCJiYXJUZW1wbGF0ZVwiXG4gICAgICAgICAgW3JhbmdlVGVtcGxhdGVdPVwicmFuZ2VUZW1wbGF0ZVwiXG4gICAgICAgICAgW2Jhc2VsaW5lVGVtcGxhdGVdPVwiYmFzZWxpbmVUZW1wbGF0ZVwiXG4gICAgICAgICAgKGJhckNsaWNrKT1cImJhckNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgKGxpbmVDbGljayk9XCJsaW5lQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2dhbnR0LW1haW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG5cbiAgPGdhbnR0LWRyYWctYmFja2Ryb3AgW3N0eWxlLmxlZnQucHhdPVwidGFibGVIZWFkZXIudGFibGVXaWR0aCArIDFcIj48L2dhbnR0LWRyYWctYmFja2Ryb3A+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZ2FudHQtc2Nyb2xsYmFyXCJcbiAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImdhbnR0Um9vdC5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ICsgMVwiXG4gICAgW3N0eWxlLnJpZ2h0LnB4XT1cImdhbnR0Um9vdC52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIFtzdHlsZS53aWR0aC5weF09XCJ0YWJsZUhlYWRlci50YWJsZVdpZHRoXCJcbiAgICAgIGNsYXNzPVwiZ2FudHQtdGFibGUtc2Nyb2xsYmFyXCJcbiAgICAgIFtjbGFzcy53aXRoLXNjcm9sbGJhcl09XCJnYW50dFJvb3QuaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodFwiXG4gICAgPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJnYW50dC1tYWluLXNjcm9sbGJhclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImgtMTAwXCIgW3N0eWxlLndpZHRoLnB4XT1cInZpZXcud2lkdGhcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImdhbnR0LWZvb3RlclwiIFtzdHlsZS5yaWdodC5weF09XCJnYW50dFJvb3QudmVydGljYWxTY3JvbGxiYXJXaWR0aFwiIFtzdHlsZS5ib3R0b20ucHhdPVwiZ2FudHRSb290Lmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZ2FudHQtdGFibGUtZm9vdGVyXCIgW3N0eWxlLndpZHRoLnB4XT1cInRhYmxlSGVhZGVyLnRhYmxlV2lkdGggKyAxXCIgKm5nSWY9XCJ0YWJsZT8udGFibGVGb290ZXJUZW1wbGF0ZVwiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhYmxlPy50YWJsZUZvb3RlclRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgY29sdW1uczogY29sdW1ucyB9XCI+IDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImdhbnR0LWNvbnRhaW5lci1mb290ZXJcIiAqbmdJZj1cImZvb3RlclRlbXBsYXRlXCI+XG4gICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZm9vdGVyVGVtcGxhdGVcIj4gPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25neC1nYW50dC1yb290PlxuIl19
354
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2dhbnR0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3BhY2thZ2VzL2dhbnR0L3NyYy9nYW50dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsZUFBZSxFQUFFLHdCQUF3QixFQUFpQixNQUFNLHdCQUF3QixDQUFDO0FBQzdILE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEUsT0FBTyxFQUdILHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFFZixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEVBSU4sU0FBUyxFQUNULFVBQVUsRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVlqRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNoRyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUN0RyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNoRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUM3RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNuRyxPQUFPLEVB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TTtnQkFFd0MsS0FBSztzQkFBbkQsWUFBWTt1QkFBQyxzQkFBc0I7Z0JBRWtDLE9BQU87c0JBQTVFLGVBQWU7dUJBQUMsNEJBQTRCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUd0QixrQkFBa0I7c0JBQS9ELFlBQVk7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFcEIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUVvQixjQUFjO3NCQUF2RCxZQUFZO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRUgsYUFBYTtzQkFBakQsU0FBUzt1QkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsLCBDZGtWaXJ0dWFsRm9yT2YsIENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgVmlld3BvcnRSdWxlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgTmdDbGFzcywgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBmb3J3YXJkUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmluYWxpemUsIHNraXAsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gICAgR2FudHRHcm91cEludGVybmFsLFxuICAgIEdhbnR0SXRlbSxcbiAgICBHYW50dEl0ZW1JbnRlcm5hbCxcbiAgICBHYW50dExpbmVDbGlja0V2ZW50LFxuICAgIEdhbnR0TGlua0RyYWdFdmVudCxcbiAgICBHYW50dFNlbGVjdGVkRXZlbnQsXG4gICAgR2FudHRUYWJsZURyYWdFbmRlZEV2ZW50LFxuICAgIEdhbnR0VGFibGVEcmFnU3RhcnRlZEV2ZW50LFxuICAgIEdhbnR0VmlydHVhbFNjcm9sbGVkSW5kZXhDaGFuZ2VFdmVudFxufSBmcm9tICcuL2NsYXNzJztcbmltcG9ydCB7IEdhbnR0Q2FsZW5kYXJHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhbGVuZGFyL2dyaWQvY2FsZW5kYXItZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2FudHRDYWxlbmRhckhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYWxlbmRhci9oZWFkZXIvY2FsZW5kYXItaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHYW50dERyYWdCYWNrZHJvcENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9kcmFnLWJhY2tkcm9wL2RyYWctYmFja2Ryb3AuY29tcG9uZW50JztcbmltcG9ydCB7IEdhbnR0TG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2xvYWRlci9sb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEdhbnR0TWFpbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9tYWluL2dhbnR0LW1haW4uY29tcG9uZW50JztcbmltcG9ydCB7IEdhbnR0VGFibGVCb2R5Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlL2JvZHkvZ2FudHQtdGFibGUtYm9keS5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2FudHRUYWJsZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS9oZWFkZXIvZ2FudHQtdGFibGUtaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHQU5UVF9BQlNUUkFDVF9UT0tFTiB9IGZyb20gJy4vZ2FudHQtYWJzdHJhY3QnO1xuaW1wb3J0IHsgR0FOVFRfVVBQRVJfVE9LRU4sIEdhbnR0VXBwZXIgfSBmcm9tICcuL2dhbnR0LXVwcGVyJztcbmltcG9ydCB7IEdBTlRUX0dMT0JBTF9DT05GSUcsIEdhbnR0R2xvYmFsQ29uZmlnIH0gZnJvbSAnLi9nYW50dC5jb25maWcnO1xuaW1wb3J0IHsgTmd4R2FudHRSb290Q29tcG9uZW50IH0gZnJvbSAnLi9yb290LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ3hHYW50dFRhYmxlQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS9nYW50dC1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IE5neEdhbnR0VGFibGVDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlL2dhbnR0LXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHYW50dERhdGUgfSBmcm9tICcuL3V0aWxzL2RhdGUnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSwga2V5QnksIHJlY3Vyc2l2ZUl0ZW1zLCB1bmlxQnkgfSBmcm9tICcuL3V0aWxzL2hlbHBlcnMnO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3gtZ2FudHQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9nYW50dC5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEdBTlRUX1VQUEVSX1RPS0VOLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IE5neEdhbnR0Q29tcG9uZW50XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEdBTlRUX0FCU1RSQUNUX1RPS0VOLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTmd4R2FudHRDb21wb25lbnQpXG4gICAgICAgIH1cbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ3hHYW50dFJvb3RDb21wb25lbnQsXG4gICAgICAgIEdhbnR0VGFibGVIZWFkZXJDb21wb25lbnQsXG4gICAgICAgIEdhbnR0Q2FsZW5kYXJIZWFkZXJDb21wb25lbnQsXG4gICAgICAgIE5nSWYsXG4gICAgICAgIEdhbnR0TG9hZGVyQ29tcG9uZW50LFxuICAgICAgICBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsXG4gICAgICAgIENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIENka1ZpcnR1YWxGb3JPZixcbiAgICAgICAgR2FudHRUYWJsZUJvZHlDb21wb25lbnQsXG4gICAgICAgIEdhbnR0Q2FsZW5kYXJHcmlkQ29tcG9uZW50LFxuICAgICAgICBHYW50dE1haW5Db21wb25lbnQsXG4gICAgICAgIEdhbnR0RHJhZ0JhY2tkcm9wQ29tcG9uZW50LFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hHYW50dENvbXBvbmVudCBleHRlbmRzIEdhbnR0VXBwZXIgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gICAgQElucHV0KCkgbWF4TGV2ZWwgPSAyO1xuXG4gICAgQElucHV0KCkgYXN5bmM6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBjaGlsZHJlblJlc29sdmU6IChHYW50dEl0ZW0pID0+IE9ic2VydmFibGU8R2FudHRJdGVtW10+O1xuXG4gICAgQElucHV0KCkgb3ZlcnJpZGUgbGlua2FibGU6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBzZXQgbG9hZGluZyhsb2FkaW5nOiBib29sZWFuKSB7XG4gICAgICAgIGlmIChsb2FkaW5nKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sb2FkaW5nRGVsYXkgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZyA9IGxvYWRpbmc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIH0sIHRoaXMubG9hZGluZ0RlbGF5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZyA9IGxvYWRpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5sb2FkaW5nVGltZXIpO1xuICAgICAgICAgICAgdGhpcy5fbG9hZGluZyA9IGxvYWRpbmc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKSB2aXJ0dWFsU2Nyb2xsRW5hYmxlZCA9IHRydWU7XG5cbiAgICBASW5wdXQoKSBsb2FkaW5nRGVsYXkgPSAwO1xuXG4gICAgQE91dHB1dCgpIGxpbmtEcmFnU3RhcnRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRMaW5rRHJhZ0V2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpIG92ZXJyaWRlIGxpbmtEcmFnRW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0TGlua0RyYWdFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKSBsaW5lQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0TGluZUNsaWNrRXZlbnQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgc2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0U2VsZWN0ZWRFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKSB2aXJ0dWFsU2Nyb2xsZWRJbmRleENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRWaXJ0dWFsU2Nyb2xsZWRJbmRleENoYW5nZUV2ZW50PigpO1xuXG4gICAgQENvbnRlbnRDaGlsZChOZ3hHYW50dFRhYmxlQ29tcG9uZW50KSBvdmVycmlkZSB0YWJsZTogTmd4R2FudHRUYWJsZUNvbXBvbmVudDtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oTmd4R2FudHRUYWJsZUNvbHVtbkNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBjb2x1bW5zOiBRdWVyeUxpc3Q8Tmd4R2FudHRUYWJsZUNvbHVtbkNvbXBvbmVudD47XG5cbiAgICAvLyDmraTmqKHniYjlt7LmjKrliLAgdGFibGUg57uE5Lu25LiL77yM5Li65LqG5YW85a655q2k5aSE5pqC5pe25L+d55WZXG4gICAgQENvbnRlbnRDaGlsZCgndGFibGVFbXB0eScsIHsgc3RhdGljOiB0cnVlIH0pIHRhYmxlRW1wdHlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2dhbnR0Um9vdCcpIGdhbnR0Um9vdDogTmd4R2FudHRSb290Q29tcG9uZW50O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnZm9vdGVyJywgeyBzdGF0aWM6IHRydWUgfSkgZm9vdGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCkgdmlydHVhbFNjcm9sbDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gICAgZ2V0IGxvYWRpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkaW5nO1xuICAgIH1cblxuICAgIHB1YmxpYyBmbGF0SXRlbXM6IChHYW50dEdyb3VwSW50ZXJuYWwgfCBHYW50dEl0ZW1JbnRlcm5hbClbXSA9IFtdO1xuXG4gICAgcHVibGljIHZpZXdwb3J0SXRlbXM6IChHYW50dEdyb3VwSW50ZXJuYWwgfCBHYW50dEl0ZW1JbnRlcm5hbClbXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBfbG9hZGluZyA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBsb2FkaW5nVGltZXI7XG5cbiAgICBwcml2YXRlIHJhbmdlU3RhcnQgPSAwO1xuXG4gICAgcHJpdmF0ZSByYW5nZUVuZCA9IDA7XG5cbiAgICBwcml2YXRlIGZsYXRJdGVtc01hcDogRGljdGlvbmFyeTxHYW50dEdyb3VwSW50ZXJuYWwgfCBHYW50dEl0ZW1JbnRlcm5hbD47XG5cbiAgICBwcml2YXRlIGRyYWdnaW5nSXRlbTogR2FudHRJdGVtO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSB2aWV3cG9ydFJ1bGVyOiBWaWV3cG9ydFJ1bGVyLFxuICAgICAgICBASW5qZWN0KEdBTlRUX0dMT0JBTF9DT05GSUcpIGNvbmZpZzogR2FudHRHbG9iYWxDb25maWdcbiAgICApIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgY2RyLCBuZ1pvbmUsIGNvbmZpZyk7XG4gICAgICAgIHRoaXMuY29tcHV0ZUFsbFJlZnMgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5idWlsZEZsYXRJdGVtcygpO1xuICAgICAgICAvLyBOb3RlOiB0aGUgem9uZSBtYXkgYmUgbm9vcGVkIHRocm91Z2ggYEJvb3RzdHJhcE9wdGlvbnNgIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUgcm9vdCBtb2R1bGUuIFRoaXMgbWVhbnNcbiAgICAgICAgLy8gdGhlIGBvblN0YWJsZWAgd2lsbCBuZXZlciBlbWl0IGFueSB2YWx1ZS5cbiAgICAgICAgY29uc3Qgb25TdGFibGUkID0gdGhpcy5uZ1pvbmUuaXNTdGFibGUgPyBmcm9tKFByb21pc2UucmVzb2x2ZSgpKSA6IHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSk7XG4gICAgICAgIC8vIE5vcm1hbGx5IHRoaXMgaXNuJ3QgaW4gdGhlIHpvbmUsIGJ1dCBpdCBjYW4gY2F1c2UgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgZm9yIGFwcHNcbiAgICAgICAgLy8gdXNpbmcgYHpvbmUtcGF0Y2gtcnhqc2AgYmVjYXVzZSBpdCdsbCB0cmlnZ2VyIGEgY2hhbmdlIGRldGVjdGlvbiB3aGVuIGl0IHVuc3Vic2NyaWJlcy5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgb25TdGFibGUkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIubGlua0RyYWdTdGFydGVkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKChldmVudDogR2FudHRMaW5rRHJhZ0V2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlua0RyYWdTdGFydGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmxpbmtEcmFnRW5kZWQucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKGV2ZW50OiBHYW50dExpbmtEcmFnRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5rRHJhZ0VuZGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudmlldy5zdGFydCQucGlwZShza2lwKDEpLCB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21wdXRlVGVtcERhdGFSZWZzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy52aWV3cG9ydEl0ZW1zID0gdGhpcy5mbGF0SXRlbXMuc2xpY2UodGhpcy5yYW5nZVN0YXJ0LCB0aGlzLnJhbmdlRW5kKTtcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZVRlbXBEYXRhUmVmcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICAgICAgaWYgKCF0aGlzLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy52aWV3VHlwZSAmJiBjaGFuZ2VzLnZpZXdUeXBlLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld3BvcnRJdGVtcyA9IHRoaXMuZmxhdEl0ZW1zLnNsaWNlKHRoaXMucmFuZ2VTdGFydCwgdGhpcy5yYW5nZUVuZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlVGVtcERhdGFSZWZzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5vcmlnaW5JdGVtcyB8fCBjaGFuZ2VzLm9yaWdpbkdyb3Vwcykge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRGbGF0SXRlbXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdwb3J0SXRlbXMgPSB0aGlzLmZsYXRJdGVtcy5zbGljZSh0aGlzLnJhbmdlU3RhcnQsIHRoaXMucmFuZ2VFbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZVRlbXBEYXRhUmVmcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsLnJlbmRlcmVkUmFuZ2VTdHJlYW0ucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKHJhbmdlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlua3NFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmdhbnR0LWxpbmtzLW92ZXJsYXknKSBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAgICAgICAgICAgICBsaW5rc0VsZW1lbnQuc3R5bGUudG9wID0gYCR7LSh0aGlzLnN0eWxlcy5saW5lSGVpZ2h0ICogcmFuZ2Uuc3RhcnQpfXB4YDtcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmdlU3RhcnQgPSByYW5nZS5zdGFydDtcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmdlRW5kID0gcmFuZ2UuZW5kO1xuICAgICAgICAgICAgICAgIHRoaXMudmlld3BvcnRJdGVtcyA9IHRoaXMuZmxhdEl0ZW1zLnNsaWNlKHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kRHJhZ2dpbmdJdGVtVG9WaWV3cG9ydEl0ZW1zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlVGVtcERhdGFSZWZzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbEVuYWJsZWQgJiYgdGhpcy52aWV3cG9ydFJ1bGVyICYmIHRoaXMudmlydHVhbFNjcm9sbC5nZXRSZW5kZXJlZFJhbmdlKCkuZW5kID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgb25TdGFibGUkID0gdGhpcy5uZ1pvbmUuaXNTdGFibGUgPyBmcm9tKFByb21pc2UucmVzb2x2ZSgpKSA6IHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSk7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgb25TdGFibGUkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmdhbnR0Um9vdC52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbnR0Um9vdC5jb21wdXRlU2Nyb2xsQmFyT2Zmc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkRmxhdEl0ZW1zKCkge1xuICAgICAgICBjb25zdCB2aXJ0dWFsRGF0YSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5ncm91cHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgICAgICAgICAgIHZpcnR1YWxEYXRhLnB1c2goZ3JvdXApO1xuICAgICAgICAgICAgICAgIGlmIChncm91cC5leHBhbmRlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IHJlY3Vyc2l2ZUl0ZW1zKGdyb3VwLml0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgdmlydHVhbERhdGEucHVzaCguLi5pdGVtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZpcnR1YWxEYXRhLnB1c2goLi4ucmVjdXJzaXZlSXRlbXModGhpcy5pdGVtcykpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmxhdEl0ZW1zID0gWy4uLnZpcnR1YWxEYXRhXTtcbiAgICAgICAgdGhpcy5mbGF0SXRlbXNNYXAgPSBrZXlCeSh0aGlzLmZsYXRJdGVtcywgJ2lkJyk7XG4gICAgICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5yYW5nZVN0YXJ0ID0gMDtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VFbmQgPSB0aGlzLmZsYXRJdGVtcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFmdGVyRXhwYW5kKCkge1xuICAgICAgICB0aGlzLmJ1aWxkRmxhdEl0ZW1zKCk7XG4gICAgICAgIHRoaXMudmlld3BvcnRJdGVtcyA9IHRoaXMuZmxhdEl0ZW1zLnNsaWNlKHRoaXMucmFuZ2VTdGFydCwgdGhpcy5yYW5nZUVuZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wdXRlVGVtcERhdGFSZWZzKCkge1xuICAgICAgICBjb25zdCB0ZW1wSXRlbURhdGEgPSBbXTtcbiAgICAgICAgdGhpcy52aWV3cG9ydEl0ZW1zLmZvckVhY2goKGRhdGE6IEdhbnR0R3JvdXBJbnRlcm5hbCB8IEdhbnR0SXRlbUludGVybmFsKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWRhdGEuaGFzT3duUHJvcGVydHkoJ2l0ZW1zJykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gZGF0YSBhcyBHYW50dEl0ZW1JbnRlcm5hbDtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5saW5rcykge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmxpbmtzLmZvckVhY2goKGxpbmspID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZsYXRJdGVtc01hcFtsaW5rLmxpbmtdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcEl0ZW1EYXRhLnB1c2godGhpcy5mbGF0SXRlbXNNYXBbbGluay5saW5rXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0ZW1wSXRlbURhdGEucHVzaChkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29tcHV0ZUl0ZW1zUmVmcyguLi51bmlxQnkodGVtcEl0ZW1EYXRhLCAnaWQnKSk7XG4gICAgICAgIHRoaXMuZmxhdEl0ZW1zID0gWy4uLnRoaXMuZmxhdEl0ZW1zXTtcbiAgICAgICAgdGhpcy52aWV3cG9ydEl0ZW1zID0gWy4uLnRoaXMudmlld3BvcnRJdGVtc107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBlbmREcmFnZ2luZ0l0ZW1Ub1ZpZXdwb3J0SXRlbXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmRyYWdnaW5nSXRlbSkge1xuICAgICAgICAgICAgbGV0IGZsYXRJdGVtID0gdGhpcy52aWV3cG9ydEl0ZW1zLmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5pZCA9PT0gdGhpcy5kcmFnZ2luZ0l0ZW0uaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghZmxhdEl0ZW0pIHtcbiAgICAgICAgICAgICAgICBmbGF0SXRlbSA9IHRoaXMuZmxhdEl0ZW1zLmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaWQgPT09IHRoaXMuZHJhZ2dpbmdJdGVtLmlkO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChmbGF0SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdwb3J0SXRlbXMucHVzaChmbGF0SXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwYW5kQ2hpbGRyZW4oaXRlbTogR2FudHRJdGVtSW50ZXJuYWwpIHtcbiAgICAgICAgaWYgKCFpdGVtLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICBpdGVtLnNldEV4cGFuZCh0cnVlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFzeW5jICYmIHRoaXMuY2hpbGRyZW5SZXNvbHZlICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuUmVzb2x2ZShpdGVtLm9yaWdpbilcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJFeHBhbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZENoYW5nZS5lbWl0KGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uYWRkQ2hpbGRyZW4oaXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlSXRlbXNSZWZzKC4uLml0ZW0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlSXRlbXNSZWZzKC4uLml0ZW0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJFeHBhbmQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZENoYW5nZS5lbWl0KGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbS5zZXRFeHBhbmQoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5hZnRlckV4cGFuZCgpO1xuICAgICAgICAgICAgdGhpcy5leHBhbmRDaGFuZ2UuZW1pdChpdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdEl0ZW0oc2VsZWN0RXZlbnQ6IEdhbnR0U2VsZWN0ZWRFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZXZlbnQsIHNlbGVjdGVkVmFsdWUgfSA9IHNlbGVjdEV2ZW50O1xuICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnRvZ2dsZSgoc2VsZWN0ZWRWYWx1ZSBhcyBHYW50dEl0ZW0pLmlkKTtcblxuICAgICAgICBjb25zdCBzZWxlY3RlZElkcyA9IHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQ7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBjb25zdCBfc2VsZWN0ZWRWYWx1ZSA9IHRoaXMuZ2V0R2FudHRJdGVtcyhzZWxlY3RlZElkcykubWFwKChpdGVtKSA9PiBpdGVtLm9yaWdpbik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoeyBldmVudCwgY3VycmVudDogc2VsZWN0ZWRWYWx1ZSBhcyBHYW50dEl0ZW0sIHNlbGVjdGVkVmFsdWU6IF9zZWxlY3RlZFZhbHVlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgX3NlbGVjdGVkVmFsdWUgPSB0aGlzLmdldEdhbnR0SXRlbShzZWxlY3RlZElkc1swXSk/Lm9yaWdpbjtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdCh7IGV2ZW50LCBjdXJyZW50OiBzZWxlY3RlZFZhbHVlIGFzIEdhbnR0SXRlbSwgc2VsZWN0ZWRWYWx1ZTogX3NlbGVjdGVkVmFsdWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzY3JvbGxUb1RvZGF5KCkge1xuICAgICAgICB0aGlzLmdhbnR0Um9vdC5zY3JvbGxUb1RvZGF5KCk7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9EYXRlKGRhdGU6IG51bWJlciB8IEdhbnR0RGF0ZSkge1xuICAgICAgICB0aGlzLmdhbnR0Um9vdC5zY3JvbGxUb0RhdGUoZGF0ZSk7XG4gICAgfVxuXG4gICAgc2Nyb2xsZWRJbmRleENoYW5nZShpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudmlydHVhbFNjcm9sbGVkSW5kZXhDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIHJlbmRlcmVkUmFuZ2U6IHtcbiAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5yYW5nZVN0YXJ0LFxuICAgICAgICAgICAgICAgIGVuZDogdGhpcy5yYW5nZUVuZFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLmZsYXRJdGVtcy5sZW5ndGhcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZXhwYW5kR3JvdXBzKGV4cGFuZGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBzLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gICAgICAgICAgICBncm91cC5zZXRFeHBhbmQoZXhwYW5kZWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmFmdGVyRXhwYW5kKCk7XG4gICAgICAgIHRoaXMuZXhwYW5kQ2hhbmdlLm5leHQobnVsbCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBleHBhbmRHcm91cChncm91cDogR2FudHRHcm91cEludGVybmFsKSB7XG4gICAgICAgIGdyb3VwLnNldEV4cGFuZCghZ3JvdXAuZXhwYW5kZWQpO1xuICAgICAgICB0aGlzLmFmdGVyRXhwYW5kKCk7XG4gICAgICAgIHRoaXMuZXhwYW5kQ2hhbmdlLmVtaXQoKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIGl0ZW1EcmFnU3RhcnRlZChldmVudDogR2FudHRUYWJsZURyYWdTdGFydGVkRXZlbnQpIHtcbiAgICAgICAgdGhpcy50YWJsZS5kcmFnU3RhcnRlZC5lbWl0KGV2ZW50KTtcbiAgICAgICAgdGhpcy5kcmFnZ2luZ0l0ZW0gPSBldmVudC5zb3VyY2U7XG4gICAgfVxuXG4gICAgaXRlbURyYWdFbmRlZChldmVudDogR2FudHRUYWJsZURyYWdFbmRlZEV2ZW50KSB7XG4gICAgICAgIHRoaXMudGFibGUuZHJhZ0VuZGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICB0aGlzLmRyYWdnaW5nSXRlbSA9IG51bGw7XG4gICAgfVxufVxuIiwiPG5neC1nYW50dC1yb290ICNnYW50dFJvb3Q+XG4gIDxkaXYgY2xhc3M9XCJnYW50dC1oZWFkZXJcIj5cbiAgICA8Z2FudHQtdGFibGUtaGVhZGVyICN0YWJsZUhlYWRlciBbY29sdW1uc109XCJjb2x1bW5zXCI+PC9nYW50dC10YWJsZS1oZWFkZXI+XG4gICAgPGRpdiBjbGFzcz1cImdhbnR0LWNvbnRhaW5lci1oZWFkZXJcIj5cbiAgICAgIDxnYW50dC1jYWxlbmRhci1oZWFkZXIgW3N0eWxlLnBhZGRpbmctcmlnaHQucHhdPVwiZ2FudHRSb290LnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGhcIj48L2dhbnR0LWNhbGVuZGFyLWhlYWRlcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxnYW50dC1sb2FkZXIgKm5nSWY9XCJsb2FkaW5nXCI+PC9nYW50dC1sb2FkZXI+XG5cbiAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxuICAgIGNsYXNzPVwiZ2FudHQtdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdnYW50dC1ub3JtYWwtdmlld3BvcnQnOiAhdmlydHVhbFNjcm9sbEVuYWJsZWQsXG4gICAgICAnZ2FudHQtc2Nyb2xsLWNvbnRhaW5lcic6IHZpcnR1YWxTY3JvbGxFbmFibGVkLFxuICAgICAgJ3dpdGgtZm9vdGVyJzogdGFibGU/LnRhYmxlRm9vdGVyVGVtcGxhdGUgfHwgZm9vdGVyVGVtcGxhdGVcbiAgICB9XCJcbiAgICBbc3R5bGUudG9wLnB4XT1cInN0eWxlcy5oZWFkZXJIZWlnaHRcIlxuICAgIFtpdGVtU2l6ZV09XCJzdHlsZXMubGluZUhlaWdodFwiXG4gICAgW21pbkJ1ZmZlclB4XT1cInN0eWxlcy5saW5lSGVpZ2h0ICogMTBcIlxuICAgIFttYXhCdWZmZXJQeF09XCJzdHlsZXMubGluZUhlaWdodCAqIDIwXCJcbiAgICAoc2Nyb2xsZWRJbmRleENoYW5nZSk9XCJzY3JvbGxlZEluZGV4Q2hhbmdlKCRldmVudClcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqY2RrVmlydHVhbEZvcj1cImxldCBpdGVtIG9mIGZsYXRJdGVtczsgdHJhY2tCeTogdHJhY2tCeVwiPjwvbmctY29udGFpbmVyPlxuICAgIDxkaXYgY2xhc3M9XCJnYW50dC1zaWRlXCIgW3N0eWxlLndpZHRoLnB4XT1cInRhYmxlSGVhZGVyLnRhYmxlV2lkdGggKyAxXCIgW3N0eWxlLnBhZGRpbmctYm90dG9tLnB4XT1cImdhbnR0Um9vdC5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ2FudHQtc2lkZS1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdhbnR0LXRhYmxlXCI+XG4gICAgICAgICAgPGdhbnR0LXRhYmxlLWJvZHlcbiAgICAgICAgICAgIFtmbGF0SXRlbXNdPVwiZmxhdEl0ZW1zXCJcbiAgICAgICAgICAgIFt2aWV3cG9ydEl0ZW1zXT1cInZpZXdwb3J0SXRlbXNcIlxuICAgICAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgICAgICAgICBbZ3JvdXBUZW1wbGF0ZV09XCJncm91cFRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtlbXB0eVRlbXBsYXRlXT1cInRhYmxlLnRhYmxlRW1wdHlUZW1wbGF0ZSB8fCB0YWJsZUVtcHR5VGVtcGxhdGVcIlxuICAgICAgICAgICAgW3Jvd0JlZm9yZVRlbXBsYXRlXT1cInRhYmxlPy5yb3dCZWZvcmVUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbcm93QWZ0ZXJUZW1wbGF0ZV09XCJ0YWJsZT8ucm93QWZ0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbZHJhZ2dhYmxlXT1cInRhYmxlLmRyYWdnYWJsZVwiXG4gICAgICAgICAgICBbZHJvcEVudGVyUHJlZGljYXRlXT1cInRhYmxlLmRyb3BFbnRlclByZWRpY2F0ZVwiXG4gICAgICAgICAgICAoZHJhZ0Ryb3BwZWQpPVwidGFibGUuZHJhZ0Ryb3BwZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChkcmFnU3RhcnRlZCk9XCJpdGVtRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoZHJhZ0VuZGVkKT1cIml0ZW1EcmFnRW5kZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoaXRlbUNsaWNrKT1cInNlbGVjdEl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvZ2FudHQtdGFibGUtYm9keT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZ2FudHQtY29udGFpbmVyXCI+XG4gICAgICA8Z2FudHQtY2FsZW5kYXItZ3JpZFxuICAgICAgICBbc3R5bGUucGFkZGluZy1yaWdodC5weF09XCJnYW50dFJvb3QudmVydGljYWxTY3JvbGxiYXJXaWR0aFwiXG4gICAgICAgIFtzdHlsZS5wYWRkaW5nLWJvdHRvbS5weF09XCJnYW50dFJvb3QuaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodFwiXG4gICAgICA+PC9nYW50dC1jYWxlbmRhci1ncmlkPlxuICAgICAgPGRpdiBjbGFzcz1cImdhbnR0LW1haW5cIj5cbiAgICAgICAgPGdhbnR0LW1haW5cbiAgICAgICAgICBbZmxhdEl0ZW1zXT1cImZsYXRJdGVtc1wiXG4gICAgICAgICAgW3ZpZXdwb3J0SXRlbXNdPVwidmlld3BvcnRJdGVtc1wiXG4gICAgICAgICAgW2dyb3VwSGVhZGVyVGVtcGxhdGVdPVwiZ3JvdXBIZWFkZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgW2l0ZW1UZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIlxuICAgICAgICAgIFtiYXJUZW1wbGF0ZV09XCJiYXJUZW1wbGF0ZVwiXG4gICAgICAgICAgW3JhbmdlVGVtcGxhdGVdPVwicmFuZ2VUZW1wbGF0ZVwiXG4gICAgICAgICAgW2Jhc2VsaW5lVGVtcGxhdGVdPVwiYmFzZWxpbmVUZW1wbGF0ZVwiXG4gICAgICAgICAgKGJhckNsaWNrKT1cImJhckNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgKGxpbmVDbGljayk9XCJsaW5lQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2dhbnR0LW1haW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG5cbiAgPGdhbnR0LWRyYWctYmFja2Ryb3AgW3N0eWxlLmxlZnQucHhdPVwidGFibGVIZWFkZXIudGFibGVXaWR0aCArIDFcIj48L2dhbnR0LWRyYWctYmFja2Ryb3A+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZ2FudHQtc2Nyb2xsYmFyXCJcbiAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImdhbnR0Um9vdC5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ICsgMVwiXG4gICAgW3N0eWxlLnJpZ2h0LnB4XT1cImdhbnR0Um9vdC52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoXCJcbiAgICBbbmdDbGFzc109XCJ7ICdnYW50dC1zY3JvbGxiYXItYmcnOiB0YWJsZT8udGFibGVGb290ZXJUZW1wbGF0ZSB9XCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIFtzdHlsZS53aWR0aC5weF09XCJ0YWJsZUhlYWRlci50YWJsZVdpZHRoXCJcbiAgICAgIGNsYXNzPVwiZ2FudHQtdGFibGUtc2Nyb2xsYmFyXCJcbiAgICAgIFtjbGFzcy53aXRoLXNjcm9sbGJhcl09XCJnYW50dFJvb3QuaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodFwiXG4gICAgPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJnYW50dC1tYWluLXNjcm9sbGJhclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImgtMTAwXCIgW3N0eWxlLndpZHRoLnB4XT1cInZpZXcud2lkdGhcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImdhbnR0LWZvb3RlclwiIFtzdHlsZS5yaWdodC5weF09XCJnYW50dFJvb3QudmVydGljYWxTY3JvbGxiYXJXaWR0aFwiIFtzdHlsZS5ib3R0b20ucHhdPVwiZ2FudHRSb290Lmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZ2FudHQtdGFibGUtZm9vdGVyXCIgW3N0eWxlLndpZHRoLnB4XT1cInRhYmxlSGVhZGVyLnRhYmxlV2lkdGggKyAxXCIgKm5nSWY9XCJ0YWJsZT8udGFibGVGb290ZXJUZW1wbGF0ZVwiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhYmxlPy50YWJsZUZvb3RlclRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgY29sdW1uczogY29sdW1ucyB9XCI+IDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImdhbnR0LWNvbnRhaW5lci1mb290ZXJcIiAqbmdJZj1cImZvb3RlclRlbXBsYXRlXCI+XG4gICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZm9vdGVyVGVtcGxhdGVcIj4gPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25neC1nYW50dC1yb290PlxuIl19
@@ -4274,7 +4274,7 @@ class NgxGanttComponent extends GanttUpper {
4274
4274
  provide: GANTT_ABSTRACT_TOKEN,
4275
4275
  useExisting: forwardRef(() => NgxGanttComponent)
4276
4276
  }
4277
- ], queries: [{ propertyName: "table", first: true, predicate: NgxGanttTableComponent, descendants: true }, { propertyName: "tableEmptyTemplate", first: true, predicate: ["tableEmpty"], descendants: true, static: true }, { propertyName: "footerTemplate", first: true, predicate: ["footer"], descendants: true, static: true }, { propertyName: "columns", predicate: NgxGanttTableColumnComponent, descendants: true }], viewQueries: [{ propertyName: "ganttRoot", first: true, predicate: ["ganttRoot"], descendants: true }, { propertyName: "virtualScroll", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ngx-gantt-root #ganttRoot>\n <div class=\"gantt-header\">\n <gantt-table-header #tableHeader [columns]=\"columns\"></gantt-table-header>\n <div class=\"gantt-container-header\">\n <gantt-calendar-header [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"></gantt-calendar-header>\n </div>\n </div>\n <gantt-loader *ngIf=\"loading\"></gantt-loader>\n\n <cdk-virtual-scroll-viewport\n class=\"gantt-virtual-scroll-viewport\"\n [ngClass]=\"{\n 'gantt-normal-viewport': !virtualScrollEnabled,\n 'gantt-scroll-container': virtualScrollEnabled,\n 'with-footer': table?.tableFooterTemplate || footerTemplate\n }\"\n [style.top.px]=\"styles.headerHeight\"\n [itemSize]=\"styles.lineHeight\"\n [minBufferPx]=\"styles.lineHeight * 10\"\n [maxBufferPx]=\"styles.lineHeight * 20\"\n (scrolledIndexChange)=\"scrolledIndexChange($event)\"\n >\n <ng-container *cdkVirtualFor=\"let item of flatItems; trackBy: trackBy\"></ng-container>\n <div class=\"gantt-side\" [style.width.px]=\"tableHeader.tableWidth + 1\" [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-side-container\">\n <div class=\"gantt-table\">\n <gantt-table-body\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [columns]=\"columns\"\n [groupTemplate]=\"groupTemplate\"\n [emptyTemplate]=\"table.tableEmptyTemplate || tableEmptyTemplate\"\n [rowBeforeTemplate]=\"table?.rowBeforeTemplate\"\n [rowAfterTemplate]=\"table?.rowAfterTemplate\"\n [draggable]=\"table.draggable\"\n [dropEnterPredicate]=\"table.dropEnterPredicate\"\n (dragDropped)=\"table.dragDropped.emit($event)\"\n (dragStarted)=\"itemDragStarted($event)\"\n (dragEnded)=\"itemDragEnded($event)\"\n (itemClick)=\"selectItem($event)\"\n >\n </gantt-table-body>\n </div>\n </div>\n </div>\n <div class=\"gantt-container\">\n <gantt-calendar-grid\n [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"\n [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\"\n ></gantt-calendar-grid>\n <div class=\"gantt-main\">\n <gantt-main\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [itemTemplate]=\"itemTemplate\"\n [barTemplate]=\"barTemplate\"\n [rangeTemplate]=\"rangeTemplate\"\n [baselineTemplate]=\"baselineTemplate\"\n (barClick)=\"barClick.emit($event)\"\n (lineClick)=\"lineClick.emit($event)\"\n >\n </gantt-main>\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n\n <gantt-drag-backdrop [style.left.px]=\"tableHeader.tableWidth + 1\"></gantt-drag-backdrop>\n\n <div\n class=\"gantt-scrollbar\"\n [style.height.px]=\"ganttRoot.horizontalScrollbarHeight + 1\"\n [style.right.px]=\"ganttRoot.verticalScrollbarWidth\"\n >\n <div\n [style.width.px]=\"tableHeader.tableWidth\"\n class=\"gantt-table-scrollbar\"\n [class.with-scrollbar]=\"ganttRoot.horizontalScrollbarHeight\"\n ></div>\n <div class=\"gantt-main-scrollbar\">\n <div class=\"h-100\" [style.width.px]=\"view.width\"></div>\n </div>\n </div>\n\n <div class=\"gantt-footer\" [style.right.px]=\"ganttRoot.verticalScrollbarWidth\" [style.bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-table-footer\" [style.width.px]=\"tableHeader.tableWidth + 1\" *ngIf=\"table?.tableFooterTemplate\">\n <ng-template [ngTemplateOutlet]=\"table?.tableFooterTemplate\" [ngTemplateOutletContext]=\"{ columns: columns }\"> </ng-template>\n </div>\n <div class=\"gantt-container-footer\" *ngIf=\"footerTemplate\">\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"> </ng-template>\n </div>\n </div>\n</ngx-gantt-root>\n", dependencies: [{ kind: "component", type: NgxGanttRootComponent, selector: "ngx-gantt-root", inputs: ["sideWidth"] }, { kind: "component", type: GanttTableHeaderComponent, selector: "gantt-table-header", inputs: ["columns"] }, { kind: "component", type: GanttCalendarHeaderComponent, selector: "gantt-calendar-header" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: GanttLoaderComponent, selector: "gantt-loader" }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: GanttTableBodyComponent, selector: "gantt-table-body", inputs: ["viewportItems", "flatItems", "columns", "groupTemplate", "emptyTemplate", "rowBeforeTemplate", "rowAfterTemplate", "draggable", "dropEnterPredicate"], outputs: ["dragDropped", "dragStarted", "dragEnded", "itemClick"] }, { kind: "component", type: GanttCalendarGridComponent, selector: "gantt-calendar-grid" }, { kind: "component", type: GanttMainComponent, selector: "gantt-main", inputs: ["viewportItems", "flatItems", "groupHeaderTemplate", "itemTemplate", "barTemplate", "rangeTemplate", "baselineTemplate"], outputs: ["barClick", "lineClick"] }, { kind: "component", type: GanttDragBackdropComponent, selector: "gantt-drag-backdrop" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4277
+ ], queries: [{ propertyName: "table", first: true, predicate: NgxGanttTableComponent, descendants: true }, { propertyName: "tableEmptyTemplate", first: true, predicate: ["tableEmpty"], descendants: true, static: true }, { propertyName: "footerTemplate", first: true, predicate: ["footer"], descendants: true, static: true }, { propertyName: "columns", predicate: NgxGanttTableColumnComponent, descendants: true }], viewQueries: [{ propertyName: "ganttRoot", first: true, predicate: ["ganttRoot"], descendants: true }, { propertyName: "virtualScroll", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ngx-gantt-root #ganttRoot>\n <div class=\"gantt-header\">\n <gantt-table-header #tableHeader [columns]=\"columns\"></gantt-table-header>\n <div class=\"gantt-container-header\">\n <gantt-calendar-header [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"></gantt-calendar-header>\n </div>\n </div>\n <gantt-loader *ngIf=\"loading\"></gantt-loader>\n\n <cdk-virtual-scroll-viewport\n class=\"gantt-virtual-scroll-viewport\"\n [ngClass]=\"{\n 'gantt-normal-viewport': !virtualScrollEnabled,\n 'gantt-scroll-container': virtualScrollEnabled,\n 'with-footer': table?.tableFooterTemplate || footerTemplate\n }\"\n [style.top.px]=\"styles.headerHeight\"\n [itemSize]=\"styles.lineHeight\"\n [minBufferPx]=\"styles.lineHeight * 10\"\n [maxBufferPx]=\"styles.lineHeight * 20\"\n (scrolledIndexChange)=\"scrolledIndexChange($event)\"\n >\n <ng-container *cdkVirtualFor=\"let item of flatItems; trackBy: trackBy\"></ng-container>\n <div class=\"gantt-side\" [style.width.px]=\"tableHeader.tableWidth + 1\" [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-side-container\">\n <div class=\"gantt-table\">\n <gantt-table-body\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [columns]=\"columns\"\n [groupTemplate]=\"groupTemplate\"\n [emptyTemplate]=\"table.tableEmptyTemplate || tableEmptyTemplate\"\n [rowBeforeTemplate]=\"table?.rowBeforeTemplate\"\n [rowAfterTemplate]=\"table?.rowAfterTemplate\"\n [draggable]=\"table.draggable\"\n [dropEnterPredicate]=\"table.dropEnterPredicate\"\n (dragDropped)=\"table.dragDropped.emit($event)\"\n (dragStarted)=\"itemDragStarted($event)\"\n (dragEnded)=\"itemDragEnded($event)\"\n (itemClick)=\"selectItem($event)\"\n >\n </gantt-table-body>\n </div>\n </div>\n </div>\n <div class=\"gantt-container\">\n <gantt-calendar-grid\n [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"\n [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\"\n ></gantt-calendar-grid>\n <div class=\"gantt-main\">\n <gantt-main\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [itemTemplate]=\"itemTemplate\"\n [barTemplate]=\"barTemplate\"\n [rangeTemplate]=\"rangeTemplate\"\n [baselineTemplate]=\"baselineTemplate\"\n (barClick)=\"barClick.emit($event)\"\n (lineClick)=\"lineClick.emit($event)\"\n >\n </gantt-main>\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n\n <gantt-drag-backdrop [style.left.px]=\"tableHeader.tableWidth + 1\"></gantt-drag-backdrop>\n\n <div\n class=\"gantt-scrollbar\"\n [style.height.px]=\"ganttRoot.horizontalScrollbarHeight + 1\"\n [style.right.px]=\"ganttRoot.verticalScrollbarWidth\"\n [ngClass]=\"{ 'gantt-scrollbar-bg': table?.tableFooterTemplate }\"\n >\n <div\n [style.width.px]=\"tableHeader.tableWidth\"\n class=\"gantt-table-scrollbar\"\n [class.with-scrollbar]=\"ganttRoot.horizontalScrollbarHeight\"\n ></div>\n <div class=\"gantt-main-scrollbar\">\n <div class=\"h-100\" [style.width.px]=\"view.width\"></div>\n </div>\n </div>\n\n <div class=\"gantt-footer\" [style.right.px]=\"ganttRoot.verticalScrollbarWidth\" [style.bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-table-footer\" [style.width.px]=\"tableHeader.tableWidth + 1\" *ngIf=\"table?.tableFooterTemplate\">\n <ng-template [ngTemplateOutlet]=\"table?.tableFooterTemplate\" [ngTemplateOutletContext]=\"{ columns: columns }\"> </ng-template>\n </div>\n <div class=\"gantt-container-footer\" *ngIf=\"footerTemplate\">\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"> </ng-template>\n </div>\n </div>\n</ngx-gantt-root>\n", dependencies: [{ kind: "component", type: NgxGanttRootComponent, selector: "ngx-gantt-root", inputs: ["sideWidth"] }, { kind: "component", type: GanttTableHeaderComponent, selector: "gantt-table-header", inputs: ["columns"] }, { kind: "component", type: GanttCalendarHeaderComponent, selector: "gantt-calendar-header" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: GanttLoaderComponent, selector: "gantt-loader" }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: GanttTableBodyComponent, selector: "gantt-table-body", inputs: ["viewportItems", "flatItems", "columns", "groupTemplate", "emptyTemplate", "rowBeforeTemplate", "rowAfterTemplate", "draggable", "dropEnterPredicate"], outputs: ["dragDropped", "dragStarted", "dragEnded", "itemClick"] }, { kind: "component", type: GanttCalendarGridComponent, selector: "gantt-calendar-grid" }, { kind: "component", type: GanttMainComponent, selector: "gantt-main", inputs: ["viewportItems", "flatItems", "groupHeaderTemplate", "itemTemplate", "barTemplate", "rangeTemplate", "baselineTemplate"], outputs: ["barClick", "lineClick"] }, { kind: "component", type: GanttDragBackdropComponent, selector: "gantt-drag-backdrop" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4278
4278
  }
4279
4279
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgxGanttComponent, decorators: [{
4280
4280
  type: Component,
@@ -4302,7 +4302,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
4302
4302
  GanttMainComponent,
4303
4303
  GanttDragBackdropComponent,
4304
4304
  NgTemplateOutlet
4305
- ], template: "<ngx-gantt-root #ganttRoot>\n <div class=\"gantt-header\">\n <gantt-table-header #tableHeader [columns]=\"columns\"></gantt-table-header>\n <div class=\"gantt-container-header\">\n <gantt-calendar-header [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"></gantt-calendar-header>\n </div>\n </div>\n <gantt-loader *ngIf=\"loading\"></gantt-loader>\n\n <cdk-virtual-scroll-viewport\n class=\"gantt-virtual-scroll-viewport\"\n [ngClass]=\"{\n 'gantt-normal-viewport': !virtualScrollEnabled,\n 'gantt-scroll-container': virtualScrollEnabled,\n 'with-footer': table?.tableFooterTemplate || footerTemplate\n }\"\n [style.top.px]=\"styles.headerHeight\"\n [itemSize]=\"styles.lineHeight\"\n [minBufferPx]=\"styles.lineHeight * 10\"\n [maxBufferPx]=\"styles.lineHeight * 20\"\n (scrolledIndexChange)=\"scrolledIndexChange($event)\"\n >\n <ng-container *cdkVirtualFor=\"let item of flatItems; trackBy: trackBy\"></ng-container>\n <div class=\"gantt-side\" [style.width.px]=\"tableHeader.tableWidth + 1\" [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-side-container\">\n <div class=\"gantt-table\">\n <gantt-table-body\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [columns]=\"columns\"\n [groupTemplate]=\"groupTemplate\"\n [emptyTemplate]=\"table.tableEmptyTemplate || tableEmptyTemplate\"\n [rowBeforeTemplate]=\"table?.rowBeforeTemplate\"\n [rowAfterTemplate]=\"table?.rowAfterTemplate\"\n [draggable]=\"table.draggable\"\n [dropEnterPredicate]=\"table.dropEnterPredicate\"\n (dragDropped)=\"table.dragDropped.emit($event)\"\n (dragStarted)=\"itemDragStarted($event)\"\n (dragEnded)=\"itemDragEnded($event)\"\n (itemClick)=\"selectItem($event)\"\n >\n </gantt-table-body>\n </div>\n </div>\n </div>\n <div class=\"gantt-container\">\n <gantt-calendar-grid\n [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"\n [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\"\n ></gantt-calendar-grid>\n <div class=\"gantt-main\">\n <gantt-main\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [itemTemplate]=\"itemTemplate\"\n [barTemplate]=\"barTemplate\"\n [rangeTemplate]=\"rangeTemplate\"\n [baselineTemplate]=\"baselineTemplate\"\n (barClick)=\"barClick.emit($event)\"\n (lineClick)=\"lineClick.emit($event)\"\n >\n </gantt-main>\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n\n <gantt-drag-backdrop [style.left.px]=\"tableHeader.tableWidth + 1\"></gantt-drag-backdrop>\n\n <div\n class=\"gantt-scrollbar\"\n [style.height.px]=\"ganttRoot.horizontalScrollbarHeight + 1\"\n [style.right.px]=\"ganttRoot.verticalScrollbarWidth\"\n >\n <div\n [style.width.px]=\"tableHeader.tableWidth\"\n class=\"gantt-table-scrollbar\"\n [class.with-scrollbar]=\"ganttRoot.horizontalScrollbarHeight\"\n ></div>\n <div class=\"gantt-main-scrollbar\">\n <div class=\"h-100\" [style.width.px]=\"view.width\"></div>\n </div>\n </div>\n\n <div class=\"gantt-footer\" [style.right.px]=\"ganttRoot.verticalScrollbarWidth\" [style.bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-table-footer\" [style.width.px]=\"tableHeader.tableWidth + 1\" *ngIf=\"table?.tableFooterTemplate\">\n <ng-template [ngTemplateOutlet]=\"table?.tableFooterTemplate\" [ngTemplateOutletContext]=\"{ columns: columns }\"> </ng-template>\n </div>\n <div class=\"gantt-container-footer\" *ngIf=\"footerTemplate\">\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"> </ng-template>\n </div>\n </div>\n</ngx-gantt-root>\n" }]
4305
+ ], template: "<ngx-gantt-root #ganttRoot>\n <div class=\"gantt-header\">\n <gantt-table-header #tableHeader [columns]=\"columns\"></gantt-table-header>\n <div class=\"gantt-container-header\">\n <gantt-calendar-header [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"></gantt-calendar-header>\n </div>\n </div>\n <gantt-loader *ngIf=\"loading\"></gantt-loader>\n\n <cdk-virtual-scroll-viewport\n class=\"gantt-virtual-scroll-viewport\"\n [ngClass]=\"{\n 'gantt-normal-viewport': !virtualScrollEnabled,\n 'gantt-scroll-container': virtualScrollEnabled,\n 'with-footer': table?.tableFooterTemplate || footerTemplate\n }\"\n [style.top.px]=\"styles.headerHeight\"\n [itemSize]=\"styles.lineHeight\"\n [minBufferPx]=\"styles.lineHeight * 10\"\n [maxBufferPx]=\"styles.lineHeight * 20\"\n (scrolledIndexChange)=\"scrolledIndexChange($event)\"\n >\n <ng-container *cdkVirtualFor=\"let item of flatItems; trackBy: trackBy\"></ng-container>\n <div class=\"gantt-side\" [style.width.px]=\"tableHeader.tableWidth + 1\" [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-side-container\">\n <div class=\"gantt-table\">\n <gantt-table-body\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [columns]=\"columns\"\n [groupTemplate]=\"groupTemplate\"\n [emptyTemplate]=\"table.tableEmptyTemplate || tableEmptyTemplate\"\n [rowBeforeTemplate]=\"table?.rowBeforeTemplate\"\n [rowAfterTemplate]=\"table?.rowAfterTemplate\"\n [draggable]=\"table.draggable\"\n [dropEnterPredicate]=\"table.dropEnterPredicate\"\n (dragDropped)=\"table.dragDropped.emit($event)\"\n (dragStarted)=\"itemDragStarted($event)\"\n (dragEnded)=\"itemDragEnded($event)\"\n (itemClick)=\"selectItem($event)\"\n >\n </gantt-table-body>\n </div>\n </div>\n </div>\n <div class=\"gantt-container\">\n <gantt-calendar-grid\n [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"\n [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\"\n ></gantt-calendar-grid>\n <div class=\"gantt-main\">\n <gantt-main\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [itemTemplate]=\"itemTemplate\"\n [barTemplate]=\"barTemplate\"\n [rangeTemplate]=\"rangeTemplate\"\n [baselineTemplate]=\"baselineTemplate\"\n (barClick)=\"barClick.emit($event)\"\n (lineClick)=\"lineClick.emit($event)\"\n >\n </gantt-main>\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n\n <gantt-drag-backdrop [style.left.px]=\"tableHeader.tableWidth + 1\"></gantt-drag-backdrop>\n\n <div\n class=\"gantt-scrollbar\"\n [style.height.px]=\"ganttRoot.horizontalScrollbarHeight + 1\"\n [style.right.px]=\"ganttRoot.verticalScrollbarWidth\"\n [ngClass]=\"{ 'gantt-scrollbar-bg': table?.tableFooterTemplate }\"\n >\n <div\n [style.width.px]=\"tableHeader.tableWidth\"\n class=\"gantt-table-scrollbar\"\n [class.with-scrollbar]=\"ganttRoot.horizontalScrollbarHeight\"\n ></div>\n <div class=\"gantt-main-scrollbar\">\n <div class=\"h-100\" [style.width.px]=\"view.width\"></div>\n </div>\n </div>\n\n <div class=\"gantt-footer\" [style.right.px]=\"ganttRoot.verticalScrollbarWidth\" [style.bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-table-footer\" [style.width.px]=\"tableHeader.tableWidth + 1\" *ngIf=\"table?.tableFooterTemplate\">\n <ng-template [ngTemplateOutlet]=\"table?.tableFooterTemplate\" [ngTemplateOutletContext]=\"{ columns: columns }\"> </ng-template>\n </div>\n <div class=\"gantt-container-footer\" *ngIf=\"footerTemplate\">\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"> </ng-template>\n </div>\n </div>\n</ngx-gantt-root>\n" }]
4306
4306
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i1$1.ViewportRuler }, { type: undefined, decorators: [{
4307
4307
  type: Inject,
4308
4308
  args: [GANTT_GLOBAL_CONFIG]