@recursyve/nice-data-filter-kit 12.1.28 → 13.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/_index.scss +1 -7
  2. package/{esm2015/lib/api/dto/saved-reports.dto.js → esm2020/lib/api/dto/saved-reports.dto.mjs} +0 -0
  3. package/esm2020/lib/api/filter.api.mjs +51 -0
  4. package/{esm2015/lib/api/models/saved-reports.model.js → esm2020/lib/api/models/saved-reports.model.mjs} +0 -0
  5. package/{esm2015/lib/api/public-api.js → esm2020/lib/api/public-api.mjs} +0 -0
  6. package/esm2020/lib/api/saved-report.api.mjs +48 -0
  7. package/esm2020/lib/components/base-list/base-list.component.mjs +288 -0
  8. package/{esm2015/lib/components/base-list/base-list.constant.js → esm2020/lib/components/base-list/base-list.constant.mjs} +0 -0
  9. package/esm2020/lib/components/base-list/base-list.module.mjs +171 -0
  10. package/{esm2015/lib/components/base-list/directives/base-list-buttons.directive.js → esm2020/lib/components/base-list/directives/base-list-buttons.directive.mjs} +3 -3
  11. package/{esm2015/lib/components/base-list/directives/base-list-cards.directive.js → esm2020/lib/components/base-list/directives/base-list-cards.directive.mjs} +3 -3
  12. package/{esm2015/lib/components/base-list/directives/base-list-custom-content.directive.js → esm2020/lib/components/base-list/directives/base-list-custom-content.directive.mjs} +3 -3
  13. package/esm2020/lib/components/base-list/directives/base-list-directives.module.mjs +45 -0
  14. package/esm2020/lib/components/base-list/directives/base-list-filters.directive.mjs +14 -0
  15. package/{esm2015/lib/components/base-list/directives/base-list-table.directive.js → esm2020/lib/components/base-list/directives/base-list-table.directive.mjs} +3 -3
  16. package/{esm2015/lib/components/base-list/directives/base-list-title.directive.js → esm2020/lib/components/base-list/directives/base-list-title.directive.mjs} +3 -3
  17. package/{esm2015/lib/components/base-list/models/columns.model.js → esm2020/lib/components/base-list/models/columns.model.mjs} +0 -0
  18. package/{esm2015/lib/components/base-list/models/export.model.js → esm2020/lib/components/base-list/models/export.model.mjs} +0 -0
  19. package/esm2020/lib/components/base-list/models/layout.model.mjs +149 -0
  20. package/esm2020/lib/components/base-list/providers/base-filter.service.mjs +34 -0
  21. package/{esm2015/lib/components/base-list/providers/base-list-saved-report.service.js → esm2020/lib/components/base-list/providers/base-list-saved-report.service.mjs} +3 -3
  22. package/esm2020/lib/components/base-list/public-api.mjs +17 -0
  23. package/esm2020/lib/components/base-list/store/base-list.query.mjs +35 -0
  24. package/esm2020/lib/components/base-list/store/base-list.service.mjs +341 -0
  25. package/esm2020/lib/components/base-list/store/base-list.store.mjs +81 -0
  26. package/{esm2015/lib/components/multi-state-list/models/list-states.model.js → esm2020/lib/components/multi-state-list/models/list-states.model.mjs} +0 -0
  27. package/esm2020/lib/components/multi-state-list/multi-state-list.component.mjs +71 -0
  28. package/{esm2015/lib/components/multi-state-list/multi-state-list.constant.js → esm2020/lib/components/multi-state-list/multi-state-list.constant.mjs} +0 -0
  29. package/{esm2015/lib/components/multi-state-list/multi-state-list.module.js → esm2020/lib/components/multi-state-list/multi-state-list.module.mjs} +6 -14
  30. package/{esm2015/lib/components/multi-state-list/providers/multi-state-filter.service.js → esm2020/lib/components/multi-state-list/providers/multi-state-filter.service.mjs} +0 -0
  31. package/{esm2015/lib/components/multi-state-list/public-api.js → esm2020/lib/components/multi-state-list/public-api.mjs} +0 -0
  32. package/{esm2015/lib/components/multi-state-list/store/multi-state-list.query.js → esm2020/lib/components/multi-state-list/store/multi-state-list.query.mjs} +3 -3
  33. package/{esm2015/lib/components/multi-state-list/store/multi-state-list.service.js → esm2020/lib/components/multi-state-list/store/multi-state-list.service.mjs} +5 -6
  34. package/esm2020/lib/components/multi-state-list/store/multi-state-list.store.mjs +24 -0
  35. package/{esm2015/lib/components/public-api.js → esm2020/lib/components/public-api.mjs} +0 -0
  36. package/esm2020/lib/components/query-builder/filter-selection/filter-selection.component.mjs +41 -0
  37. package/{esm2015/lib/components/query-builder/pipes/filter-group-icon.pipe.js → esm2020/lib/components/query-builder/pipes/filter-group-icon.pipe.mjs} +3 -3
  38. package/{esm2015/lib/components/query-builder/providers/filter-group.service.js → esm2020/lib/components/query-builder/providers/filter-group.service.mjs} +0 -0
  39. package/{esm2015/lib/components/query-builder/public-api.js → esm2020/lib/components/query-builder/public-api.mjs} +0 -0
  40. package/{esm2015/lib/components/query-builder/query-builder-trigger.directive.js → esm2020/lib/components/query-builder/query-builder-trigger.directive.mjs} +3 -3
  41. package/esm2020/lib/components/query-builder/query-builder.component.mjs +93 -0
  42. package/{esm2015/lib/components/query-builder/query-builder.form.js → esm2020/lib/components/query-builder/query-builder.form.mjs} +0 -0
  43. package/esm2020/lib/components/query-builder/query-builder.module.mjs +116 -0
  44. package/esm2020/lib/components/query-builder/rule/components/date/date-filter.component.mjs +29 -0
  45. package/{esm2015/lib/components/query-builder/rule/components/filter.component.js → esm2020/lib/components/query-builder/rule/components/filter.component.mjs} +3 -3
  46. package/esm2020/lib/components/query-builder/rule/components/number/number-filter.component.mjs +28 -0
  47. package/esm2020/lib/components/query-builder/rule/components/radio/radio-filter.component.mjs +30 -0
  48. package/esm2020/lib/components/query-builder/rule/components/select/select-filter.component.mjs +83 -0
  49. package/esm2020/lib/components/query-builder/rule/components/text/text-filter.component.mjs +31 -0
  50. package/esm2020/lib/components/query-builder/rule/rule.component.mjs +78 -0
  51. package/{esm2015/lib/components/query-builder/utils/qb-filter.utils.js → esm2020/lib/components/query-builder/utils/qb-filter.utils.mjs} +23 -9
  52. package/{esm2015/lib/models/filter.model.js → esm2020/lib/models/filter.model.mjs} +0 -0
  53. package/{esm2015/lib/models/public-api.js → esm2020/lib/models/public-api.mjs} +0 -0
  54. package/{esm2015/lib/models/query.model.js → esm2020/lib/models/query.model.mjs} +0 -0
  55. package/{esm2015/lib/utils/date.adapter.js → esm2020/lib/utils/date.adapter.mjs} +3 -3
  56. package/esm2020/lib/utils/filter.utils.mjs +40 -0
  57. package/{esm2015/lib/utils/public-api.js → esm2020/lib/utils/public-api.mjs} +0 -0
  58. package/{esm2015/lib/utils/query-params.utils.js → esm2020/lib/utils/query-params.utils.mjs} +0 -0
  59. package/{esm2015/lib/utils/string.utils.js → esm2020/lib/utils/string.utils.mjs} +0 -0
  60. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  61. package/{esm2015/recursyve-nice-data-filter-kit.js → esm2020/recursyve-nice-data-filter-kit.mjs} +0 -0
  62. package/fesm2015/recursyve-nice-data-filter-kit.mjs +2448 -0
  63. package/fesm2015/recursyve-nice-data-filter-kit.mjs.map +1 -0
  64. package/fesm2020/recursyve-nice-data-filter-kit.mjs +2446 -0
  65. package/fesm2020/recursyve-nice-data-filter-kit.mjs.map +1 -0
  66. package/lib/components/base-list/base-list.component.d.ts +3 -1
  67. package/lib/components/base-list/base-list.module.d.ts +15 -16
  68. package/lib/components/base-list/directives/base-list-directives.module.d.ts +2 -1
  69. package/lib/components/base-list/directives/base-list-filters.directive.d.ts +8 -0
  70. package/lib/components/base-list/models/layout.model.d.ts +1 -5
  71. package/lib/components/base-list/public-api.d.ts +1 -0
  72. package/lib/components/base-list/store/base-list.service.d.ts +1 -0
  73. package/lib/components/multi-state-list/multi-state-list.module.d.ts +15 -16
  74. package/lib/components/query-builder/query-builder.module.d.ts +10 -11
  75. package/package.json +30 -16
  76. package/src/lib/components/base-list/base-list.theme.scss +5 -5
  77. package/src/lib/components/query-builder/rule/rule.theme.scss +1 -1
  78. package/src/lib/nice-data-filter.theme.scss +7 -0
  79. package/bundles/recursyve-nice-data-filter-kit.umd.js +0 -3153
  80. package/bundles/recursyve-nice-data-filter-kit.umd.js.map +0 -1
  81. package/esm2015/lib/api/filter.api.js +0 -52
  82. package/esm2015/lib/api/saved-report.api.js +0 -49
  83. package/esm2015/lib/components/base-list/base-list.component.js +0 -290
  84. package/esm2015/lib/components/base-list/base-list.module.js +0 -180
  85. package/esm2015/lib/components/base-list/directives/base-list-directives.module.js +0 -40
  86. package/esm2015/lib/components/base-list/models/layout.model.js +0 -155
  87. package/esm2015/lib/components/base-list/providers/base-filter.service.js +0 -40
  88. package/esm2015/lib/components/base-list/public-api.js +0 -16
  89. package/esm2015/lib/components/base-list/store/base-list.query.js +0 -35
  90. package/esm2015/lib/components/base-list/store/base-list.service.js +0 -327
  91. package/esm2015/lib/components/base-list/store/base-list.store.js +0 -78
  92. package/esm2015/lib/components/multi-state-list/multi-state-list.component.js +0 -75
  93. package/esm2015/lib/components/multi-state-list/store/multi-state-list.store.js +0 -22
  94. package/esm2015/lib/components/query-builder/filter-selection/filter-selection.component.js +0 -48
  95. package/esm2015/lib/components/query-builder/query-builder.component.js +0 -100
  96. package/esm2015/lib/components/query-builder/query-builder.module.js +0 -120
  97. package/esm2015/lib/components/query-builder/rule/components/date/date-filter.component.js +0 -35
  98. package/esm2015/lib/components/query-builder/rule/components/number/number-filter.component.js +0 -34
  99. package/esm2015/lib/components/query-builder/rule/components/radio/radio-filter.component.js +0 -36
  100. package/esm2015/lib/components/query-builder/rule/components/select/select-filter.component.js +0 -94
  101. package/esm2015/lib/components/query-builder/rule/components/text/text-filter.component.js +0 -37
  102. package/esm2015/lib/components/query-builder/rule/rule.component.js +0 -86
  103. package/esm2015/lib/utils/filter.utils.js +0 -41
  104. package/fesm2015/recursyve-nice-data-filter-kit.js +0 -2485
  105. package/fesm2015/recursyve-nice-data-filter-kit.js.map +0 -1
@@ -1,327 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { ApplicationRef, Injectable } from "@angular/core";
3
- import { ActivatedRoute, Router } from "@angular/router";
4
- import { arrayRemove, arrayUpsert } from "@datorama/akita";
5
- import { FileUtils } from "@recursyve/nice-ui-kit.v2";
6
- import { Subject } from "rxjs";
7
- import { map, takeUntil } from "rxjs/operators";
8
- import { FilterUtils } from "../../../utils/filter.utils";
9
- import { QBFilterUtils } from "../../query-builder/utils/qb-filter.utils";
10
- import { QueryParamsUtils } from "../../../utils/query-params.utils";
11
- import { NiceFilterService } from "../providers/base-filter.service";
12
- import { NiceBaseListStore } from "./base-list.store";
13
- import * as i0 from "@angular/core";
14
- import * as i1 from "./base-list.store";
15
- import * as i2 from "../providers/base-filter.service";
16
- import * as i3 from "@angular/router";
17
- export class NiceBaseListService {
18
- constructor(store, filterService, activatedRoute, router, appRef) {
19
- this.store = store;
20
- this.filterService = filterService;
21
- this.activatedRoute = activatedRoute;
22
- this.router = router;
23
- this.appRef = appRef;
24
- this.queryParamsLoaded$ = new Subject();
25
- this.downloadFileName = "data";
26
- this.unsubscribeAll$ = new Subject();
27
- this.loadingData = false;
28
- }
29
- init() {
30
- return __awaiter(this, void 0, void 0, function* () {
31
- this.store.setFilterConfigLoading(true);
32
- try {
33
- const filterConfig = yield this.filterService.getFilterConfig().toPromise();
34
- this.store.update({
35
- filterConfig
36
- });
37
- }
38
- catch (e) {
39
- this.store.setError(e);
40
- }
41
- finally {
42
- this.store.setFilterConfigLoading(false);
43
- }
44
- });
45
- }
46
- resetStore() {
47
- this.store.reset();
48
- }
49
- resetData() {
50
- this.store.update({
51
- filterResult: null
52
- });
53
- }
54
- closeSubscriptions() {
55
- this.unsubscribeAll$.next();
56
- this.unsubscribeAll$.complete();
57
- this.queryParamsLoaded$.complete();
58
- }
59
- disableList() {
60
- this.store.update({
61
- disabled: true
62
- });
63
- }
64
- enableList() {
65
- this.store.update({
66
- disabled: false
67
- });
68
- }
69
- setMode(mode) {
70
- this.store.update({
71
- mergePageResults: mode === "infinite-scroll"
72
- });
73
- }
74
- loadQueryParams(autoLoad) {
75
- var _a;
76
- (_a = this.activatedRoute) === null || _a === void 0 ? void 0 : _a.queryParams.pipe(takeUntil(this.unsubscribeAll$), map((params) => {
77
- return {
78
- params: QueryParamsUtils.extractFilterParameters(params)
79
- };
80
- })).subscribe(({ params }) => {
81
- if (!params || Object.keys(params).length === 0) {
82
- params = this.store.getValue().filterParameters;
83
- }
84
- const { filterParameters, filterResult } = this.store.getValue();
85
- if (FilterUtils.filterChangeNeedsRefresh(filterParameters, params) ||
86
- !filterResult) {
87
- if (autoLoad) {
88
- this.loadData(params, false);
89
- }
90
- else {
91
- this.setParameters(params, false);
92
- }
93
- }
94
- this.queryParamsLoaded$.next();
95
- });
96
- }
97
- resetAndLoadData(parameters, updateQueryParams = true) {
98
- return __awaiter(this, void 0, void 0, function* () {
99
- return this.loadData(parameters, updateQueryParams, true);
100
- });
101
- }
102
- loadData(parameters, updateQueryParams = true, reset = false) {
103
- return __awaiter(this, void 0, void 0, function* () {
104
- const { disabled } = this.store.getValue();
105
- try {
106
- const filterParameters = this.mergeParameters(parameters);
107
- if (!disabled) {
108
- this.store.setLoading(true);
109
- this.loadingData = true;
110
- const result = yield this.filterService.filter(this.getParameters(filterParameters)).toPromise();
111
- this.store.setResult(result, reset);
112
- }
113
- if (filterParameters) {
114
- this.setParameters(filterParameters, disabled ? false : updateQueryParams);
115
- }
116
- }
117
- catch (e) {
118
- this.store.setError(e);
119
- }
120
- finally {
121
- this.store.setLoading(false);
122
- this.loadingData = false;
123
- }
124
- });
125
- }
126
- searchData(search) {
127
- return __awaiter(this, void 0, void 0, function* () {
128
- const { filterParameters } = this.store.getValue();
129
- yield this.loadData(Object.assign(Object.assign({}, filterParameters), { search }));
130
- });
131
- }
132
- loadNewPage(start, length) {
133
- return __awaiter(this, void 0, void 0, function* () {
134
- const { filterParameters } = this.store.getValue();
135
- yield this.loadData(Object.assign(Object.assign({}, filterParameters), { start,
136
- length }));
137
- });
138
- }
139
- loadNextPage() {
140
- return __awaiter(this, void 0, void 0, function* () {
141
- const { filterParameters } = this.store.getValue();
142
- yield this.loadData(Object.assign(Object.assign({}, filterParameters), { start: filterParameters.start + filterParameters.length }));
143
- });
144
- }
145
- resetPaging() {
146
- return __awaiter(this, void 0, void 0, function* () {
147
- const { filterParameters } = this.store.getValue();
148
- this.store.setParameters(Object.assign(Object.assign({}, filterParameters), { start: 0 }));
149
- this.store.update({
150
- resetPaging: true
151
- });
152
- });
153
- }
154
- downloadData(type, parameters, updateQueryParams = true) {
155
- return __awaiter(this, void 0, void 0, function* () {
156
- try {
157
- this.store.setLoading(true);
158
- this.loadingData = true;
159
- const filterParameters = this.mergeParameters(parameters);
160
- if (filterParameters) {
161
- this.setParameters(filterParameters, updateQueryParams);
162
- }
163
- const result = yield this.filterService.getFile(type, this.getParameters(filterParameters)).toPromise();
164
- FileUtils.downloadFile(`${this.downloadFileName}.${type}`, result);
165
- }
166
- catch (e) {
167
- this.store.setError(e);
168
- }
169
- finally {
170
- this.store.setLoading(false);
171
- this.loadingData = false;
172
- }
173
- });
174
- }
175
- printData(parameters, updateQueryParams = true) {
176
- return __awaiter(this, void 0, void 0, function* () {
177
- try {
178
- this.store.setLoading(true);
179
- this.loadingData = true;
180
- const filterParameters = this.mergeParameters(parameters);
181
- if (filterParameters) {
182
- this.setParameters(filterParameters, updateQueryParams);
183
- }
184
- const result = yield this.filterService.getPrintableHtml(this.getParameters(filterParameters)).toPromise();
185
- FileUtils.openPrintableWindow(result);
186
- }
187
- catch (e) {
188
- this.store.setError(e);
189
- }
190
- finally {
191
- this.store.setLoading(false);
192
- this.loadingData = false;
193
- }
194
- });
195
- }
196
- updateRule(id, newRule) {
197
- var _a;
198
- const { filterParameters } = this.store.getValue();
199
- const rules = (_a = filterParameters.rules) === null || _a === void 0 ? void 0 : _a[0];
200
- if (!rules || rules.rules.length === 0) {
201
- this.updateRules([newRule]);
202
- return;
203
- }
204
- const oldRule = rules.rules.find((r) => r.id === id);
205
- let newRules = rules.rules;
206
- if (oldRule) {
207
- if (newRule) {
208
- // Array replace
209
- newRules = [
210
- ...rules.rules.slice(0, rules.rules.indexOf(oldRule)),
211
- newRule,
212
- ...rules.rules.slice(rules.rules.indexOf(oldRule) + 1, rules.rules.length)
213
- ];
214
- }
215
- else {
216
- newRules = rules.rules.filter((r) => r.id !== id);
217
- }
218
- }
219
- else {
220
- newRules = [...newRules, newRule];
221
- }
222
- this.updateRules(newRules);
223
- }
224
- updateDefaultRules(rule) {
225
- this.store.update({
226
- defaultRules: rule
227
- });
228
- }
229
- updateGlobalRules(rules, updateQueryParams = true) {
230
- return __awaiter(this, void 0, void 0, function* () {
231
- const { filterParameters } = this.store.getValue();
232
- const newRules = Object.assign(Object.assign({}, filterParameters), { rules });
233
- yield this.loadData(newRules, updateQueryParams);
234
- });
235
- }
236
- addRuleFromConfig(config) {
237
- const { filterParameters } = this.store.getValue();
238
- const newRules = Object.assign(Object.assign({}, filterParameters), { rules: [
239
- ...filterParameters.rules,
240
- QBFilterUtils.createQueryModel(config)
241
- ] });
242
- this.store.update({
243
- showQueryBuilder: true
244
- });
245
- this.loadData(newRules, true);
246
- }
247
- updateRules(rules) {
248
- const { filterParameters } = this.store.getValue();
249
- const newRules = {
250
- order: filterParameters.order,
251
- rules: [
252
- {
253
- condition: "and",
254
- rules
255
- }
256
- ]
257
- };
258
- this.loadData(newRules, true);
259
- }
260
- toggleQueryBuilder() {
261
- this.store.update((state) => ({
262
- showQueryBuilder: !state.showQueryBuilder
263
- }));
264
- }
265
- updateListValue(value, key = "id") {
266
- const { filterResult } = this.store.getValue();
267
- if (!filterResult) {
268
- return;
269
- }
270
- this.store.update({
271
- filterResult: Object.assign(Object.assign({}, filterResult), { values: arrayUpsert(filterResult.values, value[key], value) })
272
- });
273
- }
274
- removeListValue(value, key = "id") {
275
- const { filterResult } = this.store.getValue();
276
- if (!filterResult) {
277
- return;
278
- }
279
- this.store.update({
280
- filterResult: Object.assign(Object.assign({}, filterResult), { values: arrayRemove(filterResult.values, value[key]) })
281
- });
282
- }
283
- updateQueryParams(queryParams) {
284
- return __awaiter(this, void 0, void 0, function* () {
285
- if (!this.activatedRoute) {
286
- return;
287
- }
288
- yield this.router.navigate([], {
289
- relativeTo: this.activatedRoute,
290
- queryParams,
291
- queryParamsHandling: "merge"
292
- });
293
- });
294
- }
295
- getParameters(filterParameters) {
296
- const { defaultRules } = this.store.getValue();
297
- const parameters = Object.assign(Object.assign({}, filterParameters), { rules: (filterParameters === null || filterParameters === void 0 ? void 0 : filterParameters.rules) ? [...filterParameters.rules] : [] });
298
- if (defaultRules === null || defaultRules === void 0 ? void 0 : defaultRules.length) {
299
- parameters.rules.push({
300
- condition: "and",
301
- rules: defaultRules
302
- });
303
- }
304
- return parameters;
305
- }
306
- mergeParameters(parameters) {
307
- const { filterParameters } = this.store.getValue();
308
- if (!parameters) {
309
- return filterParameters;
310
- }
311
- return Object.assign(Object.assign(Object.assign({}, filterParameters), parameters), { order: filterParameters.order && !parameters.order
312
- ? undefined
313
- : Object.assign(Object.assign({}, filterParameters.order), parameters.order) });
314
- }
315
- setParameters(parameters, updateQueryParams = true) {
316
- this.store.setParameters(parameters);
317
- if (updateQueryParams) {
318
- this.updateQueryParams(QueryParamsUtils.filterParametersToParamsMap(parameters));
319
- }
320
- }
321
- }
322
- NiceBaseListService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.0", ngImport: i0, type: NiceBaseListService, deps: [{ token: i1.NiceBaseListStore }, { token: i2.NiceFilterService }, { token: i3.ActivatedRoute }, { token: i3.Router }, { token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Injectable });
323
- NiceBaseListService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.0", ngImport: i0, type: NiceBaseListService });
324
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.0", ngImport: i0, type: NiceBaseListService, decorators: [{
325
- type: Injectable
326
- }], ctorParameters: function () { return [{ type: i1.NiceBaseListStore }, { type: i2.NiceFilterService }, { type: i3.ActivatedRoute }, { type: i3.Router }, { type: i0.ApplicationRef }]; } });
327
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1saXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uaWNlLWRhdGEtZmlsdGVyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvYmFzZS1saXN0L3N0b3JlL2Jhc2UtbGlzdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQWUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7OztBQUd0RCxNQUFNLE9BQU8sbUJBQW1CO0lBTzVCLFlBQ2MsS0FBd0IsRUFDeEIsYUFBcUMsRUFDckMsY0FBOEIsRUFDOUIsTUFBYyxFQUNkLE1BQXNCO1FBSnRCLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLGtCQUFhLEdBQWIsYUFBYSxDQUF3QjtRQUNyQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsV0FB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QW1COzJGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBsaWNhdGlvblJlZiwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgYXJyYXlSZW1vdmUsIGFycmF5VXBkYXRlLCBhcnJheVVwc2VydCB9IGZyb20gXCJAZGF0b3JhbWEvYWtpdGFcIjtcbmltcG9ydCB7IEZpbGVVdGlscyB9IGZyb20gXCJAcmVjdXJzeXZlL25pY2UtdWkta2l0LnYyXCI7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IG1hcCwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWd1cmF0aW9uTW9kZWwsIEZpbHRlclBhcmFtZXRlcnNNb2RlbCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZmlsdGVyLm1vZGVsXCI7XG5pbXBvcnQgeyBRdWVyeU1vZGVsLCBRdWVyeVJ1bGVNb2RlbCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvcXVlcnkubW9kZWxcIjtcbmltcG9ydCB7IEZpbHRlclV0aWxzIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2ZpbHRlci51dGlsc1wiO1xuaW1wb3J0IHsgUUJGaWx0ZXJVdGlscyB9IGZyb20gXCIuLi8uLi9xdWVyeS1idWlsZGVyL3V0aWxzL3FiLWZpbHRlci51dGlsc1wiO1xuaW1wb3J0IHsgUXVlcnlQYXJhbXNVdGlscyB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9xdWVyeS1wYXJhbXMudXRpbHNcIjtcbmltcG9ydCB7IE5pY2VGaWx0ZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL3Byb3ZpZGVycy9iYXNlLWZpbHRlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBOaWNlQmFzZUxpc3RTdG9yZSB9IGZyb20gXCIuL2Jhc2UtbGlzdC5zdG9yZVwiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmljZUJhc2VMaXN0U2VydmljZSB7XG4gICAgcHVibGljIHF1ZXJ5UGFyYW1zTG9hZGVkJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBwcm90ZWN0ZWQgZG93bmxvYWRGaWxlTmFtZSA9IFwiZGF0YVwiO1xuICAgIHByb3RlY3RlZCB1bnN1YnNjcmliZUFsbCQgPSBuZXcgU3ViamVjdCgpO1xuICAgIHByb3RlY3RlZCBsb2FkaW5nRGF0YSA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBzdG9yZTogTmljZUJhc2VMaXN0U3RvcmUsXG4gICAgICAgIHByb3RlY3RlZCBmaWx0ZXJTZXJ2aWNlOiBOaWNlRmlsdGVyU2VydmljZTxhbnk+LFxuICAgICAgICBwcm90ZWN0ZWQgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByb3RlY3RlZCBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmXG4gICAgKSB7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuc3RvcmUuc2V0RmlsdGVyQ29uZmlnTG9hZGluZyh0cnVlKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckNvbmZpZyA9IGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5nZXRGaWx0ZXJDb25maWcoKS50b1Byb21pc2UoKTtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUudXBkYXRlKHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJDb25maWdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNldEVycm9yKGUpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXRGaWx0ZXJDb25maWdMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZXNldFN0b3JlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3JlLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0RGF0YSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdG9yZS51cGRhdGUoe1xuICAgICAgICAgICAgZmlsdGVyUmVzdWx0OiBudWxsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZVN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVBbGwkLm5leHQoKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZUFsbCQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5xdWVyeVBhcmFtc0xvYWRlZCQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzYWJsZUxpc3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RvcmUudXBkYXRlKHtcbiAgICAgICAgICAgIGRpc2FibGVkOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbmFibGVMaXN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3JlLnVwZGF0ZSh7XG4gICAgICAgICAgICBkaXNhYmxlZDogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldE1vZGUobW9kZTogXCJub3JtYWxcIiB8IFwiaW5maW5pdGUtc2Nyb2xsXCIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdG9yZS51cGRhdGUoe1xuICAgICAgICAgICAgbWVyZ2VQYWdlUmVzdWx0czogbW9kZSA9PT0gXCJpbmZpbml0ZS1zY3JvbGxcIlxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9hZFF1ZXJ5UGFyYW1zKGF1dG9Mb2FkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGU/LnF1ZXJ5UGFyYW1zXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZUFsbCQpLFxuICAgICAgICAgICAgICAgIG1hcCgocGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFF1ZXJ5UGFyYW1zVXRpbHMuZXh0cmFjdEZpbHRlclBhcmFtZXRlcnMocGFyYW1zKVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IHBhcmFtcyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJhbXMgfHwgT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zID0gdGhpcy5zdG9yZS5nZXRWYWx1ZSgpLmZpbHRlclBhcmFtZXRlcnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZmlsdGVyUGFyYW1ldGVycywgZmlsdGVyUmVzdWx0IH0gPSB0aGlzLnN0b3JlLmdldFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJVdGlscy5maWx0ZXJDaGFuZ2VOZWVkc1JlZnJlc2goZmlsdGVyUGFyYW1ldGVycywgcGFyYW1zKSB8fFxuICAgICAgICAgICAgICAgICAgICAhZmlsdGVyUmVzdWx0XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdXRvTG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkRGF0YShwYXJhbXMsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UGFyYW1ldGVycyhwYXJhbXMsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlQYXJhbXNMb2FkZWQkLm5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZXNldEFuZExvYWREYXRhKHBhcmFtZXRlcnM/OiBGaWx0ZXJQYXJhbWV0ZXJzTW9kZWwsIHVwZGF0ZVF1ZXJ5UGFyYW1zOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkRGF0YShwYXJhbWV0ZXJzLCB1cGRhdGVRdWVyeVBhcmFtcywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGxvYWREYXRhKHBhcmFtZXRlcnM/OiBGaWx0ZXJQYXJhbWV0ZXJzTW9kZWwsIHVwZGF0ZVF1ZXJ5UGFyYW1zOiBib29sZWFuID0gdHJ1ZSwgcmVzZXQ6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB7IGRpc2FibGVkIH0gPSB0aGlzLnN0b3JlLmdldFZhbHVlKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJQYXJhbWV0ZXJzID0gdGhpcy5tZXJnZVBhcmFtZXRlcnMocGFyYW1ldGVycyk7XG4gICAgICAgICAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ0RhdGEgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXIodGhpcy5nZXRQYXJhbWV0ZXJzKGZpbHRlclBhcmFtZXRlcnMpKS50b1Byb21pc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLnNldFJlc3VsdChyZXN1bHQsIHJlc2V0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpbHRlclBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFBhcmFtZXRlcnMoZmlsdGVyUGFyYW1ldGVycywgZGlzYWJsZWQgPyBmYWxzZSA6IHVwZGF0ZVF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXRFcnJvcihlKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdEYXRhID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VhcmNoRGF0YShzZWFyY2g6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB7IGZpbHRlclBhcmFtZXRlcnMgfSA9IHRoaXMuc3RvcmUuZ2V0VmFsdWUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkRGF0YSh7XG4gICAgICAgICAgICAuLi5maWx0ZXJQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgc2VhcmNoXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBsb2FkTmV3UGFnZShzdGFydDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB7IGZpbHRlclBhcmFtZXRlcnMgfSA9IHRoaXMuc3RvcmUuZ2V0VmFsdWUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkRGF0YSh7XG4gICAgICAgICAgICAuLi5maWx0ZXJQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgICBsZW5ndGhcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGxvYWROZXh0UGFnZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgeyBmaWx0ZXJQYXJhbWV0ZXJzIH0gPSB0aGlzLnN0b3JlLmdldFZhbHVlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZERhdGEoe1xuICAgICAgICAgICAgLi4uZmlsdGVyUGFyYW1ldGVycyxcbiAgICAgICAgICAgIHN0YXJ0OiBmaWx0ZXJQYXJhbWV0ZXJzLnN0YXJ0ICsgZmlsdGVyUGFyYW1ldGVycy5sZW5ndGhcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlc2V0UGFnaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB7IGZpbHRlclBhcmFtZXRlcnMgfSA9IHRoaXMuc3RvcmUuZ2V0VmFsdWUoKTtcbiAgICAgICAgdGhpcy5zdG9yZS5zZXRQYXJhbWV0ZXJzKHtcbiAgICAgICAgICAgIC4uLmZpbHRlclBhcmFtZXRlcnMsXG4gICAgICAgICAgICBzdGFydDogMFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdG9yZS51cGRhdGUoe1xuICAgICAgICAgICAgcmVzZXRQYWdpbmc6IHRydWVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkRGF0YShcbiAgICAgICAgdHlwZTogc3RyaW5nLFxuICAgICAgICBwYXJhbWV0ZXJzPzogRmlsdGVyUGFyYW1ldGVyc01vZGVsLFxuICAgICAgICB1cGRhdGVRdWVyeVBhcmFtczogYm9vbGVhbiA9IHRydWVcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ0RhdGEgPSB0cnVlO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyUGFyYW1ldGVycyA9IHRoaXMubWVyZ2VQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgaWYgKGZpbHRlclBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFBhcmFtZXRlcnMoZmlsdGVyUGFyYW1ldGVycywgdXBkYXRlUXVlcnlQYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmdldEZpbGUodHlwZSwgdGhpcy5nZXRQYXJhbWV0ZXJzKGZpbHRlclBhcmFtZXRlcnMpKS50b1Byb21pc2UoKTtcbiAgICAgICAgICAgIEZpbGVVdGlscy5kb3dubG9hZEZpbGUoYCR7dGhpcy5kb3dubG9hZEZpbGVOYW1lfS4ke3R5cGV9YCwgcmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXRFcnJvcihlKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdEYXRhID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcHJpbnREYXRhKHBhcmFtZXRlcnM/OiBGaWx0ZXJQYXJhbWV0ZXJzTW9kZWwsIHVwZGF0ZVF1ZXJ5UGFyYW1zOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nRGF0YSA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJQYXJhbWV0ZXJzID0gdGhpcy5tZXJnZVBhcmFtZXRlcnMocGFyYW1ldGVycyk7XG4gICAgICAgICAgICBpZiAoZmlsdGVyUGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UGFyYW1ldGVycyhmaWx0ZXJQYXJhbWV0ZXJzLCB1cGRhdGVRdWVyeVBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmZpbHRlclNlcnZpY2UuZ2V0UHJpbnRhYmxlSHRtbCh0aGlzLmdldFBhcmFtZXRlcnMoZmlsdGVyUGFyYW1ldGVycykpLnRvUHJvbWlzZSgpO1xuICAgICAgICAgICAgRmlsZVV0aWxzLm9wZW5QcmludGFibGVXaW5kb3cocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXRFcnJvcihlKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdEYXRhID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlUnVsZShpZDogc3RyaW5nLCBuZXdSdWxlOiBRdWVyeVJ1bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IGZpbHRlclBhcmFtZXRlcnMgfSA9IHRoaXMuc3RvcmUuZ2V0VmFsdWUoKTtcbiAgICAgICAgY29uc3QgcnVsZXMgPSBmaWx0ZXJQYXJhbWV0ZXJzLnJ1bGVzPy5bMF07XG4gICAgICAgIGlmICghcnVsZXMgfHwgcnVsZXMucnVsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJ1bGVzKFtuZXdSdWxlXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvbGRSdWxlID0gcnVsZXMucnVsZXMuZmluZCgocikgPT4gKHIgYXMgUXVlcnlSdWxlTW9kZWwpLmlkID09PSBpZCkgYXMgUXVlcnlSdWxlTW9kZWw7XG4gICAgICAgIGxldCBuZXdSdWxlcyA9IHJ1bGVzLnJ1bGVzO1xuICAgICAgICBpZiAob2xkUnVsZSkge1xuICAgICAgICAgICAgaWYgKG5ld1J1bGUpIHtcbiAgICAgICAgICAgICAgICAvLyBBcnJheSByZXBsYWNlXG4gICAgICAgICAgICAgICAgbmV3UnVsZXMgPSBbXG4gICAgICAgICAgICAgICAgICAgIC4uLnJ1bGVzLnJ1bGVzLnNsaWNlKDAsIHJ1bGVzLnJ1bGVzLmluZGV4T2Yob2xkUnVsZSkpLFxuICAgICAgICAgICAgICAgICAgICBuZXdSdWxlLFxuICAgICAgICAgICAgICAgICAgICAuLi5ydWxlcy5ydWxlcy5zbGljZShydWxlcy5ydWxlcy5pbmRleE9mKG9sZFJ1bGUpICsgMSwgcnVsZXMucnVsZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld1J1bGVzID0gcnVsZXMucnVsZXMuZmlsdGVyKChyKSA9PiAociBhcyBRdWVyeVJ1bGVNb2RlbCkuaWQgIT09IGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1J1bGVzID0gWy4uLm5ld1J1bGVzLCBuZXdSdWxlXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVJ1bGVzKG5ld1J1bGVzIGFzIFF1ZXJ5UnVsZU1vZGVsW10pO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVEZWZhdWx0UnVsZXMocnVsZTogKFF1ZXJ5UnVsZU1vZGVsIHwgUXVlcnlNb2RlbClbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3JlLnVwZGF0ZSh7XG4gICAgICAgICAgICBkZWZhdWx0UnVsZXM6IHJ1bGVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHVwZGF0ZUdsb2JhbFJ1bGVzKHJ1bGVzOiBRdWVyeU1vZGVsW10sIHVwZGF0ZVF1ZXJ5UGFyYW1zID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB7IGZpbHRlclBhcmFtZXRlcnMgfSA9IHRoaXMuc3RvcmUuZ2V0VmFsdWUoKTtcbiAgICAgICAgY29uc3QgbmV3UnVsZXM6IEZpbHRlclBhcmFtZXRlcnNNb2RlbCA9IHtcbiAgICAgICAgICAgIC4uLmZpbHRlclBhcmFtZXRlcnMsXG4gICAgICAgICAgICBydWxlc1xuICAgICAgICB9O1xuXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZERhdGEobmV3UnVsZXMsIHVwZGF0ZVF1ZXJ5UGFyYW1zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkUnVsZUZyb21Db25maWcoY29uZmlnOiBGaWx0ZXJDb25maWd1cmF0aW9uTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBmaWx0ZXJQYXJhbWV0ZXJzIH0gPSB0aGlzLnN0b3JlLmdldFZhbHVlKCk7XG5cbiAgICAgICAgY29uc3QgbmV3UnVsZXM6IEZpbHRlclBhcmFtZXRlcnNNb2RlbCA9IHtcbiAgICAgICAgICAgIC4uLmZpbHRlclBhcmFtZXRlcnMsXG4gICAgICAgICAgICBydWxlczogW1xuICAgICAgICAgICAgICAgIC4uLihmaWx0ZXJQYXJhbWV0ZXJzLnJ1bGVzIGFzIFF1ZXJ5TW9kZWxbXSksXG4gICAgICAgICAgICAgICAgUUJGaWx0ZXJVdGlscy5jcmVhdGVRdWVyeU1vZGVsKGNvbmZpZylcbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnN0b3JlLnVwZGF0ZSh7XG4gICAgICAgICAgICBzaG93UXVlcnlCdWlsZGVyOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubG9hZERhdGEobmV3UnVsZXMsIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVSdWxlcyhydWxlczogUXVlcnlSdWxlTW9kZWxbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IGZpbHRlclBhcmFtZXRlcnMgfSA9IHRoaXMuc3RvcmUuZ2V0VmFsdWUoKTtcbiAgICAgICAgY29uc3QgbmV3UnVsZXM6IEZpbHRlclBhcmFtZXRlcnNNb2RlbCA9IHtcbiAgICAgICAgICAgIG9yZGVyOiBmaWx0ZXJQYXJhbWV0ZXJzLm9yZGVyLFxuICAgICAgICAgICAgcnVsZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogXCJhbmRcIixcbiAgICAgICAgICAgICAgICAgICAgcnVsZXNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5sb2FkRGF0YShuZXdSdWxlcywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZVF1ZXJ5QnVpbGRlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdG9yZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgc2hvd1F1ZXJ5QnVpbGRlcjogIXN0YXRlLnNob3dRdWVyeUJ1aWxkZXJcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVMaXN0VmFsdWUodmFsdWU6IGFueSwga2V5ID0gXCJpZFwiKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgZmlsdGVyUmVzdWx0IH0gPSB0aGlzLnN0b3JlLmdldFZhbHVlKCk7XG4gICAgICAgIGlmICghZmlsdGVyUmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0b3JlLnVwZGF0ZSh7XG4gICAgICAgICAgICBmaWx0ZXJSZXN1bHQ6IHtcbiAgICAgICAgICAgICAgICAuLi5maWx0ZXJSZXN1bHQsXG4gICAgICAgICAgICAgICAgdmFsdWVzOiBhcnJheVVwc2VydChmaWx0ZXJSZXN1bHQudmFsdWVzLCB2YWx1ZVtrZXldLCB2YWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUxpc3RWYWx1ZSh2YWx1ZTogYW55LCBrZXkgPSBcImlkXCIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBmaWx0ZXJSZXN1bHQgfSA9IHRoaXMuc3RvcmUuZ2V0VmFsdWUoKTtcbiAgICAgICAgaWYgKCFmaWx0ZXJSZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RvcmUudXBkYXRlKHtcbiAgICAgICAgICAgIGZpbHRlclJlc3VsdDoge1xuICAgICAgICAgICAgICAgIC4uLmZpbHRlclJlc3VsdCxcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IGFycmF5UmVtb3ZlKGZpbHRlclJlc3VsdC52YWx1ZXMsIHZhbHVlW2tleV0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyB1cGRhdGVRdWVyeVBhcmFtcyhxdWVyeVBhcmFtczogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy5hY3RpdmF0ZWRSb3V0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIlxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBhcmFtZXRlcnMoZmlsdGVyUGFyYW1ldGVycz86IEZpbHRlclBhcmFtZXRlcnNNb2RlbCk6IEZpbHRlclBhcmFtZXRlcnNNb2RlbCB7XG4gICAgICAgIGNvbnN0IHsgZGVmYXVsdFJ1bGVzIH0gPSB0aGlzLnN0b3JlLmdldFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB7XG4gICAgICAgICAgICAuLi5maWx0ZXJQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgcnVsZXM6IGZpbHRlclBhcmFtZXRlcnM/LnJ1bGVzID8gWy4uLmZpbHRlclBhcmFtZXRlcnMucnVsZXNdIDogW11cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGRlZmF1bHRSdWxlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJzLnJ1bGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogXCJhbmRcIixcbiAgICAgICAgICAgICAgICBydWxlczogZGVmYXVsdFJ1bGVzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyYW1ldGVycztcbiAgICB9XG5cbiAgICBwcml2YXRlIG1lcmdlUGFyYW1ldGVycyhwYXJhbWV0ZXJzPzogRmlsdGVyUGFyYW1ldGVyc01vZGVsKTogRmlsdGVyUGFyYW1ldGVyc01vZGVsIHtcbiAgICAgICAgY29uc3QgeyBmaWx0ZXJQYXJhbWV0ZXJzIH0gPSB0aGlzLnN0b3JlLmdldFZhbHVlKCk7XG4gICAgICAgIGlmICghcGFyYW1ldGVycykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclBhcmFtZXRlcnM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uZmlsdGVyUGFyYW1ldGVycyxcbiAgICAgICAgICAgIC4uLnBhcmFtZXRlcnMsXG4gICAgICAgICAgICBvcmRlcjpcbiAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbWV0ZXJzLm9yZGVyICYmICFwYXJhbWV0ZXJzLm9yZGVyXG4gICAgICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZmlsdGVyUGFyYW1ldGVycy5vcmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnBhcmFtZXRlcnMub3JkZXJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UGFyYW1ldGVycyhwYXJhbWV0ZXJzOiBGaWx0ZXJQYXJhbWV0ZXJzTW9kZWwsIHVwZGF0ZVF1ZXJ5UGFyYW1zOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3JlLnNldFBhcmFtZXRlcnMocGFyYW1ldGVycyk7XG4gICAgICAgIGlmICh1cGRhdGVRdWVyeVBhcmFtcykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVRdWVyeVBhcmFtcyhRdWVyeVBhcmFtc1V0aWxzLmZpbHRlclBhcmFtZXRlcnNUb1BhcmFtc01hcChwYXJhbWV0ZXJzKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -1,78 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import { Inject, Injectable, Optional } from "@angular/core";
3
- import { Store, StoreConfig } from "@datorama/akita";
4
- import { DEFAULT_PARAMETERS } from "../base-list.constant";
5
- import * as i0 from "@angular/core";
6
- export const initialBaseListState = {
7
- disabled: false,
8
- mergePageResults: false,
9
- resetPaging: false,
10
- filterConfigLoading: false,
11
- filterResult: null,
12
- filterParameters: {
13
- start: 0,
14
- length: 10,
15
- order: {},
16
- search: "",
17
- rules: [],
18
- data: {}
19
- },
20
- filterConfig: [],
21
- showQueryBuilder: false,
22
- defaultRules: []
23
- };
24
- let NiceBaseListStore = class NiceBaseListStore extends Store {
25
- constructor(parameters) {
26
- super(Object.assign(Object.assign({}, initialBaseListState), { filterParameters: Object.assign(Object.assign({}, initialBaseListState.filterParameters), (parameters !== null && parameters !== void 0 ? parameters : {})) }));
27
- }
28
- setFilterConfigLoading(loading) {
29
- this.update({
30
- filterConfigLoading: loading
31
- });
32
- }
33
- setResult(filterResult, reset = false) {
34
- const { mergePageResults } = this.getValue();
35
- if (mergePageResults && !reset) {
36
- this.update((state) => {
37
- var _a, _b;
38
- return ({
39
- filterResult: {
40
- page: filterResult.page,
41
- total: filterResult.total,
42
- values: state.resetPaging ? filterResult.values : [
43
- ...((_b = (_a = state.filterResult) === null || _a === void 0 ? void 0 : _a.values) !== null && _b !== void 0 ? _b : []),
44
- ...filterResult.values
45
- ]
46
- },
47
- resetPaging: false
48
- });
49
- });
50
- }
51
- else {
52
- this.update({
53
- filterResult
54
- });
55
- }
56
- }
57
- setParameters(filterParameters) {
58
- this.update({
59
- filterParameters
60
- });
61
- }
62
- };
63
- NiceBaseListStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.0", ngImport: i0, type: NiceBaseListStore, deps: [{ token: DEFAULT_PARAMETERS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
64
- NiceBaseListStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.0", ngImport: i0, type: NiceBaseListStore });
65
- NiceBaseListStore = __decorate([
66
- StoreConfig({ name: "base-list", resettable: true }),
67
- __metadata("design:paramtypes", [Object])
68
- ], NiceBaseListStore);
69
- export { NiceBaseListStore };
70
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.0", ngImport: i0, type: NiceBaseListStore, decorators: [{
71
- type: Injectable
72
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
73
- type: Optional
74
- }, {
75
- type: Inject,
76
- args: [DEFAULT_PARAMETERS]
77
- }] }]; } });
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1saXN0LnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmljZS1kYXRhLWZpbHRlci1raXQvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UtbGlzdC9zdG9yZS9iYXNlLWxpc3Quc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQWUzRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBc0I7SUFDbkQsUUFBUSxFQUFFLEtBQUs7SUFDZixnQkFBZ0IsRUFBRSxLQUFLO0lBQ3ZCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLG1CQUFtQixFQUFFLEtBQUs7SUFDMUIsWUFBWSxFQUFFLElBQUk7SUFDbEIsZ0JBQWdCLEVBQUU7UUFDZCxLQUFLLEVBQUUsQ0FBQztRQUNSLE1BQU0sRUFBRSxFQUFFO1FBQ1YsS0FBSyxFQUFFLEVBQUU7UUFDVCxNQUFNLEVBQUUsRUFBRTtRQUNWLEtBQUssRUFBRSxFQUFFO1FBQ1QsSUFBSSxFQUFFLEVBQUU7S0FDWDtJQUNELFlBQVksRUFBRSxFQUFFO0lBQ2hCLGdCQUFnQixFQUFFLEtBQUs7SUFDdkIsWUFBWSxFQUFFLEVBQUU7Q0FDbkIsQ0FBQztJQUlXLGlCQUFpQixTQUFqQixpQkFBbUUsU0FBUSxLQUFRO0lBQzVGLFlBQW9ELFVBQWlDO1FBQ2pGLEtBQUssQ0FBQyxnQ0FDQyxvQkFBb0IsS0FDdkIsZ0JBQWdCLGtDQUNULG9CQUFvQixDQUFDLGdCQUFnQixHQUNyQyxDQUFDLFVBQVUsYUFBVixVQUFVLGNBQVYsVUFBVSxHQUFJLEVBQUUsQ0FBQyxJQUV2QixDQUFDLENBQUM7SUFDWixDQUFDO0lBRU0sc0JBQXNCLENBQUMsT0FBZ0I7UUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNSLG1CQUFtQixFQUFFLE9BQU87U0FDMUIsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVNLFNBQVMsQ0FBQyxZQUErQixFQUFFLFFBQWlCLEtBQUs7UUFDcEUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdDLElBQUksZ0JBQWdCLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFOztnQkFBQyxPQUFBLENBQUM7b0JBQ3BCLFlBQVksRUFBRTt3QkFDVixJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7d0JBQ3ZCLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSzt3QkFDekIsTUFBTSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOzRCQUM5QyxHQUFHLENBQUMsTUFBQSxNQUFBLEtBQUssQ0FBQyxZQUFZLDBDQUFFLE1BQU0sbUNBQUksRUFBRSxDQUFDOzRCQUNyQyxHQUFHLFlBQVksQ0FBQyxNQUFNO3lCQUN6QjtxQkFDSjtvQkFDRCxXQUFXLEVBQUUsS0FBSztpQkFDckIsQ0FBTSxDQUFBO2FBQUEsQ0FBQyxDQUFDO1NBQ1o7YUFBTTtZQUNILElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ1IsWUFBWTthQUNWLENBQUMsQ0FBQztTQUNYO0lBQ0wsQ0FBQztJQUVNLGFBQWEsQ0FBQyxnQkFBdUM7UUFDeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNSLGdCQUFnQjtTQUNkLENBQUMsQ0FBQztJQUNaLENBQUM7Q0FDSixDQUFBOzhHQTNDWSxpQkFBaUIsa0JBQ00sa0JBQWtCO2tIQUR6QyxpQkFBaUI7QUFBakIsaUJBQWlCO0lBRDdCLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDOztHQUN4QyxpQkFBaUIsQ0EyQzdCO1NBM0NZLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQUY3QixVQUFVOzswQkFHTSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgU3RvcmUsIFN0b3JlQ29uZmlnIH0gZnJvbSBcIkBkYXRvcmFtYS9ha2l0YVwiO1xuaW1wb3J0IHsgRmlsdGVyQ29uZmlndXJhdGlvbk1vZGVsLCBGaWx0ZXJQYXJhbWV0ZXJzTW9kZWwsIEZpbHRlclJlc3VsdE1vZGVsIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWx0ZXIubW9kZWxcIjtcbmltcG9ydCB7IFF1ZXJ5TW9kZWwsIFF1ZXJ5UnVsZU1vZGVsIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9xdWVyeS5tb2RlbFwiO1xuaW1wb3J0IHsgREVGQVVMVF9QQVJBTUVURVJTIH0gZnJvbSBcIi4uL2Jhc2UtbGlzdC5jb25zdGFudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5pY2VCYXNlTGlzdFN0YXRlIHtcbiAgICBsb2FkaW5nPzogYm9vbGVhbjtcbiAgICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgICBtZXJnZVBhZ2VSZXN1bHRzOiBib29sZWFuO1xuICAgIHJlc2V0UGFnaW5nOiBib29sZWFuO1xuICAgIGZpbHRlckNvbmZpZ0xvYWRpbmc6IGJvb2xlYW47XG4gICAgZmlsdGVyUmVzdWx0OiBGaWx0ZXJSZXN1bHRNb2RlbCB8IG51bGw7XG4gICAgZmlsdGVyUGFyYW1ldGVyczogRmlsdGVyUGFyYW1ldGVyc01vZGVsO1xuICAgIGZpbHRlckNvbmZpZzogRmlsdGVyQ29uZmlndXJhdGlvbk1vZGVsW107XG4gICAgc2hvd1F1ZXJ5QnVpbGRlcjogYm9vbGVhbjtcbiAgICBkZWZhdWx0UnVsZXM6IChRdWVyeVJ1bGVNb2RlbCB8IFF1ZXJ5TW9kZWwpW107XG59XG5cbmV4cG9ydCBjb25zdCBpbml0aWFsQmFzZUxpc3RTdGF0ZTogTmljZUJhc2VMaXN0U3RhdGUgPSB7XG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIG1lcmdlUGFnZVJlc3VsdHM6IGZhbHNlLFxuICAgIHJlc2V0UGFnaW5nOiBmYWxzZSxcbiAgICBmaWx0ZXJDb25maWdMb2FkaW5nOiBmYWxzZSxcbiAgICBmaWx0ZXJSZXN1bHQ6IG51bGwsXG4gICAgZmlsdGVyUGFyYW1ldGVyczoge1xuICAgICAgICBzdGFydDogMCxcbiAgICAgICAgbGVuZ3RoOiAxMCxcbiAgICAgICAgb3JkZXI6IHt9LFxuICAgICAgICBzZWFyY2g6IFwiXCIsXG4gICAgICAgIHJ1bGVzOiBbXSxcbiAgICAgICAgZGF0YToge31cbiAgICB9LFxuICAgIGZpbHRlckNvbmZpZzogW10sXG4gICAgc2hvd1F1ZXJ5QnVpbGRlcjogZmFsc2UsXG4gICAgZGVmYXVsdFJ1bGVzOiBbXVxufTtcblxuQEluamVjdGFibGUoKVxuQFN0b3JlQ29uZmlnKHsgbmFtZTogXCJiYXNlLWxpc3RcIiwgcmVzZXR0YWJsZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5pY2VCYXNlTGlzdFN0b3JlPFQgZXh0ZW5kcyBOaWNlQmFzZUxpc3RTdGF0ZSA9IE5pY2VCYXNlTGlzdFN0YXRlPiBleHRlbmRzIFN0b3JlPFQ+IHtcbiAgICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KERFRkFVTFRfUEFSQU1FVEVSUykgcGFyYW1ldGVyczogRmlsdGVyUGFyYW1ldGVyc01vZGVsKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIC4uLmluaXRpYWxCYXNlTGlzdFN0YXRlLFxuICAgICAgICAgICAgZmlsdGVyUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAgIC4uLmluaXRpYWxCYXNlTGlzdFN0YXRlLmZpbHRlclBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgLi4uKHBhcmFtZXRlcnMgPz8ge30pXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gYXMgVCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEZpbHRlckNvbmZpZ0xvYWRpbmcobG9hZGluZzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZSh7XG4gICAgICAgICAgICBmaWx0ZXJDb25maWdMb2FkaW5nOiBsb2FkaW5nXG4gICAgICAgIH0gYXMgVCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFJlc3VsdChmaWx0ZXJSZXN1bHQ6IEZpbHRlclJlc3VsdE1vZGVsLCByZXNldDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgbWVyZ2VQYWdlUmVzdWx0cyB9ID0gdGhpcy5nZXRWYWx1ZSgpO1xuICAgICAgICBpZiAobWVyZ2VQYWdlUmVzdWx0cyAmJiAhcmVzZXQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKChzdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJSZXN1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogZmlsdGVyUmVzdWx0LnBhZ2UsXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsOiBmaWx0ZXJSZXN1bHQudG90YWwsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlczogc3RhdGUucmVzZXRQYWdpbmcgPyBmaWx0ZXJSZXN1bHQudmFsdWVzIDogW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uKHN0YXRlLmZpbHRlclJlc3VsdD8udmFsdWVzID8/IFtdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZpbHRlclJlc3VsdC52YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVzZXRQYWdpbmc6IGZhbHNlXG4gICAgICAgICAgICB9KSBhcyBUKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJSZXN1bHRcbiAgICAgICAgICAgIH0gYXMgVCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UGFyYW1ldGVycyhmaWx0ZXJQYXJhbWV0ZXJzOiBGaWx0ZXJQYXJhbWV0ZXJzTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGUoe1xuICAgICAgICAgICAgZmlsdGVyUGFyYW1ldGVyc1xuICAgICAgICB9IGFzIFQpO1xuICAgIH1cbn1cbiJdfQ==