@firestitch/list 12.14.0 → 12.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/app/classes/actions-controller.d.ts +20 -20
  2. package/app/classes/columns-controller.d.ts +71 -71
  3. package/app/classes/data-controller.d.ts +91 -91
  4. package/app/classes/external-params-controller.d.ts +31 -31
  5. package/app/classes/index.d.ts +2 -2
  6. package/app/classes/list-controller.d.ts +178 -177
  7. package/app/classes/pagination-controller.d.ts +189 -189
  8. package/app/classes/persistance-controller.d.ts +10 -10
  9. package/app/classes/reorder-controller.d.ts +68 -68
  10. package/app/classes/selection-controller.d.ts +146 -146
  11. package/app/classes/sorting-controller.d.ts +64 -64
  12. package/app/components/body/body.component.d.ts +29 -29
  13. package/app/components/body/row/actions/actions.component.d.ts +34 -34
  14. package/app/components/body/row/cell/cell.component.d.ts +23 -23
  15. package/app/components/body/row/inline-action/inline-action.component.d.ts +16 -16
  16. package/app/components/body/row/menu-action/menu-action.component.d.ts +14 -14
  17. package/app/components/body/row/row.component.d.ts +80 -80
  18. package/app/components/customize-cols/customize-cols.component.d.ts +17 -17
  19. package/app/components/footer/footer-row/footer-cell/footer-cell.component.d.ts +7 -7
  20. package/app/components/footer/footer-row/footer-row.component.d.ts +14 -14
  21. package/app/components/footer/footer.component.d.ts +16 -16
  22. package/app/components/head/head-cell/head-cell.component.d.ts +14 -14
  23. package/app/components/head/head.component.d.ts +47 -47
  24. package/app/components/list/list.component.d.ts +122 -121
  25. package/app/components/loader/loader.component.d.ts +14 -14
  26. package/app/components/manage-saved-filters/manage-saved-filters.component.d.ts +13 -13
  27. package/app/components/pagination/pagination.component.d.ts +14 -14
  28. package/app/components/saved-filters/saved-filters.component.d.ts +15 -15
  29. package/app/components/status/status.component.d.ts +21 -21
  30. package/app/directives/cell/cell.directive.d.ts +8 -8
  31. package/app/directives/column/column.directive.d.ts +33 -33
  32. package/app/directives/content/content.directive.d.ts +5 -5
  33. package/app/directives/content-init/content-init.directive.d.ts +9 -9
  34. package/app/directives/draggable-list/draggable-list.directive.d.ts +90 -90
  35. package/app/directives/draggable-row/draggable-row.directive.d.ts +23 -23
  36. package/app/directives/empty-state/empty-state.directive.d.ts +5 -5
  37. package/app/directives/footer/footer.directive.d.ts +8 -8
  38. package/app/directives/group-expand-trigger/group-expand-trigger.directive.d.ts +10 -10
  39. package/app/directives/group-footer/group-footer.directive.d.ts +6 -6
  40. package/app/directives/group-header/group-header.directive.d.ts +6 -6
  41. package/app/directives/header/header.directive.d.ts +8 -8
  42. package/app/directives/heading/heading.directive.d.ts +5 -5
  43. package/app/directives/heading-container/heading-container.directive.d.ts +5 -5
  44. package/app/directives/index.d.ts +3 -3
  45. package/app/directives/subheading/subheading.directive.d.ts +5 -5
  46. package/app/enums/button-type.enum.d.ts +7 -7
  47. package/app/enums/page-change-type.enum.d.ts +4 -4
  48. package/app/enums/pagination-strategy.enum.d.ts +5 -5
  49. package/app/enums/row-type.enum.d.ts +6 -6
  50. package/app/enums/state.enum.d.ts +9 -9
  51. package/app/fs-list.module.d.ts +60 -60
  52. package/app/fs-list.providers.d.ts +3 -3
  53. package/app/interfaces/cellconfig.interface.d.ts +5 -5
  54. package/app/interfaces/column-config.interface.d.ts +2 -2
  55. package/app/interfaces/draggable-list.interface.d.ts +7 -7
  56. package/app/interfaces/external-params.interface.d.ts +13 -13
  57. package/app/interfaces/index.d.ts +3 -3
  58. package/app/interfaces/listconfig.interface.d.ts +259 -258
  59. package/app/interfaces/pagination.interface.d.ts +13 -13
  60. package/app/models/column-async-attribute.d.ts +5 -5
  61. package/app/models/column-attributes.d.ts +39 -39
  62. package/app/models/column.model.d.ts +59 -59
  63. package/app/models/row/base-row.d.ts +13 -13
  64. package/app/models/row/child-row.d.ts +12 -12
  65. package/app/models/row/group-footer-row.d.ts +10 -10
  66. package/app/models/row/group-row.d.ts +16 -16
  67. package/app/models/row/simple-row.d.ts +5 -5
  68. package/app/models/row-action.model.d.ts +29 -29
  69. package/app/models/row.d.ts +30 -30
  70. package/app/models/styleConfig.model.d.ts +31 -31
  71. package/app/pipes/action-label.d.ts +8 -8
  72. package/app/pipes/index.d.ts +1 -1
  73. package/app/services/group-expand-notifier.service.d.ts +11 -11
  74. package/bundles/firestitch-list.umd.js +6844 -6839
  75. package/bundles/firestitch-list.umd.js.map +1 -1
  76. package/esm2015/app/classes/actions-controller.js +55 -55
  77. package/esm2015/app/classes/columns-controller.js +205 -205
  78. package/esm2015/app/classes/data-controller.js +348 -348
  79. package/esm2015/app/classes/external-params-controller.js +153 -153
  80. package/esm2015/app/classes/index.js +3 -3
  81. package/esm2015/app/classes/list-controller.js +723 -722
  82. package/esm2015/app/classes/pagination-controller.js +460 -460
  83. package/esm2015/app/classes/persistance-controller.js +19 -19
  84. package/esm2015/app/classes/reorder-controller.js +182 -182
  85. package/esm2015/app/classes/selection-controller.js +458 -458
  86. package/esm2015/app/classes/sorting-controller.js +180 -180
  87. package/esm2015/app/components/body/body.component.js +67 -67
  88. package/esm2015/app/components/body/row/actions/actions.component.js +95 -95
  89. package/esm2015/app/components/body/row/cell/cell.component.js +107 -107
  90. package/esm2015/app/components/body/row/inline-action/inline-action.component.js +39 -39
  91. package/esm2015/app/components/body/row/menu-action/menu-action.component.js +35 -35
  92. package/esm2015/app/components/body/row/row.component.js +293 -293
  93. package/esm2015/app/components/customize-cols/customize-cols.component.js +72 -72
  94. package/esm2015/app/components/footer/footer-row/footer-cell/footer-cell.component.js +20 -20
  95. package/esm2015/app/components/footer/footer-row/footer-row.component.js +31 -31
  96. package/esm2015/app/components/footer/footer.component.js +34 -34
  97. package/esm2015/app/components/head/head-cell/head-cell.component.js +33 -33
  98. package/esm2015/app/components/head/head.component.js +104 -104
  99. package/esm2015/app/components/list/list.component.js +386 -382
  100. package/esm2015/app/components/loader/loader.component.js +47 -47
  101. package/esm2015/app/components/manage-saved-filters/manage-saved-filters.component.js +78 -78
  102. package/esm2015/app/components/pagination/pagination.component.js +44 -44
  103. package/esm2015/app/components/saved-filters/saved-filters.component.js +33 -33
  104. package/esm2015/app/components/status/status.component.js +72 -72
  105. package/esm2015/app/directives/cell/cell.directive.js +18 -18
  106. package/esm2015/app/directives/column/column.directive.js +111 -111
  107. package/esm2015/app/directives/content/content.directive.js +12 -12
  108. package/esm2015/app/directives/content-init/content-init.directive.js +21 -21
  109. package/esm2015/app/directives/draggable-list/draggable-list.directive.js +323 -323
  110. package/esm2015/app/directives/draggable-row/draggable-row.directive.js +78 -78
  111. package/esm2015/app/directives/empty-state/empty-state.directive.js +13 -13
  112. package/esm2015/app/directives/footer/footer.directive.js +18 -18
  113. package/esm2015/app/directives/group-expand-trigger/group-expand-trigger.directive.js +26 -26
  114. package/esm2015/app/directives/group-footer/group-footer.directive.js +13 -13
  115. package/esm2015/app/directives/group-header/group-header.directive.js +13 -13
  116. package/esm2015/app/directives/header/header.directive.js +18 -18
  117. package/esm2015/app/directives/heading/heading.directive.js +13 -13
  118. package/esm2015/app/directives/heading-container/heading-container.directive.js +13 -13
  119. package/esm2015/app/directives/index.js +4 -4
  120. package/esm2015/app/directives/subheading/subheading.directive.js +13 -13
  121. package/esm2015/app/enums/button-type.enum.js +9 -9
  122. package/esm2015/app/enums/page-change-type.enum.js +6 -6
  123. package/esm2015/app/enums/pagination-strategy.enum.js +7 -7
  124. package/esm2015/app/enums/row-type.enum.js +7 -7
  125. package/esm2015/app/enums/state.enum.js +11 -11
  126. package/esm2015/app/fs-list.module.js +244 -244
  127. package/esm2015/app/fs-list.providers.js +4 -4
  128. package/esm2015/app/interfaces/cellconfig.interface.js +2 -2
  129. package/esm2015/app/interfaces/column-config.interface.js +1 -1
  130. package/esm2015/app/interfaces/draggable-list.interface.js +2 -2
  131. package/esm2015/app/interfaces/external-params.interface.js +2 -2
  132. package/esm2015/app/interfaces/index.js +4 -4
  133. package/esm2015/app/interfaces/listconfig.interface.js +2 -2
  134. package/esm2015/app/interfaces/pagination.interface.js +2 -2
  135. package/esm2015/app/models/column-async-attribute.js +13 -13
  136. package/esm2015/app/models/column-attributes.js +130 -130
  137. package/esm2015/app/models/column.model.js +166 -166
  138. package/esm2015/app/models/row/base-row.js +23 -23
  139. package/esm2015/app/models/row/child-row.js +28 -28
  140. package/esm2015/app/models/row/group-footer-row.js +20 -20
  141. package/esm2015/app/models/row/group-row.js +44 -44
  142. package/esm2015/app/models/row/simple-row.js +10 -10
  143. package/esm2015/app/models/row-action.model.js +94 -94
  144. package/esm2015/app/models/row.js +80 -80
  145. package/esm2015/app/models/styleConfig.model.js +75 -75
  146. package/esm2015/app/pipes/action-label.js +16 -16
  147. package/esm2015/app/pipes/index.js +1 -1
  148. package/esm2015/app/services/group-expand-notifier.service.js +26 -26
  149. package/esm2015/firestitch-list.js +4 -4
  150. package/esm2015/public_api.js +45 -45
  151. package/fesm2015/firestitch-list.js +5625 -5620
  152. package/fesm2015/firestitch-list.js.map +1 -1
  153. package/firestitch-list.d.ts +5 -5
  154. package/package.json +1 -1
  155. package/public_api.d.ts +39 -39
@@ -1,382 +1,386 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, Inject, Input, QueryList, ViewChild, HostBinding, Optional, ContentChild, TemplateRef, Output, } from '@angular/core';
2
- import { ActivatedRoute, Router } from '@angular/router';
3
- import { Location } from '@angular/common';
4
- import { MatDialog, MatDialogRef } from '@angular/material/dialog';
5
- import { Subject } from 'rxjs';
6
- import { filter, skip, take, takeUntil } from 'rxjs/operators';
7
- import { FsScrollService } from '@firestitch/scroll';
8
- import { FilterComponent } from '@firestitch/filter';
9
- import { SelectionDialog } from '@firestitch/selection';
10
- import { getNormalizedPath } from '@firestitch/common';
11
- import { DrawerRef } from '@firestitch/drawer';
12
- import { cloneDeep, mergeWith } from 'lodash-es';
13
- import { List } from '../../classes/list-controller';
14
- import { ReorderController } from '../../classes/reorder-controller';
15
- import { FsListColumnDirective } from '../../directives/column/column.directive';
16
- import { FsListEmptyStateDirective } from '../../directives/empty-state/empty-state.directive';
17
- import { FS_LIST_DEFAULT_CONFIG } from '../../fs-list.providers';
18
- import { CustomizeColsDialogComponent } from '../customize-cols/customize-cols.component';
19
- import { GroupExpandNotifierService } from '../../services/group-expand-notifier.service';
20
- import { PersistanceController } from '../../classes/persistance-controller';
21
- import { FsListHeadingContainerDirective, FsListHeadingDirective, FsListSubheadingDirective } from '../../directives';
22
- import * as i0 from "@angular/core";
23
- import * as i1 from "../../classes/reorder-controller";
24
- import * as i2 from "@firestitch/scroll";
25
- import * as i3 from "@angular/material/dialog";
26
- import * as i4 from "@firestitch/drawer";
27
- import * as i5 from "@firestitch/selection";
28
- import * as i6 from "../../services/group-expand-notifier.service";
29
- import * as i7 from "@angular/router";
30
- import * as i8 from "../../classes/persistance-controller";
31
- import * as i9 from "@angular/common";
32
- import * as i10 from "@firestitch/filter";
33
- import * as i11 from "../status/status.component";
34
- import * as i12 from "../head/head.component";
35
- import * as i13 from "../body/body.component";
36
- import * as i14 from "../footer/footer.component";
37
- import * as i15 from "../loader/loader.component";
38
- import * as i16 from "../pagination/pagination.component";
39
- import * as i17 from "../../directives/content-init/content-init.directive";
40
- import * as i18 from "../../directives/draggable-list/draggable-list.directive";
41
- import * as i19 from "../../directives/footer/footer.directive";
42
- export class FsListComponent {
43
- constructor(reorderController, _defaultOptions, fsScroll, _dialogRef, _drawerRef, _el, selectionDialog, dialog, cdRef, _groupExpandNotifier, _router, _route, _persistance, _location) {
44
- this.reorderController = reorderController;
45
- this._defaultOptions = _defaultOptions;
46
- this.fsScroll = fsScroll;
47
- this._dialogRef = _dialogRef;
48
- this._drawerRef = _drawerRef;
49
- this._el = _el;
50
- this.selectionDialog = selectionDialog;
51
- this.dialog = dialog;
52
- this.cdRef = cdRef;
53
- this._groupExpandNotifier = _groupExpandNotifier;
54
- this._router = _router;
55
- this._route = _route;
56
- this._persistance = _persistance;
57
- this._location = _location;
58
- this.classFsList = true;
59
- this.loaderLines = 3;
60
- this.filtersReady = new EventEmitter();
61
- this.keywordVisible = true;
62
- // Event will fired if action remove: true will clicked
63
- this.rowRemoved = new EventEmitter();
64
- this.firstLoad = true;
65
- this._filterParamsReady = false;
66
- this._inDialog = !!this._dialogRef || !!this._drawerRef;
67
- this._destroy = new Subject();
68
- }
69
- set config(config) {
70
- this._initWithConfig(config);
71
- }
72
- set filterReference(component) {
73
- this._filterRef = component;
74
- this.list.actions.setFilterRef(component);
75
- this._emitFiltersReadyEvent();
76
- }
77
- /**
78
- * Set columns to config
79
- * Create Column Model instances
80
- *
81
- */
82
- set columnTemplates(listColumnDirectives) {
83
- this.listColumnDirectives = listColumnDirectives;
84
- if (this.list) {
85
- this.list.tranformTemplatesToColumns(listColumnDirectives);
86
- }
87
- }
88
- set _emptyStateTemplate(template) {
89
- if (this.list) {
90
- this.list.emptyStateTemplate = template;
91
- }
92
- }
93
- /**
94
- * Return reference for filter
95
- */
96
- get filterRef() {
97
- return this._filterRef;
98
- }
99
- get groupEnabled() {
100
- return this.list.dataController.groupEnabled;
101
- }
102
- get hasFilterKeyword() {
103
- return this.list.filterInput && this.keywordVisible;
104
- }
105
- get hasStatus() {
106
- return this.list.status &&
107
- (this.list.sorting.isDefined || this.list.paging.enabled) &&
108
- (!this.reorderController.enabled || (this.reorderController.enabled && this.reorderController.status)) &&
109
- ((this.list.scrollable && this.list.scrollable.status) || !this.list.scrollable);
110
- }
111
- get paginatorVisible() {
112
- return this.list.paging.enabled
113
- && !this.firstLoad
114
- && !this.list.scrollable
115
- && !this.list.emptyStateEnabled
116
- && this.list.dataController.visibleRowsCount > 0
117
- && this.list.paging.pages > 1;
118
- }
119
- set groupEnabled(value) {
120
- this.list.groupEnabled(value);
121
- }
122
- get filtersQuery() {
123
- return this.list.filtersQuery;
124
- }
125
- ngAfterContentInit() {
126
- if (this.list.afterInit) {
127
- this.list.afterInit(this);
128
- }
129
- }
130
- ngOnInit() {
131
- this._subscribeToRemoveRow();
132
- this._subscribeToGroupExpandStatusChange();
133
- }
134
- ngOnDestroy() {
135
- if (this.list) {
136
- this.list.destroy();
137
- }
138
- this._destroy.next();
139
- this._destroy.complete();
140
- }
141
- nextPage() {
142
- this.list.paging.goNext();
143
- }
144
- prevPage() {
145
- this.list.paging.goPrev();
146
- }
147
- firstPage() {
148
- this.list.paging.goFirst();
149
- }
150
- lastPage() {
151
- this.list.paging.goLast();
152
- }
153
- reload() {
154
- this.list.reload();
155
- }
156
- getData(trackBy) {
157
- return this.list.getData(trackBy);
158
- }
159
- hasData(trackBy) {
160
- return this.list.hasData(trackBy);
161
- }
162
- updateData(rows, trackBy) {
163
- return this.list.dataController.updateData(rows, trackBy);
164
- }
165
- replaceRow(row, trackBy) {
166
- return this.list.dataController.replaceData(row, trackBy);
167
- }
168
- updateSelectionConfig(config) {
169
- this.list.selection.updateConfig(config);
170
- }
171
- resetSelectionActions() {
172
- this.list.selection.resetActions();
173
- }
174
- enableSelection() {
175
- this.list.selection.enableSelection();
176
- }
177
- disableSelection() {
178
- this.list.selection.disableSelection();
179
- }
180
- removeData(data) {
181
- return this.list.dataController.removeData(data);
182
- }
183
- setHeading(heading) {
184
- this.list.heading = heading;
185
- }
186
- setSubheading(subheading) {
187
- this.list.subheading = subheading;
188
- }
189
- reorderStart() {
190
- this.reorderController.enableReorder();
191
- }
192
- reorderFinish() {
193
- this.reorderController.disableReorder();
194
- }
195
- setActions(actions) {
196
- if (actions) {
197
- this.list.actions.clearActions();
198
- this.list.actions.setActions(actions);
199
- }
200
- }
201
- filterReady() {
202
- this.list.filtersReady$.next();
203
- this._filterParamsReady = true;
204
- this._emitFiltersReadyEvent();
205
- }
206
- /**
207
- * Update visibility for specific column
208
- */
209
- columnVisibility(name, show) {
210
- this.columnsVisibility([{ name, show }]);
211
- }
212
- /**
213
- * Update visibility for list of specific columns
214
- */
215
- columnsVisibility(columns) {
216
- this.list.columns.updateVisibilityForCols(columns);
217
- }
218
- _emitFiltersReadyEvent() {
219
- if (!!this.filterRef && this._filterParamsReady) {
220
- this.filtersReady.emit();
221
- this.keywordVisible = this.filterRef.hasKeyword;
222
- this.cdRef.markForCheck();
223
- }
224
- }
225
- /**
226
- * Initialize config for list
227
- * @param config
228
- */
229
- _initWithConfig(config) {
230
- if (this.list) {
231
- this.list.destroy();
232
- }
233
- const defaultOpts = this._defaultOptions
234
- ? cloneDeep(this._defaultOptions)
235
- : {};
236
- const listConfig = mergeWith(defaultOpts, config, this._configMergeCustomizer);
237
- if (listConfig.persist !== false) {
238
- this._restorePersistance(listConfig.persist);
239
- }
240
- this._updateCustomizeAction(listConfig.actions);
241
- this.list = new List(this._el, listConfig, this.fsScroll, this.selectionDialog, this._router, this._route, this._persistance, this._inDialog);
242
- this._waitFirstLoad();
243
- this.reorderController.initWithConfig(config.reorder, this.list.dataController, this.list.actions, this.list.selection);
244
- if (this.listColumnDirectives) {
245
- this.list.tranformTemplatesToColumns(this.listColumnDirectives);
246
- }
247
- this._listenSortingChange();
248
- }
249
- /**
250
- * Find action with customize flag and re-declare click function for CustomizeColsDialog
251
- * @param actions
252
- */
253
- _updateCustomizeAction(actions) {
254
- const customizeAction = actions === null || actions === void 0 ? void 0 : actions.find((action) => action.customize);
255
- if (customizeAction) {
256
- const actionClickFn = customizeAction.click;
257
- customizeAction.click = () => {
258
- if (actionClickFn) {
259
- actionClickFn(null);
260
- }
261
- this.dialog.open(CustomizeColsDialogComponent, {
262
- data: {
263
- columns: this.list.columns.columnsForDialog,
264
- changeFn: this.list.columns.changeFn,
265
- },
266
- })
267
- .afterClosed()
268
- .pipe(takeUntil(this.list.onDestroy$), takeUntil(this._destroy))
269
- .subscribe((data) => {
270
- if (data) {
271
- this.list.columns.updateVisibilityForCols(data);
272
- this.cdRef.markForCheck();
273
- }
274
- });
275
- };
276
- }
277
- }
278
- /**
279
- * Update sorting in filter
280
- */
281
- _listenSortingChange() {
282
- this.list.sorting
283
- .sortingChanged$
284
- .pipe(takeUntil(this.list.onDestroy$), takeUntil(this._destroy))
285
- .subscribe((sort) => {
286
- this._filterRef.updateSort(sort);
287
- });
288
- }
289
- _subscribeToRemoveRow() {
290
- this.rowRemoved
291
- .pipe(takeUntil(this._destroy))
292
- .subscribe((row) => {
293
- this.list.dataController.removeData(row);
294
- });
295
- }
296
- _subscribeToGroupExpandStatusChange() {
297
- if (this.list.dataController.hasGroups) {
298
- this._groupExpandNotifier.expandStatusChange$
299
- .pipe(takeUntil(this._destroy))
300
- .subscribe((row) => {
301
- this.list.dataController.toggleRowGroup(row);
302
- });
303
- }
304
- }
305
- _waitFirstLoad() {
306
- this.list.loading$
307
- .pipe(skip(1), filter((value) => value === false), take(1), takeUntil(this.list.onDestroy$), takeUntil(this._destroy))
308
- .subscribe(() => {
309
- this.firstLoad = false;
310
- this.cdRef.markForCheck();
311
- });
312
- }
313
- _configMergeCustomizer(objValue, srcValue) {
314
- if (Array.isArray(objValue)) {
315
- return objValue;
316
- }
317
- }
318
- _restorePersistance(persistConfig) {
319
- const namespace = getNormalizedPath(this._location);
320
- this._persistance.setConfig(persistConfig, namespace, this._inDialog);
321
- }
322
- }
323
- FsListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsListComponent, deps: [{ token: i1.ReorderController }, { token: FS_LIST_DEFAULT_CONFIG, optional: true }, { token: i2.FsScrollService, optional: true }, { token: i3.MatDialogRef, optional: true }, { token: i4.DrawerRef, optional: true }, { token: i0.ElementRef }, { token: i5.SelectionDialog }, { token: i3.MatDialog }, { token: i0.ChangeDetectorRef }, { token: i6.GroupExpandNotifierService }, { token: i7.Router }, { token: i7.ActivatedRoute }, { token: i8.PersistanceController }, { token: i9.Location }], target: i0.ɵɵFactoryTarget.Component });
324
- FsListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsListComponent, selector: "fs-list", inputs: { config: "config", loaderLines: "loaderLines" }, outputs: { filtersReady: "filtersReady" }, host: { properties: { "class.fs-list": "this.classFsList" } }, providers: [
325
- GroupExpandNotifierService,
326
- PersistanceController,
327
- ReorderController,
328
- ], queries: [{ propertyName: "_emptyStateTemplate", first: true, predicate: FsListEmptyStateDirective, descendants: true, read: TemplateRef }, { propertyName: "headingTemplate", first: true, predicate: FsListHeadingDirective, descendants: true, read: TemplateRef }, { propertyName: "headingContainerTemplate", first: true, predicate: FsListHeadingContainerDirective, descendants: true, read: TemplateRef }, { propertyName: "subheadingTemplate", first: true, predicate: FsListSubheadingDirective, descendants: true, read: TemplateRef }, { propertyName: "columnTemplates", predicate: FsListColumnDirective }], viewQueries: [{ propertyName: "filterReference", first: true, predicate: FilterComponent, descendants: true }], ngImport: i0, template: "<div class=\"fs-list-container\"\n [ngClass]=\"{\n 'has-filter-keyword': hasFilterKeyword,\n 'has-filters': list.filterConfig?.items.length,\n 'has-heading': list.heading || headingTemplate,\n 'has-status': hasStatus,\n 'has-chips': list.chips,\n 'has-actions': list.actions.hasActions,\n 'first-load': firstLoad,\n 'loading': list.loading$ | async\n }\">\n <ng-template [ngTemplateOutlet]=\"listContainerContent\"></ng-template>\n</div>\n\n<ng-template #listContainerContent>\n <ng-container *ngIf=\"list.dataController.visibleRows$ | async as listData\">\n <div class=\"fs-list-header-container\">\n <div\n class=\"fs-list-header\"\n [ngClass]=\"{ 'no-wrap': reorderController.manualReorderActivated || !list.filterConfig?.items.length }\">\n <ng-container\n *ngIf=\"hasFilterKeyword\"\n [ngTemplateOutlet]=\"heading\">\n </ng-container>\n <fs-filter\n class=\"fs-list-filter\"\n *ngIf=\"list.filterConfig\"\n [filter]=\"list.filterConfig\"\n [showSortBy]=\"!list.status\"\n [showFilterInput]=\"list.filterInput\"\n (ready)=\"filterReady()\">\n <ng-template fsFilterStatusBar>\n <ng-container\n *ngIf=\"!hasFilterKeyword\"\n [ngTemplateOutlet]=\"heading\">\n </ng-container>\n <ng-container *ngIf=\"hasStatus\">\n <fs-list-status\n class=\"fs-list-status\"\n [ngClass]=\"{ 'hidden-mobile': !list.status }\"\n [rows]=\"listData\"\n [sorting]=\"list.sorting\"\n [paging]=\"list.paging\"\n [firstLoad]=\"firstLoad\"\n [scrollable]=\"list.scrollable || list.paging.loadMoreEnabled\">\n </fs-list-status>\n </ng-container>\n </ng-template>\n </fs-filter>\n </div>\n </div>\n\n <ng-content select=\"[fs-list-content]\"></ng-content>\n\n <!-- Table implementation -->\n <div class=\"fs-list-table-container\">\n <ng-container *ngIf=\"!firstLoad && listData.length > 0 && !list.emptyStateEnabled\">\n <table class=\"fs-list-table\" role=\"grid\" [fsListContentInit]=\"list.afterContentInit\">\n <thead\n fs-list-head\n class=\"fs-list-head\"\n role=\"rowgroup\"\n *ngIf=\"list.columns.hasHeader\"\n [ngClass]=\"list.columns.theadClass\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [sorting]=\"list.sorting\"\n [selection]=\"list.selection\"\n [hasRowActions]=\"list.hasRowActions\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\"\n >\n </thead>\n\n <tbody\n fs-list-body\n fsListDraggableList\n class=\"fs-list-body\"\n role=\"rowgroup\"\n [class.disabled]=\"!!(reorderController.reorderDisabled$ | async)\"\n [rows]=\"listData\"\n [rowActionsRaw]=\"list.rowActionsRaw\"\n [groupActionsRaw]=\"list.groupActionsRaw\"\n [hasRowActions]=\"list.hasRowActions\"\n [rowEvents]=\"list.rowEvents\"\n [rowClass]=\"list.rowClass\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [restoreMode]=\"list.restoreMode\"\n [selection]=\"list.selection\"\n [rowRemoved]=\"rowRemoved\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\"\n [reorderMultiple]=\"reorderController.multiple\"\n >\n </tbody>\n\n <tfoot\n fs-list-footer\n class=\"fs-list-footer\"\n *ngIf=\"list.columns.hasFooter\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [selection]=\"list.selection\"\n [hasRowActions]=\"list.hasRowActions\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\"\n >\n </tfoot>\n </table>\n </ng-container>\n <fs-list-loader\n *ngIf=\"firstLoad\"\n [columns]=\"list.columns.columns\"\n [loaderLines]=\"loaderLines\">\n </fs-list-loader>\n </div>\n\n <fs-list-pagination\n *ngIf=\"paginatorVisible\"\n class=\"fs-list-pagination\"\n [rows]=\"listData\"\n [pagination]=\"list.paging\">\n </fs-list-pagination>\n\n <ng-container *ngIf=\"!firstLoad\">\n <div\n *ngIf=\"listData.length === 0\"\n class=\"fs-list-no-results-container\">\n <div\n *ngIf=\"list.noResults?.message && !list.emptyStateEnabled\"\n class=\"fs-list-no-results\">\n {{ list.noResults?.message }}\n </div>\n <ng-container *ngIf=\"list.emptyStateEnabled\">\n <ng-template [ngTemplateOutlet]=\"list.emptyStateTemplate\"></ng-template>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #heading>\n <div class=\"heading-container\" *ngIf=\"headingContainerTemplate || list.heading || list.subheading || headingTemplate\">\n <ng-container *ngIf=\"headingContainerTemplate; else headingContainer\">\n <ng-container\n [ngTemplateOutlet]=\"headingContainerTemplate\"\n [ngTemplateOutletContext]=\"{ template: headingContainer }\">\n </ng-container>\n </ng-container>\n <ng-template #headingContainer>\n <h2 class=\"heading\" *ngIf=\"list.heading || headingTemplate\">\n {{list.heading}}\n <ng-container [ngTemplateOutlet]=\"headingTemplate\"></ng-container>\n </h2>\n <div class=\"small subheading\" *ngIf=\"list.subheading || subheadingTemplate\">\n {{list.subheading}}\n <ng-container [ngTemplateOutlet]=\"subheadingTemplate\"></ng-container>\n </div>\n </ng-template>\n </div>\n</ng-template>\n", styles: [":host ::ng-deep .fs-list-swap-restricted{opacity:.5}:host ::ng-deep .fs-list-no-drop{cursor:no-drop}:host ::ng-deep .hidden{display:none}@media print{:host ::ng-deep .fs-list-row-group{page-break-after:avoid}:host ::ng-deep .fs-list-row-group-child{page-break-before:avoid}:host ::ng-deep .fs-list-row-group-footer{page-break-before:avoid}}.fs-list-container{width:100%}.fs-list-container:not(.has-filters):not(.has-actions):not(.has-heading) .fs-list-header-container{display:none}.fs-list-container:not(.has-filter-keyword) .fs-list-header{display:flex;margin-bottom:4px}.fs-list-container:not(.has-filter-keyword) .fs-list-header .heading-container{flex:1}.fs-list-container:not(.has-filter-keyword) .fs-list-header fs-filter{display:flex}.fs-list-container.has-filters .heading-container{margin-bottom:4px}.fs-list-container.loading .fs-list-status,.fs-list-container.loading .fs-list-body,.fs-list-container.loading fs-list-pagination,.fs-list-container.loading .filter-chips,.fs-list-container.loading .fs-list-no-results-container,.fs-list-container.first-load .fs-list-status,.fs-list-container.first-load .fs-list-body,.fs-list-container.first-load fs-list-pagination,.fs-list-container.first-load .filter-chips,.fs-list-container.first-load .fs-list-no-results-container{opacity:.4;pointer-events:none}.fs-list-container.first-load ::ng-deep fs-filter-chips .fs-chip{color:transparent}.fs-list-container.first-load ::ng-deep fs-filter-chips .fs-chip .remove{visibility:hidden}.fs-list-container.has-actions .fs-list-actions{margin-left:5px}.fs-list-filter{margin-bottom:0;position:initial!important;display:block;width:100%}.fs-list-no-results-container .fs-list-no-results{text-align:center;color:#999;padding:10px 0}.fs-list-header .heading-container{display:flex;flex-direction:column;justify-content:center}.fs-list-header .heading{margin:0}.fs-list-header h2+.subheading{margin:2px 0 0}.fs-list-header .fs-list-actions{white-space:nowrap;float:right}.fs-list-header .fs-list-actions .menu-button{width:36px;height:36px;line-height:36px}.fs-list-header .action-button{margin-left:5px}.fs-list-header .action-button:first-child{margin-left:0}.fs-list-header .mat-button{margin-top:0;margin-bottom:0;margin-right:0}.fs-list-table-container{width:100%;overflow:auto}::ng-deep .preview-block{position:fixed;height:30px;width:200px;background:grey;display:flex;justify-content:center;align-items:center;z-index:1000;box-shadow:2px 2px 2px #9e9e9ea6;border-radius:6px}::ng-deep .fs-list{display:block;width:100%}::ng-deep .fs-list-table{border-spacing:0;display:table;width:100%;border-collapse:collapse}::ng-deep .fs-list-table thead,::ng-deep .fs-list-table .fs-list-head{display:table-header-group}::ng-deep .fs-list-table thead th,::ng-deep .fs-list-table thead .fs-list-col,::ng-deep .fs-list-table .fs-list-head th,::ng-deep .fs-list-table .fs-list-head .fs-list-col{color:#999;padding:8px;font-weight:normal;color:#8f8f8f;font-size:85%}::ng-deep .fs-list-table thead th.fs-list-col-selection,::ng-deep .fs-list-table thead .fs-list-col.fs-list-col-selection,::ng-deep .fs-list-table .fs-list-head th.fs-list-col-selection,::ng-deep .fs-list-table .fs-list-head .fs-list-col.fs-list-col-selection{width:1%;text-align:left}::ng-deep .fs-list-table thead th.sorting,::ng-deep .fs-list-table thead .fs-list-col.sorting,::ng-deep .fs-list-table .fs-list-head th.sorting,::ng-deep .fs-list-table .fs-list-head .fs-list-col.sorting{cursor:pointer}::ng-deep .fs-list-table thead th.sorting:hover,::ng-deep .fs-list-table thead .fs-list-col.sorting:hover,::ng-deep .fs-list-table .fs-list-head th.sorting:hover,::ng-deep .fs-list-table .fs-list-head .fs-list-col.sorting:hover{background-color:#f6f6f6}::ng-deep .fs-list-table thead th .wrap,::ng-deep .fs-list-table thead .fs-list-col .wrap,::ng-deep .fs-list-table .fs-list-head th .wrap,::ng-deep .fs-list-table .fs-list-head .fs-list-col .wrap{display:inline-flex;vertical-align:middle;white-space:nowrap}::ng-deep .fs-list-table thead th .wrap mat-icon,::ng-deep .fs-list-table thead .fs-list-col .wrap mat-icon,::ng-deep .fs-list-table .fs-list-head th .wrap mat-icon,::ng-deep .fs-list-table .fs-list-head .fs-list-col .wrap mat-icon{font-size:14px;display:block;height:14px;width:14px}::ng-deep .fs-list-table thead th .wrap .direction,::ng-deep .fs-list-table thead .fs-list-col .wrap .direction,::ng-deep .fs-list-table .fs-list-head th .wrap .direction,::ng-deep .fs-list-table .fs-list-head .fs-list-col .wrap .direction{margin-left:5px}::ng-deep .fs-list-table thead th.sorting,::ng-deep .fs-list-table thead .fs-list-col.sorting,::ng-deep .fs-list-table .fs-list-head th.sorting,::ng-deep .fs-list-table .fs-list-head .fs-list-col.sorting{background-image:none}::ng-deep .fs-list-table tbody,::ng-deep .fs-list-table .fs-list-body{display:table-row-group;position:relative}::ng-deep .fs-list-table tbody.drag-hidden .drag-col,::ng-deep .fs-list-table .fs-list-body.drag-hidden .drag-col{opacity:0!important;cursor:default}::ng-deep .fs-list-table tbody.disabled,::ng-deep .fs-list-table .fs-list-body.disabled{opacity:.4;pointer-events:none}::ng-deep .fs-list-table tbody td,::ng-deep .fs-list-table tbody .fs-list-col,::ng-deep .fs-list-table .fs-list-body td,::ng-deep .fs-list-table .fs-list-body .fs-list-col{box-sizing:border-box;border-top:1px solid #ddd}::ng-deep .fs-list-table tbody tr:hover td,::ng-deep .fs-list-table tbody .fs-list-row:hover .fs-list-col,::ng-deep .fs-list-table .fs-list-body tr:hover td,::ng-deep .fs-list-table .fs-list-body .fs-list-row:hover .fs-list-col{background-color:#f6f6f6}::ng-deep .fs-list-table tbody tr:hover td,::ng-deep .fs-list-table tbody tr:hover .fs-list-col,::ng-deep .fs-list-table tbody .fs-list-row:hover td,::ng-deep .fs-list-table tbody .fs-list-row:hover .fs-list-col,::ng-deep .fs-list-table .fs-list-body tr:hover td,::ng-deep .fs-list-table .fs-list-body tr:hover .fs-list-col,::ng-deep .fs-list-table .fs-list-body .fs-list-row:hover td,::ng-deep .fs-list-table .fs-list-body .fs-list-row:hover .fs-list-col{background-color:#f6f6f6}::ng-deep .fs-list-table tbody tr:first-child td,::ng-deep .fs-list-table .fs-list-body tr:first-child td{border-top:2px solid #ddd}::ng-deep .fs-list-table tbody tr:last-child td,::ng-deep .fs-list-table .fs-list-body tr:last-child td{border-bottom:2px solid #ddd}::ng-deep .fs-list-table thead tr,::ng-deep .fs-list-table thead .fs-list-row,::ng-deep .fs-list-table tbody tr,::ng-deep .fs-list-table tbody .fs-list-row,::ng-deep .fs-list-table tfoot tr,::ng-deep .fs-list-table tfoot .fs-list-row,::ng-deep .fs-list-table .fs-list-head tr,::ng-deep .fs-list-table .fs-list-head .fs-list-row,::ng-deep .fs-list-table .fs-list-body tr,::ng-deep .fs-list-table .fs-list-body .fs-list-row,::ng-deep .fs-list-table .fs-list-footer tr,::ng-deep .fs-list-table .fs-list-footer .fs-list-row{display:table-row}::ng-deep .fs-list-table thead tr.drag-hidden,::ng-deep .fs-list-table thead .fs-list-row.drag-hidden,::ng-deep .fs-list-table tbody tr.drag-hidden,::ng-deep .fs-list-table tbody .fs-list-row.drag-hidden,::ng-deep .fs-list-table tfoot tr.drag-hidden,::ng-deep .fs-list-table tfoot .fs-list-row.drag-hidden,::ng-deep .fs-list-table .fs-list-head tr.drag-hidden,::ng-deep .fs-list-table .fs-list-head .fs-list-row.drag-hidden,::ng-deep .fs-list-table .fs-list-body tr.drag-hidden,::ng-deep .fs-list-table .fs-list-body .fs-list-row.drag-hidden,::ng-deep .fs-list-table .fs-list-footer tr.drag-hidden,::ng-deep .fs-list-table .fs-list-footer .fs-list-row.drag-hidden{display:none}::ng-deep .fs-list-table thead tr.multiple-selection,::ng-deep .fs-list-table thead .fs-list-row.multiple-selection,::ng-deep .fs-list-table tbody tr.multiple-selection,::ng-deep .fs-list-table tbody .fs-list-row.multiple-selection,::ng-deep .fs-list-table tfoot tr.multiple-selection,::ng-deep .fs-list-table tfoot .fs-list-row.multiple-selection,::ng-deep .fs-list-table .fs-list-head tr.multiple-selection,::ng-deep .fs-list-table .fs-list-head .fs-list-row.multiple-selection,::ng-deep .fs-list-table .fs-list-body tr.multiple-selection,::ng-deep .fs-list-table .fs-list-body .fs-list-row.multiple-selection,::ng-deep .fs-list-table .fs-list-footer tr.multiple-selection,::ng-deep .fs-list-table .fs-list-footer .fs-list-row.multiple-selection{background-color:#2196f380}::ng-deep .fs-list-table thead tr.multiple-selection .fs-list-col,::ng-deep .fs-list-table thead .fs-list-row.multiple-selection .fs-list-col,::ng-deep .fs-list-table tbody tr.multiple-selection .fs-list-col,::ng-deep .fs-list-table tbody .fs-list-row.multiple-selection .fs-list-col,::ng-deep .fs-list-table tfoot tr.multiple-selection .fs-list-col,::ng-deep .fs-list-table tfoot .fs-list-row.multiple-selection .fs-list-col,::ng-deep .fs-list-table .fs-list-head tr.multiple-selection .fs-list-col,::ng-deep .fs-list-table .fs-list-head .fs-list-row.multiple-selection .fs-list-col,::ng-deep .fs-list-table .fs-list-body tr.multiple-selection .fs-list-col,::ng-deep .fs-list-table .fs-list-body .fs-list-row.multiple-selection .fs-list-col,::ng-deep .fs-list-table .fs-list-footer tr.multiple-selection .fs-list-col,::ng-deep .fs-list-table .fs-list-footer .fs-list-row.multiple-selection .fs-list-col{background-color:#2196f380}::ng-deep .fs-list-table thead tr td,::ng-deep .fs-list-table thead tr th,::ng-deep .fs-list-table thead tr .fs-list-col,::ng-deep .fs-list-table thead .fs-list-row td,::ng-deep .fs-list-table thead .fs-list-row th,::ng-deep .fs-list-table thead .fs-list-row .fs-list-col,::ng-deep .fs-list-table tbody tr td,::ng-deep .fs-list-table tbody tr th,::ng-deep .fs-list-table tbody tr .fs-list-col,::ng-deep .fs-list-table tbody .fs-list-row td,::ng-deep .fs-list-table tbody .fs-list-row th,::ng-deep .fs-list-table tbody .fs-list-row .fs-list-col,::ng-deep .fs-list-table tfoot tr td,::ng-deep .fs-list-table tfoot tr th,::ng-deep .fs-list-table tfoot tr .fs-list-col,::ng-deep .fs-list-table tfoot .fs-list-row td,::ng-deep .fs-list-table tfoot .fs-list-row th,::ng-deep .fs-list-table tfoot .fs-list-row .fs-list-col,::ng-deep .fs-list-table .fs-list-head tr td,::ng-deep .fs-list-table .fs-list-head tr th,::ng-deep .fs-list-table .fs-list-head tr .fs-list-col,::ng-deep .fs-list-table .fs-list-head .fs-list-row td,::ng-deep .fs-list-table .fs-list-head .fs-list-row th,::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col,::ng-deep .fs-list-table .fs-list-body tr td,::ng-deep .fs-list-table .fs-list-body tr th,::ng-deep .fs-list-table .fs-list-body tr .fs-list-col,::ng-deep .fs-list-table .fs-list-body .fs-list-row td,::ng-deep .fs-list-table .fs-list-body .fs-list-row th,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col,::ng-deep .fs-list-table .fs-list-footer tr td,::ng-deep .fs-list-table .fs-list-footer tr th,::ng-deep .fs-list-table .fs-list-footer tr .fs-list-col,::ng-deep .fs-list-table .fs-list-footer .fs-list-row td,::ng-deep .fs-list-table .fs-list-footer .fs-list-row th,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col{display:table-cell;padding:8px;vertical-align:middle;outline:none;text-align:left}::ng-deep .fs-list-table thead tr td.drag-col,::ng-deep .fs-list-table thead tr th.drag-col,::ng-deep .fs-list-table thead tr .fs-list-col.drag-col,::ng-deep .fs-list-table thead .fs-list-row td.drag-col,::ng-deep .fs-list-table thead .fs-list-row th.drag-col,::ng-deep .fs-list-table thead .fs-list-row .fs-list-col.drag-col,::ng-deep .fs-list-table tbody tr td.drag-col,::ng-deep .fs-list-table tbody tr th.drag-col,::ng-deep .fs-list-table tbody tr .fs-list-col.drag-col,::ng-deep .fs-list-table tbody .fs-list-row td.drag-col,::ng-deep .fs-list-table tbody .fs-list-row th.drag-col,::ng-deep .fs-list-table tbody .fs-list-row .fs-list-col.drag-col,::ng-deep .fs-list-table tfoot tr td.drag-col,::ng-deep .fs-list-table tfoot tr th.drag-col,::ng-deep .fs-list-table tfoot tr .fs-list-col.drag-col,::ng-deep .fs-list-table tfoot .fs-list-row td.drag-col,::ng-deep .fs-list-table tfoot .fs-list-row th.drag-col,::ng-deep .fs-list-table tfoot .fs-list-row .fs-list-col.drag-col,::ng-deep .fs-list-table .fs-list-head tr td.drag-col,::ng-deep .fs-list-table .fs-list-head tr th.drag-col,::ng-deep .fs-list-table .fs-list-head tr .fs-list-col.drag-col,::ng-deep .fs-list-table .fs-list-head .fs-list-row td.drag-col,::ng-deep .fs-list-table .fs-list-head .fs-list-row th.drag-col,::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.drag-col,::ng-deep .fs-list-table .fs-list-body tr td.drag-col,::ng-deep .fs-list-table .fs-list-body tr th.drag-col,::ng-deep .fs-list-table .fs-list-body tr .fs-list-col.drag-col,::ng-deep .fs-list-table .fs-list-body .fs-list-row td.drag-col,::ng-deep .fs-list-table .fs-list-body .fs-list-row th.drag-col,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.drag-col,::ng-deep .fs-list-table .fs-list-footer tr td.drag-col,::ng-deep .fs-list-table .fs-list-footer tr th.drag-col,::ng-deep .fs-list-table .fs-list-footer tr .fs-list-col.drag-col,::ng-deep .fs-list-table .fs-list-footer .fs-list-row td.drag-col,::ng-deep .fs-list-table .fs-list-footer .fs-list-row th.drag-col,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.drag-col{width:24px;text-align:center;cursor:grab}::ng-deep .fs-list-table thead tr td.drag-col.drag-disabled,::ng-deep .fs-list-table thead tr th.drag-col.drag-disabled,::ng-deep .fs-list-table thead tr .fs-list-col.drag-col.drag-disabled,::ng-deep .fs-list-table thead .fs-list-row td.drag-col.drag-disabled,::ng-deep .fs-list-table thead .fs-list-row th.drag-col.drag-disabled,::ng-deep .fs-list-table thead .fs-list-row .fs-list-col.drag-col.drag-disabled,::ng-deep .fs-list-table tbody tr td.drag-col.drag-disabled,::ng-deep .fs-list-table tbody tr th.drag-col.drag-disabled,::ng-deep .fs-list-table tbody tr .fs-list-col.drag-col.drag-disabled,::ng-deep .fs-list-table tbody .fs-list-row td.drag-col.drag-disabled,::ng-deep .fs-list-table tbody .fs-list-row th.drag-col.drag-disabled,::ng-deep .fs-list-table tbody .fs-list-row .fs-list-col.drag-col.drag-disabled,::ng-deep .fs-list-table tfoot tr td.drag-col.drag-disabled,::ng-deep .fs-list-table tfoot tr th.drag-col.drag-disabled,::ng-deep .fs-list-table tfoot tr .fs-list-col.drag-col.drag-disabled,::ng-deep .fs-list-table tfoot .fs-list-row td.drag-col.drag-disabled,::ng-deep .fs-list-table tfoot .fs-list-row th.drag-col.drag-disabled,::ng-deep .fs-list-table tfoot .fs-list-row .fs-list-col.drag-col.drag-disabled,::ng-deep .fs-list-table .fs-list-head tr td.drag-col.drag-disabled,::ng-deep .fs-list-table .fs-list-head tr th.drag-col.drag-disabled,::ng-deep .fs-list-table .fs-list-head tr .fs-list-col.drag-col.drag-disabled,::ng-deep .fs-list-table .fs-list-head .fs-list-row td.drag-col.drag-disabled,::ng-deep .fs-list-table .fs-list-head .fs-list-row th.drag-col.drag-disabled,::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.drag-col.drag-disabled,::ng-deep .fs-list-table .fs-list-body tr td.drag-col.drag-disabled,::ng-deep .fs-list-table .fs-list-body tr th.drag-col.drag-disabled,::ng-deep .fs-list-table .fs-list-body tr .fs-list-col.drag-col.drag-disabled,::ng-deep .fs-list-table .fs-list-body .fs-list-row td.drag-col.drag-disabled,::ng-deep .fs-list-table .fs-list-body .fs-list-row th.drag-col.drag-disabled,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.drag-col.drag-disabled,::ng-deep .fs-list-table .fs-list-footer tr td.drag-col.drag-disabled,::ng-deep .fs-list-table .fs-list-footer tr th.drag-col.drag-disabled,::ng-deep .fs-list-table .fs-list-footer tr .fs-list-col.drag-col.drag-disabled,::ng-deep .fs-list-table .fs-list-footer .fs-list-row td.drag-col.drag-disabled,::ng-deep .fs-list-table .fs-list-footer .fs-list-row th.drag-col.drag-disabled,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.drag-col.drag-disabled{opacity:.4;cursor:no-drop}::ng-deep .fs-list-table thead tr td.drag-col mat-icon,::ng-deep .fs-list-table thead tr th.drag-col mat-icon,::ng-deep .fs-list-table thead tr .fs-list-col.drag-col mat-icon,::ng-deep .fs-list-table thead .fs-list-row td.drag-col mat-icon,::ng-deep .fs-list-table thead .fs-list-row th.drag-col mat-icon,::ng-deep .fs-list-table thead .fs-list-row .fs-list-col.drag-col mat-icon,::ng-deep .fs-list-table tbody tr td.drag-col mat-icon,::ng-deep .fs-list-table tbody tr th.drag-col mat-icon,::ng-deep .fs-list-table tbody tr .fs-list-col.drag-col mat-icon,::ng-deep .fs-list-table tbody .fs-list-row td.drag-col mat-icon,::ng-deep .fs-list-table tbody .fs-list-row th.drag-col mat-icon,::ng-deep .fs-list-table tbody .fs-list-row .fs-list-col.drag-col mat-icon,::ng-deep .fs-list-table tfoot tr td.drag-col mat-icon,::ng-deep .fs-list-table tfoot tr th.drag-col mat-icon,::ng-deep .fs-list-table tfoot tr .fs-list-col.drag-col mat-icon,::ng-deep .fs-list-table tfoot .fs-list-row td.drag-col mat-icon,::ng-deep .fs-list-table tfoot .fs-list-row th.drag-col mat-icon,::ng-deep .fs-list-table tfoot .fs-list-row .fs-list-col.drag-col mat-icon,::ng-deep .fs-list-table .fs-list-head tr td.drag-col mat-icon,::ng-deep .fs-list-table .fs-list-head tr th.drag-col mat-icon,::ng-deep .fs-list-table .fs-list-head tr .fs-list-col.drag-col mat-icon,::ng-deep .fs-list-table .fs-list-head .fs-list-row td.drag-col mat-icon,::ng-deep .fs-list-table .fs-list-head .fs-list-row th.drag-col mat-icon,::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.drag-col mat-icon,::ng-deep .fs-list-table .fs-list-body tr td.drag-col mat-icon,::ng-deep .fs-list-table .fs-list-body tr th.drag-col mat-icon,::ng-deep .fs-list-table .fs-list-body tr .fs-list-col.drag-col mat-icon,::ng-deep .fs-list-table .fs-list-body .fs-list-row td.drag-col mat-icon,::ng-deep .fs-list-table .fs-list-body .fs-list-row th.drag-col mat-icon,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.drag-col mat-icon,::ng-deep .fs-list-table .fs-list-footer tr td.drag-col mat-icon,::ng-deep .fs-list-table .fs-list-footer tr th.drag-col mat-icon,::ng-deep .fs-list-table .fs-list-footer tr .fs-list-col.drag-col mat-icon,::ng-deep .fs-list-table .fs-list-footer .fs-list-row td.drag-col mat-icon,::ng-deep .fs-list-table .fs-list-footer .fs-list-row th.drag-col mat-icon,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.drag-col mat-icon{display:flex}::ng-deep .fs-list-table thead tr td.fs-list-col-selection,::ng-deep .fs-list-table thead tr th.fs-list-col-selection,::ng-deep .fs-list-table thead tr .fs-list-col.fs-list-col-selection,::ng-deep .fs-list-table thead .fs-list-row td.fs-list-col-selection,::ng-deep .fs-list-table thead .fs-list-row th.fs-list-col-selection,::ng-deep .fs-list-table thead .fs-list-row .fs-list-col.fs-list-col-selection,::ng-deep .fs-list-table tbody tr td.fs-list-col-selection,::ng-deep .fs-list-table tbody tr th.fs-list-col-selection,::ng-deep .fs-list-table tbody tr .fs-list-col.fs-list-col-selection,::ng-deep .fs-list-table tbody .fs-list-row td.fs-list-col-selection,::ng-deep .fs-list-table tbody .fs-list-row th.fs-list-col-selection,::ng-deep .fs-list-table tbody .fs-list-row .fs-list-col.fs-list-col-selection,::ng-deep .fs-list-table tfoot tr td.fs-list-col-selection,::ng-deep .fs-list-table tfoot tr th.fs-list-col-selection,::ng-deep .fs-list-table tfoot tr .fs-list-col.fs-list-col-selection,::ng-deep .fs-list-table tfoot .fs-list-row td.fs-list-col-selection,::ng-deep .fs-list-table tfoot .fs-list-row th.fs-list-col-selection,::ng-deep .fs-list-table tfoot .fs-list-row .fs-list-col.fs-list-col-selection,::ng-deep .fs-list-table .fs-list-head tr td.fs-list-col-selection,::ng-deep .fs-list-table .fs-list-head tr th.fs-list-col-selection,::ng-deep .fs-list-table .fs-list-head tr .fs-list-col.fs-list-col-selection,::ng-deep .fs-list-table .fs-list-head .fs-list-row td.fs-list-col-selection,::ng-deep .fs-list-table .fs-list-head .fs-list-row th.fs-list-col-selection,::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.fs-list-col-selection,::ng-deep .fs-list-table .fs-list-body tr td.fs-list-col-selection,::ng-deep .fs-list-table .fs-list-body tr th.fs-list-col-selection,::ng-deep .fs-list-table .fs-list-body tr .fs-list-col.fs-list-col-selection,::ng-deep .fs-list-table .fs-list-body .fs-list-row td.fs-list-col-selection,::ng-deep .fs-list-table .fs-list-body .fs-list-row th.fs-list-col-selection,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.fs-list-col-selection,::ng-deep .fs-list-table .fs-list-footer tr td.fs-list-col-selection,::ng-deep .fs-list-table .fs-list-footer tr th.fs-list-col-selection,::ng-deep .fs-list-table .fs-list-footer tr .fs-list-col.fs-list-col-selection,::ng-deep .fs-list-table .fs-list-footer .fs-list-row td.fs-list-col-selection,::ng-deep .fs-list-table .fs-list-footer .fs-list-row th.fs-list-col-selection,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.fs-list-col-selection{padding:10px}::ng-deep .fs-list-table thead tr td.row-actions,::ng-deep .fs-list-table thead tr th.row-actions,::ng-deep .fs-list-table thead tr .fs-list-col.row-actions,::ng-deep .fs-list-table thead .fs-list-row td.row-actions,::ng-deep .fs-list-table thead .fs-list-row th.row-actions,::ng-deep .fs-list-table thead .fs-list-row .fs-list-col.row-actions,::ng-deep .fs-list-table tbody tr td.row-actions,::ng-deep .fs-list-table tbody tr th.row-actions,::ng-deep .fs-list-table tbody tr .fs-list-col.row-actions,::ng-deep .fs-list-table tbody .fs-list-row td.row-actions,::ng-deep .fs-list-table tbody .fs-list-row th.row-actions,::ng-deep .fs-list-table tbody .fs-list-row .fs-list-col.row-actions,::ng-deep .fs-list-table tfoot tr td.row-actions,::ng-deep .fs-list-table tfoot tr th.row-actions,::ng-deep .fs-list-table tfoot tr .fs-list-col.row-actions,::ng-deep .fs-list-table tfoot .fs-list-row td.row-actions,::ng-deep .fs-list-table tfoot .fs-list-row th.row-actions,::ng-deep .fs-list-table tfoot .fs-list-row .fs-list-col.row-actions,::ng-deep .fs-list-table .fs-list-head tr td.row-actions,::ng-deep .fs-list-table .fs-list-head tr th.row-actions,::ng-deep .fs-list-table .fs-list-head tr .fs-list-col.row-actions,::ng-deep .fs-list-table .fs-list-head .fs-list-row td.row-actions,::ng-deep .fs-list-table .fs-list-head .fs-list-row th.row-actions,::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.row-actions,::ng-deep .fs-list-table .fs-list-body tr td.row-actions,::ng-deep .fs-list-table .fs-list-body tr th.row-actions,::ng-deep .fs-list-table .fs-list-body tr .fs-list-col.row-actions,::ng-deep .fs-list-table .fs-list-body .fs-list-row td.row-actions,::ng-deep .fs-list-table .fs-list-body .fs-list-row th.row-actions,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.row-actions,::ng-deep .fs-list-table .fs-list-footer tr td.row-actions,::ng-deep .fs-list-table .fs-list-footer tr th.row-actions,::ng-deep .fs-list-table .fs-list-footer tr .fs-list-col.row-actions,::ng-deep .fs-list-table .fs-list-footer .fs-list-row td.row-actions,::ng-deep .fs-list-table .fs-list-footer .fs-list-row th.row-actions,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.row-actions{width:1%;white-space:nowrap;padding-right:10px;overflow:hidden}::ng-deep .fs-list-table thead tr td.row-actions .row-inline-action,::ng-deep .fs-list-table thead tr th.row-actions .row-inline-action,::ng-deep .fs-list-table thead tr .fs-list-col.row-actions .row-inline-action,::ng-deep .fs-list-table thead .fs-list-row td.row-actions .row-inline-action,::ng-deep .fs-list-table thead .fs-list-row th.row-actions .row-inline-action,::ng-deep .fs-list-table thead .fs-list-row .fs-list-col.row-actions .row-inline-action,::ng-deep .fs-list-table tbody tr td.row-actions .row-inline-action,::ng-deep .fs-list-table tbody tr th.row-actions .row-inline-action,::ng-deep .fs-list-table tbody tr .fs-list-col.row-actions .row-inline-action,::ng-deep .fs-list-table tbody .fs-list-row td.row-actions .row-inline-action,::ng-deep .fs-list-table tbody .fs-list-row th.row-actions .row-inline-action,::ng-deep .fs-list-table tbody .fs-list-row .fs-list-col.row-actions .row-inline-action,::ng-deep .fs-list-table tfoot tr td.row-actions .row-inline-action,::ng-deep .fs-list-table tfoot tr th.row-actions .row-inline-action,::ng-deep .fs-list-table tfoot tr .fs-list-col.row-actions .row-inline-action,::ng-deep .fs-list-table tfoot .fs-list-row td.row-actions .row-inline-action,::ng-deep .fs-list-table tfoot .fs-list-row th.row-actions .row-inline-action,::ng-deep .fs-list-table tfoot .fs-list-row .fs-list-col.row-actions .row-inline-action,::ng-deep .fs-list-table .fs-list-head tr td.row-actions .row-inline-action,::ng-deep .fs-list-table .fs-list-head tr th.row-actions .row-inline-action,::ng-deep .fs-list-table .fs-list-head tr .fs-list-col.row-actions .row-inline-action,::ng-deep .fs-list-table .fs-list-head .fs-list-row td.row-actions .row-inline-action,::ng-deep .fs-list-table .fs-list-head .fs-list-row th.row-actions .row-inline-action,::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.row-actions .row-inline-action,::ng-deep .fs-list-table .fs-list-body tr td.row-actions .row-inline-action,::ng-deep .fs-list-table .fs-list-body tr th.row-actions .row-inline-action,::ng-deep .fs-list-table .fs-list-body tr .fs-list-col.row-actions .row-inline-action,::ng-deep .fs-list-table .fs-list-body .fs-list-row td.row-actions .row-inline-action,::ng-deep .fs-list-table .fs-list-body .fs-list-row th.row-actions .row-inline-action,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.row-actions .row-inline-action,::ng-deep .fs-list-table .fs-list-footer tr td.row-actions .row-inline-action,::ng-deep .fs-list-table .fs-list-footer tr th.row-actions .row-inline-action,::ng-deep .fs-list-table .fs-list-footer tr .fs-list-col.row-actions .row-inline-action,::ng-deep .fs-list-table .fs-list-footer .fs-list-row td.row-actions .row-inline-action,::ng-deep .fs-list-table .fs-list-footer .fs-list-row th.row-actions .row-inline-action,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.row-actions .row-inline-action{margin-left:12px;display:inline-block}::ng-deep .fs-list-table thead tr td.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table thead tr th.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table thead tr .fs-list-col.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table thead .fs-list-row td.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table thead .fs-list-row th.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table thead .fs-list-row .fs-list-col.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table tbody tr td.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table tbody tr th.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table tbody tr .fs-list-col.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table tbody .fs-list-row td.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table tbody .fs-list-row th.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table tbody .fs-list-row .fs-list-col.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table tfoot tr td.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table tfoot tr th.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table tfoot tr .fs-list-col.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table tfoot .fs-list-row td.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table tfoot .fs-list-row th.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table tfoot .fs-list-row .fs-list-col.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table .fs-list-head tr td.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table .fs-list-head tr th.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table .fs-list-head tr .fs-list-col.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table .fs-list-head .fs-list-row td.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table .fs-list-head .fs-list-row th.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table .fs-list-body tr td.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table .fs-list-body tr th.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table .fs-list-body tr .fs-list-col.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table .fs-list-body .fs-list-row td.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table .fs-list-body .fs-list-row th.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table .fs-list-footer tr td.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table .fs-list-footer tr th.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table .fs-list-footer tr .fs-list-col.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table .fs-list-footer .fs-list-row td.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table .fs-list-footer .fs-list-row th.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.row-actions .row-inline-action:first-child{margin-left:0}::ng-deep .fs-list-table thead tr td.row-actions .row-inline-action-icon,::ng-deep .fs-list-table thead tr td.row-actions .row-inline-action-fab,::ng-deep .fs-list-table thead tr td.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table thead tr td.row-actions .row-menu-action,::ng-deep .fs-list-table thead tr th.row-actions .row-inline-action-icon,::ng-deep .fs-list-table thead tr th.row-actions .row-inline-action-fab,::ng-deep .fs-list-table thead tr th.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table thead tr th.row-actions .row-menu-action,::ng-deep .fs-list-table thead tr .fs-list-col.row-actions .row-inline-action-icon,::ng-deep .fs-list-table thead tr .fs-list-col.row-actions .row-inline-action-fab,::ng-deep .fs-list-table thead tr .fs-list-col.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table thead tr .fs-list-col.row-actions .row-menu-action,::ng-deep .fs-list-table thead .fs-list-row td.row-actions .row-inline-action-icon,::ng-deep .fs-list-table thead .fs-list-row td.row-actions .row-inline-action-fab,::ng-deep .fs-list-table thead .fs-list-row td.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table thead .fs-list-row td.row-actions .row-menu-action,::ng-deep .fs-list-table thead .fs-list-row th.row-actions .row-inline-action-icon,::ng-deep .fs-list-table thead .fs-list-row th.row-actions .row-inline-action-fab,::ng-deep .fs-list-table thead .fs-list-row th.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table thead .fs-list-row th.row-actions .row-menu-action,::ng-deep .fs-list-table thead .fs-list-row .fs-list-col.row-actions .row-inline-action-icon,::ng-deep .fs-list-table thead .fs-list-row .fs-list-col.row-actions .row-inline-action-fab,::ng-deep .fs-list-table thead .fs-list-row .fs-list-col.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table thead .fs-list-row .fs-list-col.row-actions .row-menu-action,::ng-deep .fs-list-table tbody tr td.row-actions .row-inline-action-icon,::ng-deep .fs-list-table tbody tr td.row-actions .row-inline-action-fab,::ng-deep .fs-list-table tbody tr td.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table tbody tr td.row-actions .row-menu-action,::ng-deep .fs-list-table tbody tr th.row-actions .row-inline-action-icon,::ng-deep .fs-list-table tbody tr th.row-actions .row-inline-action-fab,::ng-deep .fs-list-table tbody tr th.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table tbody tr th.row-actions .row-menu-action,::ng-deep .fs-list-table tbody tr .fs-list-col.row-actions .row-inline-action-icon,::ng-deep .fs-list-table tbody tr .fs-list-col.row-actions .row-inline-action-fab,::ng-deep .fs-list-table tbody tr .fs-list-col.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table tbody tr .fs-list-col.row-actions .row-menu-action,::ng-deep .fs-list-table tbody .fs-list-row td.row-actions .row-inline-action-icon,::ng-deep .fs-list-table tbody .fs-list-row td.row-actions .row-inline-action-fab,::ng-deep .fs-list-table tbody .fs-list-row td.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table tbody .fs-list-row td.row-actions .row-menu-action,::ng-deep .fs-list-table tbody .fs-list-row th.row-actions .row-inline-action-icon,::ng-deep .fs-list-table tbody .fs-list-row th.row-actions .row-inline-action-fab,::ng-deep .fs-list-table tbody .fs-list-row th.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table tbody .fs-list-row th.row-actions .row-menu-action,::ng-deep .fs-list-table tbody .fs-list-row .fs-list-col.row-actions .row-inline-action-icon,::ng-deep .fs-list-table tbody .fs-list-row .fs-list-col.row-actions .row-inline-action-fab,::ng-deep .fs-list-table tbody .fs-list-row .fs-list-col.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table tbody .fs-list-row .fs-list-col.row-actions .row-menu-action,::ng-deep .fs-list-table tfoot tr td.row-actions .row-inline-action-icon,::ng-deep .fs-list-table tfoot tr td.row-actions .row-inline-action-fab,::ng-deep .fs-list-table tfoot tr td.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table tfoot tr td.row-actions .row-menu-action,::ng-deep .fs-list-table tfoot tr th.row-actions .row-inline-action-icon,::ng-deep .fs-list-table tfoot tr th.row-actions .row-inline-action-fab,::ng-deep .fs-list-table tfoot tr th.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table tfoot tr th.row-actions .row-menu-action,::ng-deep .fs-list-table tfoot tr .fs-list-col.row-actions .row-inline-action-icon,::ng-deep .fs-list-table tfoot tr .fs-list-col.row-actions .row-inline-action-fab,::ng-deep .fs-list-table tfoot tr .fs-list-col.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table tfoot tr .fs-list-col.row-actions .row-menu-action,::ng-deep .fs-list-table tfoot .fs-list-row td.row-actions .row-inline-action-icon,::ng-deep .fs-list-table tfoot .fs-list-row td.row-actions .row-inline-action-fab,::ng-deep .fs-list-table tfoot .fs-list-row td.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table tfoot .fs-list-row td.row-actions .row-menu-action,::ng-deep .fs-list-table tfoot .fs-list-row th.row-actions .row-inline-action-icon,::ng-deep .fs-list-table tfoot .fs-list-row th.row-actions .row-inline-action-fab,::ng-deep .fs-list-table tfoot .fs-list-row th.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table tfoot .fs-list-row th.row-actions .row-menu-action,::ng-deep .fs-list-table tfoot .fs-list-row .fs-list-col.row-actions .row-inline-action-icon,::ng-deep .fs-list-table tfoot .fs-list-row .fs-list-col.row-actions .row-inline-action-fab,::ng-deep .fs-list-table tfoot .fs-list-row .fs-list-col.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table tfoot .fs-list-row .fs-list-col.row-actions .row-menu-action,::ng-deep .fs-list-table .fs-list-head tr td.row-actions .row-inline-action-icon,::ng-deep .fs-list-table .fs-list-head tr td.row-actions .row-inline-action-fab,::ng-deep .fs-list-table .fs-list-head tr td.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table .fs-list-head tr td.row-actions .row-menu-action,::ng-deep .fs-list-table .fs-list-head tr th.row-actions .row-inline-action-icon,::ng-deep .fs-list-table .fs-list-head tr th.row-actions .row-inline-action-fab,::ng-deep .fs-list-table .fs-list-head tr th.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table .fs-list-head tr th.row-actions .row-menu-action,::ng-deep .fs-list-table .fs-list-head tr .fs-list-col.row-actions .row-inline-action-icon,::ng-deep .fs-list-table .fs-list-head tr .fs-list-col.row-actions .row-inline-action-fab,::ng-deep .fs-list-table .fs-list-head tr .fs-list-col.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table .fs-list-head tr .fs-list-col.row-actions .row-menu-action,::ng-deep .fs-list-table .fs-list-head .fs-list-row td.row-actions .row-inline-action-icon,::ng-deep .fs-list-table .fs-list-head .fs-list-row td.row-actions .row-inline-action-fab,::ng-deep .fs-list-table .fs-list-head .fs-list-row td.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table .fs-list-head .fs-list-row td.row-actions .row-menu-action,::ng-deep .fs-list-table .fs-list-head .fs-list-row th.row-actions .row-inline-action-icon,::ng-deep .fs-list-table .fs-list-head .fs-list-row th.row-actions .row-inline-action-fab,::ng-deep .fs-list-table .fs-list-head .fs-list-row th.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table .fs-list-head .fs-list-row th.row-actions .row-menu-action,::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.row-actions .row-inline-action-icon,::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.row-actions .row-inline-action-fab,::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.row-actions .row-menu-action,::ng-deep .fs-list-table .fs-list-body tr td.row-actions .row-inline-action-icon,::ng-deep .fs-list-table .fs-list-body tr td.row-actions .row-inline-action-fab,::ng-deep .fs-list-table .fs-list-body tr td.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table .fs-list-body tr td.row-actions .row-menu-action,::ng-deep .fs-list-table .fs-list-body tr th.row-actions .row-inline-action-icon,::ng-deep .fs-list-table .fs-list-body tr th.row-actions .row-inline-action-fab,::ng-deep .fs-list-table .fs-list-body tr th.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table .fs-list-body tr th.row-actions .row-menu-action,::ng-deep .fs-list-table .fs-list-body tr .fs-list-col.row-actions .row-inline-action-icon,::ng-deep .fs-list-table .fs-list-body tr .fs-list-col.row-actions .row-inline-action-fab,::ng-deep .fs-list-table .fs-list-body tr .fs-list-col.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table .fs-list-body tr .fs-list-col.row-actions .row-menu-action,::ng-deep .fs-list-table .fs-list-body .fs-list-row td.row-actions .row-inline-action-icon,::ng-deep .fs-list-table .fs-list-body .fs-list-row td.row-actions .row-inline-action-fab,::ng-deep .fs-list-table .fs-list-body .fs-list-row td.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table .fs-list-body .fs-list-row td.row-actions .row-menu-action,::ng-deep .fs-list-table .fs-list-body .fs-list-row th.row-actions .row-inline-action-icon,::ng-deep .fs-list-table .fs-list-body .fs-list-row th.row-actions .row-inline-action-fab,::ng-deep .fs-list-table .fs-list-body .fs-list-row th.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table .fs-list-body .fs-list-row th.row-actions .row-menu-action,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.row-actions .row-inline-action-icon,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.row-actions .row-inline-action-fab,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.row-actions .row-menu-action,::ng-deep .fs-list-table .fs-list-footer tr td.row-actions .row-inline-action-icon,::ng-deep .fs-list-table .fs-list-footer tr td.row-actions .row-inline-action-fab,::ng-deep .fs-list-table .fs-list-footer tr td.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table .fs-list-footer tr td.row-actions .row-menu-action,::ng-deep .fs-list-table .fs-list-footer tr th.row-actions .row-inline-action-icon,::ng-deep .fs-list-table .fs-list-footer tr th.row-actions .row-inline-action-fab,::ng-deep .fs-list-table .fs-list-footer tr th.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table .fs-list-footer tr th.row-actions .row-menu-action,::ng-deep .fs-list-table .fs-list-footer tr .fs-list-col.row-actions .row-inline-action-icon,::ng-deep .fs-list-table .fs-list-footer tr .fs-list-col.row-actions .row-inline-action-fab,::ng-deep .fs-list-table .fs-list-footer tr .fs-list-col.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table .fs-list-footer tr .fs-list-col.row-actions .row-menu-action,::ng-deep .fs-list-table .fs-list-footer .fs-list-row td.row-actions .row-inline-action-icon,::ng-deep .fs-list-table .fs-list-footer .fs-list-row td.row-actions .row-inline-action-fab,::ng-deep .fs-list-table .fs-list-footer .fs-list-row td.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table .fs-list-footer .fs-list-row td.row-actions .row-menu-action,::ng-deep .fs-list-table .fs-list-footer .fs-list-row th.row-actions .row-inline-action-icon,::ng-deep .fs-list-table .fs-list-footer .fs-list-row th.row-actions .row-inline-action-fab,::ng-deep .fs-list-table .fs-list-footer .fs-list-row th.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table .fs-list-footer .fs-list-row th.row-actions .row-menu-action,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.row-actions .row-inline-action-icon,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.row-actions .row-inline-action-fab,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.row-actions .row-menu-action{width:35px;justify-content:center;align-items:center}::ng-deep .fs-list-table thead tr td.left,::ng-deep .fs-list-table thead tr th.left,::ng-deep .fs-list-table thead tr .fs-list-col.left,::ng-deep .fs-list-table thead .fs-list-row td.left,::ng-deep .fs-list-table thead .fs-list-row th.left,::ng-deep .fs-list-table thead .fs-list-row .fs-list-col.left,::ng-deep .fs-list-table tbody tr td.left,::ng-deep .fs-list-table tbody tr th.left,::ng-deep .fs-list-table tbody tr .fs-list-col.left,::ng-deep .fs-list-table tbody .fs-list-row td.left,::ng-deep .fs-list-table tbody .fs-list-row th.left,::ng-deep .fs-list-table tbody .fs-list-row .fs-list-col.left,::ng-deep .fs-list-table tfoot tr td.left,::ng-deep .fs-list-table tfoot tr th.left,::ng-deep .fs-list-table tfoot tr .fs-list-col.left,::ng-deep .fs-list-table tfoot .fs-list-row td.left,::ng-deep .fs-list-table tfoot .fs-list-row th.left,::ng-deep .fs-list-table tfoot .fs-list-row .fs-list-col.left,::ng-deep .fs-list-table .fs-list-head tr td.left,::ng-deep .fs-list-table .fs-list-head tr th.left,::ng-deep .fs-list-table .fs-list-head tr .fs-list-col.left,::ng-deep .fs-list-table .fs-list-head .fs-list-row td.left,::ng-deep .fs-list-table .fs-list-head .fs-list-row th.left,::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.left,::ng-deep .fs-list-table .fs-list-body tr td.left,::ng-deep .fs-list-table .fs-list-body tr th.left,::ng-deep .fs-list-table .fs-list-body tr .fs-list-col.left,::ng-deep .fs-list-table .fs-list-body .fs-list-row td.left,::ng-deep .fs-list-table .fs-list-body .fs-list-row th.left,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.left,::ng-deep .fs-list-table .fs-list-footer tr td.left,::ng-deep .fs-list-table .fs-list-footer tr th.left,::ng-deep .fs-list-table .fs-list-footer tr .fs-list-col.left,::ng-deep .fs-list-table .fs-list-footer .fs-list-row td.left,::ng-deep .fs-list-table .fs-list-footer .fs-list-row th.left,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.left{text-align:left}::ng-deep .fs-list-table thead tr td.center,::ng-deep .fs-list-table thead tr th.center,::ng-deep .fs-list-table thead tr .fs-list-col.center,::ng-deep .fs-list-table thead .fs-list-row td.center,::ng-deep .fs-list-table thead .fs-list-row th.center,::ng-deep .fs-list-table thead .fs-list-row .fs-list-col.center,::ng-deep .fs-list-table tbody tr td.center,::ng-deep .fs-list-table tbody tr th.center,::ng-deep .fs-list-table tbody tr .fs-list-col.center,::ng-deep .fs-list-table tbody .fs-list-row td.center,::ng-deep .fs-list-table tbody .fs-list-row th.center,::ng-deep .fs-list-table tbody .fs-list-row .fs-list-col.center,::ng-deep .fs-list-table tfoot tr td.center,::ng-deep .fs-list-table tfoot tr th.center,::ng-deep .fs-list-table tfoot tr .fs-list-col.center,::ng-deep .fs-list-table tfoot .fs-list-row td.center,::ng-deep .fs-list-table tfoot .fs-list-row th.center,::ng-deep .fs-list-table tfoot .fs-list-row .fs-list-col.center,::ng-deep .fs-list-table .fs-list-head tr td.center,::ng-deep .fs-list-table .fs-list-head tr th.center,::ng-deep .fs-list-table .fs-list-head tr .fs-list-col.center,::ng-deep .fs-list-table .fs-list-head .fs-list-row td.center,::ng-deep .fs-list-table .fs-list-head .fs-list-row th.center,::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.center,::ng-deep .fs-list-table .fs-list-body tr td.center,::ng-deep .fs-list-table .fs-list-body tr th.center,::ng-deep .fs-list-table .fs-list-body tr .fs-list-col.center,::ng-deep .fs-list-table .fs-list-body .fs-list-row td.center,::ng-deep .fs-list-table .fs-list-body .fs-list-row th.center,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.center,::ng-deep .fs-list-table .fs-list-footer tr td.center,::ng-deep .fs-list-table .fs-list-footer tr th.center,::ng-deep .fs-list-table .fs-list-footer tr .fs-list-col.center,::ng-deep .fs-list-table .fs-list-footer .fs-list-row td.center,::ng-deep .fs-list-table .fs-list-footer .fs-list-row th.center,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.center{text-align:center}::ng-deep .fs-list-table thead tr td.right,::ng-deep .fs-list-table thead tr th.right,::ng-deep .fs-list-table thead tr .fs-list-col.right,::ng-deep .fs-list-table thead .fs-list-row td.right,::ng-deep .fs-list-table thead .fs-list-row th.right,::ng-deep .fs-list-table thead .fs-list-row .fs-list-col.right,::ng-deep .fs-list-table tbody tr td.right,::ng-deep .fs-list-table tbody tr th.right,::ng-deep .fs-list-table tbody tr .fs-list-col.right,::ng-deep .fs-list-table tbody .fs-list-row td.right,::ng-deep .fs-list-table tbody .fs-list-row th.right,::ng-deep .fs-list-table tbody .fs-list-row .fs-list-col.right,::ng-deep .fs-list-table tfoot tr td.right,::ng-deep .fs-list-table tfoot tr th.right,::ng-deep .fs-list-table tfoot tr .fs-list-col.right,::ng-deep .fs-list-table tfoot .fs-list-row td.right,::ng-deep .fs-list-table tfoot .fs-list-row th.right,::ng-deep .fs-list-table tfoot .fs-list-row .fs-list-col.right,::ng-deep .fs-list-table .fs-list-head tr td.right,::ng-deep .fs-list-table .fs-list-head tr th.right,::ng-deep .fs-list-table .fs-list-head tr .fs-list-col.right,::ng-deep .fs-list-table .fs-list-head .fs-list-row td.right,::ng-deep .fs-list-table .fs-list-head .fs-list-row th.right,::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.right,::ng-deep .fs-list-table .fs-list-body tr td.right,::ng-deep .fs-list-table .fs-list-body tr th.right,::ng-deep .fs-list-table .fs-list-body tr .fs-list-col.right,::ng-deep .fs-list-table .fs-list-body .fs-list-row td.right,::ng-deep .fs-list-table .fs-list-body .fs-list-row th.right,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.right,::ng-deep .fs-list-table .fs-list-footer tr td.right,::ng-deep .fs-list-table .fs-list-footer tr th.right,::ng-deep .fs-list-table .fs-list-footer tr .fs-list-col.right,::ng-deep .fs-list-table .fs-list-footer .fs-list-row td.right,::ng-deep .fs-list-table .fs-list-footer .fs-list-row th.right,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.right{text-align:right}::ng-deep .fs-list-table thead tr.draggable,::ng-deep .fs-list-table thead .fs-list-row.draggable,::ng-deep .fs-list-table tbody tr.draggable,::ng-deep .fs-list-table tbody .fs-list-row.draggable,::ng-deep .fs-list-table tfoot tr.draggable,::ng-deep .fs-list-table tfoot .fs-list-row.draggable,::ng-deep .fs-list-table .fs-list-head tr.draggable,::ng-deep .fs-list-table .fs-list-head .fs-list-row.draggable,::ng-deep .fs-list-table .fs-list-body tr.draggable,::ng-deep .fs-list-table .fs-list-body .fs-list-row.draggable,::ng-deep .fs-list-table .fs-list-footer tr.draggable,::ng-deep .fs-list-table .fs-list-footer .fs-list-row.draggable{position:fixed;z-index:9999;box-shadow:2px 2px 2px #9e9e9ea6;border-radius:5px;background-color:#f6f6f6}::ng-deep .fs-list-table thead tr.draggable td,::ng-deep .fs-list-table thead tr.draggable .fs-list-col,::ng-deep .fs-list-table thead .fs-list-row.draggable td,::ng-deep .fs-list-table thead .fs-list-row.draggable .fs-list-col,::ng-deep .fs-list-table tbody tr.draggable td,::ng-deep .fs-list-table tbody tr.draggable .fs-list-col,::ng-deep .fs-list-table tbody .fs-list-row.draggable td,::ng-deep .fs-list-table tbody .fs-list-row.draggable .fs-list-col,::ng-deep .fs-list-table tfoot tr.draggable td,::ng-deep .fs-list-table tfoot tr.draggable .fs-list-col,::ng-deep .fs-list-table tfoot .fs-list-row.draggable td,::ng-deep .fs-list-table tfoot .fs-list-row.draggable .fs-list-col,::ng-deep .fs-list-table .fs-list-head tr.draggable td,::ng-deep .fs-list-table .fs-list-head tr.draggable .fs-list-col,::ng-deep .fs-list-table .fs-list-head .fs-list-row.draggable td,::ng-deep .fs-list-table .fs-list-head .fs-list-row.draggable .fs-list-col,::ng-deep .fs-list-table .fs-list-body tr.draggable td,::ng-deep .fs-list-table .fs-list-body tr.draggable .fs-list-col,::ng-deep .fs-list-table .fs-list-body .fs-list-row.draggable td,::ng-deep .fs-list-table .fs-list-body .fs-list-row.draggable .fs-list-col,::ng-deep .fs-list-table .fs-list-footer tr.draggable td,::ng-deep .fs-list-table .fs-list-footer tr.draggable .fs-list-col,::ng-deep .fs-list-table .fs-list-footer .fs-list-row.draggable td,::ng-deep .fs-list-table .fs-list-footer .fs-list-row.draggable .fs-list-col{border:none}::ng-deep .fs-list-table .fs-list-container.has-dragging thead th{border-bottom:2px solid #ddd}::ng-deep .fs-list-table .fs-list-container.has-dragging tbody tr:nth-child(2) td{border-top:none}::ng-deep .fs-list-table tfoot td{padding:8px}::ng-deep .reorder-in-progress{-webkit-user-select:none;user-select:none}::ng-deep .draggable-elem td{opacity:.2}::ng-deep .hidden-mobile-menu-action{display:none!important}::ng-deep .hidden-mobile{display:none!important}@media only screen and (max-width: 600px){::ng-deep .fs-list-filter .inline-actions{top:initial!important;position:initial!important}::ng-deep .fs-list-filter .inline-actions .action-filter{margin-bottom:0!important}::ng-deep .fs-list-header .filter-input-field .mat-form-field-wrapper{padding:0!important}::ng-deep .fs-list-header.has-filters{flex-flow:row wrap}}@media only screen and (max-width: 768px){::ng-deep .show-mobile{display:inline-block!important}::ng-deep .fs-list-actions .action-button{display:none}::ng-deep .row-inline-action.mobile-hide{display:none}::ng-deep .hidden-mobile-menu-action{display:block!important}}\n"], components: [{ type: i10.FilterComponent, selector: "fs-filter", inputs: ["config", "filter", "showSortBy", "showFilterInput"], outputs: ["closed", "opened", "ready"] }, { type: i11.FsStatusComponent, selector: "fs-list-status", inputs: ["paging", "sorting", "rows", "scrollable", "firstLoad"] }, { type: i12.FsHeadComponent, selector: "[fs-list-head]", inputs: ["sorting", "columns", "hasRowActions", "selection", "activeFiltersCount", "reorderEnabled", "reorderPosition", "reorderStrategy"] }, { type: i13.FsBodyComponent, selector: "[fs-list-body]", inputs: ["rows", "columns", "hasFooter", "rowActionsRaw", "groupActionsRaw", "rowEvents", "rowClass", "hasRowActions", "selection", "restoreMode", "rowRemoved", "activeFiltersCount", "reorderEnabled", "reorderPosition", "reorderStrategy", "reorderMultiple"] }, { type: i14.FsFooterComponent, selector: "[fs-list-footer]", inputs: ["hasRowActions", "columns", "selection", "activeFiltersCount", "reorderEnabled", "reorderPosition", "reorderStrategy"] }, { type: i15.FsListLoaderComponent, selector: "fs-list-loader", inputs: ["columns", "loaderLines"] }, { type: i16.FsPaginationComponent, selector: "fs-list-pagination", inputs: ["pagination", "rows"] }], directives: [{ type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.FilterStatusBarDirective, selector: "[fsFilterStatusBar]" }, { type: i17.FsListContentInitDirective, selector: "[fsListContentInit]", inputs: ["fsListContentInit"] }, { type: i18.FsListDraggableListDirective, selector: "[fsListDraggableList]", inputs: ["rows"] }, { type: i19.FsListFooterDirective, selector: "[fs-list-footer]", inputs: ["colspan", "align", "class"] }], pipes: { "async": i9.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
329
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsListComponent, decorators: [{
330
- type: Component,
331
- args: [{
332
- selector: 'fs-list',
333
- templateUrl: 'list.component.html',
334
- styleUrls: ['./list.component.scss'],
335
- changeDetection: ChangeDetectionStrategy.OnPush,
336
- providers: [
337
- GroupExpandNotifierService,
338
- PersistanceController,
339
- ReorderController,
340
- ]
341
- }]
342
- }], ctorParameters: function () { return [{ type: i1.ReorderController }, { type: undefined, decorators: [{
343
- type: Optional
344
- }, {
345
- type: Inject,
346
- args: [FS_LIST_DEFAULT_CONFIG]
347
- }] }, { type: i2.FsScrollService, decorators: [{
348
- type: Optional
349
- }] }, { type: i3.MatDialogRef, decorators: [{
350
- type: Optional
351
- }] }, { type: i4.DrawerRef, decorators: [{
352
- type: Optional
353
- }] }, { type: i0.ElementRef }, { type: i5.SelectionDialog }, { type: i3.MatDialog }, { type: i0.ChangeDetectorRef }, { type: i6.GroupExpandNotifierService }, { type: i7.Router }, { type: i7.ActivatedRoute }, { type: i8.PersistanceController }, { type: i9.Location }]; }, propDecorators: { classFsList: [{
354
- type: HostBinding,
355
- args: ['class.fs-list']
356
- }], config: [{
357
- type: Input,
358
- args: ['config']
359
- }], loaderLines: [{
360
- type: Input
361
- }], filtersReady: [{
362
- type: Output
363
- }], filterReference: [{
364
- type: ViewChild,
365
- args: [FilterComponent]
366
- }], columnTemplates: [{
367
- type: ContentChildren,
368
- args: [FsListColumnDirective]
369
- }], _emptyStateTemplate: [{
370
- type: ContentChild,
371
- args: [FsListEmptyStateDirective, { read: TemplateRef }]
372
- }], headingTemplate: [{
373
- type: ContentChild,
374
- args: [FsListHeadingDirective, { read: TemplateRef }]
375
- }], headingContainerTemplate: [{
376
- type: ContentChild,
377
- args: [FsListHeadingContainerDirective, { read: TemplateRef }]
378
- }], subheadingTemplate: [{
379
- type: ContentChild,
380
- args: [FsListSubheadingDirective, { read: TemplateRef }]
381
- }] } });
382
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvbGlzdC9saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9saXN0L2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUFFLGlCQUFpQixFQUMxQyxTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxTQUFTLEVBQ1QsU0FBUyxFQUNULFdBQVcsRUFDWCxRQUFRLEVBQ1IsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFakQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBUWpFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxzQkFBc0IsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjdEgsTUFBTSxPQUFPLGVBQWU7SUFvRTFCLFlBQ1MsaUJBQW9DLEVBQ1MsZUFBZSxFQUMvQyxRQUF5QixFQUN6QixVQUE2QixFQUM3QixVQUEwQixFQUN0QyxHQUFlLEVBQ2YsZUFBZ0MsRUFDaEMsTUFBaUIsRUFDakIsS0FBd0IsRUFDeEIsb0JBQWdELEVBQ2hELE9BQWUsRUFDZixNQUFzQixFQUN0QixZQUFtQyxFQUNuQyxTQUFtQjtRQWJwQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ1Msb0JBQWUsR0FBZixlQUFlLENBQUE7UUFDL0MsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFDN0IsZUFBVSxHQUFWLFVBQVUsQ0FBZ0I7UUFDdEMsUUFBRyxHQUFILEdBQUcsQ0FBWTtRQUNmLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBNEI7UUFDaEQsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQ3RCLGlCQUFZLEdBQVosWUFBWSxDQUF1QjtRQUNuQyxjQUFTLEdBQVQsU0FBUyxDQUFVO1FBaEZDLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBUTFDLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBR2hCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUd4QyxtQkFBYyxHQUFHLElBQUksQ0FBQztRQUc3Qix1REFBdUQ7UUFDaEQsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDaEMsY0FBUyxHQUFHLElBQUksQ0FBQztRQUtoQix1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDM0IsY0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRW5ELGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBc0Q5QixDQUFDO0lBL0VKLElBQ1csTUFBTSxDQUFDLE1BQW9CO1FBQ3BDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDOUIsQ0FBQztJQXdCRCxJQUNZLGVBQWUsQ0FBQyxTQUFTO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUxQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQ1ksZUFBZSxDQUFDLG9CQUFzRDtRQUNoRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUM7UUFDakQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQzVEO0lBQ0gsQ0FBQztJQUVELElBQ1ksbUJBQW1CLENBQUMsUUFBMEI7UUFDeEQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxRQUFRLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBNEJEOztPQUVHO0lBQ0gsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFXLGdCQUFnQjtRQUN6QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDdEQsQ0FBQztJQUVELElBQVcsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUNyQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDekQsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0RyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3BGLENBQUM7SUFFRCxJQUFXLGdCQUFnQjtRQUN6QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87ZUFDMUIsQ0FBQyxJQUFJLENBQUMsU0FBUztlQUNmLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO2VBQ3JCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUI7ZUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQztlQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFXLFlBQVksQ0FBQyxLQUFjO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUNoQyxDQUFDO0lBRU0sa0JBQWtCO1FBQ3ZCLElBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxtQ0FBbUMsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDckI7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTSxTQUFTO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU0sTUFBTTtRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVNLE9BQU8sQ0FBQyxPQUF5QjtRQUN0QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTSxPQUFPLENBQUMsT0FBd0I7UUFDckMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0sVUFBVSxDQUNmLElBQTZDLEVBQzdDLE9BQWtDO1FBRWxDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRU0sVUFBVSxDQUNmLEdBQXNCLEVBQ3RCLE9BQWtDO1FBRWxDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRU0scUJBQXFCLENBQUMsTUFBNkI7UUFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTSxxQkFBcUI7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVNLGVBQWU7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVNLGdCQUFnQjtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFTSxVQUFVLENBQUMsSUFBd0U7UUFDeEYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVNLFVBQVUsQ0FBQyxPQUFlO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUM5QixDQUFDO0lBRU0sYUFBYSxDQUFDLFVBQWtCO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUNwQyxDQUFDO0lBRU0sWUFBWTtRQUNqQixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVNLGFBQWE7UUFDbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFTSxVQUFVLENBQUMsT0FBdUI7UUFDdkMsSUFBSSxPQUFPLEVBQUU7WUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNJLGdCQUFnQixDQUFDLElBQVksRUFBRSxJQUFhO1FBQ2pELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFFLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFFLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUIsQ0FBQyxPQUEwQztRQUNqRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQy9DLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQztZQUNoRCxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGVBQWUsQ0FBQyxNQUFvQjtRQUMxQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3JCO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWU7WUFDdEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUUvRSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDOUM7UUFFRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWhELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQ2xCLElBQUksQ0FBQyxHQUFHLEVBQ1IsVUFBVSxFQUNWLElBQUksQ0FBQyxRQUFRLEVBQ2IsSUFBSSxDQUFDLGVBQWUsRUFDcEIsSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxZQUFZLEVBQ2pCLElBQUksQ0FBQyxTQUFTLENBQ2YsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUNuQyxNQUFNLENBQUMsT0FBTyxFQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQ3BCLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ2pFO1FBQ0QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7T0FHRztJQUNLLHNCQUFzQixDQUFDLE9BQXVCO1FBQ3BELE1BQU0sZUFBZSxHQUFHLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVwRSxJQUFJLGVBQWUsRUFBRTtZQUNuQixNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDO1lBRTVDLGVBQWUsQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFO2dCQUMzQixJQUFJLGFBQWEsRUFBRTtvQkFDakIsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNyQjtnQkFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRTtvQkFDN0MsSUFBSSxFQUFFO3dCQUNKLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0I7d0JBQzNDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRO3FCQUNyQztpQkFDRixDQUFDO3FCQUNDLFdBQVcsRUFBRTtxQkFDYixJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQy9CLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQ3pCO3FCQUNBLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO29CQUNsQixJQUFJLElBQUksRUFBRTt3QkFDUixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFFaEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztxQkFDM0I7Z0JBQ0gsQ0FBQyxDQUFDLENBQUE7WUFDTixDQUFDLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87YUFDZCxlQUFlO2FBQ2YsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUMvQixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUN6QjthQUNBLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixJQUFJLENBQUMsVUFBVTthQUNaLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFTyxtQ0FBbUM7UUFDekMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUU7WUFDdEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLG1CQUFtQjtpQkFDMUMsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQ3pCO2lCQUNBLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0MsQ0FBQyxDQUFDLENBQUE7U0FDTDtJQUNILENBQUM7SUFFTyxjQUFjO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTthQUNmLElBQUksQ0FDSCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLEVBQ2xDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFDL0IsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDekI7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxRQUFhLEVBQUUsUUFBYTtRQUN6RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDM0IsT0FBTyxRQUFRLENBQUM7U0FDakI7SUFDSCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsYUFBK0I7UUFDekQsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7OzZHQWhaVSxlQUFlLG1EQXNFSixzQkFBc0I7aUdBdEVqQyxlQUFlLHNNQU5mO1FBQ1QsMEJBQTBCO1FBQzFCLHFCQUFxQjtRQUNyQixpQkFBaUI7S0FDbEIsMkVBc0RhLHlCQUF5QiwyQkFBVSxXQUFXLCtEQU85QyxzQkFBc0IsMkJBQVUsV0FBVyx3RUFHM0MsK0JBQStCLDJCQUFVLFdBQVcsa0VBR3BELHlCQUF5QiwyQkFBVSxXQUFXLGtEQXJCM0MscUJBQXFCLDhFQWIzQixlQUFlLGdEQy9GNUIsaytNQXFLQTs0RkRyR2EsZUFBZTtrQkFYM0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsU0FBUztvQkFDbkIsV0FBVyxFQUFFLHFCQUFxQjtvQkFDbEMsU0FBUyxFQUFFLENBQUMsdUJBQXVCLENBQUM7b0JBQ3BDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxTQUFTLEVBQUU7d0JBQ1QsMEJBQTBCO3dCQUMxQixxQkFBcUI7d0JBQ3JCLGlCQUFpQjtxQkFDbEI7aUJBQ0Y7OzBCQXVFSSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLHNCQUFzQjs7MEJBQ3pDLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLFFBQVE7aVRBdkVtQixXQUFXO3NCQUF4QyxXQUFXO3VCQUFDLGVBQWU7Z0JBR2pCLE1BQU07c0JBRGhCLEtBQUs7dUJBQUMsUUFBUTtnQkFNUixXQUFXO3NCQURqQixLQUFLO2dCQUlDLFlBQVk7c0JBRGxCLE1BQU07Z0JBb0JLLGVBQWU7c0JBRDFCLFNBQVM7dUJBQUMsZUFBZTtnQkFjZCxlQUFlO3NCQUQxQixlQUFlO3VCQUFDLHFCQUFxQjtnQkFTMUIsbUJBQW1CO3NCQUQ5QixZQUFZO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFRdkQsZUFBZTtzQkFEckIsWUFBWTt1QkFBQyxzQkFBc0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBSXBELHdCQUF3QjtzQkFEOUIsWUFBWTt1QkFBQywrQkFBK0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBSTdELGtCQUFrQjtzQkFEeEIsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgSG9zdEJpbmRpbmcsXG4gIE9wdGlvbmFsLFxuICBDb250ZW50Q2hpbGQsXG4gIFRlbXBsYXRlUmVmLFxuICBPdXRwdXQsXG4gIEFmdGVyQ29udGVudEluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgc2tpcCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGc1Njcm9sbFNlcnZpY2UgfSBmcm9tICdAZmlyZXN0aXRjaC9zY3JvbGwnO1xuaW1wb3J0IHsgRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnQGZpcmVzdGl0Y2gvZmlsdGVyJztcbmltcG9ydCB7IFNlbGVjdGlvbkRpYWxvZyB9IGZyb20gJ0BmaXJlc3RpdGNoL3NlbGVjdGlvbic7XG5pbXBvcnQgeyBnZXROb3JtYWxpemVkUGF0aCB9IGZyb20gJ0BmaXJlc3RpdGNoL2NvbW1vbic7XG5pbXBvcnQgeyBEcmF3ZXJSZWYgfSBmcm9tICdAZmlyZXN0aXRjaC9kcmF3ZXInO1xuXG5pbXBvcnQgeyBjbG9uZURlZXAsIG1lcmdlV2l0aCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmltcG9ydCB7IExpc3QgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2xpc3QtY29udHJvbGxlcic7XG5pbXBvcnQgeyBSZW9yZGVyQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvcmVvcmRlci1jb250cm9sbGVyJztcblxuaW1wb3J0IHsgRnNMaXN0Q29sdW1uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jb2x1bW4vY29sdW1uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGc0xpc3RFbXB0eVN0YXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRlNfTElTVF9ERUZBVUxUX0NPTkZJRyB9IGZyb20gJy4uLy4uL2ZzLWxpc3QucHJvdmlkZXJzJztcbmltcG9ydCB7XG4gIEZzTGlzdEFic3RyYWN0Um93LFxuICBGc0xpc3RBY3Rpb24sXG4gIEZzTGlzdENvbmZpZywgRnNMaXN0UGVyc2l0YW5jZSwgRnNMaXN0U2VsZWN0aW9uQ29uZmlnLFxuICBGc0xpc3RUcmFja0J5Rm4sXG4gIEZzTGlzdFRyYWNrQnlUYXJnZXRSb3dGblxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEN1c3RvbWl6ZUNvbHNEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9jdXN0b21pemUtY29scy9jdXN0b21pemUtY29scy5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3JvdXBFeHBhbmROb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ncm91cC1leHBhbmQtbm90aWZpZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQZXJzaXN0YW5jZUNvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3BlcnNpc3RhbmNlLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgRnNMaXN0SGVhZGluZ0NvbnRhaW5lckRpcmVjdGl2ZSwgRnNMaXN0SGVhZGluZ0RpcmVjdGl2ZSwgRnNMaXN0U3ViaGVhZGluZ0RpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZzLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJ2xpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICBHcm91cEV4cGFuZE5vdGlmaWVyU2VydmljZSxcbiAgICBQZXJzaXN0YW5jZUNvbnRyb2xsZXIsXG4gICAgUmVvcmRlckNvbnRyb2xsZXIsXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRnNMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudEluaXQge1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZnMtbGlzdCcpIGNsYXNzRnNMaXN0ID0gdHJ1ZTtcblxuICBASW5wdXQoJ2NvbmZpZycpXG4gIHB1YmxpYyBzZXQgY29uZmlnKGNvbmZpZzogRnNMaXN0Q29uZmlnKSB7XG4gICAgdGhpcy5faW5pdFdpdGhDb25maWcoY29uZmlnKVxuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIGxvYWRlckxpbmVzID0gMztcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGZpbHRlcnNSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBwdWJsaWMgbGlzdDogTGlzdDtcbiAgcHVibGljIGtleXdvcmRWaXNpYmxlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBsaXN0Q29sdW1uRGlyZWN0aXZlczogUXVlcnlMaXN0PEZzTGlzdENvbHVtbkRpcmVjdGl2ZT47XG5cbiAgLy8gRXZlbnQgd2lsbCBmaXJlZCBpZiBhY3Rpb24gcmVtb3ZlOiB0cnVlIHdpbGwgY2xpY2tlZFxuICBwdWJsaWMgcm93UmVtb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIGZpcnN0TG9hZCA9IHRydWU7XG5cbiAgLy8gcHVibGljIHJlYWRvbmx5IFJlb3JkZXJTdHJhdGVneSA9IFJlb3JkZXJTdHJhdGVneTtcblxuICBwcml2YXRlIF9maWx0ZXJSZWY6IEZpbHRlckNvbXBvbmVudDtcbiAgcHJpdmF0ZSBfZmlsdGVyUGFyYW1zUmVhZHkgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaW5EaWFsb2cgPSAhIXRoaXMuX2RpYWxvZ1JlZiB8fCAhIXRoaXMuX2RyYXdlclJlZjtcblxuICBwcml2YXRlIF9kZXN0cm95ID0gbmV3IFN1YmplY3QoKTtcblxuICBAVmlld0NoaWxkKEZpbHRlckNvbXBvbmVudClcbiAgcHJpdmF0ZSBzZXQgZmlsdGVyUmVmZXJlbmNlKGNvbXBvbmVudCkge1xuICAgIHRoaXMuX2ZpbHRlclJlZiA9IGNvbXBvbmVudDtcbiAgICB0aGlzLmxpc3QuYWN0aW9ucy5zZXRGaWx0ZXJSZWYoY29tcG9uZW50KTtcblxuICAgIHRoaXMuX2VtaXRGaWx0ZXJzUmVhZHlFdmVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBjb2x1bW5zIHRvIGNvbmZpZ1xuICAgKiBDcmVhdGUgQ29sdW1uIE1vZGVsIGluc3RhbmNlc1xuICAgKlxuICAgKi9cbiAgQENvbnRlbnRDaGlsZHJlbihGc0xpc3RDb2x1bW5EaXJlY3RpdmUpXG4gIHByaXZhdGUgc2V0IGNvbHVtblRlbXBsYXRlcyhsaXN0Q29sdW1uRGlyZWN0aXZlczogUXVlcnlMaXN0PEZzTGlzdENvbHVtbkRpcmVjdGl2ZT4pIHtcbiAgICB0aGlzLmxpc3RDb2x1bW5EaXJlY3RpdmVzID0gbGlzdENvbHVtbkRpcmVjdGl2ZXM7XG4gICAgaWYgKHRoaXMubGlzdCkge1xuICAgICAgdGhpcy5saXN0LnRyYW5mb3JtVGVtcGxhdGVzVG9Db2x1bW5zKGxpc3RDb2x1bW5EaXJlY3RpdmVzKTtcbiAgICB9XG4gIH1cblxuICBAQ29udGVudENoaWxkKEZzTGlzdEVtcHR5U3RhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcHJpdmF0ZSBzZXQgX2VtcHR5U3RhdGVUZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIGlmICh0aGlzLmxpc3QpIHtcbiAgICAgIHRoaXMubGlzdC5lbXB0eVN0YXRlVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICB9XG4gIH1cblxuICBAQ29udGVudENoaWxkKEZzTGlzdEhlYWRpbmdEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcHVibGljIGhlYWRpbmdUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudENoaWxkKEZzTGlzdEhlYWRpbmdDb250YWluZXJEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcHVibGljIGhlYWRpbmdDb250YWluZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudENoaWxkKEZzTGlzdFN1YmhlYWRpbmdEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcHVibGljIHN1YmhlYWRpbmdUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVvcmRlckNvbnRyb2xsZXI6IFJlb3JkZXJDb250cm9sbGVyLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRlNfTElTVF9ERUZBVUxUX0NPTkZJRykgcHJpdmF0ZSBfZGVmYXVsdE9wdGlvbnMsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmc1Njcm9sbDogRnNTY3JvbGxTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2RpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPGFueT4sXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZHJhd2VyUmVmOiBEcmF3ZXJSZWY8YW55PixcbiAgICBwcml2YXRlIF9lbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHNlbGVjdGlvbkRpYWxvZzogU2VsZWN0aW9uRGlhbG9nLFxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfZ3JvdXBFeHBhbmROb3RpZmllcjogR3JvdXBFeHBhbmROb3RpZmllclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBfcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgX3BlcnNpc3RhbmNlOiBQZXJzaXN0YW5jZUNvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBfbG9jYXRpb246IExvY2F0aW9uLFxuICApIHt9XG5cbiAgLyoqXG4gICAqIFJldHVybiByZWZlcmVuY2UgZm9yIGZpbHRlclxuICAgKi9cbiAgcHVibGljIGdldCBmaWx0ZXJSZWYoKTogRmlsdGVyQ29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyUmVmO1xuICB9XG5cbiAgcHVibGljIGdldCBncm91cEVuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5kYXRhQ29udHJvbGxlci5ncm91cEVuYWJsZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc0ZpbHRlcktleXdvcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5maWx0ZXJJbnB1dCAmJiB0aGlzLmtleXdvcmRWaXNpYmxlO1xuICB9XG5cbiAgcHVibGljIGdldCBoYXNTdGF0dXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5zdGF0dXMgJiZcbiAgICAgICh0aGlzLmxpc3Quc29ydGluZy5pc0RlZmluZWQgfHwgdGhpcy5saXN0LnBhZ2luZy5lbmFibGVkKSAmJlxuICAgICAgKCF0aGlzLnJlb3JkZXJDb250cm9sbGVyLmVuYWJsZWQgfHwgKHRoaXMucmVvcmRlckNvbnRyb2xsZXIuZW5hYmxlZCAmJiB0aGlzLnJlb3JkZXJDb250cm9sbGVyLnN0YXR1cykpICYmXG4gICAgICAoKHRoaXMubGlzdC5zY3JvbGxhYmxlICYmIHRoaXMubGlzdC5zY3JvbGxhYmxlLnN0YXR1cykgfHwgIXRoaXMubGlzdC5zY3JvbGxhYmxlKVxuICB9XG5cbiAgcHVibGljIGdldCBwYWdpbmF0b3JWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxpc3QucGFnaW5nLmVuYWJsZWRcbiAgICAgICYmICF0aGlzLmZpcnN0TG9hZFxuICAgICAgJiYgIXRoaXMubGlzdC5zY3JvbGxhYmxlXG4gICAgICAmJiAhdGhpcy5saXN0LmVtcHR5U3RhdGVFbmFibGVkXG4gICAgICAmJiB0aGlzLmxpc3QuZGF0YUNvbnRyb2xsZXIudmlzaWJsZVJvd3NDb3VudCA+IDBcbiAgICAgICYmIHRoaXMubGlzdC5wYWdpbmcucGFnZXMgPiAxO1xuICB9XG5cbiAgcHVibGljIHNldCBncm91cEVuYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmxpc3QuZ3JvdXBFbmFibGVkKHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmlsdGVyc1F1ZXJ5KCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5saXN0LmZpbHRlcnNRdWVyeTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgaWYodGhpcy5saXN0LmFmdGVySW5pdCkge1xuICAgICAgdGhpcy5saXN0LmFmdGVySW5pdCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fc3Vic2NyaWJlVG9SZW1vdmVSb3coKTtcbiAgICB0aGlzLl9zdWJzY3JpYmVUb0dyb3VwRXhwYW5kU3RhdHVzQ2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMubGlzdCkge1xuICAgICAgdGhpcy5saXN0LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgbmV4dFBhZ2UoKSB7XG4gICAgdGhpcy5saXN0LnBhZ2luZy5nb05leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBwcmV2UGFnZSgpIHtcbiAgICB0aGlzLmxpc3QucGFnaW5nLmdvUHJldigpO1xuICB9XG5cbiAgcHVibGljIGZpcnN0UGFnZSgpIHtcbiAgICB0aGlzLmxpc3QucGFnaW5nLmdvRmlyc3QoKTtcbiAgfVxuXG4gIHB1YmxpYyBsYXN0UGFnZSgpIHtcbiAgICB0aGlzLmxpc3QucGFnaW5nLmdvTGFzdCgpO1xuICB9XG5cbiAgcHVibGljIHJlbG9hZCgpIHtcbiAgICB0aGlzLmxpc3QucmVsb2FkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGF0YSh0cmFja0J5PzogRnNMaXN0VHJhY2tCeUZuKSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5nZXREYXRhKHRyYWNrQnkpO1xuICB9XG5cbiAgcHVibGljIGhhc0RhdGEodHJhY2tCeTogRnNMaXN0VHJhY2tCeUZuKSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5oYXNEYXRhKHRyYWNrQnkpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZURhdGEoXG4gICAgcm93czogRnNMaXN0QWJzdHJhY3RSb3cgfCBGc0xpc3RBYnN0cmFjdFJvd1tdLFxuICAgIHRyYWNrQnk/OiBGc0xpc3RUcmFja0J5VGFyZ2V0Um93Rm5cbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5kYXRhQ29udHJvbGxlci51cGRhdGVEYXRhKHJvd3MsIHRyYWNrQnkpO1xuICB9XG5cbiAgcHVibGljIHJlcGxhY2VSb3coXG4gICAgcm93OiBGc0xpc3RBYnN0cmFjdFJvdyxcbiAgICB0cmFja0J5PzogRnNMaXN0VHJhY2tCeVRhcmdldFJvd0ZuXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxpc3QuZGF0YUNvbnRyb2xsZXIucmVwbGFjZURhdGEocm93LCB0cmFja0J5KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVTZWxlY3Rpb25Db25maWcoY29uZmlnOiBGc0xpc3RTZWxlY3Rpb25Db25maWcpIHtcbiAgICB0aGlzLmxpc3Quc2VsZWN0aW9uLnVwZGF0ZUNvbmZpZyhjb25maWcpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0U2VsZWN0aW9uQWN0aW9ucygpIHtcbiAgICB0aGlzLmxpc3Quc2VsZWN0aW9uLnJlc2V0QWN0aW9ucygpO1xuICB9XG5cbiAgcHVibGljIGVuYWJsZVNlbGVjdGlvbigpIHtcbiAgICB0aGlzLmxpc3Quc2VsZWN0aW9uLmVuYWJsZVNlbGVjdGlvbigpO1xuICB9XG5cbiAgcHVibGljIGRpc2FibGVTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy5saXN0LnNlbGVjdGlvbi5kaXNhYmxlU2VsZWN0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlRGF0YShkYXRhOiBGc0xpc3RBYnN0cmFjdFJvdyB8IEZzTGlzdEFic3RyYWN0Um93W10gfCBGc0xpc3RUcmFja0J5VGFyZ2V0Um93Rm4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5saXN0LmRhdGFDb250cm9sbGVyLnJlbW92ZURhdGEoZGF0YSk7XG4gIH1cblxuICBwdWJsaWMgc2V0SGVhZGluZyhoZWFkaW5nOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxpc3QuaGVhZGluZyA9IGhlYWRpbmc7XG4gIH1cblxuICBwdWJsaWMgc2V0U3ViaGVhZGluZyhzdWJoZWFkaW5nOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxpc3Quc3ViaGVhZGluZyA9IHN1YmhlYWRpbmc7XG4gIH1cblxuICBwdWJsaWMgcmVvcmRlclN0YXJ0KCkge1xuICAgIHRoaXMucmVvcmRlckNvbnRyb2xsZXIuZW5hYmxlUmVvcmRlcigpO1xuICB9XG5cbiAgcHVibGljIHJlb3JkZXJGaW5pc2goKSB7XG4gICAgdGhpcy5yZW9yZGVyQ29udHJvbGxlci5kaXNhYmxlUmVvcmRlcigpO1xuICB9XG5cbiAgcHVibGljIHNldEFjdGlvbnMoYWN0aW9uczogRnNMaXN0QWN0aW9uW10pIHtcbiAgICBpZiAoYWN0aW9ucykge1xuICAgICAgdGhpcy5saXN0LmFjdGlvbnMuY2xlYXJBY3Rpb25zKCk7XG4gICAgICB0aGlzLmxpc3QuYWN0aW9ucy5zZXRBY3Rpb25zKGFjdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmaWx0ZXJSZWFkeSgpIHtcbiAgICB0aGlzLmxpc3QuZmlsdGVyc1JlYWR5JC5uZXh0KCk7XG4gICAgdGhpcy5fZmlsdGVyUGFyYW1zUmVhZHkgPSB0cnVlO1xuICAgIHRoaXMuX2VtaXRGaWx0ZXJzUmVhZHlFdmVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB2aXNpYmlsaXR5IGZvciBzcGVjaWZpYyBjb2x1bW5cbiAgICovXG4gIHB1YmxpYyBjb2x1bW5WaXNpYmlsaXR5KG5hbWU6IHN0cmluZywgc2hvdzogYm9vbGVhbikge1xuICAgIHRoaXMuY29sdW1uc1Zpc2liaWxpdHkoWyB7bmFtZSwgc2hvdyB9IF0pXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHZpc2liaWxpdHkgZm9yIGxpc3Qgb2Ygc3BlY2lmaWMgY29sdW1uc1xuICAgKi9cbiAgcHVibGljIGNvbHVtbnNWaXNpYmlsaXR5KGNvbHVtbnM6IHsgbmFtZTogc3RyaW5nLCBzaG93OiBib29sZWFuIH1bXSkge1xuICAgIHRoaXMubGlzdC5jb2x1bW5zLnVwZGF0ZVZpc2liaWxpdHlGb3JDb2xzKGNvbHVtbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZW1pdEZpbHRlcnNSZWFkeUV2ZW50KCk6IHZvaWQge1xuICAgIGlmICghIXRoaXMuZmlsdGVyUmVmICYmIHRoaXMuX2ZpbHRlclBhcmFtc1JlYWR5KSB7XG4gICAgICB0aGlzLmZpbHRlcnNSZWFkeS5lbWl0KCk7XG5cbiAgICAgIHRoaXMua2V5d29yZFZpc2libGUgPSB0aGlzLmZpbHRlclJlZi5oYXNLZXl3b3JkO1xuICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBjb25maWcgZm9yIGxpc3RcbiAgICogQHBhcmFtIGNvbmZpZ1xuICAgKi9cbiAgcHJpdmF0ZSBfaW5pdFdpdGhDb25maWcoY29uZmlnOiBGc0xpc3RDb25maWcpIHtcbiAgICBpZiAodGhpcy5saXN0KSB7XG4gICAgICB0aGlzLmxpc3QuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRPcHRzID0gdGhpcy5fZGVmYXVsdE9wdGlvbnNcbiAgICAgID8gY2xvbmVEZWVwKHRoaXMuX2RlZmF1bHRPcHRpb25zKVxuICAgICAgOiB7fTtcbiAgICBjb25zdCBsaXN0Q29uZmlnID0gbWVyZ2VXaXRoKGRlZmF1bHRPcHRzLCBjb25maWcsIHRoaXMuX2NvbmZpZ01lcmdlQ3VzdG9taXplcik7XG5cbiAgICBpZiAobGlzdENvbmZpZy5wZXJzaXN0ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5fcmVzdG9yZVBlcnNpc3RhbmNlKGxpc3RDb25maWcucGVyc2lzdCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlQ3VzdG9taXplQWN0aW9uKGxpc3RDb25maWcuYWN0aW9ucyk7XG5cbiAgICB0aGlzLmxpc3QgPSBuZXcgTGlzdChcbiAgICAgIHRoaXMuX2VsLFxuICAgICAgbGlzdENvbmZpZyxcbiAgICAgIHRoaXMuZnNTY3JvbGwsXG4gICAgICB0aGlzLnNlbGVjdGlvbkRpYWxvZyxcbiAgICAgIHRoaXMuX3JvdXRlcixcbiAgICAgIHRoaXMuX3JvdXRlLFxuICAgICAgdGhpcy5fcGVyc2lzdGFuY2UsXG4gICAgICB0aGlzLl9pbkRpYWxvZyxcbiAgICApO1xuXG4gICAgdGhpcy5fd2FpdEZpcnN0TG9hZCgpO1xuXG4gICAgdGhpcy5yZW9yZGVyQ29udHJvbGxlci5pbml0V2l0aENvbmZpZyhcbiAgICAgIGNvbmZpZy5yZW9yZGVyLFxuICAgICAgdGhpcy5saXN0LmRhdGFDb250cm9sbGVyLFxuICAgICAgdGhpcy5saXN0LmFjdGlvbnMsXG4gICAgICB0aGlzLmxpc3Quc2VsZWN0aW9uLFxuICAgICk7XG5cbiAgICBpZiAodGhpcy5saXN0Q29sdW1uRGlyZWN0aXZlcykge1xuICAgICAgdGhpcy5saXN0LnRyYW5mb3JtVGVtcGxhdGVzVG9Db2x1bW5zKHRoaXMubGlzdENvbHVtbkRpcmVjdGl2ZXMpO1xuICAgIH1cbiAgICB0aGlzLl9saXN0ZW5Tb3J0aW5nQ2hhbmdlKCk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhY3Rpb24gd2l0aCBjdXN0b21pemUgZmxhZyBhbmQgcmUtZGVjbGFyZSBjbGljayBmdW5jdGlvbiBmb3IgQ3VzdG9taXplQ29sc0RpYWxvZ1xuICAgKiBAcGFyYW0gYWN0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlQ3VzdG9taXplQWN0aW9uKGFjdGlvbnM6IEZzTGlzdEFjdGlvbltdKSB7XG4gICAgY29uc3QgY3VzdG9taXplQWN0aW9uID0gYWN0aW9ucz8uZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24uY3VzdG9taXplKTtcblxuICAgIGlmIChjdXN0b21pemVBY3Rpb24pIHtcbiAgICAgIGNvbnN0IGFjdGlvbkNsaWNrRm4gPSBjdXN0b21pemVBY3Rpb24uY2xpY2s7XG5cbiAgICAgIGN1c3RvbWl6ZUFjdGlvbi5jbGljayA9ICgpID0+IHtcbiAgICAgICAgaWYgKGFjdGlvbkNsaWNrRm4pIHtcbiAgICAgICAgICBhY3Rpb25DbGlja0ZuKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaWFsb2cub3BlbihDdXN0b21pemVDb2xzRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgY29sdW1uczogdGhpcy5saXN0LmNvbHVtbnMuY29sdW1uc0ZvckRpYWxvZyxcbiAgICAgICAgICAgIGNoYW5nZUZuOiB0aGlzLmxpc3QuY29sdW1ucy5jaGFuZ2VGbixcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5saXN0Lm9uRGVzdHJveSQpLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpLFxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICB0aGlzLmxpc3QuY29sdW1ucy51cGRhdGVWaXNpYmlsaXR5Rm9yQ29scyhkYXRhKTtcblxuICAgICAgICAgICAgICB0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgc29ydGluZyBpbiBmaWx0ZXJcbiAgICovXG4gIHByaXZhdGUgX2xpc3RlblNvcnRpbmdDaGFuZ2UoKSB7XG4gICAgdGhpcy5saXN0LnNvcnRpbmdcbiAgICAgIC5zb3J0aW5nQ2hhbmdlZCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5saXN0Lm9uRGVzdHJveSQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChzb3J0KSA9PiB7XG4gICAgICAgIHRoaXMuX2ZpbHRlclJlZi51cGRhdGVTb3J0KHNvcnQpO1xuICAgICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgX3N1YnNjcmliZVRvUmVtb3ZlUm93KCkge1xuICAgIHRoaXMucm93UmVtb3ZlZFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKVxuICAgICAgLnN1YnNjcmliZSgocm93KSA9PiB7XG4gICAgICAgIHRoaXMubGlzdC5kYXRhQ29udHJvbGxlci5yZW1vdmVEYXRhKHJvdyk7XG4gICAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaWJlVG9Hcm91cEV4cGFuZFN0YXR1c0NoYW5nZSgpIHtcbiAgICBpZiAodGhpcy5saXN0LmRhdGFDb250cm9sbGVyLmhhc0dyb3Vwcykge1xuICAgICAgdGhpcy5fZ3JvdXBFeHBhbmROb3RpZmllci5leHBhbmRTdGF0dXNDaGFuZ2UkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJvdykgPT4ge1xuICAgICAgICAgIHRoaXMubGlzdC5kYXRhQ29udHJvbGxlci50b2dnbGVSb3dHcm91cChyb3cpO1xuICAgICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3dhaXRGaXJzdExvYWQoKSB7XG4gICAgdGhpcy5saXN0LmxvYWRpbmckXG4gICAgICAucGlwZShcbiAgICAgICAgc2tpcCgxKSxcbiAgICAgICAgZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgPT09IGZhbHNlKSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubGlzdC5vbkRlc3Ryb3kkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZmlyc3RMb2FkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbmZpZ01lcmdlQ3VzdG9taXplcihvYmpWYWx1ZTogYW55LCBzcmNWYWx1ZTogYW55KSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqVmFsdWUpKSB7XG4gICAgICByZXR1cm4gb2JqVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVzdG9yZVBlcnNpc3RhbmNlKHBlcnNpc3RDb25maWc6IEZzTGlzdFBlcnNpdGFuY2UpIHtcbiAgICBjb25zdCBuYW1lc3BhY2UgPSBnZXROb3JtYWxpemVkUGF0aCh0aGlzLl9sb2NhdGlvbik7XG4gICAgdGhpcy5fcGVyc2lzdGFuY2Uuc2V0Q29uZmlnKHBlcnNpc3RDb25maWcsIG5hbWVzcGFjZSwgdGhpcy5faW5EaWFsb2cpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZnMtbGlzdC1jb250YWluZXJcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdoYXMtZmlsdGVyLWtleXdvcmQnOiBoYXNGaWx0ZXJLZXl3b3JkLFxuICAgICAgJ2hhcy1maWx0ZXJzJzogbGlzdC5maWx0ZXJDb25maWc/Lml0ZW1zLmxlbmd0aCxcbiAgICAgICdoYXMtaGVhZGluZyc6IGxpc3QuaGVhZGluZyB8fCBoZWFkaW5nVGVtcGxhdGUsXG4gICAgICAnaGFzLXN0YXR1cyc6IGhhc1N0YXR1cyxcbiAgICAgICdoYXMtY2hpcHMnOiBsaXN0LmNoaXBzLFxuICAgICAgJ2hhcy1hY3Rpb25zJzogbGlzdC5hY3Rpb25zLmhhc0FjdGlvbnMsXG4gICAgICAnZmlyc3QtbG9hZCc6IGZpcnN0TG9hZCxcbiAgICAgICdsb2FkaW5nJzogbGlzdC5sb2FkaW5nJCB8IGFzeW5jXG4gICAgfVwiPlxuICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlzdENvbnRhaW5lckNvbnRlbnRcIj48L25nLXRlbXBsYXRlPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbGlzdENvbnRhaW5lckNvbnRlbnQ+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsaXN0LmRhdGFDb250cm9sbGVyLnZpc2libGVSb3dzJCB8IGFzeW5jIGFzIGxpc3REYXRhXCI+XG4gICAgPGRpdiBjbGFzcz1cImZzLWxpc3QtaGVhZGVyLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZnMtbGlzdC1oZWFkZXJcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ25vLXdyYXAnOiByZW9yZGVyQ29udHJvbGxlci5tYW51YWxSZW9yZGVyQWN0aXZhdGVkIHx8ICFsaXN0LmZpbHRlckNvbmZpZz8uaXRlbXMubGVuZ3RoIH1cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJoYXNGaWx0ZXJLZXl3b3JkXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhlYWRpbmdcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxmcy1maWx0ZXJcbiAgICAgICAgICAgIGNsYXNzPVwiZnMtbGlzdC1maWx0ZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJsaXN0LmZpbHRlckNvbmZpZ1wiXG4gICAgICAgICAgICBbZmlsdGVyXT1cImxpc3QuZmlsdGVyQ29uZmlnXCJcbiAgICAgICAgICAgIFtzaG93U29ydEJ5XT1cIiFsaXN0LnN0YXR1c1wiXG4gICAgICAgICAgICBbc2hvd0ZpbHRlcklucHV0XT1cImxpc3QuZmlsdGVySW5wdXRcIlxuICAgICAgICAgICAgKHJlYWR5KT1cImZpbHRlclJlYWR5KClcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgZnNGaWx0ZXJTdGF0dXNCYXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhaGFzRmlsdGVyS2V5d29yZFwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVhZGluZ1wiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzU3RhdHVzXCI+XG4gICAgICAgICAgICAgIDxmcy1saXN0LXN0YXR1c1xuICAgICAgICAgICAgICAgIGNsYXNzPVwiZnMtbGlzdC1zdGF0dXNcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2hpZGRlbi1tb2JpbGUnOiAhbGlzdC5zdGF0dXMgfVwiXG4gICAgICAgICAgICAgICAgW3Jvd3NdPVwibGlzdERhdGFcIlxuICAgICAgICAgICAgICAgIFtzb3J0aW5nXT1cImxpc3Quc29ydGluZ1wiXG4gICAgICAgICAgICAgICAgW3BhZ2luZ109XCJsaXN0LnBhZ2luZ1wiXG4gICAgICAgICAgICAgICAgW2ZpcnN0TG9hZF09XCJmaXJzdExvYWRcIlxuICAgICAgICAgICAgICAgIFtzY3JvbGxhYmxlXT1cImxpc3Quc2Nyb2xsYWJsZSB8fCBsaXN0LnBhZ2luZy5sb2FkTW9yZUVuYWJsZWRcIj5cbiAgICAgICAgICAgICAgPC9mcy1saXN0LXN0YXR1cz5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZnMtZmlsdGVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZnMtbGlzdC1jb250ZW50XVwiPjwvbmctY29udGVudD5cblxuICAgIDwhLS0gVGFibGUgaW1wbGVtZW50YXRpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImZzLWxpc3QtdGFibGUtY29udGFpbmVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpcnN0TG9hZCAmJiBsaXN0RGF0YS5sZW5ndGggPiAwICYmICFsaXN0LmVtcHR5U3RhdGVFbmFibGVkXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cImZzLWxpc3QtdGFibGVcIiByb2xlPVwiZ3JpZFwiIFtmc0xpc3RDb250ZW50SW5pdF09XCJsaXN0LmFmdGVyQ29udGVudEluaXRcIj5cbiAgICAgICAgICA8dGhlYWRcbiAgICAgICAgICAgIGZzLWxpc3QtaGVhZFxuICAgICAgICAgICAgY2xhc3M9XCJmcy1saXN0LWhlYWRcIlxuICAgICAgICAgICAgcm9sZT1cInJvd2dyb3VwXCJcbiAgICAgICAgICAgICpuZ0lmPVwibGlzdC5jb2x1bW5zLmhhc0hlYWRlclwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJsaXN0LmNvbHVtbnMudGhlYWRDbGFzc1wiXG4gICAgICAgICAgICBbY29sdW1uc109XCJsaXN0LmNvbHVtbnMudmlzaWJsZUNvbHVtbnMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgW3NvcnRpbmddPVwibGlzdC5zb3J0aW5nXCJcbiAgICAgICAgICAgIFtzZWxlY3Rpb25dPVwibGlzdC5zZWxlY3Rpb25cIlxuICAgICAgICAgICAgW2hhc1Jvd0FjdGlvbnNdPVwibGlzdC5oYXNSb3dBY3Rpb25zXCJcbiAgICAgICAgICAgIFthY3RpdmVGaWx0ZXJzQ291bnRdPVwibGlzdC5hY3RpdmVGaWx0ZXJzQ291bnQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgW3Jlb3JkZXJFbmFibGVkXT1cInJlb3JkZXJDb250cm9sbGVyLmVuYWJsZWQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgW3Jlb3JkZXJQb3NpdGlvbl09XCJyZW9yZGVyQ29udHJvbGxlci5wb3NpdGlvbiQgfCBhc3luY1wiXG4gICAgICAgICAgICBbcmVvcmRlclN0cmF0ZWd5XT1cInJlb3JkZXJDb250cm9sbGVyLnN0cmF0ZWd5JCB8IGFzeW5jXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC90aGVhZD5cblxuICAgICAgICAgIDx0Ym9keVxuICAgICAgICAgICAgZnMtbGlzdC1ib2R5XG4gICAgICAgICAgICBmc0xpc3REcmFnZ2FibGVMaXN0XG4gICAgICAgICAgICBjbGFzcz1cImZzLWxpc3QtYm9keVwiXG4gICAgICAgICAgICByb2xlPVwicm93Z3JvdXBcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiEhKHJlb3JkZXJDb250cm9sbGVyLnJlb3JkZXJEaXNhYmxlZCQgfCBhc3luYylcIlxuICAgICAgICAgICAgW3Jvd3NdPVwibGlzdERhdGFcIlxuICAgICAgICAgICAgW3Jvd0FjdGlvbnNSYXddPVwibGlzdC5yb3dBY3Rpb25zUmF3XCJcbiAgICAgICAgICAgIFtncm91cEFjdGlvbnNSYXddPVwibGlzdC5ncm91cEFjdGlvbnNSYXdcIlxuICAgICAgICAgICAgW2hhc1Jvd0FjdGlvbnNdPVwibGlzdC5oYXNSb3dBY3Rpb25zXCJcbiAgICAgICAgICAgIFtyb3dFdmVudHNdPVwibGlzdC5yb3dFdmVudHNcIlxuICAgICAgICAgICAgW3Jvd0NsYXNzXT1cImxpc3Qucm93Q2xhc3NcIlxuICAgICAgICAgICAgW2NvbHVtbnNdPVwibGlzdC5jb2x1bW5zLnZpc2libGVDb2x1bW5zJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZXN0b3JlTW9kZV09XCJsaXN0LnJlc3RvcmVNb2RlXCJcbiAgICAgICAgICAgIFtzZWxlY3Rpb25dPVwibGlzdC5zZWxlY3Rpb25cIlxuICAgICAgICAgICAgW3Jvd1JlbW92ZWRdPVwicm93UmVtb3ZlZFwiXG4gICAgICAgICAgICBbYWN0aXZlRmlsdGVyc0NvdW50XT1cImxpc3QuYWN0aXZlRmlsdGVyc0NvdW50JCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZW9yZGVyRW5hYmxlZF09XCJyZW9yZGVyQ29udHJvbGxlci5lbmFibGVkJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZW9yZGVyUG9zaXRpb25dPVwicmVvcmRlckNvbnRyb2xsZXIucG9zaXRpb24kIHwgYXN5bmNcIlxuICAgICAgICAgICAgW3Jlb3JkZXJTdHJhdGVneV09XCJyZW9yZGVyQ29udHJvbGxlci5zdHJhdGVneSQgfCBhc3luY1wiXG4gICAgICAgICAgICBbcmVvcmRlck11bHRpcGxlXT1cInJlb3JkZXJDb250cm9sbGVyLm11bHRpcGxlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC90Ym9keT5cblxuICAgICAgICAgIDx0Zm9vdFxuICAgICAgICAgICAgZnMtbGlzdC1mb290ZXJcbiAgICAgICAgICAgIGNsYXNzPVwiZnMtbGlzdC1mb290ZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJsaXN0LmNvbHVtbnMuaGFzRm9vdGVyXCJcbiAgICAgICAgICAgIFtjb2x1bW5zXT1cImxpc3QuY29sdW1ucy52aXNpYmxlQ29sdW1ucyQgfCBhc3luY1wiXG4gICAgICAgICAgICBbc2VsZWN0aW9uXT1cImxpc3Quc2VsZWN0aW9uXCJcbiAgICAgICAgICAgIFtoYXNSb3dBY3Rpb25zXT1cImxpc3QuaGFzUm93QWN0aW9uc1wiXG4gICAgICAgICAgICBbYWN0aXZlRmlsdGVyc0NvdW50XT1cImxpc3QuYWN0aXZlRmlsdGVyc0NvdW50JCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZW9yZGVyRW5hYmxlZF09XCJyZW9yZGVyQ29udHJvbGxlci5lbmFibGVkJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZW9yZGVyUG9zaXRpb25dPVwicmVvcmRlckNvbnRyb2xsZXIucG9zaXRpb24kIHwgYXN5bmNcIlxuICAgICAgICAgICAgW3Jlb3JkZXJTdHJhdGVneV09XCJyZW9yZGVyQ29udHJvbGxlci5zdHJhdGVneSQgfCBhc3luY1wiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvdGZvb3Q+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxmcy1saXN0LWxvYWRlclxuICAgICAgICAqbmdJZj1cImZpcnN0TG9hZFwiXG4gICAgICAgIFtjb2x1bW5zXT1cImxpc3QuY29sdW1ucy5jb2x1bW5zXCJcbiAgICAgICAgW2xvYWRlckxpbmVzXT1cImxvYWRlckxpbmVzXCI+XG4gICAgICA8L2ZzLWxpc3QtbG9hZGVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGZzLWxpc3QtcGFnaW5hdGlvblxuICAgICAgKm5nSWY9XCJwYWdpbmF0b3JWaXNpYmxlXCJcbiAgICAgIGNsYXNzPVwiZnMtbGlzdC1wYWdpbmF0aW9uXCJcbiAgICAgIFtyb3dzXT1cImxpc3REYXRhXCJcbiAgICAgIFtwYWdpbmF0aW9uXT1cImxpc3QucGFnaW5nXCI+XG4gICAgPC9mcy1saXN0LXBhZ2luYXRpb24+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpcnN0TG9hZFwiPlxuICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwibGlzdERhdGEubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICBjbGFzcz1cImZzLWxpc3Qtbm8tcmVzdWx0cy1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJsaXN0Lm5vUmVzdWx0cz8ubWVzc2FnZSAmJiAhbGlzdC5lbXB0eVN0YXRlRW5hYmxlZFwiXG4gICAgICAgICAgICBjbGFzcz1cImZzLWxpc3Qtbm8tcmVzdWx0c1wiPlxuICAgICAgICAgIHt7IGxpc3Qubm9SZXN1bHRzPy5tZXNzYWdlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGlzdC5lbXB0eVN0YXRlRW5hYmxlZFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJsaXN0LmVtcHR5U3RhdGVUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNoZWFkaW5nPlxuICA8ZGl2IGNsYXNzPVwiaGVhZGluZy1jb250YWluZXJcIiAqbmdJZj1cImhlYWRpbmdDb250YWluZXJUZW1wbGF0ZSB8fCBsaXN0LmhlYWRpbmcgfHwgbGlzdC5zdWJoZWFkaW5nIHx8IGhlYWRpbmdUZW1wbGF0ZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkaW5nQ29udGFpbmVyVGVtcGxhdGU7IGVsc2UgaGVhZGluZ0NvbnRhaW5lclwiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWFkaW5nQ29udGFpbmVyVGVtcGxhdGVcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyB0ZW1wbGF0ZTogaGVhZGluZ0NvbnRhaW5lciB9XCI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2hlYWRpbmdDb250YWluZXI+XG4gICAgICA8aDIgY2xhc3M9XCJoZWFkaW5nXCIgKm5nSWY9XCJsaXN0LmhlYWRpbmcgfHwgaGVhZGluZ1RlbXBsYXRlXCI+XG4gICAgICAgIHt7bGlzdC5oZWFkaW5nfX1cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWFkaW5nVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvaDI+XG4gICAgICA8ZGl2IGNsYXNzPVwic21hbGwgc3ViaGVhZGluZ1wiICpuZ0lmPVwibGlzdC5zdWJoZWFkaW5nIHx8IHN1YmhlYWRpbmdUZW1wbGF0ZVwiPlxuICAgICAgICB7e2xpc3Quc3ViaGVhZGluZ319XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic3ViaGVhZGluZ1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, Inject, Input, QueryList, ViewChild, HostBinding, Optional, ContentChild, TemplateRef, Output, } from '@angular/core';
2
+ import { ActivatedRoute, Router } from '@angular/router';
3
+ import { Location } from '@angular/common';
4
+ import { MatDialog, MatDialogRef } from '@angular/material/dialog';
5
+ import { Subject } from 'rxjs';
6
+ import { filter, skip, take, takeUntil } from 'rxjs/operators';
7
+ import { FsScrollService } from '@firestitch/scroll';
8
+ import { FilterComponent } from '@firestitch/filter';
9
+ import { SelectionDialog } from '@firestitch/selection';
10
+ import { getNormalizedPath } from '@firestitch/common';
11
+ import { DrawerRef } from '@firestitch/drawer';
12
+ import { cloneDeep, mergeWith } from 'lodash-es';
13
+ import { List } from '../../classes/list-controller';
14
+ import { ReorderController } from '../../classes/reorder-controller';
15
+ import { FsListColumnDirective } from '../../directives/column/column.directive';
16
+ import { FsListEmptyStateDirective } from '../../directives/empty-state/empty-state.directive';
17
+ import { FS_LIST_DEFAULT_CONFIG } from '../../fs-list.providers';
18
+ import { CustomizeColsDialogComponent } from '../customize-cols/customize-cols.component';
19
+ import { GroupExpandNotifierService } from '../../services/group-expand-notifier.service';
20
+ import { PersistanceController } from '../../classes/persistance-controller';
21
+ import { FsListHeadingContainerDirective, FsListHeadingDirective, FsListSubheadingDirective } from '../../directives';
22
+ import * as i0 from "@angular/core";
23
+ import * as i1 from "../../classes/reorder-controller";
24
+ import * as i2 from "@firestitch/scroll";
25
+ import * as i3 from "@angular/material/dialog";
26
+ import * as i4 from "@firestitch/drawer";
27
+ import * as i5 from "@firestitch/selection";
28
+ import * as i6 from "../../services/group-expand-notifier.service";
29
+ import * as i7 from "@angular/router";
30
+ import * as i8 from "../../classes/persistance-controller";
31
+ import * as i9 from "@angular/common";
32
+ import * as i10 from "@firestitch/filter";
33
+ import * as i11 from "../status/status.component";
34
+ import * as i12 from "../head/head.component";
35
+ import * as i13 from "../body/body.component";
36
+ import * as i14 from "../footer/footer.component";
37
+ import * as i15 from "../loader/loader.component";
38
+ import * as i16 from "../pagination/pagination.component";
39
+ import * as i17 from "../../directives/content-init/content-init.directive";
40
+ import * as i18 from "../../directives/draggable-list/draggable-list.directive";
41
+ import * as i19 from "../../directives/footer/footer.directive";
42
+ export class FsListComponent {
43
+ constructor(reorderController, _defaultOptions, fsScroll, _dialogRef, _drawerRef, _el, selectionDialog, dialog, cdRef, _groupExpandNotifier, _router, _route, _persistance, _location) {
44
+ this.reorderController = reorderController;
45
+ this._defaultOptions = _defaultOptions;
46
+ this.fsScroll = fsScroll;
47
+ this._dialogRef = _dialogRef;
48
+ this._drawerRef = _drawerRef;
49
+ this._el = _el;
50
+ this.selectionDialog = selectionDialog;
51
+ this.dialog = dialog;
52
+ this.cdRef = cdRef;
53
+ this._groupExpandNotifier = _groupExpandNotifier;
54
+ this._router = _router;
55
+ this._route = _route;
56
+ this._persistance = _persistance;
57
+ this._location = _location;
58
+ this.classFsList = true;
59
+ this.loaderLines = 3;
60
+ this.filtersReady = new EventEmitter();
61
+ this.keywordVisible = true;
62
+ // Event will fired if action remove: true will clicked
63
+ this.rowRemoved = new EventEmitter();
64
+ this.firstLoad = true;
65
+ this._filterParamsReady = false;
66
+ this._inDialog = !!this._dialogRef || !!this._drawerRef;
67
+ this._destroy = new Subject();
68
+ }
69
+ set config(config) {
70
+ this._initWithConfig(config);
71
+ }
72
+ set filterReference(component) {
73
+ this._filterRef = component;
74
+ this.list.actions.setFilterRef(component);
75
+ this._emitFiltersReadyEvent();
76
+ }
77
+ /**
78
+ * Set columns to config
79
+ * Create Column Model instances
80
+ *
81
+ */
82
+ set columnTemplates(listColumnDirectives) {
83
+ this.listColumnDirectives = listColumnDirectives;
84
+ if (this.list) {
85
+ this.list.tranformTemplatesToColumns(listColumnDirectives);
86
+ }
87
+ }
88
+ set _emptyStateTemplate(template) {
89
+ if (this.list) {
90
+ this.list.emptyStateTemplate = template;
91
+ }
92
+ }
93
+ /**
94
+ * Return reference for filter
95
+ */
96
+ get filterRef() {
97
+ return this._filterRef;
98
+ }
99
+ get groupEnabled() {
100
+ return this.list.dataController.groupEnabled;
101
+ }
102
+ get hasFilterKeyword() {
103
+ return this.list.filterInput && this.keywordVisible;
104
+ }
105
+ get hasStatus() {
106
+ return this.list.status &&
107
+ (this.list.sorting.isDefined || this.list.paging.enabled) &&
108
+ (!this.reorderController.enabled || (this.reorderController.enabled && this.reorderController.status)) &&
109
+ ((this.list.scrollable && this.list.scrollable.status) || !this.list.scrollable);
110
+ }
111
+ get paginatorVisible() {
112
+ return this.list.paging.enabled
113
+ && !this.firstLoad
114
+ && !this.list.scrollable
115
+ && !this.list.emptyStateEnabled
116
+ && this.list.dataController.visibleRowsCount > 0
117
+ && this.list.paging.pages > 1;
118
+ }
119
+ set groupEnabled(value) {
120
+ this.list.groupEnabled(value);
121
+ }
122
+ get filtersQuery() {
123
+ return this.list.filtersQuery;
124
+ }
125
+ ngAfterContentInit() {
126
+ if (this.list.afterInit) {
127
+ this.list.afterInit(this);
128
+ }
129
+ }
130
+ ngOnInit() {
131
+ this._subscribeToRemoveRow();
132
+ this._subscribeToGroupExpandStatusChange();
133
+ }
134
+ ngOnDestroy() {
135
+ if (this.list) {
136
+ this.list.destroy();
137
+ }
138
+ this._destroy.next();
139
+ this._destroy.complete();
140
+ }
141
+ nextPage() {
142
+ this.list.paging.goNext();
143
+ }
144
+ prevPage() {
145
+ this.list.paging.goPrev();
146
+ }
147
+ firstPage() {
148
+ this.list.paging.goFirst();
149
+ }
150
+ lastPage() {
151
+ this.list.paging.goLast();
152
+ }
153
+ reload() {
154
+ this.list.reload();
155
+ }
156
+ getData(trackBy) {
157
+ return this.list.getData(trackBy);
158
+ }
159
+ hasData(trackBy) {
160
+ return this.list.hasData(trackBy);
161
+ }
162
+ updateData(rows, trackBy) {
163
+ return this.list.dataController.updateData(rows, trackBy);
164
+ }
165
+ replaceRow(row, trackBy) {
166
+ return this.list.dataController.replaceData(row, trackBy);
167
+ }
168
+ updateSelectionConfig(config) {
169
+ this.list.selection.updateConfig(config);
170
+ }
171
+ resetSelectionActions() {
172
+ this.list.selection.resetActions();
173
+ }
174
+ enableSelection() {
175
+ this.list.selection.enableSelection();
176
+ }
177
+ disableSelection() {
178
+ this.list.selection.disableSelection();
179
+ }
180
+ removeData(data) {
181
+ return this.list.dataController.removeData(data);
182
+ }
183
+ setHeading(heading) {
184
+ this.list.heading = heading;
185
+ }
186
+ setSubheading(subheading) {
187
+ this.list.subheading = subheading;
188
+ }
189
+ reorderStart() {
190
+ this.reorderController.enableReorder();
191
+ }
192
+ reorderFinish() {
193
+ this.reorderController.disableReorder();
194
+ }
195
+ setActions(actions) {
196
+ if (actions) {
197
+ this.list.actions.clearActions();
198
+ this.list.actions.setActions(actions);
199
+ }
200
+ }
201
+ filterReady() {
202
+ this.list.filtersReady$.next();
203
+ this._filterParamsReady = true;
204
+ this._emitFiltersReadyEvent();
205
+ }
206
+ /**
207
+ * Update visibility for specific column
208
+ */
209
+ columnVisibility(name, show) {
210
+ this.columnsVisibility([{ name, show }]);
211
+ }
212
+ /**
213
+ * Update visibility for list of specific columns
214
+ */
215
+ columnsVisibility(columns) {
216
+ this.list.columns.updateVisibilityForCols(columns);
217
+ }
218
+ _emitFiltersReadyEvent() {
219
+ if (!!this.filterRef && this._filterParamsReady) {
220
+ this.filtersReady.emit();
221
+ this.keywordVisible = this.filterRef.hasKeyword;
222
+ this.cdRef.markForCheck();
223
+ }
224
+ }
225
+ /**
226
+ * Initialize config for list
227
+ * @param config
228
+ */
229
+ _initWithConfig(config) {
230
+ if (this.list) {
231
+ this.list.destroy();
232
+ }
233
+ const defaultOpts = this._defaultOptions
234
+ ? cloneDeep(this._defaultOptions)
235
+ : {};
236
+ const listConfig = mergeWith(defaultOpts, config, this._configMergeCustomizer);
237
+ if (listConfig.persist !== false) {
238
+ this._restorePersistance(listConfig.persist);
239
+ }
240
+ this._updateCustomizeAction(listConfig.actions);
241
+ this.list = new List(this._el, listConfig, this.fsScroll, this.selectionDialog, this._router, this._route, this._persistance, this._inDialog);
242
+ this.noRowsHighlight = this.list.rowHighlight == false;
243
+ this._waitFirstLoad();
244
+ this.reorderController.initWithConfig(config.reorder, this.list.dataController, this.list.actions, this.list.selection);
245
+ if (this.listColumnDirectives) {
246
+ this.list.tranformTemplatesToColumns(this.listColumnDirectives);
247
+ }
248
+ this._listenSortingChange();
249
+ }
250
+ /**
251
+ * Find action with customize flag and re-declare click function for CustomizeColsDialog
252
+ * @param actions
253
+ */
254
+ _updateCustomizeAction(actions) {
255
+ const customizeAction = actions === null || actions === void 0 ? void 0 : actions.find((action) => action.customize);
256
+ if (customizeAction) {
257
+ const actionClickFn = customizeAction.click;
258
+ customizeAction.click = () => {
259
+ if (actionClickFn) {
260
+ actionClickFn(null);
261
+ }
262
+ this.dialog.open(CustomizeColsDialogComponent, {
263
+ data: {
264
+ columns: this.list.columns.columnsForDialog,
265
+ changeFn: this.list.columns.changeFn,
266
+ },
267
+ })
268
+ .afterClosed()
269
+ .pipe(takeUntil(this.list.onDestroy$), takeUntil(this._destroy))
270
+ .subscribe((data) => {
271
+ if (data) {
272
+ this.list.columns.updateVisibilityForCols(data);
273
+ this.cdRef.markForCheck();
274
+ }
275
+ });
276
+ };
277
+ }
278
+ }
279
+ /**
280
+ * Update sorting in filter
281
+ */
282
+ _listenSortingChange() {
283
+ this.list.sorting
284
+ .sortingChanged$
285
+ .pipe(takeUntil(this.list.onDestroy$), takeUntil(this._destroy))
286
+ .subscribe((sort) => {
287
+ this._filterRef.updateSort(sort);
288
+ });
289
+ }
290
+ _subscribeToRemoveRow() {
291
+ this.rowRemoved
292
+ .pipe(takeUntil(this._destroy))
293
+ .subscribe((row) => {
294
+ this.list.dataController.removeData(row);
295
+ });
296
+ }
297
+ _subscribeToGroupExpandStatusChange() {
298
+ if (this.list.dataController.hasGroups) {
299
+ this._groupExpandNotifier.expandStatusChange$
300
+ .pipe(takeUntil(this._destroy))
301
+ .subscribe((row) => {
302
+ this.list.dataController.toggleRowGroup(row);
303
+ });
304
+ }
305
+ }
306
+ _waitFirstLoad() {
307
+ this.list.loading$
308
+ .pipe(skip(1), filter((value) => value === false), take(1), takeUntil(this.list.onDestroy$), takeUntil(this._destroy))
309
+ .subscribe(() => {
310
+ this.firstLoad = false;
311
+ this.cdRef.markForCheck();
312
+ });
313
+ }
314
+ _configMergeCustomizer(objValue, srcValue) {
315
+ if (Array.isArray(objValue)) {
316
+ return objValue;
317
+ }
318
+ }
319
+ _restorePersistance(persistConfig) {
320
+ const namespace = getNormalizedPath(this._location);
321
+ this._persistance.setConfig(persistConfig, namespace, this._inDialog);
322
+ }
323
+ }
324
+ FsListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsListComponent, deps: [{ token: i1.ReorderController }, { token: FS_LIST_DEFAULT_CONFIG, optional: true }, { token: i2.FsScrollService, optional: true }, { token: i3.MatDialogRef, optional: true }, { token: i4.DrawerRef, optional: true }, { token: i0.ElementRef }, { token: i5.SelectionDialog }, { token: i3.MatDialog }, { token: i0.ChangeDetectorRef }, { token: i6.GroupExpandNotifierService }, { token: i7.Router }, { token: i7.ActivatedRoute }, { token: i8.PersistanceController }, { token: i9.Location }], target: i0.ɵɵFactoryTarget.Component });
325
+ FsListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsListComponent, selector: "fs-list", inputs: { config: "config", loaderLines: "loaderLines" }, outputs: { filtersReady: "filtersReady" }, host: { properties: { "class.fs-list": "this.classFsList", "class.fs-list-no-highlight": "this.noRowsHighlight" } }, providers: [
326
+ GroupExpandNotifierService,
327
+ PersistanceController,
328
+ ReorderController,
329
+ ], queries: [{ propertyName: "_emptyStateTemplate", first: true, predicate: FsListEmptyStateDirective, descendants: true, read: TemplateRef }, { propertyName: "headingTemplate", first: true, predicate: FsListHeadingDirective, descendants: true, read: TemplateRef }, { propertyName: "headingContainerTemplate", first: true, predicate: FsListHeadingContainerDirective, descendants: true, read: TemplateRef }, { propertyName: "subheadingTemplate", first: true, predicate: FsListSubheadingDirective, descendants: true, read: TemplateRef }, { propertyName: "columnTemplates", predicate: FsListColumnDirective }], viewQueries: [{ propertyName: "filterReference", first: true, predicate: FilterComponent, descendants: true }], ngImport: i0, template: "<div class=\"fs-list-container\"\n [ngClass]=\"{\n 'has-filter-keyword': hasFilterKeyword,\n 'has-filters': list.filterConfig?.items.length,\n 'has-heading': list.heading || headingTemplate,\n 'has-status': hasStatus,\n 'has-chips': list.chips,\n 'has-actions': list.actions.hasActions,\n 'first-load': firstLoad,\n 'loading': list.loading$ | async\n }\">\n <ng-template [ngTemplateOutlet]=\"listContainerContent\"></ng-template>\n</div>\n\n<ng-template #listContainerContent>\n <ng-container *ngIf=\"list.dataController.visibleRows$ | async as listData\">\n <div class=\"fs-list-header-container\">\n <div\n class=\"fs-list-header\"\n [ngClass]=\"{ 'no-wrap': reorderController.manualReorderActivated || !list.filterConfig?.items.length }\">\n <ng-container\n *ngIf=\"hasFilterKeyword\"\n [ngTemplateOutlet]=\"heading\">\n </ng-container>\n <fs-filter\n class=\"fs-list-filter\"\n *ngIf=\"list.filterConfig\"\n [filter]=\"list.filterConfig\"\n [showSortBy]=\"!list.status\"\n [showFilterInput]=\"list.filterInput\"\n (ready)=\"filterReady()\">\n <ng-template fsFilterStatusBar>\n <ng-container\n *ngIf=\"!hasFilterKeyword\"\n [ngTemplateOutlet]=\"heading\">\n </ng-container>\n <ng-container *ngIf=\"hasStatus\">\n <fs-list-status\n class=\"fs-list-status\"\n [ngClass]=\"{ 'hidden-mobile': !list.status }\"\n [rows]=\"listData\"\n [sorting]=\"list.sorting\"\n [paging]=\"list.paging\"\n [firstLoad]=\"firstLoad\"\n [scrollable]=\"list.scrollable || list.paging.loadMoreEnabled\">\n </fs-list-status>\n </ng-container>\n </ng-template>\n </fs-filter>\n </div>\n </div>\n\n <ng-content select=\"[fs-list-content]\"></ng-content>\n\n <!-- Table implementation -->\n <div class=\"fs-list-table-container\">\n <ng-container *ngIf=\"!firstLoad && listData.length > 0 && !list.emptyStateEnabled\">\n <table class=\"fs-list-table\" role=\"grid\" [fsListContentInit]=\"list.afterContentInit\">\n <thead\n fs-list-head\n class=\"fs-list-head\"\n role=\"rowgroup\"\n *ngIf=\"list.columns.hasHeader\"\n [ngClass]=\"list.columns.theadClass\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [sorting]=\"list.sorting\"\n [selection]=\"list.selection\"\n [hasRowActions]=\"list.hasRowActions\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\"\n >\n </thead>\n\n <tbody\n fs-list-body\n fsListDraggableList\n class=\"fs-list-body\"\n role=\"rowgroup\"\n [class.disabled]=\"!!(reorderController.reorderDisabled$ | async)\"\n [rows]=\"listData\"\n [rowActionsRaw]=\"list.rowActionsRaw\"\n [groupActionsRaw]=\"list.groupActionsRaw\"\n [hasRowActions]=\"list.hasRowActions\"\n [rowEvents]=\"list.rowEvents\"\n [rowClass]=\"list.rowClass\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [restoreMode]=\"list.restoreMode\"\n [selection]=\"list.selection\"\n [rowRemoved]=\"rowRemoved\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\"\n [reorderMultiple]=\"reorderController.multiple\"\n >\n </tbody>\n\n <tfoot\n fs-list-footer\n class=\"fs-list-footer\"\n *ngIf=\"list.columns.hasFooter\"\n [columns]=\"list.columns.visibleColumns$ | async\"\n [selection]=\"list.selection\"\n [hasRowActions]=\"list.hasRowActions\"\n [activeFiltersCount]=\"list.activeFiltersCount$ | async\"\n [reorderEnabled]=\"reorderController.enabled$ | async\"\n [reorderPosition]=\"reorderController.position$ | async\"\n [reorderStrategy]=\"reorderController.strategy$ | async\"\n >\n </tfoot>\n </table>\n </ng-container>\n <fs-list-loader\n *ngIf=\"firstLoad\"\n [columns]=\"list.columns.columns\"\n [loaderLines]=\"loaderLines\">\n </fs-list-loader>\n </div>\n\n <fs-list-pagination\n *ngIf=\"paginatorVisible\"\n class=\"fs-list-pagination\"\n [rows]=\"listData\"\n [pagination]=\"list.paging\">\n </fs-list-pagination>\n\n <ng-container *ngIf=\"!firstLoad\">\n <div\n *ngIf=\"listData.length === 0\"\n class=\"fs-list-no-results-container\">\n <div\n *ngIf=\"list.noResults?.message && !list.emptyStateEnabled\"\n class=\"fs-list-no-results\">\n {{ list.noResults?.message }}\n </div>\n <ng-container *ngIf=\"list.emptyStateEnabled\">\n <ng-template [ngTemplateOutlet]=\"list.emptyStateTemplate\"></ng-template>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #heading>\n <div class=\"heading-container\" *ngIf=\"headingContainerTemplate || list.heading || list.subheading || headingTemplate\">\n <ng-container *ngIf=\"headingContainerTemplate; else headingContainer\">\n <ng-container\n [ngTemplateOutlet]=\"headingContainerTemplate\"\n [ngTemplateOutletContext]=\"{ template: headingContainer }\">\n </ng-container>\n </ng-container>\n <ng-template #headingContainer>\n <h2 class=\"heading\" *ngIf=\"list.heading || headingTemplate\">\n {{list.heading}}\n <ng-container [ngTemplateOutlet]=\"headingTemplate\"></ng-container>\n </h2>\n <div class=\"small subheading\" *ngIf=\"list.subheading || subheadingTemplate\">\n {{list.subheading}}\n <ng-container [ngTemplateOutlet]=\"subheadingTemplate\"></ng-container>\n </div>\n </ng-template>\n </div>\n</ng-template>\n", styles: [":host ::ng-deep .fs-list-swap-restricted{opacity:.5}:host ::ng-deep .fs-list-no-drop{cursor:no-drop}:host ::ng-deep .hidden{display:none}@media print{:host ::ng-deep .fs-list-row-group{page-break-after:avoid}:host ::ng-deep .fs-list-row-group-child{page-break-before:avoid}:host ::ng-deep .fs-list-row-group-footer{page-break-before:avoid}}.fs-list-container{width:100%}.fs-list-container:not(.has-filters):not(.has-actions):not(.has-heading) .fs-list-header-container{display:none}.fs-list-container:not(.has-filter-keyword) .fs-list-header{display:flex;margin-bottom:4px}.fs-list-container:not(.has-filter-keyword) .fs-list-header .heading-container{flex:1}.fs-list-container:not(.has-filter-keyword) .fs-list-header fs-filter{display:flex}.fs-list-container.has-filters .heading-container{margin-bottom:4px}.fs-list-container.loading .fs-list-status,.fs-list-container.loading .fs-list-body,.fs-list-container.loading fs-list-pagination,.fs-list-container.loading .filter-chips,.fs-list-container.loading .fs-list-no-results-container,.fs-list-container.first-load .fs-list-status,.fs-list-container.first-load .fs-list-body,.fs-list-container.first-load fs-list-pagination,.fs-list-container.first-load .filter-chips,.fs-list-container.first-load .fs-list-no-results-container{opacity:.4;pointer-events:none}.fs-list-container.first-load ::ng-deep fs-filter-chips .fs-chip{color:transparent}.fs-list-container.first-load ::ng-deep fs-filter-chips .fs-chip .remove{visibility:hidden}.fs-list-container.has-actions .fs-list-actions{margin-left:5px}.fs-list-filter{margin-bottom:0;position:initial!important;display:block;width:100%}.fs-list-no-results-container .fs-list-no-results{text-align:center;color:#999;padding:10px 0}.fs-list-header .heading-container{display:flex;flex-direction:column;justify-content:center}.fs-list-header .heading{margin:0}.fs-list-header h2+.subheading{margin:2px 0 0}.fs-list-header .fs-list-actions{white-space:nowrap;float:right}.fs-list-header .fs-list-actions .menu-button{width:36px;height:36px;line-height:36px}.fs-list-header .action-button{margin-left:5px}.fs-list-header .action-button:first-child{margin-left:0}.fs-list-header .mat-button{margin-top:0;margin-bottom:0;margin-right:0}.fs-list-table-container{width:100%;overflow:auto}::ng-deep .preview-block{position:fixed;height:30px;width:200px;background:grey;display:flex;justify-content:center;align-items:center;z-index:1000;box-shadow:2px 2px 2px #9e9e9ea6;border-radius:6px}::ng-deep .fs-list{display:block;width:100%}::ng-deep .fs-list-table{border-spacing:0;display:table;width:100%;border-collapse:collapse}::ng-deep .fs-list-table .fs-list-head{display:table-header-group}::ng-deep .fs-list-table .fs-list-head .fs-list-col{color:#999;padding:8px;font-weight:normal;color:#8f8f8f;font-size:85%}::ng-deep .fs-list-table .fs-list-head .fs-list-col.fs-list-col-selection{width:1%;text-align:left}::ng-deep .fs-list-table .fs-list-head .fs-list-col.sorting{cursor:pointer}::ng-deep .fs-list-table .fs-list-head .fs-list-col.sorting:hover{background-color:#f6f6f6}::ng-deep .fs-list-table .fs-list-head .fs-list-col .wrap{display:inline-flex;vertical-align:middle;white-space:nowrap}::ng-deep .fs-list-table .fs-list-head .fs-list-col .wrap mat-icon{font-size:14px;display:block;height:14px;width:14px}::ng-deep .fs-list-table .fs-list-head .fs-list-col .wrap .direction{margin-left:5px}::ng-deep .fs-list-table .fs-list-head .fs-list-col.sorting{background-image:none}::ng-deep .fs-list-table .fs-list-body{display:table-row-group;position:relative}::ng-deep .fs-list-table .fs-list-body.drag-hidden .drag-col{opacity:0!important;cursor:default}::ng-deep .fs-list-table .fs-list-body.disabled{opacity:.4;pointer-events:none}::ng-deep .fs-list-table .fs-list-body .fs-list-col{box-sizing:border-box;border-top:1px solid #ddd}::ng-deep .fs-list-table .fs-list-body .fs-list-row:hover .fs-list-col{background-color:#f6f6f6}::ng-deep .fs-list-table .fs-list-body .fs-list-row:first-child .fs-list-col{border-top:2px solid #ddd}::ng-deep .fs-list-table .fs-list-body .fs-list-row:last-child .fs-list-col{border-bottom:2px solid #ddd}::ng-deep .fs-list-table .fs-list-head .fs-list-row,::ng-deep .fs-list-table .fs-list-body .fs-list-row,::ng-deep .fs-list-table .fs-list-footer .fs-list-row{display:table-row}::ng-deep .fs-list-table .fs-list-head .fs-list-row.drag-hidden,::ng-deep .fs-list-table .fs-list-body .fs-list-row.drag-hidden,::ng-deep .fs-list-table .fs-list-footer .fs-list-row.drag-hidden{display:none}::ng-deep .fs-list-table .fs-list-head .fs-list-row.multiple-selection,::ng-deep .fs-list-table .fs-list-body .fs-list-row.multiple-selection,::ng-deep .fs-list-table .fs-list-footer .fs-list-row.multiple-selection{background-color:#2196f380}::ng-deep .fs-list-table .fs-list-head .fs-list-row.multiple-selection .fs-list-col,::ng-deep .fs-list-table .fs-list-body .fs-list-row.multiple-selection .fs-list-col,::ng-deep .fs-list-table .fs-list-footer .fs-list-row.multiple-selection .fs-list-col{background-color:#2196f380}::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col{display:table-cell;padding:8px;vertical-align:middle;outline:none;text-align:left}::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.drag-col,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.drag-col,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.drag-col{width:24px;text-align:center;cursor:grab}::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.drag-col.drag-disabled,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.drag-col.drag-disabled,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.drag-col.drag-disabled{opacity:.4;cursor:no-drop}::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.drag-col mat-icon,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.drag-col mat-icon,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.drag-col mat-icon{display:flex}::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.fs-list-col-selection,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.fs-list-col-selection,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.fs-list-col-selection{padding:10px}::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.row-actions,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.row-actions,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.row-actions{width:1%;white-space:nowrap;padding-right:10px;overflow:hidden}::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.row-actions .row-inline-action,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.row-actions .row-inline-action,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.row-actions .row-inline-action{margin-left:12px;display:inline-block}::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.row-actions .row-inline-action:first-child,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.row-actions .row-inline-action:first-child{margin-left:0}::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.row-actions .row-inline-action-icon,::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.row-actions .row-inline-action-fab,::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.row-actions .row-menu-action,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.row-actions .row-inline-action-icon,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.row-actions .row-inline-action-fab,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.row-actions .row-menu-action,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.row-actions .row-inline-action-icon,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.row-actions .row-inline-action-fab,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.row-actions .row-inline-action-mini-fab,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.row-actions .row-menu-action{width:35px;justify-content:center;align-items:center}::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.left,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.left,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.left{text-align:left}::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.center,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.center,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.center{text-align:center}::ng-deep .fs-list-table .fs-list-head .fs-list-row .fs-list-col.right,::ng-deep .fs-list-table .fs-list-body .fs-list-row .fs-list-col.right,::ng-deep .fs-list-table .fs-list-footer .fs-list-row .fs-list-col.right{text-align:right}::ng-deep .fs-list-table .fs-list-head .fs-list-row.draggable,::ng-deep .fs-list-table .fs-list-body .fs-list-row.draggable,::ng-deep .fs-list-table .fs-list-footer .fs-list-row.draggable{position:fixed;z-index:9999;box-shadow:2px 2px 2px #9e9e9ea6;border-radius:5px;background-color:#f6f6f6}::ng-deep .fs-list-table .fs-list-head .fs-list-row.draggable .fs-list-col,::ng-deep .fs-list-table .fs-list-body .fs-list-row.draggable .fs-list-col,::ng-deep .fs-list-table .fs-list-footer .fs-list-row.draggable .fs-list-col{border:none}::ng-deep .fs-list-table .fs-list-container.has-dragging thead th{border-bottom:2px solid #ddd}::ng-deep .fs-list-table .fs-list-container.has-dragging tbody tr:nth-child(2) td{border-top:none}::ng-deep .fs-list-table tfoot td{padding:8px}::ng-deep .reorder-in-progress{-webkit-user-select:none;user-select:none}::ng-deep .draggable-elem td{opacity:.2}::ng-deep .hidden-mobile-menu-action{display:none!important}::ng-deep .hidden-mobile{display:none!important}@media only screen and (max-width: 600px){::ng-deep .fs-list-filter .inline-actions{top:initial!important;position:initial!important}::ng-deep .fs-list-filter .inline-actions .action-filter{margin-bottom:0!important}::ng-deep .fs-list-header .filter-input-field .mat-form-field-wrapper{padding:0!important}::ng-deep .fs-list-header.has-filters{flex-flow:row wrap}}@media only screen and (max-width: 768px){::ng-deep .show-mobile{display:inline-block!important}::ng-deep .fs-list-actions .action-button{display:none}::ng-deep .row-inline-action.mobile-hide{display:none}::ng-deep .hidden-mobile-menu-action{display:block!important}}:host(.fs-list-no-highlight) ::ng-deep .fs-list-row:hover .fs-list-col{background-color:initial}\n"], components: [{ type: i10.FilterComponent, selector: "fs-filter", inputs: ["config", "filter", "showSortBy", "showFilterInput"], outputs: ["closed", "opened", "ready"] }, { type: i11.FsStatusComponent, selector: "fs-list-status", inputs: ["paging", "sorting", "rows", "scrollable", "firstLoad"] }, { type: i12.FsHeadComponent, selector: "[fs-list-head]", inputs: ["sorting", "columns", "hasRowActions", "selection", "activeFiltersCount", "reorderEnabled", "reorderPosition", "reorderStrategy"] }, { type: i13.FsBodyComponent, selector: "[fs-list-body]", inputs: ["rows", "columns", "hasFooter", "rowActionsRaw", "groupActionsRaw", "rowEvents", "rowClass", "hasRowActions", "selection", "restoreMode", "rowRemoved", "activeFiltersCount", "reorderEnabled", "reorderPosition", "reorderStrategy", "reorderMultiple"] }, { type: i14.FsFooterComponent, selector: "[fs-list-footer]", inputs: ["hasRowActions", "columns", "selection", "activeFiltersCount", "reorderEnabled", "reorderPosition", "reorderStrategy"] }, { type: i15.FsListLoaderComponent, selector: "fs-list-loader", inputs: ["columns", "loaderLines"] }, { type: i16.FsPaginationComponent, selector: "fs-list-pagination", inputs: ["pagination", "rows"] }], directives: [{ type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.FilterStatusBarDirective, selector: "[fsFilterStatusBar]" }, { type: i17.FsListContentInitDirective, selector: "[fsListContentInit]", inputs: ["fsListContentInit"] }, { type: i18.FsListDraggableListDirective, selector: "[fsListDraggableList]", inputs: ["rows"] }, { type: i19.FsListFooterDirective, selector: "[fs-list-footer]", inputs: ["colspan", "align", "class"] }], pipes: { "async": i9.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
330
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsListComponent, decorators: [{
331
+ type: Component,
332
+ args: [{
333
+ selector: 'fs-list',
334
+ templateUrl: 'list.component.html',
335
+ styleUrls: ['./list.component.scss'],
336
+ changeDetection: ChangeDetectionStrategy.OnPush,
337
+ providers: [
338
+ GroupExpandNotifierService,
339
+ PersistanceController,
340
+ ReorderController,
341
+ ]
342
+ }]
343
+ }], ctorParameters: function () { return [{ type: i1.ReorderController }, { type: undefined, decorators: [{
344
+ type: Optional
345
+ }, {
346
+ type: Inject,
347
+ args: [FS_LIST_DEFAULT_CONFIG]
348
+ }] }, { type: i2.FsScrollService, decorators: [{
349
+ type: Optional
350
+ }] }, { type: i3.MatDialogRef, decorators: [{
351
+ type: Optional
352
+ }] }, { type: i4.DrawerRef, decorators: [{
353
+ type: Optional
354
+ }] }, { type: i0.ElementRef }, { type: i5.SelectionDialog }, { type: i3.MatDialog }, { type: i0.ChangeDetectorRef }, { type: i6.GroupExpandNotifierService }, { type: i7.Router }, { type: i7.ActivatedRoute }, { type: i8.PersistanceController }, { type: i9.Location }]; }, propDecorators: { classFsList: [{
355
+ type: HostBinding,
356
+ args: ['class.fs-list']
357
+ }], noRowsHighlight: [{
358
+ type: HostBinding,
359
+ args: ['class.fs-list-no-highlight']
360
+ }], config: [{
361
+ type: Input,
362
+ args: ['config']
363
+ }], loaderLines: [{
364
+ type: Input
365
+ }], filtersReady: [{
366
+ type: Output
367
+ }], filterReference: [{
368
+ type: ViewChild,
369
+ args: [FilterComponent]
370
+ }], columnTemplates: [{
371
+ type: ContentChildren,
372
+ args: [FsListColumnDirective]
373
+ }], _emptyStateTemplate: [{
374
+ type: ContentChild,
375
+ args: [FsListEmptyStateDirective, { read: TemplateRef }]
376
+ }], headingTemplate: [{
377
+ type: ContentChild,
378
+ args: [FsListHeadingDirective, { read: TemplateRef }]
379
+ }], headingContainerTemplate: [{
380
+ type: ContentChild,
381
+ args: [FsListHeadingContainerDirective, { read: TemplateRef }]
382
+ }], subheadingTemplate: [{
383
+ type: ContentChild,
384
+ args: [FsListSubheadingDirective, { read: TemplateRef }]
385
+ }] } });
386
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvbGlzdC9saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9saXN0L2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUFFLGlCQUFpQixFQUMxQyxTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxTQUFTLEVBQ1QsU0FBUyxFQUNULFdBQVcsRUFDWCxRQUFRLEVBQ1IsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFL0MsT0FBTyxFQUFFLFNBQVMsRUFB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VyxFQUFFO2dCQUk3RCxrQkFBa0I7c0JBRHhCLFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIEhvc3RCaW5kaW5nLFxuICBPcHRpb25hbCxcbiAgQ29udGVudENoaWxkLFxuICBUZW1wbGF0ZVJlZixcbiAgT3V0cHV0LFxuICBBZnRlckNvbnRlbnRJbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHNraXAsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRnNTY3JvbGxTZXJ2aWNlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvc2Nyb2xsJztcbmltcG9ydCB7IEZpbHRlckNvbXBvbmVudCB9IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbHRlcic7XG5pbXBvcnQgeyBTZWxlY3Rpb25EaWFsb2cgfSBmcm9tICdAZmlyZXN0aXRjaC9zZWxlY3Rpb24nO1xuaW1wb3J0IHsgZ2V0Tm9ybWFsaXplZFBhdGggfSBmcm9tICdAZmlyZXN0aXRjaC9jb21tb24nO1xuaW1wb3J0IHsgRHJhd2VyUmVmIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZHJhd2VyJztcblxuaW1wb3J0IHsgY2xvbmVEZWVwLCBtZXJnZVdpdGggfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5pbXBvcnQgeyBMaXN0IH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9saXN0LWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgUmVvcmRlckNvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3Jlb3JkZXItY29udHJvbGxlcic7XG5cbmltcG9ydCB7IEZzTGlzdENvbHVtbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY29sdW1uL2NvbHVtbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRnNMaXN0RW1wdHlTdGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZW1wdHktc3RhdGUvZW1wdHktc3RhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZTX0xJU1RfREVGQVVMVF9DT05GSUcgfSBmcm9tICcuLi8uLi9mcy1saXN0LnByb3ZpZGVycyc7XG5pbXBvcnQge1xuICBGc0xpc3RBYnN0cmFjdFJvdyxcbiAgRnNMaXN0QWN0aW9uLFxuICBGc0xpc3RDb25maWcsIEZzTGlzdFBlcnNpdGFuY2UsIEZzTGlzdFNlbGVjdGlvbkNvbmZpZyxcbiAgRnNMaXN0VHJhY2tCeUZuLFxuICBGc0xpc3RUcmFja0J5VGFyZ2V0Um93Rm5cbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDdXN0b21pemVDb2xzRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vY3VzdG9taXplLWNvbHMvY3VzdG9taXplLWNvbHMuY29tcG9uZW50JztcbmltcG9ydCB7IEdyb3VwRXhwYW5kTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ3JvdXAtZXhwYW5kLW5vdGlmaWVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGVyc2lzdGFuY2VDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9wZXJzaXN0YW5jZS1jb250cm9sbGVyJztcbmltcG9ydCB7IEZzTGlzdEhlYWRpbmdDb250YWluZXJEaXJlY3RpdmUsIEZzTGlzdEhlYWRpbmdEaXJlY3RpdmUsIEZzTGlzdFN1YmhlYWRpbmdEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmcy1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICdsaXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAgR3JvdXBFeHBhbmROb3RpZmllclNlcnZpY2UsXG4gICAgUGVyc2lzdGFuY2VDb250cm9sbGVyLFxuICAgIFJlb3JkZXJDb250cm9sbGVyLFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZzTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0IHtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZzLWxpc3QnKSBjbGFzc0ZzTGlzdCA9IHRydWU7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mcy1saXN0LW5vLWhpZ2hsaWdodCcpXG4gIHB1YmxpYyBub1Jvd3NIaWdobGlnaHQ6IGJvb2xlYW47XG5cbiAgQElucHV0KCdjb25maWcnKVxuICBwdWJsaWMgc2V0IGNvbmZpZyhjb25maWc6IEZzTGlzdENvbmZpZykge1xuICAgIHRoaXMuX2luaXRXaXRoQ29uZmlnKGNvbmZpZylcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsb2FkZXJMaW5lcyA9IDM7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBmaWx0ZXJzUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgcHVibGljIGxpc3Q6IExpc3Q7XG4gIHB1YmxpYyBrZXl3b3JkVmlzaWJsZSA9IHRydWU7XG4gIHByaXZhdGUgbGlzdENvbHVtbkRpcmVjdGl2ZXM6IFF1ZXJ5TGlzdDxGc0xpc3RDb2x1bW5EaXJlY3RpdmU+O1xuXG4gIC8vIEV2ZW50IHdpbGwgZmlyZWQgaWYgYWN0aW9uIHJlbW92ZTogdHJ1ZSB3aWxsIGNsaWNrZWRcbiAgcHVibGljIHJvd1JlbW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBmaXJzdExvYWQgPSB0cnVlO1xuXG4gIC8vIHB1YmxpYyByZWFkb25seSBSZW9yZGVyU3RyYXRlZ3kgPSBSZW9yZGVyU3RyYXRlZ3k7XG5cbiAgcHJpdmF0ZSBfZmlsdGVyUmVmOiBGaWx0ZXJDb21wb25lbnQ7XG4gIHByaXZhdGUgX2ZpbHRlclBhcmFtc1JlYWR5ID0gZmFsc2U7XG4gIHByaXZhdGUgX2luRGlhbG9nID0gISF0aGlzLl9kaWFsb2dSZWYgfHwgISF0aGlzLl9kcmF3ZXJSZWY7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgQFZpZXdDaGlsZChGaWx0ZXJDb21wb25lbnQpXG4gIHByaXZhdGUgc2V0IGZpbHRlclJlZmVyZW5jZShjb21wb25lbnQpIHtcbiAgICB0aGlzLl9maWx0ZXJSZWYgPSBjb21wb25lbnQ7XG4gICAgdGhpcy5saXN0LmFjdGlvbnMuc2V0RmlsdGVyUmVmKGNvbXBvbmVudCk7XG5cbiAgICB0aGlzLl9lbWl0RmlsdGVyc1JlYWR5RXZlbnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgY29sdW1ucyB0byBjb25maWdcbiAgICogQ3JlYXRlIENvbHVtbiBNb2RlbCBpbnN0YW5jZXNcbiAgICpcbiAgICovXG4gIEBDb250ZW50Q2hpbGRyZW4oRnNMaXN0Q29sdW1uRGlyZWN0aXZlKVxuICBwcml2YXRlIHNldCBjb2x1bW5UZW1wbGF0ZXMobGlzdENvbHVtbkRpcmVjdGl2ZXM6IFF1ZXJ5TGlzdDxGc0xpc3RDb2x1bW5EaXJlY3RpdmU+KSB7XG4gICAgdGhpcy5saXN0Q29sdW1uRGlyZWN0aXZlcyA9IGxpc3RDb2x1bW5EaXJlY3RpdmVzO1xuICAgIGlmICh0aGlzLmxpc3QpIHtcbiAgICAgIHRoaXMubGlzdC50cmFuZm9ybVRlbXBsYXRlc1RvQ29sdW1ucyhsaXN0Q29sdW1uRGlyZWN0aXZlcyk7XG4gICAgfVxuICB9XG5cbiAgQENvbnRlbnRDaGlsZChGc0xpc3RFbXB0eVN0YXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHByaXZhdGUgc2V0IF9lbXB0eVN0YXRlVGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICBpZiAodGhpcy5saXN0KSB7XG4gICAgICB0aGlzLmxpc3QuZW1wdHlTdGF0ZVRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgfVxuICB9XG5cbiAgQENvbnRlbnRDaGlsZChGc0xpc3RIZWFkaW5nRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHB1YmxpYyBoZWFkaW5nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQENvbnRlbnRDaGlsZChGc0xpc3RIZWFkaW5nQ29udGFpbmVyRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHB1YmxpYyBoZWFkaW5nQ29udGFpbmVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQENvbnRlbnRDaGlsZChGc0xpc3RTdWJoZWFkaW5nRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHB1YmxpYyBzdWJoZWFkaW5nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlb3JkZXJDb250cm9sbGVyOiBSZW9yZGVyQ29udHJvbGxlcixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEZTX0xJU1RfREVGQVVMVF9DT05GSUcpIHByaXZhdGUgX2RlZmF1bHRPcHRpb25zLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZnNTY3JvbGw6IEZzU2Nyb2xsU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9kaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxhbnk+LFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2RyYXdlclJlZjogRHJhd2VyUmVmPGFueT4sXG4gICAgcHJpdmF0ZSBfZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBzZWxlY3Rpb25EaWFsb2c6IFNlbGVjdGlvbkRpYWxvZyxcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX2dyb3VwRXhwYW5kTm90aWZpZXI6IEdyb3VwRXhwYW5kTm90aWZpZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgX3JvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIF9wZXJzaXN0YW5jZTogUGVyc2lzdGFuY2VDb250cm9sbGVyLFxuICAgIHByaXZhdGUgX2xvY2F0aW9uOiBMb2NhdGlvbixcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gcmVmZXJlbmNlIGZvciBmaWx0ZXJcbiAgICovXG4gIHB1YmxpYyBnZXQgZmlsdGVyUmVmKCk6IEZpbHRlckNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlclJlZjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZ3JvdXBFbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmxpc3QuZGF0YUNvbnRyb2xsZXIuZ3JvdXBFbmFibGVkO1xuICB9XG5cbiAgcHVibGljIGdldCBoYXNGaWx0ZXJLZXl3b3JkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxpc3QuZmlsdGVySW5wdXQgJiYgdGhpcy5rZXl3b3JkVmlzaWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGFzU3RhdHVzKCkge1xuICAgIHJldHVybiB0aGlzLmxpc3Quc3RhdHVzICYmXG4gICAgICAodGhpcy5saXN0LnNvcnRpbmcuaXNEZWZpbmVkIHx8IHRoaXMubGlzdC5wYWdpbmcuZW5hYmxlZCkgJiZcbiAgICAgICghdGhpcy5yZW9yZGVyQ29udHJvbGxlci5lbmFibGVkIHx8ICh0aGlzLnJlb3JkZXJDb250cm9sbGVyLmVuYWJsZWQgJiYgdGhpcy5yZW9yZGVyQ29udHJvbGxlci5zdGF0dXMpKSAmJlxuICAgICAgKCh0aGlzLmxpc3Quc2Nyb2xsYWJsZSAmJiB0aGlzLmxpc3Quc2Nyb2xsYWJsZS5zdGF0dXMpIHx8ICF0aGlzLmxpc3Quc2Nyb2xsYWJsZSlcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGFnaW5hdG9yVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5saXN0LnBhZ2luZy5lbmFibGVkXG4gICAgICAmJiAhdGhpcy5maXJzdExvYWRcbiAgICAgICYmICF0aGlzLmxpc3Quc2Nyb2xsYWJsZVxuICAgICAgJiYgIXRoaXMubGlzdC5lbXB0eVN0YXRlRW5hYmxlZFxuICAgICAgJiYgdGhpcy5saXN0LmRhdGFDb250cm9sbGVyLnZpc2libGVSb3dzQ291bnQgPiAwXG4gICAgICAmJiB0aGlzLmxpc3QucGFnaW5nLnBhZ2VzID4gMTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgZ3JvdXBFbmFibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5saXN0Lmdyb3VwRW5hYmxlZCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpbHRlcnNRdWVyeSgpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5maWx0ZXJzUXVlcnk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIGlmKHRoaXMubGlzdC5hZnRlckluaXQpIHtcbiAgICAgIHRoaXMubGlzdC5hZnRlckluaXQodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX3N1YnNjcmliZVRvUmVtb3ZlUm93KCk7XG4gICAgdGhpcy5fc3Vic2NyaWJlVG9Hcm91cEV4cGFuZFN0YXR1c0NoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmxpc3QpIHtcbiAgICAgIHRoaXMubGlzdC5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIG5leHRQYWdlKCkge1xuICAgIHRoaXMubGlzdC5wYWdpbmcuZ29OZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgcHJldlBhZ2UoKSB7XG4gICAgdGhpcy5saXN0LnBhZ2luZy5nb1ByZXYoKTtcbiAgfVxuXG4gIHB1YmxpYyBmaXJzdFBhZ2UoKSB7XG4gICAgdGhpcy5saXN0LnBhZ2luZy5nb0ZpcnN0KCk7XG4gIH1cblxuICBwdWJsaWMgbGFzdFBhZ2UoKSB7XG4gICAgdGhpcy5saXN0LnBhZ2luZy5nb0xhc3QoKTtcbiAgfVxuXG4gIHB1YmxpYyByZWxvYWQoKSB7XG4gICAgdGhpcy5saXN0LnJlbG9hZCgpO1xuICB9XG5cbiAgcHVibGljIGdldERhdGEodHJhY2tCeT86IEZzTGlzdFRyYWNrQnlGbikge1xuICAgIHJldHVybiB0aGlzLmxpc3QuZ2V0RGF0YSh0cmFja0J5KTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNEYXRhKHRyYWNrQnk6IEZzTGlzdFRyYWNrQnlGbikge1xuICAgIHJldHVybiB0aGlzLmxpc3QuaGFzRGF0YSh0cmFja0J5KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVEYXRhKFxuICAgIHJvd3M6IEZzTGlzdEFic3RyYWN0Um93IHwgRnNMaXN0QWJzdHJhY3RSb3dbXSxcbiAgICB0cmFja0J5PzogRnNMaXN0VHJhY2tCeVRhcmdldFJvd0ZuXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxpc3QuZGF0YUNvbnRyb2xsZXIudXBkYXRlRGF0YShyb3dzLCB0cmFja0J5KTtcbiAgfVxuXG4gIHB1YmxpYyByZXBsYWNlUm93KFxuICAgIHJvdzogRnNMaXN0QWJzdHJhY3RSb3csXG4gICAgdHJhY2tCeT86IEZzTGlzdFRyYWNrQnlUYXJnZXRSb3dGblxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5saXN0LmRhdGFDb250cm9sbGVyLnJlcGxhY2VEYXRhKHJvdywgdHJhY2tCeSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU2VsZWN0aW9uQ29uZmlnKGNvbmZpZzogRnNMaXN0U2VsZWN0aW9uQ29uZmlnKSB7XG4gICAgdGhpcy5saXN0LnNlbGVjdGlvbi51cGRhdGVDb25maWcoY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldFNlbGVjdGlvbkFjdGlvbnMoKSB7XG4gICAgdGhpcy5saXN0LnNlbGVjdGlvbi5yZXNldEFjdGlvbnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBlbmFibGVTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy5saXN0LnNlbGVjdGlvbi5lbmFibGVTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNhYmxlU2VsZWN0aW9uKCkge1xuICAgIHRoaXMubGlzdC5zZWxlY3Rpb24uZGlzYWJsZVNlbGVjdGlvbigpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZURhdGEoZGF0YTogRnNMaXN0QWJzdHJhY3RSb3cgfCBGc0xpc3RBYnN0cmFjdFJvd1tdIHwgRnNMaXN0VHJhY2tCeVRhcmdldFJvd0ZuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5kYXRhQ29udHJvbGxlci5yZW1vdmVEYXRhKGRhdGEpO1xuICB9XG5cbiAgcHVibGljIHNldEhlYWRpbmcoaGVhZGluZzogc3RyaW5nKSB7XG4gICAgdGhpcy5saXN0LmhlYWRpbmcgPSBoZWFkaW5nO1xuICB9XG5cbiAgcHVibGljIHNldFN1YmhlYWRpbmcoc3ViaGVhZGluZzogc3RyaW5nKSB7XG4gICAgdGhpcy5saXN0LnN1YmhlYWRpbmcgPSBzdWJoZWFkaW5nO1xuICB9XG5cbiAgcHVibGljIHJlb3JkZXJTdGFydCgpIHtcbiAgICB0aGlzLnJlb3JkZXJDb250cm9sbGVyLmVuYWJsZVJlb3JkZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyByZW9yZGVyRmluaXNoKCkge1xuICAgIHRoaXMucmVvcmRlckNvbnRyb2xsZXIuZGlzYWJsZVJlb3JkZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRBY3Rpb25zKGFjdGlvbnM6IEZzTGlzdEFjdGlvbltdKSB7XG4gICAgaWYgKGFjdGlvbnMpIHtcbiAgICAgIHRoaXMubGlzdC5hY3Rpb25zLmNsZWFyQWN0aW9ucygpO1xuICAgICAgdGhpcy5saXN0LmFjdGlvbnMuc2V0QWN0aW9ucyhhY3Rpb25zKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyUmVhZHkoKSB7XG4gICAgdGhpcy5saXN0LmZpbHRlcnNSZWFkeSQubmV4dCgpO1xuICAgIHRoaXMuX2ZpbHRlclBhcmFtc1JlYWR5ID0gdHJ1ZTtcbiAgICB0aGlzLl9lbWl0RmlsdGVyc1JlYWR5RXZlbnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdmlzaWJpbGl0eSBmb3Igc3BlY2lmaWMgY29sdW1uXG4gICAqL1xuICBwdWJsaWMgY29sdW1uVmlzaWJpbGl0eShuYW1lOiBzdHJpbmcsIHNob3c6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbHVtbnNWaXNpYmlsaXR5KFsge25hbWUsIHNob3cgfSBdKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB2aXNpYmlsaXR5IGZvciBsaXN0IG9mIHNwZWNpZmljIGNvbHVtbnNcbiAgICovXG4gIHB1YmxpYyBjb2x1bW5zVmlzaWJpbGl0eShjb2x1bW5zOiB7IG5hbWU6IHN0cmluZywgc2hvdzogYm9vbGVhbiB9W10pIHtcbiAgICB0aGlzLmxpc3QuY29sdW1ucy51cGRhdGVWaXNpYmlsaXR5Rm9yQ29scyhjb2x1bW5zKTtcbiAgfVxuXG4gIHByaXZhdGUgX2VtaXRGaWx0ZXJzUmVhZHlFdmVudCgpOiB2b2lkIHtcbiAgICBpZiAoISF0aGlzLmZpbHRlclJlZiAmJiB0aGlzLl9maWx0ZXJQYXJhbXNSZWFkeSkge1xuICAgICAgdGhpcy5maWx0ZXJzUmVhZHkuZW1pdCgpO1xuXG4gICAgICB0aGlzLmtleXdvcmRWaXNpYmxlID0gdGhpcy5maWx0ZXJSZWYuaGFzS2V5d29yZDtcbiAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgY29uZmlnIGZvciBsaXN0XG4gICAqIEBwYXJhbSBjb25maWdcbiAgICovXG4gIHByaXZhdGUgX2luaXRXaXRoQ29uZmlnKGNvbmZpZzogRnNMaXN0Q29uZmlnKSB7XG4gICAgaWYgKHRoaXMubGlzdCkge1xuICAgICAgdGhpcy5saXN0LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0T3B0cyA9IHRoaXMuX2RlZmF1bHRPcHRpb25zXG4gICAgICA/IGNsb25lRGVlcCh0aGlzLl9kZWZhdWx0T3B0aW9ucylcbiAgICAgIDoge307XG4gICAgY29uc3QgbGlzdENvbmZpZyA9IG1lcmdlV2l0aChkZWZhdWx0T3B0cywgY29uZmlnLCB0aGlzLl9jb25maWdNZXJnZUN1c3RvbWl6ZXIpO1xuXG4gICAgaWYgKGxpc3RDb25maWcucGVyc2lzdCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX3Jlc3RvcmVQZXJzaXN0YW5jZShsaXN0Q29uZmlnLnBlcnNpc3QpO1xuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZUN1c3RvbWl6ZUFjdGlvbihsaXN0Q29uZmlnLmFjdGlvbnMpO1xuXG4gICAgdGhpcy5saXN0ID0gbmV3IExpc3QoXG4gICAgICB0aGlzLl9lbCxcbiAgICAgIGxpc3RDb25maWcsXG4gICAgICB0aGlzLmZzU2Nyb2xsLFxuICAgICAgdGhpcy5zZWxlY3Rpb25EaWFsb2csXG4gICAgICB0aGlzLl9yb3V0ZXIsXG4gICAgICB0aGlzLl9yb3V0ZSxcbiAgICAgIHRoaXMuX3BlcnNpc3RhbmNlLFxuICAgICAgdGhpcy5faW5EaWFsb2csXG4gICAgKTtcblxuICAgIHRoaXMubm9Sb3dzSGlnaGxpZ2h0ID0gdGhpcy5saXN0LnJvd0hpZ2hsaWdodCA9PSBmYWxzZTtcblxuICAgIHRoaXMuX3dhaXRGaXJzdExvYWQoKTtcblxuICAgIHRoaXMucmVvcmRlckNvbnRyb2xsZXIuaW5pdFdpdGhDb25maWcoXG4gICAgICBjb25maWcucmVvcmRlcixcbiAgICAgIHRoaXMubGlzdC5kYXRhQ29udHJvbGxlcixcbiAgICAgIHRoaXMubGlzdC5hY3Rpb25zLFxuICAgICAgdGhpcy5saXN0LnNlbGVjdGlvbixcbiAgICApO1xuXG4gICAgaWYgKHRoaXMubGlzdENvbHVtbkRpcmVjdGl2ZXMpIHtcbiAgICAgIHRoaXMubGlzdC50cmFuZm9ybVRlbXBsYXRlc1RvQ29sdW1ucyh0aGlzLmxpc3RDb2x1bW5EaXJlY3RpdmVzKTtcbiAgICB9XG4gICAgdGhpcy5fbGlzdGVuU29ydGluZ0NoYW5nZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYWN0aW9uIHdpdGggY3VzdG9taXplIGZsYWcgYW5kIHJlLWRlY2xhcmUgY2xpY2sgZnVuY3Rpb24gZm9yIEN1c3RvbWl6ZUNvbHNEaWFsb2dcbiAgICogQHBhcmFtIGFjdGlvbnNcbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZUN1c3RvbWl6ZUFjdGlvbihhY3Rpb25zOiBGc0xpc3RBY3Rpb25bXSkge1xuICAgIGNvbnN0IGN1c3RvbWl6ZUFjdGlvbiA9IGFjdGlvbnM/LmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLmN1c3RvbWl6ZSk7XG5cbiAgICBpZiAoY3VzdG9taXplQWN0aW9uKSB7XG4gICAgICBjb25zdCBhY3Rpb25DbGlja0ZuID0gY3VzdG9taXplQWN0aW9uLmNsaWNrO1xuXG4gICAgICBjdXN0b21pemVBY3Rpb24uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIGlmIChhY3Rpb25DbGlja0ZuKSB7XG4gICAgICAgICAgYWN0aW9uQ2xpY2tGbihudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGlhbG9nLm9wZW4oQ3VzdG9taXplQ29sc0RpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMubGlzdC5jb2x1bW5zLmNvbHVtbnNGb3JEaWFsb2csXG4gICAgICAgICAgICBjaGFuZ2VGbjogdGhpcy5saXN0LmNvbHVtbnMuY2hhbmdlRm4sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubGlzdC5vbkRlc3Ryb3kkKSxcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgdGhpcy5saXN0LmNvbHVtbnMudXBkYXRlVmlzaWJpbGl0eUZvckNvbHMoZGF0YSk7XG5cbiAgICAgICAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHNvcnRpbmcgaW4gZmlsdGVyXG4gICAqL1xuICBwcml2YXRlIF9saXN0ZW5Tb3J0aW5nQ2hhbmdlKCkge1xuICAgIHRoaXMubGlzdC5zb3J0aW5nXG4gICAgICAuc29ydGluZ0NoYW5nZWQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubGlzdC5vbkRlc3Ryb3kkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoc29ydCkgPT4ge1xuICAgICAgICB0aGlzLl9maWx0ZXJSZWYudXBkYXRlU29ydChzb3J0KTtcbiAgICAgIH0pXG4gIH1cblxuICBwcml2YXRlIF9zdWJzY3JpYmVUb1JlbW92ZVJvdygpIHtcbiAgICB0aGlzLnJvd1JlbW92ZWRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSlcbiAgICAgIC5zdWJzY3JpYmUoKHJvdykgPT4ge1xuICAgICAgICB0aGlzLmxpc3QuZGF0YUNvbnRyb2xsZXIucmVtb3ZlRGF0YShyb3cpO1xuICAgICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgX3N1YnNjcmliZVRvR3JvdXBFeHBhbmRTdGF0dXNDaGFuZ2UoKSB7XG4gICAgaWYgKHRoaXMubGlzdC5kYXRhQ29udHJvbGxlci5oYXNHcm91cHMpIHtcbiAgICAgIHRoaXMuX2dyb3VwRXhwYW5kTm90aWZpZXIuZXhwYW5kU3RhdHVzQ2hhbmdlJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyb3cpID0+IHtcbiAgICAgICAgICB0aGlzLmxpc3QuZGF0YUNvbnRyb2xsZXIudG9nZ2xlUm93R3JvdXAocm93KTtcbiAgICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF93YWl0Rmlyc3RMb2FkKCkge1xuICAgIHRoaXMubGlzdC5sb2FkaW5nJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHNraXAoMSksXG4gICAgICAgIGZpbHRlcigodmFsdWUpID0+IHZhbHVlID09PSBmYWxzZSksXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmxpc3Qub25EZXN0cm95JCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmZpcnN0TG9hZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9jb25maWdNZXJnZUN1c3RvbWl6ZXIob2JqVmFsdWU6IGFueSwgc3JjVmFsdWU6IGFueSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9ialZhbHVlKSkge1xuICAgICAgcmV0dXJuIG9ialZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3Jlc3RvcmVQZXJzaXN0YW5jZShwZXJzaXN0Q29uZmlnOiBGc0xpc3RQZXJzaXRhbmNlKSB7XG4gICAgY29uc3QgbmFtZXNwYWNlID0gZ2V0Tm9ybWFsaXplZFBhdGgodGhpcy5fbG9jYXRpb24pO1xuICAgIHRoaXMuX3BlcnNpc3RhbmNlLnNldENvbmZpZyhwZXJzaXN0Q29uZmlnLCBuYW1lc3BhY2UsIHRoaXMuX2luRGlhbG9nKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZzLWxpc3QtY29udGFpbmVyXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnaGFzLWZpbHRlci1rZXl3b3JkJzogaGFzRmlsdGVyS2V5d29yZCxcbiAgICAgICdoYXMtZmlsdGVycyc6IGxpc3QuZmlsdGVyQ29uZmlnPy5pdGVtcy5sZW5ndGgsXG4gICAgICAnaGFzLWhlYWRpbmcnOiBsaXN0LmhlYWRpbmcgfHwgaGVhZGluZ1RlbXBsYXRlLFxuICAgICAgJ2hhcy1zdGF0dXMnOiBoYXNTdGF0dXMsXG4gICAgICAnaGFzLWNoaXBzJzogbGlzdC5jaGlwcyxcbiAgICAgICdoYXMtYWN0aW9ucyc6IGxpc3QuYWN0aW9ucy5oYXNBY3Rpb25zLFxuICAgICAgJ2ZpcnN0LWxvYWQnOiBmaXJzdExvYWQsXG4gICAgICAnbG9hZGluZyc6IGxpc3QubG9hZGluZyQgfCBhc3luY1xuICAgIH1cIj5cbiAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3RDb250YWluZXJDb250ZW50XCI+PC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2xpc3RDb250YWluZXJDb250ZW50PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibGlzdC5kYXRhQ29udHJvbGxlci52aXNpYmxlUm93cyQgfCBhc3luYyBhcyBsaXN0RGF0YVwiPlxuICAgIDxkaXYgY2xhc3M9XCJmcy1saXN0LWhlYWRlci1jb250YWluZXJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImZzLWxpc3QtaGVhZGVyXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICduby13cmFwJzogcmVvcmRlckNvbnRyb2xsZXIubWFudWFsUmVvcmRlckFjdGl2YXRlZCB8fCAhbGlzdC5maWx0ZXJDb25maWc/Lml0ZW1zLmxlbmd0aCB9XCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiaGFzRmlsdGVyS2V5d29yZFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWFkaW5nXCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZnMtZmlsdGVyXG4gICAgICAgICAgICBjbGFzcz1cImZzLWxpc3QtZmlsdGVyXCJcbiAgICAgICAgICAgICpuZ0lmPVwibGlzdC5maWx0ZXJDb25maWdcIlxuICAgICAgICAgICAgW2ZpbHRlcl09XCJsaXN0LmZpbHRlckNvbmZpZ1wiXG4gICAgICAgICAgICBbc2hvd1NvcnRCeV09XCIhbGlzdC5zdGF0dXNcIlxuICAgICAgICAgICAgW3Nob3dGaWx0ZXJJbnB1dF09XCJsaXN0LmZpbHRlcklucHV0XCJcbiAgICAgICAgICAgIChyZWFkeSk9XCJmaWx0ZXJSZWFkeSgpXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGZzRmlsdGVyU3RhdHVzQmFyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWhhc0ZpbHRlcktleXdvcmRcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhlYWRpbmdcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc1N0YXR1c1wiPlxuICAgICAgICAgICAgICA8ZnMtbGlzdC1zdGF0dXNcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZzLWxpc3Qtc3RhdHVzXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdoaWRkZW4tbW9iaWxlJzogIWxpc3Quc3RhdHVzIH1cIlxuICAgICAgICAgICAgICAgIFtyb3dzXT1cImxpc3REYXRhXCJcbiAgICAgICAgICAgICAgICBbc29ydGluZ109XCJsaXN0LnNvcnRpbmdcIlxuICAgICAgICAgICAgICAgIFtwYWdpbmddPVwibGlzdC5wYWdpbmdcIlxuICAgICAgICAgICAgICAgIFtmaXJzdExvYWRdPVwiZmlyc3RMb2FkXCJcbiAgICAgICAgICAgICAgICBbc2Nyb2xsYWJsZV09XCJsaXN0LnNjcm9sbGFibGUgfHwgbGlzdC5wYWdpbmcubG9hZE1vcmVFbmFibGVkXCI+XG4gICAgICAgICAgICAgIDwvZnMtbGlzdC1zdGF0dXM+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2ZzLWZpbHRlcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2ZzLWxpc3QtY29udGVudF1cIj48L25nLWNvbnRlbnQ+XG5cbiAgICA8IS0tIFRhYmxlIGltcGxlbWVudGF0aW9uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmcy1saXN0LXRhYmxlLWNvbnRhaW5lclwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmaXJzdExvYWQgJiYgbGlzdERhdGEubGVuZ3RoID4gMCAmJiAhbGlzdC5lbXB0eVN0YXRlRW5hYmxlZFwiPlxuICAgICAgICA8dGFibGUgY2xhc3M9XCJmcy1saXN0LXRhYmxlXCIgcm9sZT1cImdyaWRcIiBbZnNMaXN0Q29udGVudEluaXRdPVwibGlzdC5hZnRlckNvbnRlbnRJbml0XCI+XG4gICAgICAgICAgPHRoZWFkXG4gICAgICAgICAgICBmcy1saXN0LWhlYWRcbiAgICAgICAgICAgIGNsYXNzPVwiZnMtbGlzdC1oZWFkXCJcbiAgICAgICAgICAgIHJvbGU9XCJyb3dncm91cFwiXG4gICAgICAgICAgICAqbmdJZj1cImxpc3QuY29sdW1ucy5oYXNIZWFkZXJcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwibGlzdC5jb2x1bW5zLnRoZWFkQ2xhc3NcIlxuICAgICAgICAgICAgW2NvbHVtbnNdPVwibGlzdC5jb2x1bW5zLnZpc2libGVDb2x1bW5zJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtzb3J0aW5nXT1cImxpc3Quc29ydGluZ1wiXG4gICAgICAgICAgICBbc2VsZWN0aW9uXT1cImxpc3Quc2VsZWN0aW9uXCJcbiAgICAgICAgICAgIFtoYXNSb3dBY3Rpb25zXT1cImxpc3QuaGFzUm93QWN0aW9uc1wiXG4gICAgICAgICAgICBbYWN0aXZlRmlsdGVyc0NvdW50XT1cImxpc3QuYWN0aXZlRmlsdGVyc0NvdW50JCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZW9yZGVyRW5hYmxlZF09XCJyZW9yZGVyQ29udHJvbGxlci5lbmFibGVkJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZW9yZGVyUG9zaXRpb25dPVwicmVvcmRlckNvbnRyb2xsZXIucG9zaXRpb24kIHwgYXN5bmNcIlxuICAgICAgICAgICAgW3Jlb3JkZXJTdHJhdGVneV09XCJyZW9yZGVyQ29udHJvbGxlci5zdHJhdGVneSQgfCBhc3luY1wiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvdGhlYWQ+XG5cbiAgICAgICAgICA8dGJvZHlcbiAgICAgICAgICAgIGZzLWxpc3QtYm9keVxuICAgICAgICAgICAgZnNMaXN0RHJhZ2dhYmxlTGlzdFxuICAgICAgICAgICAgY2xhc3M9XCJmcy1saXN0LWJvZHlcIlxuICAgICAgICAgICAgcm9sZT1cInJvd2dyb3VwXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhIShyZW9yZGVyQ29udHJvbGxlci5yZW9yZGVyRGlzYWJsZWQkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgIFtyb3dzXT1cImxpc3REYXRhXCJcbiAgICAgICAgICAgIFtyb3dBY3Rpb25zUmF3XT1cImxpc3Qucm93QWN0aW9uc1Jhd1wiXG4gICAgICAgICAgICBbZ3JvdXBBY3Rpb25zUmF3XT1cImxpc3QuZ3JvdXBBY3Rpb25zUmF3XCJcbiAgICAgICAgICAgIFtoYXNSb3dBY3Rpb25zXT1cImxpc3QuaGFzUm93QWN0aW9uc1wiXG4gICAgICAgICAgICBbcm93RXZlbnRzXT1cImxpc3Qucm93RXZlbnRzXCJcbiAgICAgICAgICAgIFtyb3dDbGFzc109XCJsaXN0LnJvd0NsYXNzXCJcbiAgICAgICAgICAgIFtjb2x1bW5zXT1cImxpc3QuY29sdW1ucy52aXNpYmxlQ29sdW1ucyQgfCBhc3luY1wiXG4gICAgICAgICAgICBbcmVzdG9yZU1vZGVdPVwibGlzdC5yZXN0b3JlTW9kZVwiXG4gICAgICAgICAgICBbc2VsZWN0aW9uXT1cImxpc3Quc2VsZWN0aW9uXCJcbiAgICAgICAgICAgIFtyb3dSZW1vdmVkXT1cInJvd1JlbW92ZWRcIlxuICAgICAgICAgICAgW2FjdGl2ZUZpbHRlcnNDb3VudF09XCJsaXN0LmFjdGl2ZUZpbHRlcnNDb3VudCQgfCBhc3luY1wiXG4gICAgICAgICAgICBbcmVvcmRlckVuYWJsZWRdPVwicmVvcmRlckNvbnRyb2xsZXIuZW5hYmxlZCQgfCBhc3luY1wiXG4gICAgICAgICAgICBbcmVvcmRlclBvc2l0aW9uXT1cInJlb3JkZXJDb250cm9sbGVyLnBvc2l0aW9uJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZW9yZGVyU3RyYXRlZ3ldPVwicmVvcmRlckNvbnRyb2xsZXIuc3RyYXRlZ3kkIHwgYXN5bmNcIlxuICAgICAgICAgICAgW3Jlb3JkZXJNdWx0aXBsZV09XCJyZW9yZGVyQ29udHJvbGxlci5tdWx0aXBsZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvdGJvZHk+XG5cbiAgICAgICAgICA8dGZvb3RcbiAgICAgICAgICAgIGZzLWxpc3QtZm9vdGVyXG4gICAgICAgICAgICBjbGFzcz1cImZzLWxpc3QtZm9vdGVyXCJcbiAgICAgICAgICAgICpuZ0lmPVwibGlzdC5jb2x1bW5zLmhhc0Zvb3RlclwiXG4gICAgICAgICAgICBbY29sdW1uc109XCJsaXN0LmNvbHVtbnMudmlzaWJsZUNvbHVtbnMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgW3NlbGVjdGlvbl09XCJsaXN0LnNlbGVjdGlvblwiXG4gICAgICAgICAgICBbaGFzUm93QWN0aW9uc109XCJsaXN0Lmhhc1Jvd0FjdGlvbnNcIlxuICAgICAgICAgICAgW2FjdGl2ZUZpbHRlcnNDb3VudF09XCJsaXN0LmFjdGl2ZUZpbHRlcnNDb3VudCQgfCBhc3luY1wiXG4gICAgICAgICAgICBbcmVvcmRlckVuYWJsZWRdPVwicmVvcmRlckNvbnRyb2xsZXIuZW5hYmxlZCQgfCBhc3luY1wiXG4gICAgICAgICAgICBbcmVvcmRlclBvc2l0aW9uXT1cInJlb3JkZXJDb250cm9sbGVyLnBvc2l0aW9uJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtyZW9yZGVyU3RyYXRlZ3ldPVwicmVvcmRlckNvbnRyb2xsZXIuc3RyYXRlZ3kkIHwgYXN5bmNcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L3Rmb290PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8ZnMtbGlzdC1sb2FkZXJcbiAgICAgICAgKm5nSWY9XCJmaXJzdExvYWRcIlxuICAgICAgICBbY29sdW1uc109XCJsaXN0LmNvbHVtbnMuY29sdW1uc1wiXG4gICAgICAgIFtsb2FkZXJMaW5lc109XCJsb2FkZXJMaW5lc1wiPlxuICAgICAgPC9mcy1saXN0LWxvYWRlcj5cbiAgICA8L2Rpdj5cblxuICAgIDxmcy1saXN0LXBhZ2luYXRpb25cbiAgICAgICpuZ0lmPVwicGFnaW5hdG9yVmlzaWJsZVwiXG4gICAgICBjbGFzcz1cImZzLWxpc3QtcGFnaW5hdGlvblwiXG4gICAgICBbcm93c109XCJsaXN0RGF0YVwiXG4gICAgICBbcGFnaW5hdGlvbl09XCJsaXN0LnBhZ2luZ1wiPlxuICAgIDwvZnMtbGlzdC1wYWdpbmF0aW9uPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmaXJzdExvYWRcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cImxpc3REYXRhLmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgY2xhc3M9XCJmcy1saXN0LW5vLXJlc3VsdHMtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwibGlzdC5ub1Jlc3VsdHM/Lm1lc3NhZ2UgJiYgIWxpc3QuZW1wdHlTdGF0ZUVuYWJsZWRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmcy1saXN0LW5vLXJlc3VsdHNcIj5cbiAgICAgICAgICB7eyBsaXN0Lm5vUmVzdWx0cz8ubWVzc2FnZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxpc3QuZW1wdHlTdGF0ZUVuYWJsZWRcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlzdC5lbXB0eVN0YXRlVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaGVhZGluZz5cbiAgPGRpdiBjbGFzcz1cImhlYWRpbmctY29udGFpbmVyXCIgKm5nSWY9XCJoZWFkaW5nQ29udGFpbmVyVGVtcGxhdGUgfHwgbGlzdC5oZWFkaW5nIHx8IGxpc3Quc3ViaGVhZGluZyB8fCBoZWFkaW5nVGVtcGxhdGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGluZ0NvbnRhaW5lclRlbXBsYXRlOyBlbHNlIGhlYWRpbmdDb250YWluZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVhZGluZ0NvbnRhaW5lclRlbXBsYXRlXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgdGVtcGxhdGU6IGhlYWRpbmdDb250YWluZXIgfVwiPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNoZWFkaW5nQ29udGFpbmVyPlxuICAgICAgPGgyIGNsYXNzPVwiaGVhZGluZ1wiICpuZ0lmPVwibGlzdC5oZWFkaW5nIHx8IGhlYWRpbmdUZW1wbGF0ZVwiPlxuICAgICAgICB7e2xpc3QuaGVhZGluZ319XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVhZGluZ1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2gyPlxuICAgICAgPGRpdiBjbGFzcz1cInNtYWxsIHN1YmhlYWRpbmdcIiAqbmdJZj1cImxpc3Quc3ViaGVhZGluZyB8fCBzdWJoZWFkaW5nVGVtcGxhdGVcIj5cbiAgICAgICAge3tsaXN0LnN1YmhlYWRpbmd9fVxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInN1YmhlYWRpbmdUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19