@kirbydesign/designsystem 5.0.2 → 5.0.6

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 (89) hide show
  1. package/bundles/kirbydesign-designsystem-testing-base.umd.js +86 -37
  2. package/bundles/kirbydesign-designsystem-testing-base.umd.js.map +1 -1
  3. package/bundles/kirbydesign-designsystem-testing-base.umd.min.js +1 -1
  4. package/bundles/kirbydesign-designsystem-testing-base.umd.min.js.map +1 -1
  5. package/bundles/kirbydesign-designsystem.umd.js +586 -46
  6. package/bundles/kirbydesign-designsystem.umd.js.map +1 -1
  7. package/bundles/kirbydesign-designsystem.umd.min.js +1 -1
  8. package/bundles/kirbydesign-designsystem.umd.min.js.map +1 -1
  9. package/esm2015/kirbydesign-designsystem.js +15 -13
  10. package/esm2015/kirbydesign-designsystem.metadata.json +1 -1
  11. package/esm2015/lib/components/chart/chart-js/chart-js.service.js +137 -19
  12. package/esm2015/lib/components/chart/chart-js/chart-js.service.metadata.json +1 -1
  13. package/esm2015/lib/components/chart/chart-js/chartjs-plugin-marker/chartjs-plugin-marker.js +203 -0
  14. package/esm2015/lib/components/chart/chart-js/chartjs-plugin-marker/chartjs-plugin-marker.metadata.json +1 -0
  15. package/esm2015/lib/components/chart/chart-js/configured-chart-js.js +5 -3
  16. package/esm2015/lib/components/chart/chart-js/configured-chart-js.metadata.json +1 -1
  17. package/esm2015/lib/components/chart/chart.component.js +3 -1
  18. package/esm2015/lib/components/chart/chart.component.metadata.json +1 -1
  19. package/esm2015/lib/components/chart/chart.types.js +1 -1
  20. package/esm2015/lib/components/chart/chart.types.metadata.json +1 -1
  21. package/esm2015/lib/components/chart/configs/global-defaults.config.js +7 -1
  22. package/esm2015/lib/components/chart/configs/type.config.js +118 -1
  23. package/esm2015/lib/components/chart/configs/type.config.metadata.json +1 -1
  24. package/esm2015/lib/components/index.js +4 -1
  25. package/esm2015/lib/components/index.metadata.json +1 -1
  26. package/esm2015/lib/components/item/label/label.component.js +1 -1
  27. package/esm2015/lib/components/item/label/label.component.metadata.json +1 -1
  28. package/esm2015/lib/components/item-sliding/index.js +3 -0
  29. package/esm2015/lib/components/item-sliding/index.metadata.json +1 -0
  30. package/esm2015/lib/components/item-sliding/item-sliding.component.js +27 -0
  31. package/esm2015/lib/components/item-sliding/item-sliding.component.metadata.json +1 -0
  32. package/esm2015/lib/components/item-sliding/item-sliding.types.js +2 -0
  33. package/esm2015/lib/components/item-sliding/item-sliding.types.metadata.json +1 -0
  34. package/esm2015/lib/components/list/list-experimental/list-experimental.component.js +13 -2
  35. package/esm2015/lib/components/list/list-experimental/list-experimental.component.metadata.json +1 -1
  36. package/esm2015/lib/components/list/list-item/list-item.component.js +1 -1
  37. package/esm2015/lib/components/list/list-item/list-item.component.metadata.json +1 -1
  38. package/esm2015/lib/components/list/list-swipe-action.type.js +1 -1
  39. package/esm2015/lib/components/list/list-swipe-action.type.metadata.json +1 -1
  40. package/esm2015/lib/components/list/list.component.js +1 -1
  41. package/esm2015/lib/components/list/list.component.metadata.json +1 -1
  42. package/esm2015/lib/components/section-header/section-header.component.js +11 -0
  43. package/esm2015/lib/components/section-header/section-header.component.metadata.json +1 -0
  44. package/esm2015/lib/helpers/deep-copy.js +11 -2
  45. package/esm2015/lib/helpers/deep-copy.metadata.json +1 -1
  46. package/esm2015/lib/helpers/element-has-ancestor.js +24 -0
  47. package/esm2015/lib/helpers/element-has-ancestor.metadata.json +1 -0
  48. package/esm2015/lib/helpers/index.js +2 -1
  49. package/esm2015/lib/helpers/index.metadata.json +1 -1
  50. package/esm2015/lib/kirby.module.js +5 -1
  51. package/esm2015/lib/kirby.module.metadata.json +1 -1
  52. package/esm2015/testing-base/kirbydesign-designsystem-testing-base.js +32 -30
  53. package/esm2015/testing-base/kirbydesign-designsystem-testing-base.metadata.json +1 -1
  54. package/esm2015/testing-base/lib/components/mock.chart.component.js +2 -1
  55. package/esm2015/testing-base/lib/components/mock.chart.component.metadata.json +1 -1
  56. package/esm2015/testing-base/lib/components/mock.item-sliding.component.js +23 -0
  57. package/esm2015/testing-base/lib/components/mock.item-sliding.component.metadata.json +1 -0
  58. package/esm2015/testing-base/lib/components/mock.section-header.component.js +19 -0
  59. package/esm2015/testing-base/lib/components/mock.section-header.component.metadata.json +1 -0
  60. package/esm2015/testing-base/lib/mock-components.js +5 -1
  61. package/esm2015/testing-base/lib/mock-components.metadata.json +1 -1
  62. package/fesm2015/kirbydesign-designsystem-testing-base.js +43 -2
  63. package/fesm2015/kirbydesign-designsystem-testing-base.js.map +1 -1
  64. package/fesm2015/kirbydesign-designsystem.js +551 -29
  65. package/fesm2015/kirbydesign-designsystem.js.map +1 -1
  66. package/kirbydesign-designsystem.d.ts +14 -12
  67. package/kirbydesign-designsystem.metadata.json +1 -1
  68. package/lib/components/chart/chart-js/chart-js.service.d.ts +17 -1
  69. package/lib/components/chart/chart-js/chartjs-plugin-marker/chartjs-plugin-marker.d.ts +14 -0
  70. package/lib/components/chart/chart.component.d.ts +2 -1
  71. package/lib/components/chart/chart.types.d.ts +9 -1
  72. package/lib/components/chart/configs/global-defaults.config.d.ts +6 -0
  73. package/lib/components/index.d.ts +3 -0
  74. package/lib/components/item-sliding/index.d.ts +2 -0
  75. package/lib/components/item-sliding/item-sliding.component.d.ts +7 -0
  76. package/lib/components/item-sliding/item-sliding.types.d.ts +10 -0
  77. package/lib/components/list/list-experimental/list-experimental.component.d.ts +3 -0
  78. package/lib/components/list/list-swipe-action.type.d.ts +8 -9
  79. package/lib/components/section-header/section-header.component.d.ts +2 -0
  80. package/lib/helpers/deep-copy.d.ts +9 -1
  81. package/lib/helpers/element-has-ancestor.d.ts +1 -0
  82. package/lib/helpers/index.d.ts +1 -0
  83. package/package.json +6 -3
  84. package/scss/_global-styles.scss +4 -0
  85. package/testing-base/kirbydesign-designsystem-testing-base.d.ts +31 -29
  86. package/testing-base/kirbydesign-designsystem-testing-base.metadata.json +1 -1
  87. package/testing-base/lib/components/mock.chart.component.d.ts +2 -1
  88. package/testing-base/lib/components/mock.item-sliding.component.d.ts +5 -0
  89. package/testing-base/lib/components/mock.section-header.component.d.ts +2 -0
@@ -1,17 +1,27 @@
1
1
  import { Injectable } from '@angular/core';
2
+ import { toDate } from 'date-fns';
2
3
  import { mergeDeepAll } from '../../../helpers/merge-deep';
3
- import { isNumberArray } from '../chart.types';
4
+ import { isNumberArray, } from '../chart.types';
4
5
  import { ChartConfigService } from '../configs/chart-config.service';
5
6
  import { Chart } from './configured-chart-js';
7
+ const CHART_LOCALE_DEFAULT = 'en-US';
6
8
  export class ChartJSService {
7
9
  constructor(chartConfigService) {
8
10
  this.chartConfigService = chartConfigService;
9
11
  }
10
12
  renderChart(args) {
11
- const { targetElement, type, data, dataLabels, customOptions, annotations, highlightedElements, } = args;
12
- const datasets = this.createDatasets(data, highlightedElements);
13
- const options = this.createOptionsObject({ type, customOptions, annotations });
14
- const config = this.createConfigurationObject(type, datasets, options, dataLabels);
13
+ const { targetElement, type, data, dataLabels, customOptions, annotations, dataLabelOptions, highlightedElements, } = args;
14
+ this.dataLabelOptions = dataLabelOptions || null;
15
+ this.highlightedElements = highlightedElements || null;
16
+ this.chartType = type;
17
+ this.locale = (dataLabelOptions === null || dataLabelOptions === void 0 ? void 0 : dataLabelOptions.locale) || CHART_LOCALE_DEFAULT;
18
+ const datasets = this.createDatasets(data);
19
+ const options = this.createOptionsObject({
20
+ customOptions,
21
+ annotations,
22
+ dataLabelOptions,
23
+ });
24
+ let config = this.createConfigurationObject(type, datasets, options, dataLabels);
15
25
  this.initializeNewChart(targetElement.nativeElement, config);
16
26
  }
17
27
  redrawChart() {
@@ -34,15 +44,20 @@ export class ChartJSService {
34
44
  this.nonDestructivelyUpdateType(type, customOptions);
35
45
  }
36
46
  }
47
+ setDataLabelOptions(dataLabelOptions) {
48
+ this.dataLabelOptions = dataLabelOptions;
49
+ }
37
50
  updateOptions(customOptions, type) {
38
51
  const annotations = this.getExistingChartAnnotations();
39
- this.chart.options = this.createOptionsObject({ type, customOptions, annotations });
52
+ this.chartType = type;
53
+ this.chart.options = this.createOptionsObject({ customOptions, annotations });
40
54
  }
41
55
  updateAnnotations(annotations) {
42
56
  const annotationsWithDefaults = this.applyDefaultsToAnnotations(annotations);
43
57
  this.chart.options.plugins.annotation.annotations = annotationsWithDefaults;
44
58
  }
45
59
  updateHighlightedElements(highlightedElements) {
60
+ this.highlightedElements = highlightedElements;
46
61
  const oldDatasets = this.chart.data.datasets;
47
62
  // Clear old datasets of highlighted elements
48
63
  oldDatasets.map((dataset) => {
@@ -51,7 +66,7 @@ export class ChartJSService {
51
66
  delete dataset.kirbyOptions.highlightedElements;
52
67
  }
53
68
  });
54
- this.chart.data.datasets = this.createDatasets(oldDatasets, highlightedElements);
69
+ this.chart.data.datasets = this.createDatasets(oldDatasets);
55
70
  }
56
71
  getExistingChartAnnotations() {
57
72
  var _a, _b;
@@ -70,7 +85,8 @@ export class ChartJSService {
70
85
  const datasets = this.chart.data.datasets;
71
86
  const dataLabels = this.chart.data.labels;
72
87
  const annotations = this.getExistingChartAnnotations();
73
- const options = this.createOptionsObject({ type, customOptions, annotations });
88
+ this.chartType = type;
89
+ const options = this.createOptionsObject({ customOptions, annotations });
74
90
  const config = this.createConfigurationObject(type, datasets, options, dataLabels);
75
91
  const canvasElement = this.chart.canvas;
76
92
  this.chart.destroy();
@@ -78,8 +94,8 @@ export class ChartJSService {
78
94
  }
79
95
  nonDestructivelyUpdateType(chartType, customOptions) {
80
96
  const annotations = this.getExistingChartAnnotations();
97
+ this.chartType = chartType;
81
98
  const options = this.createOptionsObject({
82
- type: chartType,
83
99
  customOptions,
84
100
  annotations,
85
101
  });
@@ -119,21 +135,73 @@ export class ChartJSService {
119
135
  });
120
136
  return options;
121
137
  }
138
+ createStockOptionsObject(dataLabelOptions) {
139
+ return {
140
+ locale: this.locale,
141
+ plugins: {
142
+ tooltip: {
143
+ callbacks: {
144
+ title: (tooltipItems) => {
145
+ var _a, _b;
146
+ const date = toDate((_b = (_a = tooltipItems[0]) === null || _a === void 0 ? void 0 : _a.raw) === null || _b === void 0 ? void 0 : _b.x);
147
+ if (date.valueOf()) {
148
+ return date.toLocaleTimeString(this.locale, {
149
+ day: 'numeric',
150
+ month: 'short',
151
+ hour: '2-digit',
152
+ minute: '2-digit',
153
+ });
154
+ }
155
+ },
156
+ label: (context) => {
157
+ // It's not possible to add spacing between color legend and text so we
158
+ // prefix with a space.
159
+ return ' ' + context.formattedValue + (dataLabelOptions.valueSuffix || '');
160
+ },
161
+ },
162
+ },
163
+ },
164
+ scales: {
165
+ y: {
166
+ ticks: {
167
+ callback: (value) => {
168
+ return value + (dataLabelOptions.valueSuffix || '');
169
+ },
170
+ },
171
+ },
172
+ },
173
+ };
174
+ }
122
175
  createOptionsObject(args) {
123
- const { type, customOptions, annotations } = args;
124
- const typeConfig = this.chartConfigService.getTypeConfig(type);
176
+ const { customOptions, annotations, dataLabelOptions: chartDataLabelOptions } = args;
177
+ const typeConfig = this.chartConfigService.getTypeConfig(this.chartType);
125
178
  const typeConfigOptions = typeConfig === null || typeConfig === void 0 ? void 0 : typeConfig.options;
126
179
  const annotationPluginOptions = annotations
127
180
  ? this.createAnnotationPluginOptionsObject(annotations)
128
181
  : {};
129
- let options = mergeDeepAll(typeConfigOptions, customOptions, annotationPluginOptions);
182
+ const stockOptions = this.chartType === 'stock' ? this.createStockOptionsObject(chartDataLabelOptions) : {};
183
+ let options = mergeDeepAll(stockOptions, typeConfigOptions, customOptions, annotationPluginOptions);
130
184
  return this.applyInteractionFunctionsExtensions(options);
131
185
  }
186
+ getDefaultStockLabels(datasets, locale) {
187
+ const largestDataset = datasets.reduce((previousDataset, currentDataset) => previousDataset.data.length > currentDataset.data.length ? previousDataset : currentDataset);
188
+ return largestDataset.data.map((point) => toDate(point.x).toLocaleDateString(locale, {
189
+ month: 'short',
190
+ day: 'numeric',
191
+ }));
192
+ }
132
193
  createConfigurationObject(type, datasets, options, dataLabels) {
133
- /* chartJS requires labels; if none is provided create an empty string array
134
- to make it optional for consumer */
135
- const labels = !dataLabels ? this.createBlankLabels(datasets) : dataLabels;
136
194
  const typeConfig = this.chartConfigService.getTypeConfig(type);
195
+ // chartJS requires labels; if none is provided create an empty string array
196
+ // to make it optional for consumer.
197
+ // However the stock chart, should have autogenerated labels if no
198
+ // custom labels are supplied.
199
+ const isStockType = type === 'stock';
200
+ const labels = !dataLabels
201
+ ? isStockType
202
+ ? this.getDefaultStockLabels(datasets, this.locale)
203
+ : this.createBlankLabels(datasets)
204
+ : dataLabels;
137
205
  return mergeDeepAll(typeConfig, {
138
206
  data: {
139
207
  labels,
@@ -156,12 +224,62 @@ export class ChartJSService {
156
224
  }
157
225
  });
158
226
  }
159
- createDatasets(data, highlightedElements) {
227
+ createDatasets(data) {
228
+ var _a, _b, _c;
229
+ // We need to modify the datasets in order to add datalabels.
230
+ if (((_a = this.dataLabelOptions) === null || _a === void 0 ? void 0 : _a.showCurrent) || ((_b = this.dataLabelOptions) === null || _b === void 0 ? void 0 : _b.showMax) || ((_c = this.dataLabelOptions) === null || _c === void 0 ? void 0 : _c.showMin)) {
231
+ data = this.addDataLabelsData(data);
232
+ }
160
233
  let datasets = isNumberArray(data) ? [{ data }] : data;
161
- if (highlightedElements)
162
- this.addHighlightedElementsToDatasets(highlightedElements, datasets);
234
+ if (this.highlightedElements)
235
+ this.addHighlightedElementsToDatasets(this.highlightedElements, datasets);
163
236
  return datasets;
164
237
  }
238
+ /**
239
+ * Decorate ChartDataset with properties to allow for datalabels.
240
+ *
241
+ * @param data
242
+ * @returns ChartDataset[]
243
+ */
244
+ addDataLabelsData(data) {
245
+ if (isNumberArray(data)) {
246
+ throw Error("Currently it's impossible to add dataLabels to non ScatterDataPoint datasets");
247
+ }
248
+ const decorateDataPoint = (set, axis, direction, position) => {
249
+ const { value, pointer } = this.locateValueIndexInDataset(set, axis, direction);
250
+ set.data[pointer] = Object.assign(Object.assign({}, set.data[pointer]), { datalabel: {
251
+ value: value + (this.dataLabelOptions.valueSuffix || ''),
252
+ position,
253
+ } });
254
+ };
255
+ data.map((set) => {
256
+ if (this.dataLabelOptions.showMin) {
257
+ decorateDataPoint(set, 'y', 'low', 'bottom');
258
+ }
259
+ if (this.dataLabelOptions.showMax) {
260
+ decorateDataPoint(set, 'y', 'high', 'top');
261
+ }
262
+ if (this.dataLabelOptions.showCurrent) {
263
+ decorateDataPoint(set, 'x', 'high', 'right');
264
+ }
265
+ });
266
+ return data;
267
+ }
268
+ locateValueIndexInDataset(dataset, axis, direction) {
269
+ let pointer;
270
+ let value;
271
+ dataset.data.forEach((datapoint, index) => {
272
+ if (direction == 'low' && (!value || datapoint[axis] < value)) {
273
+ value = datapoint['y'];
274
+ pointer = index;
275
+ }
276
+ if (direction == 'high' && (!value || datapoint[axis] > value)) {
277
+ value = datapoint['y'];
278
+ pointer = index;
279
+ }
280
+ });
281
+ return { value, pointer };
282
+ }
165
283
  }
166
284
  ChartJSService.decorators = [
167
285
  { type: Injectable }
@@ -170,4 +288,4 @@ ChartJSService.decorators = [
170
288
  ChartJSService.ctorParameters = () => [
171
289
  { type: ChartConfigService }
172
290
  ];
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtanMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9jaGFydC9jaGFydC1qcy9jaGFydC1qcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBcUQsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFckUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRzlDLE1BQU0sT0FBTyxjQUFjO0lBR3pCLFlBQW9CLGtCQUFzQztRQUF0Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO0lBQUcsQ0FBQztJQUV2RCxXQUFXLENBQUMsSUFRbEI7UUFDQyxNQUFNLEVBQ0osYUFBYSxFQUNiLElBQUksRUFDSixJQUFJLEVBQ0osVUFBVSxFQUNWLGFBQWEsRUFDYixXQUFXLEVBQ1gsbUJBQW1CLEdBQ3BCLEdBQUcsSUFBSSxDQUFDO1FBRVQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUNoRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDL0UsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsYUFBYSxF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RCxPQUFPO1NBQ1IsQ0FBdUIsQ0FBQztJQUMzQixDQUFDO0lBRU8sZ0NBQWdDLENBQ3RDLG1CQUE2QyxFQUM3QyxRQUF3QjtRQUV4QixtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFOztZQUN4RCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLE9BQU87Z0JBQUUsT0FBTztZQUVyQixVQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxZQUFZLDBDQUFFLG1CQUFtQixFQUFFO2dCQUM5QyxPQUFPLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUMxRDtpQkFBTTtnQkFDTCxPQUFPLENBQUMsWUFBWSxtQ0FDZixPQUFPLENBQUMsWUFBWSxLQUN2QixtQkFBbUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUNqQyxDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDTyxjQUFjLENBQ3BCLElBQStCLEVBQy9CLG1CQUE4QztRQUU5QyxJQUFJLFFBQVEsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFdkQsSUFBSSxtQkFBbUI7WUFBRSxJQUFJLENBQUMsZ0NBQWdDLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFOUYsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQzs7O1lBN05GLFVBQVU7Ozs7WUFKRixrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmVFbGVtZW50LCBDaGFydENvbmZpZ3VyYXRpb24sIENoYXJ0T3B0aW9ucyB9IGZyb20gJ2NoYXJ0LmpzJztcbmltcG9ydCB7IEFubm90YXRpb25PcHRpb25zIH0gZnJvbSAnY2hhcnRqcy1wbHVnaW4tYW5ub3RhdGlvbic7XG5cbmltcG9ydCB7IG1lcmdlRGVlcEFsbCB9IGZyb20gJy4uLy4uLy4uL2hlbHBlcnMvbWVyZ2UtZGVlcCc7XG5pbXBvcnQgeyBDaGFydERhdGFzZXQsIENoYXJ0SGlnaGxpZ2h0ZWRFbGVtZW50cywgQ2hhcnRUeXBlLCBpc051bWJlckFycmF5IH0gZnJvbSAnLi4vY2hhcnQudHlwZXMnO1xuaW1wb3J0IHsgQ2hhcnRDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vY29uZmlncy9jaGFydC1jb25maWcuc2VydmljZSc7XG5cbmltcG9ydCB7IENoYXJ0IH0gZnJvbSAnLi9jb25maWd1cmVkLWNoYXJ0LWpzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENoYXJ0SlNTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjaGFydDogQ2hhcnQ7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFydENvbmZpZ1NlcnZpY2U6IENoYXJ0Q29uZmlnU2VydmljZSkge31cblxuICBwdWJsaWMgcmVuZGVyQ2hhcnQoYXJnczoge1xuICAgIHRhcmdldEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xuICAgIHR5cGU6IENoYXJ0VHlwZTtcbiAgICBkYXRhOiBDaGFydERhdGFzZXRbXSB8IG51bWJlcltdO1xuICAgIGRhdGFMYWJlbHM/OiBzdHJpbmdbXSB8IHN0cmluZ1tdW107XG4gICAgY3VzdG9tT3B0aW9ucz86IENoYXJ0T3B0aW9ucztcbiAgICBhbm5vdGF0aW9ucz86IEFubm90YXRpb25PcHRpb25zW107XG4gICAgaGlnaGxpZ2h0ZWRFbGVtZW50cz86IENoYXJ0SGlnaGxpZ2h0ZWRFbGVtZW50cztcbiAgfSk6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIHRhcmdldEVsZW1lbnQsXG4gICAgICB0eXBlLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFMYWJlbHMsXG4gICAgICBjdXN0b21PcHRpb25zLFxuICAgICAgYW5ub3RhdGlvbnMsXG4gICAgICBoaWdobGlnaHRlZEVsZW1lbnRzLFxuICAgIH0gPSBhcmdzO1xuXG4gICAgY29uc3QgZGF0YXNldHMgPSB0aGlzLmNyZWF0ZURhdGFzZXRzKGRhdGEsIGhpZ2hsaWdodGVkRWxlbWVudHMpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmNyZWF0ZU9wdGlvbnNPYmplY3QoeyB0eXBlLCBjdXN0b21PcHRpb25zLCBhbm5vdGF0aW9ucyB9KTtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNyZWF0ZUNvbmZpZ3VyYXRpb25PYmplY3QodHlwZSwgZGF0YXNldHMsIG9wdGlvbnMsIGRhdGFMYWJlbHMpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZU5ld0NoYXJ0KHRhcmdldEVsZW1lbnQubmF0aXZlRWxlbWVudCwgY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyByZWRyYXdDaGFydCgpIHtcbiAgICB0aGlzLmNoYXJ0LnVwZGF0ZSgpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZURhdGEoZGF0YTogQ2hhcnREYXRhc2V0W10gfCBudW1iZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGFzZXRzID0gdGhpcy5jcmVhdGVEYXRhc2V0cyhkYXRhKTtcbiAgICB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMgPSBkYXRhc2V0cztcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVEYXRhTGFiZWxzKGRhdGFMYWJlbHM6IHN0cmluZ1tdIHwgc3RyaW5nW11bXSkge1xuICAgIHRoaXMuY2hhcnQuZGF0YS5sYWJlbHMgPSBkYXRhTGFiZWxzO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVR5cGUodHlwZTogQ2hhcnRUeXBlLCBjdXN0b21PcHRpb25zPzogQ2hhcnRPcHRpb25zKSB7XG4gICAgaWYgKHR5cGUgPT09ICdiYXInIHx8IHR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgICAvKiBpbmRleEF4aXMgZG9lcyBub3QgdXBkYXRlIHByZWRpY3RhYmx5OyB1cGRhdGUgYnkgcmVwbGFjaW5nIFxuICAgICAgICAgdGhlIGNoYXJ0IGVudGlyZWx5IGluc3RlYWQgKi9cbiAgICAgIHRoaXMuZGVzdHJ1Y3RpdmVseVVwZGF0ZVR5cGUodHlwZSwgY3VzdG9tT3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubm9uRGVzdHJ1Y3RpdmVseVVwZGF0ZVR5cGUodHlwZSwgY3VzdG9tT3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZU9wdGlvbnMoY3VzdG9tT3B0aW9uczogQ2hhcnRPcHRpb25zLCB0eXBlOiBDaGFydFR5cGUpIHtcbiAgICBjb25zdCBhbm5vdGF0aW9ucyA9IHRoaXMuZ2V0RXhpc3RpbmdDaGFydEFubm90YXRpb25zKCk7XG4gICAgdGhpcy5jaGFydC5vcHRpb25zID0gdGhpcy5jcmVhdGVPcHRpb25zT2JqZWN0KHsgdHlwZSwgY3VzdG9tT3B0aW9ucywgYW5ub3RhdGlvbnMgfSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlQW5ub3RhdGlvbnMoYW5ub3RhdGlvbnM6IEFubm90YXRpb25PcHRpb25zW10pIHtcbiAgICBjb25zdCBhbm5vdGF0aW9uc1dpdGhEZWZhdWx0cyA9IHRoaXMuYXBwbHlEZWZhdWx0c1RvQW5ub3RhdGlvbnMoYW5ub3RhdGlvbnMpO1xuICAgIHRoaXMuY2hhcnQub3B0aW9ucy5wbHVnaW5zLmFubm90YXRpb24uYW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uc1dpdGhEZWZhdWx0cztcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVIaWdobGlnaHRlZEVsZW1lbnRzKGhpZ2hsaWdodGVkRWxlbWVudHM/OiBDaGFydEhpZ2hsaWdodGVkRWxlbWVudHMpIHtcbiAgICBjb25zdCBvbGREYXRhc2V0cyA9IHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0cyBhcyBDaGFydERhdGFzZXRbXTtcblxuICAgIC8vIENsZWFyIG9sZCBkYXRhc2V0cyBvZiBoaWdobGlnaHRlZCBlbGVtZW50c1xuICAgIG9sZERhdGFzZXRzLm1hcCgoZGF0YXNldCkgPT4ge1xuICAgICAgaWYgKGRhdGFzZXQ/LmtpcmJ5T3B0aW9ucz8uaGlnaGxpZ2h0ZWRFbGVtZW50cykge1xuICAgICAgICBkZWxldGUgZGF0YXNldC5raXJieU9wdGlvbnMuaGlnaGxpZ2h0ZWRFbGVtZW50cztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0cyA9IHRoaXMuY3JlYXRlRGF0YXNldHMob2xkRGF0YXNldHMsIGhpZ2hsaWdodGVkRWxlbWVudHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFeGlzdGluZ0NoYXJ0QW5ub3RhdGlvbnMoKTogQW5ub3RhdGlvbk9wdGlvbnNbXSB7XG4gICAgY29uc3QgYW5ub3RhdGlvbnMgPSB0aGlzLmNoYXJ0Lm9wdGlvbnMucGx1Z2lucz8uYW5ub3RhdGlvbj8uYW5ub3RhdGlvbnM7XG4gICAgLyogSW4gYnJvd3NlciBjaGFydC5qcyBtaWdodCByZXR1cm4gYW5ub3RhdGlvbnMgYXMgYSBQcm94eSBvYmplY3Q7IGZvcmNlIGl0IHRvIGJlIGFuIGFycmF5LlxuICAgICAgIEVhY2ggYW5ub3RhdGlvbk9wdGlvbiBpbiB0aGUgcmVzdWx0aW5nIGFycmF5ICB3aWxsIGFsc28gYmUgYSBQcm94eSBvYmplY3QuIFxuICAgICAgIEJ1dCBpbnRlcm5hbGx5IGNoYXJ0LmpzIHdpbGwganVzdCB3b3JrIHdpdGggdGhlbSBhcyBub3JtYWwgdmFsdWVzICovXG4gICAgaWYgKGFubm90YXRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhbm5vdGF0aW9ucykubWFwKChrZXkpID0+IGFubm90YXRpb25zW2tleV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cnVjdGl2ZWx5VXBkYXRlVHlwZSh0eXBlOiBDaGFydFR5cGUsIGN1c3RvbU9wdGlvbnM/OiBDaGFydE9wdGlvbnMpIHtcbiAgICBjb25zdCBkYXRhc2V0cyA9IHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0cyBhcyBDaGFydERhdGFzZXRbXTtcbiAgICBjb25zdCBkYXRhTGFiZWxzID0gdGhpcy5jaGFydC5kYXRhLmxhYmVscztcbiAgICBjb25zdCBhbm5vdGF0aW9ucyA9IHRoaXMuZ2V0RXhpc3RpbmdDaGFydEFubm90YXRpb25zKCk7XG5cbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5jcmVhdGVPcHRpb25zT2JqZWN0KHsgdHlwZSwgY3VzdG9tT3B0aW9ucywgYW5ub3RhdGlvbnMgfSk7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jcmVhdGVDb25maWd1cmF0aW9uT2JqZWN0KHR5cGUsIGRhdGFzZXRzLCBvcHRpb25zLCBkYXRhTGFiZWxzKTtcbiAgICBjb25zdCBjYW52YXNFbGVtZW50ID0gdGhpcy5jaGFydC5jYW52YXM7XG5cbiAgICB0aGlzLmNoYXJ0LmRlc3Ryb3koKTtcbiAgICB0aGlzLmluaXRpYWxpemVOZXdDaGFydChjYW52YXNFbGVtZW50LCBjb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBub25EZXN0cnVjdGl2ZWx5VXBkYXRlVHlwZShjaGFydFR5cGU6IENoYXJ0VHlwZSwgY3VzdG9tT3B0aW9ucz86IENoYXJ0T3B0aW9ucykge1xuICAgIGNvbnN0IGFubm90YXRpb25zID0gdGhpcy5nZXRFeGlzdGluZ0NoYXJ0QW5ub3RhdGlvbnMoKTtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5jcmVhdGVPcHRpb25zT2JqZWN0KHtcbiAgICAgIHR5cGU6IGNoYXJ0VHlwZSxcbiAgICAgIGN1c3RvbU9wdGlvbnMsXG4gICAgICBhbm5vdGF0aW9ucyxcbiAgICB9KTtcblxuICAgIHRoaXMuY2hhcnQub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5jaGFydC5jb25maWcudHlwZSA9IHRoaXMuY2hhcnRDb25maWdTZXJ2aWNlLmNoYXJ0VHlwZVRvQ2hhcnRKU1R5cGUoY2hhcnRUeXBlKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZU5ld0NoYXJ0KGNhbnZhc0VsZW1lbnQ6IEhUTUxDYW52YXNFbGVtZW50LCBjb25maWc6IENoYXJ0Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuY2hhcnQgPSBuZXcgQ2hhcnQoY2FudmFzRWxlbWVudCwgY29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQmxhbmtMYWJlbHMoZGF0YXNldHM6IENoYXJ0RGF0YXNldFtdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGxhcmdlc3REYXRhc2V0ID0gZGF0YXNldHMucmVkdWNlKChwcmV2aW91c0RhdGFzZXQsIGN1cnJlbnREYXRhc2V0KSA9PlxuICAgICAgcHJldmlvdXNEYXRhc2V0LmRhdGEubGVuZ3RoID4gY3VycmVudERhdGFzZXQuZGF0YS5sZW5ndGggPyBwcmV2aW91c0RhdGFzZXQgOiBjdXJyZW50RGF0YXNldFxuICAgICk7XG4gICAgcmV0dXJuIEFycmF5KGxhcmdlc3REYXRhc2V0LmRhdGEubGVuZ3RoKS5maWxsKCcnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlEZWZhdWx0c1RvQW5ub3RhdGlvbnMoYW5ub3RhdGlvbnM6IEFubm90YXRpb25PcHRpb25zW10pIHtcbiAgICByZXR1cm4gYW5ub3RhdGlvbnMubWFwKChhbm5vdGF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBhbm5vdGF0aW9uVHlwZURlZmF1bHRzID0gdGhpcy5jaGFydENvbmZpZ1NlcnZpY2UuZ2V0QW5ub3RhdGlvbkRlZmF1bHRzKGFubm90YXRpb24udHlwZSk7XG4gICAgICByZXR1cm4gbWVyZ2VEZWVwQWxsKGFubm90YXRpb25UeXBlRGVmYXVsdHMsIGFubm90YXRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBbm5vdGF0aW9uUGx1Z2luT3B0aW9uc09iamVjdChhbm5vdGF0aW9uczogQW5ub3RhdGlvbk9wdGlvbnNbXSkge1xuICAgIGNvbnN0IGFubm90YXRpb25zV2l0aERlZmF1bHRzID0gdGhpcy5hcHBseURlZmF1bHRzVG9Bbm5vdGF0aW9ucyhhbm5vdGF0aW9ucyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgYW5ub3RhdGlvbjoge1xuICAgICAgICAgIGFubm90YXRpb25zOiBhbm5vdGF0aW9uc1dpdGhEZWZhdWx0cyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlJbnRlcmFjdGlvbkZ1bmN0aW9uc0V4dGVuc2lvbnMob3B0aW9uczogQ2hhcnRPcHRpb25zKTogQ2hhcnRPcHRpb25zIHtcbiAgICBjb25zdCBpbnRlcmFjdGlvbkZ1bmN0aW9uc0V4dGVuc2lvbnMgPSB0aGlzLmNoYXJ0Q29uZmlnU2VydmljZS5nZXRJbnRlcmFjdGlvbkZ1bmN0aW9uc0V4dGVuc2lvbnMoKTtcbiAgICBPYmplY3QuZW50cmllcyhpbnRlcmFjdGlvbkZ1bmN0aW9uc0V4dGVuc2lvbnMpLmZvckVhY2goKFtrZXksIF9dKSA9PiB7XG4gICAgICBjb25zdCBjYWxsYmFjayA9IG9wdGlvbnNba2V5XTtcbiAgICAgIG9wdGlvbnNba2V5XSA9IChlOiBFdmVudCwgYTogQWN0aXZlRWxlbWVudFtdLCBjOiBDaGFydCkgPT4ge1xuICAgICAgICBpbnRlcmFjdGlvbkZ1bmN0aW9uc0V4dGVuc2lvbnNba2V5XShlLCBhLCBjLCBjYWxsYmFjayk7XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVPcHRpb25zT2JqZWN0KGFyZ3M6IHtcbiAgICB0eXBlOiBDaGFydFR5cGU7XG4gICAgY3VzdG9tT3B0aW9ucz86IENoYXJ0T3B0aW9ucztcbiAgICBhbm5vdGF0aW9ucz86IEFubm90YXRpb25PcHRpb25zW107XG4gIH0pOiBDaGFydE9wdGlvbnMge1xuICAgIGNvbnN0IHsgdHlwZSwgY3VzdG9tT3B0aW9ucywgYW5ub3RhdGlvbnMgfSA9IGFyZ3M7XG5cbiAgICBjb25zdCB0eXBlQ29uZmlnID0gdGhpcy5jaGFydENvbmZpZ1NlcnZpY2UuZ2V0VHlwZUNvbmZpZyh0eXBlKTtcbiAgICBjb25zdCB0eXBlQ29uZmlnT3B0aW9ucyA9IHR5cGVDb25maWc/Lm9wdGlvbnM7XG4gICAgY29uc3QgYW5ub3RhdGlvblBsdWdpbk9wdGlvbnMgPSBhbm5vdGF0aW9uc1xuICAgICAgPyB0aGlzLmNyZWF0ZUFubm90YXRpb25QbHVnaW5PcHRpb25zT2JqZWN0KGFubm90YXRpb25zKVxuICAgICAgOiB7fTtcbiAgICBsZXQgb3B0aW9uczogQ2hhcnRPcHRpb25zID0gbWVyZ2VEZWVwQWxsKFxuICAgICAgdHlwZUNvbmZpZ09wdGlvbnMsXG4gICAgICBjdXN0b21PcHRpb25zLFxuICAgICAgYW5ub3RhdGlvblBsdWdpbk9wdGlvbnNcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmFwcGx5SW50ZXJhY3Rpb25GdW5jdGlvbnNFeHRlbnNpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb25maWd1cmF0aW9uT2JqZWN0KFxuICAgIHR5cGU6IENoYXJ0VHlwZSxcbiAgICBkYXRhc2V0czogQ2hhcnREYXRhc2V0W10sXG4gICAgb3B0aW9uczogQ2hhcnRPcHRpb25zLFxuICAgIGRhdGFMYWJlbHM/OiB1bmtub3duW11cbiAgKTogQ2hhcnRDb25maWd1cmF0aW9uIHtcbiAgICAvKiBjaGFydEpTIHJlcXVpcmVzIGxhYmVsczsgaWYgbm9uZSBpcyBwcm92aWRlZCBjcmVhdGUgYW4gZW1wdHkgc3RyaW5nIGFycmF5XG4gICAgdG8gbWFrZSBpdCBvcHRpb25hbCBmb3IgY29uc3VtZXIgKi9cbiAgICBjb25zdCBsYWJlbHMgPSAhZGF0YUxhYmVscyA/IHRoaXMuY3JlYXRlQmxhbmtMYWJlbHMoZGF0YXNldHMpIDogZGF0YUxhYmVscztcbiAgICBjb25zdCB0eXBlQ29uZmlnID0gdGhpcy5jaGFydENvbmZpZ1NlcnZpY2UuZ2V0VHlwZUNvbmZpZyh0eXBlKTtcblxuICAgIHJldHVybiBtZXJnZURlZXBBbGwodHlwZUNvbmZpZywge1xuICAgICAgZGF0YToge1xuICAgICAgICBsYWJlbHMsXG4gICAgICAgIGRhdGFzZXRzLFxuICAgICAgfSxcbiAgICAgIG9wdGlvbnMsXG4gICAgfSkgYXMgQ2hhcnRDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRIaWdobGlnaHRlZEVsZW1lbnRzVG9EYXRhc2V0cyhcbiAgICBoaWdobGlnaHRlZEVsZW1lbnRzOiBDaGFydEhpZ2hsaWdodGVkRWxlbWVudHMsXG4gICAgZGF0YXNldHM6IENoYXJ0RGF0YXNldFtdXG4gICkge1xuICAgIGhpZ2hsaWdodGVkRWxlbWVudHMuZm9yRWFjaCgoW2RhdGFzZXRJbmRleCwgZGF0YUluZGV4XSkgPT4ge1xuICAgICAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW2RhdGFzZXRJbmRleF07XG4gICAgICBpZiAoIWRhdGFzZXQpIHJldHVybjtcblxuICAgICAgaWYgKGRhdGFzZXQ/LmtpcmJ5T3B0aW9ucz8uaGlnaGxpZ2h0ZWRFbGVtZW50cykge1xuICAgICAgICBkYXRhc2V0LmtpcmJ5T3B0aW9ucy5oaWdobGlnaHRlZEVsZW1lbnRzLnB1c2goZGF0YUluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGFzZXQua2lyYnlPcHRpb25zID0ge1xuICAgICAgICAgIC4uLmRhdGFzZXQua2lyYnlPcHRpb25zLFxuICAgICAgICAgIGhpZ2hsaWdodGVkRWxlbWVudHM6IFtkYXRhSW5kZXhdLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlRGF0YXNldHMoXG4gICAgZGF0YTogQ2hhcnREYXRhc2V0W10gfCBudW1iZXJbXSxcbiAgICBoaWdobGlnaHRlZEVsZW1lbnRzPzogQ2hhcnRIaWdobGlnaHRlZEVsZW1lbnRzXG4gICk6IENoYXJ0RGF0YXNldFtdIHtcbiAgICBsZXQgZGF0YXNldHMgPSBpc051bWJlckFycmF5KGRhdGEpID8gW3sgZGF0YSB9XSA6IGRhdGE7XG5cbiAgICBpZiAoaGlnaGxpZ2h0ZWRFbGVtZW50cykgdGhpcy5hZGRIaWdobGlnaHRlZEVsZW1lbnRzVG9EYXRhc2V0cyhoaWdobGlnaHRlZEVsZW1lbnRzLCBkYXRhc2V0cyk7XG5cbiAgICByZXR1cm4gZGF0YXNldHM7XG4gIH1cbn1cbiJdfQ==
291
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtanMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9jaGFydC9jaGFydC1qcy9jaGFydC1qcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQU1MLGFBQWEsR0FDZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU5QyxNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQztBQUdyQyxNQUFNLE9BQU8sY0FBYztJQU96QixZQUFvQixrQkFBc0M7UUFBdEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtJQUFHLENBQUM7SUFFdkQsV0FBVyxDQUFDLElBU2xCO1FBQ0MsTUFBTSxFQUNKLGFBQWEsRUFDYixJQUFJLEVBQ0osSUFBSSxFQUNKLFVBQVUsRUFDVixhQUFhLEVBQ2IsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixtQkFBbUIsR0FDcEIsR0FBRyxJQUFJLENBQUM7UUFFVCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLElBQUksSUFBSSxDQUFDO1FBQ2pELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsSUFBSSxJQUFJLENBQUM7UUFDdkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFBLGdCQUFnQixhQUFoQixnQkFBZ0IsdUJBQWhCLGdCQUFnQixDQUFFLE1BQU0sS0FBSSxvQkFBb0IsQ0FBQztRQUUvRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUN2QyxhQUFhO1lBQ2IsV0FBVztZQUNYLGdCQUFnQjtTQUNqQixDQUFDLENBQUM7UUFDSCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFakYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU0sVUFBVSxDQUFDLElBQStCO1FBQy9DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUN0QyxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsVUFBaUM7UUFDdkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztJQUN0QyxDQUFDO0lBRU0sVUFBVSxDQUFDLElBQWUsRUFBRSxhQUE0QjtRQUM3RCxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUN2Qzs0Q0FDZ0M7WUFDaEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztTQUNuRDthQUFNO1lBQ0wsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztTQUN0RDtJQUNILENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxnQkFBdUM7UUFDaEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0lBQzNDLENBQUM7SUFFTSxhQUFhLENBQUMsYUFBMkIsRUFBRSxJQUFlO1FBQy9ELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxXQUFnQztRQUN2RCxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQztJQUM5RSxDQUFDO0lBRU0seUJBQXlCLENBQUMsbUJBQThDO1FBQzdFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztRQUMvQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUEwQixDQUFDO1FBRS9ELDZDQUE2QztRQUM3QyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7O1lBQzFCLFVBQUksT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFlBQVksMENBQUUsbUJBQW1CLEVBQUU7Z0JBQzlDLE9BQU8sT0FBTyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQzthQUNqRDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLDJCQUEyQjs7UUFDakMsTUFBTSxXQUFXLGVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTywwQ0FBRSxVQUFVLDBDQUFFLFdBQVcsQ0FBQztRQUN4RTs7K0VBRXVFO1FBQ3ZFLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTtZQUM3QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNoRTthQUFNO1lBQ0wsT0FBTyxFQUFFLENBQUM7U0FDWDtJQUNILENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxJQUFlLEVBQUUsYUFBNEI7UUFDM0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBMEIsQ0FBQztRQUM1RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFFdkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDekUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ25GLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBRXhDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU8sMEJBQTBCLENBQUMsU0FBb0IsRUFBRSxhQUE0QjtRQUNuRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDdkMsYUFBYTtZQUNiLFdBQVc7U0FDWixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRU8sa0JBQWtCLENBQUMsYUFBZ0MsRUFBRSxNQUEwQjtRQUNyRixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRU8saUJBQWlCLENBQUMsUUFBd0I7UUFDaEQsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGVBQWUsRUFBRSxjQUFjLEVBQUUsRUFBRSxDQUN6RSxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQzVGLENBQUM7UUFDRixPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU8sMEJBQTBCLENBQUMsV0FBZ0M7UUFDakUsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDcEMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlGLE9BQU8sWUFBWSxDQUFDLHNCQUFzQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG1DQUFtQyxDQUFDLFdBQWdDO1FBQzFFLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdFLE9BQU87WUFDTCxPQUFPLEVBQUU7Z0JBQ1AsVUFBVSxFQUFFO29CQUNWLFdBQVcsRUFBRSx1QkFBdUI7aUJBQ3JDO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLG1DQUFtQyxDQUFDLE9BQXFCO1FBQy9ELE1BQU0sOEJBQThCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlDQUFpQyxFQUFFLENBQUM7UUFDbkcsTUFBTSxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDbEUsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQVEsRUFBRSxDQUFrQixFQUFFLENBQVEsRUFBRSxFQUFFO2dCQUN4RCw4QkFBOEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxnQkFBdUM7UUFDdEUsT0FBTztZQUNMLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixPQUFPLEVBQUU7Z0JBQ1AsT0FBTyxFQUFFO29CQUNQLFNBQVMsRUFBRTt3QkFDVCxLQUFLLEVBQUUsQ0FBQyxZQUFZLEVBQUUsRUFBRTs7NEJBQ3RCLE1BQU0sSUFBSSxHQUFHLE1BQU0sT0FBRSxNQUFBLFlBQVksQ0FBQyxDQUFDLENBQUMsMENBQUUsR0FBVywwQ0FBRSxDQUFDLENBQUMsQ0FBQzs0QkFDdEQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0NBQ2xCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7b0NBQzFDLEdBQUcsRUFBRSxTQUFTO29DQUNkLEtBQUssRUFBRSxPQUFPO29DQUNkLElBQUksRUFBRSxTQUFTO29DQUNmLE1BQU0sRUFBRSxTQUFTO2lDQUNsQixDQUFDLENBQUM7NkJBQ0o7d0JBQ0gsQ0FBQzt3QkFDRCxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTs0QkFDakIsdUVBQXVFOzRCQUN2RSx1QkFBdUI7NEJBQ3ZCLE9BQU8sR0FBRyxHQUFHLE9BQU8sQ0FBQyxjQUFjLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUM7d0JBQzdFLENBQUM7cUJBQ0Y7aUJBQ0Y7YUFDRjtZQUNELE1BQU0sRUFBRTtnQkFDTixDQUFDLEVBQUU7b0JBQ0QsS0FBSyxFQUFFO3dCQUNMLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFOzRCQUNsQixPQUFPLEtBQUssR0FBRyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQzt3QkFDdEQsQ0FBQztxQkFDRjtpQkFDRjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxJQUkzQjtRQUNDLE1BQU0sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLEdBQUcsSUFBSSxDQUFDO1FBRXJGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0saUJBQWlCLEdBQUcsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLE9BQU8sQ0FBQztRQUM5QyxNQUFNLHVCQUF1QixHQUFHLFdBQVc7WUFDekMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxXQUFXLENBQUM7WUFDdkQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNQLE1BQU0sWUFBWSxHQUNoQixJQUFJLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUV6RixJQUFJLE9BQU8sR0FBaUIsWUFBWSxDQUN0QyxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYix1QkFBdUIsQ0FDeEIsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDLG1DQUFtQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxRQUF3QixFQUFFLE1BQW1CO1FBQ3pFLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxlQUFlLEVBQUUsY0FBYyxFQUFFLEVBQUUsQ0FDekUsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUM1RixDQUFDO1FBQ0YsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQXVCLEVBQUUsRUFBRSxDQUN6RCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRTtZQUN6QyxLQUFLLEVBQUUsT0FBTztZQUNkLEdBQUcsRUFBRSxTQUFTO1NBQ2YsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU8seUJBQXlCLENBQy9CLElBQWUsRUFDZixRQUF3QixFQUN4QixPQUFxQixFQUNyQixVQUFzQjtRQUV0QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRS9ELDRFQUE0RTtRQUM1RSxvQ0FBb0M7UUFDcEMsa0VBQWtFO1FBQ2xFLDhCQUE4QjtRQUM5QixNQUFNLFdBQVcsR0FBRyxJQUFJLEtBQUssT0FBTyxDQUFDO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLENBQUMsVUFBVTtZQUN4QixDQUFDLENBQUMsV0FBVztnQkFDWCxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUNuRCxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztZQUNwQyxDQUFDLENBQUMsVUFBVSxDQUFDO1FBRWYsT0FBTyxZQUFZLENBQUMsVUFBVSxFQUFFO1lBQzlCLElBQUksRUFBRTtnQkFDSixNQUFNO2dCQUNOLFFBQVE7YUFDVDtZQUNELE9BQU87U0FDUixDQUF1QixDQUFDO0lBQzNCLENBQUM7SUFFTyxnQ0FBZ0MsQ0FDdEMsbUJBQTZDLEVBQzdDLFFBQXdCO1FBRXhCLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUU7O1lBQ3hELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsT0FBTztnQkFBRSxPQUFPO1lBRXJCLFVBQUksT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFlBQVksMENBQUUsbUJBQW1CLEVBQUU7Z0JBQzlDLE9BQU8sQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzFEO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyxZQUFZLG1DQUNmLE9BQU8sQ0FBQyxZQUFZLEtBQ3ZCLG1CQUFtQixFQUFFLENBQUMsU0FBUyxDQUFDLEdBQ2pDLENBQUM7YUFDSDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNPLGNBQWMsQ0FBQyxJQUErQjs7UUFDcEQsNkRBQTZEO1FBQzdELElBQ0UsT0FBQSxJQUFJLENBQUMsZ0JBQWdCLDBDQUFFLFdBQVcsWUFDbEMsSUFBSSxDQUFDLGdCQUFnQiwwQ0FBRSxPQUFPLENBQUEsV0FDOUIsSUFBSSxDQUFDLGdCQUFnQiwwQ0FBRSxPQUFPLENBQUEsRUFDOUI7WUFDQSxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxRQUFRLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3ZELElBQUksSUFBSSxDQUFDLG1CQUFtQjtZQUMxQixJQUFJLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRTVFLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFDRDs7Ozs7T0FLRztJQUNJLGlCQUFpQixDQUFDLElBQStCO1FBQ3RELElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sS0FBSyxDQUFDLDhFQUE4RSxDQUFDLENBQUM7U0FDN0Y7UUFFRCxNQUFNLGlCQUFpQixHQUFHLENBQ3hCLEdBQWlCLEVBQ2pCLElBQWUsRUFDZixTQUF5QixFQUN6QixRQUE2QyxFQUN2QyxFQUFFO1lBQ1IsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNoRixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLGdDQUNkLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFzQixLQUMxQyxTQUFTLEVBQUU7b0JBQ1QsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO29CQUN4RCxRQUFRO2lCQUNULEdBQ2tCLENBQUM7UUFDeEIsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2YsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO2dCQUNqQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQzthQUM5QztZQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtnQkFDakMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDNUM7WUFDRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUU7Z0JBQ3JDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzlDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyx5QkFBeUIsQ0FDL0IsT0FBcUIsRUFDckIsSUFBWSxFQUNaLFNBQXlCO1FBRXpCLElBQUksT0FBZSxDQUFDO1FBQ3BCLElBQUksS0FBYSxDQUFDO1FBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3hDLElBQUksU0FBUyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRTtnQkFDN0QsS0FBSyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkIsT0FBTyxHQUFHLEtBQUssQ0FBQzthQUNqQjtZQUNELElBQUksU0FBUyxJQUFJLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRTtnQkFDOUQsS0FBSyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkIsT0FBTyxHQUFHLEtBQUssQ0FBQzthQUNqQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUM1QixDQUFDOzs7WUFyWEYsVUFBVTs7OztZQU5GLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2ZUVsZW1lbnQsIENoYXJ0Q29uZmlndXJhdGlvbiwgQ2hhcnRPcHRpb25zLCBTY2F0dGVyRGF0YVBvaW50IH0gZnJvbSAnY2hhcnQuanMnO1xuaW1wb3J0IHsgQW5ub3RhdGlvbk9wdGlvbnMgfSBmcm9tICdjaGFydGpzLXBsdWdpbi1hbm5vdGF0aW9uJztcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gJ2RhdGUtZm5zJztcblxuaW1wb3J0IHsgbWVyZ2VEZWVwQWxsIH0gZnJvbSAnLi4vLi4vLi4vaGVscGVycy9tZXJnZS1kZWVwJztcbmltcG9ydCB7XG4gIENoYXJ0RGF0YUxhYmVsT3B0aW9ucyxcbiAgQ2hhcnREYXRhc2V0LFxuICBDaGFydEhpZ2hsaWdodGVkRWxlbWVudHMsXG4gIENoYXJ0TG9jYWxlLFxuICBDaGFydFR5cGUsXG4gIGlzTnVtYmVyQXJyYXksXG59IGZyb20gJy4uL2NoYXJ0LnR5cGVzJztcbmltcG9ydCB7IENoYXJ0Q29uZmlnU2VydmljZSB9IGZyb20gJy4uL2NvbmZpZ3MvY2hhcnQtY29uZmlnLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBDaGFydCB9IGZyb20gJy4vY29uZmlndXJlZC1jaGFydC1qcyc7XG5cbmNvbnN0IENIQVJUX0xPQ0FMRV9ERUZBVUxUID0gJ2VuLVVTJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENoYXJ0SlNTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjaGFydDogQ2hhcnQ7XG4gIHByaXZhdGUgZGF0YUxhYmVsT3B0aW9uczogQ2hhcnREYXRhTGFiZWxPcHRpb25zO1xuICBwcml2YXRlIGhpZ2hsaWdodGVkRWxlbWVudHM6IENoYXJ0SGlnaGxpZ2h0ZWRFbGVtZW50cztcbiAgcHJpdmF0ZSBjaGFydFR5cGU6IENoYXJ0VHlwZTtcbiAgcHJpdmF0ZSBsb2NhbGU6IENoYXJ0TG9jYWxlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhcnRDb25maWdTZXJ2aWNlOiBDaGFydENvbmZpZ1NlcnZpY2UpIHt9XG5cbiAgcHVibGljIHJlbmRlckNoYXJ0KGFyZ3M6IHtcbiAgICB0YXJnZXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxDYW52YXNFbGVtZW50PjtcbiAgICB0eXBlOiBDaGFydFR5cGU7XG4gICAgZGF0YTogQ2hhcnREYXRhc2V0W10gfCBudW1iZXJbXTtcbiAgICBkYXRhTGFiZWxzPzogc3RyaW5nW10gfCBzdHJpbmdbXVtdO1xuICAgIGN1c3RvbU9wdGlvbnM/OiBDaGFydE9wdGlvbnM7XG4gICAgYW5ub3RhdGlvbnM/OiBBbm5vdGF0aW9uT3B0aW9uc1tdO1xuICAgIGRhdGFMYWJlbE9wdGlvbnM/OiBDaGFydERhdGFMYWJlbE9wdGlvbnM7XG4gICAgaGlnaGxpZ2h0ZWRFbGVtZW50cz86IENoYXJ0SGlnaGxpZ2h0ZWRFbGVtZW50cztcbiAgfSk6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIHRhcmdldEVsZW1lbnQsXG4gICAgICB0eXBlLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFMYWJlbHMsXG4gICAgICBjdXN0b21PcHRpb25zLFxuICAgICAgYW5ub3RhdGlvbnMsXG4gICAgICBkYXRhTGFiZWxPcHRpb25zLFxuICAgICAgaGlnaGxpZ2h0ZWRFbGVtZW50cyxcbiAgICB9ID0gYXJncztcblxuICAgIHRoaXMuZGF0YUxhYmVsT3B0aW9ucyA9IGRhdGFMYWJlbE9wdGlvbnMgfHwgbnVsbDtcbiAgICB0aGlzLmhpZ2hsaWdodGVkRWxlbWVudHMgPSBoaWdobGlnaHRlZEVsZW1lbnRzIHx8IG51bGw7XG4gICAgdGhpcy5jaGFydFR5cGUgPSB0eXBlO1xuICAgIHRoaXMubG9jYWxlID0gZGF0YUxhYmVsT3B0aW9ucz8ubG9jYWxlIHx8IENIQVJUX0xPQ0FMRV9ERUZBVUxUO1xuXG4gICAgY29uc3QgZGF0YXNldHMgPSB0aGlzLmNyZWF0ZURhdGFzZXRzKGRhdGEpO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuY3JlYXRlT3B0aW9uc09iamVjdCh7XG4gICAgICBjdXN0b21PcHRpb25zLFxuICAgICAgYW5ub3RhdGlvbnMsXG4gICAgICBkYXRhTGFiZWxPcHRpb25zLFxuICAgIH0pO1xuICAgIGxldCBjb25maWcgPSB0aGlzLmNyZWF0ZUNvbmZpZ3VyYXRpb25PYmplY3QodHlwZSwgZGF0YXNldHMsIG9wdGlvbnMsIGRhdGFMYWJlbHMpO1xuXG4gICAgdGhpcy5pbml0aWFsaXplTmV3Q2hhcnQodGFyZ2V0RWxlbWVudC5uYXRpdmVFbGVtZW50LCBjb25maWcpO1xuICB9XG5cbiAgcHVibGljIHJlZHJhd0NoYXJ0KCkge1xuICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRGF0YShkYXRhOiBDaGFydERhdGFzZXRbXSB8IG51bWJlcltdKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YXNldHMgPSB0aGlzLmNyZWF0ZURhdGFzZXRzKGRhdGEpO1xuXG4gICAgdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzID0gZGF0YXNldHM7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRGF0YUxhYmVscyhkYXRhTGFiZWxzOiBzdHJpbmdbXSB8IHN0cmluZ1tdW10pIHtcbiAgICB0aGlzLmNoYXJ0LmRhdGEubGFiZWxzID0gZGF0YUxhYmVscztcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVUeXBlKHR5cGU6IENoYXJ0VHlwZSwgY3VzdG9tT3B0aW9ucz86IENoYXJ0T3B0aW9ucykge1xuICAgIGlmICh0eXBlID09PSAnYmFyJyB8fCB0eXBlID09PSAnY29sdW1uJykge1xuICAgICAgLyogaW5kZXhBeGlzIGRvZXMgbm90IHVwZGF0ZSBwcmVkaWN0YWJseTsgdXBkYXRlIGJ5IHJlcGxhY2luZyBcbiAgICAgICAgIHRoZSBjaGFydCBlbnRpcmVseSBpbnN0ZWFkICovXG4gICAgICB0aGlzLmRlc3RydWN0aXZlbHlVcGRhdGVUeXBlKHR5cGUsIGN1c3RvbU9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5vbkRlc3RydWN0aXZlbHlVcGRhdGVUeXBlKHR5cGUsIGN1c3RvbU9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXREYXRhTGFiZWxPcHRpb25zKGRhdGFMYWJlbE9wdGlvbnM6IENoYXJ0RGF0YUxhYmVsT3B0aW9ucykge1xuICAgIHRoaXMuZGF0YUxhYmVsT3B0aW9ucyA9IGRhdGFMYWJlbE9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlT3B0aW9ucyhjdXN0b21PcHRpb25zOiBDaGFydE9wdGlvbnMsIHR5cGU6IENoYXJ0VHlwZSkge1xuICAgIGNvbnN0IGFubm90YXRpb25zID0gdGhpcy5nZXRFeGlzdGluZ0NoYXJ0QW5ub3RhdGlvbnMoKTtcbiAgICB0aGlzLmNoYXJ0VHlwZSA9IHR5cGU7XG4gICAgdGhpcy5jaGFydC5vcHRpb25zID0gdGhpcy5jcmVhdGVPcHRpb25zT2JqZWN0KHsgY3VzdG9tT3B0aW9ucywgYW5ub3RhdGlvbnMgfSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlQW5ub3RhdGlvbnMoYW5ub3RhdGlvbnM6IEFubm90YXRpb25PcHRpb25zW10pIHtcbiAgICBjb25zdCBhbm5vdGF0aW9uc1dpdGhEZWZhdWx0cyA9IHRoaXMuYXBwbHlEZWZhdWx0c1RvQW5ub3RhdGlvbnMoYW5ub3RhdGlvbnMpO1xuICAgIHRoaXMuY2hhcnQub3B0aW9ucy5wbHVnaW5zLmFubm90YXRpb24uYW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uc1dpdGhEZWZhdWx0cztcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVIaWdobGlnaHRlZEVsZW1lbnRzKGhpZ2hsaWdodGVkRWxlbWVudHM/OiBDaGFydEhpZ2hsaWdodGVkRWxlbWVudHMpIHtcbiAgICB0aGlzLmhpZ2hsaWdodGVkRWxlbWVudHMgPSBoaWdobGlnaHRlZEVsZW1lbnRzO1xuICAgIGNvbnN0IG9sZERhdGFzZXRzID0gdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzIGFzIENoYXJ0RGF0YXNldFtdO1xuXG4gICAgLy8gQ2xlYXIgb2xkIGRhdGFzZXRzIG9mIGhpZ2hsaWdodGVkIGVsZW1lbnRzXG4gICAgb2xkRGF0YXNldHMubWFwKChkYXRhc2V0KSA9PiB7XG4gICAgICBpZiAoZGF0YXNldD8ua2lyYnlPcHRpb25zPy5oaWdobGlnaHRlZEVsZW1lbnRzKSB7XG4gICAgICAgIGRlbGV0ZSBkYXRhc2V0LmtpcmJ5T3B0aW9ucy5oaWdobGlnaHRlZEVsZW1lbnRzO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzID0gdGhpcy5jcmVhdGVEYXRhc2V0cyhvbGREYXRhc2V0cyk7XG4gIH1cblxuICBwcml2YXRlIGdldEV4aXN0aW5nQ2hhcnRBbm5vdGF0aW9ucygpOiBBbm5vdGF0aW9uT3B0aW9uc1tdIHtcbiAgICBjb25zdCBhbm5vdGF0aW9ucyA9IHRoaXMuY2hhcnQub3B0aW9ucy5wbHVnaW5zPy5hbm5vdGF0aW9uPy5hbm5vdGF0aW9ucztcbiAgICAvKiBJbiBicm93c2VyIGNoYXJ0LmpzIG1pZ2h0IHJldHVybiBhbm5vdGF0aW9ucyBhcyBhIFByb3h5IG9iamVjdDsgZm9yY2UgaXQgdG8gYmUgYW4gYXJyYXkuXG4gICAgICAgRWFjaCBhbm5vdGF0aW9uT3B0aW9uIGluIHRoZSByZXN1bHRpbmcgYXJyYXkgIHdpbGwgYWxzbyBiZSBhIFByb3h5IG9iamVjdC4gXG4gICAgICAgQnV0IGludGVybmFsbHkgY2hhcnQuanMgd2lsbCBqdXN0IHdvcmsgd2l0aCB0aGVtIGFzIG5vcm1hbCB2YWx1ZXMgKi9cbiAgICBpZiAoYW5ub3RhdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGFubm90YXRpb25zKS5tYXAoKGtleSkgPT4gYW5ub3RhdGlvbnNba2V5XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRlc3RydWN0aXZlbHlVcGRhdGVUeXBlKHR5cGU6IENoYXJ0VHlwZSwgY3VzdG9tT3B0aW9ucz86IENoYXJ0T3B0aW9ucykge1xuICAgIGNvbnN0IGRhdGFzZXRzID0gdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzIGFzIENoYXJ0RGF0YXNldFtdO1xuICAgIGNvbnN0IGRhdGFMYWJlbHMgPSB0aGlzLmNoYXJ0LmRhdGEubGFiZWxzO1xuICAgIGNvbnN0IGFubm90YXRpb25zID0gdGhpcy5nZXRFeGlzdGluZ0NoYXJ0QW5ub3RhdGlvbnMoKTtcblxuICAgIHRoaXMuY2hhcnRUeXBlID0gdHlwZTtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5jcmVhdGVPcHRpb25zT2JqZWN0KHsgY3VzdG9tT3B0aW9ucywgYW5ub3RhdGlvbnMgfSk7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jcmVhdGVDb25maWd1cmF0aW9uT2JqZWN0KHR5cGUsIGRhdGFzZXRzLCBvcHRpb25zLCBkYXRhTGFiZWxzKTtcbiAgICBjb25zdCBjYW52YXNFbGVtZW50ID0gdGhpcy5jaGFydC5jYW52YXM7XG5cbiAgICB0aGlzLmNoYXJ0LmRlc3Ryb3koKTtcbiAgICB0aGlzLmluaXRpYWxpemVOZXdDaGFydChjYW52YXNFbGVtZW50LCBjb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBub25EZXN0cnVjdGl2ZWx5VXBkYXRlVHlwZShjaGFydFR5cGU6IENoYXJ0VHlwZSwgY3VzdG9tT3B0aW9ucz86IENoYXJ0T3B0aW9ucykge1xuICAgIGNvbnN0IGFubm90YXRpb25zID0gdGhpcy5nZXRFeGlzdGluZ0NoYXJ0QW5ub3RhdGlvbnMoKTtcbiAgICB0aGlzLmNoYXJ0VHlwZSA9IGNoYXJ0VHlwZTtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5jcmVhdGVPcHRpb25zT2JqZWN0KHtcbiAgICAgIGN1c3RvbU9wdGlvbnMsXG4gICAgICBhbm5vdGF0aW9ucyxcbiAgICB9KTtcblxuICAgIHRoaXMuY2hhcnQub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5jaGFydC5jb25maWcudHlwZSA9IHRoaXMuY2hhcnRDb25maWdTZXJ2aWNlLmNoYXJ0VHlwZVRvQ2hhcnRKU1R5cGUoY2hhcnRUeXBlKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZU5ld0NoYXJ0KGNhbnZhc0VsZW1lbnQ6IEhUTUxDYW52YXNFbGVtZW50LCBjb25maWc6IENoYXJ0Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuY2hhcnQgPSBuZXcgQ2hhcnQoY2FudmFzRWxlbWVudCwgY29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQmxhbmtMYWJlbHMoZGF0YXNldHM6IENoYXJ0RGF0YXNldFtdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGxhcmdlc3REYXRhc2V0ID0gZGF0YXNldHMucmVkdWNlKChwcmV2aW91c0RhdGFzZXQsIGN1cnJlbnREYXRhc2V0KSA9PlxuICAgICAgcHJldmlvdXNEYXRhc2V0LmRhdGEubGVuZ3RoID4gY3VycmVudERhdGFzZXQuZGF0YS5sZW5ndGggPyBwcmV2aW91c0RhdGFzZXQgOiBjdXJyZW50RGF0YXNldFxuICAgICk7XG4gICAgcmV0dXJuIEFycmF5KGxhcmdlc3REYXRhc2V0LmRhdGEubGVuZ3RoKS5maWxsKCcnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlEZWZhdWx0c1RvQW5ub3RhdGlvbnMoYW5ub3RhdGlvbnM6IEFubm90YXRpb25PcHRpb25zW10pIHtcbiAgICByZXR1cm4gYW5ub3RhdGlvbnMubWFwKChhbm5vdGF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBhbm5vdGF0aW9uVHlwZURlZmF1bHRzID0gdGhpcy5jaGFydENvbmZpZ1NlcnZpY2UuZ2V0QW5ub3RhdGlvbkRlZmF1bHRzKGFubm90YXRpb24udHlwZSk7XG4gICAgICByZXR1cm4gbWVyZ2VEZWVwQWxsKGFubm90YXRpb25UeXBlRGVmYXVsdHMsIGFubm90YXRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBbm5vdGF0aW9uUGx1Z2luT3B0aW9uc09iamVjdChhbm5vdGF0aW9uczogQW5ub3RhdGlvbk9wdGlvbnNbXSkge1xuICAgIGNvbnN0IGFubm90YXRpb25zV2l0aERlZmF1bHRzID0gdGhpcy5hcHBseURlZmF1bHRzVG9Bbm5vdGF0aW9ucyhhbm5vdGF0aW9ucyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgYW5ub3RhdGlvbjoge1xuICAgICAgICAgIGFubm90YXRpb25zOiBhbm5vdGF0aW9uc1dpdGhEZWZhdWx0cyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlJbnRlcmFjdGlvbkZ1bmN0aW9uc0V4dGVuc2lvbnMob3B0aW9uczogQ2hhcnRPcHRpb25zKTogQ2hhcnRPcHRpb25zIHtcbiAgICBjb25zdCBpbnRlcmFjdGlvbkZ1bmN0aW9uc0V4dGVuc2lvbnMgPSB0aGlzLmNoYXJ0Q29uZmlnU2VydmljZS5nZXRJbnRlcmFjdGlvbkZ1bmN0aW9uc0V4dGVuc2lvbnMoKTtcbiAgICBPYmplY3QuZW50cmllcyhpbnRlcmFjdGlvbkZ1bmN0aW9uc0V4dGVuc2lvbnMpLmZvckVhY2goKFtrZXksIF9dKSA9PiB7XG4gICAgICBjb25zdCBjYWxsYmFjayA9IG9wdGlvbnNba2V5XTtcbiAgICAgIG9wdGlvbnNba2V5XSA9IChlOiBFdmVudCwgYTogQWN0aXZlRWxlbWVudFtdLCBjOiBDaGFydCkgPT4ge1xuICAgICAgICBpbnRlcmFjdGlvbkZ1bmN0aW9uc0V4dGVuc2lvbnNba2V5XShlLCBhLCBjLCBjYWxsYmFjayk7XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTdG9ja09wdGlvbnNPYmplY3QoZGF0YUxhYmVsT3B0aW9uczogQ2hhcnREYXRhTGFiZWxPcHRpb25zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgIHRpdGxlOiAodG9vbHRpcEl0ZW1zKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSB0b0RhdGUoKHRvb2x0aXBJdGVtc1swXT8ucmF3IGFzIGFueSk/LngpO1xuICAgICAgICAgICAgICBpZiAoZGF0ZS52YWx1ZU9mKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcodGhpcy5sb2NhbGUsIHtcbiAgICAgICAgICAgICAgICAgIGRheTogJ251bWVyaWMnLFxuICAgICAgICAgICAgICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICAgICAgICAgICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICAgICAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhYmVsOiAoY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBwb3NzaWJsZSB0byBhZGQgc3BhY2luZyBiZXR3ZWVuIGNvbG9yIGxlZ2VuZCBhbmQgdGV4dCBzbyB3ZVxuICAgICAgICAgICAgICAvLyBwcmVmaXggd2l0aCBhIHNwYWNlLlxuICAgICAgICAgICAgICByZXR1cm4gJyAnICsgY29udGV4dC5mb3JtYXR0ZWRWYWx1ZSArIChkYXRhTGFiZWxPcHRpb25zLnZhbHVlU3VmZml4IHx8ICcnKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzY2FsZXM6IHtcbiAgICAgICAgeToge1xuICAgICAgICAgIHRpY2tzOiB7XG4gICAgICAgICAgICBjYWxsYmFjazogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZSArIChkYXRhTGFiZWxPcHRpb25zLnZhbHVlU3VmZml4IHx8ICcnKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT3B0aW9uc09iamVjdChhcmdzOiB7XG4gICAgY3VzdG9tT3B0aW9ucz86IENoYXJ0T3B0aW9ucztcbiAgICBhbm5vdGF0aW9ucz86IEFubm90YXRpb25PcHRpb25zW107XG4gICAgZGF0YUxhYmVsT3B0aW9ucz86IENoYXJ0RGF0YUxhYmVsT3B0aW9ucztcbiAgfSk6IENoYXJ0T3B0aW9ucyB7XG4gICAgY29uc3QgeyBjdXN0b21PcHRpb25zLCBhbm5vdGF0aW9ucywgZGF0YUxhYmVsT3B0aW9uczogY2hhcnREYXRhTGFiZWxPcHRpb25zIH0gPSBhcmdzO1xuXG4gICAgY29uc3QgdHlwZUNvbmZpZyA9IHRoaXMuY2hhcnRDb25maWdTZXJ2aWNlLmdldFR5cGVDb25maWcodGhpcy5jaGFydFR5cGUpO1xuICAgIGNvbnN0IHR5cGVDb25maWdPcHRpb25zID0gdHlwZUNvbmZpZz8ub3B0aW9ucztcbiAgICBjb25zdCBhbm5vdGF0aW9uUGx1Z2luT3B0aW9ucyA9IGFubm90YXRpb25zXG4gICAgICA/IHRoaXMuY3JlYXRlQW5ub3RhdGlvblBsdWdpbk9wdGlvbnNPYmplY3QoYW5ub3RhdGlvbnMpXG4gICAgICA6IHt9O1xuICAgIGNvbnN0IHN0b2NrT3B0aW9uczogQ2hhcnRPcHRpb25zID1cbiAgICAgIHRoaXMuY2hhcnRUeXBlID09PSAnc3RvY2snID8gdGhpcy5jcmVhdGVTdG9ja09wdGlvbnNPYmplY3QoY2hhcnREYXRhTGFiZWxPcHRpb25zKSA6IHt9O1xuXG4gICAgbGV0IG9wdGlvbnM6IENoYXJ0T3B0aW9ucyA9IG1lcmdlRGVlcEFsbChcbiAgICAgIHN0b2NrT3B0aW9ucyxcbiAgICAgIHR5cGVDb25maWdPcHRpb25zLFxuICAgICAgY3VzdG9tT3B0aW9ucyxcbiAgICAgIGFubm90YXRpb25QbHVnaW5PcHRpb25zXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLmFwcGx5SW50ZXJhY3Rpb25GdW5jdGlvbnNFeHRlbnNpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0U3RvY2tMYWJlbHMoZGF0YXNldHM6IENoYXJ0RGF0YXNldFtdLCBsb2NhbGU6IENoYXJ0TG9jYWxlKSB7XG4gICAgY29uc3QgbGFyZ2VzdERhdGFzZXQgPSBkYXRhc2V0cy5yZWR1Y2UoKHByZXZpb3VzRGF0YXNldCwgY3VycmVudERhdGFzZXQpID0+XG4gICAgICBwcmV2aW91c0RhdGFzZXQuZGF0YS5sZW5ndGggPiBjdXJyZW50RGF0YXNldC5kYXRhLmxlbmd0aCA/IHByZXZpb3VzRGF0YXNldCA6IGN1cnJlbnREYXRhc2V0XG4gICAgKTtcbiAgICByZXR1cm4gbGFyZ2VzdERhdGFzZXQuZGF0YS5tYXAoKHBvaW50OiBTY2F0dGVyRGF0YVBvaW50KSA9PlxuICAgICAgdG9EYXRlKHBvaW50LngpLnRvTG9jYWxlRGF0ZVN0cmluZyhsb2NhbGUsIHtcbiAgICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICAgIGRheTogJ251bWVyaWMnLFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb25maWd1cmF0aW9uT2JqZWN0KFxuICAgIHR5cGU6IENoYXJ0VHlwZSxcbiAgICBkYXRhc2V0czogQ2hhcnREYXRhc2V0W10sXG4gICAgb3B0aW9uczogQ2hhcnRPcHRpb25zLFxuICAgIGRhdGFMYWJlbHM/OiB1bmtub3duW11cbiAgKTogQ2hhcnRDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCB0eXBlQ29uZmlnID0gdGhpcy5jaGFydENvbmZpZ1NlcnZpY2UuZ2V0VHlwZUNvbmZpZyh0eXBlKTtcblxuICAgIC8vIGNoYXJ0SlMgcmVxdWlyZXMgbGFiZWxzOyBpZiBub25lIGlzIHByb3ZpZGVkIGNyZWF0ZSBhbiBlbXB0eSBzdHJpbmcgYXJyYXlcbiAgICAvLyB0byBtYWtlIGl0IG9wdGlvbmFsIGZvciBjb25zdW1lci5cbiAgICAvLyBIb3dldmVyIHRoZSBzdG9jayBjaGFydCwgc2hvdWxkIGhhdmUgYXV0b2dlbmVyYXRlZCBsYWJlbHMgaWYgbm9cbiAgICAvLyBjdXN0b20gbGFiZWxzIGFyZSBzdXBwbGllZC5cbiAgICBjb25zdCBpc1N0b2NrVHlwZSA9IHR5cGUgPT09ICdzdG9jayc7XG4gICAgY29uc3QgbGFiZWxzID0gIWRhdGFMYWJlbHNcbiAgICAgID8gaXNTdG9ja1R5cGVcbiAgICAgICAgPyB0aGlzLmdldERlZmF1bHRTdG9ja0xhYmVscyhkYXRhc2V0cywgdGhpcy5sb2NhbGUpXG4gICAgICAgIDogdGhpcy5jcmVhdGVCbGFua0xhYmVscyhkYXRhc2V0cylcbiAgICAgIDogZGF0YUxhYmVscztcblxuICAgIHJldHVybiBtZXJnZURlZXBBbGwodHlwZUNvbmZpZywge1xuICAgICAgZGF0YToge1xuICAgICAgICBsYWJlbHMsXG4gICAgICAgIGRhdGFzZXRzLFxuICAgICAgfSxcbiAgICAgIG9wdGlvbnMsXG4gICAgfSkgYXMgQ2hhcnRDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRIaWdobGlnaHRlZEVsZW1lbnRzVG9EYXRhc2V0cyhcbiAgICBoaWdobGlnaHRlZEVsZW1lbnRzOiBDaGFydEhpZ2hsaWdodGVkRWxlbWVudHMsXG4gICAgZGF0YXNldHM6IENoYXJ0RGF0YXNldFtdXG4gICkge1xuICAgIGhpZ2hsaWdodGVkRWxlbWVudHMuZm9yRWFjaCgoW2RhdGFzZXRJbmRleCwgZGF0YUluZGV4XSkgPT4ge1xuICAgICAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW2RhdGFzZXRJbmRleF07XG4gICAgICBpZiAoIWRhdGFzZXQpIHJldHVybjtcblxuICAgICAgaWYgKGRhdGFzZXQ/LmtpcmJ5T3B0aW9ucz8uaGlnaGxpZ2h0ZWRFbGVtZW50cykge1xuICAgICAgICBkYXRhc2V0LmtpcmJ5T3B0aW9ucy5oaWdobGlnaHRlZEVsZW1lbnRzLnB1c2goZGF0YUluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGFzZXQua2lyYnlPcHRpb25zID0ge1xuICAgICAgICAgIC4uLmRhdGFzZXQua2lyYnlPcHRpb25zLFxuICAgICAgICAgIGhpZ2hsaWdodGVkRWxlbWVudHM6IFtkYXRhSW5kZXhdLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlRGF0YXNldHMoZGF0YTogQ2hhcnREYXRhc2V0W10gfCBudW1iZXJbXSk6IENoYXJ0RGF0YXNldFtdIHtcbiAgICAvLyBXZSBuZWVkIHRvIG1vZGlmeSB0aGUgZGF0YXNldHMgaW4gb3JkZXIgdG8gYWRkIGRhdGFsYWJlbHMuXG4gICAgaWYgKFxuICAgICAgdGhpcy5kYXRhTGFiZWxPcHRpb25zPy5zaG93Q3VycmVudCB8fFxuICAgICAgdGhpcy5kYXRhTGFiZWxPcHRpb25zPy5zaG93TWF4IHx8XG4gICAgICB0aGlzLmRhdGFMYWJlbE9wdGlvbnM/LnNob3dNaW5cbiAgICApIHtcbiAgICAgIGRhdGEgPSB0aGlzLmFkZERhdGFMYWJlbHNEYXRhKGRhdGEpO1xuICAgIH1cbiAgICBsZXQgZGF0YXNldHMgPSBpc051bWJlckFycmF5KGRhdGEpID8gW3sgZGF0YSB9XSA6IGRhdGE7XG4gICAgaWYgKHRoaXMuaGlnaGxpZ2h0ZWRFbGVtZW50cylcbiAgICAgIHRoaXMuYWRkSGlnaGxpZ2h0ZWRFbGVtZW50c1RvRGF0YXNldHModGhpcy5oaWdobGlnaHRlZEVsZW1lbnRzLCBkYXRhc2V0cyk7XG5cbiAgICByZXR1cm4gZGF0YXNldHM7XG4gIH1cbiAgLyoqXG4gICAqIERlY29yYXRlIENoYXJ0RGF0YXNldCB3aXRoIHByb3BlcnRpZXMgdG8gYWxsb3cgZm9yIGRhdGFsYWJlbHMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEByZXR1cm5zIENoYXJ0RGF0YXNldFtdXG4gICAqL1xuICBwdWJsaWMgYWRkRGF0YUxhYmVsc0RhdGEoZGF0YTogQ2hhcnREYXRhc2V0W10gfCBudW1iZXJbXSk6IENoYXJ0RGF0YXNldFtdIHtcbiAgICBpZiAoaXNOdW1iZXJBcnJheShkYXRhKSkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJDdXJyZW50bHkgaXQncyBpbXBvc3NpYmxlIHRvIGFkZCBkYXRhTGFiZWxzIHRvIG5vbiBTY2F0dGVyRGF0YVBvaW50IGRhdGFzZXRzXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY29yYXRlRGF0YVBvaW50ID0gKFxuICAgICAgc2V0OiBDaGFydERhdGFzZXQsXG4gICAgICBheGlzOiAneCcgfCAneScsXG4gICAgICBkaXJlY3Rpb246ICdoaWdoJyB8ICdsb3cnLFxuICAgICAgcG9zaXRpb246ICdib3R0b20nIHwgJ3RvcCcgfCAnbGVmdCcgfCAncmlnaHQnXG4gICAgKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBwb2ludGVyIH0gPSB0aGlzLmxvY2F0ZVZhbHVlSW5kZXhJbkRhdGFzZXQoc2V0LCBheGlzLCBkaXJlY3Rpb24pO1xuICAgICAgc2V0LmRhdGFbcG9pbnRlcl0gPSB7XG4gICAgICAgIC4uLihzZXQuZGF0YVtwb2ludGVyXSBhcyBTY2F0dGVyRGF0YVBvaW50KSxcbiAgICAgICAgZGF0YWxhYmVsOiB7XG4gICAgICAgICAgdmFsdWU6IHZhbHVlICsgKHRoaXMuZGF0YUxhYmVsT3B0aW9ucy52YWx1ZVN1ZmZpeCB8fCAnJyksXG4gICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgIH0sXG4gICAgICB9IGFzIFNjYXR0ZXJEYXRhUG9pbnQ7XG4gICAgfTtcblxuICAgIGRhdGEubWFwKChzZXQpID0+IHtcbiAgICAgIGlmICh0aGlzLmRhdGFMYWJlbE9wdGlvbnMuc2hvd01pbikge1xuICAgICAgICBkZWNvcmF0ZURhdGFQb2ludChzZXQsICd5JywgJ2xvdycsICdib3R0b20nKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRhdGFMYWJlbE9wdGlvbnMuc2hvd01heCkge1xuICAgICAgICBkZWNvcmF0ZURhdGFQb2ludChzZXQsICd5JywgJ2hpZ2gnLCAndG9wJyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kYXRhTGFiZWxPcHRpb25zLnNob3dDdXJyZW50KSB7XG4gICAgICAgIGRlY29yYXRlRGF0YVBvaW50KHNldCwgJ3gnLCAnaGlnaCcsICdyaWdodCcpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2NhdGVWYWx1ZUluZGV4SW5EYXRhc2V0KFxuICAgIGRhdGFzZXQ6IENoYXJ0RGF0YXNldCxcbiAgICBheGlzOiBzdHJpbmcsXG4gICAgZGlyZWN0aW9uOiAnbG93JyB8ICdoaWdoJ1xuICApOiB7IHZhbHVlOiBudW1iZXI7IHBvaW50ZXI6IG51bWJlciB9IHtcbiAgICBsZXQgcG9pbnRlcjogbnVtYmVyO1xuICAgIGxldCB2YWx1ZTogbnVtYmVyO1xuICAgIGRhdGFzZXQuZGF0YS5mb3JFYWNoKChkYXRhcG9pbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoZGlyZWN0aW9uID09ICdsb3cnICYmICghdmFsdWUgfHwgZGF0YXBvaW50W2F4aXNdIDwgdmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gZGF0YXBvaW50Wyd5J107XG4gICAgICAgIHBvaW50ZXIgPSBpbmRleDtcbiAgICAgIH1cbiAgICAgIGlmIChkaXJlY3Rpb24gPT0gJ2hpZ2gnICYmICghdmFsdWUgfHwgZGF0YXBvaW50W2F4aXNdID4gdmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gZGF0YXBvaW50Wyd5J107XG4gICAgICAgIHBvaW50ZXIgPSBpbmRleDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4geyB2YWx1ZSwgcG9pbnRlciB9O1xuICB9XG59XG4iXX0=
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"ChartJSService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":10,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"../configs/chart-config.service","name":"ChartConfigService","line":14,"character":42}]}],"renderChart":[{"__symbolic":"method"}],"redrawChart":[{"__symbolic":"method"}],"updateData":[{"__symbolic":"method"}],"updateDataLabels":[{"__symbolic":"method"}],"updateType":[{"__symbolic":"method"}],"updateOptions":[{"__symbolic":"method"}],"updateAnnotations":[{"__symbolic":"method"}],"updateHighlightedElements":[{"__symbolic":"method"}],"getExistingChartAnnotations":[{"__symbolic":"method"}],"destructivelyUpdateType":[{"__symbolic":"method"}],"nonDestructivelyUpdateType":[{"__symbolic":"method"}],"initializeNewChart":[{"__symbolic":"method"}],"createBlankLabels":[{"__symbolic":"method"}],"applyDefaultsToAnnotations":[{"__symbolic":"method"}],"createAnnotationPluginOptionsObject":[{"__symbolic":"method"}],"applyInteractionFunctionsExtensions":[{"__symbolic":"method"}],"createOptionsObject":[{"__symbolic":"method"}],"createConfigurationObject":[{"__symbolic":"method"}],"addHighlightedElementsToDatasets":[{"__symbolic":"method"}],"createDatasets":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"ChartJSService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":20,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"../configs/chart-config.service","name":"ChartConfigService","line":28,"character":42}]}],"renderChart":[{"__symbolic":"method"}],"redrawChart":[{"__symbolic":"method"}],"updateData":[{"__symbolic":"method"}],"updateDataLabels":[{"__symbolic":"method"}],"updateType":[{"__symbolic":"method"}],"setDataLabelOptions":[{"__symbolic":"method"}],"updateOptions":[{"__symbolic":"method"}],"updateAnnotations":[{"__symbolic":"method"}],"updateHighlightedElements":[{"__symbolic":"method"}],"getExistingChartAnnotations":[{"__symbolic":"method"}],"destructivelyUpdateType":[{"__symbolic":"method"}],"nonDestructivelyUpdateType":[{"__symbolic":"method"}],"initializeNewChart":[{"__symbolic":"method"}],"createBlankLabels":[{"__symbolic":"method"}],"applyDefaultsToAnnotations":[{"__symbolic":"method"}],"createAnnotationPluginOptionsObject":[{"__symbolic":"method"}],"applyInteractionFunctionsExtensions":[{"__symbolic":"method"}],"createStockOptionsObject":[{"__symbolic":"method"}],"createOptionsObject":[{"__symbolic":"method"}],"getDefaultStockLabels":[{"__symbolic":"method"}],"createConfigurationObject":[{"__symbolic":"method"}],"addHighlightedElementsToDatasets":[{"__symbolic":"method"}],"createDatasets":[{"__symbolic":"method"}],"addDataLabelsData":[{"__symbolic":"method"}],"locateValueIndexInDataset":[{"__symbolic":"method"}]}}}}]
@@ -0,0 +1,203 @@
1
+ // The marker pluin was heavily inspired by https://chartjs-plugin-crosshair.netlify.app
2
+ // This project apears stale, so the feature with the vertical line, which was the only
3
+ // part of the plugin which actually was needed, was implemented here instead.
4
+ import { valueOrDefault } from 'chart.js/helpers';
5
+ var defaultOptions = {
6
+ line: {
7
+ color: 'black',
8
+ width: 1,
9
+ dashPattern: [],
10
+ },
11
+ snap: {
12
+ enabled: false,
13
+ },
14
+ };
15
+ const hasMarkerConfiguration = (chart) => {
16
+ var _a, _b, _c;
17
+ // using another plugins options is not ideal, so the issue with marker plugin
18
+ // should be resolved. As of right now the only chart that uses
19
+ // tooltip is stock charts.
20
+ return chart.config.options.scales.x && ((_c = (_b = (_a = chart.config.options) === null || _a === void 0 ? void 0 : _a.plugins) === null || _b === void 0 ? void 0 : _b.tooltip) === null || _c === void 0 ? void 0 : _c.enabled);
21
+ // @todo when resolving the typings issue with the markerplugin,
22
+ // this is a better conditional.
23
+ // return chart.config.options.scales.x && chart.config.options.plugins.marker
24
+ };
25
+ const ɵ0 = hasMarkerConfiguration;
26
+ export default {
27
+ id: 'marker',
28
+ afterInit: function (chart) {
29
+ if (!hasMarkerConfiguration(chart)) {
30
+ return;
31
+ }
32
+ var xScaleType = chart.config.options.scales.x.type;
33
+ if (xScaleType !== 'linear' &&
34
+ xScaleType !== 'time' &&
35
+ xScaleType !== 'category' &&
36
+ xScaleType !== 'logarithmic') {
37
+ return;
38
+ }
39
+ if (chart.options.plugins.marker === undefined) {
40
+ chart.options.plugins.marker = defaultOptions;
41
+ }
42
+ chart.marker = {
43
+ enabled: false,
44
+ suppressUpdate: false,
45
+ x: null,
46
+ originalData: [],
47
+ originalXRange: {},
48
+ dragStarted: false,
49
+ dragStartX: null,
50
+ dragEndX: null,
51
+ suppressTooltips: false,
52
+ ignoreNextEvents: 0,
53
+ };
54
+ },
55
+ getOption: function (chart, category, name) {
56
+ return valueOrDefault(chart.options.plugins.marker[category]
57
+ ? chart.options.plugins.marker[category][name]
58
+ : undefined, defaultOptions[category][name]);
59
+ },
60
+ getXScale: function (chart) {
61
+ return chart.data.datasets.length ? chart.scales[chart.getDatasetMeta(0).xAxisID] : null;
62
+ },
63
+ getYScale: function (chart) {
64
+ return chart.scales[chart.getDatasetMeta(0).yAxisID];
65
+ },
66
+ afterEvent: function (chart, event) {
67
+ if (!hasMarkerConfiguration(chart)) {
68
+ return;
69
+ }
70
+ if (chart.config.options.scales.x.length == 0) {
71
+ return;
72
+ }
73
+ let e = event.event;
74
+ var xScaleType = chart.config.options.scales.x.type;
75
+ if (xScaleType !== 'linear' &&
76
+ xScaleType !== 'time' &&
77
+ xScaleType !== 'category' &&
78
+ xScaleType !== 'logarithmic') {
79
+ return;
80
+ }
81
+ var xScale = this.getXScale(chart);
82
+ if (!xScale) {
83
+ return;
84
+ }
85
+ if (chart.marker.ignoreNextEvents > 0) {
86
+ chart.marker.ignoreNextEvents -= 1;
87
+ return;
88
+ }
89
+ // fix for Safari
90
+ var buttons = e.native.buttons === undefined ? e.native.which : e.native.buttons;
91
+ if (e.native.type === 'mouseup') {
92
+ buttons = 0;
93
+ }
94
+ chart.marker.enabled =
95
+ e.type !== 'mouseout' &&
96
+ e.x > xScale.getPixelForValue(xScale.min) &&
97
+ e.x < xScale.getPixelForValue(xScale.max);
98
+ if (!chart.marker.enabled && !chart.marker.suppressUpdate) {
99
+ if (e.x > xScale.getPixelForValue(xScale.max)) {
100
+ // suppress future updates to prevent endless redrawing of chart
101
+ chart.marker.suppressUpdate = true;
102
+ chart.update('none');
103
+ }
104
+ chart.marker.dragStarted = false; // cancel zoom in progress
105
+ return false;
106
+ }
107
+ chart.marker.suppressUpdate = false;
108
+ chart.marker.x = e.x;
109
+ chart.draw();
110
+ },
111
+ doDraw: function (chart) {
112
+ if (!hasMarkerConfiguration(chart)) {
113
+ return;
114
+ }
115
+ if (!chart.marker.enabled) {
116
+ return;
117
+ }
118
+ this.drawTraceLine(chart);
119
+ this.interpolateValues(chart);
120
+ this.drawTracePoints(chart);
121
+ return true;
122
+ },
123
+ beforeDraw: function (chart) {
124
+ return this.doDraw(chart);
125
+ },
126
+ // Logic moved to beforeDraw in order
127
+ // for the vertical line to be drawn
128
+ // under tooltip and datalabels.
129
+ // afterDraw: function(chart) {
130
+ // return this.doDraw(chart);
131
+ // },
132
+ drawTraceLine: function (chart) {
133
+ if (!hasMarkerConfiguration(chart)) {
134
+ return;
135
+ }
136
+ var yScale = this.getYScale(chart);
137
+ var lineWidth = this.getOption(chart, 'line', 'width');
138
+ var color = this.getOption(chart, 'line', 'color');
139
+ var dashPattern = this.getOption(chart, 'line', 'dashPattern');
140
+ var snapEnabled = this.getOption(chart, 'snap', 'enabled');
141
+ var lineX = chart.marker.x;
142
+ if (snapEnabled && chart._active.length) {
143
+ lineX = chart._active[0].element.x;
144
+ }
145
+ chart.ctx.beginPath();
146
+ chart.ctx.setLineDash(dashPattern);
147
+ chart.ctx.moveTo(lineX, yScale.getPixelForValue(yScale.max));
148
+ chart.ctx.lineWidth = lineWidth;
149
+ chart.ctx.strokeStyle = color;
150
+ chart.ctx.lineTo(lineX, yScale.getPixelForValue(yScale.min));
151
+ chart.ctx.stroke();
152
+ chart.ctx.setLineDash([]);
153
+ },
154
+ drawTracePoints: function (chart) {
155
+ if (!hasMarkerConfiguration(chart)) {
156
+ return;
157
+ }
158
+ for (var chartIndex = 0; chartIndex < chart.data.datasets.length; chartIndex++) {
159
+ var dataset = chart.data.datasets[chartIndex];
160
+ var meta = chart.getDatasetMeta(chartIndex);
161
+ var yScale = chart.scales[meta.yAxisID];
162
+ if (meta.hidden || !dataset.interpolate) {
163
+ continue;
164
+ }
165
+ chart.ctx.beginPath();
166
+ chart.ctx.arc(chart.marker.x, yScale.getPixelForValue(dataset.interpolatedValue), 3, 0, 2 * Math.PI, false);
167
+ chart.ctx.fillStyle = 'white';
168
+ chart.ctx.lineWidth = 2;
169
+ chart.ctx.strokeStyle = dataset.borderColor;
170
+ chart.ctx.fill();
171
+ chart.ctx.stroke();
172
+ }
173
+ },
174
+ interpolateValues: function (chart) {
175
+ for (var chartIndex = 0; chartIndex < chart.data.datasets.length; chartIndex++) {
176
+ var dataset = chart.data.datasets[chartIndex];
177
+ var meta = chart.getDatasetMeta(chartIndex);
178
+ var xScale = chart.scales[meta.xAxisID];
179
+ var xValue = xScale.getValueForPixel(chart.marker.x);
180
+ if (meta.hidden || !dataset.interpolate) {
181
+ continue;
182
+ }
183
+ var data = dataset.data;
184
+ var index = data.findIndex(function (o) {
185
+ return o.x >= xValue;
186
+ });
187
+ var prev = data[index - 1];
188
+ var next = data[index];
189
+ if (chart.data.datasets[chartIndex].steppedLine && prev) {
190
+ dataset.interpolatedValue = prev.y;
191
+ }
192
+ else if (prev && next) {
193
+ var slope = (next.y - prev.y) / (next.x - prev.x);
194
+ dataset.interpolatedValue = prev.y + (xValue - prev.x) * slope;
195
+ }
196
+ else {
197
+ dataset.interpolatedValue = NaN;
198
+ }
199
+ }
200
+ },
201
+ };
202
+ export { ɵ0 };
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnRqcy1wbHVnaW4tbWFya2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL2NoYXJ0L2NoYXJ0LWpzL2NoYXJ0anMtcGx1Z2luLW1hcmtlci9jaGFydGpzLXBsdWdpbi1tYXJrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0ZBQXdGO0FBQ3hGLHVGQUF1RjtBQUN2Riw4RUFBOEU7QUFFOUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWxELElBQUksY0FBYyxHQUFHO0lBQ25CLElBQUksRUFBRTtRQUNKLEtBQUssRUFBRSxPQUFPO1FBQ2QsS0FBSyxFQUFFLENBQUM7UUFDUixXQUFXLEVBQUUsRUFBRTtLQUNoQjtJQUNELElBQUksRUFBRTtRQUNKLE9BQU8sRUFBRSxLQUFLO0tBQ2Y7Q0FDRixDQUFDO0FBRUYsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFOztJQUN2Qyw4RUFBOEU7SUFDOUUsK0RBQStEO0lBQy9ELDJCQUEyQjtJQUMzQixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLHVCQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTywwQ0FBRSxPQUFPLDBDQUFFLE9BQU8sMENBQUUsT0FBTyxDQUFBLENBQUM7SUFDeEYsZ0VBQWdFO0lBQ2hFLGdDQUFnQztJQUNoQyw4RUFBOEU7QUFDaEYsQ0FBQyxDQUFDOztBQUVGLGVBQWU7SUFDYixFQUFFLEVBQUUsUUFBUTtJQUVaLFNBQVMsRUFBRSxVQUFTLEtBQUs7UUFDdkIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2xDLE9BQU87U0FDUjtRQUVELElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FB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SCxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSBtYXJrZXIgcGx1aW4gd2FzIGhlYXZpbHkgaW5zcGlyZWQgYnkgaHR0cHM6Ly9jaGFydGpzLXBsdWdpbi1jcm9zc2hhaXIubmV0bGlmeS5hcHBcbi8vIFRoaXMgcHJvamVjdCBhcGVhcnMgc3RhbGUsIHNvIHRoZSBmZWF0dXJlIHdpdGggdGhlIHZlcnRpY2FsIGxpbmUsIHdoaWNoIHdhcyB0aGUgb25seVxuLy8gcGFydCBvZiB0aGUgcGx1Z2luIHdoaWNoIGFjdHVhbGx5IHdhcyBuZWVkZWQsIHdhcyBpbXBsZW1lbnRlZCBoZXJlIGluc3RlYWQuXG5cbmltcG9ydCB7IHZhbHVlT3JEZWZhdWx0IH0gZnJvbSAnY2hhcnQuanMvaGVscGVycyc7XG5cbnZhciBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgbGluZToge1xuICAgIGNvbG9yOiAnYmxhY2snLFxuICAgIHdpZHRoOiAxLFxuICAgIGRhc2hQYXR0ZXJuOiBbXSxcbiAgfSxcbiAgc25hcDoge1xuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICB9LFxufTtcblxuY29uc3QgaGFzTWFya2VyQ29uZmlndXJhdGlvbiA9IChjaGFydCkgPT4ge1xuICAvLyB1c2luZyBhbm90aGVyIHBsdWdpbnMgb3B0aW9ucyBpcyBub3QgaWRlYWwsIHNvIHRoZSBpc3N1ZSB3aXRoIG1hcmtlciBwbHVnaW5cbiAgLy8gc2hvdWxkIGJlIHJlc29sdmVkLiBBcyBvZiByaWdodCBub3cgdGhlIG9ubHkgY2hhcnQgdGhhdCB1c2VzXG4gIC8vIHRvb2x0aXAgaXMgc3RvY2sgY2hhcnRzLlxuICByZXR1cm4gY2hhcnQuY29uZmlnLm9wdGlvbnMuc2NhbGVzLnggJiYgY2hhcnQuY29uZmlnLm9wdGlvbnM/LnBsdWdpbnM/LnRvb2x0aXA/LmVuYWJsZWQ7XG4gIC8vIEB0b2RvIHdoZW4gcmVzb2x2aW5nIHRoZSB0eXBpbmdzIGlzc3VlIHdpdGggdGhlIG1hcmtlcnBsdWdpbixcbiAgLy8gdGhpcyBpcyBhIGJldHRlciBjb25kaXRpb25hbC5cbiAgLy8gcmV0dXJuIGNoYXJ0LmNvbmZpZy5vcHRpb25zLnNjYWxlcy54ICYmIGNoYXJ0LmNvbmZpZy5vcHRpb25zLnBsdWdpbnMubWFya2VyXG59O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlkOiAnbWFya2VyJyxcblxuICBhZnRlckluaXQ6IGZ1bmN0aW9uKGNoYXJ0KSB7XG4gICAgaWYgKCFoYXNNYXJrZXJDb25maWd1cmF0aW9uKGNoYXJ0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB4U2NhbGVUeXBlID0gY2hhcnQuY29uZmlnLm9wdGlvbnMuc2NhbGVzLngudHlwZTtcblxuICAgIGlmIChcbiAgICAgIHhTY2FsZVR5cGUgIT09ICdsaW5lYXInICYmXG4gICAgICB4U2NhbGVUeXBlICE9PSAndGltZScgJiZcbiAgICAgIHhTY2FsZVR5cGUgIT09ICdjYXRlZ29yeScgJiZcbiAgICAgIHhTY2FsZVR5cGUgIT09ICdsb2dhcml0aG1pYydcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2hhcnQub3B0aW9ucy5wbHVnaW5zLm1hcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjaGFydC5vcHRpb25zLnBsdWdpbnMubWFya2VyID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuXG4gICAgY2hhcnQubWFya2VyID0ge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBzdXBwcmVzc1VwZGF0ZTogZmFsc2UsXG4gICAgICB4OiBudWxsLFxuICAgICAgb3JpZ2luYWxEYXRhOiBbXSxcbiAgICAgIG9yaWdpbmFsWFJhbmdlOiB7fSxcbiAgICAgIGRyYWdTdGFydGVkOiBmYWxzZSxcbiAgICAgIGRyYWdTdGFydFg6IG51bGwsXG4gICAgICBkcmFnRW5kWDogbnVsbCxcbiAgICAgIHN1cHByZXNzVG9vbHRpcHM6IGZhbHNlLFxuICAgICAgaWdub3JlTmV4dEV2ZW50czogMCxcbiAgICB9O1xuICB9LFxuXG4gIGdldE9wdGlvbjogZnVuY3Rpb24oY2hhcnQsIGNhdGVnb3J5LCBuYW1lKSB7XG4gICAgcmV0dXJuIHZhbHVlT3JEZWZhdWx0KFxuICAgICAgY2hhcnQub3B0aW9ucy5wbHVnaW5zLm1hcmtlcltjYXRlZ29yeV1cbiAgICAgICAgPyBjaGFydC5vcHRpb25zLnBsdWdpbnMubWFya2VyW2NhdGVnb3J5XVtuYW1lXVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGRlZmF1bHRPcHRpb25zW2NhdGVnb3J5XVtuYW1lXVxuICAgICk7XG4gIH0sXG5cbiAgZ2V0WFNjYWxlOiBmdW5jdGlvbihjaGFydCkge1xuICAgIHJldHVybiBjaGFydC5kYXRhLmRhdGFzZXRzLmxlbmd0aCA/IGNoYXJ0LnNjYWxlc1tjaGFydC5nZXREYXRhc2V0TWV0YSgwKS54QXhpc0lEXSA6IG51bGw7XG4gIH0sXG4gIGdldFlTY2FsZTogZnVuY3Rpb24oY2hhcnQpIHtcbiAgICByZXR1cm4gY2hhcnQuc2NhbGVzW2NoYXJ0LmdldERhdGFzZXRNZXRhKDApLnlBeGlzSURdO1xuICB9LFxuXG4gIGFmdGVyRXZlbnQ6IGZ1bmN0aW9uKGNoYXJ0LCBldmVudCkge1xuICAgIGlmICghaGFzTWFya2VyQ29uZmlndXJhdGlvbihjaGFydCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNoYXJ0LmNvbmZpZy5vcHRpb25zLnNjYWxlcy54Lmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGUgPSBldmVudC5ldmVudDtcblxuICAgIHZhciB4U2NhbGVUeXBlID0gY2hhcnQuY29uZmlnLm9wdGlvbnMuc2NhbGVzLngudHlwZTtcblxuICAgIGlmIChcbiAgICAgIHhTY2FsZVR5cGUgIT09ICdsaW5lYXInICYmXG4gICAgICB4U2NhbGVUeXBlICE9PSAndGltZScgJiZcbiAgICAgIHhTY2FsZVR5cGUgIT09ICdjYXRlZ29yeScgJiZcbiAgICAgIHhTY2FsZVR5cGUgIT09ICdsb2dhcml0aG1pYydcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgeFNjYWxlID0gdGhpcy5nZXRYU2NhbGUoY2hhcnQpO1xuXG4gICAgaWYgKCF4U2NhbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2hhcnQubWFya2VyLmlnbm9yZU5leHRFdmVudHMgPiAwKSB7XG4gICAgICBjaGFydC5tYXJrZXIuaWdub3JlTmV4dEV2ZW50cyAtPSAxO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGZpeCBmb3IgU2FmYXJpXG4gICAgdmFyIGJ1dHRvbnMgPSBlLm5hdGl2ZS5idXR0b25zID09PSB1bmRlZmluZWQgPyBlLm5hdGl2ZS53aGljaCA6IGUubmF0aXZlLmJ1dHRvbnM7XG4gICAgaWYgKGUubmF0aXZlLnR5cGUgPT09ICdtb3VzZXVwJykge1xuICAgICAgYnV0dG9ucyA9IDA7XG4gICAgfVxuXG4gICAgY2hhcnQubWFya2VyLmVuYWJsZWQgPVxuICAgICAgZS50eXBlICE9PSAnbW91c2VvdXQnICYmXG4gICAgICBlLnggPiB4U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZSh4U2NhbGUubWluKSAmJlxuICAgICAgZS54IDwgeFNjYWxlLmdldFBpeGVsRm9yVmFsdWUoeFNjYWxlLm1heCk7XG5cbiAgICBpZiAoIWNoYXJ0Lm1hcmtlci5lbmFibGVkICYmICFjaGFydC5tYXJrZXIuc3VwcHJlc3NVcGRhdGUpIHtcbiAgICAgIGlmIChlLnggPiB4U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZSh4U2NhbGUubWF4KSkge1xuICAgICAgICAvLyBzdXBwcmVzcyBmdXR1cmUgdXBkYXRlcyB0byBwcmV2ZW50IGVuZGxlc3MgcmVkcmF3aW5nIG9mIGNoYXJ0XG4gICAgICAgIGNoYXJ0Lm1hcmtlci5zdXBwcmVzc1VwZGF0ZSA9IHRydWU7XG4gICAgICAgIGNoYXJ0LnVwZGF0ZSgnbm9uZScpO1xuICAgICAgfVxuICAgICAgY2hhcnQubWFya2VyLmRyYWdTdGFydGVkID0gZmFsc2U7IC8vIGNhbmNlbCB6b29tIGluIHByb2dyZXNzXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNoYXJ0Lm1hcmtlci5zdXBwcmVzc1VwZGF0ZSA9IGZhbHNlO1xuXG4gICAgY2hhcnQubWFya2VyLnggPSBlLng7XG5cbiAgICBjaGFydC5kcmF3KCk7XG4gIH0sXG4gIGRvRHJhdzogZnVuY3Rpb24oY2hhcnQpIHtcbiAgICBpZiAoIWhhc01hcmtlckNvbmZpZ3VyYXRpb24oY2hhcnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFjaGFydC5tYXJrZXIuZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZHJhd1RyYWNlTGluZShjaGFydCk7XG4gICAgdGhpcy5pbnRlcnBvbGF0ZVZhbHVlcyhjaGFydCk7XG4gICAgdGhpcy5kcmF3VHJhY2VQb2ludHMoY2hhcnQpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGJlZm9yZURyYXc6IGZ1bmN0aW9uKGNoYXJ0KSB7XG4gICAgcmV0dXJuIHRoaXMuZG9EcmF3KGNoYXJ0KTtcbiAgfSxcbiAgLy8gTG9naWMgbW92ZWQgdG8gYmVmb3JlRHJhdyBpbiBvcmRlclxuICAvLyBmb3IgdGhlIHZlcnRpY2FsIGxpbmUgdG8gYmUgZHJhd25cbiAgLy8gdW5kZXIgdG9vbHRpcCBhbmQgZGF0YWxhYmVscy5cbiAgLy8gYWZ0ZXJEcmF3OiBmdW5jdGlvbihjaGFydCkge1xuICAvLyAgIHJldHVybiB0aGlzLmRvRHJhdyhjaGFydCk7XG4gIC8vIH0sXG5cbiAgZHJhd1RyYWNlTGluZTogZnVuY3Rpb24oY2hhcnQpIHtcbiAgICBpZiAoIWhhc01hcmtlckNvbmZpZ3VyYXRpb24oY2hhcnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB5U2NhbGUgPSB0aGlzLmdldFlTY2FsZShjaGFydCk7XG5cbiAgICB2YXIgbGluZVdpZHRoID0gdGhpcy5nZXRPcHRpb24oY2hhcnQsICdsaW5lJywgJ3dpZHRoJyk7XG4gICAgdmFyIGNvbG9yID0gdGhpcy5nZXRPcHRpb24oY2hhcnQsICdsaW5lJywgJ2NvbG9yJyk7XG4gICAgdmFyIGRhc2hQYXR0ZXJuID0gdGhpcy5nZXRPcHRpb24oY2hhcnQsICdsaW5lJywgJ2Rhc2hQYXR0ZXJuJyk7XG4gICAgdmFyIHNuYXBFbmFibGVkID0gdGhpcy5nZXRPcHRpb24oY2hhcnQsICdzbmFwJywgJ2VuYWJsZWQnKTtcblxuICAgIHZhciBsaW5lWCA9IGNoYXJ0Lm1hcmtlci54O1xuXG4gICAgaWYgKHNuYXBFbmFibGVkICYmIGNoYXJ0Ll9hY3RpdmUubGVuZ3RoKSB7XG4gICAgICBsaW5lWCA9IGNoYXJ0Ll9hY3RpdmVbMF0uZWxlbWVudC54O1xuICAgIH1cblxuICAgIGNoYXJ0LmN0eC5iZWdpblBhdGgoKTtcbiAgICBjaGFydC5jdHguc2V0TGluZURhc2goZGFzaFBhdHRlcm4pO1xuICAgIGNoYXJ0LmN0eC5tb3ZlVG8obGluZVgsIHlTY2FsZS5nZXRQaXhlbEZvclZhbHVlKHlTY2FsZS5tYXgpKTtcbiAgICBjaGFydC5jdHgubGluZVdpZHRoID0gbGluZVdpZHRoO1xuICAgIGNoYXJ0LmN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuICAgIGNoYXJ0LmN0eC5saW5lVG8obGluZVgsIHlTY2FsZS5nZXRQaXhlbEZvclZhbHVlKHlTY2FsZS5taW4pKTtcbiAgICBjaGFydC5jdHguc3Ryb2tlKCk7XG4gICAgY2hhcnQuY3R4LnNldExpbmVEYXNoKFtdKTtcbiAgfSxcblxuICBkcmF3VHJhY2VQb2ludHM6IGZ1bmN0aW9uKGNoYXJ0KSB7XG4gICAgaWYgKCFoYXNNYXJrZXJDb25maWd1cmF0aW9uKGNoYXJ0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKHZhciBjaGFydEluZGV4ID0gMDsgY2hhcnRJbmRleCA8IGNoYXJ0LmRhdGEuZGF0YXNldHMubGVuZ3RoOyBjaGFydEluZGV4KyspIHtcbiAgICAgIHZhciBkYXRhc2V0ID0gY2hhcnQuZGF0YS5kYXRhc2V0c1tjaGFydEluZGV4XTtcbiAgICAgIHZhciBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoY2hhcnRJbmRleCk7XG5cbiAgICAgIHZhciB5U2NhbGUgPSBjaGFydC5zY2FsZXNbbWV0YS55QXhpc0lEXTtcblxuICAgICAgaWYgKG1ldGEuaGlkZGVuIHx8ICFkYXRhc2V0LmludGVycG9sYXRlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjaGFydC5jdHguYmVnaW5QYXRoKCk7XG4gICAgICBjaGFydC5jdHguYXJjKFxuICAgICAgICBjaGFydC5tYXJrZXIueCxcbiAgICAgICAgeVNjYWxlLmdldFBpeGVsRm9yVmFsdWUoZGF0YXNldC5pbnRlcnBvbGF0ZWRWYWx1ZSksXG4gICAgICAgIDMsXG4gICAgICAgIDAsXG4gICAgICAgIDIgKiBNYXRoLlBJLFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGNoYXJ0LmN0eC5maWxsU3R5bGUgPSAnd2hpdGUnO1xuICAgICAgY2hhcnQuY3R4LmxpbmVXaWR0aCA9IDI7XG4gICAgICBjaGFydC5jdHguc3Ryb2tlU3R5bGUgPSBkYXRhc2V0LmJvcmRlckNvbG9yO1xuICAgICAgY2hhcnQuY3R4LmZpbGwoKTtcbiAgICAgIGNoYXJ0LmN0eC5zdHJva2UoKTtcbiAgICB9XG4gIH0sXG5cbiAgaW50ZXJwb2xhdGVWYWx1ZXM6IGZ1bmN0aW9uKGNoYXJ0KSB7XG4gICAgZm9yICh2YXIgY2hhcnRJbmRleCA9IDA7IGNoYXJ0SW5kZXggPCBjaGFydC5kYXRhLmRhdGFzZXRzLmxlbmd0aDsgY2hhcnRJbmRleCsrKSB7XG4gICAgICB2YXIgZGF0YXNldCA9IGNoYXJ0LmRhdGEuZGF0YXNldHNbY2hhcnRJbmRleF07XG5cbiAgICAgIHZhciBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoY2hhcnRJbmRleCk7XG5cbiAgICAgIHZhciB4U2NhbGUgPSBjaGFydC5zY2FsZXNbbWV0YS54QXhpc0lEXTtcbiAgICAgIHZhciB4VmFsdWUgPSB4U2NhbGUuZ2V0VmFsdWVGb3JQaXhlbChjaGFydC5tYXJrZXIueCk7XG5cbiAgICAgIGlmIChtZXRhLmhpZGRlbiB8fCAhZGF0YXNldC5pbnRlcnBvbGF0ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGRhdGEgPSBkYXRhc2V0LmRhdGE7XG4gICAgICB2YXIgaW5kZXggPSBkYXRhLmZpbmRJbmRleChmdW5jdGlvbihvKSB7XG4gICAgICAgIHJldHVybiBvLnggPj0geFZhbHVlO1xuICAgICAgfSk7XG4gICAgICB2YXIgcHJldiA9IGRhdGFbaW5kZXggLSAxXTtcbiAgICAgIHZhciBuZXh0ID0gZGF0YVtpbmRleF07XG5cbiAgICAgIGlmIChjaGFydC5kYXRhLmRhdGFzZXRzW2NoYXJ0SW5kZXhdLnN0ZXBwZWRMaW5lICYmIHByZXYpIHtcbiAgICAgICAgZGF0YXNldC5pbnRlcnBvbGF0ZWRWYWx1ZSA9IHByZXYueTtcbiAgICAgIH0gZWxzZSBpZiAocHJldiAmJiBuZXh0KSB7XG4gICAgICAgIHZhciBzbG9wZSA9IChuZXh0LnkgLSBwcmV2LnkpIC8gKG5leHQueCAtIHByZXYueCk7XG4gICAgICAgIGRhdGFzZXQuaW50ZXJwb2xhdGVkVmFsdWUgPSBwcmV2LnkgKyAoeFZhbHVlIC0gcHJldi54KSAqIHNsb3BlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YXNldC5pbnRlcnBvbGF0ZWRWYWx1ZSA9IE5hTjtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG59O1xuIl19
@@ -0,0 +1 @@
1
+ [{"__symbolic":"module","version":4,"metadata":{"ɵ0":{"__symbolic":"error","message":"Lambda not supported","line":17,"character":31}}}]
@@ -1,11 +1,13 @@
1
- import { BarController, BarElement, CategoryScale, Chart, Filler, Legend, LinearScale, LineController, LineElement, PointElement, } from 'chart.js';
1
+ import { BarController, BarElement, CategoryScale, Chart, Filler, Legend, LinearScale, LineController, LineElement, PointElement, Tooltip, } from 'chart.js';
2
2
  import annotationPlugin from 'chartjs-plugin-annotation';
3
+ import ChartDataLabels from 'chartjs-plugin-datalabels';
3
4
  import { mergeDeepAll } from '../../../helpers/merge-deep';
5
+ import MarkerPlugin from '../chart-js/chartjs-plugin-marker/chartjs-plugin-marker';
4
6
  import { CHART_GLOBAL_DEFAULTS } from '../configs/global-defaults.config';
5
7
  const CHART_SCALES = [CategoryScale, LinearScale];
6
8
  const CHART_ELEMENTS = [BarElement, LineElement, PointElement];
7
9
  const CHART_CONTROLLERS = [BarController, LineController];
8
- const CHART_PLUGINS = [annotationPlugin, Filler];
10
+ const CHART_PLUGINS = [annotationPlugin, Filler, ChartDataLabels, Tooltip, MarkerPlugin];
9
11
  /* Order matters; defaults must be merged after register as
10
12
  register modifies the Chart.defaults objects */
11
13
  Chart.register(Legend, ...CHART_SCALES, ...CHART_ELEMENTS, ...CHART_CONTROLLERS, ...CHART_PLUGINS);
@@ -16,4 +18,4 @@ Object.entries(CHART_GLOBAL_DEFAULTS).forEach(([key]) => {
16
18
  Chart.defaults[key] = mergedDefaults[key];
17
19
  });
18
20
  export { Chart };
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJlZC1jaGFydC1qcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9jaGFydC9jaGFydC1qcy9jb25maWd1cmVkLWNoYXJ0LWpzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxhQUFhLEVBQ2IsVUFBVSxFQUNWLGFBQWEsRUFDYixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixXQUFXLEVBQ1gsY0FBYyxFQUNkLFdBQVcsRUFDWCxZQUFZLEdBQ2IsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxnQkFBZ0IsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFMUUsTUFBTSxZQUFZLEdBQUcsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDbEQsTUFBTSxjQUFjLEdBQUcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQy9ELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDMUQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUVqRDtrREFDa0Q7QUFDbEQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxZQUFZLEVBQUUsR0FBRyxjQUFjLEVBQUUsR0FBRyxpQkFBaUIsRUFBRSxHQUFHLGFBQWEsQ0FBQyxDQUFDO0FBRW5HO29DQUNvQztBQUNwQyxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBQzNFLE1BQU0sQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUU7SUFDdEQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDLENBQUM7QUFFSCxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXJDb250cm9sbGVyLFxuICBCYXJFbGVtZW50LFxuICBDYXRlZ29yeVNjYWxlLFxuICBDaGFydCxcbiAgRmlsbGVyLFxuICBMZWdlbmQsXG4gIExpbmVhclNjYWxlLFxuICBMaW5lQ29udHJvbGxlcixcbiAgTGluZUVsZW1lbnQsXG4gIFBvaW50RWxlbWVudCxcbn0gZnJvbSAnY2hhcnQuanMnO1xuaW1wb3J0IGFubm90YXRpb25QbHVnaW4gZnJvbSAnY2hhcnRqcy1wbHVnaW4tYW5ub3RhdGlvbic7XG5cbmltcG9ydCB7IG1lcmdlRGVlcEFsbCB9IGZyb20gJy4uLy4uLy4uL2hlbHBlcnMvbWVyZ2UtZGVlcCc7XG5pbXBvcnQgeyBDSEFSVF9HTE9CQUxfREVGQVVMVFMgfSBmcm9tICcuLi9jb25maWdzL2dsb2JhbC1kZWZhdWx0cy5jb25maWcnO1xuXG5jb25zdCBDSEFSVF9TQ0FMRVMgPSBbQ2F0ZWdvcnlTY2FsZSwgTGluZWFyU2NhbGVdO1xuY29uc3QgQ0hBUlRfRUxFTUVOVFMgPSBbQmFyRWxlbWVudCwgTGluZUVsZW1lbnQsIFBvaW50RWxlbWVudF07XG5jb25zdCBDSEFSVF9DT05UUk9MTEVSUyA9IFtCYXJDb250cm9sbGVyLCBMaW5lQ29udHJvbGxlcl07XG5jb25zdCBDSEFSVF9QTFVHSU5TID0gW2Fubm90YXRpb25QbHVnaW4sIEZpbGxlcl07XG5cbi8qIE9yZGVyIG1hdHRlcnM7IGRlZmF1bHRzIG11c3QgYmUgbWVyZ2VkIGFmdGVyIHJlZ2lzdGVyIGFzIFxuICAgcmVnaXN0ZXIgbW9kaWZpZXMgdGhlIENoYXJ0LmRlZmF1bHRzIG9iamVjdHMgKi9cbkNoYXJ0LnJlZ2lzdGVyKExlZ2VuZCwgLi4uQ0hBUlRfU0NBTEVTLCAuLi5DSEFSVF9FTEVNRU5UUywgLi4uQ0hBUlRfQ09OVFJPTExFUlMsIC4uLkNIQVJUX1BMVUdJTlMpO1xuXG4vKiBDaGFydC5kZWZhdWx0cyBpcyByZWFkIG9ubHk7IHNldCBlYWNoIGtleSBtb2RpZmllZCBpbiBcbiAgIENIQVJUX0dMT0JBTF9ERUZBVUxUUyBtYW51YWxseSAqL1xuY29uc3QgbWVyZ2VkRGVmYXVsdHMgPSBtZXJnZURlZXBBbGwoQ2hhcnQuZGVmYXVsdHMsIENIQVJUX0dMT0JBTF9ERUZBVUxUUyk7XG5PYmplY3QuZW50cmllcyhDSEFSVF9HTE9CQUxfREVGQVVMVFMpLmZvckVhY2goKFtrZXldKSA9PiB7XG4gIENoYXJ0LmRlZmF1bHRzW2tleV0gPSBtZXJnZWREZWZhdWx0c1trZXldO1xufSk7XG5cbmV4cG9ydCB7IENoYXJ0IH07XG4iXX0=
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJlZC1jaGFydC1qcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9jaGFydC9jaGFydC1qcy9jb25maWd1cmVkLWNoYXJ0LWpzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxhQUFhLEVBQ2IsVUFBVSxFQUNWLGFBQWEsRUFDYixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixXQUFXLEVBQ1gsY0FBYyxFQUNkLFdBQVcsRUFDWCxZQUFZLEVBRVosT0FBTyxHQUNSLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxlQUFlLE1BQU0sMkJBQTJCLENBQUM7QUFFeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sWUFBWSxNQUFNLHlEQUF5RCxDQUFDO0FBQ25GLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRTFFLE1BQU0sWUFBWSxHQUFHLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ2xELE1BQU0sY0FBYyxHQUFHLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUMvRCxNQUFNLGlCQUFpQixHQUFHLENBQUMsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQzFELE1BQU0sYUFBYSxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFFekY7a0RBQ2tEO0FBQ2xELEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEdBQUcsWUFBWSxFQUFFLEdBQUcsY0FBYyxFQUFFLEdBQUcsaUJBQWlCLEVBQUUsR0FBRyxhQUFhLENBQUMsQ0FBQztBQUVuRztvQ0FDb0M7QUFDcEMsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQztBQUMzRSxNQUFNLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFO0lBQ3RELEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLENBQUMsQ0FBQyxDQUFDO0FBRUgsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmFyQ29udHJvbGxlcixcbiAgQmFyRWxlbWVudCxcbiAgQ2F0ZWdvcnlTY2FsZSxcbiAgQ2hhcnQsXG4gIEZpbGxlcixcbiAgTGVnZW5kLFxuICBMaW5lYXJTY2FsZSxcbiAgTGluZUNvbnRyb2xsZXIsXG4gIExpbmVFbGVtZW50LFxuICBQb2ludEVsZW1lbnQsXG4gIFRpbWVTY2FsZSxcbiAgVG9vbHRpcCxcbn0gZnJvbSAnY2hhcnQuanMnO1xuaW1wb3J0IGFubm90YXRpb25QbHVnaW4gZnJvbSAnY2hhcnRqcy1wbHVnaW4tYW5ub3RhdGlvbic7XG5pbXBvcnQgQ2hhcnREYXRhTGFiZWxzIGZyb20gJ2NoYXJ0anMtcGx1Z2luLWRhdGFsYWJlbHMnO1xuXG5pbXBvcnQgeyBtZXJnZURlZXBBbGwgfSBmcm9tICcuLi8uLi8uLi9oZWxwZXJzL21lcmdlLWRlZXAnO1xuaW1wb3J0IE1hcmtlclBsdWdpbiBmcm9tICcuLi9jaGFydC1qcy9jaGFydGpzLXBsdWdpbi1tYXJrZXIvY2hhcnRqcy1wbHVnaW4tbWFya2VyJztcbmltcG9ydCB7IENIQVJUX0dMT0JBTF9ERUZBVUxUUyB9IGZyb20gJy4uL2NvbmZpZ3MvZ2xvYmFsLWRlZmF1bHRzLmNvbmZpZyc7XG5cbmNvbnN0IENIQVJUX1NDQUxFUyA9IFtDYXRlZ29yeVNjYWxlLCBMaW5lYXJTY2FsZV07XG5jb25zdCBDSEFSVF9FTEVNRU5UUyA9IFtCYXJFbGVtZW50LCBMaW5lRWxlbWVudCwgUG9pbnRFbGVtZW50XTtcbmNvbnN0IENIQVJUX0NPTlRST0xMRVJTID0gW0JhckNvbnRyb2xsZXIsIExpbmVDb250cm9sbGVyXTtcbmNvbnN0IENIQVJUX1BMVUdJTlMgPSBbYW5ub3RhdGlvblBsdWdpbiwgRmlsbGVyLCBDaGFydERhdGFMYWJlbHMsIFRvb2x0aXAsIE1hcmtlclBsdWdpbl07XG5cbi8qIE9yZGVyIG1hdHRlcnM7IGRlZmF1bHRzIG11c3QgYmUgbWVyZ2VkIGFmdGVyIHJlZ2lzdGVyIGFzIFxuICAgcmVnaXN0ZXIgbW9kaWZpZXMgdGhlIENoYXJ0LmRlZmF1bHRzIG9iamVjdHMgKi9cbkNoYXJ0LnJlZ2lzdGVyKExlZ2VuZCwgLi4uQ0hBUlRfU0NBTEVTLCAuLi5DSEFSVF9FTEVNRU5UUywgLi4uQ0hBUlRfQ09OVFJPTExFUlMsIC4uLkNIQVJUX1BMVUdJTlMpO1xuXG4vKiBDaGFydC5kZWZhdWx0cyBpcyByZWFkIG9ubHk7IHNldCBlYWNoIGtleSBtb2RpZmllZCBpbiBcbiAgIENIQVJUX0dMT0JBTF9ERUZBVUxUUyBtYW51YWxseSAqL1xuY29uc3QgbWVyZ2VkRGVmYXVsdHMgPSBtZXJnZURlZXBBbGwoQ2hhcnQuZGVmYXVsdHMsIENIQVJUX0dMT0JBTF9ERUZBVUxUUyk7XG5PYmplY3QuZW50cmllcyhDSEFSVF9HTE9CQUxfREVGQVVMVFMpLmZvckVhY2goKFtrZXldKSA9PiB7XG4gIENoYXJ0LmRlZmF1bHRzW2tleV0gPSBtZXJnZWREZWZhdWx0c1trZXldO1xufSk7XG5cbmV4cG9ydCB7IENoYXJ0IH07XG4iXX0=