@skyux/ag-grid 8.7.2 → 9.0.0-alpha.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 (100) hide show
  1. package/documentation.json +207 -207
  2. package/{esm2020 → esm2022}/lib/modules/ag-grid/ag-grid-adapter.service.mjs +8 -11
  3. package/esm2022/lib/modules/ag-grid/ag-grid-data-manager-adapter.directive.mjs +240 -0
  4. package/{esm2020 → esm2022}/lib/modules/ag-grid/ag-grid-row-delete.component.mjs +6 -6
  5. package/esm2022/lib/modules/ag-grid/ag-grid-row-delete.directive.mjs +268 -0
  6. package/esm2022/lib/modules/ag-grid/ag-grid-wrapper.component.mjs +259 -0
  7. package/{esm2020 → esm2022}/lib/modules/ag-grid/ag-grid.module.mjs +51 -51
  8. package/esm2022/lib/modules/ag-grid/ag-grid.service.mjs +457 -0
  9. package/esm2022/lib/modules/ag-grid/cell-editors/cell-editor-autocomplete/cell-editor-autocomplete.component.mjs +72 -0
  10. package/{esm2020 → esm2022}/lib/modules/ag-grid/cell-editors/cell-editor-autocomplete/cell-editor-autocomplete.module.mjs +9 -9
  11. package/esm2022/lib/modules/ag-grid/cell-editors/cell-editor-currency/cell-editor-currency.component.mjs +95 -0
  12. package/{esm2020 → esm2022}/lib/modules/ag-grid/cell-editors/cell-editor-currency/cell-editor-currency.module.mjs +9 -9
  13. package/esm2022/lib/modules/ag-grid/cell-editors/cell-editor-datepicker/cell-editor-datepicker.component.mjs +119 -0
  14. package/{esm2020 → esm2022}/lib/modules/ag-grid/cell-editors/cell-editor-datepicker/cell-editor-datepicker.module.mjs +5 -5
  15. package/esm2022/lib/modules/ag-grid/cell-editors/cell-editor-lookup/cell-editor-lookup.component.mjs +109 -0
  16. package/{esm2020 → esm2022}/lib/modules/ag-grid/cell-editors/cell-editor-lookup/cell-editor-lookup.module.mjs +13 -13
  17. package/esm2022/lib/modules/ag-grid/cell-editors/cell-editor-number/cell-editor-number.component.mjs +77 -0
  18. package/{esm2020 → esm2022}/lib/modules/ag-grid/cell-editors/cell-editor-number/cell-editor-number.module.mjs +5 -5
  19. package/esm2022/lib/modules/ag-grid/cell-editors/cell-editor-text/cell-editor-text.component.mjs +75 -0
  20. package/{esm2020 → esm2022}/lib/modules/ag-grid/cell-editors/cell-editor-text/cell-editor-text.module.mjs +5 -5
  21. package/esm2022/lib/modules/ag-grid/cell-renderers/cell-renderer-currency/cell-renderer-currency-validator.component.mjs +42 -0
  22. package/esm2022/lib/modules/ag-grid/cell-renderers/cell-renderer-currency/cell-renderer-currency.component.mjs +49 -0
  23. package/{esm2020 → esm2022}/lib/modules/ag-grid/cell-renderers/cell-renderer-currency/cell-renderer-currency.module.mjs +15 -15
  24. package/esm2022/lib/modules/ag-grid/cell-renderers/cell-renderer-lookup/cell-renderer-lookup.component.mjs +31 -0
  25. package/{esm2020 → esm2022}/lib/modules/ag-grid/cell-renderers/cell-renderer-lookup/cell-renderer-lookup.module.mjs +5 -5
  26. package/esm2022/lib/modules/ag-grid/cell-renderers/cell-renderer-row-selector/cell-renderer-row-selector.component.mjs +78 -0
  27. package/{esm2020 → esm2022}/lib/modules/ag-grid/cell-renderers/cell-renderer-row-selector/cell-renderer-row-selector.module.mjs +5 -5
  28. package/esm2022/lib/modules/ag-grid/cell-renderers/cell-renderer-validator-tooltip/cell-renderer-validator-tooltip.component.mjs +38 -0
  29. package/{esm2020 → esm2022}/lib/modules/ag-grid/cell-renderers/cell-renderer-validator-tooltip/cell-renderer-validator-tooltip.module.mjs +5 -5
  30. package/esm2022/lib/modules/ag-grid/cell-validator/ag-grid-cell-validator-tooltip.component.mjs +88 -0
  31. package/{esm2020 → esm2022}/lib/modules/ag-grid/cell-validator/ag-grid-cell-validator.module.mjs +5 -5
  32. package/esm2022/lib/modules/ag-grid/header/header-group.component.mjs +97 -0
  33. package/esm2022/lib/modules/ag-grid/header/header.component.mjs +144 -0
  34. package/{esm2020 → esm2022}/lib/modules/ag-grid/types/header-group-info.mjs +4 -4
  35. package/{esm2020 → esm2022}/lib/modules/ag-grid/types/header-info.mjs +4 -4
  36. package/esm2022/lib/modules/shared/sky-ag-grid-resources.module.mjs +74 -0
  37. package/fesm2022/skyux-ag-grid.mjs +3025 -0
  38. package/fesm2022/skyux-ag-grid.mjs.map +1 -0
  39. package/lib/modules/ag-grid/ag-grid-data-manager-adapter.directive.d.ts +1 -1
  40. package/lib/modules/ag-grid/ag-grid-row-delete.directive.d.ts +1 -1
  41. package/lib/modules/ag-grid/cell-renderers/cell-renderer-currency/cell-renderer-currency-validator.component.d.ts +1 -1
  42. package/lib/modules/ag-grid/cell-renderers/cell-renderer-currency/cell-renderer-currency.component.d.ts +1 -1
  43. package/lib/modules/ag-grid/cell-renderers/cell-renderer-validator-tooltip/cell-renderer-validator-tooltip.component.d.ts +1 -1
  44. package/lib/modules/ag-grid/cell-validator/ag-grid-cell-validator-tooltip.component.d.ts +1 -1
  45. package/package.json +19 -25
  46. package/esm2020/lib/modules/ag-grid/ag-grid-data-manager-adapter.directive.mjs +0 -233
  47. package/esm2020/lib/modules/ag-grid/ag-grid-row-delete.directive.mjs +0 -264
  48. package/esm2020/lib/modules/ag-grid/ag-grid-wrapper.component.mjs +0 -247
  49. package/esm2020/lib/modules/ag-grid/ag-grid.service.mjs +0 -453
  50. package/esm2020/lib/modules/ag-grid/cell-editors/cell-editor-autocomplete/cell-editor-autocomplete.component.mjs +0 -75
  51. package/esm2020/lib/modules/ag-grid/cell-editors/cell-editor-currency/cell-editor-currency.component.mjs +0 -98
  52. package/esm2020/lib/modules/ag-grid/cell-editors/cell-editor-datepicker/cell-editor-datepicker.component.mjs +0 -122
  53. package/esm2020/lib/modules/ag-grid/cell-editors/cell-editor-lookup/cell-editor-lookup.component.mjs +0 -112
  54. package/esm2020/lib/modules/ag-grid/cell-editors/cell-editor-number/cell-editor-number.component.mjs +0 -80
  55. package/esm2020/lib/modules/ag-grid/cell-editors/cell-editor-text/cell-editor-text.component.mjs +0 -78
  56. package/esm2020/lib/modules/ag-grid/cell-renderers/cell-renderer-currency/cell-renderer-currency-validator.component.mjs +0 -45
  57. package/esm2020/lib/modules/ag-grid/cell-renderers/cell-renderer-currency/cell-renderer-currency.component.mjs +0 -52
  58. package/esm2020/lib/modules/ag-grid/cell-renderers/cell-renderer-lookup/cell-renderer-lookup.component.mjs +0 -34
  59. package/esm2020/lib/modules/ag-grid/cell-renderers/cell-renderer-row-selector/cell-renderer-row-selector.component.mjs +0 -80
  60. package/esm2020/lib/modules/ag-grid/cell-renderers/cell-renderer-validator-tooltip/cell-renderer-validator-tooltip.component.mjs +0 -41
  61. package/esm2020/lib/modules/ag-grid/cell-validator/ag-grid-cell-validator-tooltip.component.mjs +0 -90
  62. package/esm2020/lib/modules/ag-grid/header/header-group.component.mjs +0 -95
  63. package/esm2020/lib/modules/ag-grid/header/header.component.mjs +0 -141
  64. package/esm2020/lib/modules/shared/sky-ag-grid-resources.module.mjs +0 -74
  65. package/fesm2015/skyux-ag-grid.mjs +0 -2996
  66. package/fesm2015/skyux-ag-grid.mjs.map +0 -1
  67. package/fesm2020/skyux-ag-grid.mjs +0 -3012
  68. package/fesm2020/skyux-ag-grid.mjs.map +0 -1
  69. /package/{esm2020 → esm2022}/index.mjs +0 -0
  70. /package/{esm2020 → esm2022}/lib/modules/ag-grid/apply-lookup-properties-defaults.mjs +0 -0
  71. /package/{esm2020 → esm2022}/lib/modules/ag-grid/icons/icon-map.mjs +0 -0
  72. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/ag-grid-row-delete-cancel-args.mjs +0 -0
  73. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/ag-grid-row-delete-config.mjs +0 -0
  74. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/ag-grid-row-delete-confirm-args.mjs +0 -0
  75. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/ag-grid-row-delete-contents.mjs +0 -0
  76. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/autocomplete-properties.mjs +0 -0
  77. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-class.mjs +0 -0
  78. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-editor-autocomplete-params.mjs +0 -0
  79. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-editor-currency-params.mjs +0 -0
  80. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-editor-datepicker-params.mjs +0 -0
  81. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-editor-initial-action.mjs +0 -0
  82. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-editor-lookup-params.mjs +0 -0
  83. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-editor-number-params.mjs +0 -0
  84. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-editor-text-params.mjs +0 -0
  85. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-editor-utils.mjs +0 -0
  86. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-renderer-currency-params.mjs +0 -0
  87. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-renderer-lookup-params.mjs +0 -0
  88. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-renderer-validator-params.mjs +0 -0
  89. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-type.mjs +0 -0
  90. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/currency-properties.mjs +0 -0
  91. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/datepicker-properties.mjs +0 -0
  92. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/header-class.mjs +0 -0
  93. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/header-group-params.mjs +0 -0
  94. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/header-params.mjs +0 -0
  95. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/lookup-properties.mjs +0 -0
  96. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/number-properties.mjs +0 -0
  97. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/sky-grid-options.mjs +0 -0
  98. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/text-properties.mjs +0 -0
  99. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/validator-properties.mjs +0 -0
  100. /package/{esm2020 → esm2022}/skyux-ag-grid.mjs +0 -0
@@ -1,453 +0,0 @@
1
- var _SkyAgGridService_instances, _SkyAgGridService_keyMap, _SkyAgGridService_ngUnsubscribe, _SkyAgGridService_currentTheme, _SkyAgGridService_agGridAdapterService, _SkyAgGridService_resources, _SkyAgGridService_mergeGridOptions, _SkyAgGridService_getDefaultGridOptions, _SkyAgGridService_onCellFocused, _SkyAgGridService_getDefaultEditableGridOptions, _SkyAgGridService_dateFormatter, _SkyAgGridService_getIconTemplate, _SkyAgGridService_suppressTab, _SkyAgGridService_getRowHeight;
2
- import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
- import { Injectable, Optional } from '@angular/core';
4
- import { Subject } from 'rxjs';
5
- import { takeUntil } from 'rxjs/operators';
6
- import { applySkyLookupPropertiesDefaults } from './apply-lookup-properties-defaults';
7
- import { SkyAgGridCellEditorAutocompleteComponent } from './cell-editors/cell-editor-autocomplete/cell-editor-autocomplete.component';
8
- import { SkyAgGridCellEditorCurrencyComponent } from './cell-editors/cell-editor-currency/cell-editor-currency.component';
9
- import { SkyAgGridCellEditorDatepickerComponent } from './cell-editors/cell-editor-datepicker/cell-editor-datepicker.component';
10
- import { SkyAgGridCellEditorLookupComponent } from './cell-editors/cell-editor-lookup/cell-editor-lookup.component';
11
- import { SkyAgGridCellEditorNumberComponent } from './cell-editors/cell-editor-number/cell-editor-number.component';
12
- import { SkyAgGridCellEditorTextComponent } from './cell-editors/cell-editor-text/cell-editor-text.component';
13
- import { SkyAgGridCellRendererCurrencyValidatorComponent } from './cell-renderers/cell-renderer-currency/cell-renderer-currency-validator.component';
14
- import { SkyAgGridCellRendererCurrencyComponent } from './cell-renderers/cell-renderer-currency/cell-renderer-currency.component';
15
- import { SkyAgGridCellRendererLookupComponent } from './cell-renderers/cell-renderer-lookup/cell-renderer-lookup.component';
16
- import { SkyAgGridCellRendererRowSelectorComponent } from './cell-renderers/cell-renderer-row-selector/cell-renderer-row-selector.component';
17
- import { SkyAgGridCellRendererValidatorTooltipComponent } from './cell-renderers/cell-renderer-validator-tooltip/cell-renderer-validator-tooltip.component';
18
- import { SkyAgGridHeaderGroupComponent } from './header/header-group.component';
19
- import { SkyAgGridHeaderComponent } from './header/header.component';
20
- import { iconMap } from './icons/icon-map';
21
- import { SkyCellClass } from './types/cell-class';
22
- import { SkyCellType } from './types/cell-type';
23
- import { SkyHeaderClass } from './types/header-class';
24
- import * as i0 from "@angular/core";
25
- import * as i1 from "./ag-grid-adapter.service";
26
- import * as i2 from "@skyux/theme";
27
- import * as i3 from "@skyux/i18n";
28
- function autocompleteComparator(value1, value2) {
29
- if (value1 && value2) {
30
- if (value1.name > value2.name) {
31
- return 1;
32
- }
33
- if (value1.name < value2.name) {
34
- return -1;
35
- }
36
- return 0;
37
- }
38
- return value1 ? 1 : -1;
39
- }
40
- function autocompleteFormatter(params) {
41
- return params.value && params.value.name;
42
- }
43
- function dateComparator(date1, date2) {
44
- let date1value = date1;
45
- let date2value = date2;
46
- if (typeof date1value === 'string') {
47
- date1value = new Date(date1);
48
- }
49
- if (typeof date2value === 'string') {
50
- date2value = new Date(date2);
51
- }
52
- if (date1value && date2value) {
53
- if (date1value > date2value) {
54
- return 1;
55
- }
56
- if (date1value < date2value) {
57
- return -1;
58
- }
59
- return 0;
60
- }
61
- return date1value ? 1 : -1;
62
- }
63
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
64
- function getValidatorCellRendererSelector(component, fallback) {
65
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
66
- return (params) => {
67
- if (params.colDef &&
68
- typeof params.colDef.cellRendererParams?.skyComponentProperties
69
- ?.validator === 'function') {
70
- if (!params.colDef.cellRendererParams.skyComponentProperties.validator(params.value, params.data, params.rowIndex)) {
71
- return {
72
- component,
73
- params: {
74
- ...params.colDef.cellRendererParams,
75
- },
76
- };
77
- }
78
- }
79
- return fallback;
80
- };
81
- }
82
- let rowNodeId = -1;
83
- /**
84
- * `SkyAgGridService` provides methods to get AG Grid `gridOptions` to ensure grids match SKY UX functionality. The `gridOptions` can be overridden, and include registered SKY UX column types.
85
- */
86
- export class SkyAgGridService {
87
- constructor(agGridAdapterService, themeSvc, resources) {
88
- _SkyAgGridService_instances.add(this);
89
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
90
- _SkyAgGridService_keyMap.set(this, new WeakMap());
91
- _SkyAgGridService_ngUnsubscribe.set(this, new Subject());
92
- _SkyAgGridService_currentTheme.set(this, undefined);
93
- _SkyAgGridService_agGridAdapterService.set(this, void 0);
94
- _SkyAgGridService_resources.set(this, void 0);
95
- __classPrivateFieldSet(this, _SkyAgGridService_agGridAdapterService, agGridAdapterService, "f");
96
- __classPrivateFieldSet(this, _SkyAgGridService_resources, resources, "f");
97
- /*istanbul ignore else*/
98
- if (themeSvc) {
99
- themeSvc.settingsChange
100
- .pipe(takeUntil(__classPrivateFieldGet(this, _SkyAgGridService_ngUnsubscribe, "f")))
101
- .subscribe((settingsChange) => {
102
- __classPrivateFieldSet(this, _SkyAgGridService_currentTheme, settingsChange.currentSettings, "f");
103
- });
104
- }
105
- }
106
- ngOnDestroy() {
107
- __classPrivateFieldGet(this, _SkyAgGridService_ngUnsubscribe, "f").next();
108
- __classPrivateFieldGet(this, _SkyAgGridService_ngUnsubscribe, "f").complete();
109
- }
110
- /**
111
- * Returns [AG Grid `gridOptions`](https://www.ag-grid.com/javascript-grid-properties/) with default SKY UX options, styling, and cell renderers registered for read-only grids.
112
- * @param args
113
- * @returns
114
- */
115
- getGridOptions(args) {
116
- const defaultGridOptions = __classPrivateFieldGet(this, _SkyAgGridService_instances, "m", _SkyAgGridService_getDefaultGridOptions).call(this, args);
117
- const mergedGridOptions = __classPrivateFieldGet(this, _SkyAgGridService_instances, "m", _SkyAgGridService_mergeGridOptions).call(this, defaultGridOptions, args.gridOptions);
118
- return mergedGridOptions;
119
- }
120
- /**
121
- * Returns [AG Grid `gridOptions`](https://www.ag-grid.com/javascript-grid-properties/) with default SKY UX options, styling, and cell editors registered for editable grids.
122
- * @param args
123
- * @returns
124
- */
125
- getEditableGridOptions(args) {
126
- const defaultGridOptions = __classPrivateFieldGet(this, _SkyAgGridService_instances, "m", _SkyAgGridService_getDefaultEditableGridOptions).call(this, args);
127
- const mergedGridOptions = __classPrivateFieldGet(this, _SkyAgGridService_instances, "m", _SkyAgGridService_mergeGridOptions).call(this, defaultGridOptions, args.gridOptions);
128
- return mergedGridOptions;
129
- }
130
- getHeaderHeight() {
131
- return __classPrivateFieldGet(this, _SkyAgGridService_currentTheme, "f")?.theme?.name === 'modern' ? 60 : 37;
132
- }
133
- }
134
- _SkyAgGridService_keyMap = new WeakMap(), _SkyAgGridService_ngUnsubscribe = new WeakMap(), _SkyAgGridService_currentTheme = new WeakMap(), _SkyAgGridService_agGridAdapterService = new WeakMap(), _SkyAgGridService_resources = new WeakMap(), _SkyAgGridService_instances = new WeakSet(), _SkyAgGridService_mergeGridOptions = function _SkyAgGridService_mergeGridOptions(defaultGridOptions, providedGridOptions) {
135
- const mergedGridOptions = {
136
- ...defaultGridOptions,
137
- ...providedGridOptions,
138
- components: {
139
- ...providedGridOptions.components,
140
- // Apply default components last to prevent consumers from overwriting our component types.
141
- ...defaultGridOptions.components,
142
- },
143
- columnTypes: {
144
- ...providedGridOptions.columnTypes,
145
- // apply default second to prevent consumers from overwriting our default column types
146
- ...defaultGridOptions.columnTypes,
147
- },
148
- defaultColDef: {
149
- ...defaultGridOptions.defaultColDef,
150
- ...providedGridOptions.defaultColDef,
151
- // allow consumers to override all defaultColDef properties except cellClassRules, which we reserve for styling
152
- cellClassRules: defaultGridOptions.defaultColDef?.cellClassRules,
153
- },
154
- defaultColGroupDef: {
155
- ...defaultGridOptions.defaultColGroupDef,
156
- ...providedGridOptions.defaultColGroupDef,
157
- },
158
- icons: {
159
- ...defaultGridOptions.icons,
160
- ...providedGridOptions.icons,
161
- },
162
- };
163
- // Prefer `getRowNodeId` over `getNodeId` if set by the consumer, for backward compatibility.
164
- if (mergedGridOptions.getRowNodeId) {
165
- delete mergedGridOptions.getRowId;
166
- }
167
- return mergedGridOptions;
168
- }, _SkyAgGridService_getDefaultGridOptions = function _SkyAgGridService_getDefaultGridOptions(args) {
169
- // cellClassRules can be functions or string expressions
170
- const cellClassRuleTrueExpression = () => true;
171
- function getEditableFn(isUneditable) {
172
- return function (params) {
173
- let isEditable = params.colDef.editable;
174
- if (typeof isEditable === 'function') {
175
- const column = params.columnApi.getColumn(params.colDef.field);
176
- isEditable = isEditable({
177
- ...params,
178
- column,
179
- });
180
- }
181
- return isUneditable ? !isEditable : !!isEditable;
182
- };
183
- }
184
- const editableCellClassRules = {
185
- [SkyCellClass.Editable]: getEditableFn(),
186
- [SkyCellClass.Uneditable]: getEditableFn(true),
187
- };
188
- function getValidatorFn() {
189
- return function (param) {
190
- if (param.colDef &&
191
- typeof param.colDef.cellRendererParams?.skyComponentProperties
192
- ?.validator === 'function') {
193
- return !param.colDef.cellRendererParams.skyComponentProperties.validator(param.value, param.data, param.rowIndex);
194
- }
195
- return false;
196
- };
197
- }
198
- const validatorCellClassRules = {
199
- [SkyCellClass.Invalid]: getValidatorFn(),
200
- };
201
- const defaultSkyGridOptions = {
202
- columnTypes: {
203
- [SkyCellType.Autocomplete]: {
204
- cellClassRules: {
205
- [SkyCellClass.Autocomplete]: cellClassRuleTrueExpression,
206
- ...editableCellClassRules,
207
- },
208
- cellEditor: SkyAgGridCellEditorAutocompleteComponent,
209
- valueFormatter: autocompleteFormatter,
210
- comparator: autocompleteComparator,
211
- minWidth: 185,
212
- },
213
- [SkyCellType.Currency]: {
214
- cellClassRules: {
215
- [SkyCellClass.Currency]: cellClassRuleTrueExpression,
216
- ...validatorCellClassRules,
217
- ...editableCellClassRules,
218
- },
219
- cellRendererSelector: getValidatorCellRendererSelector('sky-ag-grid-cell-renderer-currency-validator', { component: 'sky-ag-grid-cell-renderer-currency' }),
220
- cellEditor: SkyAgGridCellEditorCurrencyComponent,
221
- headerClass: SkyHeaderClass.RightAligned,
222
- minWidth: 185,
223
- },
224
- [SkyCellType.Date]: {
225
- cellClassRules: {
226
- [SkyCellClass.Date]: cellClassRuleTrueExpression,
227
- ...editableCellClassRules,
228
- },
229
- cellEditor: SkyAgGridCellEditorDatepickerComponent,
230
- comparator: dateComparator,
231
- minWidth: __classPrivateFieldGet(this, _SkyAgGridService_currentTheme, "f")?.theme?.name === 'modern' ? 180 : 160,
232
- valueFormatter: (params) => __classPrivateFieldGet(this, _SkyAgGridService_instances, "m", _SkyAgGridService_dateFormatter).call(this, params, args.locale),
233
- },
234
- [SkyCellType.Lookup]: {
235
- cellClassRules: {
236
- [SkyCellClass.Lookup]: cellClassRuleTrueExpression,
237
- ...editableCellClassRules,
238
- },
239
- cellEditor: SkyAgGridCellEditorLookupComponent,
240
- cellRenderer: SkyAgGridCellRendererLookupComponent,
241
- valueFormatter: (params) => {
242
- const lookupProperties = applySkyLookupPropertiesDefaults(params);
243
- return (params.value || [])
244
- .map((value) => {
245
- return value[lookupProperties.descriptorProperty];
246
- })
247
- .filter((value) => value !== '' && value !== undefined)
248
- .join('; ');
249
- },
250
- minWidth: 185,
251
- },
252
- [SkyCellType.Number]: {
253
- cellClassRules: {
254
- [SkyCellClass.Number]: cellClassRuleTrueExpression,
255
- ...validatorCellClassRules,
256
- ...editableCellClassRules,
257
- },
258
- cellRendererSelector: getValidatorCellRendererSelector('sky-ag-grid-cell-renderer-validator-tooltip'),
259
- cellEditor: SkyAgGridCellEditorNumberComponent,
260
- headerClass: SkyHeaderClass.RightAligned,
261
- },
262
- [SkyCellType.RowSelector]: {
263
- cellClassRules: {
264
- [SkyCellClass.RowSelector]: cellClassRuleTrueExpression,
265
- [SkyCellClass.Uneditable]: cellClassRuleTrueExpression,
266
- },
267
- cellRenderer: SkyAgGridCellRendererRowSelectorComponent,
268
- headerName: '',
269
- minWidth: 55,
270
- maxWidth: 55,
271
- sortable: false,
272
- width: 55,
273
- },
274
- [SkyCellType.Text]: {
275
- cellClassRules: {
276
- [SkyCellClass.Text]: cellClassRuleTrueExpression,
277
- ...validatorCellClassRules,
278
- ...editableCellClassRules,
279
- },
280
- cellEditor: SkyAgGridCellEditorTextComponent,
281
- cellRendererSelector: getValidatorCellRendererSelector('sky-ag-grid-cell-renderer-validator-tooltip'),
282
- },
283
- [SkyCellType.Validator]: {
284
- cellClassRules: {
285
- ...validatorCellClassRules,
286
- ...editableCellClassRules,
287
- },
288
- cellRendererSelector: getValidatorCellRendererSelector('sky-ag-grid-cell-renderer-validator-tooltip'),
289
- },
290
- },
291
- defaultColDef: {
292
- cellClassRules: editableCellClassRules,
293
- headerComponent: SkyAgGridHeaderComponent,
294
- minWidth: 100,
295
- resizable: true,
296
- sortable: true,
297
- suppressHeaderKeyboardEvent: (keypress) => keypress.event.code === 'Tab',
298
- suppressKeyboardEvent: (keypress) => __classPrivateFieldGet(this, _SkyAgGridService_instances, "m", _SkyAgGridService_suppressTab).call(this, keypress),
299
- },
300
- defaultColGroupDef: {
301
- headerGroupComponent: SkyAgGridHeaderGroupComponent,
302
- },
303
- domLayout: 'autoHeight',
304
- ensureDomOrder: true,
305
- enterMovesDownAfterEdit: true,
306
- components: {
307
- 'sky-ag-grid-cell-renderer-currency': SkyAgGridCellRendererCurrencyComponent,
308
- 'sky-ag-grid-cell-renderer-currency-validator': SkyAgGridCellRendererCurrencyValidatorComponent,
309
- 'sky-ag-grid-cell-renderer-validator-tooltip': SkyAgGridCellRendererValidatorTooltipComponent,
310
- },
311
- getRowId: (params) => {
312
- const dataId = params.data.id;
313
- if (dataId !== undefined) {
314
- return `${params.data.id}`;
315
- }
316
- if (!__classPrivateFieldGet(this, _SkyAgGridService_keyMap, "f").has(params.data)) {
317
- __classPrivateFieldGet(this, _SkyAgGridService_keyMap, "f").set(params.data, `${rowNodeId--}`);
318
- }
319
- return __classPrivateFieldGet(this, _SkyAgGridService_keyMap, "f").get(params.data);
320
- },
321
- getRowClass: (params) => {
322
- if (params.node.id) {
323
- return `sky-ag-grid-row-${params.node.id}`;
324
- }
325
- else {
326
- return undefined;
327
- }
328
- },
329
- headerHeight: this.getHeaderHeight(),
330
- icons: {
331
- sortDescending: __classPrivateFieldGet(this, _SkyAgGridService_instances, "m", _SkyAgGridService_getIconTemplate).call(this, 'sortDescending'),
332
- sortAscending: __classPrivateFieldGet(this, _SkyAgGridService_instances, "m", _SkyAgGridService_getIconTemplate).call(this, 'sortAscending'),
333
- columnMoveMove: __classPrivateFieldGet(this, _SkyAgGridService_instances, "m", _SkyAgGridService_getIconTemplate).call(this, 'columnMoveMove'),
334
- columnMoveHide: __classPrivateFieldGet(this, _SkyAgGridService_instances, "m", _SkyAgGridService_getIconTemplate).call(this, 'columnMoveHide'),
335
- columnMoveLeft: __classPrivateFieldGet(this, _SkyAgGridService_instances, "m", _SkyAgGridService_getIconTemplate).call(this, 'columnMoveLeft'),
336
- columnMoveRight: __classPrivateFieldGet(this, _SkyAgGridService_instances, "m", _SkyAgGridService_getIconTemplate).call(this, 'columnMoveRight'),
337
- columnMovePin: __classPrivateFieldGet(this, _SkyAgGridService_instances, "m", _SkyAgGridService_getIconTemplate).call(this, 'columnMovePin'),
338
- },
339
- onCellFocused: () => __classPrivateFieldGet(this, _SkyAgGridService_instances, "m", _SkyAgGridService_onCellFocused).call(this),
340
- rowHeight: __classPrivateFieldGet(this, _SkyAgGridService_instances, "m", _SkyAgGridService_getRowHeight).call(this),
341
- getRowHeight: () => __classPrivateFieldGet(this, _SkyAgGridService_instances, "m", _SkyAgGridService_getRowHeight).call(this),
342
- rowMultiSelectWithClick: true,
343
- rowSelection: 'multiple',
344
- singleClickEdit: true,
345
- sortingOrder: ['desc', 'asc', null],
346
- suppressRowClickSelection: true,
347
- suppressDragLeaveHidesColumns: true,
348
- };
349
- const columnTypes = defaultSkyGridOptions.columnTypes;
350
- columnTypes[SkyCellType.CurrencyValidator] = {
351
- ...columnTypes[SkyCellType.Currency],
352
- cellRendererParams: {
353
- skyComponentProperties: {
354
- validator: (value) => {
355
- return !!`${value || ''}`.match(/^[^0-9]*(\d+[,.]?)+\d*[^0-9]*$/);
356
- },
357
- validatorMessage: 'Please enter a valid currency',
358
- },
359
- },
360
- };
361
- /*istanbul ignore else*/
362
- if (__classPrivateFieldGet(this, _SkyAgGridService_resources, "f")) {
363
- __classPrivateFieldGet(this, _SkyAgGridService_resources, "f")
364
- .getString('sky_ag_grid_cell_renderer_currency_validator_message')
365
- .subscribe((value) => {
366
- columnTypes[SkyCellType.CurrencyValidator].cellRendererParams.skyComponentProperties.validatorMessage = value;
367
- });
368
- }
369
- columnTypes[SkyCellType.NumberValidator] = {
370
- ...columnTypes[SkyCellType.Validator],
371
- ...columnTypes[SkyCellType.Number],
372
- cellClassRules: {
373
- ...columnTypes[SkyCellType.Validator].cellClassRules,
374
- ...columnTypes[SkyCellType.Number].cellClassRules,
375
- },
376
- cellRendererParams: {
377
- skyComponentProperties: {
378
- validator: (value) => {
379
- return !!value && !isNaN(parseFloat(value));
380
- },
381
- validatorMessage: 'Please enter a valid number',
382
- },
383
- },
384
- };
385
- /*istanbul ignore else*/
386
- if (__classPrivateFieldGet(this, _SkyAgGridService_resources, "f")) {
387
- __classPrivateFieldGet(this, _SkyAgGridService_resources, "f")
388
- .getString('sky_ag_grid_cell_renderer_number_validator_message')
389
- .subscribe((value) => {
390
- columnTypes[SkyCellType.NumberValidator].cellRendererParams.skyComponentProperties.validatorMessage = value;
391
- });
392
- }
393
- return defaultSkyGridOptions;
394
- }, _SkyAgGridService_onCellFocused = function _SkyAgGridService_onCellFocused() {
395
- const currentElement = __classPrivateFieldGet(this, _SkyAgGridService_agGridAdapterService, "f").getFocusedElement();
396
- __classPrivateFieldGet(this, _SkyAgGridService_agGridAdapterService, "f").focusOnFocusableChildren(currentElement);
397
- }, _SkyAgGridService_getDefaultEditableGridOptions = function _SkyAgGridService_getDefaultEditableGridOptions(args) {
398
- const defaultGridOptions = __classPrivateFieldGet(this, _SkyAgGridService_instances, "m", _SkyAgGridService_getDefaultGridOptions).call(this, args);
399
- defaultGridOptions.rowSelection = undefined;
400
- return defaultGridOptions;
401
- }, _SkyAgGridService_dateFormatter = function _SkyAgGridService_dateFormatter(params, locale = 'en-us') {
402
- const dateConfig = { year: 'numeric', month: '2-digit', day: '2-digit' };
403
- let date = params.value;
404
- if (date && typeof date === 'string') {
405
- date = new Date(params.value);
406
- }
407
- const formattedDate = date &&
408
- date.toLocaleDateString &&
409
- date.toLocaleDateString(locale, dateConfig);
410
- if (date && date.getTime && !isNaN(date.getTime())) {
411
- return formattedDate;
412
- }
413
- return '';
414
- }, _SkyAgGridService_getIconTemplate = function _SkyAgGridService_getIconTemplate(iconName) {
415
- return () => {
416
- const icon = iconMap[iconName];
417
- if (__classPrivateFieldGet(this, _SkyAgGridService_currentTheme, "f")?.theme.name === 'modern' && icon.skyIcon) {
418
- return `<i aria-hidden="true" class="sky-i-${icon.skyIcon}"></i>`;
419
- }
420
- else {
421
- return `<i aria-hidden="true" class="fa fa-${icon.faIcon}"></i>`;
422
- }
423
- };
424
- }, _SkyAgGridService_suppressTab = function _SkyAgGridService_suppressTab(params) {
425
- if (params.event.code === 'Tab') {
426
- if (params.editing) {
427
- const currentlyFocusedEl = __classPrivateFieldGet(this, _SkyAgGridService_agGridAdapterService, "f").getFocusedElement();
428
- // inline cell editors have the 'ag-cell' class, while popup editors have the 'ag-popup-editor' class
429
- const cellEl = __classPrivateFieldGet(this, _SkyAgGridService_agGridAdapterService, "f").getElementOrParentWithClass(currentlyFocusedEl, 'ag-cell');
430
- const popupEl = __classPrivateFieldGet(this, _SkyAgGridService_agGridAdapterService, "f").getElementOrParentWithClass(currentlyFocusedEl, 'ag-popup-editor');
431
- const parentEl = cellEl || popupEl;
432
- const nextFocusableElementInCell = __classPrivateFieldGet(this, _SkyAgGridService_agGridAdapterService, "f").getNextFocusableElement(currentlyFocusedEl, parentEl, params.event.shiftKey);
433
- return !!nextFocusableElementInCell;
434
- }
435
- return true;
436
- }
437
- return false;
438
- }, _SkyAgGridService_getRowHeight = function _SkyAgGridService_getRowHeight() {
439
- return __classPrivateFieldGet(this, _SkyAgGridService_currentTheme, "f")?.theme?.name === 'modern' ? 60 : 38;
440
- };
441
- SkyAgGridService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyAgGridService, deps: [{ token: i1.SkyAgGridAdapterService }, { token: i2.SkyThemeService, optional: true }, { token: i3.SkyLibResourcesService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
442
- SkyAgGridService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyAgGridService, providedIn: 'any' });
443
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyAgGridService, decorators: [{
444
- type: Injectable,
445
- args: [{
446
- providedIn: 'any',
447
- }]
448
- }], ctorParameters: function () { return [{ type: i1.SkyAgGridAdapterService }, { type: i2.SkyThemeService, decorators: [{
449
- type: Optional
450
- }] }, { type: i3.SkyLibResourcesService, decorators: [{
451
- type: Optional
452
- }] }]; } });
453
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWctZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2FnLWdyaWQvc3JjL2xpYi9tb2R1bGVzL2FnLWdyaWQvYWctZ3JpZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFlaEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHM0MsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEYsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sNEVBQTRFLENBQUM7QUFDdEksT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDMUgsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sd0VBQXdFLENBQUM7QUFDaEksT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDcEgsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDcEgsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDOUcsT0FBTyxFQUFFLCtDQUErQyxFQUFFLE1BQU0sb0ZBQW9GLENBQUM7QUFDckosT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDbEksT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFDNUgsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sa0ZBQWtGLENBQUM7QUFDN0ksT0FBTyxFQUFFLDhDQUE4QyxFQUFFLE1BQU0sNEZBQTRGLENBQUM7QUFDNUosT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0saUNBQWlD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LGlCQUFpQixDQUNsQixDQUFDO1lBQ0YsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLE9BQU8sQ0FBQztZQUVuQyxNQUFNLDBCQUEwQixHQUM5Qix1QkFBQSxJQUFJLDhDQUFzQixDQUFDLHVCQUF1QixDQUNoRCxrQkFBa0IsRUFDbEIsUUFBUSxFQUNSLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUN0QixDQUFDO1lBQ0osT0FBTyxDQUFDLENBQUMsMEJBQTBCLENBQUM7U0FDckM7UUFDRCxPQUFPLElBQUksQ0FBQztLQUNiO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0lBR0MsT0FBTyx1QkFBQSxJQUFJLHNDQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2hFLENBQUM7NkdBdGNVLGdCQUFnQjtpSEFBaEIsZ0JBQWdCLGNBRmYsS0FBSzsyRkFFTixnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCOzswQkFXSSxRQUFROzswQkFDUixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2t5TGliUmVzb3VyY2VzU2VydmljZSB9IGZyb20gJ0Bza3l1eC9pMThuJztcbmltcG9ydCB7IFNreVRoZW1lU2VydmljZSwgU2t5VGhlbWVTZXR0aW5ncyB9IGZyb20gJ0Bza3l1eC90aGVtZSc7XG5cbmltcG9ydCB7XG4gIENlbGxDbGFzc1BhcmFtcyxcbiAgQ29sRGVmLFxuICBFZGl0YWJsZUNhbGxiYWNrUGFyYW1zLFxuICBHcmlkT3B0aW9ucyxcbiAgSUNlbGxSZW5kZXJlclBhcmFtcyxcbiAgUm93Q2xhc3NQYXJhbXMsXG4gIFN1cHByZXNzSGVhZGVyS2V5Ym9hcmRFdmVudFBhcmFtcyxcbiAgU3VwcHJlc3NLZXlib2FyZEV2ZW50UGFyYW1zLFxuICBWYWx1ZUZvcm1hdHRlclBhcmFtcyxcbn0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lBZ0dyaWRBZGFwdGVyU2VydmljZSB9IGZyb20gJy4vYWctZ3JpZC1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgYXBwbHlTa3lMb29rdXBQcm9wZXJ0aWVzRGVmYXVsdHMgfSBmcm9tICcuL2FwcGx5LWxvb2t1cC1wcm9wZXJ0aWVzLWRlZmF1bHRzJztcbmltcG9ydCB7IFNreUFnR3JpZENlbGxFZGl0b3JBdXRvY29tcGxldGVDb21wb25lbnQgfSBmcm9tICcuL2NlbGwtZWRpdG9ycy9jZWxsLWVkaXRvci1hdXRvY29tcGxldGUvY2VsbC1lZGl0b3ItYXV0b2NvbXBsZXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lBZ0dyaWRDZWxsRWRpdG9yQ3VycmVuY3lDb21wb25lbnQgfSBmcm9tICcuL2NlbGwtZWRpdG9ycy9jZWxsLWVkaXRvci1jdXJyZW5jeS9jZWxsLWVkaXRvci1jdXJyZW5jeS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5QWdHcmlkQ2VsbEVkaXRvckRhdGVwaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2NlbGwtZWRpdG9ycy9jZWxsLWVkaXRvci1kYXRlcGlja2VyL2NlbGwtZWRpdG9yLWRhdGVwaWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNreUFnR3JpZENlbGxFZGl0b3JMb29rdXBDb21wb25lbnQgfSBmcm9tICcuL2NlbGwtZWRpdG9ycy9jZWxsLWVkaXRvci1sb29rdXAvY2VsbC1lZGl0b3ItbG9va3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lBZ0dyaWRDZWxsRWRpdG9yTnVtYmVyQ29tcG9uZW50IH0gZnJvbSAnLi9jZWxsLWVkaXRvcnMvY2VsbC1lZGl0b3ItbnVtYmVyL2NlbGwtZWRpdG9yLW51bWJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5QWdHcmlkQ2VsbEVkaXRvclRleHRDb21wb25lbnQgfSBmcm9tICcuL2NlbGwtZWRpdG9ycy9jZWxsLWVkaXRvci10ZXh0L2NlbGwtZWRpdG9yLXRleHQuY29tcG9uZW50JztcbmltcG9ydCB7IFNreUFnR3JpZENlbGxSZW5kZXJlckN1cnJlbmN5VmFsaWRhdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9jZWxsLXJlbmRlcmVycy9jZWxsLXJlbmRlcmVyLWN1cnJlbmN5L2NlbGwtcmVuZGVyZXItY3VycmVuY3ktdmFsaWRhdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lBZ0dyaWRDZWxsUmVuZGVyZXJDdXJyZW5jeUNvbXBvbmVudCB9IGZyb20gJy4vY2VsbC1yZW5kZXJlcnMvY2VsbC1yZW5kZXJlci1jdXJyZW5jeS9jZWxsLXJlbmRlcmVyLWN1cnJlbmN5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lBZ0dyaWRDZWxsUmVuZGVyZXJMb29rdXBDb21wb25lbnQgfSBmcm9tICcuL2NlbGwtcmVuZGVyZXJzL2NlbGwtcmVuZGVyZXItbG9va3VwL2NlbGwtcmVuZGVyZXItbG9va3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lBZ0dyaWRDZWxsUmVuZGVyZXJSb3dTZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4vY2VsbC1yZW5kZXJlcnMvY2VsbC1yZW5kZXJlci1yb3ctc2VsZWN0b3IvY2VsbC1yZW5kZXJlci1yb3ctc2VsZWN0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IFNreUFnR3JpZENlbGxSZW5kZXJlclZhbGlkYXRvclRvb2x0aXBDb21wb25lbnQgfSBmcm9tICcuL2NlbGwtcmVuZGVyZXJzL2NlbGwtcmVuZGVyZXItdmFsaWRhdG9yLXRvb2x0aXAvY2VsbC1yZW5kZXJlci12YWxpZGF0b3ItdG9vbHRpcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5QWdHcmlkSGVhZGVyR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL2hlYWRlci9oZWFkZXItZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IFNreUFnR3JpZEhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vaGVhZGVyL2hlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWNvbk1hcFR5cGUsIGljb25NYXAgfSBmcm9tICcuL2ljb25zL2ljb24tbWFwJztcbmltcG9ydCB7IFNreUNlbGxDbGFzcyB9IGZyb20gJy4vdHlwZXMvY2VsbC1jbGFzcyc7XG5pbXBvcnQgeyBTa3lDZWxsVHlwZSB9IGZyb20gJy4vdHlwZXMvY2VsbC10eXBlJztcbmltcG9ydCB7IFNreUhlYWRlckNsYXNzIH0gZnJvbSAnLi90eXBlcy9oZWFkZXItY2xhc3MnO1xuaW1wb3J0IHsgU2t5R2V0R3JpZE9wdGlvbnNBcmdzIH0gZnJvbSAnLi90eXBlcy9za3ktZ3JpZC1vcHRpb25zJztcblxuZnVuY3Rpb24gYXV0b2NvbXBsZXRlQ29tcGFyYXRvcihcbiAgdmFsdWUxOiB7IG5hbWU6IHN0cmluZyB9LFxuICB2YWx1ZTI6IHsgbmFtZTogc3RyaW5nIH1cbik6IG51bWJlciB7XG4gIGlmICh2YWx1ZTEgJiYgdmFsdWUyKSB7XG4gICAgaWYgKHZhbHVlMS5uYW1lID4gdmFsdWUyLm5hbWUpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZTEubmFtZSA8IHZhbHVlMi5uYW1lKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICByZXR1cm4gdmFsdWUxID8gMSA6IC0xO1xufVxuXG5mdW5jdGlvbiBhdXRvY29tcGxldGVGb3JtYXR0ZXIocGFyYW1zOiBWYWx1ZUZvcm1hdHRlclBhcmFtcyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXJhbXMudmFsdWUgJiYgcGFyYW1zLnZhbHVlLm5hbWU7XG59XG5cbmZ1bmN0aW9uIGRhdGVDb21wYXJhdG9yKGRhdGUxOiBEYXRlIHwgc3RyaW5nLCBkYXRlMjogRGF0ZSB8IHN0cmluZyk6IG51bWJlciB7XG4gIGxldCBkYXRlMXZhbHVlID0gZGF0ZTE7XG4gIGxldCBkYXRlMnZhbHVlID0gZGF0ZTI7XG5cbiAgaWYgKHR5cGVvZiBkYXRlMXZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIGRhdGUxdmFsdWUgPSBuZXcgRGF0ZShkYXRlMSk7XG4gIH1cblxuICBpZiAodHlwZW9mIGRhdGUydmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgZGF0ZTJ2YWx1ZSA9IG5ldyBEYXRlKGRhdGUyKTtcbiAgfVxuXG4gIGlmIChkYXRlMXZhbHVlICYmIGRhdGUydmFsdWUpIHtcbiAgICBpZiAoZGF0ZTF2YWx1ZSA+IGRhdGUydmFsdWUpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGlmIChkYXRlMXZhbHVlIDwgZGF0ZTJ2YWx1ZSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcmV0dXJuIGRhdGUxdmFsdWUgPyAxIDogLTE7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiBnZXRWYWxpZGF0b3JDZWxsUmVuZGVyZXJTZWxlY3Rvcihjb21wb25lbnQ6IHN0cmluZywgZmFsbGJhY2s/OiBhbnkpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcmV0dXJuIChwYXJhbXM6IElDZWxsUmVuZGVyZXJQYXJhbXMpOiBhbnkgPT4ge1xuICAgIGlmIChcbiAgICAgIHBhcmFtcy5jb2xEZWYgJiZcbiAgICAgIHR5cGVvZiBwYXJhbXMuY29sRGVmLmNlbGxSZW5kZXJlclBhcmFtcz8uc2t5Q29tcG9uZW50UHJvcGVydGllc1xuICAgICAgICA/LnZhbGlkYXRvciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICAhcGFyYW1zLmNvbERlZi5jZWxsUmVuZGVyZXJQYXJhbXMuc2t5Q29tcG9uZW50UHJvcGVydGllcy52YWxpZGF0b3IoXG4gICAgICAgICAgcGFyYW1zLnZhbHVlLFxuICAgICAgICAgIHBhcmFtcy5kYXRhLFxuICAgICAgICAgIHBhcmFtcy5yb3dJbmRleFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb21wb25lbnQsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5wYXJhbXMuY29sRGVmLmNlbGxSZW5kZXJlclBhcmFtcyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsbGJhY2s7XG4gIH07XG59XG5cbmxldCByb3dOb2RlSWQgPSAtMTtcblxuLyoqXG4gKiBgU2t5QWdHcmlkU2VydmljZWAgcHJvdmlkZXMgbWV0aG9kcyB0byBnZXQgQUcgR3JpZCBgZ3JpZE9wdGlvbnNgIHRvIGVuc3VyZSBncmlkcyBtYXRjaCBTS1kgVVggZnVuY3Rpb25hbGl0eS4gVGhlIGBncmlkT3B0aW9uc2AgY2FuIGJlIG92ZXJyaWRkZW4sIGFuZCBpbmNsdWRlIHJlZ2lzdGVyZWQgU0tZIFVYIGNvbHVtbiB0eXBlcy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAnYW55Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5QWdHcmlkU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICNrZXlNYXAgPSBuZXcgV2Vha01hcDxhbnksIHN0cmluZz4oKTtcbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAjY3VycmVudFRoZW1lOiBTa3lUaGVtZVNldHRpbmdzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAjYWdHcmlkQWRhcHRlclNlcnZpY2U6IFNreUFnR3JpZEFkYXB0ZXJTZXJ2aWNlO1xuICAjcmVzb3VyY2VzOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGFnR3JpZEFkYXB0ZXJTZXJ2aWNlOiBTa3lBZ0dyaWRBZGFwdGVyU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSB0aGVtZVN2Yz86IFNreVRoZW1lU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSByZXNvdXJjZXM/OiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuI2FnR3JpZEFkYXB0ZXJTZXJ2aWNlID0gYWdHcmlkQWRhcHRlclNlcnZpY2U7XG4gICAgdGhpcy4jcmVzb3VyY2VzID0gcmVzb3VyY2VzO1xuXG4gICAgLyppc3RhbmJ1bCBpZ25vcmUgZWxzZSovXG4gICAgaWYgKHRoZW1lU3ZjKSB7XG4gICAgICB0aGVtZVN2Yy5zZXR0aW5nc0NoYW5nZVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHNldHRpbmdzQ2hhbmdlKSA9PiB7XG4gICAgICAgICAgdGhpcy4jY3VycmVudFRoZW1lID0gc2V0dGluZ3NDaGFuZ2UuY3VycmVudFNldHRpbmdzO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgW0FHIEdyaWQgYGdyaWRPcHRpb25zYF0oaHR0cHM6Ly93d3cuYWctZ3JpZC5jb20vamF2YXNjcmlwdC1ncmlkLXByb3BlcnRpZXMvKSB3aXRoIGRlZmF1bHQgU0tZIFVYIG9wdGlvbnMsIHN0eWxpbmcsIGFuZCBjZWxsIHJlbmRlcmVycyByZWdpc3RlcmVkIGZvciByZWFkLW9ubHkgZ3JpZHMuXG4gICAqIEBwYXJhbSBhcmdzXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgZ2V0R3JpZE9wdGlvbnMoYXJnczogU2t5R2V0R3JpZE9wdGlvbnNBcmdzKTogR3JpZE9wdGlvbnMge1xuICAgIGNvbnN0IGRlZmF1bHRHcmlkT3B0aW9ucyA9IHRoaXMuI2dldERlZmF1bHRHcmlkT3B0aW9ucyhhcmdzKTtcbiAgICBjb25zdCBtZXJnZWRHcmlkT3B0aW9ucyA9IHRoaXMuI21lcmdlR3JpZE9wdGlvbnMoXG4gICAgICBkZWZhdWx0R3JpZE9wdGlvbnMsXG4gICAgICBhcmdzLmdyaWRPcHRpb25zXG4gICAgKTtcblxuICAgIHJldHVybiBtZXJnZWRHcmlkT3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIFtBRyBHcmlkIGBncmlkT3B0aW9uc2BdKGh0dHBzOi8vd3d3LmFnLWdyaWQuY29tL2phdmFzY3JpcHQtZ3JpZC1wcm9wZXJ0aWVzLykgd2l0aCBkZWZhdWx0IFNLWSBVWCBvcHRpb25zLCBzdHlsaW5nLCBhbmQgY2VsbCBlZGl0b3JzIHJlZ2lzdGVyZWQgZm9yIGVkaXRhYmxlIGdyaWRzLlxuICAgKiBAcGFyYW0gYXJnc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGdldEVkaXRhYmxlR3JpZE9wdGlvbnMoYXJnczogU2t5R2V0R3JpZE9wdGlvbnNBcmdzKTogR3JpZE9wdGlvbnMge1xuICAgIGNvbnN0IGRlZmF1bHRHcmlkT3B0aW9ucyA9IHRoaXMuI2dldERlZmF1bHRFZGl0YWJsZUdyaWRPcHRpb25zKGFyZ3MpO1xuICAgIGNvbnN0IG1lcmdlZEdyaWRPcHRpb25zID0gdGhpcy4jbWVyZ2VHcmlkT3B0aW9ucyhcbiAgICAgIGRlZmF1bHRHcmlkT3B0aW9ucyxcbiAgICAgIGFyZ3MuZ3JpZE9wdGlvbnNcbiAgICApO1xuXG4gICAgcmV0dXJuIG1lcmdlZEdyaWRPcHRpb25zO1xuICB9XG5cbiAgcHVibGljIGdldEhlYWRlckhlaWdodCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNjdXJyZW50VGhlbWU/LnRoZW1lPy5uYW1lID09PSAnbW9kZXJuJyA/IDYwIDogMzc7XG4gIH1cblxuICAjbWVyZ2VHcmlkT3B0aW9ucyhcbiAgICBkZWZhdWx0R3JpZE9wdGlvbnM6IEdyaWRPcHRpb25zLFxuICAgIHByb3ZpZGVkR3JpZE9wdGlvbnM6IEdyaWRPcHRpb25zXG4gICk6IEdyaWRPcHRpb25zIHtcbiAgICBjb25zdCBtZXJnZWRHcmlkT3B0aW9uczogR3JpZE9wdGlvbnMgPSB7XG4gICAgICAuLi5kZWZhdWx0R3JpZE9wdGlvbnMsXG4gICAgICAuLi5wcm92aWRlZEdyaWRPcHRpb25zLFxuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAuLi5wcm92aWRlZEdyaWRPcHRpb25zLmNvbXBvbmVudHMsXG4gICAgICAgIC8vIEFwcGx5IGRlZmF1bHQgY29tcG9uZW50cyBsYXN0IHRvIHByZXZlbnQgY29uc3VtZXJzIGZyb20gb3ZlcndyaXRpbmcgb3VyIGNvbXBvbmVudCB0eXBlcy5cbiAgICAgICAgLi4uZGVmYXVsdEdyaWRPcHRpb25zLmNvbXBvbmVudHMsXG4gICAgICB9LFxuICAgICAgY29sdW1uVHlwZXM6IHtcbiAgICAgICAgLi4ucHJvdmlkZWRHcmlkT3B0aW9ucy5jb2x1bW5UeXBlcyxcbiAgICAgICAgLy8gYXBwbHkgZGVmYXVsdCBzZWNvbmQgdG8gcHJldmVudCBjb25zdW1lcnMgZnJvbSBvdmVyd3JpdGluZyBvdXIgZGVmYXVsdCBjb2x1bW4gdHlwZXNcbiAgICAgICAgLi4uZGVmYXVsdEdyaWRPcHRpb25zLmNvbHVtblR5cGVzLFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRDb2xEZWY6IHtcbiAgICAgICAgLi4uZGVmYXVsdEdyaWRPcHRpb25zLmRlZmF1bHRDb2xEZWYsXG4gICAgICAgIC4uLnByb3ZpZGVkR3JpZE9wdGlvbnMuZGVmYXVsdENvbERlZixcbiAgICAgICAgLy8gYWxsb3cgY29uc3VtZXJzIHRvIG92ZXJyaWRlIGFsbCBkZWZhdWx0Q29sRGVmIHByb3BlcnRpZXMgZXhjZXB0IGNlbGxDbGFzc1J1bGVzLCB3aGljaCB3ZSByZXNlcnZlIGZvciBzdHlsaW5nXG4gICAgICAgIGNlbGxDbGFzc1J1bGVzOiBkZWZhdWx0R3JpZE9wdGlvbnMuZGVmYXVsdENvbERlZj8uY2VsbENsYXNzUnVsZXMsXG4gICAgICB9LFxuICAgICAgZGVmYXVsdENvbEdyb3VwRGVmOiB7XG4gICAgICAgIC4uLmRlZmF1bHRHcmlkT3B0aW9ucy5kZWZhdWx0Q29sR3JvdXBEZWYsXG4gICAgICAgIC4uLnByb3ZpZGVkR3JpZE9wdGlvbnMuZGVmYXVsdENvbEdyb3VwRGVmLFxuICAgICAgfSxcbiAgICAgIGljb25zOiB7XG4gICAgICAgIC4uLmRlZmF1bHRHcmlkT3B0aW9ucy5pY29ucyxcbiAgICAgICAgLi4ucHJvdmlkZWRHcmlkT3B0aW9ucy5pY29ucyxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIC8vIFByZWZlciBgZ2V0Um93Tm9kZUlkYCBvdmVyIGBnZXROb2RlSWRgIGlmIHNldCBieSB0aGUgY29uc3VtZXIsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICAgIGlmIChtZXJnZWRHcmlkT3B0aW9ucy5nZXRSb3dOb2RlSWQpIHtcbiAgICAgIGRlbGV0ZSBtZXJnZWRHcmlkT3B0aW9ucy5nZXRSb3dJZDtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2VkR3JpZE9wdGlvbnM7XG4gIH1cblxuICAjZ2V0RGVmYXVsdEdyaWRPcHRpb25zKGFyZ3M6IFNreUdldEdyaWRPcHRpb25zQXJncyk6IEdyaWRPcHRpb25zIHtcbiAgICAvLyBjZWxsQ2xhc3NSdWxlcyBjYW4gYmUgZnVuY3Rpb25zIG9yIHN0cmluZyBleHByZXNzaW9uc1xuICAgIGNvbnN0IGNlbGxDbGFzc1J1bGVUcnVlRXhwcmVzc2lvbiA9ICgpOiBib29sZWFuID0+IHRydWU7XG5cbiAgICBmdW5jdGlvbiBnZXRFZGl0YWJsZUZuKFxuICAgICAgaXNVbmVkaXRhYmxlPzogYm9vbGVhblxuICAgICk6IChwYXJhbXM6IENlbGxDbGFzc1BhcmFtcykgPT4gYm9vbGVhbiB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHBhcmFtczogQ2VsbENsYXNzUGFyYW1zKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBpc0VkaXRhYmxlID0gcGFyYW1zLmNvbERlZi5lZGl0YWJsZTtcblxuICAgICAgICBpZiAodHlwZW9mIGlzRWRpdGFibGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjb25zdCBjb2x1bW4gPSBwYXJhbXMuY29sdW1uQXBpLmdldENvbHVtbihwYXJhbXMuY29sRGVmLmZpZWxkKTtcbiAgICAgICAgICBpc0VkaXRhYmxlID0gaXNFZGl0YWJsZSh7XG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgfSBhcyBFZGl0YWJsZUNhbGxiYWNrUGFyYW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpc1VuZWRpdGFibGUgPyAhaXNFZGl0YWJsZSA6ICEhaXNFZGl0YWJsZTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgZWRpdGFibGVDZWxsQ2xhc3NSdWxlcyA9IHtcbiAgICAgIFtTa3lDZWxsQ2xhc3MuRWRpdGFibGVdOiBnZXRFZGl0YWJsZUZuKCksXG4gICAgICBbU2t5Q2VsbENsYXNzLlVuZWRpdGFibGVdOiBnZXRFZGl0YWJsZUZuKHRydWUpLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBnZXRWYWxpZGF0b3JGbigpOiAocGFyYW1zOiBDZWxsQ2xhc3NQYXJhbXMpID0+IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChwYXJhbTogQ2VsbENsYXNzUGFyYW1zKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYXJhbS5jb2xEZWYgJiZcbiAgICAgICAgICB0eXBlb2YgcGFyYW0uY29sRGVmLmNlbGxSZW5kZXJlclBhcmFtcz8uc2t5Q29tcG9uZW50UHJvcGVydGllc1xuICAgICAgICAgICAgPy52YWxpZGF0b3IgPT09ICdmdW5jdGlvbidcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuICFwYXJhbS5jb2xEZWYuY2VsbFJlbmRlcmVyUGFyYW1zLnNreUNvbXBvbmVudFByb3BlcnRpZXMudmFsaWRhdG9yKFxuICAgICAgICAgICAgcGFyYW0udmFsdWUsXG4gICAgICAgICAgICBwYXJhbS5kYXRhLFxuICAgICAgICAgICAgcGFyYW0ucm93SW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRhdG9yQ2VsbENsYXNzUnVsZXMgPSB7XG4gICAgICBbU2t5Q2VsbENsYXNzLkludmFsaWRdOiBnZXRWYWxpZGF0b3JGbigpLFxuICAgIH07XG5cbiAgICBjb25zdCBkZWZhdWx0U2t5R3JpZE9wdGlvbnM6IEdyaWRPcHRpb25zID0ge1xuICAgICAgY29sdW1uVHlwZXM6IHtcbiAgICAgICAgW1NreUNlbGxUeXBlLkF1dG9jb21wbGV0ZV06IHtcbiAgICAgICAgICBjZWxsQ2xhc3NSdWxlczoge1xuICAgICAgICAgICAgW1NreUNlbGxDbGFzcy5BdXRvY29tcGxldGVdOiBjZWxsQ2xhc3NSdWxlVHJ1ZUV4cHJlc3Npb24sXG4gICAgICAgICAgICAuLi5lZGl0YWJsZUNlbGxDbGFzc1J1bGVzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2VsbEVkaXRvcjogU2t5QWdHcmlkQ2VsbEVkaXRvckF1dG9jb21wbGV0ZUNvbXBvbmVudCxcbiAgICAgICAgICB2YWx1ZUZvcm1hdHRlcjogYXV0b2NvbXBsZXRlRm9ybWF0dGVyLFxuICAgICAgICAgIGNvbXBhcmF0b3I6IGF1dG9jb21wbGV0ZUNvbXBhcmF0b3IsXG4gICAgICAgICAgbWluV2lkdGg6IDE4NSxcbiAgICAgICAgfSxcbiAgICAgICAgW1NreUNlbGxUeXBlLkN1cnJlbmN5XToge1xuICAgICAgICAgIGNlbGxDbGFzc1J1bGVzOiB7XG4gICAgICAgICAgICBbU2t5Q2VsbENsYXNzLkN1cnJlbmN5XTogY2VsbENsYXNzUnVsZVRydWVFeHByZXNzaW9uLFxuICAgICAgICAgICAgLi4udmFsaWRhdG9yQ2VsbENsYXNzUnVsZXMsXG4gICAgICAgICAgICAuLi5lZGl0YWJsZUNlbGxDbGFzc1J1bGVzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2VsbFJlbmRlcmVyU2VsZWN0b3I6IGdldFZhbGlkYXRvckNlbGxSZW5kZXJlclNlbGVjdG9yKFxuICAgICAgICAgICAgJ3NreS1hZy1ncmlkLWNlbGwtcmVuZGVyZXItY3VycmVuY3ktdmFsaWRhdG9yJyxcbiAgICAgICAgICAgIHsgY29tcG9uZW50OiAnc2t5LWFnLWdyaWQtY2VsbC1yZW5kZXJlci1jdXJyZW5jeScgfVxuICAgICAgICAgICksXG4gICAgICAgICAgY2VsbEVkaXRvcjogU2t5QWdHcmlkQ2VsbEVkaXRvckN1cnJlbmN5Q29tcG9uZW50LFxuICAgICAgICAgIGhlYWRlckNsYXNzOiBTa3lIZWFkZXJDbGFzcy5SaWdodEFsaWduZWQsXG4gICAgICAgICAgbWluV2lkdGg6IDE4NSxcbiAgICAgICAgfSxcbiAgICAgICAgW1NreUNlbGxUeXBlLkRhdGVdOiB7XG4gICAgICAgICAgY2VsbENsYXNzUnVsZXM6IHtcbiAgICAgICAgICAgIFtTa3lDZWxsQ2xhc3MuRGF0ZV06IGNlbGxDbGFzc1J1bGVUcnVlRXhwcmVzc2lvbixcbiAgICAgICAgICAgIC4uLmVkaXRhYmxlQ2VsbENsYXNzUnVsZXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjZWxsRWRpdG9yOiBTa3lBZ0dyaWRDZWxsRWRpdG9yRGF0ZXBpY2tlckNvbXBvbmVudCxcbiAgICAgICAgICBjb21wYXJhdG9yOiBkYXRlQ29tcGFyYXRvcixcbiAgICAgICAgICBtaW5XaWR0aDogdGhpcy4jY3VycmVudFRoZW1lPy50aGVtZT8ubmFtZSA9PT0gJ21vZGVybicgPyAxODAgOiAxNjAsXG4gICAgICAgICAgdmFsdWVGb3JtYXR0ZXI6IChwYXJhbXM6IFZhbHVlRm9ybWF0dGVyUGFyYW1zKSA9PlxuICAgICAgICAgICAgdGhpcy4jZGF0ZUZvcm1hdHRlcihwYXJhbXMsIGFyZ3MubG9jYWxlKSxcbiAgICAgICAgfSxcbiAgICAgICAgW1NreUNlbGxUeXBlLkxvb2t1cF06IHtcbiAgICAgICAgICBjZWxsQ2xhc3NSdWxlczoge1xuICAgICAgICAgICAgW1NreUNlbGxDbGFzcy5Mb29rdXBdOiBjZWxsQ2xhc3NSdWxlVHJ1ZUV4cHJlc3Npb24sXG4gICAgICAgICAgICAuLi5lZGl0YWJsZUNlbGxDbGFzc1J1bGVzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2VsbEVkaXRvcjogU2t5QWdHcmlkQ2VsbEVkaXRvckxvb2t1cENvbXBvbmVudCxcbiAgICAgICAgICBjZWxsUmVuZGVyZXI6IFNreUFnR3JpZENlbGxSZW5kZXJlckxvb2t1cENvbXBvbmVudCxcbiAgICAgICAgICB2YWx1ZUZvcm1hdHRlcjogKHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9va3VwUHJvcGVydGllcyA9IGFwcGx5U2t5TG9va3VwUHJvcGVydGllc0RlZmF1bHRzKHBhcmFtcyk7XG4gICAgICAgICAgICByZXR1cm4gKHBhcmFtcy52YWx1ZSB8fCBbXSlcbiAgICAgICAgICAgICAgLm1hcCgodmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlW2xvb2t1cFByb3BlcnRpZXMuZGVzY3JpcHRvclByb3BlcnR5IGFzIHN0cmluZ107XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5maWx0ZXIoKHZhbHVlOiB1bmtub3duKSA9PiB2YWx1ZSAhPT0gJycgJiYgdmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgLmpvaW4oJzsgJyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBtaW5XaWR0aDogMTg1LFxuICAgICAgICB9LFxuICAgICAgICBbU2t5Q2VsbFR5cGUuTnVtYmVyXToge1xuICAgICAgICAgIGNlbGxDbGFzc1J1bGVzOiB7XG4gICAgICAgICAgICBbU2t5Q2VsbENsYXNzLk51bWJlcl06IGNlbGxDbGFzc1J1bGVUcnVlRXhwcmVzc2lvbixcbiAgICAgICAgICAgIC4uLnZhbGlkYXRvckNlbGxDbGFzc1J1bGVzLFxuICAgICAgICAgICAgLi4uZWRpdGFibGVDZWxsQ2xhc3NSdWxlcyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNlbGxSZW5kZXJlclNlbGVjdG9yOiBnZXRWYWxpZGF0b3JDZWxsUmVuZGVyZXJTZWxlY3RvcihcbiAgICAgICAgICAgICdza3ktYWctZ3JpZC1jZWxsLXJlbmRlcmVyLXZhbGlkYXRvci10b29sdGlwJ1xuICAgICAgICAgICksXG4gICAgICAgICAgY2VsbEVkaXRvcjogU2t5QWdHcmlkQ2VsbEVkaXRvck51bWJlckNvbXBvbmVudCxcbiAgICAgICAgICBoZWFkZXJDbGFzczogU2t5SGVhZGVyQ2xhc3MuUmlnaHRBbGlnbmVkLFxuICAgICAgICB9LFxuICAgICAgICBbU2t5Q2VsbFR5cGUuUm93U2VsZWN0b3JdOiB7XG4gICAgICAgICAgY2VsbENsYXNzUnVsZXM6IHtcbiAgICAgICAgICAgIFtTa3lDZWxsQ2xhc3MuUm93U2VsZWN0b3JdOiBjZWxsQ2xhc3NSdWxlVHJ1ZUV4cHJlc3Npb24sXG4gICAgICAgICAgICBbU2t5Q2VsbENsYXNzLlVuZWRpdGFibGVdOiBjZWxsQ2xhc3NSdWxlVHJ1ZUV4cHJlc3Npb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjZWxsUmVuZGVyZXI6IFNreUFnR3JpZENlbGxSZW5kZXJlclJvd1NlbGVjdG9yQ29tcG9uZW50LFxuICAgICAgICAgIGhlYWRlck5hbWU6ICcnLFxuICAgICAgICAgIG1pbldpZHRoOiA1NSxcbiAgICAgICAgICBtYXhXaWR0aDogNTUsXG4gICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICAgIHdpZHRoOiA1NSxcbiAgICAgICAgfSxcbiAgICAgICAgW1NreUNlbGxUeXBlLlRleHRdOiB7XG4gICAgICAgICAgY2VsbENsYXNzUnVsZXM6IHtcbiAgICAgICAgICAgIFtTa3lDZWxsQ2xhc3MuVGV4dF06IGNlbGxDbGFzc1J1bGVUcnVlRXhwcmVzc2lvbixcbiAgICAgICAgICAgIC4uLnZhbGlkYXRvckNlbGxDbGFzc1J1bGVzLFxuICAgICAgICAgICAgLi4uZWRpdGFibGVDZWxsQ2xhc3NSdWxlcyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNlbGxFZGl0b3I6IFNreUFnR3JpZENlbGxFZGl0b3JUZXh0Q29tcG9uZW50LFxuICAgICAgICAgIGNlbGxSZW5kZXJlclNlbGVjdG9yOiBnZXRWYWxpZGF0b3JDZWxsUmVuZGVyZXJTZWxlY3RvcihcbiAgICAgICAgICAgICdza3ktYWctZ3JpZC1jZWxsLXJlbmRlcmVyLXZhbGlkYXRvci10b29sdGlwJ1xuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIFtTa3lDZWxsVHlwZS5WYWxpZGF0b3JdOiB7XG4gICAgICAgICAgY2VsbENsYXNzUnVsZXM6IHtcbiAgICAgICAgICAgIC4uLnZhbGlkYXRvckNlbGxDbGFzc1J1bGVzLFxuICAgICAgICAgICAgLi4uZWRpdGFibGVDZWxsQ2xhc3NSdWxlcyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNlbGxSZW5kZXJlclNlbGVjdG9yOiBnZXRWYWxpZGF0b3JDZWxsUmVuZGVyZXJTZWxlY3RvcihcbiAgICAgICAgICAgICdza3ktYWctZ3JpZC1jZWxsLXJlbmRlcmVyLXZhbGlkYXRvci10b29sdGlwJ1xuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZGVmYXVsdENvbERlZjoge1xuICAgICAgICBjZWxsQ2xhc3NSdWxlczogZWRpdGFibGVDZWxsQ2xhc3NSdWxlcyxcbiAgICAgICAgaGVhZGVyQ29tcG9uZW50OiBTa3lBZ0dyaWRIZWFkZXJDb21wb25lbnQsXG4gICAgICAgIG1pbldpZHRoOiAxMDAsXG4gICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgICAgIHN1cHByZXNzSGVhZGVyS2V5Ym9hcmRFdmVudDogKFxuICAgICAgICAgIGtleXByZXNzOiBTdXBwcmVzc0hlYWRlcktleWJvYXJkRXZlbnRQYXJhbXNcbiAgICAgICAgKSA9PiBrZXlwcmVzcy5ldmVudC5jb2RlID09PSAnVGFiJyxcbiAgICAgICAgc3VwcHJlc3NLZXlib2FyZEV2ZW50OiAoa2V5cHJlc3M6IFN1cHByZXNzS2V5Ym9hcmRFdmVudFBhcmFtcykgPT5cbiAgICAgICAgICB0aGlzLiNzdXBwcmVzc1RhYihrZXlwcmVzcyksXG4gICAgICB9LFxuICAgICAgZGVmYXVsdENvbEdyb3VwRGVmOiB7XG4gICAgICAgIGhlYWRlckdyb3VwQ29tcG9uZW50OiBTa3lBZ0dyaWRIZWFkZXJHcm91cENvbXBvbmVudCxcbiAgICAgIH0sXG4gICAgICBkb21MYXlvdXQ6ICdhdXRvSGVpZ2h0JyxcbiAgICAgIGVuc3VyZURvbU9yZGVyOiB0cnVlLFxuICAgICAgZW50ZXJNb3Zlc0Rvd25BZnRlckVkaXQ6IHRydWUsXG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICdza3ktYWctZ3JpZC1jZWxsLXJlbmRlcmVyLWN1cnJlbmN5JzpcbiAgICAgICAgICBTa3lBZ0dyaWRDZWxsUmVuZGVyZXJDdXJyZW5jeUNvbXBvbmVudCxcbiAgICAgICAgJ3NreS1hZy1ncmlkLWNlbGwtcmVuZGVyZXItY3VycmVuY3ktdmFsaWRhdG9yJzpcbiAgICAgICAgICBTa3lBZ0dyaWRDZWxsUmVuZGVyZXJDdXJyZW5jeVZhbGlkYXRvckNvbXBvbmVudCxcbiAgICAgICAgJ3NreS1hZy1ncmlkLWNlbGwtcmVuZGVyZXItdmFsaWRhdG9yLXRvb2x0aXAnOlxuICAgICAgICAgIFNreUFnR3JpZENlbGxSZW5kZXJlclZhbGlkYXRvclRvb2x0aXBDb21wb25lbnQsXG4gICAgICB9LFxuICAgICAgZ2V0Um93SWQ6IChwYXJhbXMpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YUlkID0gcGFyYW1zLmRhdGEuaWQ7XG4gICAgICAgIGlmIChkYXRhSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBgJHtwYXJhbXMuZGF0YS5pZH1gO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy4ja2V5TWFwLmhhcyhwYXJhbXMuZGF0YSkpIHtcbiAgICAgICAgICB0aGlzLiNrZXlNYXAuc2V0KHBhcmFtcy5kYXRhLCBgJHtyb3dOb2RlSWQtLX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy4ja2V5TWFwLmdldChwYXJhbXMuZGF0YSkgYXMgc3RyaW5nO1xuICAgICAgfSxcbiAgICAgIGdldFJvd0NsYXNzOiAocGFyYW1zOiBSb3dDbGFzc1BhcmFtcykgPT4ge1xuICAgICAgICBpZiAocGFyYW1zLm5vZGUuaWQpIHtcbiAgICAgICAgICByZXR1cm4gYHNreS1hZy1ncmlkLXJvdy0ke3BhcmFtcy5ub2RlLmlkfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhlYWRlckhlaWdodDogdGhpcy5nZXRIZWFkZXJIZWlnaHQoKSxcbiAgICAgIGljb25zOiB7XG4gICAgICAgIHNvcnREZXNjZW5kaW5nOiB0aGlzLiNnZXRJY29uVGVtcGxhdGUoJ3NvcnREZXNjZW5kaW5nJyksXG4gICAgICAgIHNvcnRBc2NlbmRpbmc6IHRoaXMuI2dldEljb25UZW1wbGF0ZSgnc29ydEFzY2VuZGluZycpLFxuICAgICAgICBjb2x1bW5Nb3ZlTW92ZTogdGhpcy4jZ2V0SWNvblRlbXBsYXRlKCdjb2x1bW5Nb3ZlTW92ZScpLFxuICAgICAgICBjb2x1bW5Nb3ZlSGlkZTogdGhpcy4jZ2V0SWNvblRlbXBsYXRlKCdjb2x1bW5Nb3ZlSGlkZScpLFxuICAgICAgICBjb2x1bW5Nb3ZlTGVmdDogdGhpcy4jZ2V0SWNvblRlbXBsYXRlKCdjb2x1bW5Nb3ZlTGVmdCcpLFxuICAgICAgICBjb2x1bW5Nb3ZlUmlnaHQ6IHRoaXMuI2dldEljb25UZW1wbGF0ZSgnY29sdW1uTW92ZVJpZ2h0JyksXG4gICAgICAgIGNvbHVtbk1vdmVQaW46IHRoaXMuI2dldEljb25UZW1wbGF0ZSgnY29sdW1uTW92ZVBpbicpLFxuICAgICAgfSxcbiAgICAgIG9uQ2VsbEZvY3VzZWQ6ICgpID0+IHRoaXMuI29uQ2VsbEZvY3VzZWQoKSxcbiAgICAgIHJvd0hlaWdodDogdGhpcy4jZ2V0Um93SGVpZ2h0KCksXG4gICAgICBnZXRSb3dIZWlnaHQ6ICgpID0+IHRoaXMuI2dldFJvd0hlaWdodCgpLFxuICAgICAgcm93TXVsdGlTZWxlY3RXaXRoQ2xpY2s6IHRydWUsXG4gICAgICByb3dTZWxlY3Rpb246ICdtdWx0aXBsZScsXG4gICAgICBzaW5nbGVDbGlja0VkaXQ6IHRydWUsXG4gICAgICBzb3J0aW5nT3JkZXI6IFsnZGVzYycsICdhc2MnLCBudWxsXSxcbiAgICAgIHN1cHByZXNzUm93Q2xpY2tTZWxlY3Rpb246IHRydWUsXG4gICAgICBzdXBwcmVzc0RyYWdMZWF2ZUhpZGVzQ29sdW1uczogdHJ1ZSxcbiAgICB9O1xuXG4gICAgY29uc3QgY29sdW1uVHlwZXMgPSBkZWZhdWx0U2t5R3JpZE9wdGlvbnMuY29sdW1uVHlwZXMgYXMgUmVjb3JkPFxuICAgICAgc3RyaW5nLFxuICAgICAgQ29sRGVmXG4gICAgPjtcblxuICAgIGNvbHVtblR5cGVzW1NreUNlbGxUeXBlLkN1cnJlbmN5VmFsaWRhdG9yXSA9IHtcbiAgICAgIC4uLmNvbHVtblR5cGVzW1NreUNlbGxUeXBlLkN1cnJlbmN5XSxcbiAgICAgIGNlbGxSZW5kZXJlclBhcmFtczoge1xuICAgICAgICBza3lDb21wb25lbnRQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgdmFsaWRhdG9yOiAodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgcmV0dXJuICEhYCR7dmFsdWUgfHwgJyd9YC5tYXRjaCgvXlteMC05XSooXFxkK1ssLl0/KStcXGQqW14wLTldKiQvKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHZhbGlkYXRvck1lc3NhZ2U6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBjdXJyZW5jeScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gICAgLyppc3RhbmJ1bCBpZ25vcmUgZWxzZSovXG4gICAgaWYgKHRoaXMuI3Jlc291cmNlcykge1xuICAgICAgdGhpcy4jcmVzb3VyY2VzXG4gICAgICAgIC5nZXRTdHJpbmcoJ3NreV9hZ19ncmlkX2NlbGxfcmVuZGVyZXJfY3VycmVuY3lfdmFsaWRhdG9yX21lc3NhZ2UnKVxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGNvbHVtblR5cGVzW1xuICAgICAgICAgICAgU2t5Q2VsbFR5cGUuQ3VycmVuY3lWYWxpZGF0b3JcbiAgICAgICAgICBdLmNlbGxSZW5kZXJlclBhcmFtcy5za3lDb21wb25lbnRQcm9wZXJ0aWVzLnZhbGlkYXRvck1lc3NhZ2UgPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29sdW1uVHlwZXNbU2t5Q2VsbFR5cGUuTnVtYmVyVmFsaWRhdG9yXSA9IHtcbiAgICAgIC4uLmNvbHVtblR5cGVzW1NreUNlbGxUeXBlLlZhbGlkYXRvcl0sXG4gICAgICAuLi5jb2x1bW5UeXBlc1tTa3lDZWxsVHlwZS5OdW1iZXJdLFxuICAgICAgY2VsbENsYXNzUnVsZXM6IHtcbiAgICAgICAgLi4uY29sdW1uVHlwZXNbU2t5Q2VsbFR5cGUuVmFsaWRhdG9yXS5jZWxsQ2xhc3NSdWxlcyxcbiAgICAgICAgLi4uY29sdW1uVHlwZXNbU2t5Q2VsbFR5cGUuTnVtYmVyXS5jZWxsQ2xhc3NSdWxlcyxcbiAgICAgIH0sXG4gICAgICBjZWxsUmVuZGVyZXJQYXJhbXM6IHtcbiAgICAgICAgc2t5Q29tcG9uZW50UHJvcGVydGllczoge1xuICAgICAgICAgIHZhbGlkYXRvcjogKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhIXZhbHVlICYmICFpc05hTihwYXJzZUZsb2F0KHZhbHVlKSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB2YWxpZGF0b3JNZXNzYWdlOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgbnVtYmVyJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbHNlKi9cbiAgICBpZiAodGhpcy4jcmVzb3VyY2VzKSB7XG4gICAgICB0aGlzLiNyZXNvdXJjZXNcbiAgICAgICAgLmdldFN0cmluZygnc2t5X2FnX2dyaWRfY2VsbF9yZW5kZXJlcl9udW1iZXJfdmFsaWRhdG9yX21lc3NhZ2UnKVxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGNvbHVtblR5cGVzW1xuICAgICAgICAgICAgU2t5Q2VsbFR5cGUuTnVtYmVyVmFsaWRhdG9yXG4gICAgICAgICAgXS5jZWxsUmVuZGVyZXJQYXJhbXMuc2t5Q29tcG9uZW50UHJvcGVydGllcy52YWxpZGF0b3JNZXNzYWdlID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBkZWZhdWx0U2t5R3JpZE9wdGlvbnM7XG4gIH1cblxuICAjb25DZWxsRm9jdXNlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50RWxlbWVudCA9IHRoaXMuI2FnR3JpZEFkYXB0ZXJTZXJ2aWNlLmdldEZvY3VzZWRFbGVtZW50KCk7XG5cbiAgICB0aGlzLiNhZ0dyaWRBZGFwdGVyU2VydmljZS5mb2N1c09uRm9jdXNhYmxlQ2hpbGRyZW4oY3VycmVudEVsZW1lbnQpO1xuICB9XG5cbiAgI2dldERlZmF1bHRFZGl0YWJsZUdyaWRPcHRpb25zKGFyZ3M6IFNreUdldEdyaWRPcHRpb25zQXJncyk6IEdyaWRPcHRpb25zIHtcbiAgICBjb25zdCBkZWZhdWx0R3JpZE9wdGlvbnMgPSB0aGlzLiNnZXREZWZhdWx0R3JpZE9wdGlvbnMoYXJncyk7XG5cbiAgICBkZWZhdWx0R3JpZE9wdGlvbnMucm93U2VsZWN0aW9uID0gdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIGRlZmF1bHRHcmlkT3B0aW9ucztcbiAgfVxuXG4gICNkYXRlRm9ybWF0dGVyKFxuICAgIHBhcmFtczogVmFsdWVGb3JtYXR0ZXJQYXJhbXMsXG4gICAgbG9jYWxlOiBzdHJpbmcgPSAnZW4tdXMnXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0ZUNvbmZpZyA9IHsgeWVhcjogJ251bWVyaWMnLCBtb250aDogJzItZGlnaXQnLCBkYXk6ICcyLWRpZ2l0JyB9O1xuICAgIGxldCBkYXRlOiBEYXRlID0gcGFyYW1zLnZhbHVlO1xuXG4gICAgaWYgKGRhdGUgJiYgdHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRlID0gbmV3IERhdGUocGFyYW1zLnZhbHVlKTtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtYXR0ZWREYXRlID1cbiAgICAgIGRhdGUgJiZcbiAgICAgIGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nICYmXG4gICAgICBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyhsb2NhbGUsIGRhdGVDb25maWcgYXMgSW50bC5EYXRlVGltZUZvcm1hdE9wdGlvbnMpO1xuXG4gICAgaWYgKGRhdGUgJiYgZGF0ZS5nZXRUaW1lICYmICFpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgIHJldHVybiBmb3JtYXR0ZWREYXRlO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gICNnZXRJY29uVGVtcGxhdGUoaWNvbk5hbWU6IGtleW9mIEljb25NYXBUeXBlKTogKCkgPT4gc3RyaW5nIHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3QgaWNvbiA9IGljb25NYXBbaWNvbk5hbWVdO1xuICAgICAgaWYgKHRoaXMuI2N1cnJlbnRUaGVtZT8udGhlbWUubmFtZSA9PT0gJ21vZGVybicgJiYgaWNvbi5za3lJY29uKSB7XG4gICAgICAgIHJldHVybiBgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJza3ktaS0ke2ljb24uc2t5SWNvbn1cIj48L2k+YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJmYSBmYS0ke2ljb24uZmFJY29ufVwiPjwvaT5gO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAjc3VwcHJlc3NUYWIocGFyYW1zOiBTdXBwcmVzc0tleWJvYXJkRXZlbnRQYXJhbXMpOiBib29sZWFuIHtcbiAgICBpZiAocGFyYW1zLmV2ZW50LmNvZGUgPT09ICdUYWInKSB7XG4gICAgICBpZiAocGFyYW1zLmVkaXRpbmcpIHtcbiAgICAgICAgY29uc3QgY3VycmVudGx5Rm9jdXNlZEVsID1cbiAgICAgICAgICB0aGlzLiNhZ0dyaWRBZGFwdGVyU2VydmljZS5nZXRGb2N1c2VkRWxlbWVudCgpO1xuICAgICAgICAvLyBpbmxpbmUgY2VsbCBlZGl0b3JzIGhhdmUgdGhlICdhZy1jZWxsJyBjbGFzcywgd2hpbGUgcG9wdXAgZWRpdG9ycyBoYXZlIHRoZSAnYWctcG9wdXAtZWRpdG9yJyBjbGFzc1xuICAgICAgICBjb25zdCBjZWxsRWwgPSB0aGlzLiNhZ0dyaWRBZGFwdGVyU2VydmljZS5nZXRFbGVtZW50T3JQYXJlbnRXaXRoQ2xhc3MoXG4gICAgICAgICAgY3VycmVudGx5Rm9jdXNlZEVsLFxuICAgICAgICAgICdhZy1jZWxsJ1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBwb3B1cEVsID0gdGhpcy4jYWdHcmlkQWRhcHRlclNlcnZpY2UuZ2V0RWxlbWVudE9yUGFyZW50V2l0aENsYXNzKFxuICAgICAgICAgIGN1cnJlbnRseUZvY3VzZWRFbCxcbiAgICAgICAgICAnYWctcG9wdXAtZWRpdG9yJ1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBwYXJlbnRFbCA9IGNlbGxFbCB8fCBwb3B1cEVsO1xuXG4gICAgICAgIGNvbnN0IG5leHRGb2N1c2FibGVFbGVtZW50SW5DZWxsID1cbiAgICAgICAgICB0aGlzLiNhZ0dyaWRBZGFwdGVyU2VydmljZS5nZXROZXh0Rm9jdXNhYmxlRWxlbWVudChcbiAgICAgICAgICAgIGN1cnJlbnRseUZvY3VzZWRFbCxcbiAgICAgICAgICAgIHBhcmVudEVsLFxuICAgICAgICAgICAgcGFyYW1zLmV2ZW50LnNoaWZ0S2V5XG4gICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuICEhbmV4dEZvY3VzYWJsZUVsZW1lbnRJbkNlbGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgI2dldFJvd0hlaWdodCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNjdXJyZW50VGhlbWU/LnRoZW1lPy5uYW1lID09PSAnbW9kZXJuJyA/IDYwIDogMzg7XG4gIH1cbn1cbiJdfQ==