@progress-chef/platform-shared-components 0.0.111 → 0.0.113
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.
- package/esm2022/lib/atoms/alert/alert.component.mjs +40 -0
- package/esm2022/lib/atoms/alert/alert.module.mjs +24 -0
- package/esm2022/lib/atoms/angular-popup/angular-popup.component.mjs +34 -0
- package/esm2022/lib/atoms/angular-popup/angular-popup.module.mjs +32 -0
- package/esm2022/lib/atoms/atoms.module.mjs +304 -0
- package/esm2022/lib/atoms/avatar/avatar.component.mjs +62 -0
- package/esm2022/lib/atoms/avatar/avatar.module.mjs +32 -0
- package/esm2022/lib/atoms/breadcrumb/breadcrumb.component.mjs +58 -0
- package/esm2022/lib/atoms/breadcrumb/breadcrumb.module.mjs +40 -0
- package/esm2022/lib/atoms/button/button.component.mjs +85 -0
- package/esm2022/lib/atoms/button/button.module.mjs +36 -0
- package/esm2022/lib/atoms/button-group/button-group.component.mjs +51 -0
- package/esm2022/lib/atoms/button-group/button-group.module.mjs +36 -0
- package/esm2022/lib/atoms/checkbox/checkbox.component.mjs +47 -0
- package/esm2022/lib/atoms/checkbox/checkbox.module.mjs +36 -0
- package/esm2022/lib/atoms/chip/chip.component.mjs +32 -0
- package/esm2022/lib/atoms/chip/chip.module.mjs +44 -0
- package/esm2022/lib/atoms/chip-list/chip-list.component.mjs +87 -0
- package/esm2022/lib/atoms/chip-list/chip-list.module.mjs +52 -0
- package/esm2022/lib/atoms/clipboard/clipboard.component.mjs +111 -0
- package/esm2022/lib/atoms/clipboard/clipboard.module.mjs +40 -0
- package/esm2022/lib/atoms/container/container.component.mjs +28 -0
- package/esm2022/lib/atoms/container/container.module.mjs +24 -0
- package/esm2022/lib/atoms/date-range/date-range.component.mjs +49 -0
- package/esm2022/lib/atoms/date-range/date-range.module.mjs +39 -0
- package/esm2022/lib/atoms/datepicker/datepicker.component.mjs +91 -0
- package/esm2022/lib/atoms/datepicker/datepicker.module.mjs +35 -0
- package/esm2022/lib/atoms/drag-and-drop/drag-and-drop.component.mjs +88 -0
- package/esm2022/lib/atoms/drag-and-drop/drag-and-drop.module.mjs +44 -0
- package/esm2022/lib/atoms/dropdown/dropdown.component.mjs +200 -0
- package/esm2022/lib/atoms/dropdown/dropdown.module.mjs +43 -0
- package/esm2022/lib/atoms/dropdown-button/dropdown-button.component.mjs +46 -0
- package/esm2022/lib/atoms/dropdown-button/dropdown-button.module.mjs +36 -0
- package/esm2022/lib/atoms/dropdown-tree/dropdowntree.component.mjs +102 -0
- package/esm2022/lib/atoms/dropdown-tree/dropdowntree.module.mjs +43 -0
- package/esm2022/lib/atoms/expansion-panel/expansion-panel.component.mjs +51 -0
- package/esm2022/lib/atoms/expansion-panel/expansion-panel.module.mjs +56 -0
- package/esm2022/lib/atoms/icon/icon.component.mjs +37 -0
- package/esm2022/lib/atoms/icon/icon.module.mjs +21 -0
- package/esm2022/lib/atoms/labels/label.component.mjs +25 -0
- package/esm2022/lib/atoms/labels/label.module.mjs +32 -0
- package/esm2022/lib/atoms/list-views/list-view.component.mjs +91 -0
- package/esm2022/lib/atoms/list-views/list-view.module.mjs +60 -0
- package/esm2022/lib/atoms/loader/loader.component.mjs +48 -0
- package/esm2022/lib/atoms/loader/loader.module.mjs +28 -0
- package/esm2022/lib/atoms/loading-spinner/loading-spinner.component.mjs +25 -0
- package/esm2022/lib/atoms/loading-spinner/loading-spinner.module.mjs +24 -0
- package/esm2022/lib/atoms/multi-select-dropdown/multi-select-dropdown.component.mjs +150 -0
- package/esm2022/lib/atoms/multi-select-dropdown/multi-select-dropdown.module.mjs +43 -0
- package/esm2022/lib/atoms/notification/notification.component.mjs +69 -0
- package/esm2022/lib/atoms/notification/notification.module.mjs +24 -0
- package/esm2022/lib/atoms/numeric-textbox/numeric-textbox.component.mjs +75 -0
- package/esm2022/lib/atoms/numeric-textbox/numeric-textbox.module.mjs +35 -0
- package/esm2022/lib/atoms/progress-bar/progress-bar.component.mjs +19 -0
- package/esm2022/lib/atoms/progress-bar/progress-bar.module.mjs +24 -0
- package/esm2022/lib/atoms/radio-button/radio-button.component.mjs +53 -0
- package/esm2022/lib/atoms/radio-button/radio-button.module.mjs +39 -0
- package/esm2022/lib/atoms/search-box/search-box.component.mjs +108 -0
- package/esm2022/lib/atoms/search-box/search-box.module.mjs +40 -0
- package/esm2022/lib/atoms/slider/slider.component.mjs +58 -0
- package/esm2022/lib/atoms/slider/slider.module.mjs +28 -0
- package/esm2022/lib/atoms/stepper/stepper.component.mjs +38 -0
- package/esm2022/lib/atoms/stepper/stepper.module.mjs +52 -0
- package/esm2022/lib/atoms/switch/switch.component.mjs +53 -0
- package/esm2022/lib/atoms/switch/switch.module.mjs +59 -0
- package/esm2022/lib/atoms/text-area/text-area.component.mjs +93 -0
- package/esm2022/lib/atoms/text-area/text-area.module.mjs +36 -0
- package/esm2022/lib/atoms/textbox/textbox.component.mjs +115 -0
- package/esm2022/lib/atoms/textbox/textbox.module.mjs +40 -0
- package/esm2022/lib/atoms/time-picker/time-picker.component.mjs +83 -0
- package/esm2022/lib/atoms/time-picker/time-picker.module.mjs +35 -0
- package/esm2022/lib/atoms/timescheduler/timescheduler.component.mjs +79 -0
- package/esm2022/lib/atoms/timescheduler/timescheduler.module.mjs +35 -0
- package/esm2022/lib/atoms/toast-notification/toast-notification.module.mjs +31 -0
- package/esm2022/lib/atoms/toast-notification/toast-notification.service.mjs +160 -0
- package/esm2022/lib/atoms/tooltip/tooltip.component.mjs +48 -0
- package/esm2022/lib/atoms/tooltip/tooltip.module.mjs +24 -0
- package/esm2022/lib/atoms/typography/TypographyType.mjs +2 -0
- package/esm2022/lib/atoms/typography/typography.component.mjs +78 -0
- package/esm2022/lib/atoms/typography/typography.module.mjs +24 -0
- package/esm2022/lib/atoms/uploader/uploader.component.mjs +213 -0
- package/esm2022/lib/atoms/uploader/uploader.module.mjs +53 -0
- package/esm2022/lib/molecules/card/card-actions/card-actions.component.mjs +20 -0
- package/esm2022/lib/molecules/card/card-body/card-body.component.mjs +12 -0
- package/esm2022/lib/molecules/card/card-footer/card-footer.component.mjs +12 -0
- package/esm2022/lib/molecules/card/card-header/card-header.component.mjs +31 -0
- package/esm2022/lib/molecules/card/card.component.mjs +20 -0
- package/esm2022/lib/molecules/card/card.module.mjs +52 -0
- package/esm2022/lib/molecules/dialog/confirmation-dialog/confirmation-dialog.component.mjs +81 -0
- package/esm2022/lib/molecules/dialog/dialog-actions/dialog-actions.component.mjs +17 -0
- package/esm2022/lib/molecules/dialog/dialog-titlebar/dialog-titlebar.component.mjs +40 -0
- package/esm2022/lib/molecules/dialog/dialog.component.mjs +53 -0
- package/esm2022/lib/molecules/dialog/dialog.module.mjs +55 -0
- package/esm2022/lib/molecules/grid-form/grid-form.component.mjs +110 -0
- package/esm2022/lib/molecules/grid-form/grid-form.module.mjs +59 -0
- package/esm2022/lib/molecules/grid-layout/grid-layout-item/grid-layout-item.component.mjs +37 -0
- package/esm2022/lib/molecules/grid-layout/grid-layout.component.mjs +32 -0
- package/esm2022/lib/molecules/grid-layout/grid-layout.module.mjs +33 -0
- package/esm2022/lib/molecules/grid-pagination/grid-pagination-spacer/grid-pagination-spacer.component.mjs +12 -0
- package/esm2022/lib/molecules/grid-pagination/grid-pagination.component.mjs +621 -0
- package/esm2022/lib/molecules/grid-pagination/grid-pagination.module.mjs +84 -0
- package/esm2022/lib/molecules/grid-pagination/kebab-menu-filter.pipe.mjs +22 -0
- package/esm2022/lib/molecules/molecules.module.mjs +66 -0
- package/esm2022/lib/molecules/tabstrip/tabstrip-tab/tabstrip-tab.component.mjs +25 -0
- package/esm2022/lib/molecules/tabstrip/tabstrip.component.mjs +37 -0
- package/esm2022/lib/molecules/tabstrip/tabstrip.module.mjs +33 -0
- package/esm2022/lib/shared.component.mjs +4 -4
- package/esm2022/lib/shared.module.mjs +25 -10
- package/esm2022/public-api.mjs +114 -2
- package/fesm2022/progress-chef-platform-shared-components.mjs +5698 -14
- package/fesm2022/progress-chef-platform-shared-components.mjs.map +1 -1
- package/lib/atoms/alert/alert.component.d.ts +20 -0
- package/lib/atoms/alert/alert.module.d.ts +8 -0
- package/lib/atoms/angular-popup/angular-popup.component.d.ts +15 -0
- package/lib/atoms/angular-popup/angular-popup.module.d.ts +10 -0
- package/lib/atoms/atoms.module.d.ts +48 -0
- package/lib/atoms/avatar/avatar.component.d.ts +21 -0
- package/lib/atoms/avatar/avatar.module.d.ts +10 -0
- package/lib/atoms/breadcrumb/breadcrumb.component.d.ts +17 -0
- package/lib/atoms/breadcrumb/breadcrumb.module.d.ts +12 -0
- package/lib/atoms/button/button.component.d.ts +29 -0
- package/lib/atoms/button/button.module.d.ts +11 -0
- package/lib/atoms/button-group/button-group.component.d.ts +20 -0
- package/lib/atoms/button-group/button-group.module.d.ts +11 -0
- package/lib/atoms/checkbox/checkbox.component.d.ts +21 -0
- package/lib/atoms/checkbox/checkbox.module.d.ts +11 -0
- package/lib/atoms/chip/chip.component.d.ts +12 -0
- package/lib/atoms/chip/chip.module.d.ts +13 -0
- package/lib/atoms/chip-list/chip-list.component.d.ts +32 -0
- package/lib/atoms/chip-list/chip-list.module.d.ts +15 -0
- package/lib/atoms/clipboard/clipboard.component.d.ts +35 -0
- package/lib/atoms/clipboard/clipboard.module.d.ts +12 -0
- package/lib/atoms/container/container.component.d.ts +9 -0
- package/lib/atoms/container/container.module.d.ts +8 -0
- package/lib/atoms/date-range/date-range.component.d.ts +24 -0
- package/lib/atoms/date-range/date-range.module.d.ts +11 -0
- package/lib/atoms/datepicker/datepicker.component.d.ts +32 -0
- package/lib/atoms/datepicker/datepicker.module.d.ts +10 -0
- package/lib/atoms/drag-and-drop/drag-and-drop.component.d.ts +26 -0
- package/lib/atoms/drag-and-drop/drag-and-drop.module.d.ts +13 -0
- package/lib/atoms/dropdown/dropdown.component.d.ts +67 -0
- package/lib/atoms/dropdown/dropdown.module.d.ts +12 -0
- package/lib/atoms/dropdown-button/dropdown-button.component.d.ts +17 -0
- package/lib/atoms/dropdown-button/dropdown-button.module.d.ts +11 -0
- package/lib/atoms/dropdown-tree/dropdowntree.component.d.ts +35 -0
- package/lib/atoms/dropdown-tree/dropdowntree.module.d.ts +12 -0
- package/lib/atoms/expansion-panel/expansion-panel.component.d.ts +21 -0
- package/lib/atoms/expansion-panel/expansion-panel.module.d.ts +16 -0
- package/lib/atoms/icon/icon.component.d.ts +14 -0
- package/lib/atoms/icon/icon.module.d.ts +7 -0
- package/lib/atoms/labels/label.component.d.ts +12 -0
- package/lib/atoms/labels/label.module.d.ts +10 -0
- package/lib/atoms/list-views/list-view.component.d.ts +32 -0
- package/lib/atoms/list-views/list-view.module.d.ts +17 -0
- package/lib/atoms/loader/loader.component.d.ts +30 -0
- package/lib/atoms/loader/loader.module.d.ts +9 -0
- package/lib/atoms/loading-spinner/loading-spinner.component.d.ts +11 -0
- package/lib/atoms/loading-spinner/loading-spinner.module.d.ts +8 -0
- package/lib/atoms/multi-select-dropdown/multi-select-dropdown.component.d.ts +50 -0
- package/lib/atoms/multi-select-dropdown/multi-select-dropdown.module.d.ts +12 -0
- package/lib/atoms/notification/notification.component.d.ts +24 -0
- package/lib/atoms/notification/notification.module.d.ts +8 -0
- package/lib/atoms/numeric-textbox/numeric-textbox.component.d.ts +28 -0
- package/lib/atoms/numeric-textbox/numeric-textbox.module.d.ts +10 -0
- package/lib/atoms/progress-bar/progress-bar.component.d.ts +9 -0
- package/lib/atoms/progress-bar/progress-bar.module.d.ts +8 -0
- package/lib/atoms/radio-button/radio-button.component.d.ts +22 -0
- package/lib/atoms/radio-button/radio-button.module.d.ts +11 -0
- package/lib/atoms/search-box/search-box.component.d.ts +37 -0
- package/lib/atoms/search-box/search-box.module.d.ts +12 -0
- package/lib/atoms/slider/slider.component.d.ts +18 -0
- package/lib/atoms/slider/slider.module.d.ts +9 -0
- package/lib/atoms/stepper/stepper.component.d.ts +25 -0
- package/lib/atoms/stepper/stepper.module.d.ts +15 -0
- package/lib/atoms/switch/switch.component.d.ts +20 -0
- package/lib/atoms/switch/switch.module.d.ts +16 -0
- package/lib/atoms/text-area/text-area.component.d.ts +35 -0
- package/lib/atoms/text-area/text-area.module.d.ts +11 -0
- package/lib/atoms/textbox/textbox.component.d.ts +37 -0
- package/lib/atoms/textbox/textbox.module.d.ts +12 -0
- package/lib/atoms/time-picker/time-picker.component.d.ts +31 -0
- package/lib/atoms/time-picker/time-picker.module.d.ts +10 -0
- package/lib/atoms/timescheduler/timescheduler.component.d.ts +28 -0
- package/lib/atoms/timescheduler/timescheduler.module.d.ts +10 -0
- package/lib/atoms/toast-notification/toast-notification.module.d.ts +8 -0
- package/lib/atoms/toast-notification/toast-notification.service.d.ts +51 -0
- package/lib/atoms/tooltip/tooltip.component.d.ts +17 -0
- package/lib/atoms/tooltip/tooltip.module.d.ts +8 -0
- package/lib/atoms/typography/TypographyType.d.ts +1 -0
- package/lib/atoms/typography/typography.component.d.ts +25 -0
- package/lib/atoms/typography/typography.module.d.ts +8 -0
- package/lib/atoms/uploader/uploader.component.d.ts +64 -0
- package/lib/atoms/uploader/uploader.module.d.ts +14 -0
- package/lib/molecules/card/card-actions/card-actions.component.d.ts +8 -0
- package/lib/molecules/card/card-body/card-body.component.d.ts +5 -0
- package/lib/molecules/card/card-footer/card-footer.component.d.ts +5 -0
- package/lib/molecules/card/card-header/card-header.component.d.ts +11 -0
- package/lib/molecules/card/card.component.d.ts +7 -0
- package/lib/molecules/card/card.module.d.ts +14 -0
- package/lib/molecules/dialog/confirmation-dialog/confirmation-dialog.component.d.ts +20 -0
- package/lib/molecules/dialog/dialog-actions/dialog-actions.component.d.ts +7 -0
- package/lib/molecules/dialog/dialog-titlebar/dialog-titlebar.component.d.ts +16 -0
- package/lib/molecules/dialog/dialog.component.d.ts +20 -0
- package/lib/molecules/dialog/dialog.module.d.ts +15 -0
- package/lib/molecules/grid-form/grid-form.component.d.ts +33 -0
- package/lib/molecules/grid-form/grid-form.module.d.ts +16 -0
- package/lib/molecules/grid-layout/grid-layout-item/grid-layout-item.component.d.ts +14 -0
- package/lib/molecules/grid-layout/grid-layout.component.d.ts +11 -0
- package/lib/molecules/grid-layout/grid-layout.module.d.ts +10 -0
- package/lib/molecules/grid-pagination/grid-pagination-spacer/grid-pagination-spacer.component.d.ts +5 -0
- package/lib/molecules/grid-pagination/grid-pagination.component.d.ts +150 -0
- package/lib/molecules/grid-pagination/grid-pagination.module.d.ts +21 -0
- package/lib/molecules/grid-pagination/kebab-menu-filter.pipe.d.ts +7 -0
- package/lib/molecules/molecules.module.d.ts +14 -0
- package/lib/molecules/tabstrip/tabstrip-tab/tabstrip-tab.component.d.ts +10 -0
- package/lib/molecules/tabstrip/tabstrip.component.d.ts +15 -0
- package/lib/molecules/tabstrip/tabstrip.module.d.ts +10 -0
- package/lib/shared.module.d.ts +5 -2
- package/package.json +32 -5
- package/public-api.d.ts +108 -1
|
@@ -0,0 +1,621 @@
|
|
|
1
|
+
import { Component, ContentChild, ContentChildren, Directive, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { FormControl, FormGroup, Validators } from '@angular/forms';
|
|
3
|
+
import { Keys } from '@progress/kendo-angular-common';
|
|
4
|
+
import { orderBy } from '@progress/kendo-data-query';
|
|
5
|
+
import { LoaderSize, LoaderThemeColor, LoaderType } from '../../atoms/loader/loader.component';
|
|
6
|
+
import { GridComponent } from '@progress/kendo-angular-grid';
|
|
7
|
+
import { chevronDownIcon, chevronUpIcon, moreVerticalIcon } from '@progress/kendo-svg-icons';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/common";
|
|
10
|
+
import * as i2 from "@progress/kendo-angular-buttons";
|
|
11
|
+
import * as i3 from "../../atoms/icon/icon.component";
|
|
12
|
+
import * as i4 from "@progress/kendo-angular-inputs";
|
|
13
|
+
import * as i5 from "@progress/kendo-angular-grid";
|
|
14
|
+
import * as i6 from "../../atoms/tooltip/tooltip.component";
|
|
15
|
+
import * as i7 from "../../atoms/typography/typography.component";
|
|
16
|
+
import * as i8 from "../../atoms/loader/loader.component";
|
|
17
|
+
import * as i9 from "../../atoms/button/button.component";
|
|
18
|
+
import * as i10 from "./grid-pagination-spacer/grid-pagination-spacer.component";
|
|
19
|
+
import * as i11 from "./kebab-menu-filter.pipe";
|
|
20
|
+
export class CustomColumnTemplate {
|
|
21
|
+
constructor(template) {
|
|
22
|
+
this.template = template;
|
|
23
|
+
this.type = "";
|
|
24
|
+
}
|
|
25
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CustomColumnTemplate, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
26
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: CustomColumnTemplate, selector: "ng-template[type]", inputs: { type: "type" }, ngImport: i0 }); }
|
|
27
|
+
}
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CustomColumnTemplate, decorators: [{
|
|
29
|
+
type: Directive,
|
|
30
|
+
args: [{
|
|
31
|
+
selector: 'ng-template[type]'
|
|
32
|
+
}]
|
|
33
|
+
}], ctorParameters: () => [{ type: i0.TemplateRef }], propDecorators: { type: [{
|
|
34
|
+
type: Input
|
|
35
|
+
}] } });
|
|
36
|
+
const createFormGroup = (dataItem) => {
|
|
37
|
+
const form = new FormGroup({});
|
|
38
|
+
for (let data of Object.keys(dataItem)) {
|
|
39
|
+
form.addControl(data, new FormControl(dataItem[data], Validators.required));
|
|
40
|
+
}
|
|
41
|
+
return form;
|
|
42
|
+
};
|
|
43
|
+
export class GridPaginationComponent {
|
|
44
|
+
set preSelected(value) {
|
|
45
|
+
this._preSelected = value;
|
|
46
|
+
this.initGrid();
|
|
47
|
+
}
|
|
48
|
+
set gridView(value) {
|
|
49
|
+
this._gridView = value;
|
|
50
|
+
}
|
|
51
|
+
set pageCount(value) {
|
|
52
|
+
this._pageCount = value > 10 ? 10 : value;
|
|
53
|
+
}
|
|
54
|
+
constructor(cdRef, renderer) {
|
|
55
|
+
this.cdRef = cdRef;
|
|
56
|
+
this.renderer = renderer;
|
|
57
|
+
this.skip = 0;
|
|
58
|
+
this.itemName = 'Items';
|
|
59
|
+
this.showSelectAllMessage = false;
|
|
60
|
+
this.allPagesSelected = false;
|
|
61
|
+
this.previousSelectAllState = 'unchecked';
|
|
62
|
+
this.onSelectAllAcrossPages = new EventEmitter();
|
|
63
|
+
this.columnData = [];
|
|
64
|
+
this.pageSize = 0;
|
|
65
|
+
this.pageable = false;
|
|
66
|
+
this.sortable = false;
|
|
67
|
+
this.groupable = false;
|
|
68
|
+
this.reorderable = false;
|
|
69
|
+
this.resizable = false;
|
|
70
|
+
this.checkBoxWidth = 45;
|
|
71
|
+
this.checkBoxColumnResizable = false;
|
|
72
|
+
this.checkBoxColumnMenu = false;
|
|
73
|
+
this.checkBoxColumnShowSelectedAll = true;
|
|
74
|
+
this.checkBoxRequired = false;
|
|
75
|
+
this.columnMenu = false;
|
|
76
|
+
this.mode = 'multiple';
|
|
77
|
+
this.checkboxOnly = true;
|
|
78
|
+
this.dragColumns = false;
|
|
79
|
+
this.navigable = true;
|
|
80
|
+
this.gridRowSelectByValue = '';
|
|
81
|
+
this.noRecordsContent = 'No records are available yet.';
|
|
82
|
+
this.selectedRowData = new EventEmitter();
|
|
83
|
+
this.showToolbar = false;
|
|
84
|
+
this.selectableSettings = {};
|
|
85
|
+
this.kebabList = [];
|
|
86
|
+
this.showKebab = false;
|
|
87
|
+
this.rowDetails = new EventEmitter();
|
|
88
|
+
this.kebabItemClick = new EventEmitter();
|
|
89
|
+
this.icon = moreVerticalIcon;
|
|
90
|
+
this.kebabColumnWidth = 90;
|
|
91
|
+
this.data = [];
|
|
92
|
+
this.selectColumn = '';
|
|
93
|
+
this.rowDataOfClickedCell = new EventEmitter();
|
|
94
|
+
this._preSelected = [];
|
|
95
|
+
this._gridView = { data: [], total: 0 };
|
|
96
|
+
this.preSelectedRecords = [];
|
|
97
|
+
this.onPageChange = new EventEmitter();
|
|
98
|
+
this.ignoreColumnCellClick = [];
|
|
99
|
+
this.allowColumnClick = false;
|
|
100
|
+
this.sort = [
|
|
101
|
+
{
|
|
102
|
+
field: '',
|
|
103
|
+
dir: undefined,
|
|
104
|
+
},
|
|
105
|
+
];
|
|
106
|
+
this.hasApiSorting = false;
|
|
107
|
+
this.sortDirection = new EventEmitter();
|
|
108
|
+
this.arrowDownIcon = chevronDownIcon;
|
|
109
|
+
this.arrowUpIcon = chevronUpIcon;
|
|
110
|
+
this.expandRowIndex = [];
|
|
111
|
+
this.customExpandRowColumn = false;
|
|
112
|
+
this.deleteColumnWidth = 42;
|
|
113
|
+
this.expandRowColumnWidth = 56;
|
|
114
|
+
this.deletedRowData = new EventEmitter();
|
|
115
|
+
this.sizes = [];
|
|
116
|
+
this._pageCount = 0;
|
|
117
|
+
this.showDeleteColumn = false;
|
|
118
|
+
this.hideKebabRowIndex = [];
|
|
119
|
+
this.loading = false;
|
|
120
|
+
this.loaderType = LoaderType.pulsing;
|
|
121
|
+
this.loaderSize = LoaderSize.medium;
|
|
122
|
+
this.loaderTheme = LoaderThemeColor.primary;
|
|
123
|
+
this.gridBottomSpace = 24;
|
|
124
|
+
this.resizeHeight = 0;
|
|
125
|
+
this.selectAllState = 'unchecked';
|
|
126
|
+
this.selectedItemCount = 0;
|
|
127
|
+
this.selectedRows = [];
|
|
128
|
+
this.disablePreSelectedRows = false;
|
|
129
|
+
this.updatedData = new EventEmitter();
|
|
130
|
+
this.allowEditingCell = false;
|
|
131
|
+
this.columnContentNoWrap = false;
|
|
132
|
+
this.infiniteScrollLoader = false;
|
|
133
|
+
this.onscrollBottom = new EventEmitter();
|
|
134
|
+
this.isInfiniteScrollGrid = false;
|
|
135
|
+
this.gridLoading = false;
|
|
136
|
+
this.minResizableWidth = 50;
|
|
137
|
+
this.showRefresh = false;
|
|
138
|
+
this.isKebabColumnSticky = false;
|
|
139
|
+
this.isCheckBoxColumnSticky = false;
|
|
140
|
+
this.isDeleteColumnSticky = false;
|
|
141
|
+
this.emitRefreshEvt = new EventEmitter();
|
|
142
|
+
this.isSelectAllCheckboxRequired = true;
|
|
143
|
+
this.columnTemplateDict = {};
|
|
144
|
+
/*
|
|
145
|
+
* This logic of dynamically calculating the height of grid need further brainstorming hence commented for now.
|
|
146
|
+
*/
|
|
147
|
+
// getGridHeight() {
|
|
148
|
+
// const windowHeight = window.innerHeight;
|
|
149
|
+
// const viewport: any = document.getElementById('lib-grid');
|
|
150
|
+
// const gridOffset = viewport.getBoundingClientRect().top + window.scrollY;
|
|
151
|
+
// const gridHeight =
|
|
152
|
+
// this.gridElement.nativeElement.offsetHeight + this.gridBottomSpace; //grid should have 24px space at bottom
|
|
153
|
+
// if (gridOffset + gridHeight >= windowHeight) {
|
|
154
|
+
// this.height = windowHeight - (gridOffset + this.gridBottomSpace);
|
|
155
|
+
// }
|
|
156
|
+
// }
|
|
157
|
+
// @HostListener('window:resize', ['$event'])
|
|
158
|
+
// resize(ev: any) {
|
|
159
|
+
// if (ev.target.innerHeight > this.resizeHeight) {
|
|
160
|
+
// this.resizeHeight = ev.target.innerHeight;
|
|
161
|
+
// this.height = '100%';
|
|
162
|
+
// }
|
|
163
|
+
// if (this.resizeHeight > window.innerHeight) {
|
|
164
|
+
// this.resizeHeight = 0;
|
|
165
|
+
// }
|
|
166
|
+
// this.getGridHeight();
|
|
167
|
+
// }
|
|
168
|
+
this.rowClass = (args) => {
|
|
169
|
+
if (this.selectedRows && this.disablePreSelectedRows) {
|
|
170
|
+
return {
|
|
171
|
+
'k-disabled': this.selectedRows.includes(args.dataItem[this.gridRowSelectByValue]) || this.allPagesSelected,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
return '';
|
|
175
|
+
};
|
|
176
|
+
this.setSelectableSettings();
|
|
177
|
+
}
|
|
178
|
+
ngOnInit() {
|
|
179
|
+
this.columnData.forEach((column, index) => {
|
|
180
|
+
column.sortable = column.sortable == undefined ? true : column.sortable;
|
|
181
|
+
if (!this.ignoreColumnCellClick.includes(index)) {
|
|
182
|
+
column.class = 'column-cursor-pointer';
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
if (!this.hasApiSorting) {
|
|
186
|
+
this.loadGridData();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
scrollBottom() {
|
|
190
|
+
this.onscrollBottom.emit();
|
|
191
|
+
}
|
|
192
|
+
getPosition() {
|
|
193
|
+
if (this.showToolbar && this.infiniteScrollLoader) {
|
|
194
|
+
return 'both';
|
|
195
|
+
}
|
|
196
|
+
else if (this.showToolbar) {
|
|
197
|
+
return 'top';
|
|
198
|
+
}
|
|
199
|
+
else if (this.infiniteScrollLoader) {
|
|
200
|
+
return 'bottom';
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
ngAfterContentInit() {
|
|
207
|
+
if (!this.pageable) {
|
|
208
|
+
this.pageSize = this._gridView.data?.length;
|
|
209
|
+
}
|
|
210
|
+
this.columnTemplates.forEach(x => this.columnTemplateDict[x.type] = x.template);
|
|
211
|
+
}
|
|
212
|
+
ngAfterViewInit() {
|
|
213
|
+
this.initGrid();
|
|
214
|
+
}
|
|
215
|
+
initGrid() {
|
|
216
|
+
if (this.customExpandRowColumn) {
|
|
217
|
+
this.expandRowIndex.forEach((id) => {
|
|
218
|
+
this.grid.expandRow(id);
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
this.selectedRows = this._preSelected;
|
|
222
|
+
if (this.selectedRows?.length > 0) {
|
|
223
|
+
if (this.selectedRows?.length == this._gridView.total) {
|
|
224
|
+
this.selectAllState = 'checked';
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
this.selectAllState = 'indeterminate';
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
this.selectAllState = 'unchecked';
|
|
232
|
+
}
|
|
233
|
+
if (this.gridElement) {
|
|
234
|
+
this.initialGridHeight =
|
|
235
|
+
this.gridElement?.nativeElement?.offsetHeight + this.gridBottomSpace;
|
|
236
|
+
// this.getGridHeight();
|
|
237
|
+
const gridContainer = this.gridElement?.nativeElement?.getElementsByClassName('k-grid-container')[0];
|
|
238
|
+
if (gridContainer && this.selectAllMessageElement?.nativeElement) {
|
|
239
|
+
this.renderer.insertBefore(gridContainer.parentElement, this.selectAllMessageElement?.nativeElement, gridContainer, true);
|
|
240
|
+
}
|
|
241
|
+
const selectAllCheckbox = this.gridElement?.nativeElement?.querySelector('.select-all-header input');
|
|
242
|
+
if (selectAllCheckbox) {
|
|
243
|
+
this.renderer.setProperty(selectAllCheckbox, 'disabled', this.canEnableSelectAll());
|
|
244
|
+
}
|
|
245
|
+
this.cdRef.detectChanges();
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
selectAcrossPages(isSelected) {
|
|
249
|
+
this.triggerSelectAllPagesEvent(isSelected);
|
|
250
|
+
if (!isSelected) {
|
|
251
|
+
this.onSelectAllChange(this.previousSelectAllState);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
triggerSelectAllPagesEvent(isSelected) {
|
|
255
|
+
this.allPagesSelected = isSelected;
|
|
256
|
+
this.onSelectAllAcrossPages.emit(isSelected);
|
|
257
|
+
this.selectedItemCount = isSelected ? this._gridView.total : 0;
|
|
258
|
+
console.log('triggerSelectAllPagesEvent : isSelected', isSelected);
|
|
259
|
+
}
|
|
260
|
+
addSelectAllMessage(selectAll) {
|
|
261
|
+
this.selectAllMsgParentElement = this.selectAllMessageElement?.nativeElement?.parentElement;
|
|
262
|
+
if (this.showSelectAllMessage && this.selectAllMsgParentElement && (this._pageCount > 1 || this.isInfiniteScrollGrid)) {
|
|
263
|
+
const selectAllMsgElement = this.selectAllMessageElement?.nativeElement?.querySelector('.lib-grid-select-all-message-container');
|
|
264
|
+
if (selectAll) {
|
|
265
|
+
const beforeHeight = this.selectAllMsgParentElement.offsetHeight;
|
|
266
|
+
selectAllMsgElement?.classList.add('lib-grid-select-all-message-show');
|
|
267
|
+
const afterHeight = this.selectAllMsgParentElement.offsetHeight;
|
|
268
|
+
this.selectAllMsgParentElement.style.height = (this.selectAllMsgParentElement.offsetHeight - (afterHeight - beforeHeight)) + 'px';
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
selectAllMsgElement?.classList.remove('lib-grid-select-all-message-show');
|
|
272
|
+
if (this.allPagesSelected) {
|
|
273
|
+
this.triggerSelectAllPagesEvent(false);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
pageChange(event) {
|
|
279
|
+
if (this.selectAllMsgParentElement) {
|
|
280
|
+
this.selectAllMsgParentElement.style.height = '';
|
|
281
|
+
}
|
|
282
|
+
this.onPageChange.emit(event);
|
|
283
|
+
}
|
|
284
|
+
setSelectableSettings() {
|
|
285
|
+
if (this.checkboxOnly || this.mode === 'single') {
|
|
286
|
+
this.dragColumns = false;
|
|
287
|
+
}
|
|
288
|
+
this.selectableSettings = {
|
|
289
|
+
checkboxOnly: this.checkboxOnly,
|
|
290
|
+
mode: this.mode,
|
|
291
|
+
drag: this.dragColumns,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
// We can extract data out of row number using below function
|
|
295
|
+
/* extract() {
|
|
296
|
+
this.extractDataItems = this.mySelection.map(idx => {
|
|
297
|
+
return this.gridData.find((data: { ProductID: number; }) => data.ProductID === idx);
|
|
298
|
+
});
|
|
299
|
+
console.log(this.extractDataItems)
|
|
300
|
+
this.selectedRowData.emit(this.extractDataItems);
|
|
301
|
+
} */
|
|
302
|
+
selectedKeysChange(rows) {
|
|
303
|
+
let selectedRowData = [];
|
|
304
|
+
let selectedRowsCount = 0;
|
|
305
|
+
if (rows?.length > 0) {
|
|
306
|
+
selectedRowsCount = rows?.length;
|
|
307
|
+
}
|
|
308
|
+
else if (this.selectedRows?.length > 0 && this.disablePreSelectedRows) {
|
|
309
|
+
selectedRowsCount = this.selectedRows?.length;
|
|
310
|
+
rows = this.selectedRows;
|
|
311
|
+
}
|
|
312
|
+
this.previousSelectAllState = this.selectAllState;
|
|
313
|
+
this.selectAllState = this.getSelectAllState(selectedRowsCount);
|
|
314
|
+
if (this.selectAllState === 'unchecked' || this.selectAllState === 'indeterminate') {
|
|
315
|
+
this.addSelectAllMessage(false);
|
|
316
|
+
}
|
|
317
|
+
selectedRowData = rows.map(rowData => {
|
|
318
|
+
return this._gridView.data.find((data) => data[this.gridRowSelectByValue] === rowData);
|
|
319
|
+
});
|
|
320
|
+
this.selectedRowData.emit(selectedRowData);
|
|
321
|
+
}
|
|
322
|
+
getSelectAllState(selectedRowsCount) {
|
|
323
|
+
if (selectedRowsCount == this._gridView.total) {
|
|
324
|
+
this.selectAllState = 'checked';
|
|
325
|
+
}
|
|
326
|
+
else if (selectedRowsCount == 0) {
|
|
327
|
+
this.selectAllState = 'unchecked';
|
|
328
|
+
this.addSelectAllMessage(false);
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
this.selectAllState = 'indeterminate';
|
|
332
|
+
this.addSelectAllMessage(false);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
onKebabClick(item, rowDetails) {
|
|
336
|
+
this.kebabItemClick.emit({ action: item, rowDetails });
|
|
337
|
+
}
|
|
338
|
+
onDetailExpand(rowData) {
|
|
339
|
+
this.rowDetails.emit(rowData.dataItem);
|
|
340
|
+
}
|
|
341
|
+
cellClickHandler(args) {
|
|
342
|
+
if (this.allowColumnClick) {
|
|
343
|
+
if (this.ignoreColumnCellClick.includes(args.columnIndex)) {
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
this.rowDataOfClickedCell.emit({ dataItem: args.dataItem, columnIndex: args.columnIndex });
|
|
347
|
+
}
|
|
348
|
+
if (this.allowEditingCell) {
|
|
349
|
+
this.formGroup = createFormGroup(args.dataItem);
|
|
350
|
+
args.sender.editCell(args.rowIndex, args.columnIndex, this.formGroup);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
sortChange(sort) {
|
|
354
|
+
this.sort = sort;
|
|
355
|
+
if (!this.hasApiSorting) {
|
|
356
|
+
this.loadGridData();
|
|
357
|
+
}
|
|
358
|
+
this.sortDirection.emit(this.sort);
|
|
359
|
+
}
|
|
360
|
+
loadGridData() {
|
|
361
|
+
this._gridView = {
|
|
362
|
+
data: orderBy(this._gridView?.data, this.sort),
|
|
363
|
+
total: this._gridView?.total,
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
expandRow(id) {
|
|
367
|
+
this.grid.expandRow(id);
|
|
368
|
+
this.expandRowIndex.push(id);
|
|
369
|
+
// setTimeout(() => {
|
|
370
|
+
// this.getGridHeight();
|
|
371
|
+
// }, 0);
|
|
372
|
+
}
|
|
373
|
+
collapseRow(id) {
|
|
374
|
+
this.grid.collapseRow(id);
|
|
375
|
+
this.expandRowIndex.splice(this.expandRowIndex.indexOf(id), 1);
|
|
376
|
+
// if (this.expandRowIndex?.length == 0) {
|
|
377
|
+
// const windowHeight = window.innerHeight;
|
|
378
|
+
// const viewport: any = document.getElementById('lib-grid');
|
|
379
|
+
// const gridOffset = viewport.getBoundingClientRect().top + window.scrollY;
|
|
380
|
+
// if (windowHeight > gridOffset + this.initialGridHeight) {
|
|
381
|
+
// this.height = '100%';
|
|
382
|
+
// return;
|
|
383
|
+
// }
|
|
384
|
+
// // this.getGridHeight();
|
|
385
|
+
// }
|
|
386
|
+
}
|
|
387
|
+
onDelete(rowDetails) {
|
|
388
|
+
setTimeout(() => {
|
|
389
|
+
this.getHeaderHeight();
|
|
390
|
+
}, 1000);
|
|
391
|
+
this.deletedRowData.emit(rowDetails);
|
|
392
|
+
}
|
|
393
|
+
getHeaderHeight() {
|
|
394
|
+
if (this._gridView?.data?.length === 0) {
|
|
395
|
+
return 'hide-header';
|
|
396
|
+
}
|
|
397
|
+
return 'view-header';
|
|
398
|
+
}
|
|
399
|
+
expandColumnClass() {
|
|
400
|
+
if (this.selectedRows?.length > 0 && this.disablePreSelectedRows) {
|
|
401
|
+
this.expandRowColumnWidth = 194;
|
|
402
|
+
return 'expand-row';
|
|
403
|
+
}
|
|
404
|
+
this.expandRowColumnWidth = 56;
|
|
405
|
+
return '';
|
|
406
|
+
}
|
|
407
|
+
onSelectAllChange(checkedState) {
|
|
408
|
+
if (checkedState === 'checked') {
|
|
409
|
+
this._preSelected = this._gridView.data
|
|
410
|
+
.map((item) => item[this.gridRowSelectByValue])
|
|
411
|
+
.filter((id) => id);
|
|
412
|
+
this.selectAllState = 'checked';
|
|
413
|
+
this.selectedItemCount = this._gridView.data.length;
|
|
414
|
+
}
|
|
415
|
+
else if (this.selectedRows?.length > 0 && this.disablePreSelectedRows) {
|
|
416
|
+
this._preSelected = this.selectedRows;
|
|
417
|
+
this.selectAllState = 'indeterminate';
|
|
418
|
+
this.selectedItemCount = 0;
|
|
419
|
+
}
|
|
420
|
+
else {
|
|
421
|
+
this._preSelected = [];
|
|
422
|
+
this.selectAllState = 'unchecked';
|
|
423
|
+
this.selectedItemCount = 0;
|
|
424
|
+
}
|
|
425
|
+
this.addSelectAllMessage(this.selectAllState === 'checked');
|
|
426
|
+
}
|
|
427
|
+
canEnableSelectAll() {
|
|
428
|
+
return (this.selectedRows?.length == this._gridView.total &&
|
|
429
|
+
this.disablePreSelectedRows);
|
|
430
|
+
}
|
|
431
|
+
cellCloseHandler(args) {
|
|
432
|
+
let { formGroup, dataItem } = args;
|
|
433
|
+
if (!formGroup.valid) {
|
|
434
|
+
args.preventDefault();
|
|
435
|
+
}
|
|
436
|
+
else if (formGroup.dirty) {
|
|
437
|
+
if (args.originalEvent && args.originalEvent.keyCode === Keys.Escape) {
|
|
438
|
+
return;
|
|
439
|
+
}
|
|
440
|
+
Object.assign(dataItem, formGroup.value);
|
|
441
|
+
this.saveChanges();
|
|
442
|
+
this.updatedData.emit(this.grid.data);
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
saveChanges() {
|
|
446
|
+
this.grid.closeCell();
|
|
447
|
+
this.grid.cancelCell();
|
|
448
|
+
}
|
|
449
|
+
refreshGridData() {
|
|
450
|
+
this.emitRefreshEvt.emit();
|
|
451
|
+
}
|
|
452
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GridPaginationComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
453
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: GridPaginationComponent, selector: "lib-grid-pagination", inputs: { skip: "skip", itemName: "itemName", showSelectAllMessage: "showSelectAllMessage", columnData: "columnData", pageSize: "pageSize", pageable: "pageable", sortable: "sortable", groupable: "groupable", reorderable: "reorderable", resizable: "resizable", checkBoxWidth: "checkBoxWidth", checkBoxColumnResizable: "checkBoxColumnResizable", checkBoxColumnMenu: "checkBoxColumnMenu", checkBoxColumnShowSelectedAll: "checkBoxColumnShowSelectedAll", checkBoxRequired: "checkBoxRequired", columnMenu: "columnMenu", mode: "mode", checkboxOnly: "checkboxOnly", dragColumns: "dragColumns", navigable: "navigable", gridHeight: "gridHeight", gridRowSelectByValue: "gridRowSelectByValue", noRecordsContent: "noRecordsContent", showToolbar: "showToolbar", kebabList: "kebabList", showKebab: "showKebab", icon: "icon", kebabColumnWidth: "kebabColumnWidth", selectColumn: "selectColumn", preSelected: "preSelected", gridView: "gridView", ignoreColumnCellClick: "ignoreColumnCellClick", allowColumnClick: "allowColumnClick", sort: "sort", hasApiSorting: "hasApiSorting", expandRowIndex: "expandRowIndex", customExpandRowColumn: "customExpandRowColumn", deleteColumnWidth: "deleteColumnWidth", sizes: "sizes", pageCount: "pageCount", showDeleteColumn: "showDeleteColumn", hideKebabRowIndex: "hideKebabRowIndex", loading: "loading", loaderType: "loaderType", loaderSize: "loaderSize", loaderTheme: "loaderTheme", disablePreSelectedRows: "disablePreSelectedRows", allowEditingCell: "allowEditingCell", columnContentNoWrap: "columnContentNoWrap", infiniteScrollLoader: "infiniteScrollLoader", isInfiniteScrollGrid: "isInfiniteScrollGrid", gridLoading: "gridLoading", minResizableWidth: "minResizableWidth", showRefresh: "showRefresh", isKebabColumnSticky: "isKebabColumnSticky", isCheckBoxColumnSticky: "isCheckBoxColumnSticky", isDeleteColumnSticky: "isDeleteColumnSticky", isSelectAllCheckboxRequired: "isSelectAllCheckboxRequired" }, outputs: { onSelectAllAcrossPages: "onSelectAllAcrossPages", selectedRowData: "selectedRowData", rowDetails: "rowDetails", kebabItemClick: "kebabItemClick", rowDataOfClickedCell: "rowDataOfClickedCell", onPageChange: "onPageChange", sortDirection: "sortDirection", deletedRowData: "deletedRowData", updatedData: "updatedData", onscrollBottom: "onscrollBottom", emitRefreshEvt: "emitRefreshEvt" }, queries: [{ propertyName: "templateRef", first: true, predicate: ["multiColumnData"], descendants: true }, { propertyName: "detailTemplate", first: true, predicate: ["detailTemplate"], descendants: true }, { propertyName: "impactColumn", first: true, predicate: ["impactColumn"], descendants: true }, { propertyName: "columnTemplates", predicate: CustomColumnTemplate }], viewQueries: [{ propertyName: "grid", first: true, predicate: GridComponent, descendants: true }, { propertyName: "gridElement", first: true, predicate: ["gridElement"], descendants: true }, { propertyName: "selectAllCheckbox", first: true, predicate: ["selectAllCheckbox"], descendants: true }, { propertyName: "selectAllMessageElement", first: true, predicate: ["selectAllMessageElement"], descendants: true }], ngImport: i0, template: "<div #gridElement [ngClass]=\"columnContentNoWrap ? 'column-content-nowrap' : ''\">\n <kendo-grid [data]=\"_gridView\" [pageSize]=\"pageSize\" [skip]=\"skip\" [selectable]=\"selectableSettings\"\n [pageable]=\"pageable\" [sortable]=\"sortable\" [loading]=\"gridLoading\" [groupable]=\"groupable\"\n [reorderable]=\"reorderable\" [resizable]=\"resizable\" [columnMenu]=\"columnMenu\" [navigable]=\"navigable\"\n [height]=\"gridHeight\" (change)=\"setSelectableSettings()\" (selectedKeysChange)=\"selectedKeysChange($event)\"\n [kendoGridSelectBy]=\"gridRowSelectByValue\" (detailExpand)=\"onDetailExpand($event)\" [selectedKeys]=\"_preSelected\"\n (pageChange)=\"pageChange($event)\" (cellClick)=\"cellClickHandler($event)\" (cellClose)=\"cellCloseHandler($event)\"\n [sort]=\"sort\" (sortChange)=\"sortChange($event)\" (scrollBottom)=\"scrollBottom()\" [ngClass]=\"getHeaderHeight()\"\n id=\"lib-grid\" [rowClass]=\"rowClass\">\n <div #selectAllMessageElement>\n <div class=\"lib-grid-select-all-message-container\"\n *ngIf=\"((selectedItemCount < _gridView.total) || allPagesSelected)\">\n <div *ngIf=\"(selectedItemCount < _gridView.total)\" class=\"lib-grid-select-all-message\">\n <lib-typography [defaultText]=\"'All '+selectedItemCount+' '+itemName+' on this page are selected.'\"\n type=\"BODY_SMALL\"></lib-typography>\n <u><lib-typography (click)=\"selectAcrossPages(true)\" class=\"select-all-handler\"\n [defaultText]=\"'Select all '+_gridView.total+' '+itemName+' from all pages'\"\n type=\"BODY_SMALL\"></lib-typography></u>\n </div>\n <div *ngIf=\"allPagesSelected\" class=\"lib-grid-select-all-message\">\n <lib-icon name=\"circle-checked\" class=\"all-selected-icon\"></lib-icon>\n <lib-typography [defaultText]=\"'All '+_gridView.total+' '+itemName+' across all pages are selected.'\"\n type=\"BODY_SMALL\"></lib-typography>\n <u><lib-typography (click)=\"selectAcrossPages(false)\" class=\"select-all-handler\"\n [defaultText]=\"'Clear selection'\" type=\"BODY_SMALL\"></lib-typography></u>\n </div>\n </div>\n </div>\n <ng-template kendoGridToolbarTemplate [position]=\"getPosition()\" let-position=\"position\">\n <ng-container *ngIf=\"showToolbar && position === 'top'\">\n <ng-content></ng-content>\n <ng-container *ngIf=\"showRefresh\">\n <ng-container *ngTemplateOutlet=\"showRefreshTemplate\"></ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"infiniteScrollLoader && position === 'bottom'\">\n <lib-grid-pagination-spacer></lib-grid-pagination-spacer>\n <lib-loader [type]=\"loaderType\" [size]=\"loaderSize\" [themeColor]=\"loaderTheme\"></lib-loader>\n <lib-grid-pagination-spacer></lib-grid-pagination-spacer>\n </ng-container>\n </ng-template>\n\n <ng-template #showRefreshTemplate>\n <lib-tooltip position=\"top\" showOn=\"hover\" [tooltipWidth]=\"68\" [callout]=\"true\">\n <div class=\"tooltip-content\">\n <lib-typography defaultText=\"Refresh\"></lib-typography>\n </div>\n <lib-button size=\"small\" width=\"2.4rem\" rounded=\"small\" fillMode=\"solid\" themeColor=\"primary\" iconName=\"reset\"\n [toggleable]=\"false\" (buttonClick)=\"refreshGridData()\" [iconButton]=\"true\" [iconFontSize]=\"13\"></lib-button>\n </lib-tooltip>\n </ng-template>\n\n <ng-template kendoGridLoadingTemplate>\n <div class=\"k-loading-color\"></div>\n <div class=\"loading-container\">\n <lib-loader [type]=\"loaderType\" [size]=\"loaderSize\" [themeColor]=\"loaderTheme\"></lib-loader>\n </div>\n </ng-template>\n\n <ng-template *ngIf=\"this._gridView.total === 0\" kendoGridNoRecordsTemplate>\n <lib-typography *ngIf=\"!loading\" [defaultText]=\"noRecordsContent\" type=\"BODY_MEDIUM\"></lib-typography>\n <lib-loader *ngIf=\"loading\" [type]=\"loaderType\" [size]=\"loaderSize\" [themeColor]=\"loaderTheme\"></lib-loader>\n </ng-template>\n <ng-container *ngIf=\"this._gridView.total > 0\">\n <kendo-grid-checkbox-column #selectAllCheckbox headerClass=\"select-all-header\" *ngIf=\"checkBoxRequired\"\n [width]=\"checkBoxWidth\" [resizable]=\"checkBoxColumnResizable\" [columnMenu]=\"checkBoxColumnMenu\"\n class=\"checkbox-column\" [sticky]=\"isCheckBoxColumnSticky && !customExpandRowColumn\">\n <ng-template kendoGridHeaderTemplate *ngIf=\"isSelectAllCheckboxRequired\">\n <input id=\"selectAllCheckboxId\" type=\"checkbox\" kendoCheckBox kendoGridSelectAllCheckbox\n [state]=\"selectAllState\" (selectAllChange)=\"onSelectAllChange($event)\" />\n </ng-template>\n </kendo-grid-checkbox-column>\n\n <kendo-grid-column class=\"grid-column\" *ngFor=\"let item of columnData\" [field]=\"item.field\" [title]=\"item.title\"\n [width]=\"item.columnWidth\" [minResizableWidth]=\"minResizableWidth\" [sortable]=\"item.sortable\"\n [editor]=\"item.editor\" [class]=\"item.class\" [sticky]=\"item.columnSticky && !customExpandRowColumn\">\n\n <ng-template *ngIf=\"sortable\" kendoGridHeaderTemplate>\n {{item.title}}\n <span *ngIf=\"sort[0].field === item.field\">\n <span *ngIf=\"sort[0].dir === 'asc'\"></span>\n <span *ngIf=\"sort[0].dir === 'desc'\"></span>\n </span>\n </ng-template>\n\n <ng-template *ngIf=\"item.customColumn\" kendoGridCellTemplate let-dataItem>\n <ng-container [ngTemplateOutlet]=\"columnTemplateDict[item.type]\"\n [ngTemplateOutletContext]=\"{$implicit: dataItem}\"></ng-container>\n </ng-template>\n\n <ng-template *ngIf=\"item.custom\" kendoGridCellTemplate let-dataItem>\n <ng-container *ngTemplateOutlet=\"templateRef; context: {$implicit: dataItem}\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"item.impact\" kendoGridCellTemplate let-dataItem>\n <ng-container *ngTemplateOutlet=\"impactColumn; context: {$implicit: dataItem}\"></ng-container>\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column *ngIf=\"showDeleteColumn\" [width]=\"deleteColumnWidth\" class=\"delete-column\" title=\"Action\"\n [sticky]=\"isDeleteColumnSticky && !customExpandRowColumn\">\n <ng-template kendoGridCellTemplate let-dataItem let-rowIndex=\"rowIndex\">\n <lib-tooltip showOn=\"hover\" position=\"bottom\" class=\"remove-tooltip\">\n <lib-icon name=\"delete\" class=\"delete-icon\" (click)=\"onDelete(dataItem)\"></lib-icon>\n <div class=\"tooltip-content\">\n <lib-typography defaultText=\"Remove\"></lib-typography>\n </div>\n </lib-tooltip>\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column [width]=\"kebabColumnWidth\" class=\"kebab-column\" *ngIf=\"showKebab\" title=\"Actions\"\n [sticky]=\"isKebabColumnSticky && !customExpandRowColumn\">\n <ng-template kendoGridCellTemplate let-dataItem let-rowIndex=\"rowIndex\">\n <kendo-dropdownbutton *ngIf=\"!hideKebabRowIndex.includes(rowIndex)\" [svgIcon]=\"icon\" fillMode=\"none\"\n [data]=\"kebabList | kebabMenuFilter : dataItem\" class=\"kebab\" (itemClick)=\"onKebabClick($event, dataItem)\"\n [popupSettings]=\"{ align: 'right', animate: true, popupClass: 'kebab-list' }\">\n </kendo-dropdownbutton>\n </ng-template>\n </kendo-grid-column>\n </ng-container>\n\n <!-- Limitation: detail template and sticky columns do not co-exist-->\n <ng-template *ngIf=\"customExpandRowColumn\" kendoGridDetailTemplate let-dataItem>\n <ng-container *ngTemplateOutlet=\"detailTemplate; context: {$implicit: dataItem}\"></ng-container>\n </ng-template>\n\n <kendo-grid-column *ngIf=\"customExpandRowColumn\" [width]=\"expandRowColumnWidth\" class=\"grid-column expand-column\">\n <ng-template kendoGridCellTemplate let-dataItem let-rowIndex=\"rowIndex\">\n <div [ngClass]=\"expandColumnClass()\">\n <span *ngIf=\"selectedRows.includes(dataItem[gridRowSelectByValue]) && disablePreSelectedRows\"\n class=\"expand-column-text\">\n Already added\n </span>\n <kendo-button *ngIf=\"!expandRowIndex.includes(rowIndex)\" [svgIcon]=\"arrowDownIcon\"\n (click)=\"expandRow(rowIndex)\" fillMode=\"none\" class=\"arrow-btn\">\n </kendo-button>\n <kendo-button *ngIf=\"expandRowIndex.includes(rowIndex)\" [svgIcon]=\"arrowUpIcon\"\n (click)=\"collapseRow(rowIndex)\" fillMode=\"none\" class=\"arrow-btn\">\n </kendo-button>\n </div>\n </ng-template>\n </kendo-grid-column>\n\n <ng-template kendoPagerTemplate let-totalPages=\"totalPages\" let-currentPage=\"currentPage\">\n <div class=\"pagination-wrapper\" [ngClass]=\"allPagesSelected ? 'pagination-disabled' : ''\">\n <kendo-pager-prev-buttons></kendo-pager-prev-buttons>\n <kendo-pager-numeric-buttons [buttonCount]=\"_pageCount\"></kendo-pager-numeric-buttons>\n <kendo-pager-next-buttons></kendo-pager-next-buttons>\n <kendo-pager-info></kendo-pager-info>\n <kendo-pager-page-sizes [pageSizes]=\"sizes\"></kendo-pager-page-sizes>\n </div>\n </ng-template>\n\n </kendo-grid>\n</div>\n", styles: [".loading-container{height:100%;display:flex;justify-content:center;align-items:center}::ng-deep .k-grid tr{height:50px}::ng-deep .pagination-wrapper{display:flex;width:100%}::ng-deep .pagination-disabled{color:#6c6f72!important;pointer-events:none}::ng-deep .lib-grid-select-all-message-container{height:2rem;display:none;gap:.25rem;justify-content:center;align-items:center;background-color:#eceff5!important;font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important}::ng-deep .lib-grid-select-all-message-container .select-all-handler{cursor:pointer}::ng-deep .lib-grid-select-all-message-container .lib-grid-select-all-message{display:flex;gap:.25rem}::ng-deep .lib-grid-select-all-message-container .lib-grid-select-all-message .all-selected-icon{color:#198038}::ng-deep .disabled{cursor:none!important;pointer-events:none;opacity:.5}::ng-deep .lib-grid-select-all-message-show{display:flex!important}::ng-deep .k-grid .k-table-th,::ng-deep .k-grid .k-table-th.k-sorted{font-family:Inter,sans-serif!important;font-weight:600!important;font-style:normal!important;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important;background-color:#dee6f7!important;border-bottom-color:#ebecec!important;border-bottom-style:solid!important;border-bottom-width:2px!important;border-right:0px!important;border-left:0px!important;cursor:default!important}::ng-deep .k-grid .k-table-th .k-cell-inner,::ng-deep .k-grid .k-table-th.k-sorted .k-cell-inner{padding-right:.5rem;border-right:2px solid #C2D2F3!important}::ng-deep .k-grid .k-table-th .k-cell-inner .k-link,::ng-deep .k-grid .k-table-th.k-sorted .k-cell-inner .k-link{cursor:default!important}::ng-deep .k-grid .k-table-th:focus,::ng-deep .k-grid .k-table-th.k-sorted:focus{box-shadow:none!important}::ng-deep .k-grid .k-table-th.k-sorted{font-family:Inter,sans-serif!important;font-weight:600!important;font-style:normal!important;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important;background-color:#dee6f7!important}::ng-deep .k-grid tbody>tr:not(.k-detail-row):hover{background-color:#d0dcf5!important}::ng-deep .k-grid .k-table-row.k-selected>.k-table-td{background-color:#c9d7f4!important}::ng-deep .k-grid .k-table-row.k-disabled>.k-table-td{background-color:#fff!important}::ng-deep .k-grid .k-table-td{border-bottom-color:#ebecec!important;border-bottom-style:solid!important;border-bottom-width:1px!important;border-right:0px!important;border-left:0px!important}::ng-deep .k-grid td,::ng-deep .k-grid .k-table-td{white-space:nowrap!important}::ng-deep .k-table-alt-row{background-color:inherit!important}::ng-deep .k-grid .k-table-td{font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important}::ng-deep .k-grid-norecords{text-align:center!important;opacity:.4}::ng-deep .k-grid-norecords td{padding:14px 0 14px 24px!important}::ng-deep kendo-pager.k-pager-wrap.k-grid-pager{font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal!important;font-size:14px!important;line-height:20px!important;letter-spacing:.25px!important}::ng-deep .k-pager{border-style:none!important}::ng-deep .k-input-value-text{overflow:unset!important}::ng-deep .k-grid th.k-header{vertical-align:middle!important;padding-left:16px;padding-right:.5rem}::ng-deep .grid-column,::ng-deep .kebab-column,::ng-deep .delete-column{padding:0!important}::ng-deep .grid-column kendo-button,::ng-deep .kebab-column kendo-button,::ng-deep .delete-column kendo-button{align-items:center!important;justify-content:center!important;display:flex!important}::ng-deep .k-checkbox{width:20px!important;height:20px!important;border-radius:0!important}::ng-deep .k-grid .k-hierarchy-cell,::ng-deep .k-grid .k-hierarchy-col{width:0;display:none}::ng-deep .k-grid .k-detail-row .k-detail-cell{background-color:#f4f8fa!important;padding:16px!important}::ng-deep .delete-icon{color:#dc267f!important;padding-left:12px;cursor:pointer}::ng-deep .remove-tooltip kendo-tooltip.k-tooltip{background-color:#fff;color:#000}::ng-deep .hide-header .k-grid-header{border:0px!important}::ng-deep .k-grouping-header{background-color:#eceff5!important}::ng-deep .k-grid-toolbar{padding:4px 16px!important;height:54px;background-color:#eceff5!important}::ng-deep .k-grid td:not(.kebab-column):not(.expand-column){padding-left:16px!important;padding-right:16px!important}::ng-deep .view-header .k-table-thead tr{height:50px}::ng-deep .hide-header .k-table-thead tr{height:0px;padding:0;display:block}::ng-deep td.kebab-column{display:flex;justify-content:center;align-items:center;height:inherit}::ng-deep .k-grid .k-table-td>.k-checkbox{vertical-align:middle!important}::ng-deep .kebab .k-button,::ng-deep .expand-column .k-button{border:0px}::ng-deep .expand-column{pointer-events:all!important}::ng-deep .expand-column-text{margin-right:32px}::ng-deep .expand-row{display:flex;align-items:center;justify-content:flex-end}::ng-deep .column-cursor-pointer{cursor:pointer}::ng-deep .column-content-nowrap .k-grid .k-table-th,::ng-deep .column-content-nowrap .k-grid td,::ng-deep .column-content-nowrap .k-grid .k-table-td{white-space:nowrap;text-overflow:clip}::ng-deep kendo-grid.k-grid .k-table-alt-row .k-grid-content-sticky,::ng-deep kendo-grid.k-grid .k-grid-row-sticky.k-table-alt-row td,::ng-deep kendo-grid.k-grid .k-grid-row-sticky.k-table-alt-row .k-table-td,::ng-deep .k-master-row.k-table-alt-row .k-grid-content-sticky,::ng-deep .k-master-row.k-table-alt-row .k-grid-row-sticky{background-color:#fff}::ng-deep kendo-grid.k-grid .k-grid-content-sticky:hover,::ng-deep kendo-grid.k-grid .k-grid-content-sticky.k-hover,::ng-deep kendo-grid.k-grid .k-table-row:hover .k-grid-content-sticky{background-color:#d0dcf5!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: i2.DropDownButtonComponent, selector: "kendo-dropdownbutton", inputs: ["arrowIcon", "icon", "svgIcon", "iconClass", "imageUrl", "textField", "data", "size", "rounded", "fillMode", "themeColor", "buttonAttributes"], outputs: ["itemClick", "focus", "blur"], exportAs: ["kendoDropDownButton"] }, { kind: "component", type: i3.IconComponent, selector: "lib-icon", inputs: ["name", "projectedIcon", "fontSize", "type"] }, { kind: "directive", type: i4.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { kind: "component", type: i5.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "rowReorderable", "navigable", "navigatable", "autoSize", "rowClass", "rowSticky", "rowSelected", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "isDetailExpanded", "isGroupExpanded"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i5.ToolbarTemplateDirective, selector: "[kendoGridToolbarTemplate]", inputs: ["position"] }, { kind: "directive", type: i5.SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "component", type: i5.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterable", "editable"] }, { kind: "directive", type: i5.DetailTemplateDirective, selector: "[kendoGridDetailTemplate]", inputs: ["kendoGridDetailTemplateShowIf"] }, { kind: "component", type: i5.CheckboxColumnComponent, selector: "kendo-grid-checkbox-column", inputs: ["showSelectAll"] }, { kind: "directive", type: i5.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "directive", type: i5.NoRecordsTemplateDirective, selector: "[kendoGridNoRecordsTemplate]" }, { kind: "directive", type: i5.LoadingTemplateDirective, selector: "[kendoGridLoadingTemplate]" }, { kind: "directive", type: i5.HeaderTemplateDirective, selector: "[kendoGridHeaderTemplate]" }, { kind: "directive", type: i5.SelectAllCheckboxDirective, selector: "[kendoGridSelectAllCheckbox]", inputs: ["state"], outputs: ["selectAllChange"] }, { kind: "component", type: i5.PagerPrevButtonsComponent, selector: "kendo-pager-prev-buttons" }, { kind: "component", type: i5.PagerNextButtonsComponent, selector: "kendo-pager-next-buttons" }, { kind: "component", type: i5.PagerNumericButtonsComponent, selector: "kendo-pager-numeric-buttons", inputs: ["buttonCount"] }, { kind: "component", type: i5.PagerInfoComponent, selector: "kendo-pager-info" }, { kind: "component", type: i5.PagerPageSizesComponent, selector: "kendo-pager-page-sizes", inputs: ["pageSizes"] }, { kind: "directive", type: i5.PagerTemplateDirective, selector: "[kendoPagerTemplate]" }, { kind: "component", type: i6.TooltipComponent, selector: "lib-tooltip", inputs: ["position", "tooltipWidth", "tooltipHeight", "showOn", "closable", "title", "callout"] }, { kind: "component", type: i7.TypographyComponent, selector: "lib-typography", inputs: ["type", "defaultText", "isLabel", "hiddenLabel"] }, { kind: "component", type: i8.LoaderComponent, selector: "lib-loader", inputs: ["size", "type", "themeColor"] }, { kind: "component", type: i9.ButtonComponent, selector: "lib-button", inputs: ["size", "rounded", "fillMode", "themeColor", "label", "iconName", "disabled", "toggleable", "iconPosition", "fontType", "width", "iconButton", "projectedIcon", "formatFn", "iconFontSize"], outputs: ["buttonClick"] }, { kind: "component", type: i10.GridPaginationSpacerComponent, selector: "lib-grid-pagination-spacer" }, { kind: "pipe", type: i11.KebabMenuFilterPipe, name: "kebabMenuFilter" }] }); }
|
|
454
|
+
}
|
|
455
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GridPaginationComponent, decorators: [{
|
|
456
|
+
type: Component,
|
|
457
|
+
args: [{ selector: 'lib-grid-pagination', template: "<div #gridElement [ngClass]=\"columnContentNoWrap ? 'column-content-nowrap' : ''\">\n <kendo-grid [data]=\"_gridView\" [pageSize]=\"pageSize\" [skip]=\"skip\" [selectable]=\"selectableSettings\"\n [pageable]=\"pageable\" [sortable]=\"sortable\" [loading]=\"gridLoading\" [groupable]=\"groupable\"\n [reorderable]=\"reorderable\" [resizable]=\"resizable\" [columnMenu]=\"columnMenu\" [navigable]=\"navigable\"\n [height]=\"gridHeight\" (change)=\"setSelectableSettings()\" (selectedKeysChange)=\"selectedKeysChange($event)\"\n [kendoGridSelectBy]=\"gridRowSelectByValue\" (detailExpand)=\"onDetailExpand($event)\" [selectedKeys]=\"_preSelected\"\n (pageChange)=\"pageChange($event)\" (cellClick)=\"cellClickHandler($event)\" (cellClose)=\"cellCloseHandler($event)\"\n [sort]=\"sort\" (sortChange)=\"sortChange($event)\" (scrollBottom)=\"scrollBottom()\" [ngClass]=\"getHeaderHeight()\"\n id=\"lib-grid\" [rowClass]=\"rowClass\">\n <div #selectAllMessageElement>\n <div class=\"lib-grid-select-all-message-container\"\n *ngIf=\"((selectedItemCount < _gridView.total) || allPagesSelected)\">\n <div *ngIf=\"(selectedItemCount < _gridView.total)\" class=\"lib-grid-select-all-message\">\n <lib-typography [defaultText]=\"'All '+selectedItemCount+' '+itemName+' on this page are selected.'\"\n type=\"BODY_SMALL\"></lib-typography>\n <u><lib-typography (click)=\"selectAcrossPages(true)\" class=\"select-all-handler\"\n [defaultText]=\"'Select all '+_gridView.total+' '+itemName+' from all pages'\"\n type=\"BODY_SMALL\"></lib-typography></u>\n </div>\n <div *ngIf=\"allPagesSelected\" class=\"lib-grid-select-all-message\">\n <lib-icon name=\"circle-checked\" class=\"all-selected-icon\"></lib-icon>\n <lib-typography [defaultText]=\"'All '+_gridView.total+' '+itemName+' across all pages are selected.'\"\n type=\"BODY_SMALL\"></lib-typography>\n <u><lib-typography (click)=\"selectAcrossPages(false)\" class=\"select-all-handler\"\n [defaultText]=\"'Clear selection'\" type=\"BODY_SMALL\"></lib-typography></u>\n </div>\n </div>\n </div>\n <ng-template kendoGridToolbarTemplate [position]=\"getPosition()\" let-position=\"position\">\n <ng-container *ngIf=\"showToolbar && position === 'top'\">\n <ng-content></ng-content>\n <ng-container *ngIf=\"showRefresh\">\n <ng-container *ngTemplateOutlet=\"showRefreshTemplate\"></ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"infiniteScrollLoader && position === 'bottom'\">\n <lib-grid-pagination-spacer></lib-grid-pagination-spacer>\n <lib-loader [type]=\"loaderType\" [size]=\"loaderSize\" [themeColor]=\"loaderTheme\"></lib-loader>\n <lib-grid-pagination-spacer></lib-grid-pagination-spacer>\n </ng-container>\n </ng-template>\n\n <ng-template #showRefreshTemplate>\n <lib-tooltip position=\"top\" showOn=\"hover\" [tooltipWidth]=\"68\" [callout]=\"true\">\n <div class=\"tooltip-content\">\n <lib-typography defaultText=\"Refresh\"></lib-typography>\n </div>\n <lib-button size=\"small\" width=\"2.4rem\" rounded=\"small\" fillMode=\"solid\" themeColor=\"primary\" iconName=\"reset\"\n [toggleable]=\"false\" (buttonClick)=\"refreshGridData()\" [iconButton]=\"true\" [iconFontSize]=\"13\"></lib-button>\n </lib-tooltip>\n </ng-template>\n\n <ng-template kendoGridLoadingTemplate>\n <div class=\"k-loading-color\"></div>\n <div class=\"loading-container\">\n <lib-loader [type]=\"loaderType\" [size]=\"loaderSize\" [themeColor]=\"loaderTheme\"></lib-loader>\n </div>\n </ng-template>\n\n <ng-template *ngIf=\"this._gridView.total === 0\" kendoGridNoRecordsTemplate>\n <lib-typography *ngIf=\"!loading\" [defaultText]=\"noRecordsContent\" type=\"BODY_MEDIUM\"></lib-typography>\n <lib-loader *ngIf=\"loading\" [type]=\"loaderType\" [size]=\"loaderSize\" [themeColor]=\"loaderTheme\"></lib-loader>\n </ng-template>\n <ng-container *ngIf=\"this._gridView.total > 0\">\n <kendo-grid-checkbox-column #selectAllCheckbox headerClass=\"select-all-header\" *ngIf=\"checkBoxRequired\"\n [width]=\"checkBoxWidth\" [resizable]=\"checkBoxColumnResizable\" [columnMenu]=\"checkBoxColumnMenu\"\n class=\"checkbox-column\" [sticky]=\"isCheckBoxColumnSticky && !customExpandRowColumn\">\n <ng-template kendoGridHeaderTemplate *ngIf=\"isSelectAllCheckboxRequired\">\n <input id=\"selectAllCheckboxId\" type=\"checkbox\" kendoCheckBox kendoGridSelectAllCheckbox\n [state]=\"selectAllState\" (selectAllChange)=\"onSelectAllChange($event)\" />\n </ng-template>\n </kendo-grid-checkbox-column>\n\n <kendo-grid-column class=\"grid-column\" *ngFor=\"let item of columnData\" [field]=\"item.field\" [title]=\"item.title\"\n [width]=\"item.columnWidth\" [minResizableWidth]=\"minResizableWidth\" [sortable]=\"item.sortable\"\n [editor]=\"item.editor\" [class]=\"item.class\" [sticky]=\"item.columnSticky && !customExpandRowColumn\">\n\n <ng-template *ngIf=\"sortable\" kendoGridHeaderTemplate>\n {{item.title}}\n <span *ngIf=\"sort[0].field === item.field\">\n <span *ngIf=\"sort[0].dir === 'asc'\"></span>\n <span *ngIf=\"sort[0].dir === 'desc'\"></span>\n </span>\n </ng-template>\n\n <ng-template *ngIf=\"item.customColumn\" kendoGridCellTemplate let-dataItem>\n <ng-container [ngTemplateOutlet]=\"columnTemplateDict[item.type]\"\n [ngTemplateOutletContext]=\"{$implicit: dataItem}\"></ng-container>\n </ng-template>\n\n <ng-template *ngIf=\"item.custom\" kendoGridCellTemplate let-dataItem>\n <ng-container *ngTemplateOutlet=\"templateRef; context: {$implicit: dataItem}\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"item.impact\" kendoGridCellTemplate let-dataItem>\n <ng-container *ngTemplateOutlet=\"impactColumn; context: {$implicit: dataItem}\"></ng-container>\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column *ngIf=\"showDeleteColumn\" [width]=\"deleteColumnWidth\" class=\"delete-column\" title=\"Action\"\n [sticky]=\"isDeleteColumnSticky && !customExpandRowColumn\">\n <ng-template kendoGridCellTemplate let-dataItem let-rowIndex=\"rowIndex\">\n <lib-tooltip showOn=\"hover\" position=\"bottom\" class=\"remove-tooltip\">\n <lib-icon name=\"delete\" class=\"delete-icon\" (click)=\"onDelete(dataItem)\"></lib-icon>\n <div class=\"tooltip-content\">\n <lib-typography defaultText=\"Remove\"></lib-typography>\n </div>\n </lib-tooltip>\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column [width]=\"kebabColumnWidth\" class=\"kebab-column\" *ngIf=\"showKebab\" title=\"Actions\"\n [sticky]=\"isKebabColumnSticky && !customExpandRowColumn\">\n <ng-template kendoGridCellTemplate let-dataItem let-rowIndex=\"rowIndex\">\n <kendo-dropdownbutton *ngIf=\"!hideKebabRowIndex.includes(rowIndex)\" [svgIcon]=\"icon\" fillMode=\"none\"\n [data]=\"kebabList | kebabMenuFilter : dataItem\" class=\"kebab\" (itemClick)=\"onKebabClick($event, dataItem)\"\n [popupSettings]=\"{ align: 'right', animate: true, popupClass: 'kebab-list' }\">\n </kendo-dropdownbutton>\n </ng-template>\n </kendo-grid-column>\n </ng-container>\n\n <!-- Limitation: detail template and sticky columns do not co-exist-->\n <ng-template *ngIf=\"customExpandRowColumn\" kendoGridDetailTemplate let-dataItem>\n <ng-container *ngTemplateOutlet=\"detailTemplate; context: {$implicit: dataItem}\"></ng-container>\n </ng-template>\n\n <kendo-grid-column *ngIf=\"customExpandRowColumn\" [width]=\"expandRowColumnWidth\" class=\"grid-column expand-column\">\n <ng-template kendoGridCellTemplate let-dataItem let-rowIndex=\"rowIndex\">\n <div [ngClass]=\"expandColumnClass()\">\n <span *ngIf=\"selectedRows.includes(dataItem[gridRowSelectByValue]) && disablePreSelectedRows\"\n class=\"expand-column-text\">\n Already added\n </span>\n <kendo-button *ngIf=\"!expandRowIndex.includes(rowIndex)\" [svgIcon]=\"arrowDownIcon\"\n (click)=\"expandRow(rowIndex)\" fillMode=\"none\" class=\"arrow-btn\">\n </kendo-button>\n <kendo-button *ngIf=\"expandRowIndex.includes(rowIndex)\" [svgIcon]=\"arrowUpIcon\"\n (click)=\"collapseRow(rowIndex)\" fillMode=\"none\" class=\"arrow-btn\">\n </kendo-button>\n </div>\n </ng-template>\n </kendo-grid-column>\n\n <ng-template kendoPagerTemplate let-totalPages=\"totalPages\" let-currentPage=\"currentPage\">\n <div class=\"pagination-wrapper\" [ngClass]=\"allPagesSelected ? 'pagination-disabled' : ''\">\n <kendo-pager-prev-buttons></kendo-pager-prev-buttons>\n <kendo-pager-numeric-buttons [buttonCount]=\"_pageCount\"></kendo-pager-numeric-buttons>\n <kendo-pager-next-buttons></kendo-pager-next-buttons>\n <kendo-pager-info></kendo-pager-info>\n <kendo-pager-page-sizes [pageSizes]=\"sizes\"></kendo-pager-page-sizes>\n </div>\n </ng-template>\n\n </kendo-grid>\n</div>\n", styles: [".loading-container{height:100%;display:flex;justify-content:center;align-items:center}::ng-deep .k-grid tr{height:50px}::ng-deep .pagination-wrapper{display:flex;width:100%}::ng-deep .pagination-disabled{color:#6c6f72!important;pointer-events:none}::ng-deep .lib-grid-select-all-message-container{height:2rem;display:none;gap:.25rem;justify-content:center;align-items:center;background-color:#eceff5!important;font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important}::ng-deep .lib-grid-select-all-message-container .select-all-handler{cursor:pointer}::ng-deep .lib-grid-select-all-message-container .lib-grid-select-all-message{display:flex;gap:.25rem}::ng-deep .lib-grid-select-all-message-container .lib-grid-select-all-message .all-selected-icon{color:#198038}::ng-deep .disabled{cursor:none!important;pointer-events:none;opacity:.5}::ng-deep .lib-grid-select-all-message-show{display:flex!important}::ng-deep .k-grid .k-table-th,::ng-deep .k-grid .k-table-th.k-sorted{font-family:Inter,sans-serif!important;font-weight:600!important;font-style:normal!important;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important;background-color:#dee6f7!important;border-bottom-color:#ebecec!important;border-bottom-style:solid!important;border-bottom-width:2px!important;border-right:0px!important;border-left:0px!important;cursor:default!important}::ng-deep .k-grid .k-table-th .k-cell-inner,::ng-deep .k-grid .k-table-th.k-sorted .k-cell-inner{padding-right:.5rem;border-right:2px solid #C2D2F3!important}::ng-deep .k-grid .k-table-th .k-cell-inner .k-link,::ng-deep .k-grid .k-table-th.k-sorted .k-cell-inner .k-link{cursor:default!important}::ng-deep .k-grid .k-table-th:focus,::ng-deep .k-grid .k-table-th.k-sorted:focus{box-shadow:none!important}::ng-deep .k-grid .k-table-th.k-sorted{font-family:Inter,sans-serif!important;font-weight:600!important;font-style:normal!important;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important;background-color:#dee6f7!important}::ng-deep .k-grid tbody>tr:not(.k-detail-row):hover{background-color:#d0dcf5!important}::ng-deep .k-grid .k-table-row.k-selected>.k-table-td{background-color:#c9d7f4!important}::ng-deep .k-grid .k-table-row.k-disabled>.k-table-td{background-color:#fff!important}::ng-deep .k-grid .k-table-td{border-bottom-color:#ebecec!important;border-bottom-style:solid!important;border-bottom-width:1px!important;border-right:0px!important;border-left:0px!important}::ng-deep .k-grid td,::ng-deep .k-grid .k-table-td{white-space:nowrap!important}::ng-deep .k-table-alt-row{background-color:inherit!important}::ng-deep .k-grid .k-table-td{font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important}::ng-deep .k-grid-norecords{text-align:center!important;opacity:.4}::ng-deep .k-grid-norecords td{padding:14px 0 14px 24px!important}::ng-deep kendo-pager.k-pager-wrap.k-grid-pager{font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal!important;font-size:14px!important;line-height:20px!important;letter-spacing:.25px!important}::ng-deep .k-pager{border-style:none!important}::ng-deep .k-input-value-text{overflow:unset!important}::ng-deep .k-grid th.k-header{vertical-align:middle!important;padding-left:16px;padding-right:.5rem}::ng-deep .grid-column,::ng-deep .kebab-column,::ng-deep .delete-column{padding:0!important}::ng-deep .grid-column kendo-button,::ng-deep .kebab-column kendo-button,::ng-deep .delete-column kendo-button{align-items:center!important;justify-content:center!important;display:flex!important}::ng-deep .k-checkbox{width:20px!important;height:20px!important;border-radius:0!important}::ng-deep .k-grid .k-hierarchy-cell,::ng-deep .k-grid .k-hierarchy-col{width:0;display:none}::ng-deep .k-grid .k-detail-row .k-detail-cell{background-color:#f4f8fa!important;padding:16px!important}::ng-deep .delete-icon{color:#dc267f!important;padding-left:12px;cursor:pointer}::ng-deep .remove-tooltip kendo-tooltip.k-tooltip{background-color:#fff;color:#000}::ng-deep .hide-header .k-grid-header{border:0px!important}::ng-deep .k-grouping-header{background-color:#eceff5!important}::ng-deep .k-grid-toolbar{padding:4px 16px!important;height:54px;background-color:#eceff5!important}::ng-deep .k-grid td:not(.kebab-column):not(.expand-column){padding-left:16px!important;padding-right:16px!important}::ng-deep .view-header .k-table-thead tr{height:50px}::ng-deep .hide-header .k-table-thead tr{height:0px;padding:0;display:block}::ng-deep td.kebab-column{display:flex;justify-content:center;align-items:center;height:inherit}::ng-deep .k-grid .k-table-td>.k-checkbox{vertical-align:middle!important}::ng-deep .kebab .k-button,::ng-deep .expand-column .k-button{border:0px}::ng-deep .expand-column{pointer-events:all!important}::ng-deep .expand-column-text{margin-right:32px}::ng-deep .expand-row{display:flex;align-items:center;justify-content:flex-end}::ng-deep .column-cursor-pointer{cursor:pointer}::ng-deep .column-content-nowrap .k-grid .k-table-th,::ng-deep .column-content-nowrap .k-grid td,::ng-deep .column-content-nowrap .k-grid .k-table-td{white-space:nowrap;text-overflow:clip}::ng-deep kendo-grid.k-grid .k-table-alt-row .k-grid-content-sticky,::ng-deep kendo-grid.k-grid .k-grid-row-sticky.k-table-alt-row td,::ng-deep kendo-grid.k-grid .k-grid-row-sticky.k-table-alt-row .k-table-td,::ng-deep .k-master-row.k-table-alt-row .k-grid-content-sticky,::ng-deep .k-master-row.k-table-alt-row .k-grid-row-sticky{background-color:#fff}::ng-deep kendo-grid.k-grid .k-grid-content-sticky:hover,::ng-deep kendo-grid.k-grid .k-grid-content-sticky.k-hover,::ng-deep kendo-grid.k-grid .k-table-row:hover .k-grid-content-sticky{background-color:#d0dcf5!important}\n"] }]
|
|
458
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }], propDecorators: { columnTemplates: [{
|
|
459
|
+
type: ContentChildren,
|
|
460
|
+
args: [CustomColumnTemplate]
|
|
461
|
+
}], templateRef: [{
|
|
462
|
+
type: ContentChild,
|
|
463
|
+
args: ['multiColumnData']
|
|
464
|
+
}], detailTemplate: [{
|
|
465
|
+
type: ContentChild,
|
|
466
|
+
args: ['detailTemplate']
|
|
467
|
+
}], impactColumn: [{
|
|
468
|
+
type: ContentChild,
|
|
469
|
+
args: ['impactColumn']
|
|
470
|
+
}], grid: [{
|
|
471
|
+
type: ViewChild,
|
|
472
|
+
args: [GridComponent]
|
|
473
|
+
}], gridElement: [{
|
|
474
|
+
type: ViewChild,
|
|
475
|
+
args: ['gridElement']
|
|
476
|
+
}], selectAllCheckbox: [{
|
|
477
|
+
type: ViewChild,
|
|
478
|
+
args: ['selectAllCheckbox']
|
|
479
|
+
}], selectAllMessageElement: [{
|
|
480
|
+
type: ViewChild,
|
|
481
|
+
args: ['selectAllMessageElement']
|
|
482
|
+
}], skip: [{
|
|
483
|
+
type: Input
|
|
484
|
+
}], itemName: [{
|
|
485
|
+
type: Input
|
|
486
|
+
}], showSelectAllMessage: [{
|
|
487
|
+
type: Input
|
|
488
|
+
}], onSelectAllAcrossPages: [{
|
|
489
|
+
type: Output
|
|
490
|
+
}], columnData: [{
|
|
491
|
+
type: Input
|
|
492
|
+
}], pageSize: [{
|
|
493
|
+
type: Input
|
|
494
|
+
}], pageable: [{
|
|
495
|
+
type: Input
|
|
496
|
+
}], sortable: [{
|
|
497
|
+
type: Input
|
|
498
|
+
}], groupable: [{
|
|
499
|
+
type: Input
|
|
500
|
+
}], reorderable: [{
|
|
501
|
+
type: Input
|
|
502
|
+
}], resizable: [{
|
|
503
|
+
type: Input
|
|
504
|
+
}], checkBoxWidth: [{
|
|
505
|
+
type: Input
|
|
506
|
+
}], checkBoxColumnResizable: [{
|
|
507
|
+
type: Input
|
|
508
|
+
}], checkBoxColumnMenu: [{
|
|
509
|
+
type: Input
|
|
510
|
+
}], checkBoxColumnShowSelectedAll: [{
|
|
511
|
+
type: Input
|
|
512
|
+
}], checkBoxRequired: [{
|
|
513
|
+
type: Input
|
|
514
|
+
}], columnMenu: [{
|
|
515
|
+
type: Input
|
|
516
|
+
}], mode: [{
|
|
517
|
+
type: Input
|
|
518
|
+
}], checkboxOnly: [{
|
|
519
|
+
type: Input
|
|
520
|
+
}], dragColumns: [{
|
|
521
|
+
type: Input
|
|
522
|
+
}], navigable: [{
|
|
523
|
+
type: Input
|
|
524
|
+
}], gridHeight: [{
|
|
525
|
+
type: Input
|
|
526
|
+
}], gridRowSelectByValue: [{
|
|
527
|
+
type: Input
|
|
528
|
+
}], noRecordsContent: [{
|
|
529
|
+
type: Input
|
|
530
|
+
}], selectedRowData: [{
|
|
531
|
+
type: Output
|
|
532
|
+
}], showToolbar: [{
|
|
533
|
+
type: Input
|
|
534
|
+
}], kebabList: [{
|
|
535
|
+
type: Input
|
|
536
|
+
}], showKebab: [{
|
|
537
|
+
type: Input
|
|
538
|
+
}], rowDetails: [{
|
|
539
|
+
type: Output
|
|
540
|
+
}], kebabItemClick: [{
|
|
541
|
+
type: Output
|
|
542
|
+
}], icon: [{
|
|
543
|
+
type: Input
|
|
544
|
+
}], kebabColumnWidth: [{
|
|
545
|
+
type: Input
|
|
546
|
+
}], selectColumn: [{
|
|
547
|
+
type: Input
|
|
548
|
+
}], rowDataOfClickedCell: [{
|
|
549
|
+
type: Output
|
|
550
|
+
}], preSelected: [{
|
|
551
|
+
type: Input
|
|
552
|
+
}], gridView: [{
|
|
553
|
+
type: Input
|
|
554
|
+
}], onPageChange: [{
|
|
555
|
+
type: Output
|
|
556
|
+
}], ignoreColumnCellClick: [{
|
|
557
|
+
type: Input
|
|
558
|
+
}], allowColumnClick: [{
|
|
559
|
+
type: Input
|
|
560
|
+
}], sort: [{
|
|
561
|
+
type: Input
|
|
562
|
+
}], hasApiSorting: [{
|
|
563
|
+
type: Input
|
|
564
|
+
}], sortDirection: [{
|
|
565
|
+
type: Output
|
|
566
|
+
}], expandRowIndex: [{
|
|
567
|
+
type: Input
|
|
568
|
+
}], customExpandRowColumn: [{
|
|
569
|
+
type: Input
|
|
570
|
+
}], deleteColumnWidth: [{
|
|
571
|
+
type: Input
|
|
572
|
+
}], deletedRowData: [{
|
|
573
|
+
type: Output
|
|
574
|
+
}], sizes: [{
|
|
575
|
+
type: Input
|
|
576
|
+
}], pageCount: [{
|
|
577
|
+
type: Input
|
|
578
|
+
}], showDeleteColumn: [{
|
|
579
|
+
type: Input
|
|
580
|
+
}], hideKebabRowIndex: [{
|
|
581
|
+
type: Input
|
|
582
|
+
}], loading: [{
|
|
583
|
+
type: Input
|
|
584
|
+
}], loaderType: [{
|
|
585
|
+
type: Input
|
|
586
|
+
}], loaderSize: [{
|
|
587
|
+
type: Input
|
|
588
|
+
}], loaderTheme: [{
|
|
589
|
+
type: Input
|
|
590
|
+
}], disablePreSelectedRows: [{
|
|
591
|
+
type: Input
|
|
592
|
+
}], updatedData: [{
|
|
593
|
+
type: Output
|
|
594
|
+
}], allowEditingCell: [{
|
|
595
|
+
type: Input
|
|
596
|
+
}], columnContentNoWrap: [{
|
|
597
|
+
type: Input
|
|
598
|
+
}], infiniteScrollLoader: [{
|
|
599
|
+
type: Input
|
|
600
|
+
}], onscrollBottom: [{
|
|
601
|
+
type: Output
|
|
602
|
+
}], isInfiniteScrollGrid: [{
|
|
603
|
+
type: Input
|
|
604
|
+
}], gridLoading: [{
|
|
605
|
+
type: Input
|
|
606
|
+
}], minResizableWidth: [{
|
|
607
|
+
type: Input
|
|
608
|
+
}], showRefresh: [{
|
|
609
|
+
type: Input
|
|
610
|
+
}], isKebabColumnSticky: [{
|
|
611
|
+
type: Input
|
|
612
|
+
}], isCheckBoxColumnSticky: [{
|
|
613
|
+
type: Input
|
|
614
|
+
}], isDeleteColumnSticky: [{
|
|
615
|
+
type: Input
|
|
616
|
+
}], emitRefreshEvt: [{
|
|
617
|
+
type: Output
|
|
618
|
+
}], isSelectAllCheckboxRequired: [{
|
|
619
|
+
type: Input
|
|
620
|
+
}] } });
|
|
621
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL21vbGVjdWxlcy9ncmlkLXBhZ2luYXRpb24vZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL21vbGVjdWxlcy9ncmlkLXBhZ2luYXRpb24vZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBc0QsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFxQyxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdk8sT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RELE9BQU8sRUFBa0IsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRixPQUFPLEVBQWtDLGFBQWEsRUFBNkcsTUFBTSw4QkFBOEIsQ0FBQztBQUN4TSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBVyxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBTXRHLE1BQU0sT0FBTyxvQkFBb0I7SUFFL0IsWUFBbUIsUUFBZ0M7UUFBaEMsYUFBUSxHQUFSLFFBQVEsQ0FBd0I7UUFEMUMsU0FBSSxHQUFXLEVBQUUsQ0FBQztJQUM0QixDQUFDOytHQUY3QyxvQkFBb0I7bUdBQXBCLG9CQUFvQjs7NEZBQXBCLG9CQUFvQjtr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QVc7c0JBQW5CLEtBQUs7Z0JBT0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0UsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0ksY0FBYztzQkFBdkIsTUFBTTtnQkFDRSxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDSSxjQUFjO3NCQUF2QixNQUFNO2dCQUNFLDJCQUEyQjtzQkFBbkMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgQ29udGVudENoaWxkcmVuLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBRdWVyeUxpc3QsIFJlbmRlcmVyMiwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEtleXMgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1jb21tb24nO1xuaW1wb3J0IHsgU29ydERlc2NyaXB0b3IsIG9yZGVyQnkgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tZGF0YS1xdWVyeSc7XG5pbXBvcnQgeyBMb2FkZXJTaXplLCBMb2FkZXJUaGVtZUNvbG9yLCBMb2FkZXJUeXBlIH0gZnJvbSAnLi4vLi4vYXRvbXMvbG9hZGVyL2xvYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2VsbENsaWNrRXZlbnQsIENlbGxDbG9zZUV2ZW50LCBHcmlkQ29tcG9uZW50LCBHcmlkRGF0YVJlc3VsdCwgUGFnZUNoYW5nZUV2ZW50LCBSb3dDbGFzc0FyZ3MsIFNlbGVjdEFsbENoZWNrYm94U3RhdGUsIFNlbGVjdGFibGVNb2RlLCBTZWxlY3RhYmxlU2V0dGluZ3MgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1ncmlkJztcbmltcG9ydCB7IGNoZXZyb25Eb3duSWNvbiwgY2hldnJvblVwSWNvbiwgbW9yZVZlcnRpY2FsSWNvbiwgU1ZHSWNvbiB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1zdmctaWNvbnMnO1xuXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW3R5cGVdJ1xufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21Db2x1bW5UZW1wbGF0ZSB7XG4gIEBJbnB1dCgpIHR5cGU6IHN0cmluZyA9IFwiXCI7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8Q29tcG9uZW50PikgeyB9XG59XG5cbmNvbnN0IGNyZWF0ZUZvcm1Hcm91cCA9IChkYXRhSXRlbTogYW55KTogRm9ybUdyb3VwID0+IHtcbiAgY29uc3QgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICBmb3IgKGxldCBkYXRhIG9mIE9iamVjdC5rZXlzKGRhdGFJdGVtKSkge1xuICAgIGZvcm0uYWRkQ29udHJvbChkYXRhLCBuZXcgRm9ybUNvbnRyb2woZGF0YUl0ZW1bZGF0YV0sIFZhbGlkYXRvcnMucmVxdWlyZWQpKVxuICB9XG4gIHJldHVybiBmb3JtXG59O1xuXG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWdyaWQtcGFnaW5hdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmlkLXBhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ncmlkLXBhZ2luYXRpb24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBHcmlkUGFnaW5hdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihDdXN0b21Db2x1bW5UZW1wbGF0ZSkgY29sdW1uVGVtcGxhdGVzITogUXVlcnlMaXN0PEN1c3RvbUNvbHVtblRlbXBsYXRlPiB8IFtdO1xuICBAQ29udGVudENoaWxkKCdtdWx0aUNvbHVtbkRhdGEnKSB0ZW1wbGF0ZVJlZiE6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsO1xuICBAQ29udGVudENoaWxkKCdkZXRhaWxUZW1wbGF0ZScpIGRldGFpbFRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PiB8IG51bGw7XG4gIEBDb250ZW50Q2hpbGQoJ2ltcGFjdENvbHVtbicpIGltcGFjdENvbHVtbiE6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsO1xuICBAVmlld0NoaWxkKEdyaWRDb21wb25lbnQpIGdyaWQhOiBHcmlkQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdncmlkRWxlbWVudCcpIGdyaWRFbGVtZW50ITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc2VsZWN0QWxsQ2hlY2tib3gnKSBzZWxlY3RBbGxDaGVja2JveCE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdEFsbE1lc3NhZ2VFbGVtZW50Jykgc2VsZWN0QWxsTWVzc2FnZUVsZW1lbnQhOiBFbGVtZW50UmVmO1xuICBASW5wdXQoKSBza2lwOiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBpdGVtTmFtZTogc3RyaW5nID0gJ0l0ZW1zJztcbiAgQElucHV0KCkgc2hvd1NlbGVjdEFsbE1lc3NhZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYWxsUGFnZXNTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcmV2aW91c1NlbGVjdEFsbFN0YXRlOiBTZWxlY3RBbGxDaGVja2JveFN0YXRlID0gJ3VuY2hlY2tlZCc7XG4gIEBPdXRwdXQoKSBvblNlbGVjdEFsbEFjcm9zc1BhZ2VzID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBASW5wdXQoKSBjb2x1bW5EYXRhOiBhbnkgPSBbXTtcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIHBhZ2VhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNvcnRhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGdyb3VwYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSByZW9yZGVyYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSByZXNpemFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgY2hlY2tCb3hXaWR0aDogbnVtYmVyID0gNDU7XG4gIEBJbnB1dCgpIGNoZWNrQm94Q29sdW1uUmVzaXphYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNoZWNrQm94Q29sdW1uTWVudTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBjaGVja0JveENvbHVtblNob3dTZWxlY3RlZEFsbDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGNoZWNrQm94UmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgY29sdW1uTWVudTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBtb2RlOiBTZWxlY3RhYmxlTW9kZSB8IHVuZGVmaW5lZCA9ICdtdWx0aXBsZSc7XG4gIEBJbnB1dCgpIGNoZWNrYm94T25seSA9IHRydWU7XG4gIEBJbnB1dCgpIGRyYWdDb2x1bW5zID0gZmFsc2U7XG4gIEBJbnB1dCgpIG5hdmlnYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGdyaWRIZWlnaHQhOiBhbnk7XG4gIEBJbnB1dCgpIGdyaWRSb3dTZWxlY3RCeVZhbHVlOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgbm9SZWNvcmRzQ29udGVudDogc3RyaW5nID0gJ05vIHJlY29yZHMgYXJlIGF2YWlsYWJsZSB5ZXQuJztcbiAgQE91dHB1dCgpIHNlbGVjdGVkUm93RGF0YSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG4gIEBJbnB1dCgpIHNob3dUb29sYmFyOiBib29sZWFuID0gZmFsc2U7XG4gIGV4dHJhY3REYXRhSXRlbXM6IGFueTtcbiAgc2VsZWN0YWJsZVNldHRpbmdzOiBTZWxlY3RhYmxlU2V0dGluZ3MgPSB7fTtcbiAgQElucHV0KCkga2ViYWJMaXN0OiBhbnkgPSBbXTtcbiAgQElucHV0KCkgc2hvd0tlYmFiOiBib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSByb3dEZXRhaWxzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcbiAgQE91dHB1dCgpIGtlYmFiSXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgpIGljb246IFNWR0ljb24gPSBtb3JlVmVydGljYWxJY29uO1xuICBASW5wdXQoKSBrZWJhYkNvbHVtbldpZHRoOiBudW1iZXIgPSA5MDtcbiAgZGF0YTogYW55ID0gW107XG4gIEBJbnB1dCgpIHNlbGVjdENvbHVtbiA9ICcnO1xuICBAT3V0cHV0KCkgcm93RGF0YU9mQ2xpY2tlZENlbGwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgX3ByZVNlbGVjdGVkOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBzZXQgcHJlU2VsZWN0ZWQodmFsdWU6IGFueVtdKSB7XG4gICAgdGhpcy5fcHJlU2VsZWN0ZWQgPSB2YWx1ZTtcbiAgICB0aGlzLmluaXRHcmlkKCk7XG4gIH1cbiAgX2dyaWRWaWV3OiBHcmlkRGF0YVJlc3VsdCA9IHsgZGF0YTogW10sIHRvdGFsOiAwIH07XG4gIEBJbnB1dCgpIHNldCBncmlkVmlldyh2YWx1ZTogR3JpZERhdGFSZXN1bHQpIHtcbiAgICB0aGlzLl9ncmlkVmlldyA9IHZhbHVlO1xuICB9XG4gIHByZVNlbGVjdGVkUmVjb3JkczogYW55W10gPSBbXTtcbiAgQE91dHB1dCgpIG9uUGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBASW5wdXQoKSBpZ25vcmVDb2x1bW5DZWxsQ2xpY2s6IG51bWJlcltdID0gW107XG4gIEBJbnB1dCgpIGFsbG93Q29sdW1uQ2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc29ydDogU29ydERlc2NyaXB0b3JbXSA9IFtcbiAgICB7XG4gICAgICBmaWVsZDogJycsXG4gICAgICBkaXI6IHVuZGVmaW5lZCxcbiAgICB9LFxuICBdO1xuICBASW5wdXQoKSBoYXNBcGlTb3J0aW5nID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBzb3J0RGlyZWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHB1YmxpYyBhcnJvd0Rvd25JY29uOiBTVkdJY29uID0gY2hldnJvbkRvd25JY29uO1xuICBwdWJsaWMgYXJyb3dVcEljb246IFNWR0ljb24gPSBjaGV2cm9uVXBJY29uO1xuICBASW5wdXQoKSBleHBhbmRSb3dJbmRleDogbnVtYmVyW10gPSBbXTtcbiAgQElucHV0KCkgY3VzdG9tRXhwYW5kUm93Q29sdW1uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRlbGV0ZUNvbHVtbldpZHRoOiBudW1iZXIgPSA0MjtcbiAgZXhwYW5kUm93Q29sdW1uV2lkdGg6IG51bWJlciA9IDU2O1xuICBAT3V0cHV0KCkgZGVsZXRlZFJvd0RhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCkgc2l6ZXM6IGFueVtdID0gW107XG4gIF9wYWdlQ291bnQ6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIHNldCBwYWdlQ291bnQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BhZ2VDb3VudCA9IHZhbHVlID4gMTAgPyAxMCA6IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpIHNob3dEZWxldGVDb2x1bW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaGlkZUtlYmFiUm93SW5kZXg6IG51bWJlcltdID0gW107XG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgbG9hZGVyVHlwZTogTG9hZGVyVHlwZSA9IExvYWRlclR5cGUucHVsc2luZztcbiAgQElucHV0KCkgbG9hZGVyU2l6ZTogTG9hZGVyU2l6ZSA9IExvYWRlclNpemUubWVkaXVtO1xuICBASW5wdXQoKSBsb2FkZXJUaGVtZTogTG9hZGVyVGhlbWVDb2xvciA9IExvYWRlclRoZW1lQ29sb3IucHJpbWFyeTtcbiAgaW5pdGlhbEdyaWRIZWlnaHQ6IGFueTtcbiAgZ3JpZEJvdHRvbVNwYWNlID0gMjQ7XG4gIHJlc2l6ZUhlaWdodDogYW55ID0gMDtcbiAgc2VsZWN0QWxsU3RhdGU6IFNlbGVjdEFsbENoZWNrYm94U3RhdGUgPSAndW5jaGVja2VkJztcbiAgc2VsZWN0ZWRJdGVtQ291bnQ6IG51bWJlciA9IDA7XG4gIHNlbGVjdGVkUm93czogYW55W10gPSBbXTtcbiAgQElucHV0KCkgZGlzYWJsZVByZVNlbGVjdGVkUm93cyA9IGZhbHNlO1xuICBwdWJsaWMgZm9ybUdyb3VwITogRm9ybUdyb3VwIHwgYW55O1xuICBAT3V0cHV0KCkgdXBkYXRlZERhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCkgYWxsb3dFZGl0aW5nQ2VsbCA9IGZhbHNlO1xuICBASW5wdXQoKSBjb2x1bW5Db250ZW50Tm9XcmFwID0gZmFsc2U7XG4gIEBJbnB1dCgpIGluZmluaXRlU2Nyb2xsTG9hZGVyID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBvbnNjcm9sbEJvdHRvbSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBASW5wdXQoKSBpc0luZmluaXRlU2Nyb2xsR3JpZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBncmlkTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RBbGxNc2dQYXJlbnRFbGVtZW50OiBhbnk7XG4gIEBJbnB1dCgpIG1pblJlc2l6YWJsZVdpZHRoID0gNTA7XG4gIEBJbnB1dCgpIHNob3dSZWZyZXNoID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzS2ViYWJDb2x1bW5TdGlja3kgPSBmYWxzZTtcbiAgQElucHV0KCkgaXNDaGVja0JveENvbHVtblN0aWNreSA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0RlbGV0ZUNvbHVtblN0aWNreSA9IGZhbHNlO1xuICBAT3V0cHV0KCkgZW1pdFJlZnJlc2hFdnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBJbnB1dCgpIGlzU2VsZWN0QWxsQ2hlY2tib3hSZXF1aXJlZCA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyXG4gICkge1xuICAgIHRoaXMuc2V0U2VsZWN0YWJsZVNldHRpbmdzKCk7XG4gIH1cblxuICBjb2x1bW5UZW1wbGF0ZURpY3Q6IGFueSA9IHt9O1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29sdW1uRGF0YS5mb3JFYWNoKChjb2x1bW46IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29sdW1uLnNvcnRhYmxlID0gY29sdW1uLnNvcnRhYmxlID09IHVuZGVmaW5lZCA/IHRydWUgOiBjb2x1bW4uc29ydGFibGU7XG4gICAgICBpZiAoIXRoaXMuaWdub3JlQ29sdW1uQ2VsbENsaWNrLmluY2x1ZGVzKGluZGV4KSkge1xuICAgICAgICBjb2x1bW4uY2xhc3MgPSAnY29sdW1uLWN1cnNvci1wb2ludGVyJztcbiAgICAgIH1cbiAgICB9KVxuICAgIGlmICghdGhpcy5oYXNBcGlTb3J0aW5nKSB7XG4gICAgICB0aGlzLmxvYWRHcmlkRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIHNjcm9sbEJvdHRvbSgpIHtcbiAgICB0aGlzLm9uc2Nyb2xsQm90dG9tLmVtaXQoKTtcbiAgfVxuXG4gIGdldFBvc2l0aW9uKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuc2hvd1Rvb2xiYXIgJiYgdGhpcy5pbmZpbml0ZVNjcm9sbExvYWRlcikge1xuICAgICAgcmV0dXJuICdib3RoJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2hvd1Rvb2xiYXIpIHtcbiAgICAgIHJldHVybiAndG9wJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5maW5pdGVTY3JvbGxMb2FkZXIpIHtcbiAgICAgIHJldHVybiAnYm90dG9tJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucGFnZWFibGUpIHtcbiAgICAgIHRoaXMucGFnZVNpemUgPSB0aGlzLl9ncmlkVmlldy5kYXRhPy5sZW5ndGg7XG4gICAgfVxuICAgIHRoaXMuY29sdW1uVGVtcGxhdGVzLmZvckVhY2goeCA9PiB0aGlzLmNvbHVtblRlbXBsYXRlRGljdFt4LnR5cGVdID0geC50ZW1wbGF0ZSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5pbml0R3JpZCgpO1xuICB9XG5cbiAgaW5pdEdyaWQoKSB7XG4gICAgaWYgKHRoaXMuY3VzdG9tRXhwYW5kUm93Q29sdW1uKSB7XG4gICAgICB0aGlzLmV4cGFuZFJvd0luZGV4LmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgIHRoaXMuZ3JpZC5leHBhbmRSb3coaWQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gdGhpcy5fcHJlU2VsZWN0ZWQ7XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm93cz8ubGVuZ3RoID09IHRoaXMuX2dyaWRWaWV3LnRvdGFsKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsU3RhdGUgPSAnY2hlY2tlZCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdEFsbFN0YXRlID0gJ2luZGV0ZXJtaW5hdGUnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbFN0YXRlID0gJ3VuY2hlY2tlZCc7XG4gICAgfVxuICAgIGlmICh0aGlzLmdyaWRFbGVtZW50KSB7XG4gICAgICB0aGlzLmluaXRpYWxHcmlkSGVpZ2h0ID1cbiAgICAgICAgdGhpcy5ncmlkRWxlbWVudD8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0SGVpZ2h0ICsgdGhpcy5ncmlkQm90dG9tU3BhY2U7XG4gICAgICAvLyB0aGlzLmdldEdyaWRIZWlnaHQoKTtcblxuICAgICAgY29uc3QgZ3JpZENvbnRhaW5lciA9IHRoaXMuZ3JpZEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQ/LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2stZ3JpZC1jb250YWluZXInKVswXTtcbiAgICAgIGlmIChncmlkQ29udGFpbmVyICYmIHRoaXMuc2VsZWN0QWxsTWVzc2FnZUVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUoXG4gICAgICAgICAgZ3JpZENvbnRhaW5lci5wYXJlbnRFbGVtZW50LFxuICAgICAgICAgIHRoaXMuc2VsZWN0QWxsTWVzc2FnZUVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgZ3JpZENvbnRhaW5lcixcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBzZWxlY3RBbGxDaGVja2JveCA9IHRoaXMuZ3JpZEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoJy5zZWxlY3QtYWxsLWhlYWRlciBpbnB1dCcpO1xuICAgICAgaWYgKHNlbGVjdEFsbENoZWNrYm94KSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkoc2VsZWN0QWxsQ2hlY2tib3gsICdkaXNhYmxlZCcsIHRoaXMuY2FuRW5hYmxlU2VsZWN0QWxsKCkpO1xuICAgICAgfVxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0QWNyb3NzUGFnZXMoaXNTZWxlY3RlZDogYm9vbGVhbikge1xuICAgIHRoaXMudHJpZ2dlclNlbGVjdEFsbFBhZ2VzRXZlbnQoaXNTZWxlY3RlZCk7XG4gICAgaWYgKCFpc1NlbGVjdGVkKSB7XG4gICAgICB0aGlzLm9uU2VsZWN0QWxsQ2hhbmdlKHRoaXMucHJldmlvdXNTZWxlY3RBbGxTdGF0ZSlcbiAgICB9XG4gIH1cblxuICB0cmlnZ2VyU2VsZWN0QWxsUGFnZXNFdmVudChpc1NlbGVjdGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5hbGxQYWdlc1NlbGVjdGVkID0gaXNTZWxlY3RlZDtcbiAgICB0aGlzLm9uU2VsZWN0QWxsQWNyb3NzUGFnZXMuZW1pdChpc1NlbGVjdGVkKTtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbUNvdW50ID0gaXNTZWxlY3RlZCA/IHRoaXMuX2dyaWRWaWV3LnRvdGFsIDogMDtcbiAgICBjb25zb2xlLmxvZygndHJpZ2dlclNlbGVjdEFsbFBhZ2VzRXZlbnQgOiBpc1NlbGVjdGVkJywgaXNTZWxlY3RlZCk7XG4gIH1cblxuICBhZGRTZWxlY3RBbGxNZXNzYWdlKHNlbGVjdEFsbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2VsZWN0QWxsTXNnUGFyZW50RWxlbWVudCA9IHRoaXMuc2VsZWN0QWxsTWVzc2FnZUVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ7XG4gICAgaWYgKHRoaXMuc2hvd1NlbGVjdEFsbE1lc3NhZ2UgJiYgdGhpcy5zZWxlY3RBbGxNc2dQYXJlbnRFbGVtZW50ICYmICh0aGlzLl9wYWdlQ291bnQgPiAxIHx8IHRoaXMuaXNJbmZpbml0ZVNjcm9sbEdyaWQpKSB7XG4gICAgICBjb25zdCBzZWxlY3RBbGxNc2dFbGVtZW50ID0gdGhpcy5zZWxlY3RBbGxNZXNzYWdlRWxlbWVudD8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcignLmxpYi1ncmlkLXNlbGVjdC1hbGwtbWVzc2FnZS1jb250YWluZXInKTtcbiAgICAgIGlmIChzZWxlY3RBbGwpIHtcbiAgICAgICAgY29uc3QgYmVmb3JlSGVpZ2h0ID0gdGhpcy5zZWxlY3RBbGxNc2dQYXJlbnRFbGVtZW50Lm9mZnNldEhlaWdodDtcblxuICAgICAgICBzZWxlY3RBbGxNc2dFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdsaWItZ3JpZC1zZWxlY3QtYWxsLW1lc3NhZ2Utc2hvdycpO1xuXG4gICAgICAgIGNvbnN0IGFmdGVySGVpZ2h0ID0gdGhpcy5zZWxlY3RBbGxNc2dQYXJlbnRFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxNc2dQYXJlbnRFbGVtZW50LnN0eWxlLmhlaWdodCA9ICh0aGlzLnNlbGVjdEFsbE1zZ1BhcmVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gKGFmdGVySGVpZ2h0IC0gYmVmb3JlSGVpZ2h0KSkgKyAncHgnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZWN0QWxsTXNnRWxlbWVudD8uY2xhc3NMaXN0LnJlbW92ZSgnbGliLWdyaWQtc2VsZWN0LWFsbC1tZXNzYWdlLXNob3cnKTtcbiAgICAgICAgaWYgKHRoaXMuYWxsUGFnZXNTZWxlY3RlZCkge1xuICAgICAgICAgIHRoaXMudHJpZ2dlclNlbGVjdEFsbFBhZ2VzRXZlbnQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcGFnZUNoYW5nZShldmVudDogUGFnZUNoYW5nZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0QWxsTXNnUGFyZW50RWxlbWVudCkge1xuICAgICAgdGhpcy5zZWxlY3RBbGxNc2dQYXJlbnRFbGVtZW50LnN0eWxlLmhlaWdodCA9ICcnXG4gICAgfVxuICAgIHRoaXMub25QYWdlQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgc2V0U2VsZWN0YWJsZVNldHRpbmdzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNoZWNrYm94T25seSB8fCB0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICB0aGlzLmRyYWdDb2x1bW5zID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RhYmxlU2V0dGluZ3MgPSB7XG4gICAgICBjaGVja2JveE9ubHk6IHRoaXMuY2hlY2tib3hPbmx5LFxuICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgZHJhZzogdGhpcy5kcmFnQ29sdW1ucyxcbiAgICB9O1xuICB9XG5cbiAgLy8gV2UgY2FuIGV4dHJhY3QgZGF0YSBvdXQgb2Ygcm93IG51bWJlciB1c2luZyBiZWxvdyBmdW5jdGlvblxuICAvKiBleHRyYWN0KCkge1xuICAgIHRoaXMuZXh0cmFjdERhdGFJdGVtcyA9IHRoaXMubXlTZWxlY3Rpb24ubWFwKGlkeCA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5ncmlkRGF0YS5maW5kKChkYXRhOiB7IFByb2R1Y3RJRDogbnVtYmVyOyB9KSA9PiBkYXRhLlByb2R1Y3RJRCA9PT0gaWR4KTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLmV4dHJhY3REYXRhSXRlbXMpXG4gICAgdGhpcy5zZWxlY3RlZFJvd0RhdGEuZW1pdCh0aGlzLmV4dHJhY3REYXRhSXRlbXMpO1xuICB9ICovXG5cbiAgc2VsZWN0ZWRLZXlzQ2hhbmdlKHJvd3M6IG51bWJlcltdKSB7XG4gICAgbGV0IHNlbGVjdGVkUm93RGF0YTogYW55ID0gW107XG4gICAgbGV0IHNlbGVjdGVkUm93c0NvdW50ID0gMDtcblxuICAgIGlmIChyb3dzPy5sZW5ndGggPiAwKSB7XG4gICAgICBzZWxlY3RlZFJvd3NDb3VudCA9IHJvd3M/Lmxlbmd0aDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRSb3dzPy5sZW5ndGggPiAwICYmIHRoaXMuZGlzYWJsZVByZVNlbGVjdGVkUm93cykge1xuICAgICAgc2VsZWN0ZWRSb3dzQ291bnQgPSB0aGlzLnNlbGVjdGVkUm93cz8ubGVuZ3RoO1xuICAgICAgcm93cyA9IHRoaXMuc2VsZWN0ZWRSb3dzO1xuICAgIH1cbiAgICB0aGlzLnByZXZpb3VzU2VsZWN0QWxsU3RhdGUgPSB0aGlzLnNlbGVjdEFsbFN0YXRlO1xuICAgIHRoaXMuc2VsZWN0QWxsU3RhdGUgPSB0aGlzLmdldFNlbGVjdEFsbFN0YXRlKHNlbGVjdGVkUm93c0NvdW50KTtcbiAgICBpZiAodGhpcy5zZWxlY3RBbGxTdGF0ZSA9PT0gJ3VuY2hlY2tlZCcgfHwgdGhpcy5zZWxlY3RBbGxTdGF0ZSA9PT0gJ2luZGV0ZXJtaW5hdGUnKSB7XG4gICAgICB0aGlzLmFkZFNlbGVjdEFsbE1lc3NhZ2UoZmFsc2UpO1xuICAgIH1cblxuICAgIHNlbGVjdGVkUm93RGF0YSA9IHJvd3MubWFwKHJvd0RhdGEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuX2dyaWRWaWV3LmRhdGEuZmluZCgoZGF0YSkgPT4gZGF0YVt0aGlzLmdyaWRSb3dTZWxlY3RCeVZhbHVlXSA9PT0gcm93RGF0YSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNlbGVjdGVkUm93RGF0YS5lbWl0KHNlbGVjdGVkUm93RGF0YSk7XG4gIH1cblxuICBnZXRTZWxlY3RBbGxTdGF0ZShzZWxlY3RlZFJvd3NDb3VudDogbnVtYmVyKTogYW55IHtcbiAgICBpZiAoc2VsZWN0ZWRSb3dzQ291bnQgPT0gdGhpcy5fZ3JpZFZpZXcudG90YWwpIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsU3RhdGUgPSAnY2hlY2tlZCc7XG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZFJvd3NDb3VudCA9PSAwKSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbFN0YXRlID0gJ3VuY2hlY2tlZCc7XG4gICAgICB0aGlzLmFkZFNlbGVjdEFsbE1lc3NhZ2UoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbFN0YXRlID0gJ2luZGV0ZXJtaW5hdGUnO1xuICAgICAgdGhpcy5hZGRTZWxlY3RBbGxNZXNzYWdlKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBvbktlYmFiQ2xpY2soaXRlbTogYW55LCByb3dEZXRhaWxzOiBhbnkpIHtcbiAgICB0aGlzLmtlYmFiSXRlbUNsaWNrLmVtaXQoeyBhY3Rpb246IGl0ZW0sIHJvd0RldGFpbHMgfSk7XG4gIH1cblxuICBvbkRldGFpbEV4cGFuZChyb3dEYXRhOiBhbnkpIHtcbiAgICB0aGlzLnJvd0RldGFpbHMuZW1pdChyb3dEYXRhLmRhdGFJdGVtKTtcbiAgfVxuXG4gIGNlbGxDbGlja0hhbmRsZXIoYXJnczogQ2VsbENsaWNrRXZlbnQpIHtcbiAgICBpZiAodGhpcy5hbGxvd0NvbHVtbkNsaWNrKSB7XG4gICAgICBpZiAodGhpcy5pZ25vcmVDb2x1bW5DZWxsQ2xpY2suaW5jbHVkZXMoYXJncy5jb2x1bW5JbmRleCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5yb3dEYXRhT2ZDbGlja2VkQ2VsbC5lbWl0KHsgZGF0YUl0ZW06IGFyZ3MuZGF0YUl0ZW0sIGNvbHVtbkluZGV4OiBhcmdzLmNvbHVtbkluZGV4IH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5hbGxvd0VkaXRpbmdDZWxsKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cCA9IGNyZWF0ZUZvcm1Hcm91cChhcmdzLmRhdGFJdGVtKTtcbiAgICAgIGFyZ3Muc2VuZGVyLmVkaXRDZWxsKGFyZ3Mucm93SW5kZXgsIGFyZ3MuY29sdW1uSW5kZXgsIHRoaXMuZm9ybUdyb3VwKTtcbiAgICB9XG4gIH1cblxuICBzb3J0Q2hhbmdlKHNvcnQ6IFNvcnREZXNjcmlwdG9yW10pOiB2b2lkIHtcbiAgICB0aGlzLnNvcnQgPSBzb3J0O1xuICAgIGlmICghdGhpcy5oYXNBcGlTb3J0aW5nKSB7XG4gICAgICB0aGlzLmxvYWRHcmlkRGF0YSgpO1xuICAgIH1cbiAgICB0aGlzLnNvcnREaXJlY3Rpb24uZW1pdCh0aGlzLnNvcnQpO1xuICB9XG5cbiAgbG9hZEdyaWREYXRhKCk6IHZvaWQge1xuICAgIHRoaXMuX2dyaWRWaWV3ID0ge1xuICAgICAgZGF0YTogb3JkZXJCeSh0aGlzLl9ncmlkVmlldz8uZGF0YSwgdGhpcy5zb3J0KSxcbiAgICAgIHRvdGFsOiB0aGlzLl9ncmlkVmlldz8udG90YWwsXG4gICAgfTtcbiAgfVxuXG4gIGV4cGFuZFJvdyhpZDogbnVtYmVyKSB7XG4gICAgdGhpcy5ncmlkLmV4cGFuZFJvdyhpZCk7XG4gICAgdGhpcy5leHBhbmRSb3dJbmRleC5wdXNoKGlkKTtcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgIHRoaXMuZ2V0R3JpZEhlaWdodCgpO1xuICAgIC8vIH0sIDApO1xuICB9XG5cbiAgY29sbGFwc2VSb3coaWQ6IG51bWJlcikge1xuICAgIHRoaXMuZ3JpZC5jb2xsYXBzZVJvdyhpZCk7XG4gICAgdGhpcy5leHBhbmRSb3dJbmRleC5zcGxpY2UodGhpcy5leHBhbmRSb3dJbmRleC5pbmRleE9mKGlkKSwgMSk7XG4gICAgLy8gaWYgKHRoaXMuZXhwYW5kUm93SW5kZXg/Lmxlbmd0aCA9PSAwKSB7XG4gICAgLy8gICBjb25zdCB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gICAgLy8gICBjb25zdCB2aWV3cG9ydDogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpYi1ncmlkJyk7XG4gICAgLy8gICBjb25zdCBncmlkT2Zmc2V0ID0gdmlld3BvcnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgd2luZG93LnNjcm9sbFk7XG4gICAgLy8gICBpZiAod2luZG93SGVpZ2h0ID4gZ3JpZE9mZnNldCArIHRoaXMuaW5pdGlhbEdyaWRIZWlnaHQpIHtcbiAgICAvLyAgICAgdGhpcy5oZWlnaHQgPSAnMTAwJSc7XG4gICAgLy8gICAgIHJldHVybjtcbiAgICAvLyAgIH1cbiAgICAvLyAgIC8vIHRoaXMuZ2V0R3JpZEhlaWdodCgpO1xuICAgIC8vIH1cbiAgfVxuXG4gIG9uRGVsZXRlKHJvd0RldGFpbHM6IGFueSkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5nZXRIZWFkZXJIZWlnaHQoKTtcbiAgICB9LCAxMDAwKTtcbiAgICB0aGlzLmRlbGV0ZWRSb3dEYXRhLmVtaXQocm93RGV0YWlscyk7XG4gIH1cblxuICBnZXRIZWFkZXJIZWlnaHQoKSB7XG4gICAgaWYgKHRoaXMuX2dyaWRWaWV3Py5kYXRhPy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnaGlkZS1oZWFkZXInO1xuICAgIH1cbiAgICByZXR1cm4gJ3ZpZXctaGVhZGVyJztcbiAgfVxuXG4gIC8qXG4gICAqIFRoaXMgbG9naWMgb2YgZHluYW1pY2FsbHkgY2FsY3VsYXRpbmcgdGhlIGhlaWdodCBvZiBncmlkIG5lZWQgZnVydGhlciBicmFpbnN0b3JtaW5nIGhlbmNlIGNvbW1lbnRlZCBmb3Igbm93LlxuICAgKi9cbiAgLy8gZ2V0R3JpZEhlaWdodCgpIHtcbiAgLy8gICBjb25zdCB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gIC8vICAgY29uc3Qgdmlld3BvcnQ6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsaWItZ3JpZCcpO1xuICAvLyAgIGNvbnN0IGdyaWRPZmZzZXQgPSB2aWV3cG9ydC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB3aW5kb3cuc2Nyb2xsWTtcbiAgLy8gICBjb25zdCBncmlkSGVpZ2h0ID1cbiAgLy8gICAgIHRoaXMuZ3JpZEVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgKyB0aGlzLmdyaWRCb3R0b21TcGFjZTsgLy9ncmlkIHNob3VsZCBoYXZlIDI0cHggc3BhY2UgYXQgYm90dG9tXG4gIC8vICAgaWYgKGdyaWRPZmZzZXQgKyBncmlkSGVpZ2h0ID49IHdpbmRvd0hlaWdodCkge1xuICAvLyAgICAgdGhpcy5oZWlnaHQgPSB3aW5kb3dIZWlnaHQgLSAoZ3JpZE9mZnNldCArIHRoaXMuZ3JpZEJvdHRvbVNwYWNlKTtcbiAgLy8gICB9XG4gIC8vIH1cblxuICAvLyBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgLy8gcmVzaXplKGV2OiBhbnkpIHtcbiAgLy8gICBpZiAoZXYudGFyZ2V0LmlubmVySGVpZ2h0ID4gdGhpcy5yZXNpemVIZWlnaHQpIHtcbiAgLy8gICAgIHRoaXMucmVzaXplSGVpZ2h0ID0gZXYudGFyZ2V0LmlubmVySGVpZ2h0O1xuICAvLyAgICAgdGhpcy5oZWlnaHQgPSAnMTAwJSc7XG4gIC8vICAgfVxuICAvLyAgIGlmICh0aGlzLnJlc2l6ZUhlaWdodCA+IHdpbmRvdy5pbm5lckhlaWdodCkge1xuICAvLyAgICAgdGhpcy5yZXNpemVIZWlnaHQgPSAwO1xuICAvLyAgIH1cbiAgLy8gICB0aGlzLmdldEdyaWRIZWlnaHQoKTtcbiAgLy8gfVxuXG4gIHJvd0NsYXNzID0gKGFyZ3M6IFJvd0NsYXNzQXJncykgPT4ge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93cyAmJiB0aGlzLmRpc2FibGVQcmVTZWxlY3RlZFJvd3MpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdrLWRpc2FibGVkJzogdGhpcy5zZWxlY3RlZFJvd3MuaW5jbHVkZXMoXG4gICAgICAgICAgYXJncy5kYXRhSXRlbVt0aGlzLmdyaWRSb3dTZWxlY3RCeVZhbHVlXVxuICAgICAgICApIHx8IHRoaXMuYWxsUGFnZXNTZWxlY3RlZCxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfTtcblxuICBleHBhbmRDb2x1bW5DbGFzcygpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCA+IDAgJiYgdGhpcy5kaXNhYmxlUHJlU2VsZWN0ZWRSb3dzKSB7XG4gICAgICB0aGlzLmV4cGFuZFJvd0NvbHVtbldpZHRoID0gMTk0O1xuICAgICAgcmV0dXJuICdleHBhbmQtcm93JztcbiAgICB9XG4gICAgdGhpcy5leHBhbmRSb3dDb2x1bW5XaWR0aCA9IDU2O1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG9uU2VsZWN0QWxsQ2hhbmdlKGNoZWNrZWRTdGF0ZTogU2VsZWN0QWxsQ2hlY2tib3hTdGF0ZSk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIGNoZWNrZWRTdGF0ZSA9PT0gJ2NoZWNrZWQnXG4gICAgKSB7XG4gICAgICB0aGlzLl9wcmVTZWxlY3RlZCA9IHRoaXMuX2dyaWRWaWV3LmRhdGFcbiAgICAgICAgLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtW3RoaXMuZ3JpZFJvd1NlbGVjdEJ5VmFsdWVdKVxuICAgICAgICAuZmlsdGVyKChpZDogYW55KSA9PiBpZCk7XG4gICAgICB0aGlzLnNlbGVjdEFsbFN0YXRlID0gJ2NoZWNrZWQnO1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1Db3VudCA9IHRoaXMuX2dyaWRWaWV3LmRhdGEubGVuZ3RoO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCA+IDAgJiYgdGhpcy5kaXNhYmxlUHJlU2VsZWN0ZWRSb3dzKSB7XG4gICAgICB0aGlzLl9wcmVTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRSb3dzO1xuICAgICAgdGhpcy5zZWxlY3RBbGxTdGF0ZSA9ICdpbmRldGVybWluYXRlJztcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQ291bnQgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wcmVTZWxlY3RlZCA9IFtdO1xuICAgICAgdGhpcy5zZWxlY3RBbGxTdGF0ZSA9ICd1bmNoZWNrZWQnO1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1Db3VudCA9IDA7XG4gICAgfVxuICAgIHRoaXMuYWRkU2VsZWN0QWxsTWVzc2FnZSh0aGlzLnNlbGVjdEFsbFN0YXRlID09PSAnY2hlY2tlZCcpO1xuICB9XG5cbiAgY2FuRW5hYmxlU2VsZWN0QWxsKCkge1xuICAgIHJldHVybiAodGhpcy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCA9PSB0aGlzLl9ncmlkVmlldy50b3RhbCAmJlxuICAgICAgdGhpcy5kaXNhYmxlUHJlU2VsZWN0ZWRSb3dzKVxuICB9XG5cbiAgcHVibGljIGNlbGxDbG9zZUhhbmRsZXIoYXJnczogQ2VsbENsb3NlRXZlbnQpOiB2b2lkIHtcbiAgICBsZXQgeyBmb3JtR3JvdXAsIGRhdGFJdGVtIH0gPSBhcmdzO1xuICAgIGlmICghZm9ybUdyb3VwLnZhbGlkKSB7XG4gICAgICBhcmdzLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSBlbHNlIGlmIChmb3JtR3JvdXAuZGlydHkpIHtcbiAgICAgIGlmIChhcmdzLm9yaWdpbmFsRXZlbnQgJiYgYXJncy5vcmlnaW5hbEV2ZW50LmtleUNvZGUgPT09IEtleXMuRXNjYXBlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5hc3NpZ24oZGF0YUl0ZW0sIGZvcm1Hcm91cC52YWx1ZSk7XG4gICAgICB0aGlzLnNhdmVDaGFuZ2VzKCk7XG4gICAgICB0aGlzLnVwZGF0ZWREYXRhLmVtaXQodGhpcy5ncmlkLmRhdGEpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNhdmVDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZ3JpZC5jbG9zZUNlbGwoKTtcbiAgICB0aGlzLmdyaWQuY2FuY2VsQ2VsbCgpO1xuICB9XG5cbiAgcmVmcmVzaEdyaWREYXRhKCkge1xuICAgIHRoaXMuZW1pdFJlZnJlc2hFdnQuZW1pdCgpO1xuICB9XG5cbn1cbiIsIjxkaXYgI2dyaWRFbGVtZW50IFtuZ0NsYXNzXT1cImNvbHVtbkNvbnRlbnROb1dyYXAgPyAnY29sdW1uLWNvbnRlbnQtbm93cmFwJyA6ICcnXCI+XG4gIDxrZW5kby1ncmlkIFtkYXRhXT1cIl9ncmlkVmlld1wiIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiIFtza2lwXT1cInNraXBcIiBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlU2V0dGluZ3NcIlxuICAgIFtwYWdlYWJsZV09XCJwYWdlYWJsZVwiIFtzb3J0YWJsZV09XCJzb3J0YWJsZVwiIFtsb2FkaW5nXT1cImdyaWRMb2FkaW5nXCIgW2dyb3VwYWJsZV09XCJncm91cGFibGVcIlxuICAgIFtyZW9yZGVyYWJsZV09XCJyZW9yZGVyYWJsZVwiIFtyZXNpemFibGVdPVwicmVzaXphYmxlXCIgW2NvbHVtbk1lbnVdPVwiY29sdW1uTWVudVwiIFtuYXZpZ2FibGVdPVwibmF2aWdhYmxlXCJcbiAgICBbaGVpZ2h0XT1cImdyaWRIZWlnaHRcIiAoY2hhbmdlKT1cInNldFNlbGVjdGFibGVTZXR0aW5ncygpXCIgKHNlbGVjdGVkS2V5c0NoYW5nZSk9XCJzZWxlY3RlZEtleXNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgW2tlbmRvR3JpZFNlbGVjdEJ5XT1cImdyaWRSb3dTZWxlY3RCeVZhbHVlXCIgKGRldGFpbEV4cGFuZCk9XCJvbkRldGFpbEV4cGFuZCgkZXZlbnQpXCIgW3NlbGVjdGVkS2V5c109XCJfcHJlU2VsZWN0ZWRcIlxuICAgIChwYWdlQ2hhbmdlKT1cInBhZ2VDaGFuZ2UoJGV2ZW50KVwiIChjZWxsQ2xpY2spPVwiY2VsbENsaWNrSGFuZGxlcigkZXZlbnQpXCIgKGNlbGxDbG9zZSk9XCJjZWxsQ2xvc2VIYW5kbGVyKCRldmVudClcIlxuICAgIFtzb3J0XT1cInNvcnRcIiAoc29ydENoYW5nZSk9XCJzb3J0Q2hhbmdlKCRldmVudClcIiAoc2Nyb2xsQm90dG9tKT1cInNjcm9sbEJvdHRvbSgpXCIgW25nQ2xhc3NdPVwiZ2V0SGVhZGVySGVpZ2h0KClcIlxuICAgIGlkPVwibGliLWdyaWRcIiBbcm93Q2xhc3NdPVwicm93Q2xhc3NcIj5cbiAgICA8ZGl2ICNzZWxlY3RBbGxNZXNzYWdlRWxlbWVudD5cbiAgICAgIDxkaXYgY2xhc3M9XCJsaWItZ3JpZC1zZWxlY3QtYWxsLW1lc3NhZ2UtY29udGFpbmVyXCJcbiAgICAgICAgKm5nSWY9XCIoKHNlbGVjdGVkSXRlbUNvdW50IDwgX2dyaWRWaWV3LnRvdGFsKSB8fCBhbGxQYWdlc1NlbGVjdGVkKVwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiKHNlbGVjdGVkSXRlbUNvdW50IDwgX2dyaWRWaWV3LnRvdGFsKVwiIGNsYXNzPVwibGliLWdyaWQtc2VsZWN0LWFsbC1tZXNzYWdlXCI+XG4gICAgICAgICAgPGxpYi10eXBvZ3JhcGh5IFtkZWZhdWx0VGV4dF09XCInQWxsICcrc2VsZWN0ZWRJdGVtQ291bnQrJyAnK2l0ZW1OYW1lKycgb24gdGhpcyBwYWdlIGFyZSBzZWxlY3RlZC4nXCJcbiAgICAgICAgICAgIHR5cGU9XCJCT0RZX1NNQUxMXCI+PC9saWItdHlwb2dyYXBoeT5cbiAgICAgICAgICA8dT48bGliLXR5cG9ncmFwaHkgKGNsaWNrKT1cInNlbGVjdEFjcm9zc1BhZ2VzKHRydWUpXCIgY2xhc3M9XCJzZWxlY3QtYWxsLWhhbmRsZXJcIlxuICAgICAgICAgICAgICBbZGVmYXVsdFRleHRdPVwiJ1NlbGVjdCBhbGwgJytfZ3JpZFZpZXcudG90YWwrJyAnK2l0ZW1OYW1lKycgZnJvbSBhbGwgcGFnZXMnXCJcbiAgICAgICAgICAgICAgdHlwZT1cIkJPRFlfU01BTExcIj48L2xpYi10eXBvZ3JhcGh5PjwvdT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJhbGxQYWdlc1NlbGVjdGVkXCIgY2xhc3M9XCJsaWItZ3JpZC1zZWxlY3QtYWxsLW1lc3NhZ2VcIj5cbiAgICAgICAgICA8bGliLWljb24gbmFtZT1cImNpcmNsZS1jaGVja2VkXCIgY2xhc3M9XCJhbGwtc2VsZWN0ZWQtaWNvblwiPjwvbGliLWljb24+XG4gICAgICAgICAgPGxpYi10eXBvZ3JhcGh5IFtkZWZhdWx0VGV4dF09XCInQWxsICcrX2dyaWRWaWV3LnRvdGFsKycgJytpdGVtTmFtZSsnIGFjcm9zcyBhbGwgcGFnZXMgYXJlIHNlbGVjdGVkLidcIlxuICAgICAgICAgICAgdHlwZT1cIkJPRFlfU01BTExcIj48L2xpYi10eXBvZ3JhcGh5PlxuICAgICAgICAgIDx1PjxsaWItdHlwb2dyYXBoeSAoY2xpY2spPVwic2VsZWN0QWNyb3NzUGFnZXMoZmFsc2UpXCIgY2xhc3M9XCJzZWxlY3QtYWxsLWhhbmRsZXJcIlxuICAgICAgICAgICAgICBbZGVmYXVsdFRleHRdPVwiJ0NsZWFyIHNlbGVjdGlvbidcIiB0eXBlPVwiQk9EWV9TTUFMTFwiPjwvbGliLXR5cG9ncmFwaHk+PC91PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRUb29sYmFyVGVtcGxhdGUgW3Bvc2l0aW9uXT1cImdldFBvc2l0aW9uKClcIiBsZXQtcG9zaXRpb249XCJwb3NpdGlvblwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dUb29sYmFyICYmIHBvc2l0aW9uID09PSAndG9wJ1wiPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93UmVmcmVzaFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaG93UmVmcmVzaFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW5maW5pdGVTY3JvbGxMb2FkZXIgJiYgcG9zaXRpb24gPT09ICdib3R0b20nXCI+XG4gICAgICAgIDxsaWItZ3JpZC1wYWdpbmF0aW9uLXNwYWNlcj48L2xpYi1ncmlkLXBhZ2luYXRpb24tc3BhY2VyPlxuICAgICAgICA8bGliLWxvYWRlciBbdHlwZV09XCJsb2FkZXJUeXBlXCIgW3NpemVdPVwibG9hZGVyU2l6ZVwiIFt0aGVtZUNvbG9yXT1cImxvYWRlclRoZW1lXCI+PC9saWItbG9hZGVyPlxuICAgICAgICA8bGliLWdyaWQtcGFnaW5hdGlvbi1zcGFjZXI+PC9saWItZ3JpZC1wYWdpbmF0aW9uLXNwYWNlcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgI3Nob3dSZWZyZXNoVGVtcGxhdGU+XG4gICAgICA8bGliLXRvb2x0aXAgcG9zaXRpb249XCJ0b3BcIiBzaG93T249XCJob3ZlclwiIFt0b29sdGlwV2lkdGhdPVwiNjhcIiBbY2FsbG91dF09XCJ0cnVlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwLWNvbnRlbnRcIj5cbiAgICAgICAgICA8bGliLXR5cG9ncmFwaHkgZGVmYXVsdFRleHQ9XCJSZWZyZXNoXCI+PC9saWItdHlwb2dyYXBoeT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxsaWItYnV0dG9uIHNpemU9XCJzbWFsbFwiIHdpZHRoPVwiMi40cmVtXCIgcm91bmRlZD1cInNtYWxsXCIgZmlsbE1vZGU9XCJzb2xpZFwiIHRoZW1lQ29sb3I9XCJwcmltYXJ5XCIgaWNvbk5hbWU9XCJyZXNldFwiXG4gICAgICAgICAgW3RvZ2dsZWFibGVdPVwiZmFsc2VcIiAoYnV0dG9uQ2xpY2spPVwicmVmcmVzaEdyaWREYXRhKClcIiBbaWNvbkJ1dHRvbl09XCJ0cnVlXCIgW2ljb25Gb250U2l6ZV09XCIxM1wiPjwvbGliLWJ1dHRvbj5cbiAgICAgIDwvbGliLXRvb2x0aXA+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRMb2FkaW5nVGVtcGxhdGU+XG4gICAgICA8ZGl2IGNsYXNzPVwiay1sb2FkaW5nLWNvbG9yXCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1jb250YWluZXJcIj5cbiAgICAgICAgPGxpYi1sb2FkZXIgW3R5cGVdPVwibG9hZGVyVHlwZVwiIFtzaXplXT1cImxvYWRlclNpemVcIiBbdGhlbWVDb2xvcl09XCJsb2FkZXJUaGVtZVwiPjwvbGliLWxvYWRlcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJ0aGlzLl9ncmlkVmlldy50b3RhbCA9PT0gMFwiIGtlbmRvR3JpZE5vUmVjb3Jkc1RlbXBsYXRlPlxuICAgICAgPGxpYi10eXBvZ3JhcGh5ICpuZ0lmPVwiIWxvYWRpbmdcIiBbZGVmYXVsdFRleHRdPVwibm9SZWNvcmRzQ29udGVudFwiIHR5cGU9XCJCT0RZX01FRElVTVwiPjwvbGliLXR5cG9ncmFwaHk+XG4gICAgICA8bGliLWxvYWRlciAqbmdJZj1cImxvYWRpbmdcIiBbdHlwZV09XCJsb2FkZXJUeXBlXCIgW3NpemVdPVwibG9hZGVyU2l6ZVwiIFt0aGVtZUNvbG9yXT1cImxvYWRlclRoZW1lXCI+PC9saWItbG9hZGVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRoaXMuX2dyaWRWaWV3LnRvdGFsID4gMFwiPlxuICAgICAgPGtlbmRvLWdyaWQtY2hlY2tib3gtY29sdW1uICNzZWxlY3RBbGxDaGVja2JveCBoZWFkZXJDbGFzcz1cInNlbGVjdC1hbGwtaGVhZGVyXCIgKm5nSWY9XCJjaGVja0JveFJlcXVpcmVkXCJcbiAgICAgICAgW3dpZHRoXT1cImNoZWNrQm94V2lkdGhcIiBbcmVzaXphYmxlXT1cImNoZWNrQm94Q29sdW1uUmVzaXphYmxlXCIgW2NvbHVtbk1lbnVdPVwiY2hlY2tCb3hDb2x1bW5NZW51XCJcbiAgICAgICAgY2xhc3M9XCJjaGVja2JveC1jb2x1bW5cIiBbc3RpY2t5XT1cImlzQ2hlY2tCb3hDb2x1bW5TdGlja3kgJiYgIWN1c3RvbUV4cGFuZFJvd0NvbHVtblwiPlxuICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkSGVhZGVyVGVtcGxhdGUgKm5nSWY9XCJpc1NlbGVjdEFsbENoZWNrYm94UmVxdWlyZWRcIj5cbiAgICAgICAgICA8aW5wdXQgaWQ9XCJzZWxlY3RBbGxDaGVja2JveElkXCIgdHlwZT1cImNoZWNrYm94XCIga2VuZG9DaGVja0JveCBrZW5kb0dyaWRTZWxlY3RBbGxDaGVja2JveFxuICAgICAgICAgICAgW3N0YXRlXT1cInNlbGVjdEFsbFN0YXRlXCIgKHNlbGVjdEFsbENoYW5nZSk9XCJvblNlbGVjdEFsbENoYW5nZSgkZXZlbnQpXCIgLz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwva2VuZG8tZ3JpZC1jaGVja2JveC1jb2x1bW4+XG5cbiAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBjbGFzcz1cImdyaWQtY29sdW1uXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29sdW1uRGF0YVwiIFtmaWVsZF09XCJpdGVtLmZpZWxkXCIgW3RpdGxlXT1cIml0ZW0udGl0bGVcIlxuICAgICAgICBbd2lkdGhdPVwiaXRlbS5jb2x1bW5XaWR0aFwiIFttaW5SZXNpemFibGVXaWR0aF09XCJtaW5SZXNpemFibGVXaWR0aFwiIFtzb3J0YWJsZV09XCJpdGVtLnNvcnRhYmxlXCJcbiAgICAgICAgW2VkaXRvcl09XCJpdGVtLmVkaXRvclwiIFtjbGFzc109XCJpdGVtLmNsYXNzXCIgW3N0aWNreV09XCJpdGVtLmNvbHVtblN0aWNreSAmJiAhY3VzdG9tRXhwYW5kUm93Q29sdW1uXCI+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwic29ydGFibGVcIiBrZW5kb0dyaWRIZWFkZXJUZW1wbGF0ZT5cbiAgICAgICAgICB7e2l0ZW0udGl0bGV9fVxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwic29ydFswXS5maWVsZCA9PT0gaXRlbS5maWVsZFwiPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0WzBdLmRpciA9PT0gJ2FzYydcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNvcnRbMF0uZGlyID09PSAnZGVzYydcIj48L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIml0ZW0uY3VzdG9tQ29sdW1uXCIga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1kYXRhSXRlbT5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtblRlbXBsYXRlRGljdFtpdGVtLnR5cGVdXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiBkYXRhSXRlbX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJpdGVtLmN1c3RvbVwiIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtZGF0YUl0ZW0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlUmVmOyBjb250ZXh0OiB7JGltcGxpY2l0OiBkYXRhSXRlbX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiaXRlbS5pbXBhY3RcIiBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWRhdGFJdGVtPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbXBhY3RDb2x1bW47IGNvbnRleHQ6IHskaW1wbGljaXQ6IGRhdGFJdGVtfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cblxuICAgICAgPGtlbmRvLWdyaWQtY29sdW1uICpuZ0lmPVwic2hvd0RlbGV0ZUNvbHVtblwiIFt3aWR0aF09XCJkZWxldGVDb2x1bW5XaWR0aFwiIGNsYXNzPVwiZGVsZXRlLWNvbHVtblwiIHRpdGxlPVwiQWN0aW9uXCJcbiAgICAgICAgW3N0aWNreV09XCJpc0RlbGV0ZUNvbHVtblN0aWNreSAmJiAhY3VzdG9tRXhwYW5kUm93Q29sdW1uXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWRhdGFJdGVtIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XG4gICAgICAgICAgPGxpYi10b29sdGlwIHNob3dPbj1cImhvdmVyXCIgcG9zaXRpb249XCJib3R0b21cIiBjbGFzcz1cInJlbW92ZS10b29sdGlwXCI+XG4gICAgICAgICAgICA8bGliLWljb24gbmFtZT1cImRlbGV0ZVwiIGNsYXNzPVwiZGVsZXRlLWljb25cIiAoY2xpY2spPVwib25EZWxldGUoZGF0YUl0ZW0pXCI+PC9saWItaWNvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgPGxpYi10eXBvZ3JhcGh5IGRlZmF1bHRUZXh0PVwiUmVtb3ZlXCI+PC9saWItdHlwb2dyYXBoeT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbGliLXRvb2x0aXA+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuXG4gICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gW3dpZHRoXT1cImtlYmFiQ29sdW1uV2lkdGhcIiBjbGFzcz1cImtlYmFiLWNvbHVtblwiICpuZ0lmPVwic2hvd0tlYmFiXCIgdGl0bGU9XCJBY3Rpb25zXCJcbiAgICAgICAgW3N0aWNreV09XCJpc0tlYmFiQ29sdW1uU3RpY2t5ICYmICFjdXN0b21FeHBhbmRSb3dDb2x1bW5cIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtZGF0YUl0ZW0gbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgICAgICAgICA8a2VuZG8tZHJvcGRvd25idXR0b24gKm5nSWY9XCIhaGlkZUtlYmFiUm93SW5kZXguaW5jbHVkZXMocm93SW5kZXgpXCIgW3N2Z0ljb25dPVwiaWNvblwiIGZpbGxNb2RlPVwibm9uZVwiXG4gICAgICAgICAgICBbZGF0YV09XCJrZWJhYkxpc3QgfCBrZWJhYk1lbnVGaWx0ZXIgOiBkYXRhSXRlbVwiIGNsYXNzPVwia2ViYWJcIiAoaXRlbUNsaWNrKT1cIm9uS2ViYWJDbGljaygkZXZlbnQsIGRhdGFJdGVtKVwiXG4gICAgICAgICAgICBbcG9wdXBTZXR0aW5nc109XCJ7IGFsaWduOiAncmlnaHQnLCBhbmltYXRlOiB0cnVlLCBwb3B1cENsYXNzOiAna2ViYWItbGlzdCcgfVwiPlxuICAgICAgICAgIDwva2VuZG8tZHJvcGRvd25idXR0b24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBMaW1pdGF0aW9uOiBkZXRhaWwgdGVtcGxhdGUgYW5kIHN0aWNreSBjb2x1bW5zIGRvIG5vdCBjby1leGlzdC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImN1c3RvbUV4cGFuZFJvd0NvbHVtblwiIGtlbmRvR3JpZERldGFpbFRlbXBsYXRlIGxldC1kYXRhSXRlbT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZXRhaWxUZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogZGF0YUl0ZW19XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxrZW5kby1ncmlkLWNvbHVtbiAqbmdJZj1cImN1c3RvbUV4cGFuZFJvd0NvbHVtblwiIFt3aWR0aF09XCJleHBhbmRSb3dDb2x1bW5XaWR0aFwiIGNsYXNzPVwiZ3JpZC1jb2x1bW4gZXhwYW5kLWNvbHVtblwiPlxuICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtZGF0YUl0ZW0gbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJleHBhbmRDb2x1bW5DbGFzcygpXCI+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RlZFJvd3MuaW5jbHVkZXMoZGF0YUl0ZW1bZ3JpZFJvd1NlbGVjdEJ5VmFsdWVdKSAmJiBkaXNhYmxlUHJlU2VsZWN0ZWRSb3dzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXhwYW5kLWNvbHVtbi10ZXh0XCI+XG4gICAgICAgICAgICBBbHJlYWR5IGFkZGVkXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxrZW5kby1idXR0b24gKm5nSWY9XCIhZXhwYW5kUm93SW5kZXguaW5jbHVkZXMocm93SW5kZXgpXCIgW3N2Z0ljb25dPVwiYXJyb3dEb3duSWNvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhwYW5kUm93KHJvd0luZGV4KVwiIGZpbGxNb2RlPVwibm9uZVwiIGNsYXNzPVwiYXJyb3ctYnRuXCI+XG4gICAgICAgICAgPC9rZW5kby1idXR0b24+XG4gICAgICAgICAgPGtlbmRvLWJ1dHRvbiAqbmdJZj1cImV4cGFuZFJvd0luZGV4LmluY2x1ZGVzKHJvd0luZGV4KVwiIFtzdmdJY29uXT1cImFycm93VXBJY29uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjb2xsYXBzZVJvdyhyb3dJbmRleClcIiBmaWxsTW9kZT1cIm5vbmVcIiBjbGFzcz1cImFycm93LWJ0blwiPlxuICAgICAgICAgIDwva2VuZG8tYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cblxuICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1BhZ2VyVGVtcGxhdGUgbGV0LXRvdGFsUGFnZXM9XCJ0b3RhbFBhZ2VzXCIgbGV0LWN1cnJlbnRQYWdlPVwiY3VycmVudFBhZ2VcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uLXdyYXBwZXJcIiBbbmdDbGFzc109XCJhbGxQYWdlc1NlbGVjdGVkID8gJ3BhZ2luYXRpb24tZGlzYWJsZWQnIDogJydcIj5cbiAgICAgICAgPGtlbmRvLXBhZ2VyLXByZXYtYnV0dG9ucz48L2tlbmRvLXBhZ2VyLXByZXYtYnV0dG9ucz5cbiAgICAgICAgPGtlbmRvLXBhZ2VyLW51bWVyaWMtYnV0dG9ucyBbYnV0dG9uQ291bnRdPVwiX3BhZ2VDb3VudFwiPjwva2VuZG8tcGFnZXItbnVtZXJpYy1idXR0b25zPlxuICAgICAgICA8a2VuZG8tcGFnZXItbmV4dC1idXR0b25zPjwva2VuZG8tcGFnZXItbmV4dC1idXR0b25zPlxuICAgICAgICA8a2VuZG8tcGFnZXItaW5mbz48L2tlbmRvLXBhZ2VyLWluZm8+XG4gICAgICAgIDxrZW5kby1wYWdlci1wYWdlLXNpemVzIFtwYWdlU2l6ZXNdPVwic2l6ZXNcIj48L2tlbmRvLXBhZ2VyLXBhZ2Utc2l6ZXM+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gIDwva2VuZG8tZ3JpZD5cbjwvZGl2PlxuIl19
|