axidio-styleguide-library1-v2 0.2.10 → 0.2.12

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.
@@ -33,233 +33,337 @@ export class GuageChartComponent extends ComponentUniqueId {
33
33
  pointerTailLength: 5,
34
34
  pointerHeadLengthPercent: 0.7,
35
35
  labelInset: 10,
36
+ legendJustified: false,
36
37
  backgroundColor: '#FFFFFF',
37
- pointerColor: '#686868',
38
+ isDrilldownChart: undefined,
39
+ ringScaleFactor: 0,
40
+ textsAtCenterScaleFactor: 0,
38
41
  currentValueWidthScaleFactor: 60,
39
42
  currentValueHeightScaleFactor: 30,
40
- isDrilldownChart: undefined,
43
+ pointerColor: '#686868',
44
+ isToggleVisible: undefined,
45
+ selectedKpiTooltop: undefined,
46
+ isValueLableAdjust: undefined,
47
+ isTitleHidden: undefined,
41
48
  headerMenuOptions: HeaderConfigHelper.headerConfig.headerMenuOptions,
42
49
  };
43
50
  }
44
- // Computed property to check if alert menu is enabled
45
51
  get isAlertEnabled() {
46
- return this.chartConfiguration?.headerMenuOptions?.some((option) => option.id === 'editAlert');
52
+ return this.chartConfiguration?.headerMenuOptions?.some(option => option.id === 'editAlert');
47
53
  }
48
- ngOnInit() {
49
- this.mergeConfigurations();
50
- }
51
- ngOnChanges(changes) {
52
- if (changes['chartData'] || changes['customChartConfiguration']) {
53
- this.renderChart();
54
- }
54
+ ngOnChanges() {
55
+ let self = this;
56
+ d3.select('#' + self.uniqueId).remove();
57
+ this.initializeLineChart();
55
58
  }
56
59
  onResized(event) {
57
- this.renderChart();
60
+ let self = this;
61
+ d3.select('#' + self.uniqueId).remove();
62
+ this.initializeLineChart();
58
63
  }
59
- /** ---------------------------------------------
60
- * CHART RENDERING
61
- * --------------------------------------------- */
62
- renderChart() {
63
- if (!this.chartData || !this.chartData.data || !this.chartData.metaData)
64
- return;
65
- d3.select(`#${this.uniqueId}`).remove(); // Clean previous chart
66
- this.mergeConfigurations();
67
- const metaData = this.chartData.metaData;
68
- const data = this.chartData.data;
69
- this.setDataType(metaData);
70
- const colorMap = this.resolveColorMap(metaData.colorType);
71
- const dataDiffs = this.computeDataDiffs(data);
72
- const angleValues = this.computeAngles(dataDiffs);
73
- const chartWidth = this.getChartWidth();
74
- const chartHeight = this.getChartHeight();
75
- this.isHeaderVisible =
76
- this.chartConfiguration.isHeaderVisible !== undefined
77
- ? this.chartConfiguration.isHeaderVisible
78
- : this.isHeaderVisible;
79
- const svg = this.createSvgContainer(chartWidth, chartHeight);
80
- const radius = Math.min(chartWidth, chartHeight) / 2;
81
- this.adjustScaleFactors(radius);
82
- this.drawArcs(svg, dataDiffs, angleValues, colorMap, radius, metaData, data);
83
- this.drawPointer(svg, radius, data, metaData);
84
- this.drawLabels(svg, radius, data, dataDiffs, metaData);
85
- this.drawTextBlocks(svg, radius, metaData, chartWidth);
86
- this.centerSvg(svg, chartWidth, chartHeight);
87
- }
88
- /** Merge custom config into default config */
89
- mergeConfigurations() {
90
- Object.keys(this.defaultConfiguration).forEach((key) => {
91
- this.chartConfiguration[key] = ChartHelper.getValueByConfigurationType(key, this.defaultConfiguration, this.customChartConfiguration);
64
+ ngOnInit() { }
65
+ initializeLineChart() {
66
+ var self = this;
67
+ let data = [];
68
+ let metaData = null;
69
+ let colorMaps = [];
70
+ let angleValue = [];
71
+ let data_ready = [];
72
+ let labelArray = [];
73
+ let colorType = null;
74
+ let isria = this.customChartConfiguration.isRia;
75
+ for (var i in this.defaultConfiguration) {
76
+ this.chartConfiguration[i] = ChartHelper.getValueByConfigurationType(i, this.defaultConfiguration, this.customChartConfiguration);
77
+ }
78
+ data = this.chartData.data;
79
+ metaData = this.chartData.metaData;
80
+ colorType = metaData.colorType;
81
+ if (colorType == 'low') {
82
+ colorMaps = this.chartConfiguration.low_colorMap;
83
+ }
84
+ else {
85
+ colorMaps = this.chartConfiguration.high_colorMap;
86
+ }
87
+ if (metaData.dataType) {
88
+ this.dataType = metaData.dataType;
89
+ if (this.dataType == 'USD') {
90
+ this.datatype_status = true;
91
+ this.dataType = '$ ';
92
+ }
93
+ }
94
+ data.map(function (dataUnit, i) {
95
+ if (i < data.length - 1) {
96
+ let diff = data[i + 1] - data[i];
97
+ data_ready.push(diff);
98
+ }
92
99
  });
93
- }
94
- /** Handle currency or unit type */
95
- setDataType(metaData) {
96
- this.dataType = metaData.dataType || '';
97
- this.datatype_status = this.dataType === 'USD';
98
- if (this.datatype_status)
99
- this.dataType = '$ ';
100
- }
101
- /** Resolve color map based on colorType */
102
- resolveColorMap(colorType) {
103
- return colorType === 'low'
104
- ? this.chartConfiguration.low_colorMap
105
- : this.chartConfiguration.high_colorMap;
106
- }
107
- /** Compute difference between consecutive data points */
108
- computeDataDiffs(data) {
109
- return data.slice(0, -1).map((val, i) => data[i + 1] - val);
110
- }
111
- /** Convert data differences into cumulative angles */
112
- computeAngles(dataDiffs) {
113
- const total = dataDiffs.reduce((sum, val) => sum + val, 0);
114
- return dataDiffs.map((unit, i, arr) => i === 0 ? (unit / total) * 180 : arr.slice(0, i + 1).reduce((sum, x) => sum + (x / total) * 180, 0));
115
- }
116
- /** D3 utility methods */
117
- deg2rad(deg) {
118
- return (deg * Math.PI) / 180;
119
- }
120
- getChartWidth() {
121
- const container = d3.select(this.chartContainer.nativeElement);
122
- return parseInt(container.style('width')) - this.chartConfiguration.margin.left - this.chartConfiguration.margin.right;
123
- }
124
- getChartHeight() {
125
- const wrapper = d3.select(this.gaugeWrapper.nativeElement);
126
- return (parseInt(wrapper.style('height')) -
127
- this.chartConfiguration.margin.top -
128
- this.chartConfiguration.margin.bottom -
129
- 56);
130
- }
131
- createSvgContainer(width, height) {
132
- return d3
133
- .select(this.chartContainer.nativeElement)
100
+ var chartContainer = d3.select(this.containerElt.nativeElement);
101
+ var guagecontainer = d3.select(this.guagecontainerElt.nativeElement);
102
+ var margin = this.chartConfiguration.margin;
103
+ var width = parseInt(chartContainer.style('width')) - margin.left - margin.right;
104
+ var height = parseInt(guagecontainer.style('height')) -
105
+ margin.top -
106
+ margin.bottom -
107
+ 56; //chart header height
108
+ if (this.chartConfiguration.isHeaderVisible != undefined)
109
+ this.isHeaderVisible = this.chartConfiguration.isHeaderVisible;
110
+ var svg = chartContainer
134
111
  .append('svg')
135
- .attr('id', this.uniqueId)
136
- .attr('width', width + this.chartConfiguration.margin.left + this.chartConfiguration.margin.right)
137
- .attr('height', height + this.chartConfiguration.margin.top + this.chartConfiguration.margin.bottom)
112
+ .attr('id', self.uniqueId)
113
+ .attr('width', width + margin.left + margin.right)
114
+ .attr('height', height + margin.top + margin.bottom)
138
115
  .call(ChartHelper.responsivefy)
139
116
  .append('g');
140
- }
141
- adjustScaleFactors(radius) {
142
- const cfg = this.chartConfiguration;
143
- if (cfg.isDrilldownChart) {
144
- cfg.currentValueWidthScaleFactor += 40;
145
- cfg.currentValueHeightScaleFactor += 20;
117
+ var radius = Math.min(width, height) / 2;
118
+ if (this.chartConfiguration.isDrilldownChart) {
119
+ this.chartConfiguration.currentValueWidthScaleFactor += 40;
120
+ this.chartConfiguration.currentValueHeightScaleFactor += 20;
146
121
  }
147
- else if (window.innerWidth > 1400) {
148
- cfg.currentValueHeightScaleFactor += 15;
149
- cfg.currentValueWidthScaleFactor *= 2;
122
+ else {
123
+ if (window.innerWidth > 1400) {
124
+ this.chartConfiguration.currentValueHeightScaleFactor += 15;
125
+ this.chartConfiguration.currentValueWidthScaleFactor *= 2;
126
+ }
150
127
  }
151
- }
152
- /** Draw the colored arcs */
153
- drawArcs(svg, dataDiffs, angleValues, colorMaps, radius, metaData, data) {
154
- const self = this;
155
- const arc = d3.arc()
156
- .innerRadius(radius - self.chartConfiguration.ringWidth - self.chartConfiguration.ringInset)
128
+ let topTextPosition = radius / 2 - 10;
129
+ let midTextPosition = topTextPosition + this.chartConfiguration.currentValueHeightScaleFactor;
130
+ let bottomTextPosition = midTextPosition + this.chartConfiguration.currentValueHeightScaleFactor;
131
+ var data_length = data.length;
132
+ function deg2rad(deg) {
133
+ return (deg * Math.PI) / 180;
134
+ }
135
+ let tempArray = [];
136
+ let total = 0;
137
+ data_ready.map(function (unit) {
138
+ total += unit;
139
+ });
140
+ data_ready.map(function (unit, i) {
141
+ var angle = (unit / total) * 180;
142
+ if (i === 0) {
143
+ tempArray.push(angle);
144
+ }
145
+ else {
146
+ let currentAngle = tempArray[i - 1] + angle;
147
+ tempArray.push(currentAngle);
148
+ }
149
+ });
150
+ angleValue = tempArray;
151
+ var arc = d3
152
+ .arc()
153
+ .innerRadius(radius -
154
+ self.chartConfiguration.ringWidth -
155
+ self.chartConfiguration.ringInset)
157
156
  .outerRadius(radius)
158
- .startAngle((_, i) => self.deg2rad(i === 0 ? self.chartConfiguration.minAngle : self.chartConfiguration.minAngle + angleValues[i - 1]))
159
- .endAngle((_, i) => self.deg2rad(i === dataDiffs.length - 1 ? self.chartConfiguration.maxAngle : self.chartConfiguration.minAngle + angleValues[i]));
160
- const centerTx = `translate(${radius},${radius})`;
161
- svg.append('g')
162
- .attr('class', 'arc')
163
- .attr('transform', centerTx)
157
+ .startAngle(function (d, i) {
158
+ var ratio;
159
+ if (i === 0) {
160
+ ratio = self.chartConfiguration.minAngle;
161
+ }
162
+ else {
163
+ ratio = self.chartConfiguration.minAngle + angleValue[i - 1];
164
+ }
165
+ return deg2rad(ratio);
166
+ })
167
+ .endAngle(function (d, i) {
168
+ var ratio;
169
+ if (i === data_ready.length - 1) {
170
+ ratio = self.chartConfiguration.maxAngle;
171
+ }
172
+ else {
173
+ ratio = self.chartConfiguration.minAngle + angleValue[i];
174
+ }
175
+ return deg2rad(ratio);
176
+ });
177
+ function centerTranslation() {
178
+ return 'translate(' + radius + ',' + radius + ')';
179
+ }
180
+ var centerTx = centerTranslation();
181
+ var tickData = d3
182
+ .range(self.chartConfiguration.majorTicks)
183
+ .map(function (i) {
184
+ return 1 / self.chartConfiguration.majorTicks;
185
+ });
186
+ var arcs = svg.append('g').attr('class', 'arc').attr('transform', centerTx);
187
+ arcs
164
188
  .selectAll('path')
165
- .data(dataDiffs)
189
+ .data(data_ready)
166
190
  .enter()
167
191
  .append('path')
168
- .attr('fill', (_, i) => colorMaps[i])
169
- .style('cursor', () => metaData.currentValue > 0 && metaData.hasDrillDown && !this.customChartConfiguration.isRia ? 'pointer' : 'default')
170
- .attr('d', arc)
171
- .on('click', (event, d) => {
172
- if (metaData.hasDrillDown && metaData.currentValue > 0) {
173
- this.handleClick(`${data[0]} - ${data[data.length - 1]}`);
192
+ .on('click', function (d) {
193
+ if (!metaData.hasDrillDown || metaData.currentValue == 0) {
194
+ return;
174
195
  }
196
+ let range = getRange(d);
197
+ self.handleClick(range);
198
+ })
199
+ .attr('fill', function (d, i) {
200
+ return colorMaps[i];
201
+ })
202
+ .attr('id', function (d, i) {
203
+ return colorMaps[i];
204
+ })
205
+ .attr('d', arc)
206
+ // .style('cursor', 'pointer');
207
+ .style('cursor', function (d) {
208
+ if (metaData.currentValue > 0 && metaData.hasDrillDown && !isria)
209
+ return 'pointer';
210
+ else
211
+ return 'default';
175
212
  });
176
- }
177
- /** Draw the pointer indicator */
178
- drawPointer(svg, radius, data, metaData) {
179
- const cfg = this.chartConfiguration;
180
- const pointerLength = Math.round(radius * cfg.pointerHeadLengthPercent);
181
- const lineData = [
182
- [cfg.pointerWidth / 2, 0],
183
- [0, -pointerLength],
184
- [-(cfg.pointerWidth / 2), 0],
185
- [0, cfg.pointerTailLength],
186
- [cfg.pointerWidth / 2, 0],
213
+ let getRange = function (d) {
214
+ let index = data_ready.indexOf(d);
215
+ return data[0] + ' and ' + data[data.length - 1];
216
+ };
217
+ let pointerHeadLength = Math.round(radius * self.chartConfiguration.pointerHeadLengthPercent);
218
+ var lineData = [
219
+ [self.chartConfiguration.pointerWidth / 2, 0],
220
+ [0, -pointerHeadLength],
221
+ [-(self.chartConfiguration.pointerWidth / 2), 0],
222
+ [0, self.chartConfiguration.pointerTailLength],
223
+ [self.chartConfiguration.pointerWidth / 2, 0],
187
224
  ];
188
- const pointerLine = d3.line();
189
- const pg = svg.append('g').attr('class', 'pointer').attr('transform', `translate(${radius},${radius})`);
190
- const pointerValue = metaData.currentValue - data[0];
191
- const range = data[data.length - 1] - data[0];
192
- const angle = cfg.minAngle + (pointerValue / range) * 180;
225
+ var pointerLine = d3.line();
226
+ var pg = svg
227
+ .append('g')
228
+ .data([lineData])
229
+ .attr('class', 'pointer')
230
+ .attr('transform', centerTx);
231
+ var pointerValue = metaData.currentValue - data[0];
232
+ var range = data[data_length - 1] - data[0];
233
+ var pointerAngle = self.chartConfiguration.minAngle + (pointerValue / range) * 180;
193
234
  pg.append('path')
194
- .attr('d', pointerLine(lineData))
195
- .attr('fill', cfg.pointerColor)
196
- .attr('transform', `rotate(${angle}) translate(0,${-radius + cfg.ringWidth + pointerLength})`);
197
- }
198
- /** Draw the numeric labels around the arc */
199
- drawLabels(svg, radius, data, dataDiffs, metaData) {
200
- const cfg = this.chartConfiguration;
201
- const range = data[data.length - 1] - data[0];
202
- let cumulative = 0;
203
- const labels = [{ name: data[0], value: 0 }];
204
- dataDiffs.forEach((d, i) => {
205
- cumulative += d;
206
- labels.push({ name: data[i + 1], value: cumulative });
235
+ .attr('d', pointerLine)
236
+ .attr('fill', self.chartConfiguration.pointerColor)
237
+ .attr('transform', 'rotate(' +
238
+ pointerAngle +
239
+ ') translate(0,' +
240
+ (-radius + self.chartConfiguration.ringWidth + pointerHeadLength) +
241
+ ')');
242
+ var lg = svg.append('g').attr('class', 'label').attr('transform', centerTx);
243
+ let labelArrayTemp = [{ name: data[0], value: 0 }];
244
+ let count = 0;
245
+ data_ready.map(function (dataUnit, i) {
246
+ count += dataUnit;
247
+ let temp = { name: data[i + 1], value: count };
248
+ labelArrayTemp.push(temp);
207
249
  });
208
- const labelGroup = svg.append('g').attr('class', 'label').attr('transform', `translate(${radius},${radius})`);
209
- labelGroup.selectAll('.tick-label')
210
- .data(labels)
250
+ labelArray = labelArrayTemp;
251
+ lg.selectAll('.bubble')
252
+ .data(labelArray)
211
253
  .enter()
254
+ .append('g')
255
+ .attr('transform', function (d) {
256
+ var newAngle = self.chartConfiguration.minAngle + (d.value / range) * 180;
257
+ return ('rotate(' +
258
+ newAngle +
259
+ ') translate(0,' +
260
+ (self.chartConfiguration.labelInset - radius - 20) +
261
+ ')');
262
+ })
263
+ .append('g')
264
+ .attr('transform', function (d, i) {
265
+ var newAngle = self.chartConfiguration.minAngle + (d.value / range) * 180;
266
+ if (i == 0 && self.chartConfiguration.isValueLableAdjust) {
267
+ return 'rotate(' + (0 - newAngle) + ') translate(-27,0)';
268
+ }
269
+ if (i == labelArray.length - 1 &&
270
+ self.chartConfiguration.isValueLableAdjust) {
271
+ return 'rotate(' + (0 - newAngle) + ') translate(-15,0)';
272
+ }
273
+ return 'rotate(' + (0 - newAngle) + ') translate(-17,0)';
274
+ })
212
275
  .append('text')
213
- .attr('transform', (d) => {
214
- const angle = cfg.minAngle + (d.value / range) * 180;
215
- return `rotate(${angle}) translate(0,${cfg.labelInset - radius - 20}) rotate(${-angle})`;
276
+ .attr('style', function (d) {
277
+ if (window.innerWidth < 1400)
278
+ return 'font-size: ' + '12px' + '; font-weight:' + '600;';
279
+ else
280
+ return 'font-size: ' + '14px' + '; font-weight:' + '600;';
216
281
  })
217
282
  .attr('fill', 'var(--chart-text-color)')
218
- .style('font-size', window.innerWidth < 1400 ? '12px' : '14px')
219
- .style('font-weight', '600')
220
- .text((d) => `${d.name}${metaData.dataType || ''}`);
221
- }
222
- /** Draw central text blocks (value, status, date range) */
223
- drawTextBlocks(svg, radius, metaData, width) {
224
- const cfg = this.chartConfiguration;
225
- const top = radius / 2 - 10;
226
- const mid = top + cfg.currentValueHeightScaleFactor;
227
- const bottom = mid + cfg.currentValueHeightScaleFactor;
228
- // Current value
229
- svg.append('foreignObject')
230
- .attr('transform', `translate(${radius - cfg.currentValueWidthScaleFactor / 2},${top})`)
231
- .attr('width', cfg.currentValueWidthScaleFactor + 8)
232
- .attr('height', cfg.currentValueHeightScaleFactor)
283
+ .text(function (d) {
284
+ if (metaData.dataType) {
285
+ return d.name + metaData.dataType;
286
+ }
287
+ return d.name;
288
+ });
289
+ svg
290
+ .append('foreignObject')
291
+ .attr('transform', 'translate(' +
292
+ (radius - this.chartConfiguration.currentValueWidthScaleFactor / 2) +
293
+ ',' +
294
+ topTextPosition +
295
+ ')')
296
+ .attr('width', this.chartConfiguration.currentValueWidthScaleFactor + 8)
297
+ .attr('height', this.chartConfiguration.currentValueHeightScaleFactor)
233
298
  .append('xhtml:div')
234
299
  .attr('class', 'value-display')
235
- .html(`${metaData.currentValue}${metaData.dataType || ''}`);
236
- // Status
300
+ .style('height', this.chartConfiguration.currentValueHeightScaleFactor + 10 + 'px')
301
+ .style('font-size', function () {
302
+ if (window.innerWidth > 1500) {
303
+ self.chartConfiguration.currentValueHeightScaleFactor - 25 + 'px';
304
+ }
305
+ else {
306
+ self.chartConfiguration.currentValueHeightScaleFactor - 15 + 'px';
307
+ }
308
+ })
309
+ .html(metaData.currentValue + metaData.dataType);
237
310
  if (metaData.status) {
238
- const widthTemp = metaData.status.length > 4 ? 210 : 120;
239
- svg.append('foreignObject')
240
- .attr('transform', `translate(${radius - widthTemp / 2},${mid})`)
311
+ let widthTemp = metaData.status.length > 4 ? 210 : 120;
312
+ svg
313
+ .append('foreignObject')
314
+ .attr('transform', 'translate(' + (radius - widthTemp / 2) + ',' + midTextPosition + ')')
241
315
  .attr('width', widthTemp)
316
+ .attr('height', this.chartConfiguration.currentValueHeightScaleFactor + 10)
242
317
  .append('xhtml:div')
243
318
  .attr('class', 'status-display')
319
+ .style('font-size', this.chartConfiguration.currentValueHeightScaleFactor - 25 + 'px')
244
320
  .html(metaData.status);
245
321
  }
246
- // Date range
247
- if (metaData.dateRange) {
248
- svg.append('foreignObject')
249
- .attr('transform', `translate(${radius - 105},${bottom})`)
250
- .attr('width', 210)
251
- .append('xhtml:div')
252
- .attr('class', 'daterange-display')
253
- .html(`<i class="fa fa-calendar"></i> ${metaData.dateRange}`);
254
- }
255
- }
256
- centerSvg(svg, width, height) {
257
- const containerMid = width / 2;
258
- const nodeHalf = svg.node().getBoundingClientRect().width / 2;
259
- const xOffset = containerMid - nodeHalf;
260
- svg.attr('transform', `translate(${xOffset + this.chartConfiguration.margin.left},${this.chartConfiguration.margin.top})`);
322
+ svg
323
+ .append('foreignObject')
324
+ .attr('transform', 'translate(' + (radius - 105) + ',' + bottomTextPosition + ')')
325
+ .attr('width', 210)
326
+ .attr('height', this.chartConfiguration.currentValueHeightScaleFactor)
327
+ .append('xhtml:div')
328
+ .attr('class', 'daterange-display')
329
+ .style('font-size', function () {
330
+ if (self.chartConfiguration.isDrilldownChart) {
331
+ {
332
+ if (window.innerWidth < 1400)
333
+ return '14px';
334
+ else
335
+ return '18px';
336
+ }
337
+ }
338
+ else {
339
+ if (window.innerWidth < 1400)
340
+ return '14px';
341
+ else
342
+ return '18px';
343
+ }
344
+ })
345
+ .html(function () {
346
+ var desiredSize;
347
+ if (window.innerWidth < 1400)
348
+ desiredSize = '14px';
349
+ else
350
+ desiredSize = '18px';
351
+ if (metaData.dateRange)
352
+ return ('<span class="marginright-3"><i class="fa fa-calendar"></i></span><span> ' +
353
+ metaData.dateRange +
354
+ '</span>');
355
+ else
356
+ return '';
357
+ });
358
+ var containerMidWidth = parseInt(chartContainer.style('width')) / 2;
359
+ var nodeHalfWidth = svg.node().getBoundingClientRect().width / 2;
360
+ var updatedStartingPoint = containerMidWidth - nodeHalfWidth;
361
+ svg.attr('transform', 'translate(' +
362
+ (updatedStartingPoint + margin.left) +
363
+ ',' +
364
+ margin.top +
365
+ ')');
261
366
  }
262
- /** Event Emitters */
263
367
  handleClick(d) {
264
368
  this.clickEvent.emit(d);
265
369
  }
@@ -267,15 +371,15 @@ export class GuageChartComponent extends ComponentUniqueId {
267
371
  this.headerMenuclickEvent.emit(id);
268
372
  }
269
373
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GuageChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
270
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: GuageChartComponent, selector: "lib-guage-chart", inputs: { chartData: "chartData", customChartConfiguration: "customChartConfiguration" }, outputs: { clickEvent: "clickEvent", headerMenuclickEvent: "headerMenuclickEvent" }, viewQueries: [{ propertyName: "chartContainer", first: true, predicate: ["guagechartcontainer"], descendants: true, static: true }, { propertyName: "gaugeWrapper", first: true, predicate: ["guagecontainer"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #guagecontainer class=\"lib-chart-wrapper\" style=\"background-color: var(--card-bg);\"\r\n (resized)=\"onResized($event)\">\r\n <div class=\"header-alt\" *ngIf=\"!isHeaderVisible\">\r\n <lib-chart-header-v2 [chartData]=\"chartData\" [chartConfiguration]=\"chartConfiguration\"\r\n (clickEvent)=\"handleClick($event)\"></lib-chart-header-v2>\r\n </div>\r\n <lib-chart-header-v1 [title]=\"chartData.metaData.title\" [hasDrillDown]=\"chartData.metaData.hasDrillDown\"\r\n [isEditEnabled]=\"chartData.metaData.isEditEnabled\" [isria]=\"customChartConfiguration.isRia\" [menuOptions]=\"chartConfiguration.headerMenuOptions\"\r\n [selectedKpiTooltop]=\"chartConfiguration.selectedKpiTooltop\" (menuOptionClickEvent)=\"handleHeaderMenuClick($event)\"\r\n [isAlertEnabled]=\"isAlertEnabled\" *ngIf=\"isHeaderVisible\"></lib-chart-header-v1>\r\n <div [style.height]=\"chartConfiguration.svgHeight\" id=\"guagechartcontainer\" #guagechartcontainer\r\n class=\"lib-chart-svg guagecontainer\"></div>\r\n</div>", styles: [".lib-guage-label-wrapper{width:100%;display:inline-block;text-align:center}.lib-guage-label-style{width:63%;display:inline-block;text-align:left}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.bc-gauge-chart{background-color:#000!important}.guagecontainer{margin-top:3%;height:53%}.gauge-currentvalue-value{font-weight:700;color:#000;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px}.guage-label-item{font-size:.85em;display:flex;flex-direction:column}.gauge-daterange{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:12px;letter-spacing:0px;color:#374068;opacity:1}.gauge-daterange-value{font-weight:700}.gauge-currentvalue{margin-bottom:5px}.value-display{color:var(--font-color);font-weight:700;border-radius:3px;display:flex;align-items:center;justify-content:center}.status-display{display:flex;align-items:center;justify-content:center}.calendar-icon{border:1px solid #000000;border-top:3px solid;height:10px;margin-right:5px}.calendar-icon>:first-child{visibility:hidden}.daterange-display{display:flex;align-items:center;justify-content:center;height:100%}.marginright-3{margin-right:3px}.hidden-text,.hidden{visibility:hidden}@media screen and (min-width: 1024px) and (min-height: 400px){.guage-label-item{font-size:14px!important}.guage-item-text{font-size:16px!important}}@media screen and (min-width: 1024px) and (min-height: 1000px){.guage-label-item{font-size:14px!important}.guage-item-text{font-size:16px!important}}@media screen and (min-width: 1024px) and (min-height: 1500px){.guage-label-item{font-size:14px!important}.guage-item-text{font-size:16px!important}}@media screen and (min-width: 1366px) and (min-height: 400px){.guage-label-item{font-size:16px!important}.guage-item-text{font-size:18px!important}}@media screen and (min-width: 1366px) and (min-height: 1000px){.guage-label-item{font-size:16px!important}.guage-item-text{font-size:18px!important}}@media screen and (min-width: 1366px) and (min-height: 1500px){.guage-label-item{font-size:16px!important}.guage-item-text{font-size:18px!important}}@media screen and (min-width: 1920px) and (min-height: 400px){.guage-label-item{font-size:18px!important}.guage-item-text{font-size:20px!important}}@media screen and (min-width: 1920px) and (min-height: 1000px){.guage-label-item{font-size:18px!important}.guage-item-text{font-size:20px!important}}@media screen and (min-width: 1920px) and (min-height: 1500px){.guage-label-item{font-size:18px!important}.guage-item-text{font-size:20px!important}}@media screen and (min-width: 2560px) and (min-height: 500px){.guage-label-item{font-size:20px!important}.guage-item-text{font-size:22px!important}}@media screen and (min-width: 2560px) and (min-height: 1000px){.guage-label-item{font-size:20px!important}.guage-item-text{font-size:22px!important}}@media screen and (min-width: 2560px) and (min-height: 1500px){.guage-label-item{font-size:20px!important}.guage-item-text{font-size:22px!important}}.switch1{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch1 input{opacity:0;width:0;height:0}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.marginLeft-40{margin-left:40px}.flex-inline{display:flex;justify-content:center;align-items:center;font-size:14px}@media (min-height: 550px){.value-display{font-size:14px}}@media (min-height: 900px){.guagecontainer{margin-top:6%}.value-display{font-size:25px}}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background){background-color:#2e3640}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background) .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ResizedDirective, selector: "[resized]", outputs: ["resized"] }, { kind: "component", type: i3.ChartHeaderV1Component, selector: "lib-chart-header-v1", inputs: ["isAlertEnabled", "title", "menuOptions", "isEditEnabled", "isria", "hasDrillDown", "selectedKpiTooltop"], outputs: ["menuOptionClickEvent"] }, { kind: "component", type: i4.ChartHeaderV2Component, selector: "lib-chart-header-v2", inputs: ["chartData", "chartConfiguration"], outputs: ["clickEvent", "zoomInZoomOutClick"] }], encapsulation: i0.ViewEncapsulation.None }); }
374
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: GuageChartComponent, selector: "lib-guage-chart", inputs: { chartData: "chartData", customChartConfiguration: "customChartConfiguration" }, outputs: { clickEvent: "clickEvent", headerMenuclickEvent: "headerMenuclickEvent" }, viewQueries: [{ propertyName: "containerElt", first: true, predicate: ["guagechartcontainer"], descendants: true, static: true }, { propertyName: "guagecontainerElt", first: true, predicate: ["guagecontainer"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #guagecontainer class=\"lib-chart-wrapper\" style=\"background-color: var(--card-bg);\"\r\n (resized)=\"onResized($event)\">\r\n <div class=\"header-alt\" *ngIf=\"!isHeaderVisible\">\r\n <lib-chart-header-v2 [chartData]=\"chartData\" [chartConfiguration]=\"chartConfiguration\"\r\n (clickEvent)=\"handleClick($event)\"></lib-chart-header-v2>\r\n </div>\r\n <lib-chart-header-v1 [title]=\"chartData.metaData.title\" [hasDrillDown]=\"chartData.metaData.hasDrillDown\"\r\n [isEditEnabled]=\"chartData.metaData.isEditEnabled\" [isria]=\"customChartConfiguration.isRia\" [menuOptions]=\"chartConfiguration.headerMenuOptions\"\r\n [selectedKpiTooltop]=\"chartConfiguration.selectedKpiTooltop\" (menuOptionClickEvent)=\"handleHeaderMenuClick($event)\"\r\n [isAlertEnabled]=\"isAlertEnabled\" *ngIf=\"isHeaderVisible\"></lib-chart-header-v1>\r\n <div [style.height]=\"chartConfiguration.svgHeight\" id=\"guagechartcontainer\" #guagechartcontainer\r\n class=\"lib-chart-svg guagecontainer\"></div>\r\n</div>", styles: [".lib-guage-label-wrapper{width:100%;display:inline-block;text-align:center}.lib-guage-label-style{width:63%;display:inline-block;text-align:left}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.bc-gauge-chart{background-color:#000!important}.guagecontainer{margin-top:3%;height:53%}.gauge-currentvalue-value{font-weight:700;color:#000;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px}.guage-label-item{font-size:.85em;display:flex;flex-direction:column}.gauge-daterange{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:12px;letter-spacing:0px;color:#374068;opacity:1}.gauge-daterange-value{font-weight:700}.gauge-currentvalue{margin-bottom:5px}.value-display{color:var(--font-color);font-weight:700;border-radius:3px;display:flex;align-items:center;justify-content:center}.status-display{display:flex;align-items:center;justify-content:center}.calendar-icon{border:1px solid #000000;border-top:3px solid;height:10px;margin-right:5px}.calendar-icon>:first-child{visibility:hidden}.daterange-display{display:flex;align-items:center;justify-content:center;height:100%}.marginright-3{margin-right:3px}.hidden-text,.hidden{visibility:hidden}@media screen and (min-width: 1024px) and (min-height: 400px){.guage-label-item{font-size:14px!important}.guage-item-text{font-size:16px!important}}@media screen and (min-width: 1024px) and (min-height: 1000px){.guage-label-item{font-size:14px!important}.guage-item-text{font-size:16px!important}}@media screen and (min-width: 1024px) and (min-height: 1500px){.guage-label-item{font-size:14px!important}.guage-item-text{font-size:16px!important}}@media screen and (min-width: 1366px) and (min-height: 400px){.guage-label-item{font-size:16px!important}.guage-item-text{font-size:18px!important}}@media screen and (min-width: 1366px) and (min-height: 1000px){.guage-label-item{font-size:16px!important}.guage-item-text{font-size:18px!important}}@media screen and (min-width: 1366px) and (min-height: 1500px){.guage-label-item{font-size:16px!important}.guage-item-text{font-size:18px!important}}@media screen and (min-width: 1920px) and (min-height: 400px){.guage-label-item{font-size:18px!important}.guage-item-text{font-size:20px!important}}@media screen and (min-width: 1920px) and (min-height: 1000px){.guage-label-item{font-size:18px!important}.guage-item-text{font-size:20px!important}}@media screen and (min-width: 1920px) and (min-height: 1500px){.guage-label-item{font-size:18px!important}.guage-item-text{font-size:20px!important}}@media screen and (min-width: 2560px) and (min-height: 500px){.guage-label-item{font-size:20px!important}.guage-item-text{font-size:22px!important}}@media screen and (min-width: 2560px) and (min-height: 1000px){.guage-label-item{font-size:20px!important}.guage-item-text{font-size:22px!important}}@media screen and (min-width: 2560px) and (min-height: 1500px){.guage-label-item{font-size:20px!important}.guage-item-text{font-size:22px!important}}.switch1{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch1 input{opacity:0;width:0;height:0}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.marginLeft-40{margin-left:40px}.flex-inline{display:flex;justify-content:center;align-items:center;font-size:14px}@media (min-height: 550px){.value-display{font-size:14px}}@media (min-height: 900px){.guagecontainer{margin-top:6%}.value-display{font-size:25px}}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background){background-color:#2e3640}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background) .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ResizedDirective, selector: "[resized]", outputs: ["resized"] }, { kind: "component", type: i3.ChartHeaderV1Component, selector: "lib-chart-header-v1", inputs: ["isAlertEnabled", "title", "menuOptions", "isEditEnabled", "isria", "hasDrillDown", "selectedKpiTooltop"], outputs: ["menuOptionClickEvent"] }, { kind: "component", type: i4.ChartHeaderV2Component, selector: "lib-chart-header-v2", inputs: ["chartData", "chartConfiguration"], outputs: ["clickEvent", "zoomInZoomOutClick"] }], encapsulation: i0.ViewEncapsulation.None }); }
271
375
  }
272
376
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GuageChartComponent, decorators: [{
273
377
  type: Component,
274
378
  args: [{ selector: 'lib-guage-chart', encapsulation: ViewEncapsulation.None, template: "<div #guagecontainer class=\"lib-chart-wrapper\" style=\"background-color: var(--card-bg);\"\r\n (resized)=\"onResized($event)\">\r\n <div class=\"header-alt\" *ngIf=\"!isHeaderVisible\">\r\n <lib-chart-header-v2 [chartData]=\"chartData\" [chartConfiguration]=\"chartConfiguration\"\r\n (clickEvent)=\"handleClick($event)\"></lib-chart-header-v2>\r\n </div>\r\n <lib-chart-header-v1 [title]=\"chartData.metaData.title\" [hasDrillDown]=\"chartData.metaData.hasDrillDown\"\r\n [isEditEnabled]=\"chartData.metaData.isEditEnabled\" [isria]=\"customChartConfiguration.isRia\" [menuOptions]=\"chartConfiguration.headerMenuOptions\"\r\n [selectedKpiTooltop]=\"chartConfiguration.selectedKpiTooltop\" (menuOptionClickEvent)=\"handleHeaderMenuClick($event)\"\r\n [isAlertEnabled]=\"isAlertEnabled\" *ngIf=\"isHeaderVisible\"></lib-chart-header-v1>\r\n <div [style.height]=\"chartConfiguration.svgHeight\" id=\"guagechartcontainer\" #guagechartcontainer\r\n class=\"lib-chart-svg guagecontainer\"></div>\r\n</div>", styles: [".lib-guage-label-wrapper{width:100%;display:inline-block;text-align:center}.lib-guage-label-style{width:63%;display:inline-block;text-align:left}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.bc-gauge-chart{background-color:#000!important}.guagecontainer{margin-top:3%;height:53%}.gauge-currentvalue-value{font-weight:700;color:#000;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px}.guage-label-item{font-size:.85em;display:flex;flex-direction:column}.gauge-daterange{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:12px;letter-spacing:0px;color:#374068;opacity:1}.gauge-daterange-value{font-weight:700}.gauge-currentvalue{margin-bottom:5px}.value-display{color:var(--font-color);font-weight:700;border-radius:3px;display:flex;align-items:center;justify-content:center}.status-display{display:flex;align-items:center;justify-content:center}.calendar-icon{border:1px solid #000000;border-top:3px solid;height:10px;margin-right:5px}.calendar-icon>:first-child{visibility:hidden}.daterange-display{display:flex;align-items:center;justify-content:center;height:100%}.marginright-3{margin-right:3px}.hidden-text,.hidden{visibility:hidden}@media screen and (min-width: 1024px) and (min-height: 400px){.guage-label-item{font-size:14px!important}.guage-item-text{font-size:16px!important}}@media screen and (min-width: 1024px) and (min-height: 1000px){.guage-label-item{font-size:14px!important}.guage-item-text{font-size:16px!important}}@media screen and (min-width: 1024px) and (min-height: 1500px){.guage-label-item{font-size:14px!important}.guage-item-text{font-size:16px!important}}@media screen and (min-width: 1366px) and (min-height: 400px){.guage-label-item{font-size:16px!important}.guage-item-text{font-size:18px!important}}@media screen and (min-width: 1366px) and (min-height: 1000px){.guage-label-item{font-size:16px!important}.guage-item-text{font-size:18px!important}}@media screen and (min-width: 1366px) and (min-height: 1500px){.guage-label-item{font-size:16px!important}.guage-item-text{font-size:18px!important}}@media screen and (min-width: 1920px) and (min-height: 400px){.guage-label-item{font-size:18px!important}.guage-item-text{font-size:20px!important}}@media screen and (min-width: 1920px) and (min-height: 1000px){.guage-label-item{font-size:18px!important}.guage-item-text{font-size:20px!important}}@media screen and (min-width: 1920px) and (min-height: 1500px){.guage-label-item{font-size:18px!important}.guage-item-text{font-size:20px!important}}@media screen and (min-width: 2560px) and (min-height: 500px){.guage-label-item{font-size:20px!important}.guage-item-text{font-size:22px!important}}@media screen and (min-width: 2560px) and (min-height: 1000px){.guage-label-item{font-size:20px!important}.guage-item-text{font-size:22px!important}}@media screen and (min-width: 2560px) and (min-height: 1500px){.guage-label-item{font-size:20px!important}.guage-item-text{font-size:22px!important}}.switch1{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch1 input{opacity:0;width:0;height:0}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.marginLeft-40{margin-left:40px}.flex-inline{display:flex;justify-content:center;align-items:center;font-size:14px}@media (min-height: 550px){.value-display{font-size:14px}}@media (min-height: 900px){.guagecontainer{margin-top:6%}.value-display{font-size:25px}}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background){background-color:#2e3640}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background) .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"] }]
275
- }], ctorParameters: () => [], propDecorators: { chartContainer: [{
379
+ }], ctorParameters: () => [], propDecorators: { containerElt: [{
276
380
  type: ViewChild,
277
381
  args: ['guagechartcontainer', { static: true }]
278
- }], gaugeWrapper: [{
382
+ }], guagecontainerElt: [{
279
383
  type: ViewChild,
280
384
  args: ['guagecontainer', { static: true }]
281
385
  }], chartData: [{
@@ -287,4 +391,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
287
391
  }], headerMenuclickEvent: [{
288
392
  type: Output
289
393
  }] } });
290
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhZ2UtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2d1YWdlLWNoYXJ0L2d1YWdlLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ndWFnZS1jaGFydC9ndWFnZS1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFekIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sa0JBQWtCLE1BQU0sa0JBQWtCLENBQUM7Ozs7OztBQVFsRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsaUJBQWlCO0lBc0N4RDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBakNBLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3JDLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFekQsdUJBQWtCLEdBQVEsRUFBRSxDQUFDO1FBQzdCLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFDdEIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsYUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM5QixvQkFBZSxHQUFHLElBQUksQ0FBQztRQUV2Qix5QkFBb0IsR0FBUTtZQUMxQixNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVB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SUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDN0gsQ0FBQztJQUVELHFCQUFxQjtJQUNyQixXQUFXLENBQUMsQ0FBTTtRQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQscUJBQXFCLENBQUMsRUFBVTtRQUM5QixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7K0dBN1RVLG1CQUFtQjttR0FBbkIsbUJBQW1CLHNnQkN4QmhDLHNnQ0FZTTs7NEZEWU8sbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLGlCQUFpQixpQkFHWixpQkFBaUIsQ0FBQyxJQUFJO3dEQUdlLGNBQWM7c0JBQWpFLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNILFlBQVk7c0JBQTFELFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVwQyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBPbkNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XHJcbmltcG9ydCB7IFJlc2l6ZWRFdmVudCB9IGZyb20gJ2FuZ3VsYXItcmVzaXplLWV2ZW50JztcclxuaW1wb3J0IHsgQ29tcG9uZW50VW5pcXVlSWQgfSBmcm9tICcuLi91bmlxdWUtaWQnO1xyXG5pbXBvcnQgQ2hhcnRIZWxwZXIgZnJvbSAnLi4vY2hhcnQtaGVscGVyJztcclxuaW1wb3J0IEhlYWRlckNvbmZpZ0hlbHBlciBmcm9tICcuLi9oZWFkZXItY29uZmlnJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWd1YWdlLWNoYXJ0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ3VhZ2UtY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2d1YWdlLWNoYXJ0LmNvbXBvbmVudC5sZXNzJywgJy4uL2NvbW1vbi1zdHlsZXMubGVzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHdWFnZUNoYXJ0Q29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50VW5pcXVlSWQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQFZpZXdDaGlsZCgnZ3VhZ2VjaGFydGNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pIGNoYXJ0Q29udGFpbmVyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdndWFnZWNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pIGdhdWdlV3JhcHBlciE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBJbnB1dCgpIGNoYXJ0RGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbjogYW55O1xyXG4gIEBPdXRwdXQoKSBjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGhlYWRlck1lbnVjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIGNoYXJ0Q29uZmlndXJhdGlvbjogYW55ID0ge307XHJcbiAgZGF0YVR5cGU6IHN0cmluZyA9ICcnO1xyXG4gIGRhdGF0eXBlX3N0YXR1cyA9IGZhbHNlO1xyXG4gIHVuaXF1ZUlkID0gdGhpcy5nZXRVbmlxdWVJZCgpO1xyXG4gIGlzSGVhZGVyVmlzaWJsZSA9IHRydWU7XHJcblxyXG4gIGRlZmF1bHRDb25maWd1cmF0aW9uOiBhbnkgPSB7XHJcbiAgICBtYXJnaW46IHsgdG9wOiA0MCwgcmlnaHQ6IDIwLCBib3R0b206IDIwLCBsZWZ0OiAyMCB9LFxyXG4gICAgbWluQW5nbGU6IC05MCxcclxuICAgIG1heEFuZ2xlOiA5MCxcclxuICAgIHJpbmdJbnNldDogMjAsXHJcbiAgICByaW5nV2lkdGg6IDIwLFxyXG4gICAgbWFqb3JUaWNrczogMyxcclxuICAgIHN2Z0hlaWdodDogODAsXHJcbiAgICBsb3dfY29sb3JNYXA6IFsnIzQzQ0MwMCcsICcjRkZFRjBDJywgJyNGRjRFMEMnXSxcclxuICAgIGhpZ2hfY29sb3JNYXA6IFsnI0ZGNEUwQycsICcjRkZFRjBDJywgJyM0M0NDMDAnXSxcclxuICAgIGlzSGVhZGVyVmlzaWJsZTogdW5kZWZpbmVkLFxyXG4gICAgcG9pbnRlcldpZHRoOiAxMCxcclxuICAgIHBvaW50ZXJUYWlsTGVuZ3RoOiA1LFxyXG4gICAgcG9pbnRlckhlYWRMZW5ndGhQZXJjZW50OiAwLjcsXHJcbiAgICBsYWJlbEluc2V0OiAxMCxcclxuICAgIGJhY2tncm91bmRDb2xvcjogJyNGRkZGRkYnLFxyXG4gICAgcG9pbnRlckNvbG9yOiAnIzY4Njg2OCcsXHJcbiAgICBjdXJyZW50VmFsdWVXaWR0aFNjYWxlRmFjdG9yOiA2MCxcclxuICAgIGN1cnJlbnRWYWx1ZUhlaWdodFNjYWxlRmFjdG9yOiAzMCxcclxuICAgIGlzRHJpbGxkb3duQ2hhcnQ6IHVuZGVmaW5lZCxcclxuICAgIGhlYWRlck1lbnVPcHRpb25zOiBIZWFkZXJDb25maWdIZWxwZXIuaGVhZGVyQ29uZmlnLmhlYWRlck1lbnVPcHRpb25zLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIC8vIENvbXB1dGVkIHByb3BlcnR5IHRvIGNoZWNrIGlmIGFsZXJ0IG1lbnUgaXMgZW5hYmxlZFxyXG4gIGdldCBpc0FsZXJ0RW5hYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbj8uaGVhZGVyTWVudU9wdGlvbnM/LnNvbWUoXHJcbiAgICAgIChvcHRpb24pID0+IG9wdGlvbi5pZCA9PT0gJ2VkaXRBbGVydCdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubWVyZ2VDb25maWd1cmF0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ2NoYXJ0RGF0YSddIHx8IGNoYW5nZXNbJ2N1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbiddKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyQ2hhcnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUmVzaXplZChldmVudDogUmVzaXplZEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLnJlbmRlckNoYXJ0KCk7XHJcbiAgfVxyXG5cclxuICAvKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICogIENIQVJUIFJFTkRFUklOR1xyXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG4gIHByaXZhdGUgcmVuZGVyQ2hhcnQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY2hhcnREYXRhIHx8ICF0aGlzLmNoYXJ0RGF0YS5kYXRhIHx8ICF0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YSkgcmV0dXJuO1xyXG5cclxuICAgIGQzLnNlbGVjdChgIyR7dGhpcy51bmlxdWVJZH1gKS5yZW1vdmUoKTsgLy8gQ2xlYW4gcHJldmlvdXMgY2hhcnRcclxuXHJcbiAgICB0aGlzLm1lcmdlQ29uZmlndXJhdGlvbnMoKTtcclxuICAgIGNvbnN0IG1ldGFEYXRhID0gdGhpcy5jaGFydERhdGEubWV0YURhdGE7XHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy5jaGFydERhdGEuZGF0YTtcclxuXHJcbiAgICB0aGlzLnNldERhdGFUeXBlKG1ldGFEYXRhKTtcclxuICAgIGNvbnN0IGNvbG9yTWFwID0gdGhpcy5yZXNvbHZlQ29sb3JNYXAobWV0YURhdGEuY29sb3JUeXBlKTtcclxuXHJcbiAgICBjb25zdCBkYXRhRGlmZnMgPSB0aGlzLmNvbXB1dGVEYXRhRGlmZnMoZGF0YSk7XHJcbiAgICBjb25zdCBhbmdsZVZhbHVlcyA9IHRoaXMuY29tcHV0ZUFuZ2xlcyhkYXRhRGlmZnMpO1xyXG5cclxuICAgIGNvbnN0IGNoYXJ0V2lkdGggPSB0aGlzLmdldENoYXJ0V2lkdGgoKTtcclxuICAgIGNvbnN0IGNoYXJ0SGVpZ2h0ID0gdGhpcy5nZXRDaGFydEhlaWdodCgpO1xyXG5cclxuICAgIHRoaXMuaXNIZWFkZXJWaXNpYmxlID1cclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNIZWFkZXJWaXNpYmxlICE9PSB1bmRlZmluZWRcclxuICAgICAgICA/IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZVxyXG4gICAgICAgIDogdGhpcy5pc0hlYWRlclZpc2libGU7XHJcblxyXG4gICAgY29uc3Qgc3ZnID0gdGhpcy5jcmVhdGVTdmdDb250YWluZXIoY2hhcnRXaWR0aCwgY2hhcnRIZWlnaHQpO1xyXG4gICAgY29uc3QgcmFkaXVzID0gTWF0aC5taW4oY2hhcnRXaWR0aCwgY2hhcnRIZWlnaHQpIC8gMjtcclxuXHJcbiAgICB0aGlzLmFkanVzdFNjYWxlRmFjdG9ycyhyYWRpdXMpO1xyXG4gICAgdGhpcy5kcmF3QXJjcyhzdmcsIGRhdGFEaWZmcywgYW5nbGVWYWx1ZXMsIGNvbG9yTWFwLCByYWRpdXMsIG1ldGFEYXRhLCBkYXRhKTtcclxuICAgIHRoaXMuZHJhd1BvaW50ZXIoc3ZnLCByYWRpdXMsIGRhdGEsIG1ldGFEYXRhKTtcclxuICAgIHRoaXMuZHJhd0xhYmVscyhzdmcsIHJhZGl1cywgZGF0YSwgZGF0YURpZmZzLCBtZXRhRGF0YSk7XHJcbiAgICB0aGlzLmRyYXdUZXh0QmxvY2tzKHN2ZywgcmFkaXVzLCBtZXRhRGF0YSwgY2hhcnRXaWR0aCk7XHJcblxyXG4gICAgdGhpcy5jZW50ZXJTdmcoc3ZnLCBjaGFydFdpZHRoLCBjaGFydEhlaWdodCk7XHJcbiAgfVxyXG5cclxuICAvKiogTWVyZ2UgY3VzdG9tIGNvbmZpZyBpbnRvIGRlZmF1bHQgY29uZmlnICovXHJcbiAgcHJpdmF0ZSBtZXJnZUNvbmZpZ3VyYXRpb25zKCk6IHZvaWQge1xyXG4gICAgT2JqZWN0LmtleXModGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbikuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uW2tleV0gPSBDaGFydEhlbHBlci5nZXRWYWx1ZUJ5Q29uZmlndXJhdGlvblR5cGUoXHJcbiAgICAgICAga2V5LFxyXG4gICAgICAgIHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgdGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb25cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIEhhbmRsZSBjdXJyZW5jeSBvciB1bml0IHR5cGUgKi9cclxuICBwcml2YXRlIHNldERhdGFUeXBlKG1ldGFEYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0YVR5cGUgPSBtZXRhRGF0YS5kYXRhVHlwZSB8fCAnJztcclxuICAgIHRoaXMuZGF0YXR5cGVfc3RhdHVzID0gdGhpcy5kYXRhVHlwZSA9PT0gJ1VTRCc7XHJcbiAgICBpZiAodGhpcy5kYXRhdHlwZV9zdGF0dXMpIHRoaXMuZGF0YVR5cGUgPSAnJCAnO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJlc29sdmUgY29sb3IgbWFwIGJhc2VkIG9uIGNvbG9yVHlwZSAqL1xyXG4gIHByaXZhdGUgcmVzb2x2ZUNvbG9yTWFwKGNvbG9yVHlwZTogc3RyaW5nKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIGNvbG9yVHlwZSA9PT0gJ2xvdydcclxuICAgICAgPyB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5sb3dfY29sb3JNYXBcclxuICAgICAgOiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5oaWdoX2NvbG9yTWFwO1xyXG4gIH1cclxuXHJcbiAgLyoqIENvbXB1dGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGNvbnNlY3V0aXZlIGRhdGEgcG9pbnRzICovXHJcbiAgcHJpdmF0ZSBjb21wdXRlRGF0YURpZmZzKGRhdGE6IG51bWJlcltdKTogbnVtYmVyW10ge1xyXG4gICAgcmV0dXJuIGRhdGEuc2xpY2UoMCwgLTEpLm1hcCgodmFsLCBpKSA9PiBkYXRhW2kgKyAxXSAtIHZhbCk7XHJcbiAgfVxyXG5cclxuICAvKiogQ29udmVydCBkYXRhIGRpZmZlcmVuY2VzIGludG8gY3VtdWxhdGl2ZSBhbmdsZXMgKi9cclxuICBwcml2YXRlIGNvbXB1dGVBbmdsZXMoZGF0YURpZmZzOiBudW1iZXJbXSk6IG51bWJlcltdIHtcclxuICAgIGNvbnN0IHRvdGFsID0gZGF0YURpZmZzLnJlZHVjZSgoc3VtLCB2YWwpID0+IHN1bSArIHZhbCwgMCk7XHJcbiAgICByZXR1cm4gZGF0YURpZmZzLm1hcCgodW5pdCwgaSwgYXJyKSA9PlxyXG4gICAgICBpID09PSAwID8gKHVuaXQgLyB0b3RhbCkgKiAxODAgOiBhcnIuc2xpY2UoMCwgaSArIDEpLnJlZHVjZSgoc3VtLCB4KSA9PiBzdW0gKyAoeCAvIHRvdGFsKSAqIDE4MCwgMClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKiogRDMgdXRpbGl0eSBtZXRob2RzICovXHJcbiAgcHJpdmF0ZSBkZWcycmFkKGRlZzogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAoZGVnICogTWF0aC5QSSkgLyAxODA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENoYXJ0V2lkdGgoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lciA9IGQzLnNlbGVjdCh0aGlzLmNoYXJ0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgcmV0dXJuIHBhcnNlSW50KGNvbnRhaW5lci5zdHlsZSgnd2lkdGgnKSkgLSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW4ubGVmdCAtIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbi5yaWdodDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q2hhcnRIZWlnaHQoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHdyYXBwZXIgPSBkMy5zZWxlY3QodGhpcy5nYXVnZVdyYXBwZXIubmF0aXZlRWxlbWVudCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBwYXJzZUludCh3cmFwcGVyLnN0eWxlKCdoZWlnaHQnKSkgLVxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW4udG9wIC1cclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubWFyZ2luLmJvdHRvbSAtXHJcbiAgICAgIDU2XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVTdmdDb250YWluZXIod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcclxuICAgIHJldHVybiBkM1xyXG4gICAgICAuc2VsZWN0KHRoaXMuY2hhcnRDb250YWluZXIubmF0aXZlRWxlbWVudClcclxuICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgLmF0dHIoJ2lkJywgdGhpcy51bmlxdWVJZClcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgd2lkdGggKyB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW4ubGVmdCArIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbi5yaWdodClcclxuICAgICAgLmF0dHIoJ2hlaWdodCcsIGhlaWdodCArIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbi50b3AgKyB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW4uYm90dG9tKVxyXG4gICAgICAuY2FsbChDaGFydEhlbHBlci5yZXNwb25zaXZlZnkpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRqdXN0U2NhbGVGYWN0b3JzKHJhZGl1czogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCBjZmcgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbjtcclxuICAgIGlmIChjZmcuaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICBjZmcuY3VycmVudFZhbHVlV2lkdGhTY2FsZUZhY3RvciArPSA0MDtcclxuICAgICAgY2ZnLmN1cnJlbnRWYWx1ZUhlaWdodFNjYWxlRmFjdG9yICs9IDIwO1xyXG4gICAgfSBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+IDE0MDApIHtcclxuICAgICAgY2ZnLmN1cnJlbnRWYWx1ZUhlaWdodFNjYWxlRmFjdG9yICs9IDE1O1xyXG4gICAgICBjZmcuY3VycmVudFZhbHVlV2lkdGhTY2FsZUZhY3RvciAqPSAyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIERyYXcgdGhlIGNvbG9yZWQgYXJjcyAqL1xyXG4gIHByaXZhdGUgZHJhd0FyY3Moc3ZnOiBhbnksIGRhdGFEaWZmczogbnVtYmVyW10sIGFuZ2xlVmFsdWVzOiBudW1iZXJbXSwgY29sb3JNYXBzOiBzdHJpbmdbXSwgcmFkaXVzOiBudW1iZXIsIG1ldGFEYXRhOiBhbnksIGRhdGE6IGFueVtdKSB7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgIGNvbnN0IGFyYyA9IGQzLmFyYygpXHJcbiAgICAgIC5pbm5lclJhZGl1cyhyYWRpdXMgLSBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5yaW5nV2lkdGggLSBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5yaW5nSW5zZXQpXHJcbiAgICAgIC5vdXRlclJhZGl1cyhyYWRpdXMpXHJcbiAgICAgIC5zdGFydEFuZ2xlKChfLCBpKSA9PlxyXG4gICAgICAgIHNlbGYuZGVnMnJhZChpID09PSAwID8gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubWluQW5nbGUgOiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5taW5BbmdsZSArIGFuZ2xlVmFsdWVzW2kgLSAxXSlcclxuICAgICAgKVxyXG4gICAgICAuZW5kQW5nbGUoKF8sIGkpID0+XHJcbiAgICAgICAgc2VsZi5kZWcycmFkKGkgPT09IGRhdGFEaWZmcy5sZW5ndGggLSAxID8gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubWF4QW5nbGUgOiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5taW5BbmdsZSArIGFuZ2xlVmFsdWVzW2ldKVxyXG4gICAgICApO1xyXG5cclxuICAgIGNvbnN0IGNlbnRlclR4ID0gYHRyYW5zbGF0ZSgke3JhZGl1c30sJHtyYWRpdXN9KWA7XHJcblxyXG4gICAgc3ZnLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdhcmMnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgY2VudGVyVHgpXHJcbiAgICAgIC5zZWxlY3RBbGwoJ3BhdGgnKVxyXG4gICAgICAuZGF0YShkYXRhRGlmZnMpXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ3BhdGgnKVxyXG4gICAgICAuYXR0cignZmlsbCcsIChfLCBpKSA9PiBjb2xvck1hcHNbaV0pXHJcbiAgICAgIC5zdHlsZSgnY3Vyc29yJywgKCkgPT5cclxuICAgICAgICBtZXRhRGF0YS5jdXJyZW50VmFsdWUgPiAwICYmIG1ldGFEYXRhLmhhc0RyaWxsRG93biAmJiAhdGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb24uaXNSaWEgPyAncG9pbnRlcicgOiAnZGVmYXVsdCdcclxuICAgICAgKVxyXG4gICAgICAuYXR0cignZCcsIGFyYylcclxuICAgICAgLm9uKCdjbGljaycsIChldmVudCwgZCkgPT4ge1xyXG4gICAgICAgIGlmIChtZXRhRGF0YS5oYXNEcmlsbERvd24gJiYgbWV0YURhdGEuY3VycmVudFZhbHVlID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVDbGljayhgJHtkYXRhWzBdfSAtICR7ZGF0YVtkYXRhLmxlbmd0aCAtIDFdfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogRHJhdyB0aGUgcG9pbnRlciBpbmRpY2F0b3IgKi9cclxuICBwcml2YXRlIGRyYXdQb2ludGVyKHN2ZzogYW55LCByYWRpdXM6IG51bWJlciwgZGF0YTogbnVtYmVyW10sIG1ldGFEYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNmZyA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uO1xyXG4gICAgY29uc3QgcG9pbnRlckxlbmd0aCA9IE1hdGgucm91bmQocmFkaXVzICogY2ZnLnBvaW50ZXJIZWFkTGVuZ3RoUGVyY2VudCk7XHJcbiAgICBjb25zdCBsaW5lRGF0YSA9IFtcclxuICAgICAgW2NmZy5wb2ludGVyV2lkdGggLyAyLCAwXSxcclxuICAgICAgWzAsIC1wb2ludGVyTGVuZ3RoXSxcclxuICAgICAgWy0oY2ZnLnBvaW50ZXJXaWR0aCAvIDIpLCAwXSxcclxuICAgICAgWzAsIGNmZy5wb2ludGVyVGFpbExlbmd0aF0sXHJcbiAgICAgIFtjZmcucG9pbnRlcldpZHRoIC8gMiwgMF0sXHJcbiAgICBdO1xyXG4gICAgY29uc3QgcG9pbnRlckxpbmUgPSBkMy5saW5lKCk7XHJcbiAgICBjb25zdCBwZyA9IHN2Zy5hcHBlbmQoJ2cnKS5hdHRyKCdjbGFzcycsICdwb2ludGVyJykuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke3JhZGl1c30sJHtyYWRpdXN9KWApO1xyXG4gICAgY29uc3QgcG9pbnRlclZhbHVlID0gbWV0YURhdGEuY3VycmVudFZhbHVlIC0gZGF0YVswXTtcclxuICAgIGNvbnN0IHJhbmdlID0gZGF0YVtkYXRhLmxlbmd0aCAtIDFdIC0gZGF0YVswXTtcclxuICAgIGNvbnN0IGFuZ2xlID0gY2ZnLm1pbkFuZ2xlICsgKHBvaW50ZXJWYWx1ZSAvIHJhbmdlKSAqIDE4MDtcclxuXHJcbiAgICBwZy5hcHBlbmQoJ3BhdGgnKVxyXG4gICAgICAuYXR0cignZCcsIHBvaW50ZXJMaW5lKGxpbmVEYXRhKSlcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCBjZmcucG9pbnRlckNvbG9yKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHJvdGF0ZSgke2FuZ2xlfSkgdHJhbnNsYXRlKDAsJHstcmFkaXVzICsgY2ZnLnJpbmdXaWR0aCArIHBvaW50ZXJMZW5ndGh9KWApO1xyXG4gIH1cclxuXHJcbiAgLyoqIERyYXcgdGhlIG51bWVyaWMgbGFiZWxzIGFyb3VuZCB0aGUgYXJjICovXHJcbiAgcHJpdmF0ZSBkcmF3TGFiZWxzKHN2ZzogYW55LCByYWRpdXM6IG51bWJlciwgZGF0YTogbnVtYmVyW10sIGRhdGFEaWZmczogbnVtYmVyW10sIG1ldGFEYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNmZyA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uO1xyXG4gICAgY29uc3QgcmFuZ2UgPSBkYXRhW2RhdGEubGVuZ3RoIC0gMV0gLSBkYXRhWzBdO1xyXG4gICAgbGV0IGN1bXVsYXRpdmUgPSAwO1xyXG4gICAgY29uc3QgbGFiZWxzID0gW3sgbmFtZTogZGF0YVswXSwgdmFsdWU6IDAgfV07XHJcbiAgICBkYXRhRGlmZnMuZm9yRWFjaCgoZCwgaSkgPT4ge1xyXG4gICAgICBjdW11bGF0aXZlICs9IGQ7XHJcbiAgICAgIGxhYmVscy5wdXNoKHsgbmFtZTogZGF0YVtpICsgMV0sIHZhbHVlOiBjdW11bGF0aXZlIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgbGFiZWxHcm91cCA9IHN2Zy5hcHBlbmQoJ2cnKS5hdHRyKCdjbGFzcycsICdsYWJlbCcpLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHtyYWRpdXN9LCR7cmFkaXVzfSlgKTtcclxuXHJcbiAgICBsYWJlbEdyb3VwLnNlbGVjdEFsbCgnLnRpY2stbGFiZWwnKVxyXG4gICAgICAuZGF0YShsYWJlbHMpXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgKGQpID0+IHtcclxuICAgICAgICBjb25zdCBhbmdsZSA9IGNmZy5taW5BbmdsZSArIChkLnZhbHVlIC8gcmFuZ2UpICogMTgwO1xyXG4gICAgICAgIHJldHVybiBgcm90YXRlKCR7YW5nbGV9KSB0cmFuc2xhdGUoMCwke2NmZy5sYWJlbEluc2V0IC0gcmFkaXVzIC0gMjB9KSByb3RhdGUoJHstYW5nbGV9KWA7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCB3aW5kb3cuaW5uZXJXaWR0aCA8IDE0MDAgPyAnMTJweCcgOiAnMTRweCcpXHJcbiAgICAgIC5zdHlsZSgnZm9udC13ZWlnaHQnLCAnNjAwJylcclxuICAgICAgLnRleHQoKGQpID0+IGAke2QubmFtZX0ke21ldGFEYXRhLmRhdGFUeXBlIHx8ICcnfWApO1xyXG4gIH1cclxuXHJcbiAgLyoqIERyYXcgY2VudHJhbCB0ZXh0IGJsb2NrcyAodmFsdWUsIHN0YXR1cywgZGF0ZSByYW5nZSkgKi9cclxuICBwcml2YXRlIGRyYXdUZXh0QmxvY2tzKHN2ZzogYW55LCByYWRpdXM6IG51bWJlciwgbWV0YURhdGE6IGFueSwgd2lkdGg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgY29uc3QgY2ZnID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb247XHJcbiAgICBjb25zdCB0b3AgPSByYWRpdXMgLyAyIC0gMTA7XHJcbiAgICBjb25zdCBtaWQgPSB0b3AgKyBjZmcuY3VycmVudFZhbHVlSGVpZ2h0U2NhbGVGYWN0b3I7XHJcbiAgICBjb25zdCBib3R0b20gPSBtaWQgKyBjZmcuY3VycmVudFZhbHVlSGVpZ2h0U2NhbGVGYWN0b3I7XHJcblxyXG4gICAgLy8gQ3VycmVudCB2YWx1ZVxyXG4gICAgc3ZnLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7cmFkaXVzIC0gY2ZnLmN1cnJlbnRWYWx1ZVdpZHRoU2NhbGVGYWN0b3IgLyAyfSwke3RvcH0pYClcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgY2ZnLmN1cnJlbnRWYWx1ZVdpZHRoU2NhbGVGYWN0b3IgKyA4KVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgY2ZnLmN1cnJlbnRWYWx1ZUhlaWdodFNjYWxlRmFjdG9yKVxyXG4gICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAndmFsdWUtZGlzcGxheScpXHJcbiAgICAgIC5odG1sKGAke21ldGFEYXRhLmN1cnJlbnRWYWx1ZX0ke21ldGFEYXRhLmRhdGFUeXBlIHx8ICcnfWApO1xyXG5cclxuICAgIC8vIFN0YXR1c1xyXG4gICAgaWYgKG1ldGFEYXRhLnN0YXR1cykge1xyXG4gICAgICBjb25zdCB3aWR0aFRlbXAgPSBtZXRhRGF0YS5zdGF0dXMubGVuZ3RoID4gNCA/IDIxMCA6IDEyMDtcclxuICAgICAgc3ZnLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHtyYWRpdXMgLSB3aWR0aFRlbXAgLyAyfSwke21pZH0pYClcclxuICAgICAgICAuYXR0cignd2lkdGgnLCB3aWR0aFRlbXApXHJcbiAgICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnc3RhdHVzLWRpc3BsYXknKVxyXG4gICAgICAgIC5odG1sKG1ldGFEYXRhLnN0YXR1cyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRGF0ZSByYW5nZVxyXG4gICAgaWYgKG1ldGFEYXRhLmRhdGVSYW5nZSkge1xyXG4gICAgICBzdmcuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke3JhZGl1cyAtIDEwNX0sJHtib3R0b219KWApXHJcbiAgICAgICAgLmF0dHIoJ3dpZHRoJywgMjEwKVxyXG4gICAgICAgIC5hcHBlbmQoJ3hodG1sOmRpdicpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2RhdGVyYW5nZS1kaXNwbGF5JylcclxuICAgICAgICAuaHRtbChgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhclwiPjwvaT4gJHttZXRhRGF0YS5kYXRlUmFuZ2V9YCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNlbnRlclN2Zyhzdmc6IGFueSwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lck1pZCA9IHdpZHRoIC8gMjtcclxuICAgIGNvbnN0IG5vZGVIYWxmID0gc3ZnLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAvIDI7XHJcbiAgICBjb25zdCB4T2Zmc2V0ID0gY29udGFpbmVyTWlkIC0gbm9kZUhhbGY7XHJcbiAgICBzdmcuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke3hPZmZzZXQgKyB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW4ubGVmdH0sJHt0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW4udG9wfSlgKTtcclxuICB9XHJcblxyXG4gIC8qKiBFdmVudCBFbWl0dGVycyAqL1xyXG4gIGhhbmRsZUNsaWNrKGQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoZCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVIZWFkZXJNZW51Q2xpY2soaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5oZWFkZXJNZW51Y2xpY2tFdmVudC5lbWl0KGlkKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiAjZ3VhZ2Vjb250YWluZXIgY2xhc3M9XCJsaWItY2hhcnQtd3JhcHBlclwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY2FyZC1iZyk7XCJcclxuICAocmVzaXplZCk9XCJvblJlc2l6ZWQoJGV2ZW50KVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJoZWFkZXItYWx0XCIgKm5nSWY9XCIhaXNIZWFkZXJWaXNpYmxlXCI+XHJcbiAgICA8bGliLWNoYXJ0LWhlYWRlci12MiBbY2hhcnREYXRhXT1cImNoYXJ0RGF0YVwiIFtjaGFydENvbmZpZ3VyYXRpb25dPVwiY2hhcnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgKGNsaWNrRXZlbnQpPVwiaGFuZGxlQ2xpY2soJGV2ZW50KVwiPjwvbGliLWNoYXJ0LWhlYWRlci12Mj5cclxuICA8L2Rpdj5cclxuICA8bGliLWNoYXJ0LWhlYWRlci12MSBbdGl0bGVdPVwiY2hhcnREYXRhLm1ldGFEYXRhLnRpdGxlXCIgW2hhc0RyaWxsRG93bl09XCJjaGFydERhdGEubWV0YURhdGEuaGFzRHJpbGxEb3duXCJcclxuICAgIFtpc0VkaXRFbmFibGVkXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS5pc0VkaXRFbmFibGVkXCIgW2lzcmlhXT1cImN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbi5pc1JpYVwiIFttZW51T3B0aW9uc109XCJjaGFydENvbmZpZ3VyYXRpb24uaGVhZGVyTWVudU9wdGlvbnNcIlxyXG4gICAgW3NlbGVjdGVkS3BpVG9vbHRvcF09XCJjaGFydENvbmZpZ3VyYXRpb24uc2VsZWN0ZWRLcGlUb29sdG9wXCIgKG1lbnVPcHRpb25DbGlja0V2ZW50KT1cImhhbmRsZUhlYWRlck1lbnVDbGljaygkZXZlbnQpXCJcclxuICAgIFtpc0FsZXJ0RW5hYmxlZF09XCJpc0FsZXJ0RW5hYmxlZFwiICpuZ0lmPVwiaXNIZWFkZXJWaXNpYmxlXCI+PC9saWItY2hhcnQtaGVhZGVyLXYxPlxyXG4gIDxkaXYgW3N0eWxlLmhlaWdodF09XCJjaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0XCIgaWQ9XCJndWFnZWNoYXJ0Y29udGFpbmVyXCIgI2d1YWdlY2hhcnRjb250YWluZXJcclxuICAgIGNsYXNzPVwibGliLWNoYXJ0LXN2ZyBndWFnZWNvbnRhaW5lclwiPjwvZGl2PlxyXG48L2Rpdj4iXX0=
394
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhZ2UtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2d1YWdlLWNoYXJ0L2d1YWdlLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ndWFnZS1jaGFydC9ndWFnZS1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBRTFDLE9BQU8sa0JBQWtCLE1BQU0sa0JBQWtCLENBQUM7Ozs7OztBQVFsRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsaUJBQWlCO0lBK0N4RDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBdkNBLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3JDLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDekQsdUJBQWtCLEdBQVEsRUFBRSxDQUFDO1FBQzdCLGFBQVEsR0FBUSxFQUFFLENBQUM7UUFDbkIsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFDakMsYUFBUSxHQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQyxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUVoQyx5QkFBb0IsR0FBUTtZQUMxQixNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVB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WCxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJbEQsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHcEMsU0FBUztzQkFBakIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRVbmlxdWVJZCB9IGZyb20gJy4uL3VuaXF1ZS1pZCc7XHJcbmltcG9ydCBDaGFydEhlbHBlciBmcm9tICcuLi9jaGFydC1oZWxwZXInO1xyXG5pbXBvcnQgeyBSZXNpemVkRXZlbnQgfSBmcm9tICdhbmd1bGFyLXJlc2l6ZS1ldmVudCc7XHJcbmltcG9ydCBIZWFkZXJDb25maWdIZWxwZXIgZnJvbSAnLi4vaGVhZGVyLWNvbmZpZyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1ndWFnZS1jaGFydCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2d1YWdlLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9ndWFnZS1jaGFydC5jb21wb25lbnQubGVzcycsICcuLi9jb21tb24tc3R5bGVzLmxlc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR3VhZ2VDaGFydENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudFVuaXF1ZUlkIGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKCdndWFnZWNoYXJ0Y29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBjb250YWluZXJFbHQhOiBFbGVtZW50UmVmO1xyXG5cclxuICBAVmlld0NoaWxkKCdndWFnZWNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZ3VhZ2Vjb250YWluZXJFbHQhOiBFbGVtZW50UmVmO1xyXG5cclxuICBASW5wdXQoKSBjaGFydERhdGE6IGFueTtcclxuICBASW5wdXQoKSBjdXN0b21DaGFydENvbmZpZ3VyYXRpb246IGFueTtcclxuICBAT3V0cHV0KCkgY2xpY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBoZWFkZXJNZW51Y2xpY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIGNoYXJ0Q29uZmlndXJhdGlvbjogYW55ID0ge307XHJcbiAgZGF0YVR5cGU6IGFueSA9ICcnO1xyXG4gIGRhdGF0eXBlX3N0YXR1czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHVuaXF1ZUlkOiBhbnkgPSB0aGlzLmdldFVuaXF1ZUlkKCk7XHJcbiAgaXNIZWFkZXJWaXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgZGVmYXVsdENvbmZpZ3VyYXRpb246IGFueSA9IHtcclxuICAgIG1hcmdpbjogeyB0b3A6IDQwLCByaWdodDogMjAsIGJvdHRvbTogMjAsIGxlZnQ6IDIwIH0sXHJcbiAgICBtaW5BbmdsZTogLTkwLFxyXG4gICAgbWF4QW5nbGU6IDkwLFxyXG4gICAgcmluZ0luc2V0OiAyMCxcclxuICAgIHJpbmdXaWR0aDogMjAsXHJcbiAgICBtYWpvclRpY2tzOiAzLFxyXG4gICAgc3ZnSGVpZ2h0OiA4MCxcclxuICAgIGxvd19jb2xvck1hcDogWycjNDNDQzAwJywgJyNGRkVGMEMnLCAnI0ZGNEUwQyddLFxyXG4gICAgaGlnaF9jb2xvck1hcDogWycjRkY0RTBDJywgJyNGRkVGMEMnLCAnIzQzQ0MwMCddLFxyXG4gICAgaXNIZWFkZXJWaXNpYmxlOiB1bmRlZmluZWQsXHJcbiAgICBwb2ludGVyV2lkdGg6IDEwLFxyXG4gICAgcG9pbnRlclRhaWxMZW5ndGg6IDUsXHJcbiAgICBwb2ludGVySGVhZExlbmd0aFBlcmNlbnQ6IDAuNyxcclxuICAgIGxhYmVsSW5zZXQ6IDEwLFxyXG4gICAgbGVnZW5kSnVzdGlmaWVkOiBmYWxzZSxcclxuICAgIGJhY2tncm91bmRDb2xvcjogJyNGRkZGRkYnLFxyXG4gICAgaXNEcmlsbGRvd25DaGFydDogdW5kZWZpbmVkLFxyXG4gICAgcmluZ1NjYWxlRmFjdG9yOiAwLFxyXG4gICAgdGV4dHNBdENlbnRlclNjYWxlRmFjdG9yOiAwLFxyXG4gICAgY3VycmVudFZhbHVlV2lkdGhTY2FsZUZhY3RvcjogNjAsXHJcbiAgICBjdXJyZW50VmFsdWVIZWlnaHRTY2FsZUZhY3RvcjogMzAsXHJcbiAgICBwb2ludGVyQ29sb3I6ICcjNjg2ODY4JyxcclxuICAgIGlzVG9nZ2xlVmlzaWJsZTogdW5kZWZpbmVkLFxyXG4gICAgc2VsZWN0ZWRLcGlUb29sdG9wOiB1bmRlZmluZWQsXHJcbiAgICBpc1ZhbHVlTGFibGVBZGp1c3Q6IHVuZGVmaW5lZCxcclxuICAgIGlzVGl0bGVIaWRkZW46IHVuZGVmaW5lZCxcclxuICAgIGhlYWRlck1lbnVPcHRpb25zOiBIZWFkZXJDb25maWdIZWxwZXIuaGVhZGVyQ29uZmlnLmhlYWRlck1lbnVPcHRpb25zLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIGdldCBpc0FsZXJ0RW5hYmxlZCgpOiBib29sZWFuIHtcclxuICByZXR1cm4gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24/LmhlYWRlck1lbnVPcHRpb25zPy5zb21lKG9wdGlvbiA9PiBvcHRpb24uaWQgPT09ICdlZGl0QWxlcnQnKTtcclxufVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgIGQzLnNlbGVjdCgnIycgKyBzZWxmLnVuaXF1ZUlkKS5yZW1vdmUoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZUxpbmVDaGFydCgpO1xyXG4gIH1cclxuICBvblJlc2l6ZWQoZXZlbnQ6IFJlc2l6ZWRFdmVudCkge1xyXG4gICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgZDMuc2VsZWN0KCcjJyArIHNlbGYudW5pcXVlSWQpLnJlbW92ZSgpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplTGluZUNoYXJ0KCk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge31cclxuXHJcbiAgaW5pdGlhbGl6ZUxpbmVDaGFydCgpIHtcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgIGxldCBkYXRhID0gW107XHJcbiAgICBsZXQgbWV0YURhdGE6IGFueSA9IG51bGw7XHJcbiAgICBsZXQgY29sb3JNYXBzID0gW107XHJcbiAgICBsZXQgYW5nbGVWYWx1ZSA9IFtdO1xyXG4gICAgbGV0IGRhdGFfcmVhZHk6IGFueSA9IFtdO1xyXG4gICAgbGV0IGxhYmVsQXJyYXk6IGFueSA9IFtdO1xyXG4gICAgbGV0IGNvbG9yVHlwZSA9IG51bGw7XHJcblxyXG4gICBsZXQgaXNyaWEgPSB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbi5pc1JpYVxyXG5cclxuICAgIGZvciAodmFyIGkgaW4gdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbikge1xyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbltpXSA9IENoYXJ0SGVscGVyLmdldFZhbHVlQnlDb25maWd1cmF0aW9uVHlwZShcclxuICAgICAgICBpLFxyXG4gICAgICAgIHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgdGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb25cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBkYXRhID0gdGhpcy5jaGFydERhdGEuZGF0YTtcclxuICAgIG1ldGFEYXRhID0gdGhpcy5jaGFydERhdGEubWV0YURhdGE7XHJcblxyXG4gICAgY29sb3JUeXBlID0gbWV0YURhdGEuY29sb3JUeXBlO1xyXG4gICAgaWYgKGNvbG9yVHlwZSA9PSAnbG93Jykge1xyXG4gICAgICBjb2xvck1hcHMgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5sb3dfY29sb3JNYXA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb2xvck1hcHMgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5oaWdoX2NvbG9yTWFwO1xyXG4gICAgfVxyXG4gICAgaWYgKG1ldGFEYXRhLmRhdGFUeXBlKSB7XHJcbiAgICAgIHRoaXMuZGF0YVR5cGUgPSBtZXRhRGF0YS5kYXRhVHlwZTtcclxuICAgICAgaWYgKHRoaXMuZGF0YVR5cGUgPT0gJ1VTRCcpIHtcclxuICAgICAgICB0aGlzLmRhdGF0eXBlX3N0YXR1cyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kYXRhVHlwZSA9ICckICc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkYXRhLm1hcChmdW5jdGlvbiAoZGF0YVVuaXQsIGkpIHtcclxuICAgICAgaWYgKGkgPCBkYXRhLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICBsZXQgZGlmZiA9IGRhdGFbaSArIDFdIC0gZGF0YVtpXTtcclxuICAgICAgICBkYXRhX3JlYWR5LnB1c2goZGlmZik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHZhciBjaGFydENvbnRhaW5lciA9IGQzLnNlbGVjdCh0aGlzLmNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50KTtcclxuICAgIHZhciBndWFnZWNvbnRhaW5lciA9IGQzLnNlbGVjdCh0aGlzLmd1YWdlY29udGFpbmVyRWx0Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgdmFyIG1hcmdpbiA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbjtcclxuICAgIHZhciB3aWR0aCA9XHJcbiAgICAgIHBhcnNlSW50KGNoYXJ0Q29udGFpbmVyLnN0eWxlKCd3aWR0aCcpKSAtIG1hcmdpbi5sZWZ0IC0gbWFyZ2luLnJpZ2h0O1xyXG5cclxuICAgIHZhciBoZWlnaHQgPVxyXG4gICAgICBwYXJzZUludChndWFnZWNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpIC1cclxuICAgICAgbWFyZ2luLnRvcCAtXHJcbiAgICAgIG1hcmdpbi5ib3R0b20gLVxyXG4gICAgICA1NjsgLy9jaGFydCBoZWFkZXIgaGVpZ2h0XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuaXNIZWFkZXJWaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNIZWFkZXJWaXNpYmxlO1xyXG5cclxuICAgIHZhciBzdmcgPSBjaGFydENvbnRhaW5lclxyXG4gICAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgICAuYXR0cignaWQnLCBzZWxmLnVuaXF1ZUlkKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCB3aWR0aCArIG1hcmdpbi5sZWZ0ICsgbWFyZ2luLnJpZ2h0KVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20pXHJcbiAgICAgIC5jYWxsKENoYXJ0SGVscGVyLnJlc3BvbnNpdmVmeSlcclxuICAgICAgLmFwcGVuZCgnZycpO1xyXG5cclxuICAgIHZhciByYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDI7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VycmVudFZhbHVlV2lkdGhTY2FsZUZhY3RvciArPSA0MDtcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VycmVudFZhbHVlSGVpZ2h0U2NhbGVGYWN0b3IgKz0gMjA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPiAxNDAwKSB7XHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VycmVudFZhbHVlSGVpZ2h0U2NhbGVGYWN0b3IgKz0gMTU7XHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VycmVudFZhbHVlV2lkdGhTY2FsZUZhY3RvciAqPSAyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgdG9wVGV4dFBvc2l0aW9uID0gcmFkaXVzIC8gMiAtIDEwO1xyXG4gICAgbGV0IG1pZFRleHRQb3NpdGlvbiA9XHJcbiAgICAgIHRvcFRleHRQb3NpdGlvbiArIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1cnJlbnRWYWx1ZUhlaWdodFNjYWxlRmFjdG9yO1xyXG4gICAgbGV0IGJvdHRvbVRleHRQb3NpdGlvbiA9XHJcbiAgICAgIG1pZFRleHRQb3NpdGlvbiArIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1cnJlbnRWYWx1ZUhlaWdodFNjYWxlRmFjdG9yO1xyXG4gICAgdmFyIGRhdGFfbGVuZ3RoID0gZGF0YS5sZW5ndGg7XHJcblxyXG4gICAgZnVuY3Rpb24gZGVnMnJhZChkZWcpIHtcclxuICAgICAgcmV0dXJuIChkZWcgKiBNYXRoLlBJKSAvIDE4MDtcclxuICAgIH1cclxuICAgIGxldCB0ZW1wQXJyYXk6IGFueSA9IFtdO1xyXG4gICAgbGV0IHRvdGFsID0gMDtcclxuICAgIGRhdGFfcmVhZHkubWFwKGZ1bmN0aW9uICh1bml0KSB7XHJcbiAgICAgIHRvdGFsICs9IHVuaXQ7XHJcbiAgICB9KTtcclxuICAgIGRhdGFfcmVhZHkubWFwKGZ1bmN0aW9uICh1bml0LCBpKSB7XHJcbiAgICAgIHZhciBhbmdsZSA9ICh1bml0IC8gdG90YWwpICogMTgwO1xyXG4gICAgICBpZiAoaSA9PT0gMCkge1xyXG4gICAgICAgIHRlbXBBcnJheS5wdXNoKGFuZ2xlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgY3VycmVudEFuZ2xlID0gdGVtcEFycmF5W2kgLSAxXSArIGFuZ2xlO1xyXG4gICAgICAgIHRlbXBBcnJheS5wdXNoKGN1cnJlbnRBbmdsZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgYW5nbGVWYWx1ZSA9IHRlbXBBcnJheTtcclxuXHJcbiAgICB2YXIgYXJjID0gZDNcclxuICAgICAgLmFyYygpXHJcbiAgICAgIC5pbm5lclJhZGl1cyhcclxuICAgICAgICByYWRpdXMgLVxyXG4gICAgICAgICAgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ucmluZ1dpZHRoIC1cclxuICAgICAgICAgIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnJpbmdJbnNldFxyXG4gICAgICApXHJcbiAgICAgIC5vdXRlclJhZGl1cyhyYWRpdXMpXHJcbiAgICAgIC5zdGFydEFuZ2xlKGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgdmFyIHJhdGlvO1xyXG4gICAgICAgIGlmIChpID09PSAwKSB7XHJcbiAgICAgICAgICByYXRpbyA9IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm1pbkFuZ2xlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByYXRpbyA9IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm1pbkFuZ2xlICsgYW5nbGVWYWx1ZVtpIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWcycmFkKHJhdGlvKTtcclxuICAgICAgfSlcclxuICAgICAgLmVuZEFuZ2xlKGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgdmFyIHJhdGlvO1xyXG4gICAgICAgIGlmIChpID09PSBkYXRhX3JlYWR5Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgIHJhdGlvID0gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubWF4QW5nbGU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJhdGlvID0gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubWluQW5nbGUgKyBhbmdsZVZhbHVlW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVnMnJhZChyYXRpbyk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIGZ1bmN0aW9uIGNlbnRlclRyYW5zbGF0aW9uKCkge1xyXG4gICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgnICsgcmFkaXVzICsgJywnICsgcmFkaXVzICsgJyknO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjZW50ZXJUeCA9IGNlbnRlclRyYW5zbGF0aW9uKCk7XHJcbiAgICB2YXIgdGlja0RhdGEgPSBkM1xyXG4gICAgICAucmFuZ2Uoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubWFqb3JUaWNrcylcclxuICAgICAgLm1hcChmdW5jdGlvbiAoaSkge1xyXG4gICAgICAgIHJldHVybiAxIC8gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubWFqb3JUaWNrcztcclxuICAgICAgfSk7XHJcblxyXG4gICAgdmFyIGFyY3MgPSBzdmcuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCAnYXJjJykuYXR0cigndHJhbnNmb3JtJywgY2VudGVyVHgpO1xyXG5cclxuICAgIGFyY3NcclxuICAgICAgLnNlbGVjdEFsbCgncGF0aCcpXHJcbiAgICAgIC5kYXRhKGRhdGFfcmVhZHkpXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ3BhdGgnKVxyXG4gICAgICAub24oJ2NsaWNrJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoIW1ldGFEYXRhLmhhc0RyaWxsRG93biB8fCBtZXRhRGF0YS5jdXJyZW50VmFsdWUgPT0gMCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcmFuZ2UgPSBnZXRSYW5nZShkKTtcclxuICAgICAgICBzZWxmLmhhbmRsZUNsaWNrKHJhbmdlKTtcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgIHJldHVybiBjb2xvck1hcHNbaV07XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKCdpZCcsIGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yTWFwc1tpXTtcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoJ2QnLCBhcmMpXHJcbiAgICAgIC8vIC5zdHlsZSgnY3Vyc29yJywgJ3BvaW50ZXInKTtcclxuICAgICAgLnN0eWxlKCdjdXJzb3InLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChtZXRhRGF0YS5jdXJyZW50VmFsdWUgPiAwICYmIG1ldGFEYXRhLmhhc0RyaWxsRG93biAmJiAhaXNyaWEpXHJcbiAgICAgICAgICByZXR1cm4gJ3BvaW50ZXInO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdkZWZhdWx0JztcclxuICAgICAgfSk7XHJcblxyXG4gICAgbGV0IGdldFJhbmdlID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgbGV0IGluZGV4ID0gZGF0YV9yZWFkeS5pbmRleE9mKGQpO1xyXG4gICAgICByZXR1cm4gZGF0YVswXSArICcgYW5kICcgKyBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XHJcbiAgICB9O1xyXG5cclxuICAgIGxldCBwb2ludGVySGVhZExlbmd0aCA9IE1hdGgucm91bmQoXHJcbiAgICAgIHJhZGl1cyAqIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnBvaW50ZXJIZWFkTGVuZ3RoUGVyY2VudFxyXG4gICAgKTtcclxuXHJcbiAgICB2YXIgbGluZURhdGEgPSBbXHJcbiAgICAgIFtzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5wb2ludGVyV2lkdGggLyAyLCAwXSxcclxuICAgICAgWzAsIC1wb2ludGVySGVhZExlbmd0aF0sXHJcbiAgICAgIFstKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnBvaW50ZXJXaWR0aCAvIDIpLCAwXSxcclxuICAgICAgWzAsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnBvaW50ZXJUYWlsTGVuZ3RoXSxcclxuICAgICAgW3NlbGYuY2hhcnRDb25maWd1cmF0aW9uLnBvaW50ZXJXaWR0aCAvIDIsIDBdLFxyXG4gICAgXTtcclxuXHJcbiAgICB2YXIgcG9pbnRlckxpbmUgPSBkMy5saW5lKCk7XHJcbiAgICB2YXIgcGcgPSBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5kYXRhKFtsaW5lRGF0YV0pXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdwb2ludGVyJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGNlbnRlclR4KTtcclxuXHJcbiAgICB2YXIgcG9pbnRlclZhbHVlID0gbWV0YURhdGEuY3VycmVudFZhbHVlIC0gZGF0YVswXTtcclxuICAgIHZhciByYW5nZSA9IGRhdGFbZGF0YV9sZW5ndGggLSAxXSAtIGRhdGFbMF07XHJcbiAgICB2YXIgcG9pbnRlckFuZ2xlID1cclxuICAgICAgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubWluQW5nbGUgKyAocG9pbnRlclZhbHVlIC8gcmFuZ2UpICogMTgwO1xyXG4gICAgcGcuYXBwZW5kKCdwYXRoJylcclxuICAgICAgLmF0dHIoJ2QnLCBwb2ludGVyTGluZSlcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5wb2ludGVyQ29sb3IpXHJcbiAgICAgIC5hdHRyKFxyXG4gICAgICAgICd0cmFuc2Zvcm0nLFxyXG4gICAgICAgICdyb3RhdGUoJyArXHJcbiAgICAgICAgICBwb2ludGVyQW5nbGUgK1xyXG4gICAgICAgICAgJykgdHJhbnNsYXRlKDAsJyArXHJcbiAgICAgICAgICAoLXJhZGl1cyArIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnJpbmdXaWR0aCArIHBvaW50ZXJIZWFkTGVuZ3RoKSArXHJcbiAgICAgICAgICAnKSdcclxuICAgICAgKTtcclxuXHJcbiAgICB2YXIgbGcgPSBzdmcuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCAnbGFiZWwnKS5hdHRyKCd0cmFuc2Zvcm0nLCBjZW50ZXJUeCk7XHJcbiAgICBsZXQgbGFiZWxBcnJheVRlbXAgPSBbeyBuYW1lOiBkYXRhWzBdLCB2YWx1ZTogMCB9XTtcclxuICAgIGxldCBjb3VudCA9IDA7XHJcbiAgICBkYXRhX3JlYWR5Lm1hcChmdW5jdGlvbiAoZGF0YVVuaXQsIGkpIHtcclxuICAgICAgY291bnQgKz0gZGF0YVVuaXQ7XHJcbiAgICAgIGxldCB0ZW1wID0geyBuYW1lOiBkYXRhW2kgKyAxXSwgdmFsdWU6IGNvdW50IH07XHJcbiAgICAgIGxhYmVsQXJyYXlUZW1wLnB1c2godGVtcCk7XHJcbiAgICB9KTtcclxuICAgIGxhYmVsQXJyYXkgPSBsYWJlbEFycmF5VGVtcDtcclxuXHJcbiAgICBsZy5zZWxlY3RBbGwoJy5idWJibGUnKVxyXG4gICAgICAuZGF0YShsYWJlbEFycmF5KVxyXG4gICAgICAuZW50ZXIoKVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgdmFyIG5ld0FuZ2xlID1cclxuICAgICAgICAgIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm1pbkFuZ2xlICsgKGQudmFsdWUgLyByYW5nZSkgKiAxODA7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICdyb3RhdGUoJyArXHJcbiAgICAgICAgICBuZXdBbmdsZSArXHJcbiAgICAgICAgICAnKSB0cmFuc2xhdGUoMCwnICtcclxuICAgICAgICAgIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5sYWJlbEluc2V0IC0gcmFkaXVzIC0gMjApICtcclxuICAgICAgICAgICcpJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICB2YXIgbmV3QW5nbGUgPVxyXG4gICAgICAgICAgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubWluQW5nbGUgKyAoZC52YWx1ZSAvIHJhbmdlKSAqIDE4MDtcclxuICAgICAgICBpZiAoaSA9PSAwICYmIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzVmFsdWVMYWJsZUFkanVzdCkge1xyXG4gICAgICAgICAgcmV0dXJuICdyb3RhdGUoJyArICgwIC0gbmV3QW5nbGUpICsgJykgdHJhbnNsYXRlKC0yNywwKSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGkgPT0gbGFiZWxBcnJheS5sZW5ndGggLSAxICYmXHJcbiAgICAgICAgICBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1ZhbHVlTGFibGVBZGp1c3RcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybiAncm90YXRlKCcgKyAoMCAtIG5ld0FuZ2xlKSArICcpIHRyYW5zbGF0ZSgtMTUsMCknO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJ3JvdGF0ZSgnICsgKDAgLSBuZXdBbmdsZSkgKyAnKSB0cmFuc2xhdGUoLTE3LDApJztcclxuICAgICAgfSlcclxuICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTQwMClcclxuICAgICAgICAgIHJldHVybiAnZm9udC1zaXplOiAnICsgJzEycHgnICsgJzsgZm9udC13ZWlnaHQ6JyArICc2MDA7JztcclxuICAgICAgICBlbHNlIHJldHVybiAnZm9udC1zaXplOiAnICsgJzE0cHgnICsgJzsgZm9udC13ZWlnaHQ6JyArICc2MDA7JztcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChtZXRhRGF0YS5kYXRhVHlwZSkge1xyXG4gICAgICAgICAgcmV0dXJuIGQubmFtZSArIG1ldGFEYXRhLmRhdGFUeXBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZC5uYW1lO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgIC5hdHRyKFxyXG4gICAgICAgICd0cmFuc2Zvcm0nLFxyXG4gICAgICAgICd0cmFuc2xhdGUoJyArXHJcbiAgICAgICAgICAocmFkaXVzIC0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VycmVudFZhbHVlV2lkdGhTY2FsZUZhY3RvciAvIDIpICtcclxuICAgICAgICAgICcsJyArXHJcbiAgICAgICAgICB0b3BUZXh0UG9zaXRpb24gK1xyXG4gICAgICAgICAgJyknXHJcbiAgICAgIClcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VycmVudFZhbHVlV2lkdGhTY2FsZUZhY3RvciArIDgpXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXJyZW50VmFsdWVIZWlnaHRTY2FsZUZhY3RvcilcclxuICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ3ZhbHVlLWRpc3BsYXknKVxyXG4gICAgICAuc3R5bGUoXHJcbiAgICAgICAgJ2hlaWdodCcsXHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VycmVudFZhbHVlSGVpZ2h0U2NhbGVGYWN0b3IgKyAxMCArICdweCdcclxuICAgICAgKVxyXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPiAxNTAwKSB7XHJcbiAgICAgICAgICBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXJyZW50VmFsdWVIZWlnaHRTY2FsZUZhY3RvciAtIDI1ICsgJ3B4JztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uY3VycmVudFZhbHVlSGVpZ2h0U2NhbGVGYWN0b3IgLSAxNSArICdweCc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuaHRtbChtZXRhRGF0YS5jdXJyZW50VmFsdWUgKyBtZXRhRGF0YS5kYXRhVHlwZSk7XHJcbiAgICBpZiAobWV0YURhdGEuc3RhdHVzKSB7XHJcbiAgICAgIGxldCB3aWR0aFRlbXAgPSBtZXRhRGF0YS5zdGF0dXMubGVuZ3RoID4gNCA/IDIxMCA6IDEyMDtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAndHJhbnNmb3JtJyxcclxuICAgICAgICAgICd0cmFuc2xhdGUoJyArIChyYWRpdXMgLSB3aWR0aFRlbXAgLyAyKSArICcsJyArIG1pZFRleHRQb3NpdGlvbiArICcpJ1xyXG4gICAgICAgIClcclxuICAgICAgICAuYXR0cignd2lkdGgnLCB3aWR0aFRlbXApXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAnaGVpZ2h0JyxcclxuICAgICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1cnJlbnRWYWx1ZUhlaWdodFNjYWxlRmFjdG9yICsgMTBcclxuICAgICAgICApXHJcbiAgICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnc3RhdHVzLWRpc3BsYXknKVxyXG4gICAgICAgIC5zdHlsZShcclxuICAgICAgICAgICdmb250LXNpemUnLFxyXG4gICAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VycmVudFZhbHVlSGVpZ2h0U2NhbGVGYWN0b3IgLSAyNSArICdweCdcclxuICAgICAgICApXHJcbiAgICAgICAgLmh0bWwobWV0YURhdGEuc3RhdHVzKTtcclxuICAgIH1cclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgLmF0dHIoXHJcbiAgICAgICAgJ3RyYW5zZm9ybScsXHJcbiAgICAgICAgJ3RyYW5zbGF0ZSgnICsgKHJhZGl1cyAtIDEwNSkgKyAnLCcgKyBib3R0b21UZXh0UG9zaXRpb24gKyAnKSdcclxuICAgICAgKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCAyMTApXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXJyZW50VmFsdWVIZWlnaHRTY2FsZUZhY3RvcilcclxuICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2RhdGVyYW5nZS1kaXNwbGF5JylcclxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTQwMCkgcmV0dXJuICcxNHB4JztcclxuICAgICAgICAgICAgZWxzZSByZXR1cm4gJzE4cHgnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCAxNDAwKSByZXR1cm4gJzE0cHgnO1xyXG4gICAgICAgICAgZWxzZSByZXR1cm4gJzE4cHgnO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmh0bWwoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBkZXNpcmVkU2l6ZTtcclxuICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCAxNDAwKSBkZXNpcmVkU2l6ZSA9ICcxNHB4JztcclxuICAgICAgICBlbHNlIGRlc2lyZWRTaXplID0gJzE4cHgnO1xyXG4gICAgICAgIGlmIChtZXRhRGF0YS5kYXRlUmFuZ2UpXHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJtYXJnaW5yaWdodC0zXCI+PGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhclwiPjwvaT48L3NwYW4+PHNwYW4+ICcgK1xyXG4gICAgICAgICAgICBtZXRhRGF0YS5kYXRlUmFuZ2UgK1xyXG4gICAgICAgICAgICAnPC9zcGFuPidcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJyc7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHZhciBjb250YWluZXJNaWRXaWR0aCA9IHBhcnNlSW50KGNoYXJ0Q29udGFpbmVyLnN0eWxlKCd3aWR0aCcpKSAvIDI7XHJcbiAgICB2YXIgbm9kZUhhbGZXaWR0aCA9IHN2Zy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLyAyO1xyXG4gICAgdmFyIHVwZGF0ZWRTdGFydGluZ1BvaW50ID0gY29udGFpbmVyTWlkV2lkdGggLSBub2RlSGFsZldpZHRoO1xyXG5cclxuICAgIHN2Zy5hdHRyKFxyXG4gICAgICAndHJhbnNmb3JtJyxcclxuICAgICAgJ3RyYW5zbGF0ZSgnICtcclxuICAgICAgICAodXBkYXRlZFN0YXJ0aW5nUG9pbnQgKyBtYXJnaW4ubGVmdCkgK1xyXG4gICAgICAgICcsJyArXHJcbiAgICAgICAgbWFyZ2luLnRvcCArXHJcbiAgICAgICAgJyknXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2xpY2soZDogYW55KSB7XHJcbiAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdChkKTtcclxuICB9XHJcbiAgaGFuZGxlSGVhZGVyTWVudUNsaWNrKGlkKSB7XHJcbiAgICB0aGlzLmhlYWRlck1lbnVjbGlja0V2ZW50LmVtaXQoaWQpO1xyXG4gIH1cclxufSIsIjxkaXYgI2d1YWdlY29udGFpbmVyIGNsYXNzPVwibGliLWNoYXJ0LXdyYXBwZXJcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHZhcigtLWNhcmQtYmcpO1wiXHJcbiAgKHJlc2l6ZWQpPVwib25SZXNpemVkKCRldmVudClcIj5cclxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWFsdFwiICpuZ0lmPVwiIWlzSGVhZGVyVmlzaWJsZVwiPlxyXG4gICAgPGxpYi1jaGFydC1oZWFkZXItdjIgW2NoYXJ0RGF0YV09XCJjaGFydERhdGFcIiBbY2hhcnRDb25maWd1cmF0aW9uXT1cImNoYXJ0Q29uZmlndXJhdGlvblwiXHJcbiAgICAgIChjbGlja0V2ZW50KT1cImhhbmRsZUNsaWNrKCRldmVudClcIj48L2xpYi1jaGFydC1oZWFkZXItdjI+XHJcbiAgPC9kaXY+XHJcbiAgPGxpYi1jaGFydC1oZWFkZXItdjEgW3RpdGxlXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS50aXRsZVwiIFtoYXNEcmlsbERvd25dPVwiY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93blwiXHJcbiAgICBbaXNFZGl0RW5hYmxlZF09XCJjaGFydERhdGEubWV0YURhdGEuaXNFZGl0RW5hYmxlZFwiIFtpc3JpYV09XCJjdXN0b21DaGFydENvbmZpZ3VyYXRpb24uaXNSaWFcIiBbbWVudU9wdGlvbnNdPVwiY2hhcnRDb25maWd1cmF0aW9uLmhlYWRlck1lbnVPcHRpb25zXCJcclxuICAgIFtzZWxlY3RlZEtwaVRvb2x0b3BdPVwiY2hhcnRDb25maWd1cmF0aW9uLnNlbGVjdGVkS3BpVG9vbHRvcFwiIChtZW51T3B0aW9uQ2xpY2tFdmVudCk9XCJoYW5kbGVIZWFkZXJNZW51Q2xpY2soJGV2ZW50KVwiXHJcbiAgICBbaXNBbGVydEVuYWJsZWRdPVwiaXNBbGVydEVuYWJsZWRcIiAqbmdJZj1cImlzSGVhZGVyVmlzaWJsZVwiPjwvbGliLWNoYXJ0LWhlYWRlci12MT5cclxuICA8ZGl2IFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodFwiIGlkPVwiZ3VhZ2VjaGFydGNvbnRhaW5lclwiICNndWFnZWNoYXJ0Y29udGFpbmVyXHJcbiAgICBjbGFzcz1cImxpYi1jaGFydC1zdmcgZ3VhZ2Vjb250YWluZXJcIj48L2Rpdj5cclxuPC9kaXY+Il19