@energinet/watt 3.0.30 → 3.0.32
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/data/watt-data-table.component.js +12 -8
- package/esm2022/table/watt-table.component.js +70 -116
- package/esm2022/yearmonth-field/watt-yearmonth-field.component.js +6 -4
- package/package.json +1 -1
- package/table/watt-table.component.d.ts +34 -30
- package/yearmonth-field/watt-yearmonth-field.component.d.ts +3 -1
|
@@ -50,7 +50,7 @@ export class WattDataTableComponent {
|
|
|
50
50
|
search = viewChild(WattSearchComponent, ...(ngDevMode ? [{ debugName: "search" }] : []));
|
|
51
51
|
reset = () => this.search()?.clear();
|
|
52
52
|
onSearch(value) {
|
|
53
|
-
this.table().dataSource.filter = value;
|
|
53
|
+
this.table().dataSource().filter = value;
|
|
54
54
|
if (!value)
|
|
55
55
|
this.clear.emit();
|
|
56
56
|
}
|
|
@@ -64,7 +64,9 @@ export class WattDataTableComponent {
|
|
|
64
64
|
<ng-content select="h3" />
|
|
65
65
|
<ng-content select="h4" />
|
|
66
66
|
@if (enableCount()) {
|
|
67
|
-
<span class="watt-chip-label">
|
|
67
|
+
<span class="watt-chip-label">
|
|
68
|
+
{{ count() ?? table().dataSource().totalCount }}
|
|
69
|
+
</span>
|
|
68
70
|
}
|
|
69
71
|
@if (queryTime()) {
|
|
70
72
|
<span class="watt-label">in {{ queryTime() }} ms</span>
|
|
@@ -87,7 +89,7 @@ export class WattDataTableComponent {
|
|
|
87
89
|
<vater-flex [autoSize]="autoSize()" fill="vertical">
|
|
88
90
|
<ng-content select="watt-table" />
|
|
89
91
|
@if (
|
|
90
|
-
enableEmptyState() && !table().loading && table().dataSource.filteredData.length === 0
|
|
92
|
+
enableEmptyState() && !table().loading && table().dataSource().filteredData.length === 0
|
|
91
93
|
) {
|
|
92
94
|
<vater-flex [autoSize]="autoSize()" fill="vertical">
|
|
93
95
|
<vater-stack scrollable justify="center">
|
|
@@ -110,7 +112,7 @@ export class WattDataTableComponent {
|
|
|
110
112
|
</vater-flex>
|
|
111
113
|
@if (enablePaginator()) {
|
|
112
114
|
<watt-paginator
|
|
113
|
-
[for]="table().dataSource"
|
|
115
|
+
[for]="table().dataSource()"
|
|
114
116
|
[length]="count() ?? 0"
|
|
115
117
|
(changed)="pageChanged.emit($event)"
|
|
116
118
|
/>
|
|
@@ -140,7 +142,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
|
|
|
140
142
|
<ng-content select="h3" />
|
|
141
143
|
<ng-content select="h4" />
|
|
142
144
|
@if (enableCount()) {
|
|
143
|
-
<span class="watt-chip-label">
|
|
145
|
+
<span class="watt-chip-label">
|
|
146
|
+
{{ count() ?? table().dataSource().totalCount }}
|
|
147
|
+
</span>
|
|
144
148
|
}
|
|
145
149
|
@if (queryTime()) {
|
|
146
150
|
<span class="watt-label">in {{ queryTime() }} ms</span>
|
|
@@ -163,7 +167,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
|
|
|
163
167
|
<vater-flex [autoSize]="autoSize()" fill="vertical">
|
|
164
168
|
<ng-content select="watt-table" />
|
|
165
169
|
@if (
|
|
166
|
-
enableEmptyState() && !table().loading && table().dataSource.filteredData.length === 0
|
|
170
|
+
enableEmptyState() && !table().loading && table().dataSource().filteredData.length === 0
|
|
167
171
|
) {
|
|
168
172
|
<vater-flex [autoSize]="autoSize()" fill="vertical">
|
|
169
173
|
<vater-stack scrollable justify="center">
|
|
@@ -186,7 +190,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
|
|
|
186
190
|
</vater-flex>
|
|
187
191
|
@if (enablePaginator()) {
|
|
188
192
|
<watt-paginator
|
|
189
|
-
[for]="table().dataSource"
|
|
193
|
+
[for]="table().dataSource()"
|
|
190
194
|
[length]="count() ?? 0"
|
|
191
195
|
(changed)="pageChanged.emit($event)"
|
|
192
196
|
/>
|
|
@@ -195,4 +199,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
|
|
|
195
199
|
</watt-card>
|
|
196
200
|
`, styles: ["watt-data-table h3,watt-data-table h4{line-height:44px;min-height:44px;margin:0}watt-data-table watt-paginator{display:block;margin:calc(-1 * var(--watt-space-m)) -24px -24px}watt-data-table watt-table .mat-mdc-table tr.mdc-data-table__row:last-child .mat-mdc-cell{border-bottom:none}watt-data-table watt-empty-state{margin:var(--watt-space-xl) 0}\n"] }]
|
|
197
201
|
}] });
|
|
198
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC1kYXRhLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvd2F0dC9wYWNrYWdlL2RhdGEvd2F0dC1kYXRhLXRhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7QUFDakI7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsWUFBWTtBQUNaLE9BQU8sRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLHFCQUFxQixHQUN0QixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBcUIsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUczRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUF1Ry9ELE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRW5DLEtBQUssR0FBRyxLQUFLLDJEQUFXLENBQUM7SUFDekIsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLGlEQUFDLENBQUM7SUFDcEIsWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLHdEQUFDLENBQUM7SUFDM0IsVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLHNEQUFDLENBQUM7SUFDekIsTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLGtEQUFDLENBQUM7SUFDckIsV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLHVEQUFDLENBQUM7SUFDM0IsV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLHVEQUFDLENBQUM7SUFDMUIsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLElBQUksNERBQUMsQ0FBQztJQUMvQixTQUFTLEdBQUcsS0FBSywrREFBVSxDQUFDO0lBQzVCLFdBQVcsR0FBRyxLQUFLLGlFQUFVLENBQUM7SUFDOUIsZUFBZSxHQUFHLEtBQUssQ0FBQyxJQUFJLDJEQUFDLENBQUM7SUFDOUIsS0FBSyxHQUFHLEtBQUssMkRBQVUsQ0FBQztJQUN4QixRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssb0RBQUMsQ0FBQztJQUN4QixPQUFPLEdBQUcsS0FBSyxDQUFvQixXQUFXLG1EQUFDLENBQUM7SUFDaEQsY0FBYyxHQUFHLEtBQUssQ0FDcEIsUUFBUSwwREFDVCxDQUFDO0lBRUYsS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQ2pCLFdBQVcsR0FBRyxNQUFNLEVBQWEsQ0FBQztJQUNsQyxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUM7SUFFakIsS0FBSyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQSxrQkFBMkIsQ0FBQSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFbEYsTUFBTSxHQUFHLFNBQVMsQ0FBQyxtQkFBbUIsa0RBQUMsQ0FBQztJQUN4QyxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBRXJDLFFBQVEsQ0FBQyxLQUFhO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSztZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQzt1R0FqQ1Usc0JBQXNCOzJGQUF0QixzQkFBc0IsNnBFQXlCSCxDQUFBLGtCQUEyQixDQUFBLHdHQUV0QyxtQkFBbUIsZ0VBM0Y1Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4RFQsdWFBaEdDLGtCQUFrQiwyRkFDbEIsb0JBQW9CLHlFQUNwQixtQkFBbUIsdUVBQ25CLHFCQUFxQix1R0FDckIsaUJBQWlCLHNGQUNqQix1QkFBdUIsc0hBQ3ZCLHNCQUFzQix3SkFDdEIsbUJBQW1CLGdJQUNuQixtQkFBbUI7OzJGQTBGVixzQkFBc0I7a0JBckdsQyxTQUFTOytCQUNFLGlCQUFpQixXQUNsQjt3QkFDUCxrQkFBa0I7d0JBQ2xCLG9CQUFvQjt3QkFDcEIsbUJBQW1CO3dCQUNuQixxQkFBcUI7d0JBQ3JCLGlCQUFpQjt3QkFDakIsdUJBQXVCO3dCQUN2QixzQkFBc0I7d0JBQ3RCLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3FCQUNwQixpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJLFlBd0IzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4RFQiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gTGljZW5zZVxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgRW5lcmdpbmV0IERhdGFIdWIgQS9TXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZTJcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8jZW5kcmVnaW9uXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb250ZW50Q2hpbGQsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5cbmltcG9ydCB7XG4gIFZhdGVyRmxleENvbXBvbmVudCxcbiAgVmF0ZXJTcGFjZXJDb21wb25lbnQsXG4gIFZhdGVyU3RhY2tDb21wb25lbnQsXG4gIFZhdGVyVXRpbGl0eURpcmVjdGl2ZSxcbn0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L3ZhdGVyJztcbmltcG9ydCB7IFdBVFRfQ0FSRF9WQVJJQU5ULCBXYXR0Q2FyZENvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC9jYXJkJztcbmltcG9ydCB7IFdhdHRCdXR0b25Db21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvYnV0dG9uJztcbmltcG9ydCB7IFdhdHRFbXB0eVN0YXRlQ29tcG9uZW50IH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2VtcHR5LXN0YXRlJztcbmltcG9ydCB7IFdhdHRQYWdpbmF0b3JDb21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvcGFnaW5hdG9yJztcbmltcG9ydCB7IFdhdHRTZWFyY2hDb21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvc2VhcmNoJztcbmltcG9ydCB7IFdhdHRUYWJsZUNvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC90YWJsZSc7XG5pbXBvcnQgeyBXYXR0SWNvbiB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC9pY29uJztcblxuaW1wb3J0IHsgV2F0dERhdGFJbnRsU2VydmljZSB9IGZyb20gJy4vd2F0dC1kYXRhLWludGwuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dhdHQtZGF0YS10YWJsZScsXG4gIGltcG9ydHM6IFtcbiAgICBWYXRlckZsZXhDb21wb25lbnQsXG4gICAgVmF0ZXJTcGFjZXJDb21wb25lbnQsXG4gICAgVmF0ZXJTdGFja0NvbXBvbmVudCxcbiAgICBWYXRlclV0aWxpdHlEaXJlY3RpdmUsXG4gICAgV2F0dENhcmRDb21wb25lbnQsXG4gICAgV2F0dEVtcHR5U3RhdGVDb21wb25lbnQsXG4gICAgV2F0dFBhZ2luYXRvckNvbXBvbmVudCxcbiAgICBXYXR0U2VhcmNoQ29tcG9uZW50LFxuICAgIFdhdHRCdXR0b25Db21wb25lbnQsXG4gIF0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIHdhdHQtZGF0YS10YWJsZSBoMyxcbiAgICAgIHdhdHQtZGF0YS10YWJsZSBoNCB7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiA0NHB4O1xuICAgICAgICBtaW4taGVpZ2h0OiA0NHB4O1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG5cbiAgICAgIHdhdHQtZGF0YS10YWJsZSB3YXR0LXBhZ2luYXRvciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXJnaW46IGNhbGMoLTEgKiB2YXIoLS13YXR0LXNwYWNlLW0pKSAtMjRweCAtMjRweDtcbiAgICAgIH1cblxuICAgICAgd2F0dC1kYXRhLXRhYmxlIHdhdHQtdGFibGUgLm1hdC1tZGMtdGFibGUgdHIubWRjLWRhdGEtdGFibGVfX3JvdzpsYXN0LWNoaWxkIC5tYXQtbWRjLWNlbGwge1xuICAgICAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgICAgfVxuXG4gICAgICB3YXR0LWRhdGEtdGFibGUgd2F0dC1lbXB0eS1zdGF0ZSB7XG4gICAgICAgIG1hcmdpbjogdmFyKC0td2F0dC1zcGFjZS14bCkgMDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDx3YXR0LWNhcmQgdmF0ZXIgZmlsbD1cInZlcnRpY2FsXCIgW3ZhcmlhbnRdPVwidmFyaWFudCgpXCI+XG4gICAgICA8dmF0ZXItZmxleCBhdXRvU2l6ZSBmaWxsPVwidmVydGljYWxcIiBnYXA9XCJtXCI+XG4gICAgICAgIEBpZiAoaGVhZGVyKCkpIHtcbiAgICAgICAgICA8dmF0ZXItc3RhY2sgZGlyZWN0aW9uPVwicm93XCIgZ2FwPVwibVwiPlxuICAgICAgICAgICAgPHZhdGVyLXN0YWNrIGRpcmVjdGlvbj1cInJvd1wiIGdhcD1cInNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaDNcIiAvPlxuICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJoNFwiIC8+XG4gICAgICAgICAgICAgIEBpZiAoZW5hYmxlQ291bnQoKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwid2F0dC1jaGlwLWxhYmVsXCI+e3sgY291bnQoKSA/PyB0YWJsZSgpLmRhdGFTb3VyY2UudG90YWxDb3VudCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKHF1ZXJ5VGltZSgpKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3YXR0LWxhYmVsXCI+aW4ge3sgcXVlcnlUaW1lKCkgfX0gbXM8L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdmF0ZXItc3RhY2s+XG4gICAgICAgICAgICA8bmctY29udGVudCAvPlxuICAgICAgICAgICAgPHZhdGVyLXNwYWNlciAvPlxuICAgICAgICAgICAgQGlmIChlbmFibGVTZWFyY2goKSkge1xuICAgICAgICAgICAgICA8d2F0dC1zZWFyY2hcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwic2VhcmNoTGFiZWwoKSA/PyBpbnRsLnNlYXJjaFwiXG4gICAgICAgICAgICAgICAgW3RyaW1dPVwidHJpbVNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgICAoc2VhcmNoKT1cIm9uU2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwid2F0dC1kYXRhLWFjdGlvbnNcIiAvPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwid2F0dC1idXR0b25cIiAvPlxuICAgICAgICAgIDwvdmF0ZXItc3RhY2s+XG4gICAgICAgIH1cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwid2F0dC1kYXRhLWZpbHRlcnNcIiAvPlxuICAgICAgICA8dmF0ZXItZmxleCBbYXV0b1NpemVdPVwiYXV0b1NpemUoKVwiIGZpbGw9XCJ2ZXJ0aWNhbFwiPlxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIndhdHQtdGFibGVcIiAvPlxuICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICBlbmFibGVFbXB0eVN0YXRlKCkgJiYgIXRhYmxlKCkubG9hZGluZyAmJiB0YWJsZSgpLmRhdGFTb3VyY2UuZmlsdGVyZWREYXRhLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgPHZhdGVyLWZsZXggW2F1dG9TaXplXT1cImF1dG9TaXplKClcIiBmaWxsPVwidmVydGljYWxcIj5cbiAgICAgICAgICAgICAgPHZhdGVyLXN0YWNrIHNjcm9sbGFibGUganVzdGlmeT1cImNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDx3YXR0LWVtcHR5LXN0YXRlXG4gICAgICAgICAgICAgICAgICBbaWNvbl09XCJlcnJvcigpID8gJ2N1c3RvbS1wb3dlcicgOiByZWFkeSgpID8gZW1wdHlTdGF0ZUljb24oKSA6ICdjdXN0b20tZXhwbG9yZSdcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgICAgICBlcnJvcigpID8gaW50bC5lcnJvclRpdGxlIDogcmVhZHkoKSA/IGludGwuZW1wdHlUaXRsZSA6IGludGwuZGVmYXVsdFRpdGxlXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW21lc3NhZ2VdPVwiZXJyb3IoKSA/IGludGwuZXJyb3JUZXh0IDogcmVhZHkoKSA/IGludGwuZW1wdHlUZXh0IDogaW50bC5kZWZhdWx0VGV4dFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQGlmIChlbmFibGVSZXRyeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDx3YXR0LWJ1dHRvbiB2YXJpYW50PVwic2Vjb25kYXJ5XCIgKGNsaWNrKT1cInJldHJ5LmVtaXQoKVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgaW50bC5lbXB0eVJldHJ5XG4gICAgICAgICAgICAgICAgICAgIH19PC93YXR0LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3dhdHQtZW1wdHktc3RhdGU+XG4gICAgICAgICAgICAgIDwvdmF0ZXItc3RhY2s+XG4gICAgICAgICAgICA8L3ZhdGVyLWZsZXg+XG4gICAgICAgICAgfVxuICAgICAgICA8L3ZhdGVyLWZsZXg+XG4gICAgICAgIEBpZiAoZW5hYmxlUGFnaW5hdG9yKCkpIHtcbiAgICAgICAgICA8d2F0dC1wYWdpbmF0b3JcbiAgICAgICAgICAgIFtmb3JdPVwidGFibGUoKS5kYXRhU291cmNlXCJcbiAgICAgICAgICAgIFtsZW5ndGhdPVwiY291bnQoKSA/PyAwXCJcbiAgICAgICAgICAgIChjaGFuZ2VkKT1cInBhZ2VDaGFuZ2VkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgPC92YXRlci1mbGV4PlxuICAgIDwvd2F0dC1jYXJkPlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBXYXR0RGF0YVRhYmxlQ29tcG9uZW50IHtcbiAgaW50bCA9IGluamVjdChXYXR0RGF0YUludGxTZXJ2aWNlKTtcblxuICBlcnJvciA9IGlucHV0PHVua25vd24+KCk7XG4gIHJlYWR5ID0gaW5wdXQodHJ1ZSk7XG4gIGVuYWJsZVNlYXJjaCA9IGlucHV0KHRydWUpO1xuICB0cmltU2VhcmNoID0gaW5wdXQodHJ1ZSk7XG4gIGhlYWRlciA9IGlucHV0KHRydWUpO1xuICBlbmFibGVSZXRyeSA9IGlucHV0KGZhbHNlKTtcbiAgZW5hYmxlQ291bnQgPSBpbnB1dCh0cnVlKTtcbiAgZW5hYmxlRW1wdHlTdGF0ZSA9IGlucHV0KHRydWUpO1xuICBxdWVyeVRpbWUgPSBpbnB1dDxudW1iZXI+KCk7XG4gIHNlYXJjaExhYmVsID0gaW5wdXQ8c3RyaW5nPigpO1xuICBlbmFibGVQYWdpbmF0b3IgPSBpbnB1dCh0cnVlKTtcbiAgY291bnQgPSBpbnB1dDxudW1iZXI+KCk7XG4gIGF1dG9TaXplID0gaW5wdXQoZmFsc2UpO1xuICB2YXJpYW50ID0gaW5wdXQ8V0FUVF9DQVJEX1ZBUklBTlQ+KCdlbGV2YXRpb24nKTtcbiAgZW1wdHlTdGF0ZUljb24gPSBpbnB1dDxXYXR0SWNvbiB8ICdjdXN0b20tcG93ZXInIHwgJ2N1c3RvbS1leHBsb3JlJyB8ICdjdXN0b20tbm8tcmVzdWx0cyc+KFxuICAgICdjYW5jZWwnXG4gICk7XG5cbiAgY2xlYXIgPSBvdXRwdXQoKTtcbiAgcGFnZUNoYW5nZWQgPSBvdXRwdXQ8UGFnZUV2ZW50PigpO1xuICByZXRyeSA9IG91dHB1dCgpO1xuXG4gIHRhYmxlID0gY29udGVudENoaWxkLnJlcXVpcmVkKFdhdHRUYWJsZUNvbXBvbmVudDx1bmtub3duPiwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KTtcblxuICBzZWFyY2ggPSB2aWV3Q2hpbGQoV2F0dFNlYXJjaENvbXBvbmVudCk7XG4gIHJlc2V0ID0gKCkgPT4gdGhpcy5zZWFyY2goKT8uY2xlYXIoKTtcblxuICBvblNlYXJjaCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy50YWJsZSgpLmRhdGFTb3VyY2UuZmlsdGVyID0gdmFsdWU7XG4gICAgaWYgKCF2YWx1ZSkgdGhpcy5jbGVhci5lbWl0KCk7XG4gIH1cbn1cbiJdfQ==
|
|
202
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC1kYXRhLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvd2F0dC9wYWNrYWdlL2RhdGEvd2F0dC1kYXRhLXRhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7QUFDakI7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsWUFBWTtBQUNaLE9BQU8sRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLHFCQUFxQixHQUN0QixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBcUIsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUczRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUF5Ry9ELE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRW5DLEtBQUssR0FBRyxLQUFLLDJEQUFXLENBQUM7SUFDekIsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLGlEQUFDLENBQUM7SUFDcEIsWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLHdEQUFDLENBQUM7SUFDM0IsVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLHNEQUFDLENBQUM7SUFDekIsTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLGtEQUFDLENBQUM7SUFDckIsV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLHVEQUFDLENBQUM7SUFDM0IsV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLHVEQUFDLENBQUM7SUFDMUIsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLElBQUksNERBQUMsQ0FBQztJQUMvQixTQUFTLEdBQUcsS0FBSywrREFBVSxDQUFDO0lBQzVCLFdBQVcsR0FBRyxLQUFLLGlFQUFVLENBQUM7SUFDOUIsZUFBZSxHQUFHLEtBQUssQ0FBQyxJQUFJLDJEQUFDLENBQUM7SUFDOUIsS0FBSyxHQUFHLEtBQUssMkRBQVUsQ0FBQztJQUN4QixRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssb0RBQUMsQ0FBQztJQUN4QixPQUFPLEdBQUcsS0FBSyxDQUFvQixXQUFXLG1EQUFDLENBQUM7SUFDaEQsY0FBYyxHQUFHLEtBQUssQ0FDcEIsUUFBUSwwREFDVCxDQUFDO0lBRUYsS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQ2pCLFdBQVcsR0FBRyxNQUFNLEVBQWEsQ0FBQztJQUNsQyxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUM7SUFFakIsS0FBSyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQSxrQkFBMkIsQ0FBQSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFbEYsTUFBTSxHQUFHLFNBQVMsQ0FBQyxtQkFBbUIsa0RBQUMsQ0FBQztJQUN4QyxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBRXJDLFFBQVEsQ0FBQyxLQUFhO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxLQUFLO1lBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDO3VHQWpDVSxzQkFBc0I7MkZBQXRCLHNCQUFzQiw2cEVBeUJILENBQUEsa0JBQTJCLENBQUEsd0dBRXRDLG1CQUFtQixnRUE3RjVCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0VULHVhQWxHQyxrQkFBa0IsMkZBQ2xCLG9CQUFvQix5RUFDcEIsbUJBQW1CLHVFQUNuQixxQkFBcUIsdUdBQ3JCLGlCQUFpQixzRkFDakIsdUJBQXVCLHNIQUN2QixzQkFBc0Isd0pBQ3RCLG1CQUFtQixnSUFDbkIsbUJBQW1COzsyRkE0RlYsc0JBQXNCO2tCQXZHbEMsU0FBUzsrQkFDRSxpQkFBaUIsV0FDbEI7d0JBQ1Asa0JBQWtCO3dCQUNsQixvQkFBb0I7d0JBQ3BCLG1CQUFtQjt3QkFDbkIscUJBQXFCO3dCQUNyQixpQkFBaUI7d0JBQ2pCLHVCQUF1Qjt3QkFDdkIsc0JBQXNCO3dCQUN0QixtQkFBbUI7d0JBQ25CLG1CQUFtQjtxQkFDcEIsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSSxZQXdCM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnRVQiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gTGljZW5zZVxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgRW5lcmdpbmV0IERhdGFIdWIgQS9TXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZTJcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8jZW5kcmVnaW9uXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb250ZW50Q2hpbGQsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5cbmltcG9ydCB7XG4gIFZhdGVyRmxleENvbXBvbmVudCxcbiAgVmF0ZXJTcGFjZXJDb21wb25lbnQsXG4gIFZhdGVyU3RhY2tDb21wb25lbnQsXG4gIFZhdGVyVXRpbGl0eURpcmVjdGl2ZSxcbn0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L3ZhdGVyJztcbmltcG9ydCB7IFdBVFRfQ0FSRF9WQVJJQU5ULCBXYXR0Q2FyZENvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC9jYXJkJztcbmltcG9ydCB7IFdhdHRCdXR0b25Db21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvYnV0dG9uJztcbmltcG9ydCB7IFdhdHRFbXB0eVN0YXRlQ29tcG9uZW50IH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2VtcHR5LXN0YXRlJztcbmltcG9ydCB7IFdhdHRQYWdpbmF0b3JDb21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvcGFnaW5hdG9yJztcbmltcG9ydCB7IFdhdHRTZWFyY2hDb21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvc2VhcmNoJztcbmltcG9ydCB7IFdhdHRUYWJsZUNvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC90YWJsZSc7XG5pbXBvcnQgeyBXYXR0SWNvbiB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC9pY29uJztcblxuaW1wb3J0IHsgV2F0dERhdGFJbnRsU2VydmljZSB9IGZyb20gJy4vd2F0dC1kYXRhLWludGwuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dhdHQtZGF0YS10YWJsZScsXG4gIGltcG9ydHM6IFtcbiAgICBWYXRlckZsZXhDb21wb25lbnQsXG4gICAgVmF0ZXJTcGFjZXJDb21wb25lbnQsXG4gICAgVmF0ZXJTdGFja0NvbXBvbmVudCxcbiAgICBWYXRlclV0aWxpdHlEaXJlY3RpdmUsXG4gICAgV2F0dENhcmRDb21wb25lbnQsXG4gICAgV2F0dEVtcHR5U3RhdGVDb21wb25lbnQsXG4gICAgV2F0dFBhZ2luYXRvckNvbXBvbmVudCxcbiAgICBXYXR0U2VhcmNoQ29tcG9uZW50LFxuICAgIFdhdHRCdXR0b25Db21wb25lbnQsXG4gIF0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIHdhdHQtZGF0YS10YWJsZSBoMyxcbiAgICAgIHdhdHQtZGF0YS10YWJsZSBoNCB7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiA0NHB4O1xuICAgICAgICBtaW4taGVpZ2h0OiA0NHB4O1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG5cbiAgICAgIHdhdHQtZGF0YS10YWJsZSB3YXR0LXBhZ2luYXRvciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXJnaW46IGNhbGMoLTEgKiB2YXIoLS13YXR0LXNwYWNlLW0pKSAtMjRweCAtMjRweDtcbiAgICAgIH1cblxuICAgICAgd2F0dC1kYXRhLXRhYmxlIHdhdHQtdGFibGUgLm1hdC1tZGMtdGFibGUgdHIubWRjLWRhdGEtdGFibGVfX3JvdzpsYXN0LWNoaWxkIC5tYXQtbWRjLWNlbGwge1xuICAgICAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgICAgfVxuXG4gICAgICB3YXR0LWRhdGEtdGFibGUgd2F0dC1lbXB0eS1zdGF0ZSB7XG4gICAgICAgIG1hcmdpbjogdmFyKC0td2F0dC1zcGFjZS14bCkgMDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDx3YXR0LWNhcmQgdmF0ZXIgZmlsbD1cInZlcnRpY2FsXCIgW3ZhcmlhbnRdPVwidmFyaWFudCgpXCI+XG4gICAgICA8dmF0ZXItZmxleCBhdXRvU2l6ZSBmaWxsPVwidmVydGljYWxcIiBnYXA9XCJtXCI+XG4gICAgICAgIEBpZiAoaGVhZGVyKCkpIHtcbiAgICAgICAgICA8dmF0ZXItc3RhY2sgZGlyZWN0aW9uPVwicm93XCIgZ2FwPVwibVwiPlxuICAgICAgICAgICAgPHZhdGVyLXN0YWNrIGRpcmVjdGlvbj1cInJvd1wiIGdhcD1cInNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaDNcIiAvPlxuICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJoNFwiIC8+XG4gICAgICAgICAgICAgIEBpZiAoZW5hYmxlQ291bnQoKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwid2F0dC1jaGlwLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICB7eyBjb3VudCgpID8/IHRhYmxlKCkuZGF0YVNvdXJjZSgpLnRvdGFsQ291bnQgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChxdWVyeVRpbWUoKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwid2F0dC1sYWJlbFwiPmluIHt7IHF1ZXJ5VGltZSgpIH19IG1zPC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3ZhdGVyLXN0YWNrPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICAgICAgICAgIDx2YXRlci1zcGFjZXIgLz5cbiAgICAgICAgICAgIEBpZiAoZW5hYmxlU2VhcmNoKCkpIHtcbiAgICAgICAgICAgICAgPHdhdHQtc2VhcmNoXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInNlYXJjaExhYmVsKCkgPz8gaW50bC5zZWFyY2hcIlxuICAgICAgICAgICAgICAgIFt0cmltXT1cInRyaW1TZWFyY2goKVwiXG4gICAgICAgICAgICAgICAgKHNlYXJjaCk9XCJvblNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIndhdHQtZGF0YS1hY3Rpb25zXCIgLz5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIndhdHQtYnV0dG9uXCIgLz5cbiAgICAgICAgICA8L3ZhdGVyLXN0YWNrPlxuICAgICAgICB9XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIndhdHQtZGF0YS1maWx0ZXJzXCIgLz5cbiAgICAgICAgPHZhdGVyLWZsZXggW2F1dG9TaXplXT1cImF1dG9TaXplKClcIiBmaWxsPVwidmVydGljYWxcIj5cbiAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJ3YXR0LXRhYmxlXCIgLz5cbiAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgZW5hYmxlRW1wdHlTdGF0ZSgpICYmICF0YWJsZSgpLmxvYWRpbmcgJiYgdGFibGUoKS5kYXRhU291cmNlKCkuZmlsdGVyZWREYXRhLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgPHZhdGVyLWZsZXggW2F1dG9TaXplXT1cImF1dG9TaXplKClcIiBmaWxsPVwidmVydGljYWxcIj5cbiAgICAgICAgICAgICAgPHZhdGVyLXN0YWNrIHNjcm9sbGFibGUganVzdGlmeT1cImNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDx3YXR0LWVtcHR5LXN0YXRlXG4gICAgICAgICAgICAgICAgICBbaWNvbl09XCJlcnJvcigpID8gJ2N1c3RvbS1wb3dlcicgOiByZWFkeSgpID8gZW1wdHlTdGF0ZUljb24oKSA6ICdjdXN0b20tZXhwbG9yZSdcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgICAgICBlcnJvcigpID8gaW50bC5lcnJvclRpdGxlIDogcmVhZHkoKSA/IGludGwuZW1wdHlUaXRsZSA6IGludGwuZGVmYXVsdFRpdGxlXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW21lc3NhZ2VdPVwiZXJyb3IoKSA/IGludGwuZXJyb3JUZXh0IDogcmVhZHkoKSA/IGludGwuZW1wdHlUZXh0IDogaW50bC5kZWZhdWx0VGV4dFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQGlmIChlbmFibGVSZXRyeSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDx3YXR0LWJ1dHRvbiB2YXJpYW50PVwic2Vjb25kYXJ5XCIgKGNsaWNrKT1cInJldHJ5LmVtaXQoKVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgaW50bC5lbXB0eVJldHJ5XG4gICAgICAgICAgICAgICAgICAgIH19PC93YXR0LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3dhdHQtZW1wdHktc3RhdGU+XG4gICAgICAgICAgICAgIDwvdmF0ZXItc3RhY2s+XG4gICAgICAgICAgICA8L3ZhdGVyLWZsZXg+XG4gICAgICAgICAgfVxuICAgICAgICA8L3ZhdGVyLWZsZXg+XG4gICAgICAgIEBpZiAoZW5hYmxlUGFnaW5hdG9yKCkpIHtcbiAgICAgICAgICA8d2F0dC1wYWdpbmF0b3JcbiAgICAgICAgICAgIFtmb3JdPVwidGFibGUoKS5kYXRhU291cmNlKClcIlxuICAgICAgICAgICAgW2xlbmd0aF09XCJjb3VudCgpID8/IDBcIlxuICAgICAgICAgICAgKGNoYW5nZWQpPVwicGFnZUNoYW5nZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICA8L3ZhdGVyLWZsZXg+XG4gICAgPC93YXR0LWNhcmQ+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIFdhdHREYXRhVGFibGVDb21wb25lbnQge1xuICBpbnRsID0gaW5qZWN0KFdhdHREYXRhSW50bFNlcnZpY2UpO1xuXG4gIGVycm9yID0gaW5wdXQ8dW5rbm93bj4oKTtcbiAgcmVhZHkgPSBpbnB1dCh0cnVlKTtcbiAgZW5hYmxlU2VhcmNoID0gaW5wdXQodHJ1ZSk7XG4gIHRyaW1TZWFyY2ggPSBpbnB1dCh0cnVlKTtcbiAgaGVhZGVyID0gaW5wdXQodHJ1ZSk7XG4gIGVuYWJsZVJldHJ5ID0gaW5wdXQoZmFsc2UpO1xuICBlbmFibGVDb3VudCA9IGlucHV0KHRydWUpO1xuICBlbmFibGVFbXB0eVN0YXRlID0gaW5wdXQodHJ1ZSk7XG4gIHF1ZXJ5VGltZSA9IGlucHV0PG51bWJlcj4oKTtcbiAgc2VhcmNoTGFiZWwgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGVuYWJsZVBhZ2luYXRvciA9IGlucHV0KHRydWUpO1xuICBjb3VudCA9IGlucHV0PG51bWJlcj4oKTtcbiAgYXV0b1NpemUgPSBpbnB1dChmYWxzZSk7XG4gIHZhcmlhbnQgPSBpbnB1dDxXQVRUX0NBUkRfVkFSSUFOVD4oJ2VsZXZhdGlvbicpO1xuICBlbXB0eVN0YXRlSWNvbiA9IGlucHV0PFdhdHRJY29uIHwgJ2N1c3RvbS1wb3dlcicgfCAnY3VzdG9tLWV4cGxvcmUnIHwgJ2N1c3RvbS1uby1yZXN1bHRzJz4oXG4gICAgJ2NhbmNlbCdcbiAgKTtcblxuICBjbGVhciA9IG91dHB1dCgpO1xuICBwYWdlQ2hhbmdlZCA9IG91dHB1dDxQYWdlRXZlbnQ+KCk7XG4gIHJldHJ5ID0gb3V0cHV0KCk7XG5cbiAgdGFibGUgPSBjb250ZW50Q2hpbGQucmVxdWlyZWQoV2F0dFRhYmxlQ29tcG9uZW50PHVua25vd24+LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pO1xuXG4gIHNlYXJjaCA9IHZpZXdDaGlsZChXYXR0U2VhcmNoQ29tcG9uZW50KTtcbiAgcmVzZXQgPSAoKSA9PiB0aGlzLnNlYXJjaCgpPy5jbGVhcigpO1xuXG4gIG9uU2VhcmNoKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRhYmxlKCkuZGF0YVNvdXJjZSgpLmZpbHRlciA9IHZhbHVlO1xuICAgIGlmICghdmFsdWUpIHRoaXMuY2xlYXIuZW1pdCgpO1xuICB9XG59XG4iXX0=
|
|
@@ -18,12 +18,12 @@
|
|
|
18
18
|
//#endregion
|
|
19
19
|
import { SelectionModel } from '@angular/cdk/collections';
|
|
20
20
|
import { KeyValuePipe, NgClass, NgTemplateOutlet } from '@angular/common';
|
|
21
|
-
import { Component,
|
|
22
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
21
|
+
import { Component, contentChild, contentChildren, Directive, effect, ElementRef, inject, input, Input, model, output, signal, TemplateRef, viewChild, viewChildren, ViewEncapsulation, } from '@angular/core';
|
|
22
|
+
import { outputFromObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
23
23
|
import { FormsModule } from '@angular/forms';
|
|
24
24
|
import { MatSort, MatSortModule } from '@angular/material/sort';
|
|
25
25
|
import { MatTableModule } from '@angular/material/table';
|
|
26
|
-
import { map } from 'rxjs';
|
|
26
|
+
import { map, Subject } from 'rxjs';
|
|
27
27
|
import { WattCheckboxComponent } from '@energinet/watt/checkbox';
|
|
28
28
|
import { WattDatePipe } from '@energinet/watt/core/date';
|
|
29
29
|
import { WattIconComponent } from '@energinet/watt/icon';
|
|
@@ -81,57 +81,57 @@ export class WattTableComponent {
|
|
|
81
81
|
* The table's source of data. Property should not be changed after
|
|
82
82
|
* initialization, instead update the data on the instance itself.
|
|
83
83
|
*/
|
|
84
|
-
dataSource;
|
|
84
|
+
dataSource = input.required(...(ngDevMode ? [{ debugName: "dataSource" }] : []));
|
|
85
85
|
/**
|
|
86
86
|
* Column definition record with keys representing the column identifiers
|
|
87
87
|
* and values being the column configuration. The order of the columns
|
|
88
88
|
* is determined by the property order, but can be overruled by the
|
|
89
89
|
* `displayedColumns` input.
|
|
90
90
|
*/
|
|
91
|
-
columns = {};
|
|
91
|
+
columns = input({}, ...(ngDevMode ? [{ debugName: "columns" }] : []));
|
|
92
92
|
/**
|
|
93
93
|
* Used for hiding or reordering columns defined in the `columns` input.
|
|
94
94
|
*/
|
|
95
|
-
displayedColumns;
|
|
95
|
+
displayedColumns = input(...(ngDevMode ? [undefined, { debugName: "displayedColumns" }] : []));
|
|
96
96
|
/**
|
|
97
97
|
* Used for disabling the table. This will disable all user interaction
|
|
98
98
|
*/
|
|
99
|
-
disabled = false;
|
|
99
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
|
|
100
100
|
/**
|
|
101
101
|
* Provide a description of the table for visually impaired users.
|
|
102
102
|
*/
|
|
103
|
-
description = '';
|
|
103
|
+
description = input('', ...(ngDevMode ? [{ debugName: "description" }] : []));
|
|
104
104
|
/**
|
|
105
105
|
* If set to `true`, the table will show a loading indicator
|
|
106
106
|
* when there is no data.
|
|
107
107
|
*/
|
|
108
|
-
loading = false;
|
|
108
|
+
loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
|
|
109
109
|
/**
|
|
110
110
|
* If true the footer will be sticky
|
|
111
111
|
*/
|
|
112
|
-
stickyFooter = false;
|
|
112
|
+
stickyFooter = input(false, ...(ngDevMode ? [{ debugName: "stickyFooter" }] : []));
|
|
113
113
|
/**
|
|
114
114
|
* Optional callback for determining header text for columns that
|
|
115
115
|
* do not have a static header text set in the column definition.
|
|
116
116
|
* Useful for providing translations of column headers.
|
|
117
117
|
*/
|
|
118
|
-
resolveHeader;
|
|
118
|
+
resolveHeader = input(...(ngDevMode ? [undefined, { debugName: "resolveHeader" }] : []));
|
|
119
119
|
/**
|
|
120
120
|
* Identifier for column that should be sorted initially.
|
|
121
121
|
*/
|
|
122
|
-
sortBy = '';
|
|
122
|
+
sortBy = input('', ...(ngDevMode ? [{ debugName: "sortBy" }] : []));
|
|
123
123
|
/**
|
|
124
124
|
* The sort direction of the initially sorted column.
|
|
125
125
|
*/
|
|
126
|
-
sortDirection = '';
|
|
126
|
+
sortDirection = input('', ...(ngDevMode ? [{ debugName: "sortDirection" }] : []));
|
|
127
127
|
/**
|
|
128
128
|
* Whether to allow the user to clear the sort. Defaults to `true`.
|
|
129
129
|
*/
|
|
130
|
-
sortClear = true;
|
|
130
|
+
sortClear = input(true, ...(ngDevMode ? [{ debugName: "sortClear" }] : []));
|
|
131
131
|
/**
|
|
132
132
|
* Whether the table should include a checkbox column for row selection.
|
|
133
133
|
*/
|
|
134
|
-
selectable = false;
|
|
134
|
+
selectable = input(false, ...(ngDevMode ? [{ debugName: "selectable" }] : []));
|
|
135
135
|
/**
|
|
136
136
|
* Sets the initially selected rows. Only works when selectable is `true`.
|
|
137
137
|
*/
|
|
@@ -139,11 +139,11 @@ export class WattTableComponent {
|
|
|
139
139
|
/**
|
|
140
140
|
* Set to true to disable row hover highlight.
|
|
141
141
|
*/
|
|
142
|
-
suppressRowHoverHighlight = false;
|
|
142
|
+
suppressRowHoverHighlight = input(false, ...(ngDevMode ? [{ debugName: "suppressRowHoverHighlight" }] : []));
|
|
143
143
|
/**
|
|
144
144
|
* Highlights the currently active row.
|
|
145
145
|
*/
|
|
146
|
-
activeRow;
|
|
146
|
+
activeRow = input(...(ngDevMode ? [undefined, { debugName: "activeRow" }] : []));
|
|
147
147
|
/**
|
|
148
148
|
* Custom comparator function to determine if two rows are equal.
|
|
149
149
|
*
|
|
@@ -153,11 +153,11 @@ export class WattTableComponent {
|
|
|
153
153
|
* as long as the instances remain the same, which may not be the case
|
|
154
154
|
* if row data is recreated or rebuilt from serialization.
|
|
155
155
|
*/
|
|
156
|
-
activeRowComparator;
|
|
156
|
+
activeRowComparator = input(...(ngDevMode ? [undefined, { debugName: "activeRowComparator" }] : []));
|
|
157
157
|
/**
|
|
158
158
|
* If set to `true`, the column headers will not be shown. Default is `false`.
|
|
159
159
|
*/
|
|
160
|
-
hideColumnHeaders = false;
|
|
160
|
+
hideColumnHeaders = input(false, ...(ngDevMode ? [{ debugName: "hideColumnHeaders" }] : []));
|
|
161
161
|
/**
|
|
162
162
|
* Choose from a predefined set of display variants.
|
|
163
163
|
*/
|
|
@@ -173,25 +173,29 @@ export class WattTableComponent {
|
|
|
173
173
|
/**
|
|
174
174
|
* Emits whenever the selection updates. Only works when selectable is `true`.
|
|
175
175
|
*/
|
|
176
|
-
selectionChange =
|
|
176
|
+
selectionChange = output();
|
|
177
|
+
/**
|
|
178
|
+
* @ignore
|
|
179
|
+
* The `observed` boolean from the `Subject` is used to determine if a row is
|
|
180
|
+
* clickable or not. This is available on `EventEmitter`, but not on `output`,
|
|
181
|
+
* which is why this workaround is used.
|
|
182
|
+
*/
|
|
183
|
+
_rowClick$ = new Subject();
|
|
177
184
|
/**
|
|
178
185
|
* Emits whenever a row is clicked.
|
|
179
186
|
*/
|
|
180
|
-
rowClick =
|
|
187
|
+
rowClick = outputFromObservable(this._rowClick$);
|
|
181
188
|
/**
|
|
182
189
|
* Event emitted when the user changes the active sort or sort direction.
|
|
183
190
|
*/
|
|
184
|
-
sortChange =
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
191
|
+
sortChange = output();
|
|
192
|
+
// Queries
|
|
193
|
+
cells = contentChildren((WattTableCellDirective), ...(ngDevMode ? [{ debugName: "cells" }] : []));
|
|
194
|
+
toolbar = contentChild((WattTableToolbarDirective), ...(ngDevMode ? [{ debugName: "toolbar" }] : []));
|
|
195
|
+
sort = viewChild(MatSort, ...(ngDevMode ? [{ debugName: "sort" }] : []));
|
|
196
|
+
tableCellElements = viewChildren('td', ...(ngDevMode ? [{ debugName: "tableCellElements" }] : []));
|
|
189
197
|
/** @ignore */
|
|
190
|
-
|
|
191
|
-
/** @ignore */
|
|
192
|
-
_tableCellElements = viewChildren('td', ...(ngDevMode ? [{ debugName: "_tableCellElements" }] : []));
|
|
193
|
-
/** @ignore */
|
|
194
|
-
_animationEffect = animateExpandableCells(this._tableCellElements, this.expanded);
|
|
198
|
+
_animationEffect = animateExpandableCells(this.tableCellElements, this.expanded);
|
|
195
199
|
/** @ignore */
|
|
196
200
|
_selectionModel = new SelectionModel(true, []);
|
|
197
201
|
/** @ignore */
|
|
@@ -222,7 +226,7 @@ export class WattTableComponent {
|
|
|
222
226
|
}
|
|
223
227
|
/** @ignore */
|
|
224
228
|
checkHasFooter() {
|
|
225
|
-
this._hasFooter.set(Object.values(this.columns).some((column) => !!column.footer));
|
|
229
|
+
this._hasFooter.set(Object.values(this.columns()).some((column) => !!column.footer));
|
|
226
230
|
}
|
|
227
231
|
constructor() {
|
|
228
232
|
effect(() => {
|
|
@@ -233,14 +237,15 @@ export class WattTableComponent {
|
|
|
233
237
|
.subscribe((selection) => this.selectionChange.emit(selection));
|
|
234
238
|
}
|
|
235
239
|
ngAfterViewInit() {
|
|
236
|
-
|
|
240
|
+
const dataSource = this.dataSource();
|
|
241
|
+
if (dataSource === undefined)
|
|
237
242
|
return;
|
|
238
243
|
this.checkHasFooter();
|
|
239
|
-
|
|
240
|
-
if (
|
|
244
|
+
dataSource.sort = this.sort();
|
|
245
|
+
if (dataSource instanceof WattTableDataSource === false)
|
|
241
246
|
return;
|
|
242
|
-
|
|
243
|
-
const sortColumn = this.columns[sortHeaderId];
|
|
247
|
+
dataSource.sortingDataAccessor = (row, sortHeaderId) => {
|
|
248
|
+
const sortColumn = this.columns()[sortHeaderId];
|
|
244
249
|
if (!sortColumn?.accessor)
|
|
245
250
|
return '';
|
|
246
251
|
// Access raw value for sorting, instead of applying default formatting.
|
|
@@ -256,15 +261,13 @@ export class WattTableComponent {
|
|
|
256
261
|
}
|
|
257
262
|
ngOnChanges(changes) {
|
|
258
263
|
if (changes['columns'] || changes['displayedColumns'] || changes['selectable']) {
|
|
259
|
-
const
|
|
260
|
-
|
|
261
|
-
return;
|
|
262
|
-
const sizing = Object.keys(this.columns)
|
|
264
|
+
const displayedColumns = this.displayedColumns();
|
|
265
|
+
const sizing = Object.keys(this.columns())
|
|
263
266
|
.filter((key) => !displayedColumns || displayedColumns.includes(key))
|
|
264
|
-
.map((key) => this.columns[key])
|
|
267
|
+
.map((key) => this.columns()[key])
|
|
265
268
|
.filter((column) => !column.expandable)
|
|
266
269
|
.map((column) => column.size ?? 'auto');
|
|
267
|
-
if (this.selectable) {
|
|
270
|
+
if (this.selectable()) {
|
|
268
271
|
// Add space for extra checkbox column
|
|
269
272
|
sizing.unshift('var(--watt-space-xl)');
|
|
270
273
|
}
|
|
@@ -280,50 +283,48 @@ export class WattTableComponent {
|
|
|
280
283
|
* Clears the selection. Only works when selectable is `true`.
|
|
281
284
|
*/
|
|
282
285
|
clearSelection() {
|
|
283
|
-
if (this.selectable) {
|
|
286
|
+
if (this.selectable()) {
|
|
284
287
|
this._selectionModel.clear();
|
|
285
288
|
}
|
|
286
289
|
}
|
|
287
290
|
/** @ignore */
|
|
288
291
|
get _columnSelection() {
|
|
289
|
-
if (this.dataSource.filteredData.length === 0)
|
|
292
|
+
if (this.dataSource().filteredData.length === 0)
|
|
290
293
|
return false;
|
|
291
|
-
return this.dataSource.filteredData.every((row) => this._selectionModel.isSelected(row));
|
|
294
|
+
return this.dataSource().filteredData.every((row) => this._selectionModel.isSelected(row));
|
|
292
295
|
}
|
|
293
296
|
/** @ignore */
|
|
294
297
|
set _columnSelection(value) {
|
|
295
298
|
if (value) {
|
|
296
|
-
this._selectionModel.setSelection(...this.dataSource.filteredData);
|
|
299
|
+
this._selectionModel.setSelection(...this.dataSource().filteredData);
|
|
297
300
|
}
|
|
298
301
|
else {
|
|
299
302
|
this.clearSelection();
|
|
300
303
|
}
|
|
301
304
|
}
|
|
302
305
|
get _filteredSelection() {
|
|
303
|
-
return this._selectionModel.selected.filter((row) => this.dataSource.filteredData.includes(row));
|
|
306
|
+
return this._selectionModel.selected.filter((row) => this.dataSource().filteredData.includes(row));
|
|
304
307
|
}
|
|
305
308
|
/** @ignore */
|
|
306
309
|
_getColumns() {
|
|
307
|
-
|
|
308
|
-
return [];
|
|
309
|
-
const columns = this.displayedColumns ?? Object.keys(this.columns);
|
|
310
|
+
const columns = this.displayedColumns() ?? Object.keys(this.columns());
|
|
310
311
|
return [
|
|
311
|
-
...(this.selectable ? [this._checkboxColumn] : []),
|
|
312
|
-
...columns.filter((key) => !this.columns[key].expandable),
|
|
312
|
+
...(this.selectable() ? [this._checkboxColumn] : []),
|
|
313
|
+
...columns.filter((key) => !this.columns()[key].expandable),
|
|
313
314
|
...(this._isExpandable() ? [this._expandableColumn] : []),
|
|
314
|
-
...columns.filter((key) => this.columns[key].expandable),
|
|
315
|
+
...columns.filter((key) => this.columns()[key].expandable),
|
|
315
316
|
];
|
|
316
317
|
}
|
|
317
318
|
/** @ignore */
|
|
318
319
|
_getColumnTemplate(column) {
|
|
319
|
-
return this.
|
|
320
|
+
return this.cells().find((item) => item.column === column)?.templateRef;
|
|
320
321
|
}
|
|
321
322
|
/** @ignore */
|
|
322
323
|
_getColumnHeader(column) {
|
|
323
324
|
if (typeof column.value.header === 'string')
|
|
324
325
|
return column.value.header;
|
|
325
|
-
const cell = this.
|
|
326
|
-
return cell?.header ?? this.resolveHeader?.(column.key) ?? column.key;
|
|
326
|
+
const cell = this.cells().find((item) => item.column === column.value);
|
|
327
|
+
return cell?.header ?? this.resolveHeader()?.(column.key) ?? column.key;
|
|
327
328
|
}
|
|
328
329
|
/** @ignore */
|
|
329
330
|
_getColumnHelperAction(column) {
|
|
@@ -344,31 +345,31 @@ export class WattTableComponent {
|
|
|
344
345
|
return row[trackBy];
|
|
345
346
|
if (typeof trackBy === 'function')
|
|
346
347
|
return trackBy(index, row);
|
|
347
|
-
return this.dataSource.data.indexOf(row);
|
|
348
|
+
return this.dataSource().data.indexOf(row);
|
|
348
349
|
};
|
|
349
350
|
/** @ignore */
|
|
350
351
|
_isActiveRow(row) {
|
|
351
|
-
|
|
352
|
+
const activeRow = this.activeRow();
|
|
353
|
+
const activeRowComparator = this.activeRowComparator();
|
|
354
|
+
if (!activeRow)
|
|
352
355
|
return false;
|
|
353
|
-
return
|
|
354
|
-
? this.activeRowComparator(row, this.activeRow)
|
|
355
|
-
: row === this.activeRow;
|
|
356
|
+
return activeRowComparator ? activeRowComparator(row, activeRow) : row === activeRow;
|
|
356
357
|
}
|
|
357
358
|
/** @ignore */
|
|
358
359
|
_isExpandable() {
|
|
359
|
-
return Object.values(this.columns).some((column) => column.expandable);
|
|
360
|
+
return Object.values(this.columns()).some((column) => column.expandable);
|
|
360
361
|
}
|
|
361
362
|
/** @ignore */
|
|
362
363
|
_onRowClick(row) {
|
|
363
|
-
if (this.disabled || window.getSelection()?.toString() !== '')
|
|
364
|
+
if (this.disabled() || window.getSelection()?.toString() !== '')
|
|
364
365
|
return;
|
|
365
366
|
if (this._isExpandable()) {
|
|
366
367
|
this.expanded.update((rows) => rows.includes(row) ? rows.filter((r) => r != row) : [...rows, row]);
|
|
367
368
|
}
|
|
368
|
-
this.
|
|
369
|
+
this._rowClick$.next(row);
|
|
369
370
|
}
|
|
370
371
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: WattTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
371
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: WattTableComponent, isStandalone: true, selector: "watt-table", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: false, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: false, isRequired: false, transformFunction: null }, displayedColumns: { classPropertyName: "displayedColumns", publicName: "displayedColumns", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: false, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: false, isRequired: false, transformFunction: null }, stickyFooter: { classPropertyName: "stickyFooter", publicName: "stickyFooter", isSignal: false, isRequired: false, transformFunction: null }, resolveHeader: { classPropertyName: "resolveHeader", publicName: "resolveHeader", isSignal: false, isRequired: false, transformFunction: null }, sortBy: { classPropertyName: "sortBy", publicName: "sortBy", isSignal: false, isRequired: false, transformFunction: null }, sortDirection: { classPropertyName: "sortDirection", publicName: "sortDirection", isSignal: false, isRequired: false, transformFunction: null }, sortClear: { classPropertyName: "sortClear", publicName: "sortClear", isSignal: false, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: false, isRequired: false, transformFunction: null }, initialSelection: { classPropertyName: "initialSelection", publicName: "initialSelection", isSignal: true, isRequired: false, transformFunction: null }, suppressRowHoverHighlight: { classPropertyName: "suppressRowHoverHighlight", publicName: "suppressRowHoverHighlight", isSignal: false, isRequired: false, transformFunction: null }, activeRow: { classPropertyName: "activeRow", publicName: "activeRow", isSignal: false, isRequired: false, transformFunction: null }, activeRowComparator: { classPropertyName: "activeRowComparator", publicName: "activeRowComparator", isSignal: false, isRequired: false, transformFunction: null }, hideColumnHeaders: { classPropertyName: "hideColumnHeaders", publicName: "hideColumnHeaders", isSignal: false, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null }, trackBy: { classPropertyName: "trackBy", publicName: "trackBy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { expanded: "expandedChange", selectionChange: "selectionChange", rowClick: "rowClick", sortChange: "sortChange" }, host: { properties: { "class.watt-table-variant-zebra": "variant() === \"zebra\"" } }, providers: [WattDatePipe], queries: [{ propertyName: "_toolbar", first: true, predicate: WattTableToolbarDirective, descendants: true }, { propertyName: "_cells", predicate: WattTableCellDirective }], viewQueries: [{ propertyName: "_tableCellElements", predicate: ["td"], descendants: true, isSignal: true }, { propertyName: "_sort", first: true, predicate: MatSort, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<table\n mat-table\n matSort\n role=\"treegrid\"\n [ngClass]=\"{ 'watt-table-has-selection': _filteredSelection.length > 0 }\"\n [matSortActive]=\"sortBy\"\n [matSortDirection]=\"sortDirection\"\n [matSortDisableClear]=\"!sortClear\"\n [dataSource]=\"dataSource\"\n [attr.aria-label]=\"description\"\n (matSortChange)=\"sortChange.emit($event)\"\n>\n @if (selectable) {\n <ng-container [matColumnDef]=\"_checkboxColumn\" [sticky]=\"true\">\n <th mat-header-cell *matHeaderCellDef class=\"watt-table-checkbox-cell\">\n <watt-checkbox [(ngModel)]=\"_columnSelection\" />\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"watt-table-checkbox-cell\">\n <watt-checkbox\n [ngModel]=\"_selectionModel.isSelected(row)\"\n (ngModelChange)=\"_selectionModel.toggle(row)\"\n (click)=\"$event.stopPropagation()\"\n />\n </td>\n </ng-container>\n }\n\n <ng-container [matColumnDef]=\"_expandableColumn\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td\n #td\n mat-cell\n *matCellDef=\"let row; let index = index\"\n [attr.data-key]=\"_getRowKey(index, row)\"\n [attr.data-row-index]=\"index\"\n (click)=\"_onRowClick(row)\"\n [class.watt-table-cell--expanded]=\"expanded().includes(row)\"\n >\n <watt-icon name=\"right\" size=\"xs\" />\n </td>\n </ng-container>\n\n @for (column of columns | keyvalue; track column.key) {\n <ng-container [matColumnDef]=\"column.key\" [stickyEnd]=\"column.value.stickyEnd?.()\">\n <th\n mat-header-cell\n *matHeaderCellDef\n [class.watt-table-cell--expandable]=\"column.value.expandable\"\n class=\"watt-table-align-{{ column.value.align ?? 'left' }} {{\n column.value.headerCellClass\n }}\"\n >\n @if (_getColumnHelperAction(column); as action) {\n <watt-icon name=\"help\" (click)=\"action()\" />\n }\n\n <div\n class=\"watt-table-header-cell\"\n mat-sort-header\n [arrowPosition]=\"column.value.align === 'right' ? 'before' : 'after'\"\n [disabled]=\"!column.value.accessor || column.value.sort === false\"\n >\n {{ _getColumnHeader(column) }}\n </div>\n @if (_getColumnHeaderTooltip(column); as tooltip) {\n <watt-icon [title]=\"tooltip\" name=\"info\" />\n }\n </th>\n\n <td\n #td\n mat-cell\n *matCellDef=\"let row; let index = index\"\n [attr.data-key]=\"_getRowKey(index, row)\"\n [attr.data-row-index]=\"index\"\n [class.watt-table-cell--expanded]=\"expanded().includes(row)\"\n [class.watt-table-cell--expandable]=\"column.value.expandable\"\n class=\"watt-table-align-{{ column.value.align ?? 'left' }} {{ column.value.dataCellClass }}\"\n (click)=\"!column.value.expandable && _onRowClick(row)\"\n >\n @if (_isExpandable()) {\n @defer (when !column.value.expandable || expanded().includes(row)) {\n @if (_getColumnTemplate(column.value); as template) {\n <div class=\"watt-table-cell-wrapper\">\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: row }\" />\n </div>\n } @else {\n {{ _getColumnCell(column, row) }}\n }\n }\n } @else {\n @if (_getColumnTemplate(column.value); as template) {\n <div class=\"watt-table-cell-wrapper\">\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: row }\" />\n </div>\n } @else {\n {{ _getColumnCell(column, row) }}\n }\n }\n </td>\n\n @if (_hasFooter()) {\n <td\n mat-footer-cell\n *matFooterCellDef\n class=\"{{ column.value.footer?.class }} watt-table-align-{{\n column.value.align ?? 'left'\n }} \"\n >\n {{ column.value.footer?.value?.() }}\n </td>\n }\n </ng-container>\n }\n\n <ng-container matColumnDef=\"spacer\">\n <td class=\"watt-table-footer-spacer\" mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n @if (!hideColumnHeaders) {\n <tr mat-header-row *matHeaderRowDef=\"_getColumns()\"></tr>\n }\n <tr\n mat-row\n *matRowDef=\"let row; columns: _getColumns()\"\n [attr.aria-selected]=\"row === activeRow\"\n [ngClass]=\"{\n 'watt-table-highlight-row': !disabled && !suppressRowHoverHighlight,\n 'watt-table-clickable-row': !disabled && rowClick.observed,\n 'watt-table-active-row': _isActiveRow(row),\n 'watt-table-no-end-divider': hideColumnHeaders,\n }\"\n ></tr>\n\n @if (_toolbar) {\n <tr mat-footer-row *matFooterRowDef=\"['spacer']\"></tr>\n }\n\n @if (_hasFooter()) {\n <tr\n mat-footer-row\n [class.watt-table-hide-footer]=\"loading || dataSource.filteredData.length === 0\"\n *matFooterRowDef=\"_getColumns(); sticky: stickyFooter\"\n ></tr>\n }\n\n <ng-container *matNoDataRow>\n @if (loading) {\n @for (i of [1, 2, 3]; track i) {\n <tr class=\"mat-mdc-row\">\n @for (_ of _getColumns(); track _; let i = $index) {\n <td class=\"mat-mdc-cell\" [class.watt-table-loading-cell]=\"i > 0 || !selectable\"></td>\n }\n </tr>\n }\n }\n </ng-container>\n</table>\n\n@if (_toolbar) {\n <div class=\"watt-table-toolbar\" role=\"toolbar\">\n <ng-container\n *ngTemplateOutlet=\"_toolbar.templateRef; context: { $implicit: _filteredSelection }\"\n />\n </div>\n}\n", styles: ["watt-table{--mat-table-row-item-label-text-font: $primary-font-family;--mat-table-row-item-outline-color: var(--watt-color-neutral-grey-300);--mat-table-header-headline-font: $primary-font-family}watt-table,watt-table .mat-mdc-table{display:grid;position:relative;overflow:auto;min-height:44px}watt-table .mat-mdc-table{grid-template-columns:var(--watt-table-grid-template-columns);grid-auto-rows:max-content;max-height:100%;z-index:1}watt-table .mat-mdc-table thead,watt-table .mat-mdc-table tbody,watt-table .mat-mdc-table tfoot,watt-table .mat-mdc-table tr.mat-mdc-row,watt-table .mat-mdc-table tr.mat-mdc-header-row,watt-table .mat-mdc-table tr.mat-mdc-footer-row{display:contents}watt-table .mat-mdc-table tr.watt-table-hide-footer{display:none}watt-table .mat-mdc-table tr.mat-mdc-header-row{flex:0 0 auto}watt-table .mat-mdc-table th.mat-mdc-header-cell{color:var(--watt-typography-label-color);font-size:.875rem;line-height:1.25rem;font-weight:600;text-transform:uppercase;box-sizing:border-box;display:flex;position:sticky;top:0;padding:0 var(--watt-space-s);height:auto;background:var(--watt-color-primary-ultralight);box-shadow:0 -1px #0000001f inset;border:0;z-index:2!important;white-space:nowrap;-webkit-user-select:none;user-select:none}watt-table .mat-mdc-table td.mat-mdc-footer-cell,watt-table .mat-mdc-table td.mat-mdc-cell{display:flex;align-items:center;min-height:56px;padding:var(--watt-space-s) var(--watt-space-m)}watt-table .mat-mdc-table td.mat-mdc-cell.watt-table-cell--expandable{padding:0}watt-table .mat-mdc-table td.mat-mdc-footer-cell:not(.watt-table-footer-spacer),watt-table .mat-mdc-table tr.mdc-data-table__row:last-child .mat-mdc-cell{border-bottom:1px solid var(--watt-color-neutral-grey-300)}watt-table .mat-mdc-table td.mat-mdc-footer-cell:not(.watt-table-footer-spacer){font-size:.875rem;line-height:1.25rem;font-weight:600;text-transform:none;letter-spacing:0;border-top:2px solid var(--watt-color-neutral-grey-300);background-color:var(--watt-color-neutral-grey-100)}watt-table .mat-mdc-table .watt-table-no-end-divider:last-child .mat-mdc-cell{border-bottom:0px solid var(--watt-color-neutral-grey-300)!important}watt-table .mat-mdc-table .watt-table-clickable-row>td:not(.watt-table-cell--expandable),watt-table .mat-mdc-table tr:has(>.watt-table-cell--expandable)>td:not(.watt-table-cell--expandable){cursor:pointer;-webkit-user-select:text;user-select:text}watt-table .mat-mdc-table .watt-table-highlight-row:hover:not(.watt-table-active-row,:has(>.watt-table-cell--expandable:hover))>td{background:var(--watt-color-neutral-grey-100)}watt-table .mat-mdc-table .watt-table-active-row>td{background:var(--watt-color-secondary-ultralight)}watt-table .mat-mdc-table .mat-column-__expandableColumn__>watt-icon{transition:transform .2s}watt-table .mat-mdc-table .mat-column-__expandableColumn__.watt-table-cell--expanded>watt-icon{transform:rotate(90deg)}watt-table .mat-mdc-table .mat-sort-header-arrow{margin:0}watt-table .mat-mdc-table .watt-table-align-right .mat-sort-header-arrow{margin-right:var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-align-center .mat-sort-header-arrow,watt-table .mat-mdc-table .watt-table-align-left .mat-sort-header-arrow{margin-left:var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-header-cell{padding:.75rem var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-checkbox-cell{justify-content:center}watt-table .mat-mdc-table th.watt-table-checkbox-cell{display:flex;align-items:center}watt-table .mat-mdc-table .watt-table-align-center,watt-table .mat-mdc-table .watt-table-align-center .mat-sort-header-container{justify-content:center}watt-table .mat-mdc-table .watt-table-align-right,watt-table .mat-mdc-table .watt-table-align-right .mat-sort-header-container{justify-content:right}.watt-table-variant-zebra>table>tbody>tr:nth-child(2n)>td{background-color:var(--watt-color-neutral-grey-50)}watt-table .mat-mdc-table th.watt-table-cell--expandable{display:none}watt-table .mat-mdc-table tr.mat-mdc-row td.mat-mdc-cell.watt-table-cell--expandable{position:relative;min-height:0;max-height:0;border-bottom-width:0;overflow:hidden;pointer-events:none;grid-column:1/-1;background:transparent;flex:1 1 auto;opacity:0;will-change:opacity;transition:opacity .2s cubic-bezier(.4,0,.2,1),overflow 0s .3s allow-discrete}watt-table .mat-mdc-table tr.mat-mdc-row td.mat-mdc-cell.watt-table-cell--expandable>.watt-table-cell-wrapper{position:absolute;top:0;width:100%}watt-table .mat-mdc-table tr.mat-mdc-row td.watt-table-cell--expandable.watt-table-cell--expanded{height:auto;max-height:initial;opacity:1;border-bottom-width:1px;pointer-events:all;overflow:visible}watt-table .mat-mdc-table tr.mat-mdc-row td.watt-table-cell--expandable.watt-table-cell--expanded>.watt-table-cell-wrapper{position:relative}.watt-table-footer-spacer{display:none;height:76px;border:0}.watt-table-has-selection .watt-table-footer-spacer{display:block}.watt-table-has-selection+.watt-table-toolbar{opacity:1;visibility:visible;transition:opacity .3s cubic-bezier(0,0,.2,1),visibility .5s}.watt-table-toolbar{position:absolute;bottom:var(--watt-space-m);left:50%;transform:translate(-50%);display:flex;align-items:center;padding:0 var(--watt-space-m);min-height:44px;border-radius:22px;color:var(--watt-color-primary-contrast);background-color:var(--watt-color-primary);z-index:1;opacity:0;visibility:hidden;transition:none}.watt-table-toolbar .watt-button--disabled{opacity:.4;--watt-button-primary-disabled-color: #fff}.watt-table-loading-cell:before{content:\"\";flex:1;display:block;max-width:200px;height:var(--watt-space-m);border-radius:var(--watt-space-m);opacity:.75;animation:shine 2s infinite linear;background-color:var(--watt-color-neutral-grey-200);background-size:300px;background-position:-100px;background-image:linear-gradient(90deg,var(--watt-color-neutral-grey-300) 0px,var(--watt-color-neutral-grey-200) 40px,var(--watt-color-neutral-grey-300) 80px)}@keyframes shine{40%,to{background-position:200px}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i2.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i2.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i3.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i3.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i3.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i3.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i3.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i3.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i3.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i3.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i3.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i3.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i3.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i3.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i3.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i3.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "directive", type: i3.MatNoDataRow, selector: "ng-template[matNoDataRow]" }, { kind: "component", type: WattIconComponent, selector: "watt-icon", inputs: ["name", "label", "size", "state"] }, { kind: "component", type: WattCheckboxComponent, selector: "watt-checkbox", inputs: ["required"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }], encapsulation: i0.ViewEncapsulation.None, deferBlockDependencies: [() => [NgTemplateOutlet]] });
|
|
372
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: WattTableComponent, isStandalone: true, selector: "watt-table", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, displayedColumns: { classPropertyName: "displayedColumns", publicName: "displayedColumns", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, stickyFooter: { classPropertyName: "stickyFooter", publicName: "stickyFooter", isSignal: true, isRequired: false, transformFunction: null }, resolveHeader: { classPropertyName: "resolveHeader", publicName: "resolveHeader", isSignal: true, isRequired: false, transformFunction: null }, sortBy: { classPropertyName: "sortBy", publicName: "sortBy", isSignal: true, isRequired: false, transformFunction: null }, sortDirection: { classPropertyName: "sortDirection", publicName: "sortDirection", isSignal: true, isRequired: false, transformFunction: null }, sortClear: { classPropertyName: "sortClear", publicName: "sortClear", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, initialSelection: { classPropertyName: "initialSelection", publicName: "initialSelection", isSignal: true, isRequired: false, transformFunction: null }, suppressRowHoverHighlight: { classPropertyName: "suppressRowHoverHighlight", publicName: "suppressRowHoverHighlight", isSignal: true, isRequired: false, transformFunction: null }, activeRow: { classPropertyName: "activeRow", publicName: "activeRow", isSignal: true, isRequired: false, transformFunction: null }, activeRowComparator: { classPropertyName: "activeRowComparator", publicName: "activeRowComparator", isSignal: true, isRequired: false, transformFunction: null }, hideColumnHeaders: { classPropertyName: "hideColumnHeaders", publicName: "hideColumnHeaders", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null }, trackBy: { classPropertyName: "trackBy", publicName: "trackBy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { expanded: "expandedChange", selectionChange: "selectionChange", rowClick: "rowClick", sortChange: "sortChange" }, host: { properties: { "class.watt-table-variant-zebra": "variant() === \"zebra\"" } }, providers: [WattDatePipe], queries: [{ propertyName: "cells", predicate: (WattTableCellDirective), isSignal: true }, { propertyName: "toolbar", first: true, predicate: (WattTableToolbarDirective), descendants: true, isSignal: true }], viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, isSignal: true }, { propertyName: "tableCellElements", predicate: ["td"], descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<table\n mat-table\n matSort\n role=\"treegrid\"\n [ngClass]=\"{ 'watt-table-has-selection': _filteredSelection.length > 0 }\"\n [matSortActive]=\"sortBy()\"\n [matSortDirection]=\"sortDirection()\"\n [matSortDisableClear]=\"!sortClear()\"\n [dataSource]=\"dataSource()\"\n [attr.aria-label]=\"description()\"\n (matSortChange)=\"sortChange.emit($event)\"\n>\n @if (selectable()) {\n <ng-container [matColumnDef]=\"_checkboxColumn\" [sticky]=\"true\">\n <th mat-header-cell *matHeaderCellDef class=\"watt-table-checkbox-cell\">\n <watt-checkbox [(ngModel)]=\"_columnSelection\" />\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"watt-table-checkbox-cell\">\n <watt-checkbox\n [ngModel]=\"_selectionModel.isSelected(row)\"\n (ngModelChange)=\"_selectionModel.toggle(row)\"\n (click)=\"$event.stopPropagation()\"\n />\n </td>\n </ng-container>\n }\n\n <ng-container [matColumnDef]=\"_expandableColumn\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td\n #td\n mat-cell\n *matCellDef=\"let row; let index = index\"\n [attr.data-key]=\"_getRowKey(index, row)\"\n [attr.data-row-index]=\"index\"\n (click)=\"_onRowClick(row)\"\n [class.watt-table-cell--expanded]=\"expanded().includes(row)\"\n >\n <watt-icon name=\"right\" size=\"xs\" />\n </td>\n </ng-container>\n\n @for (column of columns() | keyvalue; track column.key) {\n <ng-container [matColumnDef]=\"column.key\" [stickyEnd]=\"column.value.stickyEnd?.()\">\n <th\n mat-header-cell\n *matHeaderCellDef\n [class.watt-table-cell--expandable]=\"column.value.expandable\"\n class=\"watt-table-align-{{ column.value.align ?? 'left' }} {{\n column.value.headerCellClass\n }}\"\n >\n @if (_getColumnHelperAction(column); as action) {\n <watt-icon name=\"help\" (click)=\"action()\" />\n }\n\n <div\n class=\"watt-table-header-cell\"\n mat-sort-header\n [arrowPosition]=\"column.value.align === 'right' ? 'before' : 'after'\"\n [disabled]=\"!column.value.accessor || column.value.sort === false\"\n >\n {{ _getColumnHeader(column) }}\n </div>\n @if (_getColumnHeaderTooltip(column); as tooltip) {\n <watt-icon [title]=\"tooltip\" name=\"info\" />\n }\n </th>\n\n <td\n #td\n mat-cell\n *matCellDef=\"let row; let index = index\"\n [attr.data-key]=\"_getRowKey(index, row)\"\n [attr.data-row-index]=\"index\"\n [class.watt-table-cell--expanded]=\"expanded().includes(row)\"\n [class.watt-table-cell--expandable]=\"column.value.expandable\"\n class=\"watt-table-align-{{ column.value.align ?? 'left' }} {{ column.value.dataCellClass }}\"\n (click)=\"!column.value.expandable && _onRowClick(row)\"\n >\n @if (_isExpandable()) {\n @defer (when !column.value.expandable || expanded().includes(row)) {\n @if (_getColumnTemplate(column.value); as template) {\n <div class=\"watt-table-cell-wrapper\">\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: row }\" />\n </div>\n } @else {\n {{ _getColumnCell(column, row) }}\n }\n }\n } @else {\n @if (_getColumnTemplate(column.value); as template) {\n <div class=\"watt-table-cell-wrapper\">\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: row }\" />\n </div>\n } @else {\n {{ _getColumnCell(column, row) }}\n }\n }\n </td>\n\n @if (_hasFooter()) {\n <td\n mat-footer-cell\n *matFooterCellDef\n class=\"{{ column.value.footer?.class }} watt-table-align-{{\n column.value.align ?? 'left'\n }} \"\n >\n {{ column.value.footer?.value?.() }}\n </td>\n }\n </ng-container>\n }\n\n <ng-container matColumnDef=\"spacer\">\n <td class=\"watt-table-footer-spacer\" mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n @if (!hideColumnHeaders()) {\n <tr mat-header-row *matHeaderRowDef=\"_getColumns()\"></tr>\n }\n <tr\n mat-row\n *matRowDef=\"let row; columns: _getColumns()\"\n [attr.aria-selected]=\"row === activeRow()\"\n [ngClass]=\"{\n 'watt-table-highlight-row': !disabled() && !suppressRowHoverHighlight(),\n 'watt-table-clickable-row': !disabled() && _rowClick$.observed,\n 'watt-table-active-row': _isActiveRow(row),\n 'watt-table-no-end-divider': hideColumnHeaders(),\n }\"\n ></tr>\n\n @if (toolbar()) {\n <tr mat-footer-row *matFooterRowDef=\"['spacer']\"></tr>\n }\n\n @if (_hasFooter()) {\n <tr\n mat-footer-row\n [class.watt-table-hide-footer]=\"loading() || dataSource().filteredData.length === 0\"\n *matFooterRowDef=\"_getColumns(); sticky: stickyFooter()\"\n ></tr>\n }\n\n <ng-container *matNoDataRow>\n @if (loading()) {\n @for (i of [1, 2, 3]; track i) {\n <tr class=\"mat-mdc-row\">\n @for (_ of _getColumns(); track _; let i = $index) {\n <td class=\"mat-mdc-cell\" [class.watt-table-loading-cell]=\"i > 0 || !selectable()\"></td>\n }\n </tr>\n }\n }\n </ng-container>\n</table>\n\n@if (toolbar(); as toolbar) {\n <div class=\"watt-table-toolbar\" role=\"toolbar\">\n <ng-container\n *ngTemplateOutlet=\"toolbar.templateRef; context: { $implicit: _filteredSelection }\"\n />\n </div>\n}\n", styles: ["watt-table{--mat-table-row-item-label-text-font: $primary-font-family;--mat-table-row-item-outline-color: var(--watt-color-neutral-grey-300);--mat-table-header-headline-font: $primary-font-family}watt-table,watt-table .mat-mdc-table{display:grid;position:relative;overflow:auto;min-height:44px}watt-table .mat-mdc-table{grid-template-columns:var(--watt-table-grid-template-columns);grid-auto-rows:max-content;max-height:100%;z-index:1}watt-table .mat-mdc-table thead,watt-table .mat-mdc-table tbody,watt-table .mat-mdc-table tfoot,watt-table .mat-mdc-table tr.mat-mdc-row,watt-table .mat-mdc-table tr.mat-mdc-header-row,watt-table .mat-mdc-table tr.mat-mdc-footer-row{display:contents}watt-table .mat-mdc-table tr.watt-table-hide-footer{display:none}watt-table .mat-mdc-table tr.mat-mdc-header-row{flex:0 0 auto}watt-table .mat-mdc-table th.mat-mdc-header-cell{color:var(--watt-typography-label-color);font-size:.875rem;line-height:1.25rem;font-weight:600;text-transform:uppercase;box-sizing:border-box;display:flex;position:sticky;top:0;padding:0 var(--watt-space-s);height:auto;background:var(--watt-color-primary-ultralight);box-shadow:0 -1px #0000001f inset;border:0;z-index:2!important;white-space:nowrap;-webkit-user-select:none;user-select:none}watt-table .mat-mdc-table td.mat-mdc-footer-cell,watt-table .mat-mdc-table td.mat-mdc-cell{display:flex;align-items:center;min-height:56px;padding:var(--watt-space-s) var(--watt-space-m)}watt-table .mat-mdc-table td.mat-mdc-cell.watt-table-cell--expandable{padding:0}watt-table .mat-mdc-table td.mat-mdc-footer-cell:not(.watt-table-footer-spacer),watt-table .mat-mdc-table tr.mdc-data-table__row:last-child .mat-mdc-cell{border-bottom:1px solid var(--watt-color-neutral-grey-300)}watt-table .mat-mdc-table td.mat-mdc-footer-cell:not(.watt-table-footer-spacer){font-size:.875rem;line-height:1.25rem;font-weight:600;text-transform:none;letter-spacing:0;border-top:2px solid var(--watt-color-neutral-grey-300);background-color:var(--watt-color-neutral-grey-100)}watt-table .mat-mdc-table .watt-table-no-end-divider:last-child .mat-mdc-cell{border-bottom:0px solid var(--watt-color-neutral-grey-300)!important}watt-table .mat-mdc-table .watt-table-clickable-row>td:not(.watt-table-cell--expandable),watt-table .mat-mdc-table tr:has(>.watt-table-cell--expandable)>td:not(.watt-table-cell--expandable){cursor:pointer;-webkit-user-select:text;user-select:text}watt-table .mat-mdc-table .watt-table-highlight-row:hover:not(.watt-table-active-row,:has(>.watt-table-cell--expandable:hover))>td{background:var(--watt-color-neutral-grey-100)}watt-table .mat-mdc-table .watt-table-active-row>td{background:var(--watt-color-secondary-ultralight)}watt-table .mat-mdc-table .mat-column-__expandableColumn__>watt-icon{transition:transform .2s}watt-table .mat-mdc-table .mat-column-__expandableColumn__.watt-table-cell--expanded>watt-icon{transform:rotate(90deg)}watt-table .mat-mdc-table .mat-sort-header-arrow{margin:0}watt-table .mat-mdc-table .watt-table-align-right .mat-sort-header-arrow{margin-right:var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-align-center .mat-sort-header-arrow,watt-table .mat-mdc-table .watt-table-align-left .mat-sort-header-arrow{margin-left:var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-header-cell{padding:.75rem var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-checkbox-cell{justify-content:center}watt-table .mat-mdc-table th.watt-table-checkbox-cell{display:flex;align-items:center}watt-table .mat-mdc-table .watt-table-align-center,watt-table .mat-mdc-table .watt-table-align-center .mat-sort-header-container{justify-content:center}watt-table .mat-mdc-table .watt-table-align-right,watt-table .mat-mdc-table .watt-table-align-right .mat-sort-header-container{justify-content:right}.watt-table-variant-zebra>table>tbody>tr:nth-child(2n)>td{background-color:var(--watt-color-neutral-grey-50)}watt-table .mat-mdc-table th.watt-table-cell--expandable{display:none}watt-table .mat-mdc-table tr.mat-mdc-row td.mat-mdc-cell.watt-table-cell--expandable{position:relative;min-height:0;max-height:0;border-bottom-width:0;overflow:hidden;pointer-events:none;grid-column:1/-1;background:transparent;flex:1 1 auto;opacity:0;will-change:opacity;transition:opacity .2s cubic-bezier(.4,0,.2,1),overflow 0s .3s allow-discrete}watt-table .mat-mdc-table tr.mat-mdc-row td.mat-mdc-cell.watt-table-cell--expandable>.watt-table-cell-wrapper{position:absolute;top:0;width:100%}watt-table .mat-mdc-table tr.mat-mdc-row td.watt-table-cell--expandable.watt-table-cell--expanded{height:auto;max-height:initial;opacity:1;border-bottom-width:1px;pointer-events:all;overflow:visible}watt-table .mat-mdc-table tr.mat-mdc-row td.watt-table-cell--expandable.watt-table-cell--expanded>.watt-table-cell-wrapper{position:relative}.watt-table-footer-spacer{display:none;height:76px;border:0}.watt-table-has-selection .watt-table-footer-spacer{display:block}.watt-table-has-selection+.watt-table-toolbar{opacity:1;visibility:visible;transition:opacity .3s cubic-bezier(0,0,.2,1),visibility .5s}.watt-table-toolbar{position:absolute;bottom:var(--watt-space-m);left:50%;transform:translate(-50%);display:flex;align-items:center;padding:0 var(--watt-space-m);min-height:44px;border-radius:22px;color:var(--watt-color-primary-contrast);background-color:var(--watt-color-primary);z-index:1;opacity:0;visibility:hidden;transition:none}.watt-table-toolbar .watt-button--disabled{opacity:.4;--watt-button-primary-disabled-color: #fff}.watt-table-loading-cell:before{content:\"\";flex:1;display:block;max-width:200px;height:var(--watt-space-m);border-radius:var(--watt-space-m);opacity:.75;animation:shine 2s infinite linear;background-color:var(--watt-color-neutral-grey-200);background-size:300px;background-position:-100px;background-image:linear-gradient(90deg,var(--watt-color-neutral-grey-300) 0px,var(--watt-color-neutral-grey-200) 40px,var(--watt-color-neutral-grey-300) 80px)}@keyframes shine{40%,to{background-position:200px}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i2.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i2.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i3.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i3.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i3.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i3.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i3.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i3.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i3.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i3.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i3.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i3.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i3.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i3.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i3.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i3.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "directive", type: i3.MatNoDataRow, selector: "ng-template[matNoDataRow]" }, { kind: "component", type: WattIconComponent, selector: "watt-icon", inputs: ["name", "label", "size", "state"] }, { kind: "component", type: WattCheckboxComponent, selector: "watt-checkbox", inputs: ["required"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }], encapsulation: i0.ViewEncapsulation.None, deferBlockDependencies: [() => [NgTemplateOutlet]] });
|
|
372
373
|
}
|
|
373
374
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: WattTableComponent, decorators: [{
|
|
374
375
|
type: Component,
|
|
@@ -383,55 +384,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
|
|
|
383
384
|
WattCheckboxComponent,
|
|
384
385
|
], providers: [WattDatePipe], encapsulation: ViewEncapsulation.None, selector: 'watt-table', host: {
|
|
385
386
|
'[class.watt-table-variant-zebra]': 'variant() === "zebra"',
|
|
386
|
-
}, template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<table\n mat-table\n matSort\n role=\"treegrid\"\n [ngClass]=\"{ 'watt-table-has-selection': _filteredSelection.length > 0 }\"\n [matSortActive]=\"sortBy\"\n [matSortDirection]=\"sortDirection\"\n [matSortDisableClear]=\"!sortClear\"\n [dataSource]=\"dataSource\"\n [attr.aria-label]=\"description\"\n (matSortChange)=\"sortChange.emit($event)\"\n>\n @if (selectable) {\n <ng-container [matColumnDef]=\"_checkboxColumn\" [sticky]=\"true\">\n <th mat-header-cell *matHeaderCellDef class=\"watt-table-checkbox-cell\">\n <watt-checkbox [(ngModel)]=\"_columnSelection\" />\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"watt-table-checkbox-cell\">\n <watt-checkbox\n [ngModel]=\"_selectionModel.isSelected(row)\"\n (ngModelChange)=\"_selectionModel.toggle(row)\"\n (click)=\"$event.stopPropagation()\"\n />\n </td>\n </ng-container>\n }\n\n <ng-container [matColumnDef]=\"_expandableColumn\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td\n #td\n mat-cell\n *matCellDef=\"let row; let index = index\"\n [attr.data-key]=\"_getRowKey(index, row)\"\n [attr.data-row-index]=\"index\"\n (click)=\"_onRowClick(row)\"\n [class.watt-table-cell--expanded]=\"expanded().includes(row)\"\n >\n <watt-icon name=\"right\" size=\"xs\" />\n </td>\n </ng-container>\n\n @for (column of columns | keyvalue; track column.key) {\n <ng-container [matColumnDef]=\"column.key\" [stickyEnd]=\"column.value.stickyEnd?.()\">\n <th\n mat-header-cell\n *matHeaderCellDef\n [class.watt-table-cell--expandable]=\"column.value.expandable\"\n class=\"watt-table-align-{{ column.value.align ?? 'left' }} {{\n column.value.headerCellClass\n }}\"\n >\n @if (_getColumnHelperAction(column); as action) {\n <watt-icon name=\"help\" (click)=\"action()\" />\n }\n\n <div\n class=\"watt-table-header-cell\"\n mat-sort-header\n [arrowPosition]=\"column.value.align === 'right' ? 'before' : 'after'\"\n [disabled]=\"!column.value.accessor || column.value.sort === false\"\n >\n {{ _getColumnHeader(column) }}\n </div>\n @if (_getColumnHeaderTooltip(column); as tooltip) {\n <watt-icon [title]=\"tooltip\" name=\"info\" />\n }\n </th>\n\n <td\n #td\n mat-cell\n *matCellDef=\"let row; let index = index\"\n [attr.data-key]=\"_getRowKey(index, row)\"\n [attr.data-row-index]=\"index\"\n [class.watt-table-cell--expanded]=\"expanded().includes(row)\"\n [class.watt-table-cell--expandable]=\"column.value.expandable\"\n class=\"watt-table-align-{{ column.value.align ?? 'left' }} {{ column.value.dataCellClass }}\"\n (click)=\"!column.value.expandable && _onRowClick(row)\"\n >\n @if (_isExpandable()) {\n @defer (when !column.value.expandable || expanded().includes(row)) {\n @if (_getColumnTemplate(column.value); as template) {\n <div class=\"watt-table-cell-wrapper\">\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: row }\" />\n </div>\n } @else {\n {{ _getColumnCell(column, row) }}\n }\n }\n } @else {\n @if (_getColumnTemplate(column.value); as template) {\n <div class=\"watt-table-cell-wrapper\">\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: row }\" />\n </div>\n } @else {\n {{ _getColumnCell(column, row) }}\n }\n }\n </td>\n\n @if (_hasFooter()) {\n <td\n mat-footer-cell\n *matFooterCellDef\n class=\"{{ column.value.footer?.class }} watt-table-align-{{\n column.value.align ?? 'left'\n }} \"\n >\n {{ column.value.footer?.value?.() }}\n </td>\n }\n </ng-container>\n }\n\n <ng-container matColumnDef=\"spacer\">\n <td class=\"watt-table-footer-spacer\" mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n @if (!hideColumnHeaders) {\n <tr mat-header-row *matHeaderRowDef=\"_getColumns()\"></tr>\n }\n <tr\n mat-row\n *matRowDef=\"let row; columns: _getColumns()\"\n [attr.aria-selected]=\"row === activeRow\"\n [ngClass]=\"{\n 'watt-table-highlight-row': !disabled && !suppressRowHoverHighlight,\n 'watt-table-clickable-row': !disabled && rowClick.observed,\n 'watt-table-active-row': _isActiveRow(row),\n 'watt-table-no-end-divider': hideColumnHeaders,\n }\"\n ></tr>\n\n @if (_toolbar) {\n <tr mat-footer-row *matFooterRowDef=\"['spacer']\"></tr>\n }\n\n @if (_hasFooter()) {\n <tr\n mat-footer-row\n [class.watt-table-hide-footer]=\"loading || dataSource.filteredData.length === 0\"\n *matFooterRowDef=\"_getColumns(); sticky: stickyFooter\"\n ></tr>\n }\n\n <ng-container *matNoDataRow>\n @if (loading) {\n @for (i of [1, 2, 3]; track i) {\n <tr class=\"mat-mdc-row\">\n @for (_ of _getColumns(); track _; let i = $index) {\n <td class=\"mat-mdc-cell\" [class.watt-table-loading-cell]=\"i > 0 || !selectable\"></td>\n }\n </tr>\n }\n }\n </ng-container>\n</table>\n\n@if (_toolbar) {\n <div class=\"watt-table-toolbar\" role=\"toolbar\">\n <ng-container\n *ngTemplateOutlet=\"_toolbar.templateRef; context: { $implicit: _filteredSelection }\"\n />\n </div>\n}\n", styles: ["watt-table{--mat-table-row-item-label-text-font: $primary-font-family;--mat-table-row-item-outline-color: var(--watt-color-neutral-grey-300);--mat-table-header-headline-font: $primary-font-family}watt-table,watt-table .mat-mdc-table{display:grid;position:relative;overflow:auto;min-height:44px}watt-table .mat-mdc-table{grid-template-columns:var(--watt-table-grid-template-columns);grid-auto-rows:max-content;max-height:100%;z-index:1}watt-table .mat-mdc-table thead,watt-table .mat-mdc-table tbody,watt-table .mat-mdc-table tfoot,watt-table .mat-mdc-table tr.mat-mdc-row,watt-table .mat-mdc-table tr.mat-mdc-header-row,watt-table .mat-mdc-table tr.mat-mdc-footer-row{display:contents}watt-table .mat-mdc-table tr.watt-table-hide-footer{display:none}watt-table .mat-mdc-table tr.mat-mdc-header-row{flex:0 0 auto}watt-table .mat-mdc-table th.mat-mdc-header-cell{color:var(--watt-typography-label-color);font-size:.875rem;line-height:1.25rem;font-weight:600;text-transform:uppercase;box-sizing:border-box;display:flex;position:sticky;top:0;padding:0 var(--watt-space-s);height:auto;background:var(--watt-color-primary-ultralight);box-shadow:0 -1px #0000001f inset;border:0;z-index:2!important;white-space:nowrap;-webkit-user-select:none;user-select:none}watt-table .mat-mdc-table td.mat-mdc-footer-cell,watt-table .mat-mdc-table td.mat-mdc-cell{display:flex;align-items:center;min-height:56px;padding:var(--watt-space-s) var(--watt-space-m)}watt-table .mat-mdc-table td.mat-mdc-cell.watt-table-cell--expandable{padding:0}watt-table .mat-mdc-table td.mat-mdc-footer-cell:not(.watt-table-footer-spacer),watt-table .mat-mdc-table tr.mdc-data-table__row:last-child .mat-mdc-cell{border-bottom:1px solid var(--watt-color-neutral-grey-300)}watt-table .mat-mdc-table td.mat-mdc-footer-cell:not(.watt-table-footer-spacer){font-size:.875rem;line-height:1.25rem;font-weight:600;text-transform:none;letter-spacing:0;border-top:2px solid var(--watt-color-neutral-grey-300);background-color:var(--watt-color-neutral-grey-100)}watt-table .mat-mdc-table .watt-table-no-end-divider:last-child .mat-mdc-cell{border-bottom:0px solid var(--watt-color-neutral-grey-300)!important}watt-table .mat-mdc-table .watt-table-clickable-row>td:not(.watt-table-cell--expandable),watt-table .mat-mdc-table tr:has(>.watt-table-cell--expandable)>td:not(.watt-table-cell--expandable){cursor:pointer;-webkit-user-select:text;user-select:text}watt-table .mat-mdc-table .watt-table-highlight-row:hover:not(.watt-table-active-row,:has(>.watt-table-cell--expandable:hover))>td{background:var(--watt-color-neutral-grey-100)}watt-table .mat-mdc-table .watt-table-active-row>td{background:var(--watt-color-secondary-ultralight)}watt-table .mat-mdc-table .mat-column-__expandableColumn__>watt-icon{transition:transform .2s}watt-table .mat-mdc-table .mat-column-__expandableColumn__.watt-table-cell--expanded>watt-icon{transform:rotate(90deg)}watt-table .mat-mdc-table .mat-sort-header-arrow{margin:0}watt-table .mat-mdc-table .watt-table-align-right .mat-sort-header-arrow{margin-right:var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-align-center .mat-sort-header-arrow,watt-table .mat-mdc-table .watt-table-align-left .mat-sort-header-arrow{margin-left:var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-header-cell{padding:.75rem var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-checkbox-cell{justify-content:center}watt-table .mat-mdc-table th.watt-table-checkbox-cell{display:flex;align-items:center}watt-table .mat-mdc-table .watt-table-align-center,watt-table .mat-mdc-table .watt-table-align-center .mat-sort-header-container{justify-content:center}watt-table .mat-mdc-table .watt-table-align-right,watt-table .mat-mdc-table .watt-table-align-right .mat-sort-header-container{justify-content:right}.watt-table-variant-zebra>table>tbody>tr:nth-child(2n)>td{background-color:var(--watt-color-neutral-grey-50)}watt-table .mat-mdc-table th.watt-table-cell--expandable{display:none}watt-table .mat-mdc-table tr.mat-mdc-row td.mat-mdc-cell.watt-table-cell--expandable{position:relative;min-height:0;max-height:0;border-bottom-width:0;overflow:hidden;pointer-events:none;grid-column:1/-1;background:transparent;flex:1 1 auto;opacity:0;will-change:opacity;transition:opacity .2s cubic-bezier(.4,0,.2,1),overflow 0s .3s allow-discrete}watt-table .mat-mdc-table tr.mat-mdc-row td.mat-mdc-cell.watt-table-cell--expandable>.watt-table-cell-wrapper{position:absolute;top:0;width:100%}watt-table .mat-mdc-table tr.mat-mdc-row td.watt-table-cell--expandable.watt-table-cell--expanded{height:auto;max-height:initial;opacity:1;border-bottom-width:1px;pointer-events:all;overflow:visible}watt-table .mat-mdc-table tr.mat-mdc-row td.watt-table-cell--expandable.watt-table-cell--expanded>.watt-table-cell-wrapper{position:relative}.watt-table-footer-spacer{display:none;height:76px;border:0}.watt-table-has-selection .watt-table-footer-spacer{display:block}.watt-table-has-selection+.watt-table-toolbar{opacity:1;visibility:visible;transition:opacity .3s cubic-bezier(0,0,.2,1),visibility .5s}.watt-table-toolbar{position:absolute;bottom:var(--watt-space-m);left:50%;transform:translate(-50%);display:flex;align-items:center;padding:0 var(--watt-space-m);min-height:44px;border-radius:22px;color:var(--watt-color-primary-contrast);background-color:var(--watt-color-primary);z-index:1;opacity:0;visibility:hidden;transition:none}.watt-table-toolbar .watt-button--disabled{opacity:.4;--watt-button-primary-disabled-color: #fff}.watt-table-loading-cell:before{content:\"\";flex:1;display:block;max-width:200px;height:var(--watt-space-m);border-radius:var(--watt-space-m);opacity:.75;animation:shine 2s infinite linear;background-color:var(--watt-color-neutral-grey-200);background-size:300px;background-position:-100px;background-image:linear-gradient(90deg,var(--watt-color-neutral-grey-300) 0px,var(--watt-color-neutral-grey-200) 40px,var(--watt-color-neutral-grey-300) 80px)}@keyframes shine{40%,to{background-position:200px}}\n"] }]
|
|
387
|
-
}], ctorParameters: () => []
|
|
388
|
-
type: Input
|
|
389
|
-
}], columns: [{
|
|
390
|
-
type: Input
|
|
391
|
-
}], displayedColumns: [{
|
|
392
|
-
type: Input
|
|
393
|
-
}], disabled: [{
|
|
394
|
-
type: Input
|
|
395
|
-
}], description: [{
|
|
396
|
-
type: Input
|
|
397
|
-
}], loading: [{
|
|
398
|
-
type: Input
|
|
399
|
-
}], stickyFooter: [{
|
|
400
|
-
type: Input
|
|
401
|
-
}], resolveHeader: [{
|
|
402
|
-
type: Input
|
|
403
|
-
}], sortBy: [{
|
|
404
|
-
type: Input
|
|
405
|
-
}], sortDirection: [{
|
|
406
|
-
type: Input
|
|
407
|
-
}], sortClear: [{
|
|
408
|
-
type: Input
|
|
409
|
-
}], selectable: [{
|
|
410
|
-
type: Input
|
|
411
|
-
}], suppressRowHoverHighlight: [{
|
|
412
|
-
type: Input
|
|
413
|
-
}], activeRow: [{
|
|
414
|
-
type: Input
|
|
415
|
-
}], activeRowComparator: [{
|
|
416
|
-
type: Input
|
|
417
|
-
}], hideColumnHeaders: [{
|
|
418
|
-
type: Input
|
|
419
|
-
}], selectionChange: [{
|
|
420
|
-
type: Output
|
|
421
|
-
}], rowClick: [{
|
|
422
|
-
type: Output
|
|
423
|
-
}], sortChange: [{
|
|
424
|
-
type: Output
|
|
425
|
-
}], _cells: [{
|
|
426
|
-
type: ContentChildren,
|
|
427
|
-
args: [WattTableCellDirective]
|
|
428
|
-
}], _toolbar: [{
|
|
429
|
-
type: ContentChild,
|
|
430
|
-
args: [WattTableToolbarDirective]
|
|
431
|
-
}], _sort: [{
|
|
432
|
-
type: ViewChild,
|
|
433
|
-
args: [MatSort]
|
|
434
|
-
}] } });
|
|
387
|
+
}, template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<table\n mat-table\n matSort\n role=\"treegrid\"\n [ngClass]=\"{ 'watt-table-has-selection': _filteredSelection.length > 0 }\"\n [matSortActive]=\"sortBy()\"\n [matSortDirection]=\"sortDirection()\"\n [matSortDisableClear]=\"!sortClear()\"\n [dataSource]=\"dataSource()\"\n [attr.aria-label]=\"description()\"\n (matSortChange)=\"sortChange.emit($event)\"\n>\n @if (selectable()) {\n <ng-container [matColumnDef]=\"_checkboxColumn\" [sticky]=\"true\">\n <th mat-header-cell *matHeaderCellDef class=\"watt-table-checkbox-cell\">\n <watt-checkbox [(ngModel)]=\"_columnSelection\" />\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"watt-table-checkbox-cell\">\n <watt-checkbox\n [ngModel]=\"_selectionModel.isSelected(row)\"\n (ngModelChange)=\"_selectionModel.toggle(row)\"\n (click)=\"$event.stopPropagation()\"\n />\n </td>\n </ng-container>\n }\n\n <ng-container [matColumnDef]=\"_expandableColumn\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td\n #td\n mat-cell\n *matCellDef=\"let row; let index = index\"\n [attr.data-key]=\"_getRowKey(index, row)\"\n [attr.data-row-index]=\"index\"\n (click)=\"_onRowClick(row)\"\n [class.watt-table-cell--expanded]=\"expanded().includes(row)\"\n >\n <watt-icon name=\"right\" size=\"xs\" />\n </td>\n </ng-container>\n\n @for (column of columns() | keyvalue; track column.key) {\n <ng-container [matColumnDef]=\"column.key\" [stickyEnd]=\"column.value.stickyEnd?.()\">\n <th\n mat-header-cell\n *matHeaderCellDef\n [class.watt-table-cell--expandable]=\"column.value.expandable\"\n class=\"watt-table-align-{{ column.value.align ?? 'left' }} {{\n column.value.headerCellClass\n }}\"\n >\n @if (_getColumnHelperAction(column); as action) {\n <watt-icon name=\"help\" (click)=\"action()\" />\n }\n\n <div\n class=\"watt-table-header-cell\"\n mat-sort-header\n [arrowPosition]=\"column.value.align === 'right' ? 'before' : 'after'\"\n [disabled]=\"!column.value.accessor || column.value.sort === false\"\n >\n {{ _getColumnHeader(column) }}\n </div>\n @if (_getColumnHeaderTooltip(column); as tooltip) {\n <watt-icon [title]=\"tooltip\" name=\"info\" />\n }\n </th>\n\n <td\n #td\n mat-cell\n *matCellDef=\"let row; let index = index\"\n [attr.data-key]=\"_getRowKey(index, row)\"\n [attr.data-row-index]=\"index\"\n [class.watt-table-cell--expanded]=\"expanded().includes(row)\"\n [class.watt-table-cell--expandable]=\"column.value.expandable\"\n class=\"watt-table-align-{{ column.value.align ?? 'left' }} {{ column.value.dataCellClass }}\"\n (click)=\"!column.value.expandable && _onRowClick(row)\"\n >\n @if (_isExpandable()) {\n @defer (when !column.value.expandable || expanded().includes(row)) {\n @if (_getColumnTemplate(column.value); as template) {\n <div class=\"watt-table-cell-wrapper\">\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: row }\" />\n </div>\n } @else {\n {{ _getColumnCell(column, row) }}\n }\n }\n } @else {\n @if (_getColumnTemplate(column.value); as template) {\n <div class=\"watt-table-cell-wrapper\">\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: row }\" />\n </div>\n } @else {\n {{ _getColumnCell(column, row) }}\n }\n }\n </td>\n\n @if (_hasFooter()) {\n <td\n mat-footer-cell\n *matFooterCellDef\n class=\"{{ column.value.footer?.class }} watt-table-align-{{\n column.value.align ?? 'left'\n }} \"\n >\n {{ column.value.footer?.value?.() }}\n </td>\n }\n </ng-container>\n }\n\n <ng-container matColumnDef=\"spacer\">\n <td class=\"watt-table-footer-spacer\" mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n @if (!hideColumnHeaders()) {\n <tr mat-header-row *matHeaderRowDef=\"_getColumns()\"></tr>\n }\n <tr\n mat-row\n *matRowDef=\"let row; columns: _getColumns()\"\n [attr.aria-selected]=\"row === activeRow()\"\n [ngClass]=\"{\n 'watt-table-highlight-row': !disabled() && !suppressRowHoverHighlight(),\n 'watt-table-clickable-row': !disabled() && _rowClick$.observed,\n 'watt-table-active-row': _isActiveRow(row),\n 'watt-table-no-end-divider': hideColumnHeaders(),\n }\"\n ></tr>\n\n @if (toolbar()) {\n <tr mat-footer-row *matFooterRowDef=\"['spacer']\"></tr>\n }\n\n @if (_hasFooter()) {\n <tr\n mat-footer-row\n [class.watt-table-hide-footer]=\"loading() || dataSource().filteredData.length === 0\"\n *matFooterRowDef=\"_getColumns(); sticky: stickyFooter()\"\n ></tr>\n }\n\n <ng-container *matNoDataRow>\n @if (loading()) {\n @for (i of [1, 2, 3]; track i) {\n <tr class=\"mat-mdc-row\">\n @for (_ of _getColumns(); track _; let i = $index) {\n <td class=\"mat-mdc-cell\" [class.watt-table-loading-cell]=\"i > 0 || !selectable()\"></td>\n }\n </tr>\n }\n }\n </ng-container>\n</table>\n\n@if (toolbar(); as toolbar) {\n <div class=\"watt-table-toolbar\" role=\"toolbar\">\n <ng-container\n *ngTemplateOutlet=\"toolbar.templateRef; context: { $implicit: _filteredSelection }\"\n />\n </div>\n}\n", styles: ["watt-table{--mat-table-row-item-label-text-font: $primary-font-family;--mat-table-row-item-outline-color: var(--watt-color-neutral-grey-300);--mat-table-header-headline-font: $primary-font-family}watt-table,watt-table .mat-mdc-table{display:grid;position:relative;overflow:auto;min-height:44px}watt-table .mat-mdc-table{grid-template-columns:var(--watt-table-grid-template-columns);grid-auto-rows:max-content;max-height:100%;z-index:1}watt-table .mat-mdc-table thead,watt-table .mat-mdc-table tbody,watt-table .mat-mdc-table tfoot,watt-table .mat-mdc-table tr.mat-mdc-row,watt-table .mat-mdc-table tr.mat-mdc-header-row,watt-table .mat-mdc-table tr.mat-mdc-footer-row{display:contents}watt-table .mat-mdc-table tr.watt-table-hide-footer{display:none}watt-table .mat-mdc-table tr.mat-mdc-header-row{flex:0 0 auto}watt-table .mat-mdc-table th.mat-mdc-header-cell{color:var(--watt-typography-label-color);font-size:.875rem;line-height:1.25rem;font-weight:600;text-transform:uppercase;box-sizing:border-box;display:flex;position:sticky;top:0;padding:0 var(--watt-space-s);height:auto;background:var(--watt-color-primary-ultralight);box-shadow:0 -1px #0000001f inset;border:0;z-index:2!important;white-space:nowrap;-webkit-user-select:none;user-select:none}watt-table .mat-mdc-table td.mat-mdc-footer-cell,watt-table .mat-mdc-table td.mat-mdc-cell{display:flex;align-items:center;min-height:56px;padding:var(--watt-space-s) var(--watt-space-m)}watt-table .mat-mdc-table td.mat-mdc-cell.watt-table-cell--expandable{padding:0}watt-table .mat-mdc-table td.mat-mdc-footer-cell:not(.watt-table-footer-spacer),watt-table .mat-mdc-table tr.mdc-data-table__row:last-child .mat-mdc-cell{border-bottom:1px solid var(--watt-color-neutral-grey-300)}watt-table .mat-mdc-table td.mat-mdc-footer-cell:not(.watt-table-footer-spacer){font-size:.875rem;line-height:1.25rem;font-weight:600;text-transform:none;letter-spacing:0;border-top:2px solid var(--watt-color-neutral-grey-300);background-color:var(--watt-color-neutral-grey-100)}watt-table .mat-mdc-table .watt-table-no-end-divider:last-child .mat-mdc-cell{border-bottom:0px solid var(--watt-color-neutral-grey-300)!important}watt-table .mat-mdc-table .watt-table-clickable-row>td:not(.watt-table-cell--expandable),watt-table .mat-mdc-table tr:has(>.watt-table-cell--expandable)>td:not(.watt-table-cell--expandable){cursor:pointer;-webkit-user-select:text;user-select:text}watt-table .mat-mdc-table .watt-table-highlight-row:hover:not(.watt-table-active-row,:has(>.watt-table-cell--expandable:hover))>td{background:var(--watt-color-neutral-grey-100)}watt-table .mat-mdc-table .watt-table-active-row>td{background:var(--watt-color-secondary-ultralight)}watt-table .mat-mdc-table .mat-column-__expandableColumn__>watt-icon{transition:transform .2s}watt-table .mat-mdc-table .mat-column-__expandableColumn__.watt-table-cell--expanded>watt-icon{transform:rotate(90deg)}watt-table .mat-mdc-table .mat-sort-header-arrow{margin:0}watt-table .mat-mdc-table .watt-table-align-right .mat-sort-header-arrow{margin-right:var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-align-center .mat-sort-header-arrow,watt-table .mat-mdc-table .watt-table-align-left .mat-sort-header-arrow{margin-left:var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-header-cell{padding:.75rem var(--watt-space-s)}watt-table .mat-mdc-table .watt-table-checkbox-cell{justify-content:center}watt-table .mat-mdc-table th.watt-table-checkbox-cell{display:flex;align-items:center}watt-table .mat-mdc-table .watt-table-align-center,watt-table .mat-mdc-table .watt-table-align-center .mat-sort-header-container{justify-content:center}watt-table .mat-mdc-table .watt-table-align-right,watt-table .mat-mdc-table .watt-table-align-right .mat-sort-header-container{justify-content:right}.watt-table-variant-zebra>table>tbody>tr:nth-child(2n)>td{background-color:var(--watt-color-neutral-grey-50)}watt-table .mat-mdc-table th.watt-table-cell--expandable{display:none}watt-table .mat-mdc-table tr.mat-mdc-row td.mat-mdc-cell.watt-table-cell--expandable{position:relative;min-height:0;max-height:0;border-bottom-width:0;overflow:hidden;pointer-events:none;grid-column:1/-1;background:transparent;flex:1 1 auto;opacity:0;will-change:opacity;transition:opacity .2s cubic-bezier(.4,0,.2,1),overflow 0s .3s allow-discrete}watt-table .mat-mdc-table tr.mat-mdc-row td.mat-mdc-cell.watt-table-cell--expandable>.watt-table-cell-wrapper{position:absolute;top:0;width:100%}watt-table .mat-mdc-table tr.mat-mdc-row td.watt-table-cell--expandable.watt-table-cell--expanded{height:auto;max-height:initial;opacity:1;border-bottom-width:1px;pointer-events:all;overflow:visible}watt-table .mat-mdc-table tr.mat-mdc-row td.watt-table-cell--expandable.watt-table-cell--expanded>.watt-table-cell-wrapper{position:relative}.watt-table-footer-spacer{display:none;height:76px;border:0}.watt-table-has-selection .watt-table-footer-spacer{display:block}.watt-table-has-selection+.watt-table-toolbar{opacity:1;visibility:visible;transition:opacity .3s cubic-bezier(0,0,.2,1),visibility .5s}.watt-table-toolbar{position:absolute;bottom:var(--watt-space-m);left:50%;transform:translate(-50%);display:flex;align-items:center;padding:0 var(--watt-space-m);min-height:44px;border-radius:22px;color:var(--watt-color-primary-contrast);background-color:var(--watt-color-primary);z-index:1;opacity:0;visibility:hidden;transition:none}.watt-table-toolbar .watt-button--disabled{opacity:.4;--watt-button-primary-disabled-color: #fff}.watt-table-loading-cell:before{content:\"\";flex:1;display:block;max-width:200px;height:var(--watt-space-m);border-radius:var(--watt-space-m);opacity:.75;animation:shine 2s infinite linear;background-color:var(--watt-color-neutral-grey-200);background-size:300px;background-position:-100px;background-image:linear-gradient(90deg,var(--watt-color-neutral-grey-300) 0px,var(--watt-color-neutral-grey-200) 40px,var(--watt-color-neutral-grey-300) 80px)}@keyframes shine{40%,to{background-position:200px}}\n"] }]
|
|
388
|
+
}], ctorParameters: () => [] });
|
|
435
389
|
export class WattTableToolbarSpacerComponent {
|
|
436
390
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: WattTableToolbarSpacerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
437
391
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.3", type: WattTableToolbarSpacerComponent, isStandalone: true, selector: "watt-table-toolbar-spacer", ngImport: i0, template: '', isInline: true, styles: [":host{width:var(--watt-space-xl)}\n"] });
|
|
@@ -446,4 +400,4 @@ export const WATT_TABLE = [
|
|
|
446
400
|
WattTableToolbarDirective,
|
|
447
401
|
WattTableToolbarSpacerComponent,
|
|
448
402
|
];
|
|
449
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL3dhdHQvcGFja2FnZS90YWJsZS93YXR0LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2xpYnMvd2F0dC9wYWNrYWdlL3RhYmxlL3dhdHQtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCO0FBQ2pCOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFlBQVk7QUFDWixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFZLFlBQVksRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRixPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUNMLEtBQUssRUFFTCxNQUFNLEVBQ04sTUFBTSxFQUVOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQXVCLE1BQU0sd0JBQXdCLENBQUM7QUFDckYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDakUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pE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QWE7c0JBRFosS0FBSztnQkFPTixTQUFTO3NCQURSLEtBQUs7Z0JBT04sVUFBVTtzQkFEVCxLQUFLO2dCQVlOLHlCQUF5QjtzQkFEeEIsS0FBSztnQkFPTixTQUFTO3NCQURSLEtBQUs7Z0JBYU4sbUJBQW1CO3NCQURsQixLQUFLO2dCQU9OLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFzQk4sZUFBZTtzQkFEZCxNQUFNO2dCQU9QLFFBQVE7c0JBRFAsTUFBTTtnQkFPUCxVQUFVO3NCQURULE1BQU07Z0JBS1AsTUFBTTtzQkFETCxlQUFlO3VCQUFDLHNCQUFzQjtnQkFLdkMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLHlCQUF5QjtnQkFLdkMsS0FBSztzQkFESixTQUFTO3VCQUFDLE9BQU87O0FBaU9wQixNQUFNLE9BQU8sK0JBQStCO3VHQUEvQiwrQkFBK0I7MkZBQS9CLCtCQUErQixxRkFUaEMsRUFBRTs7MkZBU0QsK0JBQStCO2tCQVgzQyxTQUFTOytCQUNFLDJCQUEyQixZQUMzQixFQUFFOztBQVdkLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixrQkFBa0I7SUFDbEIsc0JBQXNCO0lBQ3RCLHlCQUF5QjtJQUN6QiwrQkFBK0I7Q0FDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vI3JlZ2lvbiBMaWNlbnNlXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBFbmVyZ2luZXQgRGF0YUh1YiBBL1NcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlMlwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyNlbmRyZWdpb25cbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEtleVZhbHVlLCBLZXlWYWx1ZVBpcGUsIE5nQ2xhc3MsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBlZmZlY3QsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgSW5wdXQsXG4gIG1vZGVsLFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgc2lnbmFsLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICB2aWV3Q2hpbGRyZW4sXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgUXVlcnlMaXN0LCBTaWduYWwsIFRyYWNrQnlGdW5jdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRTb3J0LCBNYXRTb3J0TW9kdWxlLCBTb3J0LCBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBXYXR0Q2hlY2tib3hDb21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvY2hlY2tib3gnO1xuaW1wb3J0IHsgV2F0dERhdGVQaXBlIH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2NvcmUvZGF0ZSc7XG5pbXBvcnQgeyBXYXR0SWNvbkNvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC9pY29uJztcbmltcG9ydCB7IElXYXR0VGFibGVEYXRhU291cmNlLCBXYXR0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi93YXR0LXRhYmxlLWRhdGEtc291cmNlJztcbmltcG9ydCB7IGFuaW1hdGVFeHBhbmRhYmxlQ2VsbHMgfSBmcm9tICcuL3dhdHQtdGFibGUtZXhwYW5kLWFuaW1hdGlvbic7XG5cbi8qKiBDbGFzcyBuYW1lIGZvciBleHBhbmRhYmxlIGNlbGxzLiAqL1xuZXhwb3J0IGNvbnN0IEVYUEFOREFCTEVfQ0xBU1MgPSAnd2F0dC10YWJsZS1jZWxsLS1leHBhbmRhYmxlJztcblxuZXhwb3J0IGludGVyZmFjZSBXYXR0VGFibGVDb2x1bW48VD4ge1xuICAvKipcbiAgICogVGhlIGRhdGEgdGhhdCB0aGlzIGNvbHVtbiBzaG91bGQgYmUgYm91bmQgdG8sIGVpdGhlciBhcyBhIHByb3BlcnR5IG9mIGBUYFxuICAgKiBvciBkZXJpdmVkIGZyb20gZWFjaCByb3cgb2YgYFRgIHVzaW5nIGFuIGFjY2Vzc29yIGZ1bmN0aW9uLiAgVXNlIGBudWxsYFxuICAgKiBmb3IgY29sdW1ucyB0aGF0IHNob3VsZCBub3QgYmUgYXNzb2NpYXRlZCB3aXRoIGRhdGEsIGJ1dCBub3RlIHRoYXQgdGhpc1xuICAgKiB3aWxsIGRpc2FibGUgc29ydGluZyBhbmQgYXV0b21hdGljIGNlbGwgcG9wdWxhdGlvbi5cbiAgICovXG4gIGFjY2Vzc29yOiBrZXlvZiBUIHwgKChyb3c6IFQpID0+IHVua25vd24pIHwgbnVsbDtcblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgaGVhZGVyIHRleHQgdG8gYSBzdGF0aWMgZGlzcGxheSB2YWx1ZS4gVGhpcyB3aWxsIHByZXZlbnRcbiAgICogdGhlIGByZXNvbHZlSGVhZGVyYCBpbnB1dCBmdW5jdGlvbiBmcm9tIGJlaW5nIGNhbGxlZCBmb3IgdGhpcyBjb2x1bW4uXG4gICAqL1xuICBoZWFkZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZvciBkZXRlcm1pbmluZyBjZWxsIGNvbnRlbnQgd2hlbiBub3QgdXNpbmcgdGVtcGxhdGUuIEJ5IGRlZmF1bHQsXG4gICAqIGNlbGwgY29udGVudCBpcyBmb3VuZCB1c2luZyB0aGUgYGFjY2Vzc29yYCAodW5sZXNzIGl0IGlzIGBudWxsYCkuXG4gICAqL1xuICBjZWxsPzogKHJvdzogVCkgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBzb3J0aW5nIGZvciB0aGlzIGNvbHVtbi4gRGVmYXVsdHMgdG8gYHRydWVgXG4gICAqIHVubGVzcyBgYWNjZXNzb3JgIGlzIGBudWxsYC5cbiAgICovXG4gIHNvcnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNvbHVtbiBzaXplIHVzaW5nIGdyaWQgc2l6aW5nIHZhbHVlcy4gRGVmYXVsdHMgdG8gYFwiYXV0b1wiYC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogQWNjZXB0cyBhbGwgb2YgdGhlIENTUyBncmlkIHRyYWNrIHNpemUga2V5d29yZHMgKHN1Y2ggYXMgYG1pbi1jb250ZW50YCxcbiAgICogYG1heC1jb250ZW50YCwgYG1pbm1heCgpYCkgYXMgd2VsbCBhcyBmcmFjdGlvbmFsIChgZnJgKSwgcGVyY2VudGFnZSAoYCVgKVxuICAgKiBhbmQgbGVuZ3RoIChgcHhgLCBgZW1gLCBldGMpIHVuaXRzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtZ3JpZC8jdHJhY2stc2l6ZXNcbiAgICovXG4gIHNpemU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEhvcml6b250YWxseSBhbGlnbiB0aGUgY29udGVudHMgb2YgdGhlIGNvbHVtbi4gRGVmYXVsdHMgdG8gYFwibGVmdFwiYC5cbiAgICovXG4gIGFsaWduPzogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdjZW50ZXInO1xuXG4gIC8qKlxuICAgKiBIZWxwZXIgaWNvbiB3aWxsIGJlIHNob3duIGluIHRoZSBoZWFkZXIgY2VsbCwgd2l0aCBhbiBjbGljayBldmVudC5cbiAgICovXG4gIGhlbHBlckFjdGlvbj86ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENTUyBjbGFzcyB0byBhcHBseSB0byB0aGUgaGVhZGVyIGNlbGwgZWxlbWVudC5cbiAgICovXG4gIGhlYWRlckNlbGxDbGFzcz86IHN0cmluZztcblxuICAvKipcbiAgICogQ1NTIGNsYXNzIHRvIGFwcGx5IHRvIHRoZSBkYXRhIGNlbGwgZWxlbWVudC5cbiAgICovXG4gIGRhdGFDZWxsQ2xhc3M/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZvb3RlciBjb25maWd1cmF0aW9uIGZvciB0aGUgY29sdW1uLlxuICAgKi9cbiAgZm9vdGVyPzogV2F0dFRhYmxlQ29sdW1uRm9vdGVyO1xuXG4gIC8qKlxuICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAsIHRoZSBjb2x1bW4gcmVtYWlucyB2aXNpYmxlIHdoZW4gaG9yaXpvbnRhbGx5IHNjcm9sbGluZy5cbiAgICovXG4gIHN0aWNreUVuZD86IFNpZ25hbDxib29sZWFuPjtcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIHRoZSBjZWxsIGlzIHJlcGxhY2VkIHdpdGggYW4gZXhwYW5kYWJsZSBhcnJvdyBhbmQgdGhlIGNvbnRlbnQgaXMgZGVmZXJyZWQuXG4gICAqIENsaWNraW5nIG9uIHRoZSBhcnJvdyByZXZlYWxzIHRoZSBjb250ZW50IGJlbG93IHRoZSBjdXJyZW50IHJvdy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSXQgaXMgcmVjb21tZW5kZWQgdG8gcHJvdmlkZSBhIGN1c3RvbSBgdHJhY2tCeWAgZnVuY3Rpb24gd2hlbiB1c2luZyBgZXhwYW5kYWJsZWAsXG4gICAqIG90aGVyd2lzZSBhbmltYXRpb25zIGNhbiBiZSBpbmFjY3VyYXRlIHdoZW4gZGF0YSBpcyBjaGFuZ2VkLlxuICAgKi9cbiAgZXhwYW5kYWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRvb2x0aXAgdGV4dCB0byBzaG93IG9uIGhvdmVyIG9mIHRoZSBoZWFkZXIgY2VsbC5cbiAgICovXG4gIHRvb2x0aXA/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIGZvb3RlciBjZWxsIG9mIGEgY29sdW1uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdhdHRUYWJsZUNvbHVtbkZvb3RlciB7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgZm9vdGVyIGNlbGwuXG4gICAqL1xuICB2YWx1ZT86IFNpZ25hbDxzdHJpbmcgfCBudW1iZXI+O1xuXG4gIC8qKlxuICAgKiBDU1MgY2xhc3MgdG8gYXBwbHkgdG8gdGhlIGZvb3RlciBjZWxsLlxuICAgKi9cbiAgY2xhc3M/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVjb3JkIGZvciBkZWZpbmluZyBjb2x1bW5zIHdpdGgga2V5cyB1c2VkIGFzIGNvbHVtbiBpZGVudGlmaWVycy5cbiAqL1xuZXhwb3J0IHR5cGUgV2F0dFRhYmxlQ29sdW1uRGVmPFQ+ID0gUmVjb3JkPHN0cmluZywgV2F0dFRhYmxlQ29sdW1uPFQ+PjtcblxuLy8gVXNlZCBmb3Igc3Ryb25nbHkgdHlwaW5nIHRoZSBzdHJ1Y3R1cmFsIGRpcmVjdGl2ZVxuaW50ZXJmYWNlIFdhdHRUYWJsZUNlbGxDb250ZXh0PFQ+IHtcbiAgJGltcGxpY2l0OiBUO1xufVxuXG5pbnRlcmZhY2UgV2F0dFRhYmxlVG9vbGJhckNvbnRleHQ8VD4ge1xuICAkaW1wbGljaXQ6IFQ7XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t3YXR0VGFibGVDZWxsXScsXG59KVxuZXhwb3J0IGNsYXNzIFdhdHRUYWJsZUNlbGxEaXJlY3RpdmU8VD4ge1xuICAvKiogVGhlIFdhdHRUYWJsZUNvbHVtbiB0aGlzIHRlbXBsYXRlIGFwcGxpZXMgdG8uICovXG4gIEBJbnB1dCgnd2F0dFRhYmxlQ2VsbCcpIGNvbHVtbiE6IFdhdHRUYWJsZUNvbHVtbjxUPjtcbiAgQElucHV0KCd3YXR0VGFibGVDZWxsSGVhZGVyJykgaGVhZGVyPzogc3RyaW5nO1xuICB0ZW1wbGF0ZVJlZiA9IGluamVjdChUZW1wbGF0ZVJlZjxXYXR0VGFibGVDZWxsQ29udGV4dDxUPj4pO1xuICBzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZDxUPihcbiAgICBfZGlyZWN0aXZlOiBXYXR0VGFibGVDZWxsRGlyZWN0aXZlPFQ+LFxuICAgIGNvbnRleHQ6IHVua25vd25cbiAgKTogY29udGV4dCBpcyBXYXR0VGFibGVDZWxsQ29udGV4dDxUPiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3dhdHRUYWJsZVRvb2xiYXJdJyxcbn0pXG5leHBvcnQgY2xhc3MgV2F0dFRhYmxlVG9vbGJhckRpcmVjdGl2ZTxUPiB7XG4gIHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmPFdhdHRUYWJsZVRvb2xiYXJDb250ZXh0PFRbXT4+KTtcbiAgc3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQ8VD4oXG4gICAgX2RpcmVjdGl2ZTogV2F0dFRhYmxlVG9vbGJhckRpcmVjdGl2ZTxUPixcbiAgICBjb250ZXh0OiB1bmtub3duXG4gICk6IGNvbnRleHQgaXMgV2F0dFRhYmxlVG9vbGJhckNvbnRleHQ8VFtdPiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBVc2FnZTpcbiAqIGBpbXBvcnQgeyBXQVRUX1RBQkxFIH0gZnJvbSAnQGVuZXJnaW5ldC1kYXRhaHViL3dhdHQvdGFibGUnO2BcbiAqL1xuQENvbXBvbmVudCh7XG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgS2V5VmFsdWVQaXBlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdFNvcnRNb2R1bGUsXG4gICAgTWF0VGFibGVNb2R1bGUsXG4gICAgV2F0dEljb25Db21wb25lbnQsXG4gICAgV2F0dENoZWNrYm94Q29tcG9uZW50LFxuICBdLFxuICBwcm92aWRlcnM6IFtXYXR0RGF0ZVBpcGVdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzZWxlY3RvcjogJ3dhdHQtdGFibGUnLFxuICBzdHlsZVVybHM6IFsnLi93YXR0LXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi93YXR0LXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDoge1xuICAgICdbY2xhc3Mud2F0dC10YWJsZS12YXJpYW50LXplYnJhXSc6ICd2YXJpYW50KCkgPT09IFwiemVicmFcIicsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIFdhdHRUYWJsZUNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8qKlxuICAgKiBUaGUgdGFibGUncyBzb3VyY2Ugb2YgZGF0YS4gUHJvcGVydHkgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGFmdGVyXG4gICAqIGluaXRpYWxpemF0aW9uLCBpbnN0ZWFkIHVwZGF0ZSB0aGUgZGF0YSBvbiB0aGUgaW5zdGFuY2UgaXRzZWxmLlxuICAgKi9cbiAgQElucHV0KCkgZGF0YVNvdXJjZSE6IElXYXR0VGFibGVEYXRhU291cmNlPFQ+O1xuXG4gIC8qKlxuICAgKiBDb2x1bW4gZGVmaW5pdGlvbiByZWNvcmQgd2l0aCBrZXlzIHJlcHJlc2VudGluZyB0aGUgY29sdW1uIGlkZW50aWZpZXJzXG4gICAqIGFuZCB2YWx1ZXMgYmVpbmcgdGhlIGNvbHVtbiBjb25maWd1cmF0aW9uLiBUaGUgb3JkZXIgb2YgdGhlIGNvbHVtbnNcbiAgICogaXMgZGV0ZXJtaW5lZCBieSB0aGUgcHJvcGVydHkgb3JkZXIsIGJ1dCBjYW4gYmUgb3ZlcnJ1bGVkIGJ5IHRoZVxuICAgKiBgZGlzcGxheWVkQ29sdW1uc2AgaW5wdXQuXG4gICAqL1xuICBASW5wdXQoKSBjb2x1bW5zOiBXYXR0VGFibGVDb2x1bW5EZWY8VD4gPSB7fTtcblxuICAvKipcbiAgICogVXNlZCBmb3IgaGlkaW5nIG9yIHJlb3JkZXJpbmcgY29sdW1ucyBkZWZpbmVkIGluIHRoZSBgY29sdW1uc2AgaW5wdXQuXG4gICAqL1xuICBASW5wdXQoKSBkaXNwbGF5ZWRDb2x1bW5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFVzZWQgZm9yIGRpc2FibGluZyB0aGUgdGFibGUuIFRoaXMgd2lsbCBkaXNhYmxlIGFsbCB1c2VyIGludGVyYWN0aW9uXG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlIGEgZGVzY3JpcHRpb24gb2YgdGhlIHRhYmxlIGZvciB2aXN1YWxseSBpbXBhaXJlZCB1c2Vycy5cbiAgICovXG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uID0gJyc7XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byBgdHJ1ZWAsIHRoZSB0YWJsZSB3aWxsIHNob3cgYSBsb2FkaW5nIGluZGljYXRvclxuICAgKiB3aGVuIHRoZXJlIGlzIG5vIGRhdGEuXG4gICAqL1xuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElmIHRydWUgdGhlIGZvb3RlciB3aWxsIGJlIHN0aWNreVxuICAgKi9cbiAgQElucHV0KCkgc3RpY2t5Rm9vdGVyID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNhbGxiYWNrIGZvciBkZXRlcm1pbmluZyBoZWFkZXIgdGV4dCBmb3IgY29sdW1ucyB0aGF0XG4gICAqIGRvIG5vdCBoYXZlIGEgc3RhdGljIGhlYWRlciB0ZXh0IHNldCBpbiB0aGUgY29sdW1uIGRlZmluaXRpb24uXG4gICAqIFVzZWZ1bCBmb3IgcHJvdmlkaW5nIHRyYW5zbGF0aW9ucyBvZiBjb2x1bW4gaGVhZGVycy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHJlc29sdmVIZWFkZXI/OiAoa2V5OiBzdHJpbmcpID0+IHN0cmluZztcblxuICAvKipcbiAgICogSWRlbnRpZmllciBmb3IgY29sdW1uIHRoYXQgc2hvdWxkIGJlIHNvcnRlZCBpbml0aWFsbHkuXG4gICAqL1xuICBASW5wdXQoKVxuICBzb3J0QnkgPSAnJztcblxuICAvKipcbiAgICogVGhlIHNvcnQgZGlyZWN0aW9uIG9mIHRoZSBpbml0aWFsbHkgc29ydGVkIGNvbHVtbi5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNvcnREaXJlY3Rpb246IFNvcnREaXJlY3Rpb24gPSAnJztcblxuICAvKipcbiAgICogV2hldGhlciB0byBhbGxvdyB0aGUgdXNlciB0byBjbGVhciB0aGUgc29ydC4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKi9cbiAgQElucHV0KClcbiAgc29ydENsZWFyID0gdHJ1ZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdGFibGUgc2hvdWxkIGluY2x1ZGUgYSBjaGVja2JveCBjb2x1bW4gZm9yIHJvdyBzZWxlY3Rpb24uXG4gICAqL1xuICBASW5wdXQoKVxuICBzZWxlY3RhYmxlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGluaXRpYWxseSBzZWxlY3RlZCByb3dzLiBPbmx5IHdvcmtzIHdoZW4gc2VsZWN0YWJsZSBpcyBgdHJ1ZWAuXG4gICAqL1xuICBpbml0aWFsU2VsZWN0aW9uID0gaW5wdXQ8VFtdPihbXSk7XG5cbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIHRvIGRpc2FibGUgcm93IGhvdmVyIGhpZ2hsaWdodC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHN1cHByZXNzUm93SG92ZXJIaWdobGlnaHQgPSBmYWxzZTtcblxuICAvKipcbiAgICogSGlnaGxpZ2h0cyB0aGUgY3VycmVudGx5IGFjdGl2ZSByb3cuXG4gICAqL1xuICBASW5wdXQoKVxuICBhY3RpdmVSb3c/OiBUO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gY29tcGFyYXRvciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgdHdvIHJvd3MgYXJlIGVxdWFsLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFjdGl2ZSByb3cgaXMgdG8gY29tcGFyZVxuICAgKiB0aGUgdHdvIHJvdyBvYmplY3RzIHVzaW5nIHN0cmljdCBlcXVhbGl0eSBjaGVjay4gVGhpcyBpcyBzdWZmaWNpZW50XG4gICAqIGFzIGxvbmcgYXMgdGhlIGluc3RhbmNlcyByZW1haW4gdGhlIHNhbWUsIHdoaWNoIG1heSBub3QgYmUgdGhlIGNhc2VcbiAgICogaWYgcm93IGRhdGEgaXMgcmVjcmVhdGVkIG9yIHJlYnVpbHQgZnJvbSBzZXJpYWxpemF0aW9uLlxuICAgKi9cbiAgQElucHV0KClcbiAgYWN0aXZlUm93Q29tcGFyYXRvcj86IChjdXJyZW50Um93OiBULCBhY3RpdmVSb3c6IFQpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byBgdHJ1ZWAsIHRoZSBjb2x1bW4gaGVhZGVycyB3aWxsIG5vdCBiZSBzaG93bi4gRGVmYXVsdCBpcyBgZmFsc2VgLlxuICAgKi9cbiAgQElucHV0KClcbiAgaGlkZUNvbHVtbkhlYWRlcnMgPSBmYWxzZTtcblxuICAvKipcbiAgICogQ2hvb3NlIGZyb20gYSBwcmVkZWZpbmVkIHNldCBvZiBkaXNwbGF5IHZhcmlhbnRzLlxuICAgKi9cbiAgdmFyaWFudCA9IGlucHV0PCd6ZWJyYSc+KCk7XG5cbiAgLyoqXG4gICAqIEFycmF5IG9mIHJvd3MgdGhhdCBhcmUgY3VycmVudGx5IGV4cGFuZGVkLlxuICAgKi9cbiAgZXhwYW5kZWQgPSBtb2RlbDxUW10+KFtdKTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgZnVuY3Rpb24gZm9yIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIHJvd3MuXG4gICAqL1xuICB0cmFja0J5ID0gaW5wdXQ8VHJhY2tCeUZ1bmN0aW9uPFQ+IHwga2V5b2YgVD4oKTtcblxuICAvKipcbiAgICogRW1pdHMgd2hlbmV2ZXIgdGhlIHNlbGVjdGlvbiB1cGRhdGVzLiBPbmx5IHdvcmtzIHdoZW4gc2VsZWN0YWJsZSBpcyBgdHJ1ZWAuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHdoZW5ldmVyIGEgcm93IGlzIGNsaWNrZWQuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBhY3RpdmUgc29ydCBvciBzb3J0IGRpcmVjdGlvbi5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBzb3J0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0PigpO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIEBDb250ZW50Q2hpbGRyZW4oV2F0dFRhYmxlQ2VsbERpcmVjdGl2ZSlcbiAgX2NlbGxzITogUXVlcnlMaXN0PFdhdHRUYWJsZUNlbGxEaXJlY3RpdmU8VD4+O1xuXG4gIC8qKiBAaWdub3JlICovXG4gIEBDb250ZW50Q2hpbGQoV2F0dFRhYmxlVG9vbGJhckRpcmVjdGl2ZSlcbiAgX3Rvb2xiYXI/OiBXYXR0VGFibGVUb29sYmFyRGlyZWN0aXZlPFQ+O1xuXG4gIC8qKiBAaWdub3JlICovXG4gIEBWaWV3Q2hpbGQoTWF0U29ydClcbiAgX3NvcnQhOiBNYXRTb3J0O1xuXG4gIC8qKiBAaWdub3JlICovXG4gIF90YWJsZUNlbGxFbGVtZW50cyA9IHZpZXdDaGlsZHJlbjxFbGVtZW50UmVmPEhUTUxUYWJsZUNlbGxFbGVtZW50Pj4oJ3RkJyk7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2FuaW1hdGlvbkVmZmVjdCA9IGFuaW1hdGVFeHBhbmRhYmxlQ2VsbHModGhpcy5fdGFibGVDZWxsRWxlbWVudHMsIHRoaXMuZXhwYW5kZWQpO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIF9zZWxlY3Rpb25Nb2RlbCA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUPih0cnVlLCBbXSk7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2NoZWNrYm94Q29sdW1uID0gJ19fY2hlY2tib3hDb2x1bW5fXyc7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2V4cGFuZGFibGVDb2x1bW4gPSAnX19leHBhbmRhYmxlQ29sdW1uX18nO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIF9lbGVtZW50ID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBfZGF0ZVBpcGUgPSBpbmplY3QoV2F0dERhdGVQaXBlKTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBfaGFzRm9vdGVyID0gc2lnbmFsKGZhbHNlKTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIGZvcm1hdENlbGxEYXRhKGNlbGw6IHVua25vd24pIHtcbiAgICBpZiAoIWNlbGwpIHJldHVybiAn4oCUJztcbiAgICBpZiAoY2VsbCBpbnN0YW5jZW9mIERhdGUpIHJldHVybiB0aGlzLl9kYXRlUGlwZS50cmFuc2Zvcm0oY2VsbCk7XG4gICAgcmV0dXJuIGNlbGw7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIGdldENlbGxEYXRhKHJvdzogVCwgY29sdW1uPzogV2F0dFRhYmxlQ29sdW1uPFQ+KSB7XG4gICAgaWYgKCFjb2x1bW4/LmFjY2Vzc29yKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB7IGFjY2Vzc29yIH0gPSBjb2x1bW47XG4gICAgY29uc3QgY2VsbCA9IHR5cGVvZiBhY2Nlc3NvciA9PT0gJ2Z1bmN0aW9uJyA/IGFjY2Vzc29yKHJvdykgOiByb3dbYWNjZXNzb3JdO1xuICAgIHJldHVybiB0aGlzLmZvcm1hdENlbGxEYXRhKGNlbGwpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBjaGVja0hhc0Zvb3RlcigpOiB2b2lkIHtcbiAgICB0aGlzLl9oYXNGb290ZXIuc2V0KE9iamVjdC52YWx1ZXModGhpcy5jb2x1bW5zKS5zb21lKChjb2x1bW4pID0+ICEhY29sdW1uLmZvb3RlcikpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNldFNlbGVjdGlvbiguLi4odGhpcy5pbml0aWFsU2VsZWN0aW9uKCkgPz8gW10pKTtcbiAgICB9KTtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHNlbGVjdGlvbikgPT4gdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChzZWxlY3Rpb24pKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5kYXRhU291cmNlID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICAgIHRoaXMuY2hlY2tIYXNGb290ZXIoKTtcbiAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuX3NvcnQ7XG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSBpbnN0YW5jZW9mIFdhdHRUYWJsZURhdGFTb3VyY2UgPT09IGZhbHNlKSByZXR1cm47XG4gICAgdGhpcy5kYXRhU291cmNlLnNvcnRpbmdEYXRhQWNjZXNzb3IgPSAocm93OiBULCBzb3J0SGVhZGVySWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qgc29ydENvbHVtbiA9IHRoaXMuY29sdW1uc1tzb3J0SGVhZGVySWRdO1xuICAgICAgaWYgKCFzb3J0Q29sdW1uPy5hY2Nlc3NvcikgcmV0dXJuICcnO1xuXG4gICAgICAvLyBBY2Nlc3MgcmF3IHZhbHVlIGZvciBzb3J0aW5nLCBpbnN0ZWFkIG9mIGFwcGx5aW5nIGRlZmF1bHQgZm9ybWF0dGluZy5cbiAgICAgIGNvbnN0IHsgYWNjZXNzb3IgfSA9IHNvcnRDb2x1bW47XG4gICAgICBjb25zdCBjZWxsID0gdHlwZW9mIGFjY2Vzc29yID09PSAnZnVuY3Rpb24nID8gYWNjZXNzb3Iocm93KSA6IHJvd1thY2Nlc3Nvcl07XG5cbiAgICAgIC8vIE1ha2Ugc29ydGluZyBieSB0ZXh0IGNhc2UgaW5zZW5zaXRpdmUuXG4gICAgICBpZiAodHlwZW9mIGNlbGwgPT09ICdzdHJpbmcnKSByZXR1cm4gY2VsbC50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGNlbGwgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gY2VsbC5nZXRUaW1lKCk7XG4gICAgICByZXR1cm4gY2VsbCBhcyBudW1iZXI7XG4gICAgfTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snY29sdW1ucyddIHx8IGNoYW5nZXNbJ2Rpc3BsYXllZENvbHVtbnMnXSB8fCBjaGFuZ2VzWydzZWxlY3RhYmxlJ10pIHtcbiAgICAgIGNvbnN0IHsgZGlzcGxheWVkQ29sdW1ucyB9ID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuY29sdW1ucyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHNpemluZyA9IE9iamVjdC5rZXlzKHRoaXMuY29sdW1ucylcbiAgICAgICAgLmZpbHRlcigoa2V5KSA9PiAhZGlzcGxheWVkQ29sdW1ucyB8fCBkaXNwbGF5ZWRDb2x1bW5zLmluY2x1ZGVzKGtleSkpXG4gICAgICAgIC5tYXAoKGtleSkgPT4gdGhpcy5jb2x1bW5zW2tleV0pXG4gICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4gIWNvbHVtbi5leHBhbmRhYmxlKVxuICAgICAgICAubWFwKChjb2x1bW4pID0+IGNvbHVtbi5zaXplID8/ICdhdXRvJyk7XG5cbiAgICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgLy8gQWRkIHNwYWNlIGZvciBleHRyYSBjaGVja2JveCBjb2x1bW5cbiAgICAgICAgc2l6aW5nLnVuc2hpZnQoJ3ZhcigtLXdhdHQtc3BhY2UteGwpJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9pc0V4cGFuZGFibGUoKSkge1xuICAgICAgICAvLyBBZGQgc3BhY2UgZm9yIGV4dHJhIGV4cGFuZGFibGUgY29sdW1uXG4gICAgICAgIHNpemluZy5wdXNoKCdtaW4tY29udGVudCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICctLXdhdHQtdGFibGUtZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJyxcbiAgICAgICAgc2l6aW5nLmpvaW4oJyAnKVxuICAgICAgKTtcblxuICAgICAgdGhpcy5jaGVja0hhc0Zvb3RlcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIHNlbGVjdGlvbi4gT25seSB3b3JrcyB3aGVuIHNlbGVjdGFibGUgaXMgYHRydWVgLlxuICAgKi9cbiAgY2xlYXJTZWxlY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBnZXQgX2NvbHVtblNlbGVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5kYXRhU291cmNlLmZpbHRlcmVkRGF0YS5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlLmZpbHRlcmVkRGF0YS5ldmVyeSgocm93KSA9PiB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKHJvdykpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgc2V0IF9jb2x1bW5TZWxlY3Rpb24odmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNldFNlbGVjdGlvbiguLi50aGlzLmRhdGFTb3VyY2UuZmlsdGVyZWREYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBfZmlsdGVyZWRTZWxlY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLmZpbHRlcigocm93KSA9PlxuICAgICAgdGhpcy5kYXRhU291cmNlLmZpbHRlcmVkRGF0YS5pbmNsdWRlcyhyb3cpXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIF9nZXRDb2x1bW5zKCkge1xuICAgIGlmICh0aGlzLmNvbHVtbnMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmRpc3BsYXllZENvbHVtbnMgPz8gT2JqZWN0LmtleXModGhpcy5jb2x1bW5zKTtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uKHRoaXMuc2VsZWN0YWJsZSA/IFt0aGlzLl9jaGVja2JveENvbHVtbl0gOiBbXSksXG4gICAgICAuLi5jb2x1bW5zLmZpbHRlcigoa2V5KSA9PiAhdGhpcy5jb2x1bW5zW2tleV0uZXhwYW5kYWJsZSksXG4gICAgICAuLi4odGhpcy5faXNFeHBhbmRhYmxlKCkgPyBbdGhpcy5fZXhwYW5kYWJsZUNvbHVtbl0gOiBbXSksXG4gICAgICAuLi5jb2x1bW5zLmZpbHRlcigoa2V5KSA9PiB0aGlzLmNvbHVtbnNba2V5XS5leHBhbmRhYmxlKSxcbiAgICBdO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2dldENvbHVtblRlbXBsYXRlKGNvbHVtbjogV2F0dFRhYmxlQ29sdW1uPFQ+KSB7XG4gICAgcmV0dXJuIHRoaXMuX2NlbGxzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uY29sdW1uID09PSBjb2x1bW4pPy50ZW1wbGF0ZVJlZjtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIF9nZXRDb2x1bW5IZWFkZXIoY29sdW1uOiBLZXlWYWx1ZTxzdHJpbmcsIFdhdHRUYWJsZUNvbHVtbjxUPj4pIHtcbiAgICBpZiAodHlwZW9mIGNvbHVtbi52YWx1ZS5oZWFkZXIgPT09ICdzdHJpbmcnKSByZXR1cm4gY29sdW1uLnZhbHVlLmhlYWRlcjtcbiAgICBjb25zdCBjZWxsID0gdGhpcy5fY2VsbHMuZmluZCgoaXRlbSkgPT4gaXRlbS5jb2x1bW4gPT09IGNvbHVtbi52YWx1ZSk7XG4gICAgcmV0dXJuIGNlbGw/LmhlYWRlciA/PyB0aGlzLnJlc29sdmVIZWFkZXI/Lihjb2x1bW4ua2V5KSA/PyBjb2x1bW4ua2V5O1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2dldENvbHVtbkhlbHBlckFjdGlvbihjb2x1bW46IEtleVZhbHVlPHN0cmluZywgV2F0dFRhYmxlQ29sdW1uPFQ+Pikge1xuICAgIHJldHVybiBjb2x1bW4udmFsdWUuaGVscGVyQWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2dldENvbHVtbkhlYWRlclRvb2x0aXAoY29sdW1uOiBLZXlWYWx1ZTxzdHJpbmcsIFdhdHRUYWJsZUNvbHVtbjxUPj4pIHtcbiAgICByZXR1cm4gY29sdW1uLnZhbHVlLnRvb2x0aXA7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBfZ2V0Q29sdW1uQ2VsbChjb2x1bW46IEtleVZhbHVlPHN0cmluZywgV2F0dFRhYmxlQ29sdW1uPFQ+Piwgcm93OiBUKSB7XG4gICAgcmV0dXJuIGNvbHVtbi52YWx1ZS5jZWxsPy4ocm93KSA/PyB0aGlzLmdldENlbGxEYXRhKHJvdywgY29sdW1uLnZhbHVlKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIF9nZXRSb3dLZXkgPSAoaW5kZXg6IG51bWJlciwgcm93OiBUKSA9PiB7XG4gICAgY29uc3QgdHJhY2tCeSA9IHRoaXMudHJhY2tCeSgpO1xuICAgIGlmICh0eXBlb2YgdHJhY2tCeSA9PT0gJ3N0cmluZycpIHJldHVybiByb3dbdHJhY2tCeV07XG4gICAgaWYgKHR5cGVvZiB0cmFja0J5ID09PSAnZnVuY3Rpb24nKSByZXR1cm4gdHJhY2tCeShpbmRleCwgcm93KTtcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlLmRhdGEuaW5kZXhPZihyb3cpO1xuICB9O1xuXG4gIC8qKiBAaWdub3JlICovXG4gIF9pc0FjdGl2ZVJvdyhyb3c6IFQpIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlUm93KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlUm93Q29tcGFyYXRvclxuICAgICAgPyB0aGlzLmFjdGl2ZVJvd0NvbXBhcmF0b3Iocm93LCB0aGlzLmFjdGl2ZVJvdylcbiAgICAgIDogcm93ID09PSB0aGlzLmFjdGl2ZVJvdztcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIF9pc0V4cGFuZGFibGUoKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5jb2x1bW5zKS5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5leHBhbmRhYmxlKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIF9vblJvd0NsaWNrKHJvdzogVCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8udG9TdHJpbmcoKSAhPT0gJycpIHJldHVybjtcbiAgICBpZiAodGhpcy5faXNFeHBhbmRhYmxlKCkpIHtcbiAgICAgIHRoaXMuZXhwYW5kZWQudXBkYXRlKChyb3dzKSA9PlxuICAgICAgICByb3dzLmluY2x1ZGVzKHJvdykgPyByb3dzLmZpbHRlcigocikgPT4gciAhPSByb3cpIDogWy4uLnJvd3MsIHJvd11cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5yb3dDbGljay5lbWl0KHJvdyk7XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd2F0dC10YWJsZS10b29sYmFyLXNwYWNlcicsXG4gIHRlbXBsYXRlOiAnJyxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICB3aWR0aDogdmFyKC0td2F0dC1zcGFjZS14bCk7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgV2F0dFRhYmxlVG9vbGJhclNwYWNlckNvbXBvbmVudCB7fVxuXG5leHBvcnQgY29uc3QgV0FUVF9UQUJMRSA9IFtcbiAgV2F0dFRhYmxlQ29tcG9uZW50LFxuICBXYXR0VGFibGVDZWxsRGlyZWN0aXZlLFxuICBXYXR0VGFibGVUb29sYmFyRGlyZWN0aXZlLFxuICBXYXR0VGFibGVUb29sYmFyU3BhY2VyQ29tcG9uZW50LFxuXTtcbiIsIjwhLS1cbkBsaWNlbnNlXG5Db3B5cmlnaHQgMjAyMCBFbmVyZ2luZXQgRGF0YUh1YiBBL1NcblxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZTJcIik7XG55b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG5Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG5kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG5XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cblNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS0+XG48dGFibGVcbiAgbWF0LXRhYmxlXG4gIG1hdFNvcnRcbiAgcm9sZT1cInRyZWVncmlkXCJcbiAgW25nQ2xhc3NdPVwieyAnd2F0dC10YWJsZS1oYXMtc2VsZWN0aW9uJzogX2ZpbHRlcmVkU2VsZWN0aW9uLmxlbmd0aCA+IDAgfVwiXG4gIFttYXRTb3J0QWN0aXZlXT1cInNvcnRCeVwiXG4gIFttYXRTb3J0RGlyZWN0aW9uXT1cInNvcnREaXJlY3Rpb25cIlxuICBbbWF0U29ydERpc2FibGVDbGVhcl09XCIhc29ydENsZWFyXCJcbiAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiZGVzY3JpcHRpb25cIlxuICAobWF0U29ydENoYW5nZSk9XCJzb3J0Q2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4+XG4gIEBpZiAoc2VsZWN0YWJsZSkge1xuICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJfY2hlY2tib3hDb2x1bW5cIiBbc3RpY2t5XT1cInRydWVcIj5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJ3YXR0LXRhYmxlLWNoZWNrYm94LWNlbGxcIj5cbiAgICAgICAgPHdhdHQtY2hlY2tib3ggWyhuZ01vZGVsKV09XCJfY29sdW1uU2VsZWN0aW9uXCIgLz5cbiAgICAgIDwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJ3YXR0LXRhYmxlLWNoZWNrYm94LWNlbGxcIj5cbiAgICAgICAgPHdhdHQtY2hlY2tib3hcbiAgICAgICAgICBbbmdNb2RlbF09XCJfc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJfc2VsZWN0aW9uTW9kZWwudG9nZ2xlKHJvdylcIlxuICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAvPlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgfVxuXG4gIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJfZXhwYW5kYWJsZUNvbHVtblwiPlxuICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+PC90aD5cbiAgICA8dGRcbiAgICAgICN0ZFxuICAgICAgbWF0LWNlbGxcbiAgICAgICptYXRDZWxsRGVmPVwibGV0IHJvdzsgbGV0IGluZGV4ID0gaW5kZXhcIlxuICAgICAgW2F0dHIuZGF0YS1rZXldPVwiX2dldFJvd0tleShpbmRleCwgcm93KVwiXG4gICAgICBbYXR0ci5kYXRhLXJvdy1pbmRleF09XCJpbmRleFwiXG4gICAgICAoY2xpY2spPVwiX29uUm93Q2xpY2socm93KVwiXG4gICAgICBbY2xhc3Mud2F0dC10YWJsZS1jZWxsLS1leHBhbmRlZF09XCJleHBhbmRlZCgpLmluY2x1ZGVzKHJvdylcIlxuICAgID5cbiAgICAgIDx3YXR0LWljb24gbmFtZT1cInJpZ2h0XCIgc2l6ZT1cInhzXCIgLz5cbiAgICA8L3RkPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICBAZm9yIChjb2x1bW4gb2YgY29sdW1ucyB8IGtleXZhbHVlOyB0cmFjayBjb2x1bW4ua2V5KSB7XG4gICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5rZXlcIiBbc3RpY2t5RW5kXT1cImNvbHVtbi52YWx1ZS5zdGlja3lFbmQ/LigpXCI+XG4gICAgICA8dGhcbiAgICAgICAgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgIFtjbGFzcy53YXR0LXRhYmxlLWNlbGwtLWV4cGFuZGFibGVdPVwiY29sdW1uLnZhbHVlLmV4cGFuZGFibGVcIlxuICAgICAgICBjbGFzcz1cIndhdHQtdGFibGUtYWxpZ24te3sgY29sdW1uLnZhbHVlLmFsaWduID8/ICdsZWZ0JyB9fSB7e1xuICAgICAgICAgIGNvbHVtbi52YWx1ZS5oZWFkZXJDZWxsQ2xhc3NcbiAgICAgICAgfX1cIlxuICAgICAgPlxuICAgICAgICBAaWYgKF9nZXRDb2x1bW5IZWxwZXJBY3Rpb24oY29sdW1uKTsgYXMgYWN0aW9uKSB7XG4gICAgICAgICAgPHdhdHQtaWNvbiBuYW1lPVwiaGVscFwiIChjbGljayk9XCJhY3Rpb24oKVwiIC8+XG4gICAgICAgIH1cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJ3YXR0LXRhYmxlLWhlYWRlci1jZWxsXCJcbiAgICAgICAgICBtYXQtc29ydC1oZWFkZXJcbiAgICAgICAgICBbYXJyb3dQb3NpdGlvbl09XCJjb2x1bW4udmFsdWUuYWxpZ24gPT09ICdyaWdodCcgPyAnYmVmb3JlJyA6ICdhZnRlcidcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhY29sdW1uLnZhbHVlLmFjY2Vzc29yIHx8IGNvbHVtbi52YWx1ZS5zb3J0ID09PSBmYWxzZVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBfZ2V0Q29sdW1uSGVhZGVyKGNvbHVtbikgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAoX2dldENvbHVtbkhlYWRlclRvb2x0aXAoY29sdW1uKTsgYXMgdG9vbHRpcCkge1xuICAgICAgICAgIDx3YXR0LWljb24gW3RpdGxlXT1cInRvb2x0aXBcIiBuYW1lPVwiaW5mb1wiIC8+XG4gICAgICAgIH1cbiAgICAgIDwvdGg+XG5cbiAgICAgIDx0ZFxuICAgICAgICAjdGRcbiAgICAgICAgbWF0LWNlbGxcbiAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgcm93OyBsZXQgaW5kZXggPSBpbmRleFwiXG4gICAgICAgIFthdHRyLmRhdGEta2V5XT1cIl9nZXRSb3dLZXkoaW5kZXgsIHJvdylcIlxuICAgICAgICBbYXR0ci5kYXRhLXJvdy1pbmRleF09XCJpbmRleFwiXG4gICAgICAgIFtjbGFzcy53YXR0LXRhYmxlLWNlbGwtLWV4cGFuZGVkXT1cImV4cGFuZGVkKCkuaW5jbHVkZXMocm93KVwiXG4gICAgICAgIFtjbGFzcy53YXR0LXRhYmxlLWNlbGwtLWV4cGFuZGFibGVdPVwiY29sdW1uLnZhbHVlLmV4cGFuZGFibGVcIlxuICAgICAgICBjbGFzcz1cIndhdHQtdGFibGUtYWxpZ24te3sgY29sdW1uLnZhbHVlLmFsaWduID8/ICdsZWZ0JyB9fSB7eyBjb2x1bW4udmFsdWUuZGF0YUNlbGxDbGFzcyB9fVwiXG4gICAgICAgIChjbGljayk9XCIhY29sdW1uLnZhbHVlLmV4cGFuZGFibGUgJiYgX29uUm93Q2xpY2socm93KVwiXG4gICAgICA+XG4gICAgICAgIEBpZiAoX2lzRXhwYW5kYWJsZSgpKSB7XG4gICAgICAgICAgQGRlZmVyICh3aGVuICFjb2x1bW4udmFsdWUuZXhwYW5kYWJsZSB8fCBleHBhbmRlZCgpLmluY2x1ZGVzKHJvdykpIHtcbiAgICAgICAgICAgIEBpZiAoX2dldENvbHVtblRlbXBsYXRlKGNvbHVtbi52YWx1ZSk7IGFzIHRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YXR0LXRhYmxlLWNlbGwtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdyB9XCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAge3sgX2dldENvbHVtbkNlbGwoY29sdW1uLCByb3cpIH19XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICBAaWYgKF9nZXRDb2x1bW5UZW1wbGF0ZShjb2x1bW4udmFsdWUpOyBhcyB0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndhdHQtdGFibGUtY2VsbC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdyB9XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAge3sgX2dldENvbHVtbkNlbGwoY29sdW1uLCByb3cpIH19XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L3RkPlxuXG4gICAgICBAaWYgKF9oYXNGb290ZXIoKSkge1xuICAgICAgICA8dGRcbiAgICAgICAgICBtYXQtZm9vdGVyLWNlbGxcbiAgICAgICAgICAqbWF0Rm9vdGVyQ2VsbERlZlxuICAgICAgICAgIGNsYXNzPVwie3sgY29sdW1uLnZhbHVlLmZvb3Rlcj8uY2xhc3MgfX0gd2F0dC10YWJsZS1hbGlnbi17e1xuICAgICAgICAgICAgY29sdW1uLnZhbHVlLmFsaWduID8/ICdsZWZ0J1xuICAgICAgICAgIH19IFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBjb2x1bW4udmFsdWUuZm9vdGVyPy52YWx1ZT8uKCkgfX1cbiAgICAgICAgPC90ZD5cbiAgICAgIH1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgfVxuXG4gIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic3BhY2VyXCI+XG4gICAgPHRkIGNsYXNzPVwid2F0dC10YWJsZS1mb290ZXItc3BhY2VyXCIgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPjwvdGQ+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIEBpZiAoIWhpZGVDb2x1bW5IZWFkZXJzKSB7XG4gICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJfZ2V0Q29sdW1ucygpXCI+PC90cj5cbiAgfVxuICA8dHJcbiAgICBtYXQtcm93XG4gICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IF9nZXRDb2x1bW5zKClcIlxuICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwicm93ID09PSBhY3RpdmVSb3dcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICd3YXR0LXRhYmxlLWhpZ2hsaWdodC1yb3cnOiAhZGlzYWJsZWQgJiYgIXN1cHByZXNzUm93SG92ZXJIaWdobGlnaHQsXG4gICAgICAnd2F0dC10YWJsZS1jbGlja2FibGUtcm93JzogIWRpc2FibGVkICYmIHJvd0NsaWNrLm9ic2VydmVkLFxuICAgICAgJ3dhdHQtdGFibGUtYWN0aXZlLXJvdyc6IF9pc0FjdGl2ZVJvdyhyb3cpLFxuICAgICAgJ3dhdHQtdGFibGUtbm8tZW5kLWRpdmlkZXInOiBoaWRlQ29sdW1uSGVhZGVycyxcbiAgICB9XCJcbiAgPjwvdHI+XG5cbiAgQGlmIChfdG9vbGJhcikge1xuICAgIDx0ciBtYXQtZm9vdGVyLXJvdyAqbWF0Rm9vdGVyUm93RGVmPVwiWydzcGFjZXInXVwiPjwvdHI+XG4gIH1cblxuICBAaWYgKF9oYXNGb290ZXIoKSkge1xuICAgIDx0clxuICAgICAgbWF0LWZvb3Rlci1yb3dcbiAgICAgIFtjbGFzcy53YXR0LXRhYmxlLWhpZGUtZm9vdGVyXT1cImxvYWRpbmcgfHwgZGF0YVNvdXJjZS5maWx0ZXJlZERhdGEubGVuZ3RoID09PSAwXCJcbiAgICAgICptYXRGb290ZXJSb3dEZWY9XCJfZ2V0Q29sdW1ucygpOyBzdGlja3k6IHN0aWNreUZvb3RlclwiXG4gICAgPjwvdHI+XG4gIH1cblxuICA8bmctY29udGFpbmVyICptYXROb0RhdGFSb3c+XG4gICAgQGlmIChsb2FkaW5nKSB7XG4gICAgICBAZm9yIChpIG9mIFsxLCAyLCAzXTsgdHJhY2sgaSkge1xuICAgICAgICA8dHIgY2xhc3M9XCJtYXQtbWRjLXJvd1wiPlxuICAgICAgICAgIEBmb3IgKF8gb2YgX2dldENvbHVtbnMoKTsgdHJhY2sgXzsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1tZGMtY2VsbFwiIFtjbGFzcy53YXR0LXRhYmxlLWxvYWRpbmctY2VsbF09XCJpID4gMCB8fCAhc2VsZWN0YWJsZVwiPjwvdGQ+XG4gICAgICAgICAgfVxuICAgICAgICA8L3RyPlxuICAgICAgfVxuICAgIH1cbiAgPC9uZy1jb250YWluZXI+XG48L3RhYmxlPlxuXG5AaWYgKF90b29sYmFyKSB7XG4gIDxkaXYgY2xhc3M9XCJ3YXR0LXRhYmxlLXRvb2xiYXJcIiByb2xlPVwidG9vbGJhclwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiX3Rvb2xiYXIudGVtcGxhdGVSZWY7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBfZmlsdGVyZWRTZWxlY3Rpb24gfVwiXG4gICAgLz5cbiAgPC9kaXY+XG59XG4iXX0=
|
|
403
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL3dhdHQvcGFja2FnZS90YWJsZS93YXR0LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2xpYnMvd2F0dC9wYWNrYWdlL3RhYmxlL3dhdHQtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCO0FBQ2pCOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFlBQVk7QUFDWixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFZLFlBQVksRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRixPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBdUIsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDakUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEy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Q2QsaUJBQWlCLGtHQUNqQixxQkFBcUIsMkVBTHJCLFlBQVksaUdBRFosZ0JBQWdCOzsyRkFpQlAsa0JBQWtCO2tCQXBCOUIsU0FBUzs4QkFDQzt3QkFDUCxPQUFPO3dCQUNQLGdCQUFnQjt3QkFDaEIsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLHFCQUFxQjtxQkFDdEIsYUFDVSxDQUFDLFlBQVksQ0FBQyxpQkFDVixpQkFBaUIsQ0FBQyxJQUFJLFlBQzNCLFlBQVksUUFHaEI7d0JBQ0osa0NBQWtDLEVBQUUsdUJBQXVCO3FCQUM1RDs7QUF5V0gsTUFBTSxPQUFPLCtCQUErQjt1R0FBL0IsK0JBQStCOzJGQUEvQiwrQkFBK0IscUZBVGhDLEVBQUU7OzJGQVNELCtCQUErQjtrQkFYM0MsU0FBUzsrQkFDRSwyQkFBMkIsWUFDM0IsRUFBRTs7QUFXZCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUc7SUFDeEIsa0JBQWtCO0lBQ2xCLHNCQUFzQjtJQUN0Qix5QkFBeUI7SUFDekIsK0JBQStCO0NBQ2hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gTGljZW5zZVxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgRW5lcmdpbmV0IERhdGFIdWIgQS9TXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZTJcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8jZW5kcmVnaW9uXG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBLZXlWYWx1ZSwgS2V5VmFsdWVQaXBlLCBOZ0NsYXNzLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgY29udGVudENoaWxkLFxuICBjb250ZW50Q2hpbGRyZW4sXG4gIERpcmVjdGl2ZSxcbiAgZWZmZWN0LFxuICBFbGVtZW50UmVmLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBJbnB1dCxcbiAgbW9kZWwsXG4gIE9uQ2hhbmdlcyxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICB2aWV3Q2hpbGQsXG4gIHZpZXdDaGlsZHJlbixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBTaWduYWwsIFRyYWNrQnlGdW5jdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb3V0cHV0RnJvbU9ic2VydmFibGUsIHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0U29ydCwgTWF0U29ydE1vZHVsZSwgU29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHsgTWF0VGFibGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBtYXAsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgV2F0dENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2NoZWNrYm94JztcbmltcG9ydCB7IFdhdHREYXRlUGlwZSB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC9jb3JlL2RhdGUnO1xuaW1wb3J0IHsgV2F0dEljb25Db21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvaWNvbic7XG5pbXBvcnQgeyBJV2F0dFRhYmxlRGF0YVNvdXJjZSwgV2F0dFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4vd2F0dC10YWJsZS1kYXRhLXNvdXJjZSc7XG5pbXBvcnQgeyBhbmltYXRlRXhwYW5kYWJsZUNlbGxzIH0gZnJvbSAnLi93YXR0LXRhYmxlLWV4cGFuZC1hbmltYXRpb24nO1xuXG4vKiogQ2xhc3MgbmFtZSBmb3IgZXhwYW5kYWJsZSBjZWxscy4gKi9cbmV4cG9ydCBjb25zdCBFWFBBTkRBQkxFX0NMQVNTID0gJ3dhdHQtdGFibGUtY2VsbC0tZXhwYW5kYWJsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2F0dFRhYmxlQ29sdW1uPFQ+IHtcbiAgLyoqXG4gICAqIFRoZSBkYXRhIHRoYXQgdGhpcyBjb2x1bW4gc2hvdWxkIGJlIGJvdW5kIHRvLCBlaXRoZXIgYXMgYSBwcm9wZXJ0eSBvZiBgVGBcbiAgICogb3IgZGVyaXZlZCBmcm9tIGVhY2ggcm93IG9mIGBUYCB1c2luZyBhbiBhY2Nlc3NvciBmdW5jdGlvbi4gIFVzZSBgbnVsbGBcbiAgICogZm9yIGNvbHVtbnMgdGhhdCBzaG91bGQgbm90IGJlIGFzc29jaWF0ZWQgd2l0aCBkYXRhLCBidXQgbm90ZSB0aGF0IHRoaXNcbiAgICogd2lsbCBkaXNhYmxlIHNvcnRpbmcgYW5kIGF1dG9tYXRpYyBjZWxsIHBvcHVsYXRpb24uXG4gICAqL1xuICBhY2Nlc3Nvcjoga2V5b2YgVCB8ICgocm93OiBUKSA9PiB1bmtub3duKSB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGhlYWRlciB0ZXh0IHRvIGEgc3RhdGljIGRpc3BsYXkgdmFsdWUuIFRoaXMgd2lsbCBwcmV2ZW50XG4gICAqIHRoZSBgcmVzb2x2ZUhlYWRlcmAgaW5wdXQgZnVuY3Rpb24gZnJvbSBiZWluZyBjYWxsZWQgZm9yIHRoaXMgY29sdW1uLlxuICAgKi9cbiAgaGVhZGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmb3IgZGV0ZXJtaW5pbmcgY2VsbCBjb250ZW50IHdoZW4gbm90IHVzaW5nIHRlbXBsYXRlLiBCeSBkZWZhdWx0LFxuICAgKiBjZWxsIGNvbnRlbnQgaXMgZm91bmQgdXNpbmcgdGhlIGBhY2Nlc3NvcmAgKHVubGVzcyBpdCBpcyBgbnVsbGApLlxuICAgKi9cbiAgY2VsbD86IChyb3c6IFQpID0+IHN0cmluZztcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgc29ydGluZyBmb3IgdGhpcyBjb2x1bW4uIERlZmF1bHRzIHRvIGB0cnVlYFxuICAgKiB1bmxlc3MgYGFjY2Vzc29yYCBpcyBgbnVsbGAuXG4gICAqL1xuICBzb3J0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2V0IHRoZSBjb2x1bW4gc2l6ZSB1c2luZyBncmlkIHNpemluZyB2YWx1ZXMuIERlZmF1bHRzIHRvIGBcImF1dG9cImAuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEFjY2VwdHMgYWxsIG9mIHRoZSBDU1MgZ3JpZCB0cmFjayBzaXplIGtleXdvcmRzIChzdWNoIGFzIGBtaW4tY29udGVudGAsXG4gICAqIGBtYXgtY29udGVudGAsIGBtaW5tYXgoKWApIGFzIHdlbGwgYXMgZnJhY3Rpb25hbCAoYGZyYCksIHBlcmNlbnRhZ2UgKGAlYClcbiAgICogYW5kIGxlbmd0aCAoYHB4YCwgYGVtYCwgZXRjKSB1bml0cy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWdyaWQvI3RyYWNrLXNpemVzXG4gICAqL1xuICBzaXplPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIb3Jpem9udGFsbHkgYWxpZ24gdGhlIGNvbnRlbnRzIG9mIHRoZSBjb2x1bW4uIERlZmF1bHRzIHRvIGBcImxlZnRcImAuXG4gICAqL1xuICBhbGlnbj86ICdsZWZ0JyB8ICdyaWdodCcgfCAnY2VudGVyJztcblxuICAvKipcbiAgICogSGVscGVyIGljb24gd2lsbCBiZSBzaG93biBpbiB0aGUgaGVhZGVyIGNlbGwsIHdpdGggYW4gY2xpY2sgZXZlbnQuXG4gICAqL1xuICBoZWxwZXJBY3Rpb24/OiAoKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDU1MgY2xhc3MgdG8gYXBwbHkgdG8gdGhlIGhlYWRlciBjZWxsIGVsZW1lbnQuXG4gICAqL1xuICBoZWFkZXJDZWxsQ2xhc3M/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENTUyBjbGFzcyB0byBhcHBseSB0byB0aGUgZGF0YSBjZWxsIGVsZW1lbnQuXG4gICAqL1xuICBkYXRhQ2VsbENsYXNzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGb290ZXIgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNvbHVtbi5cbiAgICovXG4gIGZvb3Rlcj86IFdhdHRUYWJsZUNvbHVtbkZvb3RlcjtcblxuICAvKipcbiAgICogV2hlbiBzZXQgdG8gYHRydWVgLCB0aGUgY29sdW1uIHJlbWFpbnMgdmlzaWJsZSB3aGVuIGhvcml6b250YWxseSBzY3JvbGxpbmcuXG4gICAqL1xuICBzdGlja3lFbmQ/OiBTaWduYWw8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgLCB0aGUgY2VsbCBpcyByZXBsYWNlZCB3aXRoIGFuIGV4cGFuZGFibGUgYXJyb3cgYW5kIHRoZSBjb250ZW50IGlzIGRlZmVycmVkLlxuICAgKiBDbGlja2luZyBvbiB0aGUgYXJyb3cgcmV2ZWFscyB0aGUgY29udGVudCBiZWxvdyB0aGUgY3VycmVudCByb3cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEl0IGlzIHJlY29tbWVuZGVkIHRvIHByb3ZpZGUgYSBjdXN0b20gYHRyYWNrQnlgIGZ1bmN0aW9uIHdoZW4gdXNpbmcgYGV4cGFuZGFibGVgLFxuICAgKiBvdGhlcndpc2UgYW5pbWF0aW9ucyBjYW4gYmUgaW5hY2N1cmF0ZSB3aGVuIGRhdGEgaXMgY2hhbmdlZC5cbiAgICovXG4gIGV4cGFuZGFibGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUb29sdGlwIHRleHQgdG8gc2hvdyBvbiBob3ZlciBvZiB0aGUgaGVhZGVyIGNlbGwuXG4gICAqL1xuICB0b29sdGlwPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBmb290ZXIgY2VsbCBvZiBhIGNvbHVtbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXYXR0VGFibGVDb2x1bW5Gb290ZXIge1xuICAvKipcbiAgICogVGhlIHZhbHVlIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGZvb3RlciBjZWxsLlxuICAgKi9cbiAgdmFsdWU/OiBTaWduYWw8c3RyaW5nIHwgbnVtYmVyPjtcblxuICAvKipcbiAgICogQ1NTIGNsYXNzIHRvIGFwcGx5IHRvIHRoZSBmb290ZXIgY2VsbC5cbiAgICovXG4gIGNsYXNzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlY29yZCBmb3IgZGVmaW5pbmcgY29sdW1ucyB3aXRoIGtleXMgdXNlZCBhcyBjb2x1bW4gaWRlbnRpZmllcnMuXG4gKi9cbmV4cG9ydCB0eXBlIFdhdHRUYWJsZUNvbHVtbkRlZjxUPiA9IFJlY29yZDxzdHJpbmcsIFdhdHRUYWJsZUNvbHVtbjxUPj47XG5cbi8vIFVzZWQgZm9yIHN0cm9uZ2x5IHR5cGluZyB0aGUgc3RydWN0dXJhbCBkaXJlY3RpdmVcbmludGVyZmFjZSBXYXR0VGFibGVDZWxsQ29udGV4dDxUPiB7XG4gICRpbXBsaWNpdDogVDtcbn1cblxuaW50ZXJmYWNlIFdhdHRUYWJsZVRvb2xiYXJDb250ZXh0PFQ+IHtcbiAgJGltcGxpY2l0OiBUO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbd2F0dFRhYmxlQ2VsbF0nLFxufSlcbmV4cG9ydCBjbGFzcyBXYXR0VGFibGVDZWxsRGlyZWN0aXZlPFQ+IHtcbiAgLyoqIFRoZSBXYXR0VGFibGVDb2x1bW4gdGhpcyB0ZW1wbGF0ZSBhcHBsaWVzIHRvLiAqL1xuICBASW5wdXQoJ3dhdHRUYWJsZUNlbGwnKSBjb2x1bW4hOiBXYXR0VGFibGVDb2x1bW48VD47XG4gIEBJbnB1dCgnd2F0dFRhYmxlQ2VsbEhlYWRlcicpIGhlYWRlcj86IHN0cmluZztcbiAgdGVtcGxhdGVSZWYgPSBpbmplY3QoVGVtcGxhdGVSZWY8V2F0dFRhYmxlQ2VsbENvbnRleHQ8VD4+KTtcbiAgc3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQ8VD4oXG4gICAgX2RpcmVjdGl2ZTogV2F0dFRhYmxlQ2VsbERpcmVjdGl2ZTxUPixcbiAgICBjb250ZXh0OiB1bmtub3duXG4gICk6IGNvbnRleHQgaXMgV2F0dFRhYmxlQ2VsbENvbnRleHQ8VD4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t3YXR0VGFibGVUb29sYmFyXScsXG59KVxuZXhwb3J0IGNsYXNzIFdhdHRUYWJsZVRvb2xiYXJEaXJlY3RpdmU8VD4ge1xuICB0ZW1wbGF0ZVJlZiA9IGluamVjdChUZW1wbGF0ZVJlZjxXYXR0VGFibGVUb29sYmFyQ29udGV4dDxUW10+Pik7XG4gIHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkPFQ+KFxuICAgIF9kaXJlY3RpdmU6IFdhdHRUYWJsZVRvb2xiYXJEaXJlY3RpdmU8VD4sXG4gICAgY29udGV4dDogdW5rbm93blxuICApOiBjb250ZXh0IGlzIFdhdHRUYWJsZVRvb2xiYXJDb250ZXh0PFRbXT4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogVXNhZ2U6XG4gKiBgaW1wb3J0IHsgV0FUVF9UQUJMRSB9IGZyb20gJ0BlbmVyZ2luZXQtZGF0YWh1Yi93YXR0L3RhYmxlJztgXG4gKi9cbkBDb21wb25lbnQoe1xuICBpbXBvcnRzOiBbXG4gICAgTmdDbGFzcyxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIEtleVZhbHVlUGlwZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRTb3J0TW9kdWxlLFxuICAgIE1hdFRhYmxlTW9kdWxlLFxuICAgIFdhdHRJY29uQ29tcG9uZW50LFxuICAgIFdhdHRDaGVja2JveENvbXBvbmVudCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbV2F0dERhdGVQaXBlXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc2VsZWN0b3I6ICd3YXR0LXRhYmxlJyxcbiAgc3R5bGVVcmxzOiBbJy4vd2F0dC10YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vd2F0dC10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLndhdHQtdGFibGUtdmFyaWFudC16ZWJyYV0nOiAndmFyaWFudCgpID09PSBcInplYnJhXCInLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBXYXR0VGFibGVDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuICAvKipcbiAgICogVGhlIHRhYmxlJ3Mgc291cmNlIG9mIGRhdGEuIFByb3BlcnR5IHNob3VsZCBub3QgYmUgY2hhbmdlZCBhZnRlclxuICAgKiBpbml0aWFsaXphdGlvbiwgaW5zdGVhZCB1cGRhdGUgdGhlIGRhdGEgb24gdGhlIGluc3RhbmNlIGl0c2VsZi5cbiAgICovXG4gIGRhdGFTb3VyY2UgPSBpbnB1dC5yZXF1aXJlZDxJV2F0dFRhYmxlRGF0YVNvdXJjZTxUPj4oKTtcblxuICAvKipcbiAgICogQ29sdW1uIGRlZmluaXRpb24gcmVjb3JkIHdpdGgga2V5cyByZXByZXNlbnRpbmcgdGhlIGNvbHVtbiBpZGVudGlmaWVyc1xuICAgKiBhbmQgdmFsdWVzIGJlaW5nIHRoZSBjb2x1bW4gY29uZmlndXJhdGlvbi4gVGhlIG9yZGVyIG9mIHRoZSBjb2x1bW5zXG4gICAqIGlzIGRldGVybWluZWQgYnkgdGhlIHByb3BlcnR5IG9yZGVyLCBidXQgY2FuIGJlIG92ZXJydWxlZCBieSB0aGVcbiAgICogYGRpc3BsYXllZENvbHVtbnNgIGlucHV0LlxuICAgKi9cbiAgY29sdW1ucyA9IGlucHV0PFdhdHRUYWJsZUNvbHVtbkRlZjxUPj4oe30pO1xuXG4gIC8qKlxuICAgKiBVc2VkIGZvciBoaWRpbmcgb3IgcmVvcmRlcmluZyBjb2x1bW5zIGRlZmluZWQgaW4gdGhlIGBjb2x1bW5zYCBpbnB1dC5cbiAgICovXG4gIGRpc3BsYXllZENvbHVtbnMgPSBpbnB1dDxzdHJpbmdbXT4oKTtcblxuICAvKipcbiAgICogVXNlZCBmb3IgZGlzYWJsaW5nIHRoZSB0YWJsZS4gVGhpcyB3aWxsIGRpc2FibGUgYWxsIHVzZXIgaW50ZXJhY3Rpb25cbiAgICovXG4gIGRpc2FibGVkID0gaW5wdXQoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlIGEgZGVzY3JpcHRpb24gb2YgdGhlIHRhYmxlIGZvciB2aXN1YWxseSBpbXBhaXJlZCB1c2Vycy5cbiAgICovXG4gIGRlc2NyaXB0aW9uID0gaW5wdXQoJycpO1xuXG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gYHRydWVgLCB0aGUgdGFibGUgd2lsbCBzaG93IGEgbG9hZGluZyBpbmRpY2F0b3JcbiAgICogd2hlbiB0aGVyZSBpcyBubyBkYXRhLlxuICAgKi9cbiAgbG9hZGluZyA9IGlucHV0KGZhbHNlKTtcblxuICAvKipcbiAgICogSWYgdHJ1ZSB0aGUgZm9vdGVyIHdpbGwgYmUgc3RpY2t5XG4gICAqL1xuICBzdGlja3lGb290ZXIgPSBpbnB1dChmYWxzZSk7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNhbGxiYWNrIGZvciBkZXRlcm1pbmluZyBoZWFkZXIgdGV4dCBmb3IgY29sdW1ucyB0aGF0XG4gICAqIGRvIG5vdCBoYXZlIGEgc3RhdGljIGhlYWRlciB0ZXh0IHNldCBpbiB0aGUgY29sdW1uIGRlZmluaXRpb24uXG4gICAqIFVzZWZ1bCBmb3IgcHJvdmlkaW5nIHRyYW5zbGF0aW9ucyBvZiBjb2x1bW4gaGVhZGVycy5cbiAgICovXG4gIHJlc29sdmVIZWFkZXIgPSBpbnB1dDwoa2V5OiBzdHJpbmcpID0+IHN0cmluZz4oKTtcblxuICAvKipcbiAgICogSWRlbnRpZmllciBmb3IgY29sdW1uIHRoYXQgc2hvdWxkIGJlIHNvcnRlZCBpbml0aWFsbHkuXG4gICAqL1xuICBzb3J0QnkgPSBpbnB1dCgnJyk7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3J0IGRpcmVjdGlvbiBvZiB0aGUgaW5pdGlhbGx5IHNvcnRlZCBjb2x1bW4uXG4gICAqL1xuICBzb3J0RGlyZWN0aW9uID0gaW5wdXQ8U29ydERpcmVjdGlvbj4oJycpO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFsbG93IHRoZSB1c2VyIHRvIGNsZWFyIHRoZSBzb3J0LiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqL1xuICBzb3J0Q2xlYXIgPSBpbnB1dCh0cnVlKTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdGFibGUgc2hvdWxkIGluY2x1ZGUgYSBjaGVja2JveCBjb2x1bW4gZm9yIHJvdyBzZWxlY3Rpb24uXG4gICAqL1xuICBzZWxlY3RhYmxlID0gaW5wdXQoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbml0aWFsbHkgc2VsZWN0ZWQgcm93cy4gT25seSB3b3JrcyB3aGVuIHNlbGVjdGFibGUgaXMgYHRydWVgLlxuICAgKi9cbiAgaW5pdGlhbFNlbGVjdGlvbiA9IGlucHV0PFRbXT4oW10pO1xuXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSB0byBkaXNhYmxlIHJvdyBob3ZlciBoaWdobGlnaHQuXG4gICAqL1xuICBzdXBwcmVzc1Jvd0hvdmVySGlnaGxpZ2h0ID0gaW5wdXQoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBIaWdobGlnaHRzIHRoZSBjdXJyZW50bHkgYWN0aXZlIHJvdy5cbiAgICovXG4gIGFjdGl2ZVJvdyA9IGlucHV0PFQ+KCk7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiB0d28gcm93cyBhcmUgZXF1YWwuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBkZXRlcm1pbmluZyB0aGUgYWN0aXZlIHJvdyBpcyB0byBjb21wYXJlXG4gICAqIHRoZSB0d28gcm93IG9iamVjdHMgdXNpbmcgc3RyaWN0IGVxdWFsaXR5IGNoZWNrLiBUaGlzIGlzIHN1ZmZpY2llbnRcbiAgICogYXMgbG9uZyBhcyB0aGUgaW5zdGFuY2VzIHJlbWFpbiB0aGUgc2FtZSwgd2hpY2ggbWF5IG5vdCBiZSB0aGUgY2FzZVxuICAgKiBpZiByb3cgZGF0YSBpcyByZWNyZWF0ZWQgb3IgcmVidWlsdCBmcm9tIHNlcmlhbGl6YXRpb24uXG4gICAqL1xuICBhY3RpdmVSb3dDb21wYXJhdG9yID0gaW5wdXQ8KGN1cnJlbnRSb3c6IFQsIGFjdGl2ZVJvdzogVCkgPT4gYm9vbGVhbj4oKTtcblxuICAvKipcbiAgICogSWYgc2V0IHRvIGB0cnVlYCwgdGhlIGNvbHVtbiBoZWFkZXJzIHdpbGwgbm90IGJlIHNob3duLiBEZWZhdWx0IGlzIGBmYWxzZWAuXG4gICAqL1xuICBoaWRlQ29sdW1uSGVhZGVycyA9IGlucHV0KGZhbHNlKTtcblxuICAvKipcbiAgICogQ2hvb3NlIGZyb20gYSBwcmVkZWZpbmVkIHNldCBvZiBkaXNwbGF5IHZhcmlhbnRzLlxuICAgKi9cbiAgdmFyaWFudCA9IGlucHV0PCd6ZWJyYSc+KCk7XG5cbiAgLyoqXG4gICAqIEFycmF5IG9mIHJvd3MgdGhhdCBhcmUgY3VycmVudGx5IGV4cGFuZGVkLlxuICAgKi9cbiAgZXhwYW5kZWQgPSBtb2RlbDxUW10+KFtdKTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgZnVuY3Rpb24gZm9yIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIHJvd3MuXG4gICAqL1xuICB0cmFja0J5ID0gaW5wdXQ8VHJhY2tCeUZ1bmN0aW9uPFQ+IHwga2V5b2YgVD4oKTtcblxuICAvKipcbiAgICogRW1pdHMgd2hlbmV2ZXIgdGhlIHNlbGVjdGlvbiB1cGRhdGVzLiBPbmx5IHdvcmtzIHdoZW4gc2VsZWN0YWJsZSBpcyBgdHJ1ZWAuXG4gICAqL1xuICBzZWxlY3Rpb25DaGFuZ2UgPSBvdXRwdXQ8VFtdPigpO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqIFRoZSBgb2JzZXJ2ZWRgIGJvb2xlYW4gZnJvbSB0aGUgYFN1YmplY3RgIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgcm93IGlzXG4gICAqIGNsaWNrYWJsZSBvciBub3QuIFRoaXMgaXMgYXZhaWxhYmxlIG9uIGBFdmVudEVtaXR0ZXJgLCBidXQgbm90IG9uIGBvdXRwdXRgLFxuICAgKiB3aGljaCBpcyB3aHkgdGhpcyB3b3JrYXJvdW5kIGlzIHVzZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3Jvd0NsaWNrJCA9IG5ldyBTdWJqZWN0PFQ+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHdoZW5ldmVyIGEgcm93IGlzIGNsaWNrZWQuXG4gICAqL1xuICByb3dDbGljayA9IG91dHB1dEZyb21PYnNlcnZhYmxlKHRoaXMuX3Jvd0NsaWNrJCk7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBhY3RpdmUgc29ydCBvciBzb3J0IGRpcmVjdGlvbi5cbiAgICovXG4gIHNvcnRDaGFuZ2UgPSBvdXRwdXQ8U29ydD4oKTtcblxuICAvLyBRdWVyaWVzXG4gIHByb3RlY3RlZCBjZWxscyA9IGNvbnRlbnRDaGlsZHJlbihXYXR0VGFibGVDZWxsRGlyZWN0aXZlPFQ+KTtcbiAgcHJvdGVjdGVkIHRvb2xiYXIgPSBjb250ZW50Q2hpbGQoV2F0dFRhYmxlVG9vbGJhckRpcmVjdGl2ZTxUPik7XG4gIHByb3RlY3RlZCBzb3J0ID0gdmlld0NoaWxkKE1hdFNvcnQpO1xuICBwcm90ZWN0ZWQgdGFibGVDZWxsRWxlbWVudHMgPSB2aWV3Q2hpbGRyZW48RWxlbWVudFJlZjxIVE1MVGFibGVDZWxsRWxlbWVudD4+KCd0ZCcpO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIF9hbmltYXRpb25FZmZlY3QgPSBhbmltYXRlRXhwYW5kYWJsZUNlbGxzKHRoaXMudGFibGVDZWxsRWxlbWVudHMsIHRoaXMuZXhwYW5kZWQpO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIF9zZWxlY3Rpb25Nb2RlbCA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUPih0cnVlLCBbXSk7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2NoZWNrYm94Q29sdW1uID0gJ19fY2hlY2tib3hDb2x1bW5fXyc7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2V4cGFuZGFibGVDb2x1bW4gPSAnX19leHBhbmRhYmxlQ29sdW1uX18nO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIF9lbGVtZW50ID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBfZGF0ZVBpcGUgPSBpbmplY3QoV2F0dERhdGVQaXBlKTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBfaGFzRm9vdGVyID0gc2lnbmFsKGZhbHNlKTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIGZvcm1hdENlbGxEYXRhKGNlbGw6IHVua25vd24pIHtcbiAgICBpZiAoIWNlbGwpIHJldHVybiAn4oCUJztcbiAgICBpZiAoY2VsbCBpbnN0YW5jZW9mIERhdGUpIHJldHVybiB0aGlzLl9kYXRlUGlwZS50cmFuc2Zvcm0oY2VsbCk7XG4gICAgcmV0dXJuIGNlbGw7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIGdldENlbGxEYXRhKHJvdzogVCwgY29sdW1uPzogV2F0dFRhYmxlQ29sdW1uPFQ+KSB7XG4gICAgaWYgKCFjb2x1bW4/LmFjY2Vzc29yKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB7IGFjY2Vzc29yIH0gPSBjb2x1bW47XG4gICAgY29uc3QgY2VsbCA9IHR5cGVvZiBhY2Nlc3NvciA9PT0gJ2Z1bmN0aW9uJyA/IGFjY2Vzc29yKHJvdykgOiByb3dbYWNjZXNzb3JdO1xuICAgIHJldHVybiB0aGlzLmZvcm1hdENlbGxEYXRhKGNlbGwpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBjaGVja0hhc0Zvb3RlcigpOiB2b2lkIHtcbiAgICB0aGlzLl9oYXNGb290ZXIuc2V0KE9iamVjdC52YWx1ZXModGhpcy5jb2x1bW5zKCkpLnNvbWUoKGNvbHVtbikgPT4gISFjb2x1bW4uZm9vdGVyKSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2V0U2VsZWN0aW9uKC4uLih0aGlzLmluaXRpYWxTZWxlY3Rpb24oKSA/PyBbXSkpO1xuICAgIH0pO1xuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNoYW5nZWRcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKCkgPT4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoc2VsZWN0aW9uKSA9PiB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHNlbGVjdGlvbikpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGNvbnN0IGRhdGFTb3VyY2UgPSB0aGlzLmRhdGFTb3VyY2UoKTtcbiAgICBpZiAoZGF0YVNvdXJjZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cbiAgICB0aGlzLmNoZWNrSGFzRm9vdGVyKCk7XG4gICAgZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0KCk7XG4gICAgaWYgKGRhdGFTb3VyY2UgaW5zdGFuY2VvZiBXYXR0VGFibGVEYXRhU291cmNlID09PSBmYWxzZSkgcmV0dXJuO1xuICAgIGRhdGFTb3VyY2Uuc29ydGluZ0RhdGFBY2Nlc3NvciA9IChyb3c6IFQsIHNvcnRIZWFkZXJJZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBzb3J0Q29sdW1uID0gdGhpcy5jb2x1bW5zKClbc29ydEhlYWRlcklkXTtcbiAgICAgIGlmICghc29ydENvbHVtbj8uYWNjZXNzb3IpIHJldHVybiAnJztcblxuICAgICAgLy8gQWNjZXNzIHJhdyB2YWx1ZSBmb3Igc29ydGluZywgaW5zdGVhZCBvZiBhcHBseWluZyBkZWZhdWx0IGZvcm1hdHRpbmcuXG4gICAgICBjb25zdCB7IGFjY2Vzc29yIH0gPSBzb3J0Q29sdW1uO1xuICAgICAgY29uc3QgY2VsbCA9IHR5cGVvZiBhY2Nlc3NvciA9PT0gJ2Z1bmN0aW9uJyA/IGFjY2Vzc29yKHJvdykgOiByb3dbYWNjZXNzb3JdO1xuXG4gICAgICAvLyBNYWtlIHNvcnRpbmcgYnkgdGV4dCBjYXNlIGluc2Vuc2l0aXZlLlxuICAgICAgaWYgKHR5cGVvZiBjZWxsID09PSAnc3RyaW5nJykgcmV0dXJuIGNlbGwudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChjZWxsIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIGNlbGwuZ2V0VGltZSgpO1xuICAgICAgcmV0dXJuIGNlbGwgYXMgbnVtYmVyO1xuICAgIH07XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ2NvbHVtbnMnXSB8fCBjaGFuZ2VzWydkaXNwbGF5ZWRDb2x1bW5zJ10gfHwgY2hhbmdlc1snc2VsZWN0YWJsZSddKSB7XG4gICAgICBjb25zdCBkaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zKCk7XG4gICAgICBjb25zdCBzaXppbmcgPSBPYmplY3Qua2V5cyh0aGlzLmNvbHVtbnMoKSlcbiAgICAgICAgLmZpbHRlcigoa2V5KSA9PiAhZGlzcGxheWVkQ29sdW1ucyB8fCBkaXNwbGF5ZWRDb2x1bW5zLmluY2x1ZGVzKGtleSkpXG4gICAgICAgIC5tYXAoKGtleSkgPT4gdGhpcy5jb2x1bW5zKClba2V5XSlcbiAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiAhY29sdW1uLmV4cGFuZGFibGUpXG4gICAgICAgIC5tYXAoKGNvbHVtbikgPT4gY29sdW1uLnNpemUgPz8gJ2F1dG8nKTtcblxuICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSgpKSB7XG4gICAgICAgIC8vIEFkZCBzcGFjZSBmb3IgZXh0cmEgY2hlY2tib3ggY29sdW1uXG4gICAgICAgIHNpemluZy51bnNoaWZ0KCd2YXIoLS13YXR0LXNwYWNlLXhsKScpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5faXNFeHBhbmRhYmxlKCkpIHtcbiAgICAgICAgLy8gQWRkIHNwYWNlIGZvciBleHRyYSBleHBhbmRhYmxlIGNvbHVtblxuICAgICAgICBzaXppbmcucHVzaCgnbWluLWNvbnRlbnQnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAnLS13YXR0LXRhYmxlLWdyaWQtdGVtcGxhdGUtY29sdW1ucycsXG4gICAgICAgIHNpemluZy5qb2luKCcgJylcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuY2hlY2tIYXNGb290ZXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBzZWxlY3Rpb24uIE9ubHkgd29ya3Mgd2hlbiBzZWxlY3RhYmxlIGlzIGB0cnVlYC5cbiAgICovXG4gIGNsZWFyU2VsZWN0aW9uKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGFibGUoKSkge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBnZXQgX2NvbHVtblNlbGVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5kYXRhU291cmNlKCkuZmlsdGVyZWREYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UoKS5maWx0ZXJlZERhdGEuZXZlcnkoKHJvdykgPT4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChyb3cpKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHNldCBfY29sdW1uU2VsZWN0aW9uKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZXRTZWxlY3Rpb24oLi4udGhpcy5kYXRhU291cmNlKCkuZmlsdGVyZWREYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBfZmlsdGVyZWRTZWxlY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLmZpbHRlcigocm93KSA9PlxuICAgICAgdGhpcy5kYXRhU291cmNlKCkuZmlsdGVyZWREYXRhLmluY2x1ZGVzKHJvdylcbiAgICApO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2dldENvbHVtbnMoKSB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucygpID8/IE9iamVjdC5rZXlzKHRoaXMuY29sdW1ucygpKTtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uKHRoaXMuc2VsZWN0YWJsZSgpID8gW3RoaXMuX2NoZWNrYm94Q29sdW1uXSA6IFtdKSxcbiAgICAgIC4uLmNvbHVtbnMuZmlsdGVyKChrZXkpID0+ICF0aGlzLmNvbHVtbnMoKVtrZXldLmV4cGFuZGFibGUpLFxuICAgICAgLi4uKHRoaXMuX2lzRXhwYW5kYWJsZSgpID8gW3RoaXMuX2V4cGFuZGFibGVDb2x1bW5dIDogW10pLFxuICAgICAgLi4uY29sdW1ucy5maWx0ZXIoKGtleSkgPT4gdGhpcy5jb2x1bW5zKClba2V5XS5leHBhbmRhYmxlKSxcbiAgICBdO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2dldENvbHVtblRlbXBsYXRlKGNvbHVtbjogV2F0dFRhYmxlQ29sdW1uPFQ+KSB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbHMoKS5maW5kKChpdGVtKSA9PiBpdGVtLmNvbHVtbiA9PT0gY29sdW1uKT8udGVtcGxhdGVSZWY7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBfZ2V0Q29sdW1uSGVhZGVyKGNvbHVtbjogS2V5VmFsdWU8c3RyaW5nLCBXYXR0VGFibGVDb2x1bW48VD4+KSB7XG4gICAgaWYgKHR5cGVvZiBjb2x1bW4udmFsdWUuaGVhZGVyID09PSAnc3RyaW5nJykgcmV0dXJuIGNvbHVtbi52YWx1ZS5oZWFkZXI7XG4gICAgY29uc3QgY2VsbCA9IHRoaXMuY2VsbHMoKS5maW5kKChpdGVtKSA9PiBpdGVtLmNvbHVtbiA9PT0gY29sdW1uLnZhbHVlKTtcbiAgICByZXR1cm4gY2VsbD8uaGVhZGVyID8/IHRoaXMucmVzb2x2ZUhlYWRlcigpPy4oY29sdW1uLmtleSkgPz8gY29sdW1uLmtleTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIF9nZXRDb2x1bW5IZWxwZXJBY3Rpb24oY29sdW1uOiBLZXlWYWx1ZTxzdHJpbmcsIFdhdHRUYWJsZUNvbHVtbjxUPj4pIHtcbiAgICByZXR1cm4gY29sdW1uLnZhbHVlLmhlbHBlckFjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIF9nZXRDb2x1bW5IZWFkZXJUb29sdGlwKGNvbHVtbjogS2V5VmFsdWU8c3RyaW5nLCBXYXR0VGFibGVDb2x1bW48VD4+KSB7XG4gICAgcmV0dXJuIGNvbHVtbi52YWx1ZS50b29sdGlwO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX2dldENvbHVtbkNlbGwoY29sdW1uOiBLZXlWYWx1ZTxzdHJpbmcsIFdhdHRUYWJsZUNvbHVtbjxUPj4sIHJvdzogVCkge1xuICAgIHJldHVybiBjb2x1bW4udmFsdWUuY2VsbD8uKHJvdykgPz8gdGhpcy5nZXRDZWxsRGF0YShyb3csIGNvbHVtbi52YWx1ZSk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBfZ2V0Um93S2V5ID0gKGluZGV4OiBudW1iZXIsIHJvdzogVCkgPT4ge1xuICAgIGNvbnN0IHRyYWNrQnkgPSB0aGlzLnRyYWNrQnkoKTtcbiAgICBpZiAodHlwZW9mIHRyYWNrQnkgPT09ICdzdHJpbmcnKSByZXR1cm4gcm93W3RyYWNrQnldO1xuICAgIGlmICh0eXBlb2YgdHJhY2tCeSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHRyYWNrQnkoaW5kZXgsIHJvdyk7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZSgpLmRhdGEuaW5kZXhPZihyb3cpO1xuICB9O1xuXG4gIC8qKiBAaWdub3JlICovXG4gIF9pc0FjdGl2ZVJvdyhyb3c6IFQpIHtcbiAgICBjb25zdCBhY3RpdmVSb3cgPSB0aGlzLmFjdGl2ZVJvdygpO1xuICAgIGNvbnN0IGFjdGl2ZVJvd0NvbXBhcmF0b3IgPSB0aGlzLmFjdGl2ZVJvd0NvbXBhcmF0b3IoKTtcbiAgICBpZiAoIWFjdGl2ZVJvdykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBhY3RpdmVSb3dDb21wYXJhdG9yID8gYWN0aXZlUm93Q29tcGFyYXRvcihyb3csIGFjdGl2ZVJvdykgOiByb3cgPT09IGFjdGl2ZVJvdztcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIF9pc0V4cGFuZGFibGUoKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5jb2x1bW5zKCkpLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLmV4cGFuZGFibGUpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgX29uUm93Q2xpY2socm93OiBUKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQoKSB8fCB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk/LnRvU3RyaW5nKCkgIT09ICcnKSByZXR1cm47XG4gICAgaWYgKHRoaXMuX2lzRXhwYW5kYWJsZSgpKSB7XG4gICAgICB0aGlzLmV4cGFuZGVkLnVwZGF0ZSgocm93cykgPT5cbiAgICAgICAgcm93cy5pbmNsdWRlcyhyb3cpID8gcm93cy5maWx0ZXIoKHIpID0+IHIgIT0gcm93KSA6IFsuLi5yb3dzLCByb3ddXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX3Jvd0NsaWNrJC5uZXh0KHJvdyk7XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd2F0dC10YWJsZS10b29sYmFyLXNwYWNlcicsXG4gIHRlbXBsYXRlOiAnJyxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICB3aWR0aDogdmFyKC0td2F0dC1zcGFjZS14bCk7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgV2F0dFRhYmxlVG9vbGJhclNwYWNlckNvbXBvbmVudCB7fVxuXG5leHBvcnQgY29uc3QgV0FUVF9UQUJMRSA9IFtcbiAgV2F0dFRhYmxlQ29tcG9uZW50LFxuICBXYXR0VGFibGVDZWxsRGlyZWN0aXZlLFxuICBXYXR0VGFibGVUb29sYmFyRGlyZWN0aXZlLFxuICBXYXR0VGFibGVUb29sYmFyU3BhY2VyQ29tcG9uZW50LFxuXTtcbiIsIjwhLS1cbkBsaWNlbnNlXG5Db3B5cmlnaHQgMjAyMCBFbmVyZ2luZXQgRGF0YUh1YiBBL1NcblxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZTJcIik7XG55b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG5Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG5kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG5XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cblNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS0+XG48dGFibGVcbiAgbWF0LXRhYmxlXG4gIG1hdFNvcnRcbiAgcm9sZT1cInRyZWVncmlkXCJcbiAgW25nQ2xhc3NdPVwieyAnd2F0dC10YWJsZS1oYXMtc2VsZWN0aW9uJzogX2ZpbHRlcmVkU2VsZWN0aW9uLmxlbmd0aCA+IDAgfVwiXG4gIFttYXRTb3J0QWN0aXZlXT1cInNvcnRCeSgpXCJcbiAgW21hdFNvcnREaXJlY3Rpb25dPVwic29ydERpcmVjdGlvbigpXCJcbiAgW21hdFNvcnREaXNhYmxlQ2xlYXJdPVwiIXNvcnRDbGVhcigpXCJcbiAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZSgpXCJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJkZXNjcmlwdGlvbigpXCJcbiAgKG1hdFNvcnRDaGFuZ2UpPVwic29ydENoYW5nZS5lbWl0KCRldmVudClcIlxuPlxuICBAaWYgKHNlbGVjdGFibGUoKSkge1xuICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJfY2hlY2tib3hDb2x1bW5cIiBbc3RpY2t5XT1cInRydWVcIj5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJ3YXR0LXRhYmxlLWNoZWNrYm94LWNlbGxcIj5cbiAgICAgICAgPHdhdHQtY2hlY2tib3ggWyhuZ01vZGVsKV09XCJfY29sdW1uU2VsZWN0aW9uXCIgLz5cbiAgICAgIDwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJ3YXR0LXRhYmxlLWNoZWNrYm94LWNlbGxcIj5cbiAgICAgICAgPHdhdHQtY2hlY2tib3hcbiAgICAgICAgICBbbmdNb2RlbF09XCJfc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJfc2VsZWN0aW9uTW9kZWwudG9nZ2xlKHJvdylcIlxuICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAvPlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgfVxuXG4gIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJfZXhwYW5kYWJsZUNvbHVtblwiPlxuICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+PC90aD5cbiAgICA8dGRcbiAgICAgICN0ZFxuICAgICAgbWF0LWNlbGxcbiAgICAgICptYXRDZWxsRGVmPVwibGV0IHJvdzsgbGV0IGluZGV4ID0gaW5kZXhcIlxuICAgICAgW2F0dHIuZGF0YS1rZXldPVwiX2dldFJvd0tleShpbmRleCwgcm93KVwiXG4gICAgICBbYXR0ci5kYXRhLXJvdy1pbmRleF09XCJpbmRleFwiXG4gICAgICAoY2xpY2spPVwiX29uUm93Q2xpY2socm93KVwiXG4gICAgICBbY2xhc3Mud2F0dC10YWJsZS1jZWxsLS1leHBhbmRlZF09XCJleHBhbmRlZCgpLmluY2x1ZGVzKHJvdylcIlxuICAgID5cbiAgICAgIDx3YXR0LWljb24gbmFtZT1cInJpZ2h0XCIgc2l6ZT1cInhzXCIgLz5cbiAgICA8L3RkPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICBAZm9yIChjb2x1bW4gb2YgY29sdW1ucygpIHwga2V5dmFsdWU7IHRyYWNrIGNvbHVtbi5rZXkpIHtcbiAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uLmtleVwiIFtzdGlja3lFbmRdPVwiY29sdW1uLnZhbHVlLnN0aWNreUVuZD8uKClcIj5cbiAgICAgIDx0aFxuICAgICAgICBtYXQtaGVhZGVyLWNlbGxcbiAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgW2NsYXNzLndhdHQtdGFibGUtY2VsbC0tZXhwYW5kYWJsZV09XCJjb2x1bW4udmFsdWUuZXhwYW5kYWJsZVwiXG4gICAgICAgIGNsYXNzPVwid2F0dC10YWJsZS1hbGlnbi17eyBjb2x1bW4udmFsdWUuYWxpZ24gPz8gJ2xlZnQnIH19IHt7XG4gICAgICAgICAgY29sdW1uLnZhbHVlLmhlYWRlckNlbGxDbGFzc1xuICAgICAgICB9fVwiXG4gICAgICA+XG4gICAgICAgIEBpZiAoX2dldENvbHVtbkhlbHBlckFjdGlvbihjb2x1bW4pOyBhcyBhY3Rpb24pIHtcbiAgICAgICAgICA8d2F0dC1pY29uIG5hbWU9XCJoZWxwXCIgKGNsaWNrKT1cImFjdGlvbigpXCIgLz5cbiAgICAgICAgfVxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIndhdHQtdGFibGUtaGVhZGVyLWNlbGxcIlxuICAgICAgICAgIG1hdC1zb3J0LWhlYWRlclxuICAgICAgICAgIFthcnJvd1Bvc2l0aW9uXT1cImNvbHVtbi52YWx1ZS5hbGlnbiA9PT0gJ3JpZ2h0JyA/ICdiZWZvcmUnIDogJ2FmdGVyJ1wiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFjb2x1bW4udmFsdWUuYWNjZXNzb3IgfHwgY29sdW1uLnZhbHVlLnNvcnQgPT09IGZhbHNlXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IF9nZXRDb2x1bW5IZWFkZXIoY29sdW1uKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChfZ2V0Q29sdW1uSGVhZGVyVG9vbHRpcChjb2x1bW4pOyBhcyB0b29sdGlwKSB7XG4gICAgICAgICAgPHdhdHQtaWNvbiBbdGl0bGVdPVwidG9vbHRpcFwiIG5hbWU9XCJpbmZvXCIgLz5cbiAgICAgICAgfVxuICAgICAgPC90aD5cblxuICAgICAgPHRkXG4gICAgICAgICN0ZFxuICAgICAgICBtYXQtY2VsbFxuICAgICAgICAqbWF0Q2VsbERlZj1cImxldCByb3c7IGxldCBpbmRleCA9IGluZGV4XCJcbiAgICAgICAgW2F0dHIuZGF0YS1rZXldPVwiX2dldFJvd0tleShpbmRleCwgcm93KVwiXG4gICAgICAgIFthdHRyLmRhdGEtcm93LWluZGV4XT1cImluZGV4XCJcbiAgICAgICAgW2NsYXNzLndhdHQtdGFibGUtY2VsbC0tZXhwYW5kZWRdPVwiZXhwYW5kZWQoKS5pbmNsdWRlcyhyb3cpXCJcbiAgICAgICAgW2NsYXNzLndhdHQtdGFibGUtY2VsbC0tZXhwYW5kYWJsZV09XCJjb2x1bW4udmFsdWUuZXhwYW5kYWJsZVwiXG4gICAgICAgIGNsYXNzPVwid2F0dC10YWJsZS1hbGlnbi17eyBjb2x1bW4udmFsdWUuYWxpZ24gPz8gJ2xlZnQnIH19IHt7IGNvbHVtbi52YWx1ZS5kYXRhQ2VsbENsYXNzIH19XCJcbiAgICAgICAgKGNsaWNrKT1cIiFjb2x1bW4udmFsdWUuZXhwYW5kYWJsZSAmJiBfb25Sb3dDbGljayhyb3cpXCJcbiAgICAgID5cbiAgICAgICAgQGlmIChfaXNFeHBhbmRhYmxlKCkpIHtcbiAgICAgICAgICBAZGVmZXIgKHdoZW4gIWNvbHVtbi52YWx1ZS5leHBhbmRhYmxlIHx8IGV4cGFuZGVkKCkuaW5jbHVkZXMocm93KSkge1xuICAgICAgICAgICAgQGlmIChfZ2V0Q29sdW1uVGVtcGxhdGUoY29sdW1uLnZhbHVlKTsgYXMgdGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndhdHQtdGFibGUtY2VsbC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93IH1cIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICB7eyBfZ2V0Q29sdW1uQ2VsbChjb2x1bW4sIHJvdykgfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIEBpZiAoX2dldENvbHVtblRlbXBsYXRlKGNvbHVtbi52YWx1ZSk7IGFzIHRlbXBsYXRlKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2F0dC10YWJsZS1jZWxsLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93IH1cIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICB7eyBfZ2V0Q29sdW1uQ2VsbChjb2x1bW4sIHJvdykgfX1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvdGQ+XG5cbiAgICAgIEBpZiAoX2hhc0Zvb3RlcigpKSB7XG4gICAgICAgIDx0ZFxuICAgICAgICAgIG1hdC1mb290ZXItY2VsbFxuICAgICAgICAgICptYXRGb290ZXJDZWxsRGVmXG4gICAgICAgICAgY2xhc3M9XCJ7eyBjb2x1bW4udmFsdWUuZm9vdGVyPy5jbGFzcyB9fSB3YXR0LXRhYmxlLWFsaWduLXt7XG4gICAgICAgICAgICBjb2x1bW4udmFsdWUuYWxpZ24gPz8gJ2xlZnQnXG4gICAgICAgICAgfX0gXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGNvbHVtbi52YWx1ZS5mb290ZXI/LnZhbHVlPy4oKSB9fVxuICAgICAgICA8L3RkPlxuICAgICAgfVxuICAgIDwvbmctY29udGFpbmVyPlxuICB9XG5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzcGFjZXJcIj5cbiAgICA8dGQgY2xhc3M9XCJ3YXR0LXRhYmxlLWZvb3Rlci1zcGFjZXJcIiBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+PC90ZD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgQGlmICghaGlkZUNvbHVtbkhlYWRlcnMoKSkge1xuICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiX2dldENvbHVtbnMoKVwiPjwvdHI+XG4gIH1cbiAgPHRyXG4gICAgbWF0LXJvd1xuICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBfZ2V0Q29sdW1ucygpXCJcbiAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInJvdyA9PT0gYWN0aXZlUm93KClcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICd3YXR0LXRhYmxlLWhpZ2hsaWdodC1yb3cnOiAhZGlzYWJsZWQoKSAmJiAhc3VwcHJlc3NSb3dIb3ZlckhpZ2hsaWdodCgpLFxuICAgICAgJ3dhdHQtdGFibGUtY2xpY2thYmxlLXJvdyc6ICFkaXNhYmxlZCgpICYmIF9yb3dDbGljayQub2JzZXJ2ZWQsXG4gICAgICAnd2F0dC10YWJsZS1hY3RpdmUtcm93JzogX2lzQWN0aXZlUm93KHJvdyksXG4gICAgICAnd2F0dC10YWJsZS1uby1lbmQtZGl2aWRlcic6IGhpZGVDb2x1bW5IZWFkZXJzKCksXG4gICAgfVwiXG4gID48L3RyPlxuXG4gIEBpZiAodG9vbGJhcigpKSB7XG4gICAgPHRyIG1hdC1mb290ZXItcm93ICptYXRGb290ZXJSb3dEZWY9XCJbJ3NwYWNlciddXCI+PC90cj5cbiAgfVxuXG4gIEBpZiAoX2hhc0Zvb3RlcigpKSB7XG4gICAgPHRyXG4gICAgICBtYXQtZm9vdGVyLXJvd1xuICAgICAgW2NsYXNzLndhdHQtdGFibGUtaGlkZS1mb290ZXJdPVwibG9hZGluZygpIHx8IGRhdGFTb3VyY2UoKS5maWx0ZXJlZERhdGEubGVuZ3RoID09PSAwXCJcbiAgICAgICptYXRGb290ZXJSb3dEZWY9XCJfZ2V0Q29sdW1ucygpOyBzdGlja3k6IHN0aWNreUZvb3RlcigpXCJcbiAgICA+PC90cj5cbiAgfVxuXG4gIDxuZy1jb250YWluZXIgKm1hdE5vRGF0YVJvdz5cbiAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgQGZvciAoaSBvZiBbMSwgMiwgM107IHRyYWNrIGkpIHtcbiAgICAgICAgPHRyIGNsYXNzPVwibWF0LW1kYy1yb3dcIj5cbiAgICAgICAgICBAZm9yIChfIG9mIF9nZXRDb2x1bW5zKCk7IHRyYWNrIF87IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJtYXQtbWRjLWNlbGxcIiBbY2xhc3Mud2F0dC10YWJsZS1sb2FkaW5nLWNlbGxdPVwiaSA+IDAgfHwgIXNlbGVjdGFibGUoKVwiPjwvdGQ+XG4gICAgICAgICAgfVxuICAgICAgICA8L3RyPlxuICAgICAgfVxuICAgIH1cbiAgPC9uZy1jb250YWluZXI+XG48L3RhYmxlPlxuXG5AaWYgKHRvb2xiYXIoKTsgYXMgdG9vbGJhcikge1xuICA8ZGl2IGNsYXNzPVwid2F0dC10YWJsZS10b29sYmFyXCIgcm9sZT1cInRvb2xiYXJcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRvb2xiYXIudGVtcGxhdGVSZWY7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBfZmlsdGVyZWRTZWxlY3Rpb24gfVwiXG4gICAgLz5cbiAgPC9kaXY+XG59XG4iXX0=
|
|
@@ -52,6 +52,8 @@ export class WattYearMonthField {
|
|
|
52
52
|
min = input(...(ngDevMode ? [undefined, { debugName: "min" }] : []));
|
|
53
53
|
/** The maximum selectable date. */
|
|
54
54
|
max = input(...(ngDevMode ? [undefined, { debugName: "max" }] : []));
|
|
55
|
+
/** Whether the calendar should be started in month or year view. */
|
|
56
|
+
startView = input('multi-year', ...(ngDevMode ? [{ debugName: "startView" }] : []));
|
|
55
57
|
/** Enable buttons to step through months. */
|
|
56
58
|
canStepThroughMonths = input(false, ...(ngDevMode ? [{ debugName: "canStepThroughMonths", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
|
|
57
59
|
/** Emits when the selected month has changed. */
|
|
@@ -133,7 +135,7 @@ export class WattYearMonthField {
|
|
|
133
135
|
return isSame || isAfter;
|
|
134
136
|
}
|
|
135
137
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: WattYearMonthField, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
136
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: WattYearMonthField, isStandalone: true, selector: "watt-yearmonth-field", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, canStepThroughMonths: { classPropertyName: "canStepThroughMonths", publicName: "canStepThroughMonths", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { monthChange: "monthChange", blur: "blur" }, providers: [
|
|
138
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: WattYearMonthField, isStandalone: true, selector: "watt-yearmonth-field", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, startView: { classPropertyName: "startView", publicName: "startView", isSignal: true, isRequired: false, transformFunction: null }, canStepThroughMonths: { classPropertyName: "canStepThroughMonths", publicName: "canStepThroughMonths", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { monthChange: "monthChange", blur: "blur" }, providers: [
|
|
137
139
|
{
|
|
138
140
|
provide: NG_VALUE_ACCESSOR,
|
|
139
141
|
useExisting: forwardRef(() => WattYearMonthField),
|
|
@@ -158,7 +160,7 @@ export class WattYearMonthField {
|
|
|
158
160
|
>
|
|
159
161
|
@if (isOpen()) {
|
|
160
162
|
<mat-calendar
|
|
161
|
-
startView="
|
|
163
|
+
[startView]="startView()"
|
|
162
164
|
[startAt]="selected()"
|
|
163
165
|
[selected]="selected()"
|
|
164
166
|
[minDate]="min()"
|
|
@@ -220,7 +222,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
|
|
|
220
222
|
>
|
|
221
223
|
@if (isOpen()) {
|
|
222
224
|
<mat-calendar
|
|
223
|
-
startView="
|
|
225
|
+
[startView]="startView()"
|
|
224
226
|
[startAt]="selected()"
|
|
225
227
|
[selected]="selected()"
|
|
226
228
|
[minDate]="min()"
|
|
@@ -255,4 +257,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
|
|
|
255
257
|
}
|
|
256
258
|
`, styles: ["watt-yearmonth-field{display:block;width:100%}watt-yearmonth-field input{text-transform:capitalize}watt-yearmonth-field:has(.watt-yearmonth-field__step-through){display:flex;flex-align:flex-start}watt-yearmonth-field:has(.watt-yearmonth-field__step-through) .watt-yearmonth-field__step-through{display:flex}watt-yearmonth-field:has(.watt-yearmonth-field__has-label) .watt-yearmonth-field__step-through{margin-top:28px}.watt-yearmonth-field-picker{position:fixed;position-area:bottom span-right;position-try-fallbacks:flip-block;width:296px;height:354px;inset:unset;margin:unset;border:0}\n"] }]
|
|
257
259
|
}] });
|
|
258
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC15ZWFybW9udGgtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy93YXR0L3BhY2thZ2UveWVhcm1vbnRoLWZpZWxkL3dhdHQteWVhcm1vbnRoLWZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7QUFDakI7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsWUFBWTtBQUNaLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixtQkFBbUIsR0FDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEcsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTNELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7QUFFekMsMkRBQTJEO0FBeUczRCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLDJGQUEyRjtJQUMzRiwyRkFBMkY7SUFDbkYsTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDcEIsUUFBUSxHQUFHLGtCQUFrQixDQUFDLFFB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QUFDLENBQUM7UUFDbkQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFakQsT0FBTyxNQUFNLElBQUksT0FBTyxDQUFDO0lBQzNCLENBQUM7dUdBcElVLGtCQUFrQjsyRkFBbEIsa0JBQWtCLHVvQkFwR2xCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDakQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLDBCQXdDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9EVCxzcEJBM0ZTLG1CQUFtQiwwa0JBQUUsV0FBVyw4WUFBRSxtQkFBbUIsc0lBQUUsa0JBQWtCOzsyRkE2RnhFLGtCQUFrQjtrQkF4RzlCLFNBQVM7K0JBQ0Usc0JBQXNCLGlCQUNqQixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG1CQUFtQixDQUFDOzRCQUNqRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRixXQUNRLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixDQUFDLFlBdUMxRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9EVCIsInNvdXJjZXNDb250ZW50IjpbIi8vI3JlZ2lvbiBMaWNlbnNlXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBFbmVyZ2luZXQgRGF0YUh1YiBBL1NcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlMlwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyNlbmRyZWdpb25cbmltcG9ydCB7XG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBmb3J3YXJkUmVmLFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtQ29udHJvbCxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IG91dHB1dEZyb21PYnNlcnZhYmxlLCB0YWtlVW50aWxEZXN0cm95ZWQsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgbWFwLCBzaGFyZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWF0Q2FsZW5kYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcblxuaW1wb3J0IHsgZGF5anMgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvY29yZS9kYXRlJztcbmltcG9ydCB7IFdhdHRGaWVsZENvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC9maWVsZCc7XG5pbXBvcnQgeyBXYXR0QnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2J1dHRvbic7XG5cbmltcG9ydCB7IFllYXJNb250aCB9IGZyb20gJy4veWVhci1tb250aCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtY2xhc3Mtc3VmZml4ICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd3YXR0LXllYXJtb250aC1maWVsZCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFdhdHRZZWFyTW9udGhGaWVsZCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxuICBpbXBvcnRzOiBbUmVhY3RpdmVGb3Jtc01vZHVsZSwgTWF0Q2FsZW5kYXIsIFdhdHRCdXR0b25Db21wb25lbnQsIFdhdHRGaWVsZENvbXBvbmVudF0sXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIHdhdHQteWVhcm1vbnRoLWZpZWxkIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgICAgICYgaW5wdXQge1xuICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgJjpoYXMoLndhdHQteWVhcm1vbnRoLWZpZWxkX19zdGVwLXRocm91Z2gpIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtYWxpZ246IGZsZXgtc3RhcnQ7XG5cbiAgICAgICAgICAud2F0dC15ZWFybW9udGgtZmllbGRfX3N0ZXAtdGhyb3VnaCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICY6aGFzKC53YXR0LXllYXJtb250aC1maWVsZF9faGFzLWxhYmVsKSB7XG4gICAgICAgICAgLndhdHQteWVhcm1vbnRoLWZpZWxkX19zdGVwLXRocm91Z2gge1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogMjhweDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLndhdHQteWVhcm1vbnRoLWZpZWxkLXBpY2tlciB7XG4gICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgcG9zaXRpb24tYXJlYTogYm90dG9tIHNwYW4tcmlnaHQ7XG4gICAgICAgIHBvc2l0aW9uLXRyeS1mYWxsYmFja3M6IGZsaXAtYmxvY2s7XG4gICAgICAgIHdpZHRoOiAyOTZweDtcbiAgICAgICAgaGVpZ2h0OiAzNTRweDtcbiAgICAgICAgaW5zZXQ6IHVuc2V0O1xuICAgICAgICBtYXJnaW46IHVuc2V0O1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8d2F0dC1maWVsZCBbbGFiZWxdPVwibGFiZWwoKVwiIFtjb250cm9sXT1cImNvbnRyb2xcIiBbYW5jaG9yTmFtZV09XCJhbmNob3JOYW1lXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgI2ZpZWxkXG4gICAgICAgIHJlYWRvbmx5XG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgKGZvY3VzKT1cImhhbmRsZUZvY3VzKHBpY2tlcilcIlxuICAgICAgICAoYmx1cik9XCJoYW5kbGVCbHVyKHBpY2tlciwgJGV2ZW50KVwiXG4gICAgICAvPlxuICAgICAgPHdhdHQtYnV0dG9uIGljb249XCJkYXRlXCIgdmFyaWFudD1cImljb25cIiAoY2xpY2spPVwiZmllbGQuZm9jdXMoKVwiIC8+XG4gICAgICA8ZGl2XG4gICAgICAgICNwaWNrZXJcbiAgICAgICAgY2xhc3M9XCJ3YXR0LWVsZXZhdGlvbiB3YXR0LXllYXJtb250aC1maWVsZC1waWNrZXJcIlxuICAgICAgICBwb3BvdmVyPVwibWFudWFsXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgW3N0eWxlLnBvc2l0aW9uLWFuY2hvcl09XCJhbmNob3JOYW1lXCJcbiAgICAgID5cbiAgICAgICAgQGlmIChpc09wZW4oKSkge1xuICAgICAgICAgIDxtYXQtY2FsZW5kYXJcbiAgICAgICAgICAgIHN0YXJ0Vmlldz1cIm11bHRpLXllYXJcIlxuICAgICAgICAgICAgW3N0YXJ0QXRdPVwic2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICBbbWluRGF0ZV09XCJtaW4oKVwiXG4gICAgICAgICAgICBbbWF4RGF0ZV09XCJtYXgoKVwiXG4gICAgICAgICAgICAobW9udGhTZWxlY3RlZCk9XCJoYW5kbGVTZWxlY3RlZENoYW5nZShmaWVsZCwgJGV2ZW50KVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGVudCAvPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwid2F0dC1maWVsZC1lcnJvclwiIG5nUHJvamVjdEFzPVwid2F0dC1maWVsZC1lcnJvclwiIC8+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJ3YXR0LWZpZWxkLWhpbnRcIiBuZ1Byb2plY3RBcz1cIndhdHQtZmllbGQtaGludFwiIC8+XG4gICAgPC93YXR0LWZpZWxkPlxuXG4gICAgQGlmIChjYW5TdGVwVGhyb3VnaE1vbnRocygpKSB7XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cIndhdHQteWVhcm1vbnRoLWZpZWxkX19zdGVwLXRocm91Z2hcIlxuICAgICAgICBbY2xhc3Mud2F0dC15ZWFybW9udGgtZmllbGRfX2hhcy1sYWJlbF09XCIhIWxhYmVsKClcIlxuICAgICAgPlxuICAgICAgICA8d2F0dC1idXR0b25cbiAgICAgICAgICB2YXJpYW50PVwiaWNvblwiXG4gICAgICAgICAgaWNvbj1cImxlZnRcIlxuICAgICAgICAgIChjbGljayk9XCJwcmV2TW9udGgoZmllbGQpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiY29udHJvbC5kaXNhYmxlZCB8fCBpc1ByZXZNb250aEJ1dHRvbkRpc2FibGVkKClcIlxuICAgICAgICAvPlxuICAgICAgICA8d2F0dC1idXR0b25cbiAgICAgICAgICB2YXJpYW50PVwiaWNvblwiXG4gICAgICAgICAgaWNvbj1cInJpZ2h0XCJcbiAgICAgICAgICAoY2xpY2spPVwibmV4dE1vbnRoKGZpZWxkKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImNvbnRyb2wuZGlzYWJsZWQgfHwgaXNOZXh0TW9udGhCdXR0b25EaXNhYmxlZCgpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvc3Bhbj5cbiAgICB9XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIFdhdHRZZWFyTW9udGhGaWVsZCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgLy8gUG9wb3ZlcnMgZXhpc3RzIG9uIGFuIGVudGlyZWx5IGRpZmZlcmVudCBsYXllciwgbWVhbmluZyB0aGF0IGZvciBhbmNob3IgcG9zaXRpb25pbmcgdGhleVxuICAvLyBsb29rIGF0IHRoZSBlbnRpcmUgdHJlZSBmb3IgdGhlIGFuY2hvciBuYW1lLiBUaGlzIGdpdmVzIGVhY2ggZmllbGQgYSB1bmlxdWUgYW5jaG9yIG5hbWUuXG4gIHByaXZhdGUgc3RhdGljIGluc3RhbmNlID0gMDtcbiAgcHJpdmF0ZSBpbnN0YW5jZSA9IFdhdHRZZWFyTW9udGhGaWVsZC5pbnN0YW5jZSsrO1xuICBwcm90ZWN0ZWQgYW5jaG9yTmFtZSA9IGAtLXdhdHQteWVhcm1vbnRoLWZpZWxkLXBvcG92ZXItYW5jaG9yLSR7dGhpcy5pbnN0YW5jZX1gO1xuXG4gIC8vIFRoZSBmb3JtYXQgb2YgdGhlIGlubmVyIEZvcm1Db250cm9sIGlzIGRpZmZlcmVudCBmcm9tIHRoYXQgb2YgdGhlIG91dGVyIEZvcm1Db250cm9sXG4gIHByb3RlY3RlZCBjb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xuXG4gIC8vIGByZWdpc3Rlck9uQ2hhbmdlYCBtYXkgc3Vic2NyaWJlIHRvIHRoaXMgY29tcG9uZW50IGFmdGVyIGl0IGhhcyBiZWVuIGRlc3Ryb3llZCwgdGh1c1xuICAvLyB0cmlnZ2VyaW5nIGFuIE5HMDkxMSBmcm9tIHRoZSBgdGFrZVVudGlsRGVzdHJveWVkYCBvcGVyYXRvci4gQnkgc2hhcmluZyB0aGUgb2JzZXJ2YWJsZSxcbiAgLy8gdGhlIG9ic2VydmFibGUgd2lsbCBhbHJlYWR5IGJlIGNsb3NlZCBhbmQgYHN1YnNjcmliZWAgYmVjb21lcyBhIHByb3BlciBub29wLlxuICBwcml2YXRlIHllYXJNb250aENoYW5nZXMgPSB0aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUobWFwKFllYXJNb250aC5mcm9tVmlldykpO1xuICBwcml2YXRlIHZhbHVlQ2hhbmdlcyA9IHRoaXMueWVhck1vbnRoQ2hhbmdlcy5waXBlKFxuICAgIG1hcCgoeWVhck1vbnRoKSA9PiB5ZWFyTW9udGgudG9Nb2RlbCgpKSxcbiAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICBzaGFyZSgpXG4gICk7XG5cbiAgcHJpdmF0ZSB5ZWFyTW9udGggPSB0b1NpZ25hbCh0aGlzLnllYXJNb250aENoYW5nZXMpO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnllYXJNb250aCgpPy50b0RhdGUoKSk7XG5cbiAgLy8gVGhpcyBpcyB1c2VkIHRvIHJlc2V0IHRoZSBNYXRDYWxlbmRhciBjb21wb25lbnQgYnkgZGVzdHJveWluZyBhbmQgdGhlbiByZWNyZWF0aW5nIGl0XG4gIC8vIHdoZW5ldmVyIHRoZSBwaWNrZXIgaXMgb3BlbmVkLiBUaGVyZSBpcyBubyBtZXRob2RzIHRvIGRvIGl0IHByb2dyYW1hdGljYWxseS5cbiAgcHJvdGVjdGVkIGlzT3BlbiA9IHNpZ25hbChmYWxzZSk7XG5cbiAgLyoqIFNldCB0aGUgbGFiZWwgdGV4dCBmb3IgYHdhdHQtZmllbGRgLiAqL1xuICBsYWJlbCA9IGlucHV0KCcnKTtcblxuICAvKiogVGhlIG1pbmltdW0gc2VsZWN0YWJsZSBkYXRlLiAqL1xuICBtaW4gPSBpbnB1dDxEYXRlPigpO1xuXG4gIC8qKiBUaGUgbWF4aW11bSBzZWxlY3RhYmxlIGRhdGUuICovXG4gIG1heCA9IGlucHV0PERhdGU+KCk7XG5cbiAgLyoqIEVuYWJsZSBidXR0b25zIHRvIHN0ZXAgdGhyb3VnaCBtb250aHMuICovXG4gIGNhblN0ZXBUaHJvdWdoTW9udGhzID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuXG4gIC8qKiBFbWl0cyB3aGVuIHRoZSBzZWxlY3RlZCBtb250aCBoYXMgY2hhbmdlZC4gKi9cbiAgbW9udGhDaGFuZ2UgPSBvdXRwdXRGcm9tT2JzZXJ2YWJsZSh0aGlzLnZhbHVlQ2hhbmdlcyk7XG5cbiAgLyoqIEVtaXRzIHdoZW4gdGhlIGZpZWxkIGxvc2VzIGZvY3VzLiAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgYmx1ciA9IG91dHB1dDxGb2N1c0V2ZW50PigpO1xuXG4gIGlzUHJldk1vbnRoQnV0dG9uRGlzYWJsZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmlzUHJldk1vbnRoQmVmb3JlT3JFcXVhbFRvTWluRGF0ZSgpKTtcbiAgaXNOZXh0TW9udGhCdXR0b25EaXNhYmxlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXNOZXh0TW9udGhBZnRlck9yRXF1YWxUb01heERhdGUoKSk7XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUZvY3VzID0gKHBpY2tlcjogSFRNTEVsZW1lbnQpID0+IHtcbiAgICB0aGlzLmlzT3Blbi5zZXQodHJ1ZSk7XG4gICAgcGlja2VyLnNob3dQb3BvdmVyKCk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUJsdXIgPSAocGlja2VyOiBIVE1MRWxlbWVudCwgZXZlbnQ6IEZvY3VzRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHBpY2tlci5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7IC8vIHNhZmUgdHlwZSBhc3NlcnRpb25cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGFyZ2V0LmZvY3VzKCkpOyAvLyBrZWVwIGZvY3VzIG9uIGlucHV0IGVsZW1lbnQgd2hpbGUgdXNpbmcgdGhlIHBpY2tlclxuICAgIH0gZWxzZSB7XG4gICAgICBwaWNrZXIuaGlkZVBvcG92ZXIoKTtcbiAgICAgIHRoaXMuaXNPcGVuLnNldChmYWxzZSk7XG4gICAgICB0aGlzLmJsdXIuZW1pdChldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIHByb3RlY3RlZCBoYW5kbGVTZWxlY3RlZENoYW5nZSA9IChmaWVsZDogSFRNTElucHV0RWxlbWVudCwgZGF0ZTogRGF0ZSkgPT4ge1xuICAgIGZpZWxkLnZhbHVlID0gWWVhck1vbnRoLmZyb21EYXRlKGRhdGUpLnRvVmlldygpO1xuICAgIGZpZWxkLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiBmaWVsZC5ibHVyKCkpO1xuICB9O1xuXG4gIC8vIEltcGxlbWVudGF0aW9uIGZvciBDb250cm9sVmFsdWVBY2Nlc3NvclxuICB3cml0ZVZhbHVlID0gKHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB0aGlzLmNvbnRyb2wuc2V0VmFsdWUoWWVhck1vbnRoLmZyb21Nb2RlbCh2YWx1ZSkudG9WaWV3KCkpO1xuICBzZXREaXNhYmxlZFN0YXRlID0gKHg6IGJvb2xlYW4pID0+ICh4ID8gdGhpcy5jb250cm9sLmRpc2FibGUoKSA6IHRoaXMuY29udHJvbC5lbmFibGUoKSk7XG4gIHJlZ2lzdGVyT25Ub3VjaGVkID0gKGZuOiAoKSA9PiB2b2lkKSA9PiB0aGlzLmJsdXIuc3Vic2NyaWJlKGZuKTtcbiAgcmVnaXN0ZXJPbkNoYW5nZSA9IChmbjogKHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB2b2lkKSA9PiB0aGlzLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoZm4pO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgcHJldk1vbnRoKGZpZWxkOiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2VNb250aChmaWVsZCwgLTEpO1xuICB9XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgbmV4dE1vbnRoKGZpZWxkOiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2VNb250aChmaWVsZCwgMSk7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBjaGFuZ2VNb250aChmaWVsZDogSFRNTElucHV0RWxlbWVudCwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gWWVhck1vbnRoLmZyb21WaWV3KGZpZWxkLnZhbHVlKS50b0RhdGUoKTtcblxuICAgIGlmICghY3VycmVudERhdGUpIHJldHVybjtcblxuICAgIGNvbnN0IG5ld0RhdGUgPSBkYXlqcyhjdXJyZW50RGF0ZSkuYWRkKHZhbHVlLCAnbW9udGgnKTtcbiAgICB0aGlzLmhhbmRsZVNlbGVjdGVkQ2hhbmdlKGZpZWxkLCBuZXdEYXRlLnRvRGF0ZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBpc1ByZXZNb250aEJlZm9yZU9yRXF1YWxUb01pbkRhdGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWluID0gdGhpcy5taW4oKTtcblxuICAgIGlmICghbWluKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBzZWxlY3RlZERhdGUgPSBkYXlqcyh0aGlzLnNlbGVjdGVkKCkpO1xuXG4gICAgY29uc3QgaXNCZWZvcmUgPSBzZWxlY3RlZERhdGUuaXNCZWZvcmUobWluLCAnbW9udGgnKTtcbiAgICBjb25zdCBpc1NhbWUgPSBzZWxlY3RlZERhdGUuaXNTYW1lKG1pbiwgJ21vbnRoJyk7XG5cbiAgICByZXR1cm4gaXNTYW1lIHx8IGlzQmVmb3JlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGlzTmV4dE1vbnRoQWZ0ZXJPckVxdWFsVG9NYXhEYXRlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG1heCA9IHRoaXMubWF4KCk7XG5cbiAgICBpZiAoIW1heCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWREYXRlID0gZGF5anModGhpcy5zZWxlY3RlZCgpKTtcblxuICAgIGNvbnN0IGlzQWZ0ZXIgPSBzZWxlY3RlZERhdGUuaXNBZnRlcihtYXgsICdtb250aCcpO1xuICAgIGNvbnN0IGlzU2FtZSA9IHNlbGVjdGVkRGF0ZS5pc1NhbWUobWF4LCAnbW9udGgnKTtcblxuICAgIHJldHVybiBpc1NhbWUgfHwgaXNBZnRlcjtcbiAgfVxufVxuIl19
|
|
260
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC15ZWFybW9udGgtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy93YXR0L3BhY2thZ2UveWVhcm1vbnRoLWZpZWxkL3dhdHQteWVhcm1vbnRoLWZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7QUFDakI7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsWUFBWTtBQUNaLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixtQkFBbUIsR0FDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEcsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLFdBQVcsRUFBbUIsTUFBTSw4QkFBOEIsQ0FBQztBQUU1RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7O0FBRXpDLDJEQUEyRDtBQXlHM0QsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QiwyRkFBMkY7SUFDM0YsMkZBQTJGO0lBQ25GLE1BQU0sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxR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UUFFNUMsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbkQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFakQsT0FBTyxNQUFNLElBQUksT0FBTyxDQUFDO0lBQzNCLENBQUM7dUdBdklVLGtCQUFrQjsyRkFBbEIsa0JBQWtCLDJ3QkFwR2xCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDakQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLDBCQXdDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9EVCxzcEJBM0ZTLG1CQUFtQiwwa0JBQUUsV0FBVyw4WUFBRSxtQkFBbUIsc0lBQUUsa0JBQWtCOzsyRkE2RnhFLGtCQUFrQjtrQkF4RzlCLFNBQVM7K0JBQ0Usc0JBQXNCLGlCQUNqQixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG1CQUFtQixDQUFDOzRCQUNqRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRixXQUNRLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixDQUFDLFlBdUMxRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9EVCIsInNvdXJjZXNDb250ZW50IjpbIi8vI3JlZ2lvbiBMaWNlbnNlXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBFbmVyZ2luZXQgRGF0YUh1YiBBL1NcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlMlwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyNlbmRyZWdpb25cbmltcG9ydCB7XG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBmb3J3YXJkUmVmLFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtQ29udHJvbCxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IG91dHB1dEZyb21PYnNlcnZhYmxlLCB0YWtlVW50aWxEZXN0cm95ZWQsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgbWFwLCBzaGFyZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWF0Q2FsZW5kYXIsIE1hdENhbGVuZGFyVmlldyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuXG5pbXBvcnQgeyBkYXlqcyB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC9jb3JlL2RhdGUnO1xuaW1wb3J0IHsgV2F0dEZpZWxkQ29tcG9uZW50IH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2ZpZWxkJztcbmltcG9ydCB7IFdhdHRCdXR0b25Db21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvYnV0dG9uJztcblxuaW1wb3J0IHsgWWVhck1vbnRoIH0gZnJvbSAnLi95ZWFyLW1vbnRoJztcblxuLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1jbGFzcy1zdWZmaXggKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dhdHQteWVhcm1vbnRoLWZpZWxkJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gV2F0dFllYXJNb250aEZpZWxkKSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIGltcG9ydHM6IFtSZWFjdGl2ZUZvcm1zTW9kdWxlLCBNYXRDYWxlbmRhciwgV2F0dEJ1dHRvbkNvbXBvbmVudCwgV2F0dEZpZWxkQ29tcG9uZW50XSxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgd2F0dC15ZWFybW9udGgtZmllbGQge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IDEwMCU7XG5cbiAgICAgICAgJiBpbnB1dCB7XG4gICAgICAgICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG4gICAgICAgIH1cblxuICAgICAgICAmOmhhcygud2F0dC15ZWFybW9udGgtZmllbGRfX3N0ZXAtdGhyb3VnaCkge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1hbGlnbjogZmxleC1zdGFydDtcblxuICAgICAgICAgIC53YXR0LXllYXJtb250aC1maWVsZF9fc3RlcC10aHJvdWdoIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJjpoYXMoLndhdHQteWVhcm1vbnRoLWZpZWxkX19oYXMtbGFiZWwpIHtcbiAgICAgICAgICAud2F0dC15ZWFybW9udGgtZmllbGRfX3N0ZXAtdGhyb3VnaCB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAyOHB4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAud2F0dC15ZWFybW9udGgtZmllbGQtcGlja2VyIHtcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICBwb3NpdGlvbi1hcmVhOiBib3R0b20gc3Bhbi1yaWdodDtcbiAgICAgICAgcG9zaXRpb24tdHJ5LWZhbGxiYWNrczogZmxpcC1ibG9jaztcbiAgICAgICAgd2lkdGg6IDI5NnB4O1xuICAgICAgICBoZWlnaHQ6IDM1NHB4O1xuICAgICAgICBpbnNldDogdW5zZXQ7XG4gICAgICAgIG1hcmdpbjogdW5zZXQ7XG4gICAgICAgIGJvcmRlcjogMDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDx3YXR0LWZpZWxkIFtsYWJlbF09XCJsYWJlbCgpXCIgW2NvbnRyb2xdPVwiY29udHJvbFwiIFthbmNob3JOYW1lXT1cImFuY2hvck5hbWVcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjZmllbGRcbiAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAoZm9jdXMpPVwiaGFuZGxlRm9jdXMocGlja2VyKVwiXG4gICAgICAgIChibHVyKT1cImhhbmRsZUJsdXIocGlja2VyLCAkZXZlbnQpXCJcbiAgICAgIC8+XG4gICAgICA8d2F0dC1idXR0b24gaWNvbj1cImRhdGVcIiB2YXJpYW50PVwiaWNvblwiIChjbGljayk9XCJmaWVsZC5mb2N1cygpXCIgLz5cbiAgICAgIDxkaXZcbiAgICAgICAgI3BpY2tlclxuICAgICAgICBjbGFzcz1cIndhdHQtZWxldmF0aW9uIHdhdHQteWVhcm1vbnRoLWZpZWxkLXBpY2tlclwiXG4gICAgICAgIHBvcG92ZXI9XCJtYW51YWxcIlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICBbc3R5bGUucG9zaXRpb24tYW5jaG9yXT1cImFuY2hvck5hbWVcIlxuICAgICAgPlxuICAgICAgICBAaWYgKGlzT3BlbigpKSB7XG4gICAgICAgICAgPG1hdC1jYWxlbmRhclxuICAgICAgICAgICAgW3N0YXJ0Vmlld109XCJzdGFydFZpZXcoKVwiXG4gICAgICAgICAgICBbc3RhcnRBdF09XCJzZWxlY3RlZCgpXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZCgpXCJcbiAgICAgICAgICAgIFttaW5EYXRlXT1cIm1pbigpXCJcbiAgICAgICAgICAgIFttYXhEYXRlXT1cIm1heCgpXCJcbiAgICAgICAgICAgIChtb250aFNlbGVjdGVkKT1cImhhbmRsZVNlbGVjdGVkQ2hhbmdlKGZpZWxkLCAkZXZlbnQpXCJcbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJ3YXR0LWZpZWxkLWVycm9yXCIgbmdQcm9qZWN0QXM9XCJ3YXR0LWZpZWxkLWVycm9yXCIgLz5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIndhdHQtZmllbGQtaGludFwiIG5nUHJvamVjdEFzPVwid2F0dC1maWVsZC1oaW50XCIgLz5cbiAgICA8L3dhdHQtZmllbGQ+XG5cbiAgICBAaWYgKGNhblN0ZXBUaHJvdWdoTW9udGhzKCkpIHtcbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwid2F0dC15ZWFybW9udGgtZmllbGRfX3N0ZXAtdGhyb3VnaFwiXG4gICAgICAgIFtjbGFzcy53YXR0LXllYXJtb250aC1maWVsZF9faGFzLWxhYmVsXT1cIiEhbGFiZWwoKVwiXG4gICAgICA+XG4gICAgICAgIDx3YXR0LWJ1dHRvblxuICAgICAgICAgIHZhcmlhbnQ9XCJpY29uXCJcbiAgICAgICAgICBpY29uPVwibGVmdFwiXG4gICAgICAgICAgKGNsaWNrKT1cInByZXZNb250aChmaWVsZClcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJjb250cm9sLmRpc2FibGVkIHx8IGlzUHJldk1vbnRoQnV0dG9uRGlzYWJsZWQoKVwiXG4gICAgICAgIC8+XG4gICAgICAgIDx3YXR0LWJ1dHRvblxuICAgICAgICAgIHZhcmlhbnQ9XCJpY29uXCJcbiAgICAgICAgICBpY29uPVwicmlnaHRcIlxuICAgICAgICAgIChjbGljayk9XCJuZXh0TW9udGgoZmllbGQpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiY29udHJvbC5kaXNhYmxlZCB8fCBpc05leHRNb250aEJ1dHRvbkRpc2FibGVkKClcIlxuICAgICAgICAvPlxuICAgICAgPC9zcGFuPlxuICAgIH1cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgV2F0dFllYXJNb250aEZpZWxkIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAvLyBQb3BvdmVycyBleGlzdHMgb24gYW4gZW50aXJlbHkgZGlmZmVyZW50IGxheWVyLCBtZWFuaW5nIHRoYXQgZm9yIGFuY2hvciBwb3NpdGlvbmluZyB0aGV5XG4gIC8vIGxvb2sgYXQgdGhlIGVudGlyZSB0cmVlIGZvciB0aGUgYW5jaG9yIG5hbWUuIFRoaXMgZ2l2ZXMgZWFjaCBmaWVsZCBhIHVuaXF1ZSBhbmNob3IgbmFtZS5cbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2UgPSAwO1xuICBwcml2YXRlIGluc3RhbmNlID0gV2F0dFllYXJNb250aEZpZWxkLmluc3RhbmNlKys7XG4gIHByb3RlY3RlZCBhbmNob3JOYW1lID0gYC0td2F0dC15ZWFybW9udGgtZmllbGQtcG9wb3Zlci1hbmNob3ItJHt0aGlzLmluc3RhbmNlfWA7XG5cbiAgLy8gVGhlIGZvcm1hdCBvZiB0aGUgaW5uZXIgRm9ybUNvbnRyb2wgaXMgZGlmZmVyZW50IGZyb20gdGhhdCBvZiB0aGUgb3V0ZXIgRm9ybUNvbnRyb2xcbiAgcHJvdGVjdGVkIGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG5cbiAgLy8gYHJlZ2lzdGVyT25DaGFuZ2VgIG1heSBzdWJzY3JpYmUgdG8gdGhpcyBjb21wb25lbnQgYWZ0ZXIgaXQgaGFzIGJlZW4gZGVzdHJveWVkLCB0aHVzXG4gIC8vIHRyaWdnZXJpbmcgYW4gTkcwOTExIGZyb20gdGhlIGB0YWtlVW50aWxEZXN0cm95ZWRgIG9wZXJhdG9yLiBCeSBzaGFyaW5nIHRoZSBvYnNlcnZhYmxlLFxuICAvLyB0aGUgb2JzZXJ2YWJsZSB3aWxsIGFscmVhZHkgYmUgY2xvc2VkIGFuZCBgc3Vic2NyaWJlYCBiZWNvbWVzIGEgcHJvcGVyIG5vb3AuXG4gIHByaXZhdGUgeWVhck1vbnRoQ2hhbmdlcyA9IHRoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShtYXAoWWVhck1vbnRoLmZyb21WaWV3KSk7XG4gIHByaXZhdGUgdmFsdWVDaGFuZ2VzID0gdGhpcy55ZWFyTW9udGhDaGFuZ2VzLnBpcGUoXG4gICAgbWFwKCh5ZWFyTW9udGgpID0+IHllYXJNb250aC50b01vZGVsKCkpLFxuICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgIHNoYXJlKClcbiAgKTtcblxuICBwcml2YXRlIHllYXJNb250aCA9IHRvU2lnbmFsKHRoaXMueWVhck1vbnRoQ2hhbmdlcyk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMueWVhck1vbnRoKCk/LnRvRGF0ZSgpKTtcblxuICAvLyBUaGlzIGlzIHVzZWQgdG8gcmVzZXQgdGhlIE1hdENhbGVuZGFyIGNvbXBvbmVudCBieSBkZXN0cm95aW5nIGFuZCB0aGVuIHJlY3JlYXRpbmcgaXRcbiAgLy8gd2hlbmV2ZXIgdGhlIHBpY2tlciBpcyBvcGVuZWQuIFRoZXJlIGlzIG5vIG1ldGhvZHMgdG8gZG8gaXQgcHJvZ3JhbWF0aWNhbGx5LlxuICBwcm90ZWN0ZWQgaXNPcGVuID0gc2lnbmFsKGZhbHNlKTtcblxuICAvKiogU2V0IHRoZSBsYWJlbCB0ZXh0IGZvciBgd2F0dC1maWVsZGAuICovXG4gIGxhYmVsID0gaW5wdXQoJycpO1xuXG4gIC8qKiBUaGUgbWluaW11bSBzZWxlY3RhYmxlIGRhdGUuICovXG4gIG1pbiA9IGlucHV0PERhdGU+KCk7XG5cbiAgLyoqIFRoZSBtYXhpbXVtIHNlbGVjdGFibGUgZGF0ZS4gKi9cbiAgbWF4ID0gaW5wdXQ8RGF0ZT4oKTtcblxuICAvKiogV2hldGhlciB0aGUgY2FsZW5kYXIgc2hvdWxkIGJlIHN0YXJ0ZWQgaW4gbW9udGggb3IgeWVhciB2aWV3LiAqL1xuICBzdGFydFZpZXcgPSBpbnB1dDxFeHRyYWN0PE1hdENhbGVuZGFyVmlldywgJ211bHRpLXllYXInIHwgJ3llYXInPj4oJ211bHRpLXllYXInKTtcblxuICAvKiogRW5hYmxlIGJ1dHRvbnMgdG8gc3RlcCB0aHJvdWdoIG1vbnRocy4gKi9cbiAgY2FuU3RlcFRocm91Z2hNb250aHMgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cbiAgLyoqIEVtaXRzIHdoZW4gdGhlIHNlbGVjdGVkIG1vbnRoIGhhcyBjaGFuZ2VkLiAqL1xuICBtb250aENoYW5nZSA9IG91dHB1dEZyb21PYnNlcnZhYmxlKHRoaXMudmFsdWVDaGFuZ2VzKTtcblxuICAvKiogRW1pdHMgd2hlbiB0aGUgZmllbGQgbG9zZXMgZm9jdXMuICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBibHVyID0gb3V0cHV0PEZvY3VzRXZlbnQ+KCk7XG5cbiAgaXNQcmV2TW9udGhCdXR0b25EaXNhYmxlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXNQcmV2TW9udGhCZWZvcmVPckVxdWFsVG9NaW5EYXRlKCkpO1xuICBpc05leHRNb250aEJ1dHRvbkRpc2FibGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pc05leHRNb250aEFmdGVyT3JFcXVhbFRvTWF4RGF0ZSgpKTtcblxuICBwcm90ZWN0ZWQgaGFuZGxlRm9jdXMgPSAocGlja2VyOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgIHRoaXMuaXNPcGVuLnNldCh0cnVlKTtcbiAgICBwaWNrZXIuc2hvd1BvcG92ZXIoKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgaGFuZGxlQmx1ciA9IChwaWNrZXI6IEhUTUxFbGVtZW50LCBldmVudDogRm9jdXNFdmVudCkgPT4ge1xuICAgIGlmIChldmVudC5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgcGlja2VyLmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDsgLy8gc2FmZSB0eXBlIGFzc2VydGlvblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0YXJnZXQuZm9jdXMoKSk7IC8vIGtlZXAgZm9jdXMgb24gaW5wdXQgZWxlbWVudCB3aGlsZSB1c2luZyB0aGUgcGlja2VyXG4gICAgfSBlbHNlIHtcbiAgICAgIHBpY2tlci5oaWRlUG9wb3ZlcigpO1xuICAgICAgdGhpcy5pc09wZW4uc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuYmx1ci5lbWl0KGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgcHJvdGVjdGVkIGhhbmRsZVNlbGVjdGVkQ2hhbmdlID0gKGZpZWxkOiBIVE1MSW5wdXRFbGVtZW50LCBkYXRlOiBEYXRlKSA9PiB7XG4gICAgZmllbGQudmFsdWUgPSBZZWFyTW9udGguZnJvbURhdGUoZGF0ZSkudG9WaWV3KCk7XG4gICAgZmllbGQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IGZpZWxkLmJsdXIoKSk7XG4gIH07XG5cbiAgLy8gSW1wbGVtZW50YXRpb24gZm9yIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gIHdyaXRlVmFsdWUgPSAodmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHRoaXMuY29udHJvbC5zZXRWYWx1ZShZZWFyTW9udGguZnJvbU1vZGVsKHZhbHVlKS50b1ZpZXcoKSk7XG4gIHNldERpc2FibGVkU3RhdGUgPSAoeDogYm9vbGVhbikgPT4gKHggPyB0aGlzLmNvbnRyb2wuZGlzYWJsZSgpIDogdGhpcy5jb250cm9sLmVuYWJsZSgpKTtcbiAgcmVnaXN0ZXJPblRvdWNoZWQgPSAoZm46ICgpID0+IHZvaWQpID0+IHRoaXMuYmx1ci5zdWJzY3JpYmUoZm4pO1xuICByZWdpc3Rlck9uQ2hhbmdlID0gKGZuOiAodmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHZvaWQpID0+IHRoaXMudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShmbik7XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBwcmV2TW9udGgoZmllbGQ6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZU1vbnRoKGZpZWxkLCAtMSk7XG4gIH1cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBuZXh0TW9udGgoZmllbGQ6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZU1vbnRoKGZpZWxkLCAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIGNoYW5nZU1vbnRoKGZpZWxkOiBIVE1MSW5wdXRFbGVtZW50LCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudERhdGUgPSBZZWFyTW9udGguZnJvbVZpZXcoZmllbGQudmFsdWUpLnRvRGF0ZSgpO1xuXG4gICAgaWYgKCFjdXJyZW50RGF0ZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgbmV3RGF0ZSA9IGRheWpzKGN1cnJlbnREYXRlKS5hZGQodmFsdWUsICdtb250aCcpO1xuICAgIHRoaXMuaGFuZGxlU2VsZWN0ZWRDaGFuZ2UoZmllbGQsIG5ld0RhdGUudG9EYXRlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGlzUHJldk1vbnRoQmVmb3JlT3JFcXVhbFRvTWluRGF0ZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBtaW4gPSB0aGlzLm1pbigpO1xuXG4gICAgaWYgKCFtaW4pIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHNlbGVjdGVkRGF0ZSA9IGRheWpzKHRoaXMuc2VsZWN0ZWQoKSk7XG5cbiAgICBjb25zdCBpc0JlZm9yZSA9IHNlbGVjdGVkRGF0ZS5pc0JlZm9yZShtaW4sICdtb250aCcpO1xuICAgIGNvbnN0IGlzU2FtZSA9IHNlbGVjdGVkRGF0ZS5pc1NhbWUobWluLCAnbW9udGgnKTtcblxuICAgIHJldHVybiBpc1NhbWUgfHwgaXNCZWZvcmU7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgaXNOZXh0TW9udGhBZnRlck9yRXF1YWxUb01heERhdGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWF4ID0gdGhpcy5tYXgoKTtcblxuICAgIGlmICghbWF4KSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBzZWxlY3RlZERhdGUgPSBkYXlqcyh0aGlzLnNlbGVjdGVkKCkpO1xuXG4gICAgY29uc3QgaXNBZnRlciA9IHNlbGVjdGVkRGF0ZS5pc0FmdGVyKG1heCwgJ21vbnRoJyk7XG4gICAgY29uc3QgaXNTYW1lID0gc2VsZWN0ZWREYXRlLmlzU2FtZShtYXgsICdtb250aCcpO1xuXG4gICAgcmV0dXJuIGlzU2FtZSB8fCBpc0FmdGVyO1xuICB9XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -16,9 +16,10 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import { SelectionModel } from '@angular/cdk/collections';
|
|
18
18
|
import { KeyValue } from '@angular/common';
|
|
19
|
-
import { AfterViewInit, ElementRef,
|
|
20
|
-
import type {
|
|
19
|
+
import { AfterViewInit, ElementRef, OnChanges, SimpleChanges, TemplateRef } from '@angular/core';
|
|
20
|
+
import type { Signal, TrackByFunction } from '@angular/core';
|
|
21
21
|
import { MatSort, Sort, SortDirection } from '@angular/material/sort';
|
|
22
|
+
import { Subject } from 'rxjs';
|
|
22
23
|
import { WattDatePipe } from '@energinet/watt/core/date';
|
|
23
24
|
import { IWattTableDataSource } from './watt-table-data-source';
|
|
24
25
|
import * as i0 from "@angular/core";
|
|
@@ -143,57 +144,57 @@ export declare class WattTableComponent<T> implements OnChanges, AfterViewInit {
|
|
|
143
144
|
* The table's source of data. Property should not be changed after
|
|
144
145
|
* initialization, instead update the data on the instance itself.
|
|
145
146
|
*/
|
|
146
|
-
dataSource: IWattTableDataSource<T
|
|
147
|
+
dataSource: import("@angular/core").InputSignal<IWattTableDataSource<T>>;
|
|
147
148
|
/**
|
|
148
149
|
* Column definition record with keys representing the column identifiers
|
|
149
150
|
* and values being the column configuration. The order of the columns
|
|
150
151
|
* is determined by the property order, but can be overruled by the
|
|
151
152
|
* `displayedColumns` input.
|
|
152
153
|
*/
|
|
153
|
-
columns: WattTableColumnDef<T
|
|
154
|
+
columns: import("@angular/core").InputSignal<WattTableColumnDef<T>>;
|
|
154
155
|
/**
|
|
155
156
|
* Used for hiding or reordering columns defined in the `columns` input.
|
|
156
157
|
*/
|
|
157
|
-
displayedColumns
|
|
158
|
+
displayedColumns: import("@angular/core").InputSignal<string[] | undefined>;
|
|
158
159
|
/**
|
|
159
160
|
* Used for disabling the table. This will disable all user interaction
|
|
160
161
|
*/
|
|
161
|
-
disabled: boolean
|
|
162
|
+
disabled: import("@angular/core").InputSignal<boolean>;
|
|
162
163
|
/**
|
|
163
164
|
* Provide a description of the table for visually impaired users.
|
|
164
165
|
*/
|
|
165
|
-
description: string
|
|
166
|
+
description: import("@angular/core").InputSignal<string>;
|
|
166
167
|
/**
|
|
167
168
|
* If set to `true`, the table will show a loading indicator
|
|
168
169
|
* when there is no data.
|
|
169
170
|
*/
|
|
170
|
-
loading: boolean
|
|
171
|
+
loading: import("@angular/core").InputSignal<boolean>;
|
|
171
172
|
/**
|
|
172
173
|
* If true the footer will be sticky
|
|
173
174
|
*/
|
|
174
|
-
stickyFooter: boolean
|
|
175
|
+
stickyFooter: import("@angular/core").InputSignal<boolean>;
|
|
175
176
|
/**
|
|
176
177
|
* Optional callback for determining header text for columns that
|
|
177
178
|
* do not have a static header text set in the column definition.
|
|
178
179
|
* Useful for providing translations of column headers.
|
|
179
180
|
*/
|
|
180
|
-
resolveHeader
|
|
181
|
+
resolveHeader: import("@angular/core").InputSignal<((key: string) => string) | undefined>;
|
|
181
182
|
/**
|
|
182
183
|
* Identifier for column that should be sorted initially.
|
|
183
184
|
*/
|
|
184
|
-
sortBy: string
|
|
185
|
+
sortBy: import("@angular/core").InputSignal<string>;
|
|
185
186
|
/**
|
|
186
187
|
* The sort direction of the initially sorted column.
|
|
187
188
|
*/
|
|
188
|
-
sortDirection: SortDirection
|
|
189
|
+
sortDirection: import("@angular/core").InputSignal<SortDirection>;
|
|
189
190
|
/**
|
|
190
191
|
* Whether to allow the user to clear the sort. Defaults to `true`.
|
|
191
192
|
*/
|
|
192
|
-
sortClear: boolean
|
|
193
|
+
sortClear: import("@angular/core").InputSignal<boolean>;
|
|
193
194
|
/**
|
|
194
195
|
* Whether the table should include a checkbox column for row selection.
|
|
195
196
|
*/
|
|
196
|
-
selectable: boolean
|
|
197
|
+
selectable: import("@angular/core").InputSignal<boolean>;
|
|
197
198
|
/**
|
|
198
199
|
* Sets the initially selected rows. Only works when selectable is `true`.
|
|
199
200
|
*/
|
|
@@ -201,11 +202,11 @@ export declare class WattTableComponent<T> implements OnChanges, AfterViewInit {
|
|
|
201
202
|
/**
|
|
202
203
|
* Set to true to disable row hover highlight.
|
|
203
204
|
*/
|
|
204
|
-
suppressRowHoverHighlight: boolean
|
|
205
|
+
suppressRowHoverHighlight: import("@angular/core").InputSignal<boolean>;
|
|
205
206
|
/**
|
|
206
207
|
* Highlights the currently active row.
|
|
207
208
|
*/
|
|
208
|
-
activeRow
|
|
209
|
+
activeRow: import("@angular/core").InputSignal<T | undefined>;
|
|
209
210
|
/**
|
|
210
211
|
* Custom comparator function to determine if two rows are equal.
|
|
211
212
|
*
|
|
@@ -215,11 +216,11 @@ export declare class WattTableComponent<T> implements OnChanges, AfterViewInit {
|
|
|
215
216
|
* as long as the instances remain the same, which may not be the case
|
|
216
217
|
* if row data is recreated or rebuilt from serialization.
|
|
217
218
|
*/
|
|
218
|
-
activeRowComparator
|
|
219
|
+
activeRowComparator: import("@angular/core").InputSignal<((currentRow: T, activeRow: T) => boolean) | undefined>;
|
|
219
220
|
/**
|
|
220
221
|
* If set to `true`, the column headers will not be shown. Default is `false`.
|
|
221
222
|
*/
|
|
222
|
-
hideColumnHeaders: boolean
|
|
223
|
+
hideColumnHeaders: import("@angular/core").InputSignal<boolean>;
|
|
223
224
|
/**
|
|
224
225
|
* Choose from a predefined set of display variants.
|
|
225
226
|
*/
|
|
@@ -235,23 +236,26 @@ export declare class WattTableComponent<T> implements OnChanges, AfterViewInit {
|
|
|
235
236
|
/**
|
|
236
237
|
* Emits whenever the selection updates. Only works when selectable is `true`.
|
|
237
238
|
*/
|
|
238
|
-
selectionChange:
|
|
239
|
+
selectionChange: import("@angular/core").OutputEmitterRef<T[]>;
|
|
240
|
+
/**
|
|
241
|
+
* @ignore
|
|
242
|
+
* The `observed` boolean from the `Subject` is used to determine if a row is
|
|
243
|
+
* clickable or not. This is available on `EventEmitter`, but not on `output`,
|
|
244
|
+
* which is why this workaround is used.
|
|
245
|
+
*/
|
|
246
|
+
protected _rowClick$: Subject<T>;
|
|
239
247
|
/**
|
|
240
248
|
* Emits whenever a row is clicked.
|
|
241
249
|
*/
|
|
242
|
-
rowClick:
|
|
250
|
+
rowClick: import("@angular/core").OutputRef<T>;
|
|
243
251
|
/**
|
|
244
252
|
* Event emitted when the user changes the active sort or sort direction.
|
|
245
253
|
*/
|
|
246
|
-
sortChange:
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
/** @ignore */
|
|
252
|
-
_sort: MatSort;
|
|
253
|
-
/** @ignore */
|
|
254
|
-
_tableCellElements: Signal<readonly ElementRef<HTMLTableCellElement>[]>;
|
|
254
|
+
sortChange: import("@angular/core").OutputEmitterRef<Sort>;
|
|
255
|
+
protected cells: Signal<readonly WattTableCellDirective<T>[]>;
|
|
256
|
+
protected toolbar: Signal<WattTableToolbarDirective<any> | undefined>;
|
|
257
|
+
protected sort: Signal<MatSort | undefined>;
|
|
258
|
+
protected tableCellElements: Signal<readonly ElementRef<HTMLTableCellElement>[]>;
|
|
255
259
|
/** @ignore */
|
|
256
260
|
_animationEffect: import("@angular/core").AfterRenderRef;
|
|
257
261
|
/** @ignore */
|
|
@@ -305,7 +309,7 @@ export declare class WattTableComponent<T> implements OnChanges, AfterViewInit {
|
|
|
305
309
|
/** @ignore */
|
|
306
310
|
_onRowClick(row: T): void;
|
|
307
311
|
static ɵfac: i0.ɵɵFactoryDeclaration<WattTableComponent<any>, never>;
|
|
308
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<WattTableComponent<any>, "watt-table", never, { "dataSource": { "alias": "dataSource"; "required":
|
|
312
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<WattTableComponent<any>, "watt-table", never, { "dataSource": { "alias": "dataSource"; "required": true; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "displayedColumns": { "alias": "displayedColumns"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "stickyFooter": { "alias": "stickyFooter"; "required": false; "isSignal": true; }; "resolveHeader": { "alias": "resolveHeader"; "required": false; "isSignal": true; }; "sortBy": { "alias": "sortBy"; "required": false; "isSignal": true; }; "sortDirection": { "alias": "sortDirection"; "required": false; "isSignal": true; }; "sortClear": { "alias": "sortClear"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "initialSelection": { "alias": "initialSelection"; "required": false; "isSignal": true; }; "suppressRowHoverHighlight": { "alias": "suppressRowHoverHighlight"; "required": false; "isSignal": true; }; "activeRow": { "alias": "activeRow"; "required": false; "isSignal": true; }; "activeRowComparator": { "alias": "activeRowComparator"; "required": false; "isSignal": true; }; "hideColumnHeaders": { "alias": "hideColumnHeaders"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; "trackBy": { "alias": "trackBy"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; "selectionChange": "selectionChange"; "rowClick": "rowClick"; "sortChange": "sortChange"; }, ["cells", "toolbar"], never, true, never>;
|
|
309
313
|
}
|
|
310
314
|
export declare class WattTableToolbarSpacerComponent {
|
|
311
315
|
static ɵfac: i0.ɵɵFactoryDeclaration<WattTableToolbarSpacerComponent, never>;
|
|
@@ -16,6 +16,8 @@ export declare class WattYearMonthField implements ControlValueAccessor {
|
|
|
16
16
|
min: import("@angular/core").InputSignal<Date | undefined>;
|
|
17
17
|
/** The maximum selectable date. */
|
|
18
18
|
max: import("@angular/core").InputSignal<Date | undefined>;
|
|
19
|
+
/** Whether the calendar should be started in month or year view. */
|
|
20
|
+
startView: import("@angular/core").InputSignal<"year" | "multi-year">;
|
|
19
21
|
/** Enable buttons to step through months. */
|
|
20
22
|
canStepThroughMonths: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
21
23
|
/** Emits when the selected month has changed. */
|
|
@@ -52,5 +54,5 @@ export declare class WattYearMonthField implements ControlValueAccessor {
|
|
|
52
54
|
*/
|
|
53
55
|
isNextMonthAfterOrEqualToMaxDate(): boolean;
|
|
54
56
|
static ɵfac: i0.ɵɵFactoryDeclaration<WattYearMonthField, never>;
|
|
55
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<WattYearMonthField, "watt-yearmonth-field", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "canStepThroughMonths": { "alias": "canStepThroughMonths"; "required": false; "isSignal": true; }; }, { "monthChange": "monthChange"; "blur": "blur"; }, never, ["*", "watt-field-error", "watt-field-hint"], true, never>;
|
|
57
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<WattYearMonthField, "watt-yearmonth-field", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "startView": { "alias": "startView"; "required": false; "isSignal": true; }; "canStepThroughMonths": { "alias": "canStepThroughMonths"; "required": false; "isSignal": true; }; }, { "monthChange": "monthChange"; "blur": "blur"; }, never, ["*", "watt-field-error", "watt-field-hint"], true, never>;
|
|
56
58
|
}
|