@eo-sdk/client 11.0.0-rc.1 → 11.0.0-rc.3

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 (101) hide show
  1. package/app/eo-client/about-state/about-state.component.d.ts.map +1 -1
  2. package/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.d.ts +24 -5
  3. package/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.d.ts.map +1 -1
  4. package/app/eo-client/dashboard/widgets/charts-widget/charts-widget.component.d.ts +10 -0
  5. package/app/eo-client/dashboard/widgets/charts-widget/charts-widget.component.d.ts.map +1 -1
  6. package/app/eo-client/dashboard/widgets/charts-widget/icharts.d.ts +7 -0
  7. package/app/eo-client/dashboard/widgets/charts-widget/icharts.d.ts.map +1 -1
  8. package/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-setup/count-objects-setup.component.d.ts +3 -2
  9. package/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-setup/count-objects-setup.component.d.ts.map +1 -1
  10. package/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-widget.component.d.ts +2 -0
  11. package/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-widget.component.d.ts.map +1 -1
  12. package/app/eo-client/dashboard/widgets/count-objects-widget/count-objects.model.d.ts +1 -0
  13. package/app/eo-client/dashboard/widgets/count-objects-widget/count-objects.model.d.ts.map +1 -1
  14. package/app/eo-client/dashboard/widgets/hitlist-widget/IHitlist.d.ts +7 -0
  15. package/app/eo-client/dashboard/widgets/hitlist-widget/IHitlist.d.ts.map +1 -1
  16. package/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-setup/hitlist-setup.component.d.ts +6 -4
  17. package/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-setup/hitlist-setup.component.d.ts.map +1 -1
  18. package/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-widget.component.d.ts +2 -2
  19. package/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-widget.component.d.ts.map +1 -1
  20. package/app/eo-client/dashboard/widgets/iframe-widget/iframe-setup/iframe-setup.component.d.ts +3 -2
  21. package/app/eo-client/dashboard/widgets/iframe-widget/iframe-setup/iframe-setup.component.d.ts.map +1 -1
  22. package/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-setup/info-inbox-setup.component.d.ts +3 -2
  23. package/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-setup/info-inbox-setup.component.d.ts.map +1 -1
  24. package/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-setup/info-intray-setup.component.d.ts +3 -2
  25. package/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-setup/info-intray-setup.component.d.ts.map +1 -1
  26. package/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created-setup/last-edited-and-created-setup.component.d.ts +3 -2
  27. package/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created-setup/last-edited-and-created-setup.component.d.ts.map +1 -1
  28. package/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created.component.d.ts +2 -3
  29. package/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created.component.d.ts.map +1 -1
  30. package/app/eo-client/dashboard/widgets/search-widget/search-widget.component.d.ts +1 -2
  31. package/app/eo-client/dashboard/widgets/search-widget/search-widget.component.d.ts.map +1 -1
  32. package/app/eo-client/inbox-state/inbox-state/inbox-state.component.d.ts.map +1 -1
  33. package/app/eo-client/stored-queries-state/stored-queries-state.component.d.ts.map +1 -1
  34. package/app/eo-framework/app-shell/app-bar/app-search/app-search.component.d.ts.map +1 -1
  35. package/app/eo-framework/form-elements/datetime-range/datetime-range.component.d.ts.map +1 -1
  36. package/app/eo-framework/grid/extensions/filter/custom/custom-filter.component.d.ts.map +1 -1
  37. package/app/eo-framework/grid/filters/codesystem-filter.component.d.ts.map +1 -1
  38. package/app/eo-framework/grid/filters/datetime-filter.component.d.ts +0 -8
  39. package/app/eo-framework/grid/filters/datetime-filter.component.d.ts.map +1 -1
  40. package/app/eo-framework/grid/filters/dynamic-list-filter.component.d.ts.map +1 -1
  41. package/app/eo-framework/grid/grid.component.d.ts +1 -1
  42. package/app/eo-framework/grid/grid.component.d.ts.map +1 -1
  43. package/app/eo-framework/object-details/object-details.component.d.ts +6 -2
  44. package/app/eo-framework/object-details/object-details.component.d.ts.map +1 -1
  45. package/app/eo-framework/object-form/object-form/object-form-script/object-form-script.service.d.ts.map +1 -1
  46. package/app/eo-framework/util/services/utilities.service.d.ts +190 -0
  47. package/app/eo-framework/util/services/utilities.service.d.ts.map +1 -1
  48. package/app/eo-framework-core/api/grid.service.d.ts +1 -5
  49. package/app/eo-framework-core/api/grid.service.d.ts.map +1 -1
  50. package/assets/_default/i18n/de.json +16 -3
  51. package/assets/_default/i18n/en.json +20 -7
  52. package/esm2022/app/eo-client/about-state/about-state.component.mjs +3 -3
  53. package/esm2022/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.mjs +161 -42
  54. package/esm2022/app/eo-client/dashboard/widgets/charts-widget/charts-widget.component.mjs +78 -15
  55. package/esm2022/app/eo-client/dashboard/widgets/charts-widget/icharts.mjs +1 -1
  56. package/esm2022/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-setup/count-objects-setup.component.mjs +20 -12
  57. package/esm2022/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-widget.component.mjs +7 -3
  58. package/esm2022/app/eo-client/dashboard/widgets/count-objects-widget/count-objects.model.mjs +1 -1
  59. package/esm2022/app/eo-client/dashboard/widgets/hitlist-widget/IHitlist.mjs +1 -1
  60. package/esm2022/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-setup/hitlist-setup.component.mjs +35 -23
  61. package/esm2022/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-widget.component.mjs +7 -8
  62. package/esm2022/app/eo-client/dashboard/widgets/iframe-widget/iframe-setup/iframe-setup.component.mjs +16 -10
  63. package/esm2022/app/eo-client/dashboard/widgets/iframe-widget/iframe-widget.component.mjs +3 -4
  64. package/esm2022/app/eo-client/dashboard/widgets/info-inbox-widget/info-inbox-setup/info-inbox-setup.component.mjs +15 -9
  65. package/esm2022/app/eo-client/dashboard/widgets/info-intray-widget/info-intray-setup/info-intray-setup.component.mjs +16 -10
  66. package/esm2022/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created-setup/last-edited-and-created-setup.component.mjs +15 -9
  67. package/esm2022/app/eo-client/dashboard/widgets/last-edited-widget/last-edited-and-created.component.mjs +11 -13
  68. package/esm2022/app/eo-client/dashboard/widgets/search-widget/search-widget.component.mjs +4 -7
  69. package/esm2022/app/eo-client/favorite-state/favorite-state.component.mjs +3 -3
  70. package/esm2022/app/eo-client/inbox-state/inbox-state/inbox-state.component.mjs +7 -10
  71. package/esm2022/app/eo-client/notifications-state/notifications-state.component.mjs +4 -4
  72. package/esm2022/app/eo-client/prepare-state/prepare-state/prepare-state.component.mjs +6 -6
  73. package/esm2022/app/eo-client/process-state/process-state.component.mjs +3 -3
  74. package/esm2022/app/eo-client/recyclebin-state/recyclebin-state.component.mjs +4 -4
  75. package/esm2022/app/eo-client/stored-queries-state/stored-queries-state.component.mjs +4 -5
  76. package/esm2022/app/eo-client/version-state/version-state.component.mjs +3 -3
  77. package/esm2022/app/eo-framework/actions/actions/custom-actions/custom-actions.component.mjs +3 -3
  78. package/esm2022/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +3 -2
  79. package/esm2022/app/eo-framework/app-shell/license-warning/license-warning.component.mjs +3 -3
  80. package/esm2022/app/eo-framework/form-elements/datetime-range/datetime-range.component.mjs +7 -5
  81. package/esm2022/app/eo-framework/grid/extensions/custom-sort/custom-sort.component.mjs +2 -2
  82. package/esm2022/app/eo-framework/grid/extensions/filter/custom/custom-filter.component.mjs +3 -3
  83. package/esm2022/app/eo-framework/grid/filters/codesystem-filter.component.mjs +1 -14
  84. package/esm2022/app/eo-framework/grid/filters/datetime-filter.component.mjs +6 -33
  85. package/esm2022/app/eo-framework/grid/filters/dynamic-list-filter.component.mjs +1 -17
  86. package/esm2022/app/eo-framework/grid/filters/filesize-filter.component.mjs +2 -2
  87. package/esm2022/app/eo-framework/grid/grid.component.mjs +11 -12
  88. package/esm2022/app/eo-framework/object-details/object-details.component.mjs +40 -12
  89. package/esm2022/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.mjs +3 -3
  90. package/esm2022/app/eo-framework/object-form/object-form/object-form-script/object-form-script.service.mjs +4 -4
  91. package/esm2022/app/eo-framework/object-form/object-form/object-form-script/object-form-scripting-scope.mjs +7 -7
  92. package/esm2022/app/eo-framework/object-form/object-form/object-form.component.mjs +3 -3
  93. package/esm2022/app/eo-framework/quick-search/quick-search/quick-search.component.mjs +3 -3
  94. package/esm2022/app/eo-framework/result-list/result-list.component.mjs +4 -4
  95. package/esm2022/app/eo-framework/util/services/utilities.service.mjs +4 -1
  96. package/esm2022/app/eo-framework-core/api/grid.service.mjs +12 -24
  97. package/fesm2022/eo-sdk-client.mjs +636 -443
  98. package/fesm2022/eo-sdk-client.mjs.map +1 -1
  99. package/misc/scripts/exclude-core-ng-package.js +11 -0
  100. package/misc/scripts/prebuild-about-state.js +2 -3
  101. package/package.json +6 -6
@@ -3,17 +3,18 @@ import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core
3
3
  import { Validators } from '@angular/forms';
4
4
  import { Utils } from '@eo-sdk/core';
5
5
  import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
6
- import { EMPTY, skip, tap } from 'rxjs';
6
+ import { EMPTY, debounceTime, skip, tap } from 'rxjs';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "@angular/forms";
9
9
  import * as i2 from "@eo-sdk/core";
10
- import * as i3 from "@angular/common";
11
- import * as i4 from "@ngx-translate/core";
12
- import * as i5 from "../../../../../eo-framework/ui/error-message/error-message.component";
13
- import * as i6 from "../../../../../eo-framework/form-elements/form-input/form-input.component";
14
- import * as i7 from "../../../../../eo-framework/form-elements/codesystem/codesystem.component";
15
- import * as i8 from "../../../../../eo-framework/form-elements/number/number.component";
16
- import * as i9 from "../charts-widget.component";
10
+ import * as i3 from "@ngx-translate/core";
11
+ import * as i4 from "../../../../../eo-framework/ui/error-message/error-message.component";
12
+ import * as i5 from "../../../../../eo-framework/form-elements/form-input/form-input.component";
13
+ import * as i6 from "../../../../../eo-framework/form-elements/codesystem/codesystem.component";
14
+ import * as i7 from "../../../../../eo-framework/form-elements/number/number.component";
15
+ import * as i8 from "../../../../../eo-framework/form-elements/checkbox/checkbox.component";
16
+ import * as i9 from "../../../../../eo-framework/form-elements/string/string.component";
17
+ import * as i10 from "../charts-widget.component";
17
18
  let ChartsSetupComponent = class ChartsSetupComponent {
18
19
  set widgetConfig(wc) {
19
20
  this._widgetConfig = wc;
@@ -22,20 +23,29 @@ let ChartsSetupComponent = class ChartsSetupComponent {
22
23
  get widgetConfig() {
23
24
  return this._widgetConfig;
24
25
  }
25
- constructor(fb, storedQueriesService, translate, userService) {
26
+ constructor(fb, storedQueriesService, translate, userService, system) {
26
27
  this.fb = fb;
27
28
  this.storedQueriesService = storedQueriesService;
28
29
  this.translate = translate;
29
30
  this.userService = userService;
31
+ this.system = system;
30
32
  this.widgetConfigChange = new EventEmitter();
33
+ this.widgetConfigStateChange = new EventEmitter();
31
34
  this.setupForm = this.fb.group({
32
- storedQuery: [null],
33
- chartType: [],
34
- size: ['', [Validators.max(100), Validators.min(3)]],
35
- aggregation: [],
36
- histogramType: [],
37
- interval: [],
38
- startingpoint: []
35
+ storedQuery: [null, Validators.required],
36
+ chartType: [null, Validators.required],
37
+ size: [10, [Validators.max(100), Validators.min(3), Validators.required]],
38
+ aggregation: [null, Validators.required],
39
+ histogramType: [null],
40
+ attributMetric: [null],
41
+ metric: [null],
42
+ sortRevert: [false],
43
+ interval: [null],
44
+ startingpoint: [null],
45
+ minDocCount: [0],
46
+ title: ['', [Validators.maxLength(50)]],
47
+ xAxe: ['', [Validators.maxLength(50)]],
48
+ yAxe: ['', [Validators.maxLength(50)]]
39
49
  });
40
50
  this.storedQueriesPicker = {
41
51
  title: this.translate.instant('eo.search.title.storedqueries'),
@@ -53,16 +63,28 @@ let ChartsSetupComponent = class ChartsSetupComponent {
53
63
  title: this.translate.instant('eo.workspace.widget.form.label.histogram'),
54
64
  codesystem: null,
55
65
  };
66
+ this.attributMetricPicker = {
67
+ title: this.translate.instant('eo.workspace.widget.form.label.attributMetric'),
68
+ codesystem: null,
69
+ };
70
+ this.chartMetricPicker = {
71
+ title: this.translate.instant('eo.workspace.widget.form.label.chartMetric'),
72
+ codesystem: null,
73
+ };
56
74
  this.isDateTimeType = false;
75
+ this.isNumberType = false;
57
76
  this.selectedSavedSearchName = '';
58
- this.setupForm.valueChanges.pipe(skip(1), untilDestroyed(this)).subscribe((_) => {
77
+ this.setupForm.valueChanges.pipe(skip(1), debounceTime(1000), untilDestroyed(this)).subscribe((_) => {
59
78
  this.setWidgetConfig();
60
79
  });
80
+ this.setupForm.statusChanges.pipe(untilDestroyed(this)).subscribe((v) => {
81
+ this.widgetConfigStateChange.emit(v);
82
+ });
61
83
  this.getStoredQuerys();
62
84
  this.getChartField();
85
+ this.getMetricCodesystem();
63
86
  }
64
87
  setWidgetConfig() {
65
- this.histogramTypePicker.codesystem = null;
66
88
  if (this.setupForm.valid && this.storedQueries) {
67
89
  this.storedQuery = this.storedQueries.find((sq) => sq.name === this.setupForm.get('storedQuery').value);
68
90
  this.widgetConfig = {
@@ -81,12 +103,14 @@ let ChartsSetupComponent = class ChartsSetupComponent {
81
103
  this.updateField();
82
104
  this.selectedSavedSearchName = this.setupForm.get('storedQuery').value;
83
105
  this.isDateTimeType = this.widgetConfig?.formValue.aggregation === 'sysobject.created' || this.widgetConfig?.aggregationType === 'DATETIME';
106
+ this.isNumberType = this.widgetConfig?.aggregationType === 'NUMBER';
84
107
  }, 100);
85
108
  }
86
109
  }
87
110
  else {
88
111
  this.widgetConfig.aggregationType = this.aggregationCodesystem?.selectedNodes?.data?.type;
89
112
  this.isDateTimeType = this.widgetConfig?.aggregationType === 'DATETIME';
113
+ this.isNumberType = this.widgetConfig?.aggregationType === 'NUMBER';
90
114
  }
91
115
  this.widgetConfigChange.emit(this._widgetConfig);
92
116
  }
@@ -114,9 +138,11 @@ let ChartsSetupComponent = class ChartsSetupComponent {
114
138
  this.getHistogramField();
115
139
  if (this.storedQuery?.types?.length !== 1) {
116
140
  this.getAggregationField('sysdocument');
141
+ this.getAttributMetricCodesystem('sysdocument');
117
142
  }
118
143
  else {
119
144
  this.getAggregationField(this.storedQuery?.types[0]?.qname);
145
+ this.getAttributMetricCodesystem(this.storedQuery?.types[0]?.qname);
120
146
  }
121
147
  }
122
148
  getAggregationField(type) {
@@ -131,15 +157,61 @@ let ChartsSetupComponent = class ChartsSetupComponent {
131
157
  filteredFields = filteredFields.filter(field => field.type === 'DATETIME');
132
158
  }
133
159
  this.aggregationPicker.codesystem = {
134
- entries: filteredFields.map(field => ({
135
- id: field.label,
136
- defaultrepresentation: field.label,
137
- data: field.qname,
138
- type: field.type
139
- })).sort(Utils.sortValues('defaultrepresentation')),
160
+ entries: filteredFields.map(field => {
161
+ let label = filteredFields.filter(item => item.label === field.label).length > 1
162
+ ? field.label + ' (' + this.system.getObjectType(field.qname.split('.')[0]).label + ')'
163
+ : field.label;
164
+ return {
165
+ id: field.qname,
166
+ defaultrepresentation: label,
167
+ data: field.qname,
168
+ type: field.type
169
+ };
170
+ }).sort(Utils.sortValues('defaultrepresentation')),
140
171
  };
141
172
  });
142
173
  }
174
+ getMetricCodesystem() {
175
+ return this.chartMetricPicker.codesystem = {
176
+ entries: [
177
+ {
178
+ id: 'min',
179
+ defaultrepresentation: this.translate.instant('eo.workspace.widget.charts.metric.min'),
180
+ label: this.translate.instant('eo.workspace.widget.charts.metric.min'),
181
+ value: 'min',
182
+ },
183
+ {
184
+ id: 'avg',
185
+ defaultrepresentation: this.translate.instant('eo.workspace.widget.charts.metric.avg'),
186
+ label: this.translate.instant('eo.workspace.widget.charts.metric.avg'),
187
+ value: 'avg',
188
+ },
189
+ {
190
+ id: 'max',
191
+ defaultrepresentation: this.translate.instant('eo.workspace.widget.charts.metric.max'),
192
+ label: this.translate.instant('eo.workspace.widget.charts.metric.max'),
193
+ value: 'max',
194
+ },
195
+ {
196
+ id: 'median',
197
+ defaultrepresentation: this.translate.instant('eo.workspace.widget.charts.metric.median'),
198
+ label: this.translate.instant('eo.workspace.widget.charts.metric.median'),
199
+ value: 'median',
200
+ },
201
+ {
202
+ id: 'sum',
203
+ defaultrepresentation: this.translate.instant('eo.workspace.widget.charts.metric.sum'),
204
+ label: this.translate.instant('eo.workspace.widget.charts.metric.sum'),
205
+ value: 'sum',
206
+ }
207
+ ].map((res) => ({
208
+ id: res.id,
209
+ label: res.label,
210
+ defaultrepresentation: res.defaultrepresentation,
211
+ data: res.value
212
+ })).sort(Utils.sortValues('defaultrepresentation')),
213
+ };
214
+ }
143
215
  getChartField() {
144
216
  return this.chartTypePicker.codesystem = {
145
217
  entries: [
@@ -182,7 +254,6 @@ let ChartsSetupComponent = class ChartsSetupComponent {
182
254
  };
183
255
  }
184
256
  getHistogramField() {
185
- this.histogramTypePicker.codesystem = null;
186
257
  let entries = [
187
258
  {
188
259
  id: 'daily',
@@ -218,44 +289,86 @@ let ChartsSetupComponent = class ChartsSetupComponent {
218
289
  })),
219
290
  };
220
291
  }
292
+ getAttributMetricCodesystem(type) {
293
+ return this.userService.getFieldDefinition(type).pipe(untilDestroyed(this)).subscribe(definition => {
294
+ let exclude = new Set(['filename', 'mimetype', 'modifiertitle', 'version', 'creatortitle', 'title', 'description']);
295
+ if (type !== 'sysdocument') {
296
+ exclude.add('type');
297
+ }
298
+ let filteredFields = definition.elements.filter(field => !exclude.has(field.hitname));
299
+ filteredFields = filteredFields.filter(field => field.type === 'NUMBER');
300
+ this.attributMetricPicker.codesystem = {
301
+ entries: filteredFields.map(field => {
302
+ let label = filteredFields.filter(item => item.label === field.label).length > 1
303
+ ? field.label + ' (' + this.system.getObjectType(field.qname.split('.')[0]).label + ')'
304
+ : field.label;
305
+ return {
306
+ id: field.qname,
307
+ defaultrepresentation: label,
308
+ data: field.qname,
309
+ type: field.type
310
+ };
311
+ }).sort(Utils.sortValues('defaultrepresentation')),
312
+ };
313
+ });
314
+ }
221
315
  ngOnInit() {
222
316
  if (this._widgetConfig?.storedQuery) {
223
317
  this.getStoredQuery(this._widgetConfig?.storedQuery).subscribe(() => {
224
318
  this.setupForm.patchValue({
225
319
  storedQuery: this.storedQuery ? this.storedQuery.name : '',
226
320
  chartType: this._widgetConfig ? this._widgetConfig?.formValue?.chartType : 'pie',
227
- size: this._widgetConfig?.formValue?.size,
321
+ size: this._widgetConfig ? this._widgetConfig?.formValue?.size : 10,
228
322
  aggregation: this._widgetConfig ? this._widgetConfig.formValue.aggregation : 'sysobject.created',
229
323
  histogramType: this._widgetConfig && this._widgetConfig?.formValue?.histogramType ? this._widgetConfig?.formValue?.histogramType : 'monthly',
230
- interval: this._widgetConfig ? this._widgetConfig.formValue.interval : '',
231
- startingpoint: this._widgetConfig ? this._widgetConfig.formValue.startingpoint : '',
324
+ attributMetric: this._widgetConfig && this._widgetConfig?.formValue?.attributMetric ? this._widgetConfig?.formValue?.attributMetric : '',
325
+ metric: this._widgetConfig && this._widgetConfig?.formValue?.metric ? this._widgetConfig?.formValue?.metric : 'sum',
326
+ sortRevert: this._widgetConfig ? this._widgetConfig.formValue.sortRevert : '',
327
+ interval: this._widgetConfig ? this._widgetConfig?.formValue.interval : 1000,
328
+ startingpoint: this._widgetConfig ? this._widgetConfig?.formValue.startingpoint : 0,
329
+ min_doc_count: this._widgetConfig?.formValue?.minDocCount ? this._widgetConfig?.formValue?.minDocCount : 0,
330
+ title: this._widgetConfig ? this._widgetConfig?.formValue?.title : '',
331
+ xAxe: this._widgetConfig ? this._widgetConfig?.formValue?.xAxe : '',
332
+ yAxe: this._widgetConfig ? this._widgetConfig?.formValue?.yAxe : '',
232
333
  });
233
334
  if (this.storedQuery) {
234
335
  this.selectedSavedSearchName = this.setupForm.get('storedQuery').value;
235
336
  if (this.storedQuery.types.length !== 1) {
236
337
  this.getAggregationField('sysdocument');
338
+ this.getAttributMetricCodesystem('sysdocument');
237
339
  }
238
340
  else {
239
341
  this.getAggregationField(this.storedQuery.types[0].qname);
342
+ this.getAttributMetricCodesystem(this.storedQuery.types[0].qname);
240
343
  }
241
344
  setTimeout(() => {
242
345
  this.setupForm.patchValue({
243
346
  aggregation: this._widgetConfig ? this._widgetConfig.formValue.aggregation : 'sysobject.created',
347
+ attributMetric: this._widgetConfig && this._widgetConfig?.formValue?.attributMetric ? this._widgetConfig?.formValue?.attributMetric : '',
244
348
  });
245
349
  this.isDateTimeType = this.widgetConfig?.formValue.aggregation === 'sysobject.created' || this.widgetConfig?.aggregationType === 'DATETIME';
350
+ this.isNumberType = this.widgetConfig?.aggregationType === 'NUMBER';
246
351
  }, 100);
247
352
  }
248
353
  }, (error) => {
249
354
  this.isDateTimeType = false;
355
+ this.isNumberType = false;
250
356
  this._widgetConfig.aggregationType = null;
251
357
  if (error.status === 404) {
252
358
  this.setupForm.patchValue({
253
359
  chartType: 'pie',
254
360
  aggregation: this._widgetConfig ? this._widgetConfig.formValue.aggregation : 'sysobject.created',
255
361
  histogramType: 'monthly',
256
- size: '',
257
- interval: '',
258
- startingpoint: '',
362
+ attributMetric: this._widgetConfig && this._widgetConfig?.formValue?.attributMetric ? this._widgetConfig?.formValue?.attributMetric : '',
363
+ metric: this._widgetConfig && this._widgetConfig?.formValue?.metric ? this._widgetConfig?.formValue?.metric : 'sum',
364
+ sortRevert: this._widgetConfig ? this._widgetConfig.formValue.sortRevert : '',
365
+ size: 10,
366
+ interval: 1000,
367
+ startingpoint: 0,
368
+ min_doc_count: this._widgetConfig?.formValue?.minDocCount ? this._widgetConfig?.formValue?.minDocCount : 0,
369
+ title: '',
370
+ xAxe: '',
371
+ yAxe: '',
259
372
  });
260
373
  return EMPTY;
261
374
  }
@@ -266,14 +379,21 @@ let ChartsSetupComponent = class ChartsSetupComponent {
266
379
  chartType: this._widgetConfig ? this._widgetConfig?.formValue?.chartType : 'pie',
267
380
  aggregation: this._widgetConfig ? this._widgetConfig.formValue.aggregation : 'sysobject.created',
268
381
  histogramType: this._widgetConfig && this._widgetConfig?.formValue?.histogramType ? this._widgetConfig?.formValue?.histogramType : 'monthly',
269
- size: this._widgetConfig?.formValue?.size,
270
- interval: this._widgetConfig ? this._widgetConfig.formValue.interval : '',
271
- startingpoint: this._widgetConfig ? this._widgetConfig.formValue.startingpoint : '',
382
+ attributMetric: this._widgetConfig && this._widgetConfig?.formValue?.attributMetric ? this._widgetConfig?.formValue?.attributMetric : '',
383
+ metric: this._widgetConfig && this._widgetConfig?.formValue?.metric ? this._widgetConfig?.formValue?.metric : 'sum',
384
+ sortRevert: this._widgetConfig ? this._widgetConfig.formValue.sortRevert : '',
385
+ size: this._widgetConfig ? this._widgetConfig?.formValue?.size : 10,
386
+ interval: this._widgetConfig ? this._widgetConfig.formValue.interval : 1000,
387
+ startingpoint: this._widgetConfig ? this._widgetConfig.formValue.startingpoint : 0,
388
+ min_doc_count: this._widgetConfig?.formValue?.minDocCount ? this._widgetConfig?.formValue?.minDocCount : 0,
389
+ title: this._widgetConfig ? this._widgetConfig?.formValue?.title : '',
390
+ xAxe: this._widgetConfig ? this._widgetConfig?.formValue?.xAxe : '',
391
+ yAxe: this._widgetConfig ? this._widgetConfig?.formValue?.yAxe : '',
272
392
  });
273
393
  }
274
394
  }
275
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ChartsSetupComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.StoredQueriesService }, { token: i2.TranslateService }, { token: i2.UserService }], target: i0.ɵɵFactoryTarget.Component }); }
276
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: ChartsSetupComponent, selector: "eo-charts-setup", inputs: { widgetConfig: "widgetConfig" }, outputs: { widgetConfigChange: "widgetConfigChange" }, viewQueries: [{ propertyName: "aggregationCodesystem", first: true, predicate: ["aggregationCodesystem"], descendants: true }, { propertyName: "histogramCodesystem", first: true, predicate: ["histogramCodesystem"], descendants: true }], ngImport: i0, template: "<div class=\"setup\">\n <form [formGroup]=\"setupForm\">\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.form.label.chartTypeField' | translate\">\n <eo-codesystem formControlName=\"chartType\" [pickerTitle]=\"chartTypePicker.title\"\n [codesystem]=\"chartTypePicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\" *ngIf=\"storedQueriesPicker?.codesystem?.entries\"\n [label]=\"'eo.search.title.storedqueries' | translate\" [description]=\"'eo.workspace.widget.stored.queries.description'\">\n <eo-codesystem formControlName=\"storedQuery\" [pickerTitle]=\"storedQueriesPicker.title\"\n [codesystem]=\"storedQueriesPicker.codesystem\"\n [emptyMessage]=\"'eo.workspace.widget.stored.queries.list.notAvailable'\"></eo-codesystem>\n </eo-form-input>\n\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n *ngIf=\"aggregationPicker?.codesystem?.entries && this.setupForm.get('storedQuery').value\"\n [label]=\"'eo.workspace.widget.form.label.aggregationField' | translate\">\n <eo-codesystem #aggregationCodesystem formControlName=\"aggregation\" [pickerTitle]=\"aggregationPicker.title\"\n [codesystem]=\"aggregationPicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n *ngIf=\"isDateTimeType\" [label]=\"'eo.workspace.widget.form.label.histogram' | translate\">\n <eo-codesystem formControlName=\"histogramType\" [pickerTitle]=\"histogramTypePicker.title\"\n [codesystem]=\"histogramTypePicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n\n <eo-form-input [skipToggle]=\"true\" [description]=\"'eo.workspace.widget.chart.form.label.description'\"\n [label]=\"'eo.workspace.widget.form.partialValue' | translate\">\n <eo-number [scale]=\"0\" formControlName=\"size\"></eo-number>\n </eo-form-input>\n\n <div class=\"err-msg\" *ngIf=\"setupForm.get('size').hasError('max') || setupForm.get('size').hasError('min')\">\n <div translate>\n eo.form.property.string.error.classification.partialValue </div>\n </div>\n\n <eo-form-input [skipToggle]=\"true\" [label]=\"'eo.workspace.widget.charts.interval' | translate\">\n <eo-number [scale]=\"0\" formControlName=\"interval\"></eo-number>\n </eo-form-input>\n\n <eo-form-input [skipToggle]=\"true\" [label]=\"'eo.workspace.widget.charts.startingpoint' | translate\">\n <eo-number [scale]=\"0\" formControlName=\"startingpoint\"></eo-number>\n </eo-form-input>\n\n </form>\n</div>\n\n<div class=\"preview\"\n *ngIf=\"setupForm.get('aggregation').value && setupForm.get('chartType').value && setupForm.get('storedQuery').value && (isDateTimeType && setupForm.get('histogramType').value || !isDateTimeType); else tplEmpty\">\n <eo-charts-widget [widgetConfig]=\"widgetConfig\" [editMode]=\"true\"></eo-charts-widget>\n</div>\n\n<ng-template #tplEmpty>\n <div class=\"empty\">\n <eo-error-message\n [emptyState]=\"{icon: 'ic_saved_search.svg', text: 'eo.workspace.widget.configuration.notOk'}\"></eo-error-message>\n </div>\n</ng-template>\n", styles: [":host{display:grid;grid-template-rows:1fr;grid-template-columns:minmax(200px,400px) 1fr;grid-template-areas:\"setup preview\";height:100%}:host .setup{grid-area:setup;padding:var(--app-pane-padding);border-right:1px solid var(--panel-divider-color)}:host .setup eo-form-input{display:block;margin-bottom:var(--app-pane-padding)}:host .setup .err-msg{background-color:var(--color-error);color:var(--color-white);margin:calc(var(--app-pane-padding) / 4) 0;padding:calc(var(--app-pane-padding) / 4);border:0;border-radius:2px}:host .preview{grid-area:preview;overflow-y:auto;background-color:var(--main-background);padding:var(--app-pane-padding)}:host .preview eo-charts-widget{border:1px transparent var(--panel-divider-color)}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i5.ErrorMessageComponent, selector: "eo-error-message", inputs: ["emptyState"] }, { kind: "component", type: i6.FormInputComponent, selector: "eo-form-input", inputs: ["label", "tag", "description", "skipToggle", "isNull", "invalid", "disabled", "required"], outputs: ["onToggleLabel"] }, { kind: "component", type: i7.CodesystemComponent, selector: "eo-codesystem", inputs: ["situation", "pickerTitle", "placeholder", "codesystem", "multiselect", "readonly", "inputStyleClass", "emptyMessage", "filterFunction", "disablingFilterFunction"] }, { kind: "component", type: i8.NumberComponent, selector: "eo-number", inputs: ["scale", "precision", "grouping", "pattern", "readonly"] }, { kind: "component", type: i9.ChartsWidgetComponent, selector: "eo-charts-widget", inputs: ["editMode", "widgetConfig"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
395
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ChartsSetupComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.StoredQueriesService }, { token: i2.TranslateService }, { token: i2.UserService }, { token: i2.SystemService }], target: i0.ɵɵFactoryTarget.Component }); }
396
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: ChartsSetupComponent, selector: "eo-charts-setup", inputs: { widgetConfig: "widgetConfig" }, outputs: { widgetConfigChange: "widgetConfigChange", widgetConfigStateChange: "widgetConfigStateChange" }, viewQueries: [{ propertyName: "aggregationCodesystem", first: true, predicate: ["aggregationCodesystem"], descendants: true }], ngImport: i0, template: "<div class=\"setup\">\n <form [formGroup]=\"setupForm\">\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.form.label.chartTypeField' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('chartType').invalid\">\n <eo-codesystem formControlName=\"chartType\" [pickerTitle]=\"chartTypePicker.title\"\n [codesystem]=\"chartTypePicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('chartType').hasError('required')) {\n <div class=\"err-msg\" translate>\n eo.form.property.required\n </div>\n }\n\n @if (storedQueriesPicker?.codesystem?.entries) {\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n [label]=\"'eo.search.title.storedqueries' | translate\"\n [description]=\"'eo.workspace.widget.stored.queries.description'\"\n [invalid]=\"setupForm.dirty && setupForm.get('storedQuery').invalid\">\n <eo-codesystem formControlName=\"storedQuery\" [pickerTitle]=\"storedQueriesPicker.title\"\n [codesystem]=\"storedQueriesPicker.codesystem\"\n [emptyMessage]=\"'eo.workspace.widget.stored.queries.list.notAvailable'\"></eo-codesystem>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('storedQuery').hasError('required')) {\n <div class=\"err-msg\" translate>\n eo.form.property.required\n </div>\n }\n }\n\n @if (aggregationPicker?.codesystem?.entries && this.setupForm.get('storedQuery').valid) {\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.form.label.aggregationField' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('aggregation').invalid\">\n <eo-codesystem #aggregationCodesystem formControlName=\"aggregation\" [pickerTitle]=\"aggregationPicker.title\"\n [codesystem]=\"aggregationPicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('aggregation').hasError('required')) {\n <div class=\"err-msg\" translate>\n eo.form.property.required\n </div>\n }\n <eo-form-input [required]=\"true\"\n [skipToggle]=\"true\" [label]=\"'eo.workspace.widget.form.partialValue' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('size').invalid\">\n <eo-number [scale]=\"0\" formControlName=\"size\"></eo-number>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('size').invalid) {\n <div class=\"err-msg\" translate>\n @if (setupForm.get('size').hasError('required')) {\n eo.form.property.required\n } @else if (setupForm.get('size').hasError('max') || setupForm.get('size').hasError('min')) {\n eo.form.property.string.error.classification.partialValue\n }\n </div>\n }\n }\n\n @if (isDateTimeType) {\n <eo-form-input [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.form.label.histogram' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('histogramType').invalid\">\n <eo-codesystem formControlName=\"histogramType\" [pickerTitle]=\"histogramTypePicker.title\"\n [codesystem]=\"histogramTypePicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n }\n @if (widgetConfig?.formValue?.aggregation) {\n @if (widgetConfig.formValue.chartType === 'bar') {\n <eo-form-input class=\"label checkbox\" [label]=\"'eo.workspace.widget.form.label.sortRevert'|translate\"\n [skipToggle]=\"true\">\n <eo-checkbox formControlName=\"sortRevert\" [tristate]=\"false\"></eo-checkbox>\n </eo-form-input>\n }\n @if (widgetConfig.formValue.chartType === 'bar' || widgetConfig.formValue.chartType === 'pie' || widgetConfig.formValue.chartType === 'ring') {\n <eo-form-input class=\"threshold-success\" [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.form.label.minDocCount' | translate\">\n <eo-number [scale]=\"0\" formControlName=\"minDocCount\">\n </eo-number>\n </eo-form-input>\n }\n }\n\n @if (isNumberType) {\n <eo-form-input [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.charts.interval' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('interval').invalid\">\n <eo-number [scale]=\"0\" formControlName=\"interval\"></eo-number>\n </eo-form-input>\n\n <eo-form-input [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.charts.startingpoint' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('startingpoint').invalid\">\n <eo-number [scale]=\"0\" formControlName=\"startingpoint\"></eo-number>\n </eo-form-input>\n }\n @if (widgetConfig?.formValue?.chartType !== 'lineStraight' && widgetConfig?.formValue?.chartType !== 'lineCurve' &&\n attributMetricPicker?.codesystem?.entries && this.setupForm.get('storedQuery').valid && !isNumberType && !isDateTimeType) {\n <eo-form-input [skipToggle]=\"true\" [label]=\"'eo.workspace.widget.form.label.attributMetric' | translate\">\n <eo-codesystem formControlName=\"attributMetric\" [pickerTitle]=\"attributMetricPicker.title\"\n [codesystem]=\"attributMetricPicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n\n @if (widgetConfig?.formValue?.attributMetric) {\n <eo-form-input [skipToggle]=\"true\" [label]=\"'eo.workspace.widget.form.label.chartMetric' | translate\">\n <eo-codesystem formControlName=\"metric\" [pickerTitle]=\"chartMetricPicker.title\"\n [codesystem]=\"chartMetricPicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n }\n }\n\n @if (widgetConfig?.formValue?.chartType) {\n <div class=\"propertyPicker\">\n <eo-form-input tabindex=\"0\"\n [label]=\"'eo.workspace.widget.charts.title' | translate\"\n [skipToggle]=\"true\"\n [invalid]=\"setupForm.dirty && setupForm.get('title').invalid\">\n <eo-string autocomplete=\"true\" formControlName=\"title\"></eo-string>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('title').invalid) {\n <div class=\"err-msg\" [translateParams]=\"{maxlength: 50}\" translate>eo.form.property.maxlength</div>\n }\n @if (widgetConfig?.formValue?.chartType !== 'pie' && widgetConfig?.formValue?.chartType !== 'donut') {\n <eo-form-input tabindex=\"0\"\n [label]=\"'eo.workspace.widget.charts.xAxe' | translate\"\n [skipToggle]=\"true\"\n [invalid]=\"setupForm.dirty && setupForm.get('xAxe').invalid\">\n <eo-string autocomplete=\"true\" formControlName=\"xAxe\"></eo-string>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('xAxe').invalid) {\n <div class=\"err-msg\" [translateParams]=\"{maxlength: 50}\" translate>eo.form.property.maxlength</div>\n }\n <eo-form-input tabindex=\"0\"\n [label]=\"'eo.workspace.widget.charts.yAxe' | translate\"\n [skipToggle]=\"true\"\n [invalid]=\"setupForm.dirty && setupForm.get('yAxe').invalid\">\n <eo-string autocomplete=\"true\" formControlName=\"yAxe\"></eo-string>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('yAxe').invalid) {\n <div class=\"err-msg\" [translateParams]=\"{maxlength: 50}\" translate>eo.form.property.maxlength</div>\n }\n }\n </div>\n }\n </form>\n</div>\n\n@if (setupForm.valid) {\n <div class=\"preview\">\n <eo-charts-widget [widgetConfig]=\"widgetConfig\" [editMode]=\"true\"></eo-charts-widget>\n </div>\n} @else {\n <div class=\"empty\">\n <eo-error-message\n [emptyState]=\"{icon: 'ic_saved_search.svg', text: 'eo.workspace.widget.configuration.notOk'}\"></eo-error-message>\n </div>\n}\n", styles: [":host{display:grid;grid-template-rows:1fr;grid-template-columns:minmax(200px,400px) 1fr;grid-template-areas:\"setup preview\";height:100%}:host .setup{grid-area:setup;padding:var(--app-pane-padding);border-right:1px solid var(--panel-divider-color)}:host .setup eo-form-input{display:block;margin-bottom:var(--app-pane-padding)}:host .setup .propertyPicker{display:block;padding-top:40px}:host .setup .err-msg{background-color:var(--color-error);color:var(--color-white);margin:calc(var(--app-pane-padding) / 4) 0;padding:calc(var(--app-pane-padding) / 4);border:0;border-radius:2px}:host .preview{grid-area:preview;overflow-y:auto;background-color:var(--main-background);padding:var(--app-pane-padding)}:host .preview eo-charts-widget{border:1px transparent var(--panel-divider-color)}\n"], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i4.ErrorMessageComponent, selector: "eo-error-message", inputs: ["emptyState"] }, { kind: "component", type: i5.FormInputComponent, selector: "eo-form-input", inputs: ["label", "tag", "description", "skipToggle", "isNull", "invalid", "disabled", "required"], outputs: ["onToggleLabel"] }, { kind: "component", type: i6.CodesystemComponent, selector: "eo-codesystem", inputs: ["situation", "pickerTitle", "placeholder", "codesystem", "multiselect", "readonly", "inputStyleClass", "emptyMessage", "filterFunction", "disablingFilterFunction"] }, { kind: "component", type: i7.NumberComponent, selector: "eo-number", inputs: ["scale", "precision", "grouping", "pattern", "readonly"] }, { kind: "component", type: i8.CheckboxComponent, selector: "eo-checkbox", inputs: ["required", "tristate", "readonly"] }, { kind: "component", type: i9.StringComponent, selector: "eo-string", inputs: ["autocomplete", "multiselect", "multiline", "readonly", "autofocus", "classification", "situation", "regex", "qname", "size", "minLength", "maxLength"] }, { kind: "component", type: i10.ChartsWidgetComponent, selector: "eo-charts-widget", inputs: ["editMode", "widgetConfig"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
277
397
  };
278
398
  ChartsSetupComponent = __decorate([
279
399
  UntilDestroy()
@@ -281,16 +401,15 @@ ChartsSetupComponent = __decorate([
281
401
  export { ChartsSetupComponent };
282
402
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ChartsSetupComponent, decorators: [{
283
403
  type: Component,
284
- args: [{ selector: 'eo-charts-setup', template: "<div class=\"setup\">\n <form [formGroup]=\"setupForm\">\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.form.label.chartTypeField' | translate\">\n <eo-codesystem formControlName=\"chartType\" [pickerTitle]=\"chartTypePicker.title\"\n [codesystem]=\"chartTypePicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\" *ngIf=\"storedQueriesPicker?.codesystem?.entries\"\n [label]=\"'eo.search.title.storedqueries' | translate\" [description]=\"'eo.workspace.widget.stored.queries.description'\">\n <eo-codesystem formControlName=\"storedQuery\" [pickerTitle]=\"storedQueriesPicker.title\"\n [codesystem]=\"storedQueriesPicker.codesystem\"\n [emptyMessage]=\"'eo.workspace.widget.stored.queries.list.notAvailable'\"></eo-codesystem>\n </eo-form-input>\n\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n *ngIf=\"aggregationPicker?.codesystem?.entries && this.setupForm.get('storedQuery').value\"\n [label]=\"'eo.workspace.widget.form.label.aggregationField' | translate\">\n <eo-codesystem #aggregationCodesystem formControlName=\"aggregation\" [pickerTitle]=\"aggregationPicker.title\"\n [codesystem]=\"aggregationPicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n *ngIf=\"isDateTimeType\" [label]=\"'eo.workspace.widget.form.label.histogram' | translate\">\n <eo-codesystem formControlName=\"histogramType\" [pickerTitle]=\"histogramTypePicker.title\"\n [codesystem]=\"histogramTypePicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n\n <eo-form-input [skipToggle]=\"true\" [description]=\"'eo.workspace.widget.chart.form.label.description'\"\n [label]=\"'eo.workspace.widget.form.partialValue' | translate\">\n <eo-number [scale]=\"0\" formControlName=\"size\"></eo-number>\n </eo-form-input>\n\n <div class=\"err-msg\" *ngIf=\"setupForm.get('size').hasError('max') || setupForm.get('size').hasError('min')\">\n <div translate>\n eo.form.property.string.error.classification.partialValue </div>\n </div>\n\n <eo-form-input [skipToggle]=\"true\" [label]=\"'eo.workspace.widget.charts.interval' | translate\">\n <eo-number [scale]=\"0\" formControlName=\"interval\"></eo-number>\n </eo-form-input>\n\n <eo-form-input [skipToggle]=\"true\" [label]=\"'eo.workspace.widget.charts.startingpoint' | translate\">\n <eo-number [scale]=\"0\" formControlName=\"startingpoint\"></eo-number>\n </eo-form-input>\n\n </form>\n</div>\n\n<div class=\"preview\"\n *ngIf=\"setupForm.get('aggregation').value && setupForm.get('chartType').value && setupForm.get('storedQuery').value && (isDateTimeType && setupForm.get('histogramType').value || !isDateTimeType); else tplEmpty\">\n <eo-charts-widget [widgetConfig]=\"widgetConfig\" [editMode]=\"true\"></eo-charts-widget>\n</div>\n\n<ng-template #tplEmpty>\n <div class=\"empty\">\n <eo-error-message\n [emptyState]=\"{icon: 'ic_saved_search.svg', text: 'eo.workspace.widget.configuration.notOk'}\"></eo-error-message>\n </div>\n</ng-template>\n", styles: [":host{display:grid;grid-template-rows:1fr;grid-template-columns:minmax(200px,400px) 1fr;grid-template-areas:\"setup preview\";height:100%}:host .setup{grid-area:setup;padding:var(--app-pane-padding);border-right:1px solid var(--panel-divider-color)}:host .setup eo-form-input{display:block;margin-bottom:var(--app-pane-padding)}:host .setup .err-msg{background-color:var(--color-error);color:var(--color-white);margin:calc(var(--app-pane-padding) / 4) 0;padding:calc(var(--app-pane-padding) / 4);border:0;border-radius:2px}:host .preview{grid-area:preview;overflow-y:auto;background-color:var(--main-background);padding:var(--app-pane-padding)}:host .preview eo-charts-widget{border:1px transparent var(--panel-divider-color)}\n"] }]
285
- }], ctorParameters: () => [{ type: i1.UntypedFormBuilder }, { type: i2.StoredQueriesService }, { type: i2.TranslateService }, { type: i2.UserService }], propDecorators: { widgetConfigChange: [{
404
+ args: [{ selector: 'eo-charts-setup', template: "<div class=\"setup\">\n <form [formGroup]=\"setupForm\">\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.form.label.chartTypeField' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('chartType').invalid\">\n <eo-codesystem formControlName=\"chartType\" [pickerTitle]=\"chartTypePicker.title\"\n [codesystem]=\"chartTypePicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('chartType').hasError('required')) {\n <div class=\"err-msg\" translate>\n eo.form.property.required\n </div>\n }\n\n @if (storedQueriesPicker?.codesystem?.entries) {\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n [label]=\"'eo.search.title.storedqueries' | translate\"\n [description]=\"'eo.workspace.widget.stored.queries.description'\"\n [invalid]=\"setupForm.dirty && setupForm.get('storedQuery').invalid\">\n <eo-codesystem formControlName=\"storedQuery\" [pickerTitle]=\"storedQueriesPicker.title\"\n [codesystem]=\"storedQueriesPicker.codesystem\"\n [emptyMessage]=\"'eo.workspace.widget.stored.queries.list.notAvailable'\"></eo-codesystem>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('storedQuery').hasError('required')) {\n <div class=\"err-msg\" translate>\n eo.form.property.required\n </div>\n }\n }\n\n @if (aggregationPicker?.codesystem?.entries && this.setupForm.get('storedQuery').valid) {\n <eo-form-input [required]=\"true\" [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.form.label.aggregationField' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('aggregation').invalid\">\n <eo-codesystem #aggregationCodesystem formControlName=\"aggregation\" [pickerTitle]=\"aggregationPicker.title\"\n [codesystem]=\"aggregationPicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('aggregation').hasError('required')) {\n <div class=\"err-msg\" translate>\n eo.form.property.required\n </div>\n }\n <eo-form-input [required]=\"true\"\n [skipToggle]=\"true\" [label]=\"'eo.workspace.widget.form.partialValue' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('size').invalid\">\n <eo-number [scale]=\"0\" formControlName=\"size\"></eo-number>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('size').invalid) {\n <div class=\"err-msg\" translate>\n @if (setupForm.get('size').hasError('required')) {\n eo.form.property.required\n } @else if (setupForm.get('size').hasError('max') || setupForm.get('size').hasError('min')) {\n eo.form.property.string.error.classification.partialValue\n }\n </div>\n }\n }\n\n @if (isDateTimeType) {\n <eo-form-input [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.form.label.histogram' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('histogramType').invalid\">\n <eo-codesystem formControlName=\"histogramType\" [pickerTitle]=\"histogramTypePicker.title\"\n [codesystem]=\"histogramTypePicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n }\n @if (widgetConfig?.formValue?.aggregation) {\n @if (widgetConfig.formValue.chartType === 'bar') {\n <eo-form-input class=\"label checkbox\" [label]=\"'eo.workspace.widget.form.label.sortRevert'|translate\"\n [skipToggle]=\"true\">\n <eo-checkbox formControlName=\"sortRevert\" [tristate]=\"false\"></eo-checkbox>\n </eo-form-input>\n }\n @if (widgetConfig.formValue.chartType === 'bar' || widgetConfig.formValue.chartType === 'pie' || widgetConfig.formValue.chartType === 'ring') {\n <eo-form-input class=\"threshold-success\" [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.form.label.minDocCount' | translate\">\n <eo-number [scale]=\"0\" formControlName=\"minDocCount\">\n </eo-number>\n </eo-form-input>\n }\n }\n\n @if (isNumberType) {\n <eo-form-input [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.charts.interval' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('interval').invalid\">\n <eo-number [scale]=\"0\" formControlName=\"interval\"></eo-number>\n </eo-form-input>\n\n <eo-form-input [skipToggle]=\"true\"\n [label]=\"'eo.workspace.widget.charts.startingpoint' | translate\"\n [invalid]=\"setupForm.dirty && setupForm.get('startingpoint').invalid\">\n <eo-number [scale]=\"0\" formControlName=\"startingpoint\"></eo-number>\n </eo-form-input>\n }\n @if (widgetConfig?.formValue?.chartType !== 'lineStraight' && widgetConfig?.formValue?.chartType !== 'lineCurve' &&\n attributMetricPicker?.codesystem?.entries && this.setupForm.get('storedQuery').valid && !isNumberType && !isDateTimeType) {\n <eo-form-input [skipToggle]=\"true\" [label]=\"'eo.workspace.widget.form.label.attributMetric' | translate\">\n <eo-codesystem formControlName=\"attributMetric\" [pickerTitle]=\"attributMetricPicker.title\"\n [codesystem]=\"attributMetricPicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n\n @if (widgetConfig?.formValue?.attributMetric) {\n <eo-form-input [skipToggle]=\"true\" [label]=\"'eo.workspace.widget.form.label.chartMetric' | translate\">\n <eo-codesystem formControlName=\"metric\" [pickerTitle]=\"chartMetricPicker.title\"\n [codesystem]=\"chartMetricPicker.codesystem\"></eo-codesystem>\n </eo-form-input>\n }\n }\n\n @if (widgetConfig?.formValue?.chartType) {\n <div class=\"propertyPicker\">\n <eo-form-input tabindex=\"0\"\n [label]=\"'eo.workspace.widget.charts.title' | translate\"\n [skipToggle]=\"true\"\n [invalid]=\"setupForm.dirty && setupForm.get('title').invalid\">\n <eo-string autocomplete=\"true\" formControlName=\"title\"></eo-string>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('title').invalid) {\n <div class=\"err-msg\" [translateParams]=\"{maxlength: 50}\" translate>eo.form.property.maxlength</div>\n }\n @if (widgetConfig?.formValue?.chartType !== 'pie' && widgetConfig?.formValue?.chartType !== 'donut') {\n <eo-form-input tabindex=\"0\"\n [label]=\"'eo.workspace.widget.charts.xAxe' | translate\"\n [skipToggle]=\"true\"\n [invalid]=\"setupForm.dirty && setupForm.get('xAxe').invalid\">\n <eo-string autocomplete=\"true\" formControlName=\"xAxe\"></eo-string>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('xAxe').invalid) {\n <div class=\"err-msg\" [translateParams]=\"{maxlength: 50}\" translate>eo.form.property.maxlength</div>\n }\n <eo-form-input tabindex=\"0\"\n [label]=\"'eo.workspace.widget.charts.yAxe' | translate\"\n [skipToggle]=\"true\"\n [invalid]=\"setupForm.dirty && setupForm.get('yAxe').invalid\">\n <eo-string autocomplete=\"true\" formControlName=\"yAxe\"></eo-string>\n </eo-form-input>\n @if (setupForm.dirty && setupForm.get('yAxe').invalid) {\n <div class=\"err-msg\" [translateParams]=\"{maxlength: 50}\" translate>eo.form.property.maxlength</div>\n }\n }\n </div>\n }\n </form>\n</div>\n\n@if (setupForm.valid) {\n <div class=\"preview\">\n <eo-charts-widget [widgetConfig]=\"widgetConfig\" [editMode]=\"true\"></eo-charts-widget>\n </div>\n} @else {\n <div class=\"empty\">\n <eo-error-message\n [emptyState]=\"{icon: 'ic_saved_search.svg', text: 'eo.workspace.widget.configuration.notOk'}\"></eo-error-message>\n </div>\n}\n", styles: [":host{display:grid;grid-template-rows:1fr;grid-template-columns:minmax(200px,400px) 1fr;grid-template-areas:\"setup preview\";height:100%}:host .setup{grid-area:setup;padding:var(--app-pane-padding);border-right:1px solid var(--panel-divider-color)}:host .setup eo-form-input{display:block;margin-bottom:var(--app-pane-padding)}:host .setup .propertyPicker{display:block;padding-top:40px}:host .setup .err-msg{background-color:var(--color-error);color:var(--color-white);margin:calc(var(--app-pane-padding) / 4) 0;padding:calc(var(--app-pane-padding) / 4);border:0;border-radius:2px}:host .preview{grid-area:preview;overflow-y:auto;background-color:var(--main-background);padding:var(--app-pane-padding)}:host .preview eo-charts-widget{border:1px transparent var(--panel-divider-color)}\n"] }]
405
+ }], ctorParameters: () => [{ type: i1.UntypedFormBuilder }, { type: i2.StoredQueriesService }, { type: i2.TranslateService }, { type: i2.UserService }, { type: i2.SystemService }], propDecorators: { widgetConfigChange: [{
406
+ type: Output
407
+ }], widgetConfigStateChange: [{
286
408
  type: Output
287
409
  }], aggregationCodesystem: [{
288
410
  type: ViewChild,
289
411
  args: ['aggregationCodesystem']
290
- }], histogramCodesystem: [{
291
- type: ViewChild,
292
- args: ['histogramCodesystem']
293
412
  }], widgetConfig: [{
294
413
  type: Input
295
414
  }] } });
296
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnRzLXNldHVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tY2xpZW50L2Rhc2hib2FyZC93aWRnZXRzL2NoYXJ0cy13aWRnZXQvY2hhcnRzLXNldHVwL2NoYXJ0cy1zZXR1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWNsaWVudC9kYXNoYm9hcmQvd2lkZ2V0cy9jaGFydHMtd2lkZ2V0L2NoYXJ0cy1zZXR1cC9jaGFydHMtc2V0dXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3hGLE9BQU8sRUFBdUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEYsT0FBTyxFQUFtRSxLQUFLLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDckcsT0FBTyxFQUFDLFlBQVksRUFBRSxjQUFjLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7O0FBUy9CLElBQU0sb0JBQW9CLEdBQTFCLE1BQU0sb0JBQW9CO0lBeUMvQixJQUFhLFlBQVksQ0FBQyxFQUFXO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxZQUNVLEVBQXNCLEVBQ3RCLG9CQUEwQyxFQUMxQyxTQUEyQixFQUMzQixXQUF3QjtRQUh4QixPQUFFLEdBQUYsRUFBRSxDQUFvQjtRQUN0Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBcER4Qix1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRTNELGNBQVMsR0FBcUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDMUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ25CLFNBQVMsRUFBRSxFQUFFO1lBQ2IsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsV0FBVyxFQUFFLEVBQUU7WUFDZixhQUFhLEVBQUUsRUFBRTtZQUNqQixRQUFRLEVBQUUsRUFBRTtZQUNaLGFBQWEsRUFBRSxFQUFFO1NBQ2xCLENBQUMsQ0FBQztRQUVILHdCQUFtQixHQUFHO1lBQ3BCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQztZQUM5RCxVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDO1FBRUYsc0JBQWlCLEdBQUc7WUFDbEIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGlEQUFpRCxDQUFDO1lBQ2hGLFVBQVUsRUFBRSxJQUFJO1NBQ2pCLENBQUM7UUFFRixvQkFBZSxHQUFHO1lBQ2hCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQywrQ0FBK0MsQ0FBQztZQUM5RSxVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDO1FBRUYsd0JBQW1CLEdBQUc7WUFDcEIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDBDQUEwQyxDQUFDO1lBQ3pFLFVBQVUsRUFBRSxJQUFJO1NBQ2pCLENBQUM7UUFFRixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2Qiw0QkFBdUIsR0FBRyxFQUFFLENBQUM7UUFvQjNCLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDOUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUUzQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hHLElBQUksQ0FBQyxZQUFZLEdBQUc7Z0JBQ2xCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ2pDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUs7Z0JBQy9CLGVBQWUsRUFBRSxFQUFFO2FBQ3BCLENBQUM7WUFDRixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDN0UsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ3JCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEtBQUssRUFBRSxFQUFFLENBQUM7NEJBQ3hDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO2dDQUN4QixXQUFXLEVBQUUsbUJBQW1COzZCQUNqQyxDQUFDLENBQUM7d0JBQ0wsQ0FBQzt3QkFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQ25CLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLENBQUM7d0JBQ3ZFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsV0FBVyxLQUFLLG1CQUFtQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsZUFBZSxLQUFLLFVBQVUsQ0FBQztvQkFDOUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNWLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO2dCQUMxRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsZUFBZSxLQUFLLFVBQVUsQ0FBQztZQUMxRSxDQUFDO1lBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLG9CQUFvQjthQUN0QixrQkFBa0IsRUFBRSxDQUFDLElBQUksQ0FDeEIsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUNyQixDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztZQUNuQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxHQUFHO2dCQUNwQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUM5QyxFQUFFLEVBQUUsV0FBVyxDQUFDLEVBQUU7b0JBQ2xCLEtBQUssRUFBRSxXQUFXLENBQUMsSUFBSTtvQkFDdkIscUJBQXFCLEVBQUUsV0FBVyxDQUFDLElBQUk7b0JBQ3ZDLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSTtpQkFDdkIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDcEMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGNBQWMsQ0FBQyxFQUFVO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RELGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFDcEIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5RCxDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQUk7UUFDdEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDakcsSUFBSSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ3BILElBQUksSUFBSSxLQUFLLGFBQWEsRUFBRSxDQUFDO2dCQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RCLENBQUM7WUFDRCxJQUFJLGNBQWMsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN0RixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLFNBQVMsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsU0FBUyxLQUFLLGNBQWMsRUFBRSxDQUFDO2dCQUMxSCxjQUFjLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUM7WUFFN0UsQ0FBQztZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEdBQUc7Z0JBQ2xDLE9BQU8sRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDcEMsRUFBRSxFQUFFLEtBQUssQ0FBQyxLQUFLO29CQUNmLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxLQUFLO29CQUNsQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUs7b0JBQ2pCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtpQkFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsQ0FBQzthQUNwRCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEdBQUc7WUFDdkMsT0FBTyxFQUFFO2dCQUNQO29CQUNFLEVBQUUsRUFBRSxLQUFLO29CQUNULHFCQUFxQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUMzQyxxQ0FBcUMsQ0FBQztvQkFDeEMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUMzQixxQ0FBcUMsQ0FDdEM7b0JBQ0QsS0FBSyxFQUFFLEtBQUs7aUJBQ2I7Z0JBQ0Q7b0JBQ0UsRUFBRSxFQUFFLEtBQUs7b0JBQ1QscUJBQXFCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQzNDLHFDQUFxQyxDQUFDO29CQUN4QyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQzNCLHFDQUFxQyxDQUN0QztvQkFDRCxLQUFLLEVBQUUsS0FBSztpQkFDYjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsT0FBTztvQkFDWCxxQkFBcUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDM0MsdUNBQXVDLENBQ3hDO29CQUNELEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDM0IsdUNBQXVDLENBQ3hDO29CQUNELEtBQUssRUFBRSxPQUFPO2lCQUNmO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxjQUFjO29CQUNsQixxQkFBcUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDM0MsOENBQThDLENBQy9DO29CQUNELEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDM0IsOENBQThDLENBQy9DO29CQUNELEtBQUssRUFBRSxjQUFjO2lCQUN0QjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsV0FBVztvQkFDZixxQkFBcUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDM0MsMkNBQTJDLENBQzVDO29CQUNELEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDM0IsMkNBQTJDLENBQzVDO29CQUNELEtBQUssRUFBRSxXQUFXO2lCQUNuQjthQUNGLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNkLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDVixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7Z0JBQ2hCLHFCQUFxQixFQUFFLEdBQUcsQ0FBQyxxQkFBcUI7Z0JBQ2hELElBQUksRUFBRSxHQUFHLENBQUMsS0FBSzthQUNoQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQ3BELENBQUM7SUFDSixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDM0MsSUFBSSxPQUFPLEdBQUc7WUFDWjtnQkFDRSxFQUFFLEVBQUUsT0FBTztnQkFDWCxxQkFBcUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDM0MsNENBQTRDLENBQzdDO2dCQUNELEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDM0IsNENBQTRDLENBQzdDO2dCQUNELEtBQUssRUFBRSxPQUFPO2FBQ2Y7WUFDRDtnQkFDRSxFQUFFLEVBQUUsUUFBUTtnQkFDWixxQkFBcUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDM0MsNkNBQTZDLENBQzlDO2dCQUNELEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDM0IsNkNBQTZDLENBQzlDO2dCQUNELEtBQUssRUFBRSxRQUFRO2FBQ2hCO1lBQ0Q7Z0JBQ0UsRUFBRSxFQUFFLFNBQVM7Z0JBQ2IscUJBQXFCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQzNDLDhDQUE4QyxDQUFDO2dCQUNqRCxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQzNCLDhDQUE4QyxDQUMvQztnQkFDRCxLQUFLLEVBQUUsU0FBUzthQUNqQjtZQUNEO2dCQUNFLEVBQUUsRUFBRSxRQUFRO2dCQUNaLHFCQUFxQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUMzQyw2Q0FBNkMsQ0FBQztnQkFDaEQsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUMzQiw2Q0FBNkMsQ0FDOUM7Z0JBQ0QsS0FBSyxFQUFFLFFBQVE7YUFDaEI7U0FDRixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxHQUFHO1lBQzNDLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QixFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ1YsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO2dCQUNoQixxQkFBcUIsRUFBRSxHQUFHLENBQUMscUJBQXFCO2dCQUNoRCxJQUFJLEVBQUUsR0FBRyxDQUFDLEtBQUs7YUFDaEIsQ0FBQyxDQUFDO1NBQ0osQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNsRSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQztvQkFDeEIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUMxRCxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLO29CQUNoRixJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsSUFBSTtvQkFDekMsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsbUJBQW1CO29CQUNoRyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUztvQkFDNUksUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDekUsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRTtpQkFDcEYsQ0FBQyxDQUFDO2dCQUNILElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNyQixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxDQUFDO29CQUN2RSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDeEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUMxQyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUM1RCxDQUFDO29CQUNELFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7NEJBQ3hCLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjt5QkFDakcsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsV0FBVyxLQUFLLG1CQUFtQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsZUFBZSxLQUFLLFVBQVUsQ0FBQztvQkFDOUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNWLENBQUM7WUFDSCxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDWCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUMxQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO3dCQUN4QixTQUFTLEVBQUUsS0FBSzt3QkFDaEIsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsbUJBQW1CO3dCQUNoRyxhQUFhLEVBQUUsU0FBUzt3QkFDeEIsSUFBSSxFQUFFLEVBQUU7d0JBQ1IsUUFBUSxFQUFFLEVBQUU7d0JBQ1osYUFBYSxFQUFFLEVBQUU7cUJBQ2xCLENBQUMsQ0FBQztvQkFDSCxPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO2dCQUN4QixTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLO2dCQUNoRixXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxtQkFBbUI7Z0JBQ2hHLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTO2dCQUM1SSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsSUFBSTtnQkFDekMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDekUsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRTthQUNwRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzs4R0ExVFUsb0JBQW9CO2tHQUFwQixvQkFBb0IscVlDZmpDLGk0R0E0REE7O0FEN0NhLG9CQUFvQjtJQU5oQyxZQUFZLEVBQUU7R0FNRixvQkFBb0IsQ0EyVGhDOzsyRkEzVFksb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGlCQUFpQjttTEFNakIsa0JBQWtCO3NCQUEzQixNQUFNO2dCQW9DNkIscUJBQXFCO3NCQUF4RCxTQUFTO3VCQUFDLHVCQUF1QjtnQkFDQSxtQkFBbUI7c0JBQXBELFNBQVM7dUJBQUMscUJBQXFCO2dCQUVuQixZQUFZO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtJV2lkZ2V0Q29tcG9uZW50fSBmcm9tICdAeXV1dmlzL3dpZGdldC1ncmlkJztcbmltcG9ydCB7SWNoYXJ0c30gZnJvbSAnLi4vaWNoYXJ0cyc7XG5pbXBvcnQge1VudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtTdG9yZWRRdWVyaWVzU2VydmljZSwgU3RvcmVkUXVlcnksIFRyYW5zbGF0ZVNlcnZpY2UsIFVzZXJTZXJ2aWNlLCBVdGlsc30gZnJvbSAnQGVvLXNkay9jb3JlJztcbmltcG9ydCB7VW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7RU1QVFksIHNraXAsIHRhcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0NvZGVzeXN0ZW1Db21wb25lbnR9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2VvLWZyYW1ld29yayc7XG5cbkBVbnRpbERlc3Ryb3koKVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tY2hhcnRzLXNldHVwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXJ0cy1zZXR1cC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoYXJ0cy1zZXR1cC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENoYXJ0c1NldHVwQ29tcG9uZW50IGltcGxlbWVudHMgSVdpZGdldENvbXBvbmVudCwgT25Jbml0IHtcbiAgcHJpdmF0ZSBfd2lkZ2V0Q29uZmlnOiBJY2hhcnRzO1xuICBAT3V0cHV0KCkgd2lkZ2V0Q29uZmlnQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJY2hhcnRzPigpO1xuICBzdG9yZWRRdWVyaWVzOiBTdG9yZWRRdWVyeVtdO1xuICBzZXR1cEZvcm06IFVudHlwZWRGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICBzdG9yZWRRdWVyeTogW251bGxdLFxuICAgIGNoYXJ0VHlwZTogW10sXG4gICAgc2l6ZTogWycnLCBbVmFsaWRhdG9ycy5tYXgoMTAwKSwgVmFsaWRhdG9ycy5taW4oMyldXSxcbiAgICBhZ2dyZWdhdGlvbjogW10sXG4gICAgaGlzdG9ncmFtVHlwZTogW10sXG4gICAgaW50ZXJ2YWw6IFtdLFxuICAgIHN0YXJ0aW5ncG9pbnQ6IFtdXG4gIH0pO1xuXG4gIHN0b3JlZFF1ZXJpZXNQaWNrZXIgPSB7XG4gICAgdGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnNlYXJjaC50aXRsZS5zdG9yZWRxdWVyaWVzJyksXG4gICAgY29kZXN5c3RlbTogbnVsbCxcbiAgfTtcblxuICBhZ2dyZWdhdGlvblBpY2tlciA9IHtcbiAgICB0aXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLmFnZ3JlZ2F0aW9uRmllbGQnKSxcbiAgICBjb2Rlc3lzdGVtOiBudWxsLFxuICB9O1xuXG4gIGNoYXJ0VHlwZVBpY2tlciA9IHtcbiAgICB0aXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLmNoYXJ0VHlwZUZpZWxkJyksXG4gICAgY29kZXN5c3RlbTogbnVsbCxcbiAgfTtcblxuICBoaXN0b2dyYW1UeXBlUGlja2VyID0ge1xuICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby53b3Jrc3BhY2Uud2lkZ2V0LmZvcm0ubGFiZWwuaGlzdG9ncmFtJyksXG4gICAgY29kZXN5c3RlbTogbnVsbCxcbiAgfTtcblxuICBpc0RhdGVUaW1lVHlwZSA9IGZhbHNlO1xuICBzZWxlY3RlZFNhdmVkU2VhcmNoTmFtZSA9ICcnO1xuICBzdG9yZWRRdWVyeTogU3RvcmVkUXVlcnk7XG5cbiAgQFZpZXdDaGlsZCgnYWdncmVnYXRpb25Db2Rlc3lzdGVtJykgYWdncmVnYXRpb25Db2Rlc3lzdGVtOiBDb2Rlc3lzdGVtQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdoaXN0b2dyYW1Db2Rlc3lzdGVtJykgaGlzdG9ncmFtQ29kZXN5c3RlbTogQ29kZXN5c3RlbUNvbXBvbmVudDtcblxuICBASW5wdXQoKSBzZXQgd2lkZ2V0Q29uZmlnKHdjOiBJY2hhcnRzKSB7XG4gICAgdGhpcy5fd2lkZ2V0Q29uZmlnID0gd2M7XG4gICAgdGhpcy51cGRhdGVGaWVsZCgpO1xuICB9XG5cbiAgZ2V0IHdpZGdldENvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fd2lkZ2V0Q29uZmlnO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgc3RvcmVkUXVlcmllc1NlcnZpY2U6IFN0b3JlZFF1ZXJpZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlKSB7XG4gICAgdGhpcy5zZXR1cEZvcm0udmFsdWVDaGFuZ2VzLnBpcGUoc2tpcCgxKSwgdW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgdGhpcy5zZXRXaWRnZXRDb25maWcoKTtcbiAgICB9KTtcbiAgICB0aGlzLmdldFN0b3JlZFF1ZXJ5cygpO1xuICAgIHRoaXMuZ2V0Q2hhcnRGaWVsZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRXaWRnZXRDb25maWcoKSB7XG4gICAgdGhpcy5oaXN0b2dyYW1UeXBlUGlja2VyLmNvZGVzeXN0ZW0gPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuc2V0dXBGb3JtLnZhbGlkICYmIHRoaXMuc3RvcmVkUXVlcmllcykge1xuICAgICAgdGhpcy5zdG9yZWRRdWVyeSA9IHRoaXMuc3RvcmVkUXVlcmllcy5maW5kKChzcSkgPT4gc3EubmFtZSA9PT0gdGhpcy5zZXR1cEZvcm0uZ2V0KCdzdG9yZWRRdWVyeScpLnZhbHVlKTtcbiAgICAgIHRoaXMud2lkZ2V0Q29uZmlnID0ge1xuICAgICAgICBzdG9yZWRRdWVyeTogdGhpcy5zdG9yZWRRdWVyeT8uaWQsXG4gICAgICAgIGZvcm1WYWx1ZTogdGhpcy5zZXR1cEZvcm0udmFsdWUsXG4gICAgICAgIGFnZ3JlZ2F0aW9uVHlwZTogJydcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5zZXR1cEZvcm0uZ2V0KCdzdG9yZWRRdWVyeScpLnZhbHVlICE9PSB0aGlzLnNlbGVjdGVkU2F2ZWRTZWFyY2hOYW1lKSB7XG4gICAgICAgIGlmICh0aGlzLnN0b3JlZFF1ZXJ5KSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNhdmVkU2VhcmNoTmFtZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXR1cEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgYWdncmVnYXRpb246ICdzeXNvYmplY3QuY3JlYXRlZCcsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNhdmVkU2VhcmNoTmFtZSA9IHRoaXMuc2V0dXBGb3JtLmdldCgnc3RvcmVkUXVlcnknKS52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNEYXRlVGltZVR5cGUgPSB0aGlzLndpZGdldENvbmZpZz8uZm9ybVZhbHVlLmFnZ3JlZ2F0aW9uID09PSAnc3lzb2JqZWN0LmNyZWF0ZWQnIHx8IHRoaXMud2lkZ2V0Q29uZmlnPy5hZ2dyZWdhdGlvblR5cGUgPT09ICdEQVRFVElNRSc7XG4gICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy53aWRnZXRDb25maWcuYWdncmVnYXRpb25UeXBlID0gdGhpcy5hZ2dyZWdhdGlvbkNvZGVzeXN0ZW0/LnNlbGVjdGVkTm9kZXM/LmRhdGE/LnR5cGU7XG4gICAgICAgIHRoaXMuaXNEYXRlVGltZVR5cGUgPSB0aGlzLndpZGdldENvbmZpZz8uYWdncmVnYXRpb25UeXBlID09PSAnREFURVRJTUUnO1xuICAgICAgfVxuICAgICAgdGhpcy53aWRnZXRDb25maWdDaGFuZ2UuZW1pdCh0aGlzLl93aWRnZXRDb25maWcpO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0b3JlZFF1ZXJ5cygpIHtcbiAgICB0aGlzLnN0b3JlZFF1ZXJpZXNTZXJ2aWNlXG4gICAgICAuZmV0Y2hTdG9yZWRRdWVyaWVzKCkucGlwZShcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcyksXG4gICAgICApLnN1YnNjcmliZShzdG9yZWRRdWVyaWVzID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZWRRdWVyaWVzID0gc3RvcmVkUXVlcmllcztcbiAgICAgICAgdGhpcy5zdG9yZWRRdWVyaWVzUGlja2VyLmNvZGVzeXN0ZW0gPSB7XG4gICAgICAgICAgZW50cmllczogdGhpcy5zdG9yZWRRdWVyaWVzLm1hcChzdG9yZWRRdWVyeSA9PiAoe1xuICAgICAgICAgICAgaWQ6IHN0b3JlZFF1ZXJ5LmlkLFxuICAgICAgICAgICAgbGFiZWw6IHN0b3JlZFF1ZXJ5Lm5hbWUsXG4gICAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHN0b3JlZFF1ZXJ5Lm5hbWUsXG4gICAgICAgICAgICBkYXRhOiBzdG9yZWRRdWVyeS5uYW1lXG4gICAgICAgICAgfSkpLnNvcnQoVXRpbHMuc29ydFZhbHVlcygnbGFiZWwnKSksXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldFN0b3JlZFF1ZXJ5KGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZWRRdWVyaWVzU2VydmljZS5nZXRTdG9yZWRRdWVyeShpZCkucGlwZShcbiAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpLFxuICAgICAgdGFwKHN0b3JlZFF1ZXJ5ID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZWRRdWVyeSA9IHN0b3JlZFF1ZXJ5O1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlRmllbGQoKSB7XG4gICAgdGhpcy5nZXRIaXN0b2dyYW1GaWVsZCgpO1xuICAgIGlmICh0aGlzLnN0b3JlZFF1ZXJ5Py50eXBlcz8ubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aGlzLmdldEFnZ3JlZ2F0aW9uRmllbGQoJ3N5c2RvY3VtZW50Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2V0QWdncmVnYXRpb25GaWVsZCh0aGlzLnN0b3JlZFF1ZXJ5Py50eXBlc1swXT8ucW5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldEFnZ3JlZ2F0aW9uRmllbGQodHlwZSkge1xuICAgIHRoaXMuYWdncmVnYXRpb25QaWNrZXIuY29kZXN5c3RlbSA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UuZ2V0RmllbGREZWZpbml0aW9uKHR5cGUpLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZShkZWZpbml0aW9uID0+IHtcbiAgICAgIGxldCBleGNsdWRlID0gbmV3IFNldChbJ2ZpbGVuYW1lJywgJ21pbWV0eXBlJywgJ21vZGlmaWVydGl0bGUnLCAndmVyc2lvbicsICdjcmVhdG9ydGl0bGUnLCAndGl0bGUnLCAnZGVzY3JpcHRpb24nXSk7XG4gICAgICBpZiAodHlwZSAhPT0gJ3N5c2RvY3VtZW50Jykge1xuICAgICAgICBleGNsdWRlLmFkZCgndHlwZScpO1xuICAgICAgfVxuICAgICAgbGV0IGZpbHRlcmVkRmllbGRzID0gZGVmaW5pdGlvbi5lbGVtZW50cy5maWx0ZXIoZmllbGQgPT4gIWV4Y2x1ZGUuaGFzKGZpZWxkLmhpdG5hbWUpKTtcbiAgICAgIGlmICh0aGlzLndpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5jaGFydFR5cGUgPT09ICdsaW5lQ3VydmUnIHx8IHRoaXMud2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LmNoYXJ0VHlwZSA9PT0gJ2xpbmVTdHJhaWdodCcpIHtcbiAgICAgICAgZmlsdGVyZWRGaWVsZHMgPSBmaWx0ZXJlZEZpZWxkcy5maWx0ZXIoZmllbGQgPT4gZmllbGQudHlwZSA9PT0gJ0RBVEVUSU1FJyk7XG5cbiAgICAgIH1cbiAgICAgIHRoaXMuYWdncmVnYXRpb25QaWNrZXIuY29kZXN5c3RlbSA9IHtcbiAgICAgICAgZW50cmllczogZmlsdGVyZWRGaWVsZHMubWFwKGZpZWxkID0+ICh7XG4gICAgICAgICAgaWQ6IGZpZWxkLmxhYmVsLFxuICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogZmllbGQubGFiZWwsXG4gICAgICAgICAgZGF0YTogZmllbGQucW5hbWUsXG4gICAgICAgICAgdHlwZTogZmllbGQudHlwZVxuICAgICAgICB9KSkuc29ydChVdGlscy5zb3J0VmFsdWVzKCdkZWZhdWx0cmVwcmVzZW50YXRpb24nKSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q2hhcnRGaWVsZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jaGFydFR5cGVQaWNrZXIuY29kZXN5c3RlbSA9IHtcbiAgICAgIGVudHJpZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnYmFyJyxcbiAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMudHlwZS5iYXInKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy50eXBlLmJhcidcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiAnYmFyJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAncGllJyxcbiAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMudHlwZS5waWUnKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy50eXBlLnBpZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiAncGllJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnZG9udXQnLFxuICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy50eXBlLmRvbnV0J1xuICAgICAgICAgICksXG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMudHlwZS5kb251dCdcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiAnZG9udXQnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdsaW5lU3RyYWlnaHQnLFxuICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy50eXBlLmxpbmVTdHJhaWdodCdcbiAgICAgICAgICApLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnR5cGUubGluZVN0cmFpZ2h0J1xuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6ICdsaW5lU3RyYWlnaHQnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdsaW5lQ3VydmUnLFxuICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy50eXBlLmxpbmVDdXJ2ZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnR5cGUubGluZUN1cnZlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6ICdsaW5lQ3VydmUnLFxuICAgICAgICB9XG4gICAgICBdLm1hcCgocmVzKSA9PiAoe1xuICAgICAgICBpZDogcmVzLmlkLFxuICAgICAgICBsYWJlbDogcmVzLmxhYmVsLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHJlcy5kZWZhdWx0cmVwcmVzZW50YXRpb24sXG4gICAgICAgIGRhdGE6IHJlcy52YWx1ZVxuICAgICAgfSkpLnNvcnQoVXRpbHMuc29ydFZhbHVlcygnZGVmYXVsdHJlcHJlc2VudGF0aW9uJykpLFxuICAgIH07XG4gIH1cblxuICBnZXRIaXN0b2dyYW1GaWVsZCgpIHtcbiAgICB0aGlzLmhpc3RvZ3JhbVR5cGVQaWNrZXIuY29kZXN5c3RlbSA9IG51bGw7XG4gICAgbGV0IGVudHJpZXMgPSBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnZGFpbHknLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS5kYWlseSdcbiAgICAgICAgKSxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS5kYWlseSdcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6ICdkYWlseSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnd2Vla2x5JyxcbiAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5oaXN0b2dyYW0ud2Vla2x5J1xuICAgICAgICApLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMuaGlzdG9ncmFtLndlZWtseSdcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6ICd3ZWVrbHknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ21vbnRobHknLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS5tb250aGx5JyksXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5oaXN0b2dyYW0ubW9udGhseSdcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6ICdtb250aGx5J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICd5ZWFybHknLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS55ZWFybHknKSxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS55ZWFybHknXG4gICAgICAgICksXG4gICAgICAgIHZhbHVlOiAneWVhcmx5J1xuICAgICAgfVxuICAgIF07XG4gICAgcmV0dXJuIHRoaXMuaGlzdG9ncmFtVHlwZVBpY2tlci5jb2Rlc3lzdGVtID0ge1xuICAgICAgZW50cmllczogZW50cmllcy5tYXAoKHJlcykgPT4gKHtcbiAgICAgICAgaWQ6IHJlcy5pZCxcbiAgICAgICAgbGFiZWw6IHJlcy5sYWJlbCxcbiAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiByZXMuZGVmYXVsdHJlcHJlc2VudGF0aW9uLFxuICAgICAgICBkYXRhOiByZXMudmFsdWVcbiAgICAgIH0pKSxcbiAgICB9O1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dpZGdldENvbmZpZz8uc3RvcmVkUXVlcnkpIHtcbiAgICAgIHRoaXMuZ2V0U3RvcmVkUXVlcnkodGhpcy5fd2lkZ2V0Q29uZmlnPy5zdG9yZWRRdWVyeSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXR1cEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgc3RvcmVkUXVlcnk6IHRoaXMuc3RvcmVkUXVlcnkgPyB0aGlzLnN0b3JlZFF1ZXJ5Lm5hbWUgOiAnJyxcbiAgICAgICAgICBjaGFydFR5cGU6IHRoaXMuX3dpZGdldENvbmZpZyA/IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5jaGFydFR5cGUgOiAncGllJyxcbiAgICAgICAgICBzaXplOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uc2l6ZSxcbiAgICAgICAgICBhZ2dyZWdhdGlvbjogdGhpcy5fd2lkZ2V0Q29uZmlnID8gdGhpcy5fd2lkZ2V0Q29uZmlnLmZvcm1WYWx1ZS5hZ2dyZWdhdGlvbiA6ICdzeXNvYmplY3QuY3JlYXRlZCcsXG4gICAgICAgICAgaGlzdG9ncmFtVHlwZTogdGhpcy5fd2lkZ2V0Q29uZmlnICYmIHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5oaXN0b2dyYW1UeXBlID8gdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/Lmhpc3RvZ3JhbVR5cGUgOiAnbW9udGhseScsXG4gICAgICAgICAgaW50ZXJ2YWw6IHRoaXMuX3dpZGdldENvbmZpZyA/IHRoaXMuX3dpZGdldENvbmZpZy5mb3JtVmFsdWUuaW50ZXJ2YWwgOiAnJyxcbiAgICAgICAgICBzdGFydGluZ3BvaW50OiB0aGlzLl93aWRnZXRDb25maWcgPyB0aGlzLl93aWRnZXRDb25maWcuZm9ybVZhbHVlLnN0YXJ0aW5ncG9pbnQgOiAnJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLnN0b3JlZFF1ZXJ5KSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFNhdmVkU2VhcmNoTmFtZSA9IHRoaXMuc2V0dXBGb3JtLmdldCgnc3RvcmVkUXVlcnknKS52YWx1ZTtcbiAgICAgICAgICBpZiAodGhpcy5zdG9yZWRRdWVyeS50eXBlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0QWdncmVnYXRpb25GaWVsZCgnc3lzZG9jdW1lbnQnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZXRBZ2dyZWdhdGlvbkZpZWxkKHRoaXMuc3RvcmVkUXVlcnkudHlwZXNbMF0ucW5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICBhZ2dyZWdhdGlvbjogdGhpcy5fd2lkZ2V0Q29uZmlnID8gdGhpcy5fd2lkZ2V0Q29uZmlnLmZvcm1WYWx1ZS5hZ2dyZWdhdGlvbiA6ICdzeXNvYmplY3QuY3JlYXRlZCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuaXNEYXRlVGltZVR5cGUgPSB0aGlzLndpZGdldENvbmZpZz8uZm9ybVZhbHVlLmFnZ3JlZ2F0aW9uID09PSAnc3lzb2JqZWN0LmNyZWF0ZWQnIHx8IHRoaXMud2lkZ2V0Q29uZmlnPy5hZ2dyZWdhdGlvblR5cGUgPT09ICdEQVRFVElNRSc7XG4gICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgfVxuICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuaXNEYXRlVGltZVR5cGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fd2lkZ2V0Q29uZmlnLmFnZ3JlZ2F0aW9uVHlwZSA9IG51bGw7XG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgIHRoaXMuc2V0dXBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgY2hhcnRUeXBlOiAncGllJyxcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uOiB0aGlzLl93aWRnZXRDb25maWcgPyB0aGlzLl93aWRnZXRDb25maWcuZm9ybVZhbHVlLmFnZ3JlZ2F0aW9uIDogJ3N5c29iamVjdC5jcmVhdGVkJyxcbiAgICAgICAgICAgIGhpc3RvZ3JhbVR5cGU6ICdtb250aGx5JyxcbiAgICAgICAgICAgIHNpemU6ICcnLFxuICAgICAgICAgICAgaW50ZXJ2YWw6ICcnLFxuICAgICAgICAgICAgc3RhcnRpbmdwb2ludDogJycsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXR1cEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIGNoYXJ0VHlwZTogdGhpcy5fd2lkZ2V0Q29uZmlnID8gdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LmNoYXJ0VHlwZSA6ICdwaWUnLFxuICAgICAgICBhZ2dyZWdhdGlvbjogdGhpcy5fd2lkZ2V0Q29uZmlnID8gdGhpcy5fd2lkZ2V0Q29uZmlnLmZvcm1WYWx1ZS5hZ2dyZWdhdGlvbiA6ICdzeXNvYmplY3QuY3JlYXRlZCcsXG4gICAgICAgIGhpc3RvZ3JhbVR5cGU6IHRoaXMuX3dpZGdldENvbmZpZyAmJiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uaGlzdG9ncmFtVHlwZSA/IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5oaXN0b2dyYW1UeXBlIDogJ21vbnRobHknLFxuICAgICAgICBzaXplOiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uc2l6ZSxcbiAgICAgICAgaW50ZXJ2YWw6IHRoaXMuX3dpZGdldENvbmZpZyA/IHRoaXMuX3dpZGdldENvbmZpZy5mb3JtVmFsdWUuaW50ZXJ2YWwgOiAnJyxcbiAgICAgICAgc3RhcnRpbmdwb2ludDogdGhpcy5fd2lkZ2V0Q29uZmlnID8gdGhpcy5fd2lkZ2V0Q29uZmlnLmZvcm1WYWx1ZS5zdGFydGluZ3BvaW50IDogJycsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzZXR1cFwiPlxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwic2V0dXBGb3JtXCI+XG4gICAgICAgIDxlby1mb3JtLWlucHV0IFtyZXF1aXJlZF09XCJ0cnVlXCIgW3NraXBUb2dnbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuZm9ybS5sYWJlbC5jaGFydFR5cGVGaWVsZCcgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgIDxlby1jb2Rlc3lzdGVtIGZvcm1Db250cm9sTmFtZT1cImNoYXJ0VHlwZVwiIFtwaWNrZXJUaXRsZV09XCJjaGFydFR5cGVQaWNrZXIudGl0bGVcIlxuICAgICAgICAgICAgICAgIFtjb2Rlc3lzdGVtXT1cImNoYXJ0VHlwZVBpY2tlci5jb2Rlc3lzdGVtXCI+PC9lby1jb2Rlc3lzdGVtPlxuICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG5cbiAgICAgICAgPGVvLWZvcm0taW5wdXQgW3JlcXVpcmVkXT1cInRydWVcIiBbc2tpcFRvZ2dsZV09XCJ0cnVlXCIgKm5nSWY9XCJzdG9yZWRRdWVyaWVzUGlja2VyPy5jb2Rlc3lzdGVtPy5lbnRyaWVzXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCInZW8uc2VhcmNoLnRpdGxlLnN0b3JlZHF1ZXJpZXMnIHwgdHJhbnNsYXRlXCIgW2Rlc2NyaXB0aW9uXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LnN0b3JlZC5xdWVyaWVzLmRlc2NyaXB0aW9uJ1wiPlxuICAgICAgICAgICAgPGVvLWNvZGVzeXN0ZW0gZm9ybUNvbnRyb2xOYW1lPVwic3RvcmVkUXVlcnlcIiBbcGlja2VyVGl0bGVdPVwic3RvcmVkUXVlcmllc1BpY2tlci50aXRsZVwiXG4gICAgICAgICAgICAgICAgW2NvZGVzeXN0ZW1dPVwic3RvcmVkUXVlcmllc1BpY2tlci5jb2Rlc3lzdGVtXCJcbiAgICAgICAgICAgICAgICBbZW1wdHlNZXNzYWdlXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LnN0b3JlZC5xdWVyaWVzLmxpc3Qubm90QXZhaWxhYmxlJ1wiPjwvZW8tY29kZXN5c3RlbT5cbiAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuXG4gICAgICAgIDxlby1mb3JtLWlucHV0IFtyZXF1aXJlZF09XCJ0cnVlXCIgW3NraXBUb2dnbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAqbmdJZj1cImFnZ3JlZ2F0aW9uUGlja2VyPy5jb2Rlc3lzdGVtPy5lbnRyaWVzICYmIHRoaXMuc2V0dXBGb3JtLmdldCgnc3RvcmVkUXVlcnknKS52YWx1ZVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuZm9ybS5sYWJlbC5hZ2dyZWdhdGlvbkZpZWxkJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgPGVvLWNvZGVzeXN0ZW0gI2FnZ3JlZ2F0aW9uQ29kZXN5c3RlbSBmb3JtQ29udHJvbE5hbWU9XCJhZ2dyZWdhdGlvblwiIFtwaWNrZXJUaXRsZV09XCJhZ2dyZWdhdGlvblBpY2tlci50aXRsZVwiXG4gICAgICAgICAgICAgICAgW2NvZGVzeXN0ZW1dPVwiYWdncmVnYXRpb25QaWNrZXIuY29kZXN5c3RlbVwiPjwvZW8tY29kZXN5c3RlbT5cbiAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuXG4gICAgICAgIDxlby1mb3JtLWlucHV0IFtyZXF1aXJlZF09XCJ0cnVlXCIgW3NraXBUb2dnbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAqbmdJZj1cImlzRGF0ZVRpbWVUeXBlXCIgW2xhYmVsXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LmZvcm0ubGFiZWwuaGlzdG9ncmFtJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgPGVvLWNvZGVzeXN0ZW0gZm9ybUNvbnRyb2xOYW1lPVwiaGlzdG9ncmFtVHlwZVwiIFtwaWNrZXJUaXRsZV09XCJoaXN0b2dyYW1UeXBlUGlja2VyLnRpdGxlXCJcbiAgICAgICAgICAgICAgICBbY29kZXN5c3RlbV09XCJoaXN0b2dyYW1UeXBlUGlja2VyLmNvZGVzeXN0ZW1cIj48L2VvLWNvZGVzeXN0ZW0+XG4gICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cblxuICAgICAgICA8ZW8tZm9ybS1pbnB1dCBbc2tpcFRvZ2dsZV09XCJ0cnVlXCIgW2Rlc2NyaXB0aW9uXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0LmZvcm0ubGFiZWwuZGVzY3JpcHRpb24nXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCInZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLnBhcnRpYWxWYWx1ZScgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgIDxlby1udW1iZXIgW3NjYWxlXT1cIjBcIiBmb3JtQ29udHJvbE5hbWU9XCJzaXplXCI+PC9lby1udW1iZXI+XG4gICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyLW1zZ1wiICpuZ0lmPVwic2V0dXBGb3JtLmdldCgnc2l6ZScpLmhhc0Vycm9yKCdtYXgnKSB8fCBzZXR1cEZvcm0uZ2V0KCdzaXplJykuaGFzRXJyb3IoJ21pbicpXCI+XG4gICAgICAgICAgICA8ZGl2IHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICBlby5mb3JtLnByb3BlcnR5LnN0cmluZy5lcnJvci5jbGFzc2lmaWNhdGlvbi5wYXJ0aWFsVmFsdWUgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxlby1mb3JtLWlucHV0IFtza2lwVG9nZ2xlXT1cInRydWVcIiBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmludGVydmFsJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgPGVvLW51bWJlciBbc2NhbGVdPVwiMFwiIGZvcm1Db250cm9sTmFtZT1cImludGVydmFsXCI+PC9lby1udW1iZXI+XG4gICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cblxuICAgICAgICA8ZW8tZm9ybS1pbnB1dCBbc2tpcFRvZ2dsZV09XCJ0cnVlXCIgW2xhYmVsXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5zdGFydGluZ3BvaW50JyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgPGVvLW51bWJlciBbc2NhbGVdPVwiMFwiIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0aW5ncG9pbnRcIj48L2VvLW51bWJlcj5cbiAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuXG4gICAgPC9mb3JtPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJwcmV2aWV3XCJcbiAgICAqbmdJZj1cInNldHVwRm9ybS5nZXQoJ2FnZ3JlZ2F0aW9uJykudmFsdWUgJiYgc2V0dXBGb3JtLmdldCgnY2hhcnRUeXBlJykudmFsdWUgJiYgc2V0dXBGb3JtLmdldCgnc3RvcmVkUXVlcnknKS52YWx1ZSAmJiAoaXNEYXRlVGltZVR5cGUgJiYgc2V0dXBGb3JtLmdldCgnaGlzdG9ncmFtVHlwZScpLnZhbHVlIHx8ICFpc0RhdGVUaW1lVHlwZSk7IGVsc2UgdHBsRW1wdHlcIj5cbiAgICA8ZW8tY2hhcnRzLXdpZGdldCBbd2lkZ2V0Q29uZmlnXT1cIndpZGdldENvbmZpZ1wiIFtlZGl0TW9kZV09XCJ0cnVlXCI+PC9lby1jaGFydHMtd2lkZ2V0PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjdHBsRW1wdHk+XG4gICAgPGRpdiBjbGFzcz1cImVtcHR5XCI+XG4gICAgICAgIDxlby1lcnJvci1tZXNzYWdlXG4gICAgICAgICAgICBbZW1wdHlTdGF0ZV09XCJ7aWNvbjogJ2ljX3NhdmVkX3NlYXJjaC5zdmcnLCB0ZXh0OiAnZW8ud29ya3NwYWNlLndpZGdldC5jb25maWd1cmF0aW9uLm5vdE9rJ31cIj48L2VvLWVycm9yLW1lc3NhZ2U+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
415
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnRzLXNldHVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tY2xpZW50L2Rhc2hib2FyZC93aWRnZXRzL2NoYXJ0cy13aWRnZXQvY2hhcnRzLXNldHVwL2NoYXJ0cy1zZXR1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWNsaWVudC9kYXNoYm9hcmQvd2lkZ2V0cy9jaGFydHMtd2lkZ2V0L2NoYXJ0cy1zZXR1cC9jaGFydHMtc2V0dXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3hGLE9BQU8sRUFBMEQsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkcsT0FBTyxFQUFrRixLQUFLLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEgsT0FBTyxFQUFDLFlBQVksRUFBRSxjQUFjLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7QUFTN0MsSUFBTSxvQkFBb0IsR0FBMUIsTUFBTSxvQkFBb0I7SUE0RC9CLElBQWEsWUFBWSxDQUFDLEVBQVc7UUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELFlBQ1UsRUFBc0IsRUFDdEIsb0JBQTBDLEVBQzFDLFNBQTJCLEVBQzNCLFdBQXdCLEVBQ3hC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QyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLO2dCQUNuSCxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM3RSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNuRSxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUMzRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFHLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JFLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25FLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7YUFDcEUsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7OEdBdmNVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLDRVQ2ZqQyx5dFFBNEpBOztBRDdJYSxvQkFBb0I7SUFOaEMsWUFBWSxFQUFFO0dBTUYsb0JBQW9CLENBd2NoQzs7MkZBeGNZLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxpQkFBaUI7K01BTWpCLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBdUQ2QixxQkFBcUI7c0JBQXhELFNBQVM7dUJBQUMsdUJBQXVCO2dCQUVyQixZQUFZO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtJV2lkZ2V0Q29tcG9uZW50fSBmcm9tICdAeXV1dmlzL3dpZGdldC1ncmlkJztcbmltcG9ydCB7SWNoYXJ0c30gZnJvbSAnLi4vaWNoYXJ0cyc7XG5pbXBvcnQge0Zvcm1Db250cm9sU3RhdHVzLCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7U3RvcmVkUXVlcmllc1NlcnZpY2UsIFN0b3JlZFF1ZXJ5LCBTeXN0ZW1TZXJ2aWNlLCBUcmFuc2xhdGVTZXJ2aWNlLCBVc2VyU2VydmljZSwgVXRpbHN9IGZyb20gJ0Blby1zZGsvY29yZSc7XG5pbXBvcnQge1VudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWR9IGZyb20gJ0BuZ25lYXQvdW50aWwtZGVzdHJveSc7XG5pbXBvcnQge0VNUFRZLCBkZWJvdW5jZVRpbWUsIHNraXAsIHRhcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0NvZGVzeXN0ZW1Db21wb25lbnR9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2VvLWZyYW1ld29yayc7XG5cbkBVbnRpbERlc3Ryb3koKVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tY2hhcnRzLXNldHVwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXJ0cy1zZXR1cC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoYXJ0cy1zZXR1cC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENoYXJ0c1NldHVwQ29tcG9uZW50IGltcGxlbWVudHMgSVdpZGdldENvbXBvbmVudCwgT25Jbml0IHtcbiAgcHJpdmF0ZSBfd2lkZ2V0Q29uZmlnOiBJY2hhcnRzO1xuICBAT3V0cHV0KCkgd2lkZ2V0Q29uZmlnQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJY2hhcnRzPigpO1xuICBAT3V0cHV0KCkgd2lkZ2V0Q29uZmlnU3RhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1Db250cm9sU3RhdHVzPigpO1xuXG4gIHN0b3JlZFF1ZXJpZXM6IFN0b3JlZFF1ZXJ5W107XG4gIHNldHVwRm9ybTogVW50eXBlZEZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgIHN0b3JlZFF1ZXJ5OiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgY2hhcnRUeXBlOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgc2l6ZTogWzEwLCBbVmFsaWRhdG9ycy5tYXgoMTAwKSwgVmFsaWRhdG9ycy5taW4oMyksIFZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICBhZ2dyZWdhdGlvbjogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgIGhpc3RvZ3JhbVR5cGU6IFtudWxsXSxcbiAgICBhdHRyaWJ1dE1ldHJpYzogW251bGxdLFxuICAgIG1ldHJpYzogW251bGxdLFxuICAgIHNvcnRSZXZlcnQ6IFtmYWxzZV0sXG4gICAgaW50ZXJ2YWw6IFtudWxsXSxcbiAgICBzdGFydGluZ3BvaW50OiBbbnVsbF0sXG4gICAgbWluRG9jQ291bnQ6IFswXSxcbiAgICB0aXRsZTogWycnLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoNTApXV0sXG4gICAgeEF4ZTogWycnLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoNTApXV0sXG4gICAgeUF4ZTogWycnLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoNTApXV1cbiAgfSk7XG5cbiAgc3RvcmVkUXVlcmllc1BpY2tlciA9IHtcbiAgICB0aXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uc2VhcmNoLnRpdGxlLnN0b3JlZHF1ZXJpZXMnKSxcbiAgICBjb2Rlc3lzdGVtOiBudWxsLFxuICB9O1xuXG4gIGFnZ3JlZ2F0aW9uUGlja2VyID0ge1xuICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby53b3Jrc3BhY2Uud2lkZ2V0LmZvcm0ubGFiZWwuYWdncmVnYXRpb25GaWVsZCcpLFxuICAgIGNvZGVzeXN0ZW06IG51bGwsXG4gIH07XG5cbiAgY2hhcnRUeXBlUGlja2VyID0ge1xuICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby53b3Jrc3BhY2Uud2lkZ2V0LmZvcm0ubGFiZWwuY2hhcnRUeXBlRmllbGQnKSxcbiAgICBjb2Rlc3lzdGVtOiBudWxsLFxuICB9O1xuXG4gIGhpc3RvZ3JhbVR5cGVQaWNrZXIgPSB7XG4gICAgdGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLndvcmtzcGFjZS53aWRnZXQuZm9ybS5sYWJlbC5oaXN0b2dyYW0nKSxcbiAgICBjb2Rlc3lzdGVtOiBudWxsLFxuICB9O1xuXG4gIGF0dHJpYnV0TWV0cmljUGlja2VyID0ge1xuICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby53b3Jrc3BhY2Uud2lkZ2V0LmZvcm0ubGFiZWwuYXR0cmlidXRNZXRyaWMnKSxcbiAgICBjb2Rlc3lzdGVtOiBudWxsLFxuICB9O1xuXG4gIGNoYXJ0TWV0cmljUGlja2VyID0ge1xuICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby53b3Jrc3BhY2Uud2lkZ2V0LmZvcm0ubGFiZWwuY2hhcnRNZXRyaWMnKSxcbiAgICBjb2Rlc3lzdGVtOiBudWxsLFxuICB9O1xuXG4gIGlzRGF0ZVRpbWVUeXBlID0gZmFsc2U7XG4gIGlzTnVtYmVyVHlwZSA9IGZhbHNlO1xuICBzZWxlY3RlZFNhdmVkU2VhcmNoTmFtZSA9ICcnO1xuICBzdG9yZWRRdWVyeTogU3RvcmVkUXVlcnk7XG5cbiAgQFZpZXdDaGlsZCgnYWdncmVnYXRpb25Db2Rlc3lzdGVtJykgYWdncmVnYXRpb25Db2Rlc3lzdGVtOiBDb2Rlc3lzdGVtQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpIHNldCB3aWRnZXRDb25maWcod2M6IEljaGFydHMpIHtcbiAgICB0aGlzLl93aWRnZXRDb25maWcgPSB3YztcbiAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XG4gIH1cblxuICBnZXQgd2lkZ2V0Q29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl93aWRnZXRDb25maWc7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBzdG9yZWRRdWVyaWVzU2VydmljZTogU3RvcmVkUXVlcmllc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzeXN0ZW06IFN5c3RlbVNlcnZpY2UpIHtcbiAgICB0aGlzLnNldHVwRm9ybS52YWx1ZUNoYW5nZXMucGlwZShza2lwKDEpLCBkZWJvdW5jZVRpbWUoMTAwMCksIHVudGlsRGVzdHJveWVkKHRoaXMpKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMuc2V0V2lkZ2V0Q29uZmlnKCk7XG4gICAgfSk7XG4gICAgdGhpcy5zZXR1cEZvcm0uc3RhdHVzQ2hhbmdlcy5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKS5zdWJzY3JpYmUoKHYpID0+IHtcbiAgICAgIHRoaXMud2lkZ2V0Q29uZmlnU3RhdGVDaGFuZ2UuZW1pdCh2KTtcbiAgICB9KTtcbiAgICB0aGlzLmdldFN0b3JlZFF1ZXJ5cygpO1xuICAgIHRoaXMuZ2V0Q2hhcnRGaWVsZCgpO1xuICAgIHRoaXMuZ2V0TWV0cmljQ29kZXN5c3RlbSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRXaWRnZXRDb25maWcoKSB7XG4gICAgaWYgKHRoaXMuc2V0dXBGb3JtLnZhbGlkICYmIHRoaXMuc3RvcmVkUXVlcmllcykge1xuICAgICAgdGhpcy5zdG9yZWRRdWVyeSA9IHRoaXMuc3RvcmVkUXVlcmllcy5maW5kKChzcSkgPT4gc3EubmFtZSA9PT0gdGhpcy5zZXR1cEZvcm0uZ2V0KCdzdG9yZWRRdWVyeScpLnZhbHVlKTtcbiAgICAgIHRoaXMud2lkZ2V0Q29uZmlnID0ge1xuICAgICAgICBzdG9yZWRRdWVyeTogdGhpcy5zdG9yZWRRdWVyeT8uaWQsXG4gICAgICAgIGZvcm1WYWx1ZTogdGhpcy5zZXR1cEZvcm0udmFsdWUsXG4gICAgICAgIGFnZ3JlZ2F0aW9uVHlwZTogJydcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5zZXR1cEZvcm0uZ2V0KCdzdG9yZWRRdWVyeScpLnZhbHVlICE9PSB0aGlzLnNlbGVjdGVkU2F2ZWRTZWFyY2hOYW1lKSB7XG4gICAgICAgIGlmICh0aGlzLnN0b3JlZFF1ZXJ5KSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNhdmVkU2VhcmNoTmFtZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXR1cEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgYWdncmVnYXRpb246ICdzeXNvYmplY3QuY3JlYXRlZCcsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNhdmVkU2VhcmNoTmFtZSA9IHRoaXMuc2V0dXBGb3JtLmdldCgnc3RvcmVkUXVlcnknKS52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNEYXRlVGltZVR5cGUgPSB0aGlzLndpZGdldENvbmZpZz8uZm9ybVZhbHVlLmFnZ3JlZ2F0aW9uID09PSAnc3lzb2JqZWN0LmNyZWF0ZWQnIHx8IHRoaXMud2lkZ2V0Q29uZmlnPy5hZ2dyZWdhdGlvblR5cGUgPT09ICdEQVRFVElNRSc7XG4gICAgICAgICAgICB0aGlzLmlzTnVtYmVyVHlwZSA9IHRoaXMud2lkZ2V0Q29uZmlnPy5hZ2dyZWdhdGlvblR5cGUgPT09ICdOVU1CRVInO1xuICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMud2lkZ2V0Q29uZmlnLmFnZ3JlZ2F0aW9uVHlwZSA9IHRoaXMuYWdncmVnYXRpb25Db2Rlc3lzdGVtPy5zZWxlY3RlZE5vZGVzPy5kYXRhPy50eXBlO1xuICAgICAgICB0aGlzLmlzRGF0ZVRpbWVUeXBlID0gdGhpcy53aWRnZXRDb25maWc/LmFnZ3JlZ2F0aW9uVHlwZSA9PT0gJ0RBVEVUSU1FJztcbiAgICAgICAgdGhpcy5pc051bWJlclR5cGUgPSB0aGlzLndpZGdldENvbmZpZz8uYWdncmVnYXRpb25UeXBlID09PSAnTlVNQkVSJztcbiAgICAgIH1cbiAgICAgIHRoaXMud2lkZ2V0Q29uZmlnQ2hhbmdlLmVtaXQodGhpcy5fd2lkZ2V0Q29uZmlnKTtcbiAgICB9XG4gIH1cblxuICBnZXRTdG9yZWRRdWVyeXMoKSB7XG4gICAgdGhpcy5zdG9yZWRRdWVyaWVzU2VydmljZVxuICAgICAgLmZldGNoU3RvcmVkUXVlcmllcygpLnBpcGUoXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpLFxuICAgICAgKS5zdWJzY3JpYmUoc3RvcmVkUXVlcmllcyA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmVkUXVlcmllcyA9IHN0b3JlZFF1ZXJpZXM7XG4gICAgICAgIHRoaXMuc3RvcmVkUXVlcmllc1BpY2tlci5jb2Rlc3lzdGVtID0ge1xuICAgICAgICAgIGVudHJpZXM6IHRoaXMuc3RvcmVkUXVlcmllcy5tYXAoc3RvcmVkUXVlcnkgPT4gKHtcbiAgICAgICAgICAgIGlkOiBzdG9yZWRRdWVyeS5pZCxcbiAgICAgICAgICAgIGxhYmVsOiBzdG9yZWRRdWVyeS5uYW1lLFxuICAgICAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiBzdG9yZWRRdWVyeS5uYW1lLFxuICAgICAgICAgICAgZGF0YTogc3RvcmVkUXVlcnkubmFtZVxuICAgICAgICAgIH0pKS5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ2xhYmVsJykpLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBnZXRTdG9yZWRRdWVyeShpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmVkUXVlcmllc1NlcnZpY2UuZ2V0U3RvcmVkUXVlcnkoaWQpLnBpcGUoXG4gICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKSxcbiAgICAgIHRhcChzdG9yZWRRdWVyeSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmVkUXVlcnkgPSBzdG9yZWRRdWVyeTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZUZpZWxkKCkge1xuICAgIHRoaXMuZ2V0SGlzdG9ncmFtRmllbGQoKTtcbiAgICBpZiAodGhpcy5zdG9yZWRRdWVyeT8udHlwZXM/Lmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhpcy5nZXRBZ2dyZWdhdGlvbkZpZWxkKCdzeXNkb2N1bWVudCcpO1xuICAgICAgdGhpcy5nZXRBdHRyaWJ1dE1ldHJpY0NvZGVzeXN0ZW0oJ3N5c2RvY3VtZW50Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2V0QWdncmVnYXRpb25GaWVsZCh0aGlzLnN0b3JlZFF1ZXJ5Py50eXBlc1swXT8ucW5hbWUpO1xuICAgICAgdGhpcy5nZXRBdHRyaWJ1dE1ldHJpY0NvZGVzeXN0ZW0odGhpcy5zdG9yZWRRdWVyeT8udHlwZXNbMF0/LnFuYW1lKTtcbiAgICB9XG4gIH1cblxuICBnZXRBZ2dyZWdhdGlvbkZpZWxkKHR5cGUpIHtcbiAgICB0aGlzLmFnZ3JlZ2F0aW9uUGlja2VyLmNvZGVzeXN0ZW0gPSBudWxsO1xuICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlLmdldEZpZWxkRGVmaW5pdGlvbih0eXBlKS5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKS5zdWJzY3JpYmUoZGVmaW5pdGlvbiA9PiB7XG4gICAgICBsZXQgZXhjbHVkZSA9IG5ldyBTZXQoWydmaWxlbmFtZScsICdtaW1ldHlwZScsICdtb2RpZmllcnRpdGxlJywgJ3ZlcnNpb24nLCAnY3JlYXRvcnRpdGxlJywgJ3RpdGxlJywgJ2Rlc2NyaXB0aW9uJ10pO1xuICAgICAgaWYgKHR5cGUgIT09ICdzeXNkb2N1bWVudCcpIHtcbiAgICAgICAgZXhjbHVkZS5hZGQoJ3R5cGUnKTtcbiAgICAgIH1cbiAgICAgIGxldCBmaWx0ZXJlZEZpZWxkcyA9IGRlZmluaXRpb24uZWxlbWVudHMuZmlsdGVyKGZpZWxkID0+ICFleGNsdWRlLmhhcyhmaWVsZC5oaXRuYW1lKSk7XG4gICAgICBpZiAodGhpcy53aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uY2hhcnRUeXBlID09PSAnbGluZUN1cnZlJyB8fCB0aGlzLndpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5jaGFydFR5cGUgPT09ICdsaW5lU3RyYWlnaHQnKSB7XG4gICAgICAgIGZpbHRlcmVkRmllbGRzID0gZmlsdGVyZWRGaWVsZHMuZmlsdGVyKGZpZWxkID0+IGZpZWxkLnR5cGUgPT09ICdEQVRFVElNRScpO1xuICAgICAgfVxuICAgICAgdGhpcy5hZ2dyZWdhdGlvblBpY2tlci5jb2Rlc3lzdGVtID0ge1xuICAgICAgICBlbnRyaWVzOiBmaWx0ZXJlZEZpZWxkcy5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgIGxldCBsYWJlbCA9IGZpbHRlcmVkRmllbGRzLmZpbHRlcihpdGVtID0+IGl0ZW0ubGFiZWwgPT09IGZpZWxkLmxhYmVsKS5sZW5ndGggPiAxXG4gICAgICAgICAgICA/IGZpZWxkLmxhYmVsICsgJyAoJyArIHRoaXMuc3lzdGVtLmdldE9iamVjdFR5cGUoZmllbGQucW5hbWUuc3BsaXQoJy4nKVswXSkubGFiZWwgKyAnKSdcbiAgICAgICAgICAgIDogZmllbGQubGFiZWw7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiBmaWVsZC5xbmFtZSxcbiAgICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogbGFiZWwsXG4gICAgICAgICAgICBkYXRhOiBmaWVsZC5xbmFtZSxcbiAgICAgICAgICAgIHR5cGU6IGZpZWxkLnR5cGVcbiAgICAgICAgICB9O1xuICAgICAgICB9KS5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ2RlZmF1bHRyZXByZXNlbnRhdGlvbicpKSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXRNZXRyaWNDb2Rlc3lzdGVtKCkge1xuICAgIHJldHVybiB0aGlzLmNoYXJ0TWV0cmljUGlja2VyLmNvZGVzeXN0ZW0gPSB7XG4gICAgICBlbnRyaWVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ21pbicsXG4gICAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLm1ldHJpYy5taW4nKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5tZXRyaWMubWluJ1xuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6ICdtaW4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdhdmcnLFxuICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5tZXRyaWMuYXZnJyksXG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMubWV0cmljLmF2ZydcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiAnYXZnJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnbWF4JyxcbiAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMubWV0cmljLm1heCdcbiAgICAgICAgICApLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLm1ldHJpYy5tYXgnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZTogJ21heCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ21lZGlhbicsXG4gICAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLm1ldHJpYy5tZWRpYW4nXG4gICAgICAgICAgKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5tZXRyaWMubWVkaWFuJ1xuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6ICdtZWRpYW4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdzdW0nLFxuICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5tZXRyaWMuc3VtJ1xuICAgICAgICAgICksXG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMubWV0cmljLnN1bSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiAnc3VtJyxcbiAgICAgICAgfVxuICAgICAgXS5tYXAoKHJlcykgPT4gKHtcbiAgICAgICAgaWQ6IHJlcy5pZCxcbiAgICAgICAgbGFiZWw6IHJlcy5sYWJlbCxcbiAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiByZXMuZGVmYXVsdHJlcHJlc2VudGF0aW9uLFxuICAgICAgICBkYXRhOiByZXMudmFsdWVcbiAgICAgIH0pKS5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ2RlZmF1bHRyZXByZXNlbnRhdGlvbicpKSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0Q2hhcnRGaWVsZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jaGFydFR5cGVQaWNrZXIuY29kZXN5c3RlbSA9IHtcbiAgICAgIGVudHJpZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnYmFyJyxcbiAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMudHlwZS5iYXInKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy50eXBlLmJhcidcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiAnYmFyJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAncGllJyxcbiAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMudHlwZS5waWUnKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy50eXBlLnBpZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiAncGllJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnZG9udXQnLFxuICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy50eXBlLmRvbnV0J1xuICAgICAgICAgICksXG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMudHlwZS5kb251dCdcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiAnZG9udXQnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdsaW5lU3RyYWlnaHQnLFxuICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy50eXBlLmxpbmVTdHJhaWdodCdcbiAgICAgICAgICApLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnR5cGUubGluZVN0cmFpZ2h0J1xuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6ICdsaW5lU3RyYWlnaHQnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdsaW5lQ3VydmUnLFxuICAgICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy50eXBlLmxpbmVDdXJ2ZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnR5cGUubGluZUN1cnZlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6ICdsaW5lQ3VydmUnLFxuICAgICAgICB9XG4gICAgICBdLm1hcCgocmVzKSA9PiAoe1xuICAgICAgICBpZDogcmVzLmlkLFxuICAgICAgICBsYWJlbDogcmVzLmxhYmVsLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHJlcy5kZWZhdWx0cmVwcmVzZW50YXRpb24sXG4gICAgICAgIGRhdGE6IHJlcy52YWx1ZVxuICAgICAgfSkpLnNvcnQoVXRpbHMuc29ydFZhbHVlcygnZGVmYXVsdHJlcHJlc2VudGF0aW9uJykpLFxuICAgIH07XG4gIH1cblxuICBnZXRIaXN0b2dyYW1GaWVsZCgpIHtcbiAgICBsZXQgZW50cmllcyA9IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdkYWlseScsXG4gICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMuaGlzdG9ncmFtLmRhaWx5J1xuICAgICAgICApLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMuaGlzdG9ncmFtLmRhaWx5J1xuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogJ2RhaWx5J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICd3ZWVrbHknLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS53ZWVrbHknXG4gICAgICAgICksXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5oaXN0b2dyYW0ud2Vla2x5J1xuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogJ3dlZWtseSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnbW9udGhseScsXG4gICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMuaGlzdG9ncmFtLm1vbnRobHknKSxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLmhpc3RvZ3JhbS5tb250aGx5J1xuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogJ21vbnRobHknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ3llYXJseScsXG4gICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMuaGlzdG9ncmFtLnllYXJseScpLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMuaGlzdG9ncmFtLnllYXJseSdcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6ICd5ZWFybHknXG4gICAgICB9XG4gICAgXTtcbiAgICByZXR1cm4gdGhpcy5oaXN0b2dyYW1UeXBlUGlja2VyLmNvZGVzeXN0ZW0gPSB7XG4gICAgICBlbnRyaWVzOiBlbnRyaWVzLm1hcCgocmVzKSA9PiAoe1xuICAgICAgICBpZDogcmVzLmlkLFxuICAgICAgICBsYWJlbDogcmVzLmxhYmVsLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHJlcy5kZWZhdWx0cmVwcmVzZW50YXRpb24sXG4gICAgICAgIGRhdGE6IHJlcy52YWx1ZVxuICAgICAgfSkpLFxuICAgIH07XG4gIH1cblxuICBnZXRBdHRyaWJ1dE1ldHJpY0NvZGVzeXN0ZW0odHlwZSkge1xuICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlLmdldEZpZWxkRGVmaW5pdGlvbih0eXBlKS5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKS5zdWJzY3JpYmUoZGVmaW5pdGlvbiA9PiB7XG4gICAgICBsZXQgZXhjbHVkZSA9IG5ldyBTZXQoWydmaWxlbmFtZScsICdtaW1ldHlwZScsICdtb2RpZmllcnRpdGxlJywgJ3ZlcnNpb24nLCAnY3JlYXRvcnRpdGxlJywgJ3RpdGxlJywgJ2Rlc2NyaXB0aW9uJ10pO1xuICAgICAgaWYgKHR5cGUgIT09ICdzeXNkb2N1bWVudCcpIHtcbiAgICAgICAgZXhjbHVkZS5hZGQoJ3R5cGUnKTtcbiAgICAgIH1cbiAgICAgIGxldCBmaWx0ZXJlZEZpZWxkcyA9IGRlZmluaXRpb24uZWxlbWVudHMuZmlsdGVyKGZpZWxkID0+ICFleGNsdWRlLmhhcyhmaWVsZC5oaXRuYW1lKSk7XG4gICAgICBmaWx0ZXJlZEZpZWxkcyA9IGZpbHRlcmVkRmllbGRzLmZpbHRlcihmaWVsZCA9PiBmaWVsZC50eXBlID09PSAnTlVNQkVSJyk7XG4gICAgICB0aGlzLmF0dHJpYnV0TWV0cmljUGlja2VyLmNvZGVzeXN0ZW0gPSB7XG4gICAgICAgIGVudHJpZXM6IGZpbHRlcmVkRmllbGRzLm1hcChmaWVsZCA9PiB7XG4gICAgICAgICAgbGV0IGxhYmVsID0gZmlsdGVyZWRGaWVsZHMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5sYWJlbCA9PT0gZmllbGQubGFiZWwpLmxlbmd0aCA+IDFcbiAgICAgICAgICAgID8gZmllbGQubGFiZWwgKyAnICgnICsgdGhpcy5zeXN0ZW0uZ2V0T2JqZWN0VHlwZShmaWVsZC5xbmFtZS5zcGxpdCgnLicpWzBdKS5sYWJlbCArICcpJ1xuICAgICAgICAgICAgOiBmaWVsZC5sYWJlbDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IGZpZWxkLnFuYW1lLFxuICAgICAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiBsYWJlbCxcbiAgICAgICAgICAgIGRhdGE6IGZpZWxkLnFuYW1lLFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZVxuICAgICAgICAgIH07XG4gICAgICAgIH0pLnNvcnQoVXRpbHMuc29ydFZhbHVlcygnZGVmYXVsdHJlcHJlc2VudGF0aW9uJykpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl93aWRnZXRDb25maWc/LnN0b3JlZFF1ZXJ5KSB7XG4gICAgICB0aGlzLmdldFN0b3JlZFF1ZXJ5KHRoaXMuX3dpZGdldENvbmZpZz8uc3RvcmVkUXVlcnkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0dXBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgIHN0b3JlZFF1ZXJ5OiB0aGlzLnN0b3JlZFF1ZXJ5ID8gdGhpcy5zdG9yZWRRdWVyeS5uYW1lIDogJycsXG4gICAgICAgICAgY2hhcnRUeXBlOiB0aGlzLl93aWRnZXRDb25maWcgPyB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uY2hhcnRUeXBlIDogJ3BpZScsXG4gICAgICAgICAgc2l6ZTogdGhpcy5fd2lkZ2V0Q29uZmlnID8gdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LnNpemUgOiAxMCxcbiAgICAgICAgICBhZ2dyZWdhdGlvbjogdGhpcy5fd2lkZ2V0Q29uZmlnID8gdGhpcy5fd2lkZ2V0Q29uZmlnLmZvcm1WYWx1ZS5hZ2dyZWdhdGlvbiA6ICdzeXNvYmplY3QuY3JlYXRlZCcsXG4gICAgICAgICAgaGlzdG9ncmFtVHlwZTogdGhpcy5fd2lkZ2V0Q29uZmlnICYmIHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5oaXN0b2dyYW1UeXBlID8gdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/Lmhpc3RvZ3JhbVR5cGUgOiAnbW9udGhseScsXG4gICAgICAgICAgYXR0cmlidXRNZXRyaWM6IHRoaXMuX3dpZGdldENvbmZpZyAmJiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uYXR0cmlidXRNZXRyaWMgPyB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uYXR0cmlidXRNZXRyaWMgOiAnJyxcbiAgICAgICAgICBtZXRyaWM6IHRoaXMuX3dpZGdldENvbmZpZyAmJiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8ubWV0cmljID8gdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/Lm1ldHJpYyA6ICdzdW0nLFxuICAgICAgICAgIHNvcnRSZXZlcnQ6IHRoaXMuX3dpZGdldENvbmZpZyA/IHRoaXMuX3dpZGdldENvbmZpZy5mb3JtVmFsdWUuc29ydFJldmVydCA6ICcnLFxuICAgICAgICAgIGludGVydmFsOiB0aGlzLl93aWRnZXRDb25maWcgPyB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZS5pbnRlcnZhbCA6IDEwMDAsXG4gICAgICAgICAgc3RhcnRpbmdwb2ludDogdGhpcy5fd2lkZ2V0Q29uZmlnID8gdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWUuc3RhcnRpbmdwb2ludCA6IDAsXG4gICAgICAgICAgbWluX2RvY19jb3VudDogdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/Lm1pbkRvY0NvdW50ID8gdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/Lm1pbkRvY0NvdW50IDogMCxcbiAgICAgICAgICB0aXRsZTogdGhpcy5fd2lkZ2V0Q29uZmlnID8gdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LnRpdGxlIDogJycsXG4gICAgICAgICAgeEF4ZTogdGhpcy5fd2lkZ2V0Q29uZmlnID8gdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LnhBeGUgOiAnJyxcbiAgICAgICAgICB5QXhlOiB0aGlzLl93aWRnZXRDb25maWcgPyB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8ueUF4ZSA6ICcnLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuc3RvcmVkUXVlcnkpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkU2F2ZWRTZWFyY2hOYW1lID0gdGhpcy5zZXR1cEZvcm0uZ2V0KCdzdG9yZWRRdWVyeScpLnZhbHVlO1xuICAgICAgICAgIGlmICh0aGlzLnN0b3JlZFF1ZXJ5LnR5cGVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgdGhpcy5nZXRBZ2dyZWdhdGlvbkZpZWxkKCdzeXNkb2N1bWVudCcpO1xuICAgICAgICAgICAgdGhpcy5nZXRBdHRyaWJ1dE1ldHJpY0NvZGVzeXN0ZW0oJ3N5c2RvY3VtZW50Jyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0QWdncmVnYXRpb25GaWVsZCh0aGlzLnN0b3JlZFF1ZXJ5LnR5cGVzWzBdLnFuYW1lKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0QXR0cmlidXRNZXRyaWNDb2Rlc3lzdGVtKHRoaXMuc3RvcmVkUXVlcnkudHlwZXNbMF0ucW5hbWUpO1xuXG4gICAgICAgICAgfVxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXR1cEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uOiB0aGlzLl93aWRnZXRDb25maWcgPyB0aGlzLl93aWRnZXRDb25maWcuZm9ybVZhbHVlLmFnZ3JlZ2F0aW9uIDogJ3N5c29iamVjdC5jcmVhdGVkJyxcbiAgICAgICAgICAgICAgYXR0cmlidXRNZXRyaWM6IHRoaXMuX3dpZGdldENvbmZpZyAmJiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uYXR0cmlidXRNZXRyaWMgPyB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uYXR0cmlidXRNZXRyaWMgOiAnJyxcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmlzRGF0ZVRpbWVUeXBlID0gdGhpcy53aWRnZXRDb25maWc/LmZvcm1WYWx1ZS5hZ2dyZWdhdGlvbiA9PT0gJ3N5c29iamVjdC5jcmVhdGVkJyB8fCB0aGlzLndpZGdldENvbmZpZz8uYWdncmVnYXRpb25UeXBlID09PSAnREFURVRJTUUnO1xuICAgICAgICAgICAgdGhpcy5pc051bWJlclR5cGUgPSB0aGlzLndpZGdldENvbmZpZz8uYWdncmVnYXRpb25UeXBlID09PSAnTlVNQkVSJztcbiAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9XG4gICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5pc0RhdGVUaW1lVHlwZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzTnVtYmVyVHlwZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl93aWRnZXRDb25maWcuYWdncmVnYXRpb25UeXBlID0gbnVsbDtcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgdGhpcy5zZXR1cEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICBjaGFydFR5cGU6ICdwaWUnLFxuICAgICAgICAgICAgYWdncmVnYXRpb246IHRoaXMuX3dpZGdldENvbmZpZyA/IHRoaXMuX3dpZGdldENvbmZpZy5mb3JtVmFsdWUuYWdncmVnYXRpb24gOiAnc3lzb2JqZWN0LmNyZWF0ZWQnLFxuICAgICAgICAgICAgaGlzdG9ncmFtVHlwZTogJ21vbnRobHknLFxuICAgICAgICAgICAgYXR0cmlidXRNZXRyaWM6IHRoaXMuX3dpZGdldENvbmZpZyAmJiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uYXR0cmlidXRNZXRyaWMgPyB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uYXR0cmlidXRNZXRyaWMgOiAnJyxcbiAgICAgICAgICAgIG1ldHJpYzogdGhpcy5fd2lkZ2V0Q29uZmlnICYmIHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5tZXRyaWMgPyB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8ubWV0cmljIDogJ3N1bScsXG4gICAgICAgICAgICBzb3J0UmV2ZXJ0OiB0aGlzLl93aWRnZXRDb25maWcgPyB0aGlzLl93aWRnZXRDb25maWcuZm9ybVZhbHVlLnNvcnRSZXZlcnQgOiAnJyxcbiAgICAgICAgICAgIHNpemU6IDEwLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IDEwMDAsXG4gICAgICAgICAgICBzdGFydGluZ3BvaW50OiAwLFxuICAgICAgICAgICAgbWluX2RvY19jb3VudDogdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/Lm1pbkRvY0NvdW50ID8gdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/Lm1pbkRvY0NvdW50IDogMCxcbiAgICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICAgIHhBeGU6ICcnLFxuICAgICAgICAgICAgeUF4ZTogJycsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXR1cEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIGNoYXJ0VHlwZTogdGhpcy5fd2lkZ2V0Q29uZmlnID8gdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LmNoYXJ0VHlwZSA6ICdwaWUnLFxuICAgICAgICBhZ2dyZWdhdGlvbjogdGhpcy5fd2lkZ2V0Q29uZmlnID8gdGhpcy5fd2lkZ2V0Q29uZmlnLmZvcm1WYWx1ZS5hZ2dyZWdhdGlvbiA6ICdzeXNvYmplY3QuY3JlYXRlZCcsXG4gICAgICAgIGhpc3RvZ3JhbVR5cGU6IHRoaXMuX3dpZGdldENvbmZpZyAmJiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uaGlzdG9ncmFtVHlwZSA/IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5oaXN0b2dyYW1UeXBlIDogJ21vbnRobHknLFxuICAgICAgICBhdHRyaWJ1dE1ldHJpYzogdGhpcy5fd2lkZ2V0Q29uZmlnICYmIHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5hdHRyaWJ1dE1ldHJpYyA/IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5hdHRyaWJ1dE1ldHJpYyA6ICcnLFxuICAgICAgICBtZXRyaWM6IHRoaXMuX3dpZGdldENvbmZpZyAmJiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8ubWV0cmljID8gdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/Lm1ldHJpYyA6ICdzdW0nLFxuICAgICAgICBzb3J0UmV2ZXJ0OiB0aGlzLl93aWRnZXRDb25maWcgPyB0aGlzLl93aWRnZXRDb25maWcuZm9ybVZhbHVlLnNvcnRSZXZlcnQgOiAnJyxcbiAgICAgICAgc2l6ZTogdGhpcy5fd2lkZ2V0Q29uZmlnID8gdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LnNpemUgOiAxMCxcbiAgICAgICAgaW50ZXJ2YWw6IHRoaXMuX3dpZGdldENvbmZpZyA/IHRoaXMuX3dpZGdldENvbmZpZy5mb3JtVmFsdWUuaW50ZXJ2YWwgOiAxMDAwLFxuICAgICAgICBzdGFydGluZ3BvaW50OiB0aGlzLl93aWRnZXRDb25maWcgPyB0aGlzLl93aWRnZXRDb25maWcuZm9ybVZhbHVlLnN0YXJ0aW5ncG9pbnQgOiAwLFxuICAgICAgICBtaW5fZG9jX2NvdW50OiB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8ubWluRG9jQ291bnQgPyB0aGlzLl93aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8ubWluRG9jQ291bnQgOiAwLFxuICAgICAgICB0aXRsZTogdGhpcy5fd2lkZ2V0Q29uZmlnID8gdGhpcy5fd2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LnRpdGxlIDogJycsXG4gICAgICAgIHhBeGU6IHRoaXMuX3dpZGdldENvbmZpZyA/IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy54QXhlIDogJycsXG4gICAgICAgIHlBeGU6IHRoaXMuX3dpZGdldENvbmZpZyA/IHRoaXMuX3dpZGdldENvbmZpZz8uZm9ybVZhbHVlPy55QXhlIDogJycsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzZXR1cFwiPlxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cInNldHVwRm9ybVwiPlxuICAgIDxlby1mb3JtLWlucHV0IFtyZXF1aXJlZF09XCJ0cnVlXCIgW3NraXBUb2dnbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LmZvcm0ubGFiZWwuY2hhcnRUeXBlRmllbGQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgnY2hhcnRUeXBlJykuaW52YWxpZFwiPlxuICAgICAgPGVvLWNvZGVzeXN0ZW0gZm9ybUNvbnRyb2xOYW1lPVwiY2hhcnRUeXBlXCIgW3BpY2tlclRpdGxlXT1cImNoYXJ0VHlwZVBpY2tlci50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICBbY29kZXN5c3RlbV09XCJjaGFydFR5cGVQaWNrZXIuY29kZXN5c3RlbVwiPjwvZW8tY29kZXN5c3RlbT5cbiAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgQGlmIChzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgnY2hhcnRUeXBlJykuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJlcnItbXNnXCIgdHJhbnNsYXRlPlxuICAgICAgICBlby5mb3JtLnByb3BlcnR5LnJlcXVpcmVkXG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKHN0b3JlZFF1ZXJpZXNQaWNrZXI/LmNvZGVzeXN0ZW0/LmVudHJpZXMpIHtcbiAgICAgIDxlby1mb3JtLWlucHV0IFtyZXF1aXJlZF09XCJ0cnVlXCIgW3NraXBUb2dnbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLnNlYXJjaC50aXRsZS5zdG9yZWRxdWVyaWVzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuc3RvcmVkLnF1ZXJpZXMuZGVzY3JpcHRpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgIFtpbnZhbGlkXT1cInNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCdzdG9yZWRRdWVyeScpLmludmFsaWRcIj5cbiAgICAgICAgPGVvLWNvZGVzeXN0ZW0gZm9ybUNvbnRyb2xOYW1lPVwic3RvcmVkUXVlcnlcIiBbcGlja2VyVGl0bGVdPVwic3RvcmVkUXVlcmllc1BpY2tlci50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtjb2Rlc3lzdGVtXT1cInN0b3JlZFF1ZXJpZXNQaWNrZXIuY29kZXN5c3RlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtlbXB0eU1lc3NhZ2VdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuc3RvcmVkLnF1ZXJpZXMubGlzdC5ub3RBdmFpbGFibGUnXCI+PC9lby1jb2Rlc3lzdGVtPlxuICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgQGlmIChzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgnc3RvcmVkUXVlcnknKS5oYXNFcnJvcigncmVxdWlyZWQnKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyLW1zZ1wiIHRyYW5zbGF0ZT5cbiAgICAgICAgICBlby5mb3JtLnByb3BlcnR5LnJlcXVpcmVkXG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAoYWdncmVnYXRpb25QaWNrZXI/LmNvZGVzeXN0ZW0/LmVudHJpZXMgJiYgdGhpcy5zZXR1cEZvcm0uZ2V0KCdzdG9yZWRRdWVyeScpLnZhbGlkKSB7XG4gICAgICA8ZW8tZm9ybS1pbnB1dCBbcmVxdWlyZWRdPVwidHJ1ZVwiIFtza2lwVG9nZ2xlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LmZvcm0ubGFiZWwuYWdncmVnYXRpb25GaWVsZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgW2ludmFsaWRdPVwic2V0dXBGb3JtLmRpcnR5ICYmIHNldHVwRm9ybS5nZXQoJ2FnZ3JlZ2F0aW9uJykuaW52YWxpZFwiPlxuICAgICAgICA8ZW8tY29kZXN5c3RlbSAjYWdncmVnYXRpb25Db2Rlc3lzdGVtIGZvcm1Db250cm9sTmFtZT1cImFnZ3JlZ2F0aW9uXCIgW3BpY2tlclRpdGxlXT1cImFnZ3JlZ2F0aW9uUGlja2VyLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2NvZGVzeXN0ZW1dPVwiYWdncmVnYXRpb25QaWNrZXIuY29kZXN5c3RlbVwiPjwvZW8tY29kZXN5c3RlbT5cbiAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgIEBpZiAoc2V0dXBGb3JtLmRpcnR5ICYmIHNldHVwRm9ybS5nZXQoJ2FnZ3JlZ2F0aW9uJykuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImVyci1tc2dcIiB0cmFuc2xhdGU+XG4gICAgICAgICAgZW8uZm9ybS5wcm9wZXJ0eS5yZXF1aXJlZFxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxlby1mb3JtLWlucHV0IFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtza2lwVG9nZ2xlXT1cInRydWVcIiBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuZm9ybS5wYXJ0aWFsVmFsdWUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtpbnZhbGlkXT1cInNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCdzaXplJykuaW52YWxpZFwiPlxuICAgICAgICA8ZW8tbnVtYmVyIFtzY2FsZV09XCIwXCIgZm9ybUNvbnRyb2xOYW1lPVwic2l6ZVwiPjwvZW8tbnVtYmVyPlxuICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgQGlmIChzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgnc2l6ZScpLmludmFsaWQpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImVyci1tc2dcIiB0cmFuc2xhdGU+XG4gICAgICAgICAgQGlmIChzZXR1cEZvcm0uZ2V0KCdzaXplJykuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgICAgIGVvLmZvcm0ucHJvcGVydHkucmVxdWlyZWRcbiAgICAgICAgICB9IEBlbHNlIGlmIChzZXR1cEZvcm0uZ2V0KCdzaXplJykuaGFzRXJyb3IoJ21heCcpIHx8IHNldHVwRm9ybS5nZXQoJ3NpemUnKS5oYXNFcnJvcignbWluJykpIHtcbiAgICAgICAgICAgIGVvLmZvcm0ucHJvcGVydHkuc3RyaW5nLmVycm9yLmNsYXNzaWZpY2F0aW9uLnBhcnRpYWxWYWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGlmIChpc0RhdGVUaW1lVHlwZSkge1xuICAgICAgPGVvLWZvcm0taW5wdXQgW3NraXBUb2dnbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuZm9ybS5sYWJlbC5oaXN0b2dyYW0nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtpbnZhbGlkXT1cInNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCdoaXN0b2dyYW1UeXBlJykuaW52YWxpZFwiPlxuICAgICAgICA8ZW8tY29kZXN5c3RlbSBmb3JtQ29udHJvbE5hbWU9XCJoaXN0b2dyYW1UeXBlXCIgW3BpY2tlclRpdGxlXT1cImhpc3RvZ3JhbVR5cGVQaWNrZXIudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICBbY29kZXN5c3RlbV09XCJoaXN0b2dyYW1UeXBlUGlja2VyLmNvZGVzeXN0ZW1cIj48L2VvLWNvZGVzeXN0ZW0+XG4gICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgfVxuICAgIEBpZiAod2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LmFnZ3JlZ2F0aW9uKSB7XG4gICAgICBAaWYgKHdpZGdldENvbmZpZy5mb3JtVmFsdWUuY2hhcnRUeXBlID09PSAnYmFyJykge1xuICAgICAgICA8ZW8tZm9ybS1pbnB1dCBjbGFzcz1cImxhYmVsIGNoZWNrYm94XCIgW2xhYmVsXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LmZvcm0ubGFiZWwuc29ydFJldmVydCd8dHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW3NraXBUb2dnbGVdPVwidHJ1ZVwiPlxuICAgICAgICAgIDxlby1jaGVja2JveCBmb3JtQ29udHJvbE5hbWU9XCJzb3J0UmV2ZXJ0XCIgW3RyaXN0YXRlXT1cImZhbHNlXCI+PC9lby1jaGVja2JveD5cbiAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgfVxuICAgICAgQGlmICh3aWRnZXRDb25maWcuZm9ybVZhbHVlLmNoYXJ0VHlwZSA9PT0gJ2JhcicgfHwgd2lkZ2V0Q29uZmlnLmZvcm1WYWx1ZS5jaGFydFR5cGUgPT09ICdwaWUnIHx8IHdpZGdldENvbmZpZy5mb3JtVmFsdWUuY2hhcnRUeXBlID09PSAncmluZycpIHtcbiAgICAgICAgPGVvLWZvcm0taW5wdXQgY2xhc3M9XCJ0aHJlc2hvbGQtc3VjY2Vzc1wiIFtza2lwVG9nZ2xlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuZm9ybS5sYWJlbC5taW5Eb2NDb3VudCcgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICA8ZW8tbnVtYmVyIFtzY2FsZV09XCIwXCIgZm9ybUNvbnRyb2xOYW1lPVwibWluRG9jQ291bnRcIj5cbiAgICAgICAgICA8L2VvLW51bWJlcj5cbiAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAoaXNOdW1iZXJUeXBlKSB7XG4gICAgICA8ZW8tZm9ybS1pbnB1dCBbc2tpcFRvZ2dsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInZW8ud29ya3NwYWNlLndpZGdldC5jaGFydHMuaW50ZXJ2YWwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtpbnZhbGlkXT1cInNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCdpbnRlcnZhbCcpLmludmFsaWRcIj5cbiAgICAgICAgPGVvLW51bWJlciBbc2NhbGVdPVwiMFwiIGZvcm1Db250cm9sTmFtZT1cImludGVydmFsXCI+PC9lby1udW1iZXI+XG4gICAgICA8L2VvLWZvcm0taW5wdXQ+XG5cbiAgICAgIDxlby1mb3JtLWlucHV0IFtza2lwVG9nZ2xlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LmNoYXJ0cy5zdGFydGluZ3BvaW50JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgnc3RhcnRpbmdwb2ludCcpLmludmFsaWRcIj5cbiAgICAgICAgPGVvLW51bWJlciBbc2NhbGVdPVwiMFwiIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0aW5ncG9pbnRcIj48L2VvLW51bWJlcj5cbiAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICB9XG4gICAgQGlmICh3aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uY2hhcnRUeXBlICE9PSAnbGluZVN0cmFpZ2h0JyAmJiB3aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uY2hhcnRUeXBlICE9PSAnbGluZUN1cnZlJyAmJlxuICAgIGF0dHJpYnV0TWV0cmljUGlja2VyPy5jb2Rlc3lzdGVtPy5lbnRyaWVzICYmIHRoaXMuc2V0dXBGb3JtLmdldCgnc3RvcmVkUXVlcnknKS52YWxpZCAmJiAhaXNOdW1iZXJUeXBlICYmICFpc0RhdGVUaW1lVHlwZSkge1xuICAgICAgPGVvLWZvcm0taW5wdXQgW3NraXBUb2dnbGVdPVwidHJ1ZVwiIFtsYWJlbF09XCInZW8ud29ya3NwYWNlLndpZGdldC5mb3JtLmxhYmVsLmF0dHJpYnV0TWV0cmljJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICA8ZW8tY29kZXN5c3RlbSBmb3JtQ29udHJvbE5hbWU9XCJhdHRyaWJ1dE1ldHJpY1wiIFtwaWNrZXJUaXRsZV09XCJhdHRyaWJ1dE1ldHJpY1BpY2tlci50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtjb2Rlc3lzdGVtXT1cImF0dHJpYnV0TWV0cmljUGlja2VyLmNvZGVzeXN0ZW1cIj48L2VvLWNvZGVzeXN0ZW0+XG4gICAgICA8L2VvLWZvcm0taW5wdXQ+XG5cbiAgICAgIEBpZiAod2lkZ2V0Q29uZmlnPy5mb3JtVmFsdWU/LmF0dHJpYnV0TWV0cmljKSB7XG4gICAgICAgIDxlby1mb3JtLWlucHV0IFtza2lwVG9nZ2xlXT1cInRydWVcIiBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuZm9ybS5sYWJlbC5jaGFydE1ldHJpYycgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICA8ZW8tY29kZXN5c3RlbSBmb3JtQ29udHJvbE5hbWU9XCJtZXRyaWNcIiBbcGlja2VyVGl0bGVdPVwiY2hhcnRNZXRyaWNQaWNrZXIudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2Rlc3lzdGVtXT1cImNoYXJ0TWV0cmljUGlja2VyLmNvZGVzeXN0ZW1cIj48L2VvLWNvZGVzeXN0ZW0+XG4gICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgKHdpZGdldENvbmZpZz8uZm9ybVZhbHVlPy5jaGFydFR5cGUpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0eVBpY2tlclwiPlxuICAgICAgICA8ZW8tZm9ybS1pbnB1dCB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnRpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtza2lwVG9nZ2xlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgndGl0bGUnKS5pbnZhbGlkXCI+XG4gICAgICAgICAgPGVvLXN0cmluZyBhdXRvY29tcGxldGU9XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIj48L2VvLXN0cmluZz5cbiAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgICBAaWYgKHNldHVwRm9ybS5kaXJ0eSAmJiBzZXR1cEZvcm0uZ2V0KCd0aXRsZScpLmludmFsaWQpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyLW1zZ1wiIFt0cmFuc2xhdGVQYXJhbXNdPVwie21heGxlbmd0aDogNTB9XCIgdHJhbnNsYXRlPmVvLmZvcm0ucHJvcGVydHkubWF4bGVuZ3RoPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICh3aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uY2hhcnRUeXBlICE9PSAncGllJyAmJiB3aWRnZXRDb25maWc/LmZvcm1WYWx1ZT8uY2hhcnRUeXBlICE9PSAnZG9udXQnKSB7XG4gICAgICAgICAgPGVvLWZvcm0taW5wdXQgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnhBeGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbc2tpcFRvZ2dsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgneEF4ZScpLmludmFsaWRcIj5cbiAgICAgICAgICAgIDxlby1zdHJpbmcgYXV0b2NvbXBsZXRlPVwidHJ1ZVwiIGZvcm1Db250cm9sTmFtZT1cInhBeGVcIj48L2VvLXN0cmluZz5cbiAgICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICAgICAgQGlmIChzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgneEF4ZScpLmludmFsaWQpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlcnItbXNnXCIgW3RyYW5zbGF0ZVBhcmFtc109XCJ7bWF4bGVuZ3RoOiA1MH1cIiB0cmFuc2xhdGU+ZW8uZm9ybS5wcm9wZXJ0eS5tYXhsZW5ndGg8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGVvLWZvcm0taW5wdXQgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2VvLndvcmtzcGFjZS53aWRnZXQuY2hhcnRzLnlBeGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbc2tpcFRvZ2dsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgneUF4ZScpLmludmFsaWRcIj5cbiAgICAgICAgICAgIDxlby1zdHJpbmcgYXV0b2NvbXBsZXRlPVwidHJ1ZVwiIGZvcm1Db250cm9sTmFtZT1cInlBeGVcIj48L2VvLXN0cmluZz5cbiAgICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICAgICAgQGlmIChzZXR1cEZvcm0uZGlydHkgJiYgc2V0dXBGb3JtLmdldCgneUF4ZScpLmludmFsaWQpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlcnItbXNnXCIgW3RyYW5zbGF0ZVBhcmFtc109XCJ7bWF4bGVuZ3RoOiA1MH1cIiB0cmFuc2xhdGU+ZW8uZm9ybS5wcm9wZXJ0eS5tYXhsZW5ndGg8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9mb3JtPlxuPC9kaXY+XG5cbkBpZiAoc2V0dXBGb3JtLnZhbGlkKSB7XG4gIDxkaXYgY2xhc3M9XCJwcmV2aWV3XCI+XG4gICAgPGVvLWNoYXJ0cy13aWRnZXQgW3dpZGdldENvbmZpZ109XCJ3aWRnZXRDb25maWdcIiBbZWRpdE1vZGVdPVwidHJ1ZVwiPjwvZW8tY2hhcnRzLXdpZGdldD5cbiAgPC9kaXY+XG59IEBlbHNlIHtcbiAgPGRpdiBjbGFzcz1cImVtcHR5XCI+XG4gICAgPGVvLWVycm9yLW1lc3NhZ2VcbiAgICAgIFtlbXB0eVN0YXRlXT1cIntpY29uOiAnaWNfc2F2ZWRfc2VhcmNoLnN2ZycsIHRleHQ6ICdlby53b3Jrc3BhY2Uud2lkZ2V0LmNvbmZpZ3VyYXRpb24ubm90T2snfVwiPjwvZW8tZXJyb3ItbWVzc2FnZT5cbiAgPC9kaXY+XG59XG4iXX0=