axidio-styleguide-library1-v2 0.4.41 → 0.4.43

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.
@@ -131,7 +131,6 @@ export class GroupChartComponent extends ComponentUniqueId {
131
131
  const containerWidth = parseInt(chartContainer.style('width'));
132
132
  const leftSvgWidth = margin.left + 20;
133
133
  const rightSvgWidth = 60;
134
- // Calculate available width excluding fixed y-axis elements
135
134
  const baseWidth = containerWidth - leftSvgWidth - rightSvgWidth;
136
135
  const dataLength = this.chartData.data.length;
137
136
  let width = baseWidth;
@@ -186,7 +185,7 @@ export class GroupChartComponent extends ComponentUniqueId {
186
185
  if (this.chartConfiguration.isMultiChartGridLine !== undefined) {
187
186
  x = d3
188
187
  .scaleBand()
189
- .rangeRound([width, 0])
188
+ .rangeRound([0, width]) // FIXED: Changed range to start from 0
190
189
  .align(0.5)
191
190
  .padding(0.5)
192
191
  .domain(data.map((d) => d.name.toLowerCase()));
@@ -195,11 +194,22 @@ export class GroupChartComponent extends ComponentUniqueId {
195
194
  x = d3
196
195
  .scaleBand()
197
196
  .domain(groups)
198
- .range([leftAndRightSpaces, width - rightSvgWidth - leftAndRightSpaces])
199
- .padding(0.3);
197
+ .range([0, width - rightSvgWidth]) // FIXED: Start from 0 for better centering
198
+ .padding(0.3)
199
+ .align(0.5); // FIXED: Center the bands
200
+ }
201
+ if (data.length === 1 && !this.chartConfiguration.isMultiChartGridLine) {
202
+ const singleBarWidth = Math.min(80, (width - rightSvgWidth) * 0.6); // Max 60% of available width
203
+ x.range([
204
+ ((width - rightSvgWidth) - singleBarWidth) / 2,
205
+ ((width - rightSvgWidth) - singleBarWidth) / 2 + singleBarWidth
206
+ ]);
200
207
  }
201
208
  const xScaleFromOrigin = d3.scaleBand().domain(groups).range([0, width - rightSvgWidth]);
202
- const xSubgroup = d3.scaleBand().domain(keyList).range([0, x.bandwidth()]);
209
+ const xSubgroup = d3.scaleBand()
210
+ .domain(keyList)
211
+ .range([0, x.bandwidth()])
212
+ .padding(0.1);
203
213
  // FIXED: Improved max value calculation that considers height
204
214
  const maxValue = this.calculateMaxValue(data, keyList, height);
205
215
  const y = d3.scaleLinear().domain([0, maxValue]).nice().rangeRound([height, 0]);
@@ -333,22 +343,13 @@ export class GroupChartComponent extends ComponentUniqueId {
333
343
  .attr('class', 'x1 axis1')
334
344
  .attr('transform', `translate(0,${height})`)
335
345
  .call(d3.axisBottom(x).tickSize(0));
336
- // FIXED: Show X-axis line
337
346
  xAxis
338
- .select('.domain')
339
- .style('stroke', 'var(--chart-axis-color, #000000)')
340
- .style('stroke-width', '1px')
341
- .style('display', 'block');
342
- xAxis.selectAll('g.tick line').remove();
343
- const textClass = 'lib-xaxis-labels-texts-drilldown';
344
- const textSelection = xAxis
345
347
  .selectAll('g.tick text')
346
- .attr('class', textClass)
348
+ .attr('class', 'lib-xaxis-labels-texts-drilldown')
347
349
  .style('fill', 'var(--chart-text-color, #666666)')
348
- .style('font-size', '11px');
349
- if (keyList.length > 1 && !metaData.xLabel) {
350
- textSelection.attr('y', 28);
351
- }
350
+ .style('font-size', '11px')
351
+ .attr('text-anchor', 'middle')
352
+ .attr('dx', x.bandwidth() / 2);
352
353
  }
353
354
  else {
354
355
  this.renderMultiChartXAxis(svg, x, height, data, metaData);
@@ -541,6 +542,7 @@ export class GroupChartComponent extends ComponentUniqueId {
541
542
  const { data, metaData, keyList, isRia } = chartContext;
542
543
  const { x, xSubgroup, y } = scales;
543
544
  const { height } = dimensions;
545
+ // FIXED: Improved bar group positioning
544
546
  const state = svg
545
547
  .append('g')
546
548
  .selectAll('.state')
@@ -555,15 +557,19 @@ export class GroupChartComponent extends ComponentUniqueId {
555
557
  .append('rect')
556
558
  .attr('class', 'bars')
557
559
  .on('click', (d) => this.handleBarClick(d, metaData))
558
- .attr('x', (d) => this.getBarX(d, data, x, xSubgroup))
560
+ .attr('x', (d) => {
561
+ // FIXED: Improved X positioning for centering
562
+ if (this.chartConfiguration.isDrilldownChart) {
563
+ return this.calculateDrilldownBarX(d, data, x) - (this.getBarWidth(d, data, x, xSubgroup) / 2);
564
+ }
565
+ return xSubgroup(d.key);
566
+ })
559
567
  .attr('y', (d) => {
560
- // FIXED: Ensure bars start from correct Y position
561
568
  const value = d.value === -1 ? 0 : d.value;
562
569
  return y(value);
563
570
  })
564
571
  .attr('width', (d) => this.getBarWidth(d, data, x, xSubgroup))
565
572
  .attr('height', (d) => {
566
- // FIXED: Improved height calculation
567
573
  const value = d.value === -1 ? 0 : d.value;
568
574
  return height - y(value);
569
575
  })
@@ -594,7 +600,10 @@ export class GroupChartComponent extends ComponentUniqueId {
594
600
  if (this.chartConfiguration.isDrilldownChart) {
595
601
  return this.calculateDrilldownBarX(d, data, x);
596
602
  }
597
- return xSubgroup(d.key);
603
+ // FIXED: For non-drilldown charts, ensure proper positioning
604
+ const basePosition = xSubgroup(d.key);
605
+ const barWidth = xSubgroup.bandwidth();
606
+ return basePosition + (barWidth / 2); // Center of the bar
598
607
  }
599
608
  calculateDrilldownBarX(d, data, x) {
600
609
  let tempScale;
@@ -602,27 +611,38 @@ export class GroupChartComponent extends ComponentUniqueId {
602
611
  if (indiv.name === d.name) {
603
612
  const keys = Object.keys(indiv).filter((temp, i) => i !== 0);
604
613
  tempScale = d3.scaleBand().domain(keys).range([0, x.bandwidth()]);
614
+ // FIXED: Better centering for single bar and multiple bars
605
615
  if (x.bandwidth() > 100) {
606
616
  tempScale = this.adjustDrilldownScale(tempScale, data, x);
607
617
  }
608
618
  }
609
619
  });
610
- return tempScale ? tempScale(d.key) : 0;
620
+ // FIXED: Ensure proper centering
621
+ if (tempScale) {
622
+ const barPosition = tempScale(d.key);
623
+ const barWidth = tempScale.bandwidth();
624
+ return barPosition + (barWidth / 2); // Center of the bar
625
+ }
626
+ return 0;
611
627
  }
612
628
  adjustDrilldownScale(tempScale, data, x) {
629
+ // FIXED: Improved centering logic
613
630
  if (this.chartData.data.length === 1) {
614
- const keysLength = Object.keys(this.chartData.data[0]).length;
615
- const offset = keysLength === 2 ? 200 : 300;
631
+ // Single bar - center it properly
632
+ const keysLength = Object.keys(this.chartData.data[0]).length - 1; // Exclude 'name'
633
+ const totalBarWidth = Math.min(keysLength * 40, x.bandwidth() * 0.8); // Max 80% of available width
616
634
  tempScale.range([
617
- 0 + (x.bandwidth() - offset) / 2,
618
- x.bandwidth() - (x.bandwidth() - offset) / 2,
619
- ]);
635
+ (x.bandwidth() - totalBarWidth) / 2,
636
+ x.bandwidth() - (x.bandwidth() - totalBarWidth) / 2
637
+ ]).padding(0.2);
620
638
  }
621
639
  else {
640
+ // Multiple bars - distribute evenly with proper padding
641
+ const totalBarWidth = Math.min(125, x.bandwidth() * 0.8);
622
642
  tempScale.range([
623
- 0 + (x.bandwidth() - 125) / 2,
624
- x.bandwidth() - (x.bandwidth() - 125) / 2,
625
- ]);
643
+ (x.bandwidth() - totalBarWidth) / 2,
644
+ x.bandwidth() - (x.bandwidth() - totalBarWidth) / 2
645
+ ]).padding(0.3);
626
646
  }
627
647
  return tempScale;
628
648
  }
@@ -967,4 +987,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
967
987
  }], headerMenuclickEvent: [{
968
988
  type: Output
969
989
  }] } });
970
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2dyb3VwLWNoYXJ0L2dyb3VwLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ncm91cC1jaGFydC9ncm91cC1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sa0JBQWtCLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7QUE4RWxELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxpQkFBaUI7SUFxRHhEO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUE3Q0EsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUV6RCxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUNyQiw0QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFDaEMsdUJBQWtCLEdBQXVCLEVBQXdCLENBQUM7UUFDbEUsZUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFFVix5QkFBb0IsR0FBZ0M7WUFDakUsUUFBUSxFQUFFO2dCQUNOLEtBQUssRUFBRSxFQUFFO2dCQUNULE1BQU0sRUFBRSxHQUFH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RUQsY0FBYyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVELDhCQUE4QixDQUFDLEtBQVU7UUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQzsrR0EzbUNVLG1CQUFtQjttR0FBbkIsbUJBQW1CLG9mQzVGaEMsMDdDQXlDQTs7NEZEbURhLG1CQUFtQjtrQkFOL0IsU0FBUzsrQkFDRSxpQkFBaUIsaUJBR1osaUJBQWlCLENBQUMsSUFBSTt3REFJckMsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJbEQsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHcEMsU0FBUztzQkFBakIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VW5pcXVlSWQgfSBmcm9tICcuLi91bmlxdWUtaWQnO1xyXG5pbXBvcnQgQ2hhcnRIZWxwZXIgZnJvbSAnLi4vY2hhcnQtaGVscGVyJztcclxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG5pbXBvcnQgeyBSZXNpemVkRXZlbnQgfSBmcm9tICdhbmd1bGFyLXJlc2l6ZS1ldmVudCc7XHJcbmltcG9ydCBIZWFkZXJDb25maWdIZWxwZXIgZnJvbSAnLi4vaGVhZGVyLWNvbmZpZyc7XHJcblxyXG5pbnRlcmZhY2UgQ2hhcnRNZXRhRGF0YSB7XHJcbiAgY29sb3JzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xyXG4gIGNvbG9yQWJvdmVUYXJnZXQ/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xyXG4gIGtleUxpc3Q6IHN0cmluZ1tdO1xyXG4gIGhhc0RyaWxsRG93bj86IGJvb2xlYW47XHJcbiAgYmFyV2l0aG91dENsaWNrPzogc3RyaW5nW107XHJcbiAgZGF0YVR5cGU/OiBzdHJpbmc7XHJcbiAgeUxhYmVsPzogc3RyaW5nO1xyXG4gIHhMYWJlbD86IHN0cmluZztcclxuICBsaW5leUxhYmVsPzogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgVGFyZ2V0TGluZURhdGEge1xyXG4gIHRhcmdldDogbnVtYmVyO1xyXG4gIGNvbG9yOiBzdHJpbmc7XHJcbiAgdGFyZ2V0TmFtZT86IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIENoYXJ0Q29uZmlndXJhdGlvbiB7XHJcbiAgbWFyZ2luOiB7IHRvcDogbnVtYmVyOyByaWdodDogbnVtYmVyOyBib3R0b206IG51bWJlcjsgbGVmdDogbnVtYmVyIH07XHJcbiAgbGFiZWxGb3JtYXR0ZXI6ICh2YWx1ZTogYW55KSA9PiBzdHJpbmc7XHJcbiAgc3ZnSGVpZ2h0OiBudW1iZXI7XHJcbiAgbnVtYmVyT2ZZVGlja3M6IG51bWJlcjtcclxuICBsZWdlbmRKdXN0aWZpZWQ6IGJvb2xlYW47XHJcbiAgeUxpbmVBeGlzTGFiZWxGb21hdHRlcjogKHZhbHVlOiBhbnkpID0+IHN0cmluZztcclxuICB5QXhpc0xhYmVsRm9tYXR0ZXI6ICh2YWx1ZTogYW55KSA9PiBzdHJpbmc7XHJcbiAgbGluZUdyYXBoQ29sb3I6IHN0cmluZztcclxuICBzaG93TGluZUNoYXJ0QXhpczogYm9vbGVhbjtcclxuICBzaG93VmFsdWVzOiBib29sZWFuO1xyXG4gIGhlYWRlck1lbnVPcHRpb25zOiBhbnlbXTtcclxuICB4QXhpc0dyaWQ/OiBib29sZWFuO1xyXG4gIHlBeGlzR3JpZDogYm9vbGVhbjtcclxuICBsZWdlbmRWaXNpYmxlOiBib29sZWFuO1xyXG4gIGlzSGVhZGVyVmlzaWJsZT86IGJvb2xlYW47XHJcbiAgaXNUcmFuc3BhcmVudEJhY2tncm91bmQ/OiBib29sZWFuO1xyXG4gIGlzTXVsdGlDaGFydEdyaWRMaW5lPzogYm9vbGVhbjtcclxuICBpc0Z1bGxTY3JlZW4/OiBib29sZWFuO1xyXG4gIGN1c3RvbVlzY2FsZT86IG51bWJlcjtcclxuICB0ZXh0c09uQmFyPzogYm9vbGVhbjtcclxuICBpc1hheGlzTGFiZWxIaWRkZW4/OiBib29sZWFuO1xyXG4gIGlzWWF4aXNMYWJlbEhpZGRlbjogYm9vbGVhbjtcclxuICBpc1lheGlzSGlkZGVuPzogYm9vbGVhbjtcclxuICBpc1lheGlzRGFzaGVkPzogYm9vbGVhbjtcclxuICB0ZXh0Rm9ybWF0dGVyPzogc3RyaW5nO1xyXG4gIGlzTm9BbHRlcm5hdGVYYXhpc1RleHQ/OiBib29sZWFuO1xyXG4gIGlzWGdyaWRCZXR3ZWVuTGFiZWxzPzogYm9vbGVhbjtcclxuICBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcclxuICBoaWRlTGVnZW5kT25Ub3A6IGJvb2xlYW47XHJcbiAgaXNYYXhpc0NvbG9yOiBzdHJpbmc7XHJcbiAgbGFiZWxPdmVybGFwTWlub3JGaXg6IGJvb2xlYW47XHJcbiAgbm9Ib3ZlckVmZmVjdDogYm9vbGVhbjtcclxuICBub0hvdmVyRGlzcGxheURhdGE6IGJvb2xlYW47XHJcbiAgc2hvd1hheGlzVG9wOiBib29sZWFuO1xyXG4gIGRpc3BsYXlZYXhpc0xhYmVscz86IGJvb2xlYW47XHJcbiAgeExhYmVsc09uU2FtZUxpbmU/OiBib29sZWFuO1xyXG4gIHRleHRBbHdheXNIb3Jpem9udGFsPzogYm9vbGVhbjtcclxuICBsZWdlbmRBdFRvcFJpZ2h0PzogYm9vbGVhbjtcclxuICBpc0RyaWxsZG93bkNoYXJ0PzogYm9vbGVhbjtcclxuICBkaXNwbGF5VGl0bGVPblRvcD86IGJvb2xlYW47XHJcbiAgaXNUb2dnbGVWaXNpYmxlPzogYm9vbGVhbjtcclxuICBpc1RpdGxlSGlkZGVuPzogYm9vbGVhbjtcclxuICBpc0Rpc3BsYXlCYXJEZXRhaWxzQXRCb3R0b20/OiBib29sZWFuO1xyXG4gIGhvd21hbnlCYXJEZXRhaWxzVG9EaXNwbGF5OiBudW1iZXI7XHJcbiAgYmFyVmF1bGVDb2xvcj86IHN0cmluZztcclxuICB5QXhpc0N1c3RvbVRleHRTdHlsZXM/OiBzdHJpbmc7XHJcbiAgeUF4aXNDdXN0b21sYWJlbFN0eWxlcz86IHN0cmluZztcclxuICB4QXhpc0N1c3RvbWxhYmVsU3R5bGVzPzogc3RyaW5nO1xyXG4gIGlzUmlhPzogYm9vbGVhbjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZ3JvdXAtY2hhcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ncm91cC1jaGFydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZ3JvdXAtY2hhcnQuY29tcG9uZW50Lmxlc3MnLCAnLi4vY29tbW9uLXN0eWxlcy5sZXNzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdyb3VwQ2hhcnRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRVbmlxdWVJZCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjaGFydGNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGdyb3VwY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgY2hhcnREYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uOiBhbnk7XHJcbiAgQE91dHB1dCgpIGNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaGVhZGVyTWVudWNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgaXNIZWFkZXJWaXNpYmxlID0gdHJ1ZTtcclxuICBsZWdlbmRWaXNpYmxlID0gdHJ1ZTtcclxuICBpc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9IGZhbHNlO1xyXG4gIGNoYXJ0Q29uZmlndXJhdGlvbjogQ2hhcnRDb25maWd1cmF0aW9uID0ge30gYXMgQ2hhcnRDb25maWd1cmF0aW9uO1xyXG4gIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cztcclxuXHJcbnByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdENvbmZpZ3VyYXRpb246IFBhcnRpYWw8Q2hhcnRDb25maWd1cmF0aW9uPiA9IHtcclxuICAgIFwibWFyZ2luXCI6IHtcclxuICAgICAgICBcInRvcFwiOiAzMCxcclxuICAgICAgICBcImxlZnRcIjogMTEwLFxyXG4gICAgICAgIFwicmlnaHRcIjogNDAsXHJcbiAgICAgICAgXCJib3R0b21cIjogNTBcclxuICAgIH0sXHJcbiAgICBsYWJlbEZvcm1hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIHN2Z0hlaWdodDogNzAsXHJcbiAgICBudW1iZXJPZllUaWNrczogNSxcclxuICAgIGxlZ2VuZEp1c3RpZmllZDogdHJ1ZSxcclxuICAgIHlMaW5lQXhpc0xhYmVsRm9tYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICB5QXhpc0xhYmVsRm9tYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICBsaW5lR3JhcGhDb2xvcjogJyNGNkQyODMnLFxyXG4gICAgc2hvd0xpbmVDaGFydEF4aXM6IHRydWUsXHJcbiAgICBzaG93VmFsdWVzOiB0cnVlLFxyXG4gICAgaGVhZGVyTWVudU9wdGlvbnM6IEhlYWRlckNvbmZpZ0hlbHBlci5oZWFkZXJDb25maWcuaGVhZGVyTWVudU9wdGlvbnMsXHJcbiAgICB5QXhpc0dyaWQ6IHRydWUsXHJcbiAgICBsZWdlbmRWaXNpYmxlOiB0cnVlLFxyXG4gICAgaXNZYXhpc0xhYmVsSGlkZGVuOiBmYWxzZSxcclxuICAgIGJhY2tncm91bmRDb2xvcjogJyNGRkZGRkYnLFxyXG4gICAgaGlkZUxlZ2VuZE9uVG9wOiB0cnVlLFxyXG4gICAgaXNYYXhpc0NvbG9yOiAnIzk5OTk5OScsXHJcbiAgICBsYWJlbE92ZXJsYXBNaW5vckZpeDogdHJ1ZSxcclxuICAgIG5vSG92ZXJFZmZlY3Q6IHRydWUsXHJcbiAgICBub0hvdmVyRGlzcGxheURhdGE6IHRydWUsXHJcbiAgICBzaG93WGF4aXNUb3A6IHRydWUsXHJcbiAgICBob3dtYW55QmFyRGV0YWlsc1RvRGlzcGxheTogMCxcclxuICB9O1xyXG5cclxuICB1bmlxdWVJZDogYW55ID0gdGhpcy5nZXRVbmlxdWVJZCgpO1xyXG4gIGlzWm9vbWVkT3V0ID0gZmFsc2U7XHJcbiAgaXNERDFPcGVuID0gZmFsc2U7XHJcbiAgaXNERDJPcGVuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge31cclxuXHJcbiAgZ2V0IGlzQWxlcnRFbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uPy5oZWFkZXJNZW51T3B0aW9ucz8uc29tZShcclxuICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLmlkID09PSAnZWRpdEFsZXJ0J1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uUmVzaXplZChldmVudDogUmVzaXplZEV2ZW50KTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgZDMuc2VsZWN0KCcjJyArIHRoaXMudW5pcXVlSWQpLnJlbW92ZSgpO1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVncm91cENoYXJ0KCk7XHJcbiAgICB9LCAxMCk7XHJcbiAgfVxyXG5cclxuICBpc1pvb21PdXRTZWxlY3RlZChpc1pvb21PdXQ6IGJvb2xlYW4sIGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNab29tZWRPdXQgPSBpc1pvb21PdXQ7XHJcbiAgICB0aGlzLm9uUmVzaXplZChldmVudCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVab29taW5ab29tb3V0Q2xpY2soeyBpc1pvb21PdXQsIGV2ZW50IH0pOiB2b2lkIHtcclxuICAgIHRoaXMuaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0LCBldmVudCk7XHJcbiAgfVxyXG5cclxuICBpc0xlZ2VuZFZpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISEoXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhPy5tZXRhRGF0YT8uY29sb3JzICYmXHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9ycykubGVuZ3RoID4gMVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGtlZXBPcmRlciA9IChhLCBiKSA9PiBhO1xyXG5cclxuICBpbml0aWFsaXplZ3JvdXBDaGFydCgpOiB2b2lkIHtcclxuICAgIHRoaXMubWVyZ2VDb25maWd1cmF0aW9ucygpO1xyXG4gICAgY29uc3QgY2hhcnRDb250ZXh0ID0gdGhpcy5wcmVwYXJlQ2hhcnREYXRhKCk7XHJcbiAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5jYWxjdWxhdGVEaW1lbnNpb25zKGNoYXJ0Q29udGV4dCk7XHJcbiAgICBjb25zdCBzY2FsZXMgPSB0aGlzLmNyZWF0ZVNjYWxlcyhjaGFydENvbnRleHQsIGRpbWVuc2lvbnMpO1xyXG4gICAgY29uc3Qgc3ZnRWxlbWVudHMgPSB0aGlzLmNyZWF0ZVNWR1N0cnVjdHVyZShkaW1lbnNpb25zKTtcclxuXHJcbiAgICB0aGlzLnJlbmRlckF4ZXMoc3ZnRWxlbWVudHMsIHNjYWxlcywgY2hhcnRDb250ZXh0LCBkaW1lbnNpb25zKTtcclxuICAgIHRoaXMucmVuZGVyQmFycyhzdmdFbGVtZW50cy5zdmcsIGNoYXJ0Q29udGV4dCwgc2NhbGVzLCBkaW1lbnNpb25zKTtcclxuICAgIHRoaXMucmVuZGVyTGFiZWxzKHN2Z0VsZW1lbnRzLCBzY2FsZXMsIGNoYXJ0Q29udGV4dCwgZGltZW5zaW9ucyk7XHJcbiAgICB0aGlzLnJlbmRlclRhcmdldExpbmUoc3ZnRWxlbWVudHMsIHNjYWxlcywgY2hhcnRDb250ZXh0LCBkaW1lbnNpb25zKTtcclxuICAgIHRoaXMucmVuZGVyTGluZUdyYXBoKHN2Z0VsZW1lbnRzLnN2ZywgY2hhcnRDb250ZXh0LCBzY2FsZXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZXJnZUNvbmZpZ3VyYXRpb25zKCk6IHZvaWQge1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbikge1xyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbltrZXldID0gQ2hhcnRIZWxwZXIuZ2V0VmFsdWVCeUNvbmZpZ3VyYXRpb25UeXBlKFxyXG4gICAgICAgIGtleSxcclxuICAgICAgICB0aGlzLmRlZmF1bHRDb25maWd1cmF0aW9uLFxyXG4gICAgICAgIHRoaXMuY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaXNIZWFkZXJWaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNIZWFkZXJWaXNpYmxlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxlZ2VuZFZpc2libGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmxlZ2VuZFZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRWaXNpYmxlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcmVwYXJlQ2hhcnREYXRhKCkge1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuY2hhcnREYXRhLmRhdGE7XHJcbiAgICBjb25zdCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSA9IHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhO1xyXG4gICAgY29uc3QgbGluZURhdGEgPSB0aGlzLmNoYXJ0RGF0YS5saW5lRGF0YTtcclxuXHJcbiAgICBpZiAoIW1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXQpIHtcclxuICAgICAgbWV0YURhdGEuY29sb3JBYm92ZVRhcmdldCA9IG1ldGFEYXRhLmNvbG9ycztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBkYXRhLFxyXG4gICAgICBtZXRhRGF0YSxcclxuICAgICAgbGluZURhdGEsXHJcbiAgICAgIGtleUxpc3Q6IG1ldGFEYXRhLmtleUxpc3QsXHJcbiAgICAgIGNvbG9yTWFwOiBtZXRhRGF0YS5jb2xvcnMsXHJcbiAgICAgIGlzUmlhOiB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbj8uaXNSaWEgfHwgZmFsc2UsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVEaW1lbnNpb25zKGNoYXJ0Q29udGV4dDogYW55KSB7XHJcbiAgICBjb25zdCBjaGFydENvbnRhaW5lciA9IGQzLnNlbGVjdCh0aGlzLmNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50KTtcclxuICAgIGNvbnN0IHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lciA9IGQzLnNlbGVjdCh0aGlzLmdyb3VwY29udGFpbmVyRWx0Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgY29uc3QgbWFyZ2luID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubWFyZ2luO1xyXG5cclxuICAgIGxldCB3aWR0aCA9IHRoaXMuY2FsY3VsYXRlV2lkdGgoY2hhcnRDb250YWluZXIsIG1hcmdpbik7XHJcbiAgICBsZXQgaGVpZ2h0ID0gdGhpcy5jYWxjdWxhdGVIZWlnaHQodmVydGljYWxzdGFja2VkY29udGFpbmVyLCBtYXJnaW4pO1xyXG5cclxuICAgIGNvbnN0IG1pbkhlaWdodCA9IDE1NTtcclxuICAgIGhlaWdodCA9IE1hdGgubWF4KGhlaWdodCwgbWluSGVpZ2h0KTtcclxuXHJcbiAgICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0LCBtYXJnaW4sIGNoYXJ0Q29udGFpbmVyLCB2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIgfTtcclxuICB9XHJcblxyXG5wcml2YXRlIGNhbGN1bGF0ZVdpZHRoKGNoYXJ0Q29udGFpbmVyOiBhbnksIG1hcmdpbjogYW55KTogbnVtYmVyIHtcclxuICBjb25zdCBjb250YWluZXJXaWR0aCA9IHBhcnNlSW50KGNoYXJ0Q29udGFpbmVyLnN0eWxlKCd3aWR0aCcpKTtcclxuICBjb25zdCBsZWZ0U3ZnV2lkdGggPSBtYXJnaW4ubGVmdCArIDIwO1xyXG4gIGNvbnN0IHJpZ2h0U3ZnV2lkdGggPSA2MDtcclxuICBcclxuICAvLyBDYWxjdWxhdGUgYXZhaWxhYmxlIHdpZHRoIGV4Y2x1ZGluZyBmaXhlZCB5LWF4aXMgZWxlbWVudHNcclxuICBjb25zdCBiYXNlV2lkdGggPSBjb250YWluZXJXaWR0aCAtIGxlZnRTdmdXaWR0aCAtIHJpZ2h0U3ZnV2lkdGg7XHJcbiAgY29uc3QgZGF0YUxlbmd0aCA9IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoO1xyXG4gIGxldCB3aWR0aCA9IGJhc2VXaWR0aDtcclxuXHJcbiAgaWYgKGRhdGFMZW5ndGggPiAzMCAmJiB0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICBjb25zdCBtdWx0aXBsaWVyID0gdGhpcy5jaGFydERhdGEuZHJvcGRvd25EYXRhMSA/IDYwIDogNDA7XHJcbiAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBkYXRhTGVuZ3RoICogbXVsdGlwbGllcik7XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5jaGFydERhdGEuZHJvcGRvd25EYXRhMiAmJiB3aWR0aCA8IGRhdGFMZW5ndGggKiAxMjAgJiYgdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgd2lkdGggPSBkYXRhTGVuZ3RoICogMTIwO1xyXG4gIH1cclxuXHJcbiAgaWYgKGRhdGFMZW5ndGggPiA4ICYmICF0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICBpZiAodGhpcy5jaGFydERhdGEuZHJvcGRvd25EYXRhMiAmJiB3aWR0aCA8IGRhdGFMZW5ndGggKiAyNTApIHtcclxuICAgICAgd2lkdGggPSBkYXRhTGVuZ3RoICogMjUwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgd2lkdGggPSBkYXRhTGVuZ3RoICogMTYwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHdpZHRoO1xyXG59XHJcblxyXG5wcml2YXRlIGNhbGN1bGF0ZUhlaWdodCh2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXI6IGFueSwgbWFyZ2luOiBhbnkpOiBudW1iZXIge1xyXG4gIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpIHx8IDQwMDtcclxuICBsZXQgaGVpZ2h0O1xyXG5cclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNGdWxsU2NyZWVuKSB7XHJcbiAgICBoZWlnaHQgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgfHwgY29udGFpbmVySGVpZ2h0O1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBGSVhFRDogVXNlIHBlcmNlbnRhZ2Ugb2YgY29udGFpbmVyIGhlaWdodCBtb3JlIHJlbGlhYmx5XHJcbiAgICBjb25zdCBzdmdIZWlnaHRQZXJjZW50YWdlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0IHx8IDcwO1xyXG4gICAgaGVpZ2h0ID0gKGNvbnRhaW5lckhlaWdodCAqIHN2Z0hlaWdodFBlcmNlbnRhZ2UpIC8gMTAwO1xyXG4gIH1cclxuXHJcbiAgLy8gRklYRUQ6IEFwcGx5IG1hcmdpbiBhZGp1c3RtZW50cyBjb25zaXN0ZW50bHlcclxuICBoZWlnaHQgPSBoZWlnaHQgLSBtYXJnaW4udG9wIC0gbWFyZ2luLmJvdHRvbTtcclxuXHJcbiAgLy8gRklYRUQ6IEFkZGl0aW9uYWwgYWRqdXN0bWVudHMgZm9yIGhlYWRlcnNcclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCAmJiAhdGhpcy5pc0hlYWRlclZpc2libGUpIHtcclxuICAgIGhlaWdodCAtPSAxMzA7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmlzSGVhZGVyVmlzaWJsZSkge1xyXG4gICAgaGVpZ2h0IC09IDEwMDtcclxuICB9XHJcblxyXG4gIC8vIEZJWEVEOiBBZGQgdGhlIGV4dHJhIDUwcHggeW91IHdhbnRlZFxyXG4gIGhlaWdodCArPSA1MDtcclxuXHJcbiAgcmV0dXJuIE1hdGgubWF4KGhlaWdodCwgMTUwKTsgLy8gRW5zdXJlIG1pbmltdW0gaGVpZ2h0XHJcbn1cclxuXHJcbnByaXZhdGUgY3JlYXRlU2NhbGVzKGNoYXJ0Q29udGV4dDogYW55LCBkaW1lbnNpb25zOiBhbnkpIHtcclxuICBjb25zdCB7IGRhdGEsIG1ldGFEYXRhLCBsaW5lRGF0YSwga2V5TGlzdCB9ID0gY2hhcnRDb250ZXh0O1xyXG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgbWFyZ2luIH0gPSBkaW1lbnNpb25zO1xyXG4gIGNvbnN0IGxlZnRBbmRSaWdodFNwYWNlcyA9IDUwO1xyXG4gIGNvbnN0IHJpZ2h0U3ZnV2lkdGggPSA2MDtcclxuXHJcbiAgY29uc3QgZ3JvdXBzID0gZDMubWFwKGRhdGEsIChkKSA9PiBkLm5hbWUpLmtleXMoKTtcclxuXHJcbiAgbGV0IHg6IGFueTtcclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgeCA9IGQzXHJcbiAgICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgICAucmFuZ2VSb3VuZChbd2lkdGgsIDBdKVxyXG4gICAgICAuYWxpZ24oMC41KVxyXG4gICAgICAucGFkZGluZygwLjUpXHJcbiAgICAgIC5kb21haW4oZGF0YS5tYXAoKGQ6IGFueSkgPT4gZC5uYW1lLnRvTG93ZXJDYXNlKCkpKTtcclxuICB9IGVsc2Uge1xyXG4gICAgeCA9IGQzXHJcbiAgICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgICAuZG9tYWluKGdyb3VwcylcclxuICAgICAgLnJhbmdlKFtsZWZ0QW5kUmlnaHRTcGFjZXMsIHdpZHRoIC0gcmlnaHRTdmdXaWR0aCAtIGxlZnRBbmRSaWdodFNwYWNlc10pXHJcbiAgICAgIC5wYWRkaW5nKDAuMyk7XHJcbiAgfVxyXG5cclxuICBjb25zdCB4U2NhbGVGcm9tT3JpZ2luID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGdyb3VwcykucmFuZ2UoWzAsIHdpZHRoIC0gcmlnaHRTdmdXaWR0aF0pO1xyXG5cclxuICBjb25zdCB4U3ViZ3JvdXAgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5TGlzdCkucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuXHJcbiAgLy8gRklYRUQ6IEltcHJvdmVkIG1heCB2YWx1ZSBjYWxjdWxhdGlvbiB0aGF0IGNvbnNpZGVycyBoZWlnaHRcclxuICBjb25zdCBtYXhWYWx1ZSA9IHRoaXMuY2FsY3VsYXRlTWF4VmFsdWUoZGF0YSwga2V5TGlzdCwgaGVpZ2h0KTtcclxuICBjb25zdCB5ID0gZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oWzAsIG1heFZhbHVlXSkubmljZSgpLnJhbmdlUm91bmQoW2hlaWdodCwgMF0pO1xyXG5cclxuICBsZXQgbGluZVlzY2FsZSA9IG51bGw7XHJcbiAgaWYgKGxpbmVEYXRhKSB7XHJcbiAgICBsaW5lWXNjYWxlID0gdGhpcy5jcmVhdGVMaW5lWVNjYWxlKGxpbmVEYXRhLCBoZWlnaHQpO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgY29sb3IgPSBkMy5zY2FsZU9yZGluYWwoKS5kb21haW4oa2V5TGlzdCkucmFuZ2UoT2JqZWN0LnZhbHVlcyhtZXRhRGF0YS5jb2xvcnMpKTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHgsXHJcbiAgICB4U2NhbGVGcm9tT3JpZ2luLFxyXG4gICAgeFN1Ymdyb3VwLFxyXG4gICAgeSxcclxuICAgIGxpbmVZc2NhbGUsXHJcbiAgICBjb2xvcixcclxuICAgIGxlZnRBbmRSaWdodFNwYWNlcyxcclxuICAgIHJpZ2h0U3ZnV2lkdGgsXHJcbiAgfTtcclxufVxyXG5cclxucHJpdmF0ZSBjYWxjdWxhdGVNYXhWYWx1ZShkYXRhOiBhbnlbXSwga2V5TGlzdDogc3RyaW5nW10sIGhlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcclxuICBsZXQgbWF4VmFsdWUgPSBkMy5tYXgoZGF0YSwgKGQpID0+IGQzLm1heChrZXlMaXN0LCAoa2V5KSA9PiArZFtrZXldKSkgfHwgMDtcclxuXHJcbiAgLy8gRklYRUQ6IEJldHRlciBoYW5kbGluZyBmb3IgemVybyB2YWx1ZXNcclxuICBpZiAobWF4VmFsdWUgPT09IDApIHtcclxuICAgIG1heFZhbHVlID0gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGFcclxuICAgICAgPyB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgKyAyMFxyXG4gICAgICA6IDEwMDtcclxuICB9XHJcblxyXG4gIC8vIEZJWEVEOiBTY2FsZSBiYXNlZCBvbiBhdmFpbGFibGUgaGVpZ2h0XHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZSkge1xyXG4gICAgbWF4VmFsdWUgKj0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VzdG9tWXNjYWxlO1xyXG4gIH0gZWxzZSBpZiAoaGVpZ2h0ID4gNDAwKSB7XHJcbiAgICAvLyBBdXRvLXNjYWxlIGZvciBsYXJnZXIgaGVpZ2h0c1xyXG4gICAgbWF4VmFsdWUgKj0gMS4yO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmIG1heFZhbHVlIDwgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQ7XHJcbiAgICBtYXhWYWx1ZSA9IG1heFZhbHVlIDwgMTAgJiYgdGFyZ2V0IDwgMTAgPyB0YXJnZXQgKyAzIDogdGFyZ2V0ICsgKHRhcmdldCAqIDAuMik7IC8vIDIwJSBidWZmZXJcclxuICB9XHJcblxyXG4gIHJldHVybiBtYXhWYWx1ZTtcclxufVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUxpbmVZU2NhbGUobGluZURhdGE6IGFueVtdLCBoZWlnaHQ6IG51bWJlcikge1xyXG4gICAgbGV0IG1heExpbmVWYWx1ZSA9IGQzLm1heChsaW5lRGF0YSwgKGQpID0+ICtkLnZhbHVlKSB8fCAwO1xyXG4gICAgbWF4TGluZVZhbHVlICo9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZSB8fCAxO1xyXG5cclxuICAgIGxldCBtaW5MaW5lVmFsdWUgPSBkMy5taW4obGluZURhdGEsIChkKSA9PiArZC52YWx1ZSkgfHwgMDtcclxuICAgIGlmIChtYXhMaW5lVmFsdWUgPiAwKSBtaW5MaW5lVmFsdWUgLT0gMztcclxuICAgIGlmIChtaW5MaW5lVmFsdWUgPiAwKSBtaW5MaW5lVmFsdWUgPSAwO1xyXG5cclxuICAgIHJldHVybiBkMy5zY2FsZUxpbmVhcigpLmRvbWFpbihbbWluTGluZVZhbHVlLCBtYXhMaW5lVmFsdWVdKS5yYW5nZShbaGVpZ2h0LCBtaW5MaW5lVmFsdWVdKTtcclxuICB9XHJcblxyXG5wcml2YXRlIGNyZWF0ZVNWR1N0cnVjdHVyZShkaW1lbnNpb25zOiBhbnkpIHtcclxuICBjb25zdCB7IGNoYXJ0Q29udGFpbmVyLCBoZWlnaHQsIG1hcmdpbiB9ID0gZGltZW5zaW9ucztcclxuICBjb25zdCByaWdodFN2Z1dpZHRoID0gNjA7XHJcbiAgXHJcbiAgLy8gRklYRUQ6IENhbGN1bGF0ZSB0b3RhbCBoZWlnaHQgaW5jbHVkaW5nIG1hcmdpbnMgYW5kIGV4dHJhIHNwYWNlXHJcbiAgY29uc3QgdG90YWxIZWlnaHQgPSBoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbTsgLy8gQWRkZWQgZXh0cmEgNjBweFxyXG5cclxuICBjb25zdCBvdXRlckNvbnRhaW5lciA9IGNoYXJ0Q29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdkaXYnKVxyXG4gICAgLmF0dHIoJ2lkJywgdGhpcy51bmlxdWVJZClcclxuICAgIC5hdHRyKCdjbGFzcycsICdvdXRlci1jb250YWluZXInKVxyXG4gICAgLnN0eWxlKCd3aWR0aCcsICcxMDAlJylcclxuICAgIC5zdHlsZSgnaGVpZ2h0JywgYCR7dG90YWxIZWlnaHR9cHhgKVxyXG4gICAgLnN0eWxlKCdvdmVyZmxvdycsICdoaWRkZW4nKVxyXG4gICAgLnN0eWxlKCdwYWRkaW5nLWxlZnQnLCAnMCcpIC8vIFJlbW92ZSBsZWZ0IHBhZGRpbmcgZnJvbSBvdXRlciBjb250YWluZXJcclxuICAgIC5zdHlsZSgncGFkZGluZy1yaWdodCcsIGAke3JpZ2h0U3ZnV2lkdGh9cHhgKVxyXG4gICAgLnN0eWxlKCdtYXJnaW4tbGVmdCcsICcwJykgLy8gUmVtb3ZlIGxlZnQgbWFyZ2luXHJcbiAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ3JlbGF0aXZlJyk7XHJcblxyXG4gIGNvbnN0IGxlZnRTdmdXaWR0aCA9IG1hcmdpbi5sZWZ0ICsgMjA7XHJcblxyXG4gIC8vIEZJWEVEOiBZLWF4aXMgU1ZHIHdpdGggcHJvcGVyIGhlaWdodFxyXG4gIGNvbnN0IHN2Z1lBeGlzTGVmdCA9IG91dGVyQ29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgbGVmdFN2Z1dpZHRoKVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIHRvdGFsSGVpZ2h0KVxyXG4gICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgICAuc3R5bGUoJ2xlZnQnLCAnMCcpXHJcbiAgICAuc3R5bGUoJ3RvcCcsICcwJylcclxuICAgIC5zdHlsZSgnei1pbmRleCcsIDIpIC8vIEluY3JlYXNlZCB6LWluZGV4IHRvIGVuc3VyZSBpdCBzdGF5cyBhYm92ZVxyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke21hcmdpbi5sZWZ0ICsgNX0sJHttYXJnaW4udG9wfSlgKTtcclxuXHJcbiAgY29uc3Qgc3ZnWUF4aXNSaWdodCA9IG91dGVyQ29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgcmlnaHRTdmdXaWR0aClcclxuICAgIC5hdHRyKCdoZWlnaHQnLCB0b3RhbEhlaWdodClcclxuICAgIC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxyXG4gICAgLnN0eWxlKCdyaWdodCcsICc0MHB4JylcclxuICAgIC5zdHlsZSgndG9wJywgJzAnKVxyXG4gICAgLnN0eWxlKCd6LWluZGV4JywgMikgLy8gSW5jcmVhc2VkIHotaW5kZXhcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke21hcmdpbi50b3B9KWApO1xyXG5cclxuICAvLyBGSVhFRDogSW5uZXIgY29udGFpbmVyIHN0YXJ0cyBBRlRFUiB0aGUgeS1heGlzIGxhYmVsc1xyXG5jb25zdCBpbm5lckNvbnRhaW5lciA9IG91dGVyQ29udGFpbmVyXHJcbiAgLmFwcGVuZCgnZGl2JylcclxuICAuYXR0cignY2xhc3MnLCAnaW5uZXItY29udGFpbmVyJylcclxuICAuc3R5bGUoJ3dpZHRoJywgYGNhbGMoMTAwJSAtICR7bGVmdFN2Z1dpZHRofXB4KWApXHJcbiAgLnN0eWxlKCdoZWlnaHQnLCBgJHt0b3RhbEhlaWdodH1weGApXHJcbiAgLnN0eWxlKCdtYXJnaW4tbGVmdCcsIGAke2xlZnRTdmdXaWR0aCAtIDE1fXB4YCkgLy8gR29vZCBhZGp1c3RtZW50IGZvciB0aGUgMTVweCBvZmZzZXRcclxuICAuc3R5bGUoJ292ZXJmbG93LXgnLCAnYXV0bycpXHJcbiAgLnN0eWxlKCdvdmVyZmxvdy15JywgJ2hpZGRlbicpXHJcbiAgLnN0eWxlKCdwb3NpdGlvbicsICdyZWxhdGl2ZScpOyAvLyBBZGQgdGhpcyBmb3IgYmV0dGVyIHBvc2l0aW9uaW5nIGNvbnRleHRcclxuXHJcbiAgLy8gRklYRUQ6IE1haW4gU1ZHIHdpdGggaW5jcmVhc2VkIGhlaWdodCBhbmQgcHJvcGVyIHBvc2l0aW9uaW5nXHJcbiAgY29uc3Qgc3ZnID0gaW5uZXJDb250YWluZXJcclxuICAgIC5hcHBlbmQoJ3N2ZycpXHJcbiAgICAuYXR0cignd2lkdGgnLCBkaW1lbnNpb25zLndpZHRoIC0gcmlnaHRTdmdXaWR0aClcclxuICAgIC5hdHRyKCdoZWlnaHQnLCB0b3RhbEhlaWdodClcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke21hcmdpbi50b3B9KWApO1xyXG5cclxuICByZXR1cm4geyBvdXRlckNvbnRhaW5lciwgc3ZnWUF4aXNMZWZ0LCBzdmdZQXhpc1JpZ2h0LCBzdmcsIHRvdGFsSGVpZ2h0IH07XHJcbn1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJBeGVzKHN2Z0VsZW1lbnRzOiBhbnksIHNjYWxlczogYW55LCBjaGFydENvbnRleHQ6IGFueSwgZGltZW5zaW9uczogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCB7IHN2Zywgc3ZnWUF4aXNMZWZ0LCBzdmdZQXhpc1JpZ2h0IH0gPSBzdmdFbGVtZW50cztcclxuICAgIGNvbnN0IHsgeCwgeFNjYWxlRnJvbU9yaWdpbiwgeSwgbGluZVlzY2FsZSB9ID0gc2NhbGVzO1xyXG4gICAgY29uc3QgeyBoZWlnaHQgfSA9IGRpbWVuc2lvbnM7XHJcbiAgICBjb25zdCB7IG1ldGFEYXRhLCBsaW5lRGF0YSwga2V5TGlzdCB9ID0gY2hhcnRDb250ZXh0O1xyXG5cclxuICAgIHRoaXMucmVuZGVyWEF4aXMoc3ZnLCB4LCB4U2NhbGVGcm9tT3JpZ2luLCBoZWlnaHQsIGNoYXJ0Q29udGV4dCwga2V5TGlzdCk7XHJcbiAgICB0aGlzLnJlbmRlcllBeGlzKHN2Zywgc3ZnWUF4aXNMZWZ0LCBzdmdZQXhpc1JpZ2h0LCB5LCBkaW1lbnNpb25zKTtcclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNHcmlkKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyWUF4aXNHcmlkKHN2ZywgeSwgZGltZW5zaW9ucy53aWR0aCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGdyaWRCZXR3ZWVuTGFiZWxzKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyWEF4aXNHcmlkKHN2ZywgeCwgaGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobGluZURhdGEgJiYgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc2hvd0xpbmVDaGFydEF4aXMgJiYgbGluZVlzY2FsZSkge1xyXG4gICAgICB0aGlzLnJlbmRlckxpbmVZQXhpcyhzdmdZQXhpc1JpZ2h0LCBsaW5lWXNjYWxlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5wcml2YXRlIHJlbmRlclhBeGlzKFxyXG4gICAgc3ZnOiBhbnksXHJcbiAgICB4OiBhbnksXHJcbiAgICB4U2NhbGVGcm9tT3JpZ2luOiBhbnksXHJcbiAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgIGNoYXJ0Q29udGV4dDogYW55LFxyXG4gICAga2V5TGlzdDogc3RyaW5nW11cclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IHsgZGF0YSwgbWV0YURhdGEgfSA9IGNoYXJ0Q29udGV4dDtcclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCB4QXhpcyA9IHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICd4MSBheGlzMScpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke2hlaWdodH0pYClcclxuICAgICAgICAuY2FsbChkMy5heGlzQm90dG9tKHgpLnRpY2tTaXplKDApKTtcclxuXHJcbiAgICAgIC8vIEZJWEVEOiBTaG93IFgtYXhpcyBsaW5lXHJcbiAgICAgIHhBeGlzXHJcbiAgICAgICAgLnNlbGVjdCgnLmRvbWFpbicpXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciwgIzAwMDAwMCknKVxyXG4gICAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgJzFweCcpXHJcbiAgICAgICAgLnN0eWxlKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XHJcblxyXG4gICAgICB4QXhpcy5zZWxlY3RBbGwoJ2cudGljayBsaW5lJykucmVtb3ZlKCk7XHJcblxyXG4gICAgICBjb25zdCB0ZXh0Q2xhc3MgPSAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nO1xyXG4gICAgICBjb25zdCB0ZXh0U2VsZWN0aW9uID0geEF4aXNcclxuICAgICAgICAuc2VsZWN0QWxsKCdnLnRpY2sgdGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgdGV4dENsYXNzKVxyXG4gICAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yLCAjNjY2NjY2KScpXHJcbiAgICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMTFweCcpO1xyXG5cclxuICAgICAgaWYgKGtleUxpc3QubGVuZ3RoID4gMSAmJiAhbWV0YURhdGEueExhYmVsKSB7XHJcbiAgICAgICAgdGV4dFNlbGVjdGlvbi5hdHRyKCd5JywgMjgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbmRlck11bHRpQ2hhcnRYQXhpcyhzdmcsIHgsIGhlaWdodCwgZGF0YSwgbWV0YURhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi54TGFiZWxzT25TYW1lTGluZSkge1xyXG4gICAgICB0aGlzLnJlbmRlclhMYWJlbHNPblNhbWVMaW5lKHN2ZywgZGF0YSwgbWV0YURhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEJvdHRvbSB4LWF4aXNcclxuICAgIGNvbnN0IHhBeGlzMiA9IHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ3gyIGF4aXMyJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke2hlaWdodH0pYClcclxuICAgICAgLnN0eWxlKCdjb2xvcicsICcjMDAwJylcclxuICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4U2NhbGVGcm9tT3JpZ2luKS50aWNrU2l6ZSgwKSk7XHJcblxyXG4gICAgeEF4aXMyXHJcbiAgICAgIC5zZWxlY3QoJy5kb21haW4nKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjMDAwMDAwKScpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgJzFweCcpXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgJ25vbmUnKTtcclxuXHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngyLmF4aXMyIGcudGljayB0ZXh0Jykuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgIHN2Zy5zZWxlY3RBbGwoJy5saWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJNdWx0aUNoYXJ0WEF4aXMoc3ZnOiBhbnksIHg6IGFueSwgaGVpZ2h0OiBudW1iZXIsIGRhdGE6IGFueVtdLCBtZXRhRGF0YTogYW55KTogdm9pZCB7XHJcbiAgICBsZXQgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgIGNvbnN0IHNob3J0X3RpY2tfbGVuZ3RoX2JnID0gNTtcclxuICAgIGNvbnN0IGxvbmdfdGlja19sZW5ndGhfYmcgPSAzMDtcclxuXHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICd4MSBheGlzMScpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHtoZWlnaHR9KWApXHJcbiAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkudGlja1NpemUoMCkpXHJcbiAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ2ZpbGwnLCAnbm9uZScpKTtcclxuXHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayBsaW5lJykuYXR0cigneTInLCAoKSA9PiB7XHJcbiAgICAgIGlmIChhbHRlcm5hdGVfdGV4dCAmJiAhdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNOb0FsdGVybmF0ZVhheGlzVGV4dCkge1xyXG4gICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIGxvbmdfdGlja19sZW5ndGhfYmcgLSA3O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gc2hvcnRfdGlja19sZW5ndGhfYmcgLSA0O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtd2Vla2x5Y2hhcnRzJykuYXR0cigneScsICgpID0+IHtcclxuICAgICAgaWYgKGFsdGVybmF0ZV90ZXh0KSB7XHJcbiAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gbG9uZ190aWNrX2xlbmd0aF9iZztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHNob3J0X3RpY2tfbGVuZ3RoX2JnO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyWExhYmVsc09uU2FtZUxpbmUoc3ZnOiBhbnksIGRhdGE6IGFueVtdLCBtZXRhRGF0YTogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBzaG9ydF90aWNrX2xlbmd0aF9iZyA9IDU7XHJcbiAgICBjb25zdCBsb25nX3RpY2tfbGVuZ3RoX2JnID0gMzA7XHJcblxyXG4gICAgc3ZnXHJcbiAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAuYXR0cigneScsIHNob3J0X3RpY2tfbGVuZ3RoX2JnKVxyXG4gICAgICAudGV4dCgoZCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzVmFsdWVUb0JlSWdub3JlZCA9IGRhdGEuc29tZShcclxuICAgICAgICAgIChpbmRpdjogYW55KSA9PlxyXG4gICAgICAgICAgICBpbmRpdi5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGQudHJpbSgpLnRvTG93ZXJDYXNlKCkgJiZcclxuICAgICAgICAgICAgaW5kaXZbbWV0YURhdGEua2V5TGlzdFswXV0gPT09IC0xXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaXNWYWx1ZVRvQmVJZ25vcmVkKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmIChkLnRyaW0oKS5pbmRleE9mKCcgJykgPiAtMSkge1xyXG4gICAgICAgICAgcmV0dXJuIGQudHJpbSgpLnN1YnN0cmluZygwLCBkLmluZGV4T2YoJyAnKSkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGQudG9Mb3dlckNhc2UoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgc3ZnXHJcbiAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrJylcclxuICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgIC5hdHRyKCd5JywgbG9uZ190aWNrX2xlbmd0aF9iZylcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCAnY3VycmVudENvbG9yJylcclxuICAgICAgLnRleHQoKGQpID0+IHtcclxuICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgIHJldHVybiBkLnRyaW0oKS5zdWJzdHJpbmcoZC5pbmRleE9mKCcgJykpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlcllBeGlzKHN2ZzogYW55LCBzdmdZQXhpc0xlZnQ6IGFueSwgc3ZnWUF4aXNSaWdodDogYW55LCB5OiBhbnksIGRpbWVuc2lvbnM6IGFueSk6IHZvaWQge1xyXG4gICAgLy8gTWFpbiBZLWF4aXMgaW4gY2hhcnQgYXJlYSAoaGlkZGVuKVxyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteS1heGlzLXRleHQgeWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeSlcclxuICAgICAgLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuXHJcbiAgICAvLyBGSVhFRDogTGVmdCBZLWF4aXMgd2l0aCB2aXNpYmxlIGxpbmVcclxuICAgIGNvbnN0IHlBeGlzTGVmdCA9IGQzXHJcbiAgICAgIC5heGlzTGVmdCh5KVxyXG4gICAgICAudGlja1NpemUoMClcclxuICAgICAgLnRpY2tzKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAudGlja0Zvcm1hdCh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0xhYmVsRm9tYXR0ZXIpO1xyXG5cclxuICAgIGNvbnN0IHlBeGlzR3JvdXAgPSBzdmdZQXhpc0xlZnRcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93biB5YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgICAuY2FsbCh5QXhpc0xlZnQpO1xyXG5cclxuICAgIC8vIEZJWEVEOiBTaG93IFktYXhpcyB2ZXJ0aWNhbCBsaW5lXHJcbiAgICB5QXhpc0dyb3VwXHJcbiAgICAgIC5zZWxlY3QoJy5kb21haW4nKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjMDAwMDAwKScpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgJzFweCcpXHJcbiAgICAgIC5zdHlsZSgnZGlzcGxheScsICdibG9jaycpO1xyXG5cclxuICAgIC8vIEZJWEVEOiBQb3NpdGlvbiBZLWF4aXMgdmFsdWVzIHdpdGggcHJvcGVyIHNwYWNpbmdcclxuICAgIHlBeGlzR3JvdXBcclxuICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yLCAjNjY2NjY2KScpXHJcbiAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJzExcHgnKVxyXG4gICAgICAuc3R5bGUoJ2ZvbnQtd2VpZ2h0JywgJzQwMCcpXHJcbiAgICAgIC5hdHRyKCd4JywgLTYpICAvLyBGSVhFRDogU21hbGwgZ2FwIGZyb20gYXhpcyBsaW5lXHJcbiAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdlbmQnKVxyXG4gICAgICAuYXR0cignZHknLCAnMC4zMmVtJyk7XHJcblxyXG4gICAgLy8gUmlnaHQgWS1heGlzIChoaWRkZW4pXHJcbiAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24geWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeSlcclxuICAgICAgLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuXHJcbiAgICB0aGlzLmFwcGx5QXhpc1Zpc2liaWxpdHlTZXR0aW5ncygpO1xyXG4gIH1cclxuXHJcbnByaXZhdGUgYXBwbHlBeGlzVmlzaWJpbGl0eVNldHRpbmdzKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNMYWJlbEhpZGRlbikge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJ2cubGliLWxpbmUteC1heGlzLXRleHQgPiBnID4gdGV4dCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNMYWJlbEhpZGRlbikge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQgPiBnID4gdGV4dCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgICAvLyBGSVhFRDogRG9uJ3QgaGlkZSB0aGUgWS1heGlzIGxhYmVsIGVsZW1lbnRcclxuICAgICAgZDMuc2VsZWN0QWxsKCcubGliLXlsYWJlbC12aXNpYmxlJykuc3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzSGlkZGVuKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgICAvLyBGSVhFRDogS2VlcCBZLWF4aXMgbGFiZWwgdmlzaWJsZVxyXG4gICAgICBkMy5zZWxlY3RBbGwoJy5saWIteWxhYmVsLXZpc2libGUnKS5zdHlsZSgnZGlzcGxheScsICdibG9jaycpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNEYXNoZWQpIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkIC5kb21haW4nKS5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKS5zdHlsZSgnY29sb3InLCAnIzk5OTk5OScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbnByaXZhdGUgcmVuZGVyWUF4aXNHcmlkKHN2ZzogYW55LCB5OiBhbnksIHdpZHRoOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ3ktYXhpcy1ncmlkJylcclxuICAgICAgLmNhbGwoXHJcbiAgICAgICAgZDMuYXhpc0xlZnQoeSlcclxuICAgICAgICAgIC50aWNrcyh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgICAgIC50aWNrU2l6ZSgtd2lkdGgpXHJcbiAgICAgICAgICAudGlja0Zvcm1hdCgnJylcclxuICAgICAgKVxyXG4gICAgICAuc3R5bGUoJ2NvbG9yJywgJyM1MzUzNTNmZicpICAvLyBGSVhFRDogTGlnaHRlciBncmlkXHJcbiAgICAgIC5zdHlsZSgnb3BhY2l0eScsICcwLjcnKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnbm9uZScpXHJcbiAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpKVxyXG4gICAgICAuc2VsZWN0QWxsKCdsaW5lJylcclxuICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMC41cHgnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyWEF4aXNHcmlkKHN2ZzogYW55LCB4OiBhbnksIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdncmlkJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHt4LmJhbmR3aWR0aCgpIC8gMn0sJHtoZWlnaHR9KWApXHJcbiAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkudGlja1NpemUoLWhlaWdodCkudGlja0Zvcm1hdCgnJykpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWdyaWQtY29sb3IsICM5OTk5OTkpJylcclxuICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJMaW5lWUF4aXMoc3ZnWUF4aXNSaWdodDogYW55LCBsaW5lWXNjYWxlOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHlMaW5lQXhpcyA9IGQzXHJcbiAgICAgIC5heGlzUmlnaHQobGluZVlzY2FsZSlcclxuICAgICAgLnRpY2tzKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAudGlja1NpemUoMClcclxuICAgICAgLnRpY2tGb3JtYXQodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUxpbmVBeGlzTGFiZWxGb21hdHRlcik7XHJcblxyXG4gICAgc3ZnWUF4aXNSaWdodFxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXktYXhpcy10ZXh0MScpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpXHJcbiAgICAgIC5jYWxsKHlMaW5lQXhpcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckJhcnMoc3ZnOiBhbnksIGNoYXJ0Q29udGV4dDogYW55LCBzY2FsZXM6IGFueSwgZGltZW5zaW9uczogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCB7IGRhdGEsIG1ldGFEYXRhLCBrZXlMaXN0LCBpc1JpYSB9ID0gY2hhcnRDb250ZXh0O1xyXG4gICAgY29uc3QgeyB4LCB4U3ViZ3JvdXAsIHkgfSA9IHNjYWxlcztcclxuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBkaW1lbnNpb25zO1xyXG5cclxuICAgIGNvbnN0IHN0YXRlID0gc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuc2VsZWN0QWxsKCcuc3RhdGUnKVxyXG4gICAgICAuZGF0YShkYXRhKVxyXG4gICAgICAuZW50ZXIoKVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIChkKSA9PiBgdHJhbnNsYXRlKCR7eChkLm5hbWUpfSwwKWApO1xyXG5cclxuICBzdGF0ZVxyXG4gICAgLnNlbGVjdEFsbCgncmVjdCcpXHJcbiAgICAuZGF0YSgoZCkgPT4gdGhpcy5wcmVwYXJlQmFyRGF0YShkLCBrZXlMaXN0KSlcclxuICAgIC5lbnRlcigpXHJcbiAgICAuYXBwZW5kKCdyZWN0JylcclxuICAgIC5hdHRyKCdjbGFzcycsICdiYXJzJylcclxuICAgIC5vbignY2xpY2snLCAoZCkgPT4gdGhpcy5oYW5kbGVCYXJDbGljayhkLCBtZXRhRGF0YSkpXHJcbiAgICAuYXR0cigneCcsIChkKSA9PiB0aGlzLmdldEJhclgoZCwgZGF0YSwgeCwgeFN1Ymdyb3VwKSlcclxuICAgIC5hdHRyKCd5JywgKGQpID0+IHtcclxuICAgICAgLy8gRklYRUQ6IEVuc3VyZSBiYXJzIHN0YXJ0IGZyb20gY29ycmVjdCBZIHBvc2l0aW9uXHJcbiAgICAgIGNvbnN0IHZhbHVlID0gZC52YWx1ZSA9PT0gLTEgPyAwIDogZC52YWx1ZTtcclxuICAgICAgcmV0dXJuIHkodmFsdWUpO1xyXG4gICAgfSlcclxuICAgIC5hdHRyKCd3aWR0aCcsIChkKSA9PiB0aGlzLmdldEJhcldpZHRoKGQsIGRhdGEsIHgsIHhTdWJncm91cCkpXHJcbiAgICAuYXR0cignaGVpZ2h0JywgKGQpID0+IHtcclxuICAgICAgLy8gRklYRUQ6IEltcHJvdmVkIGhlaWdodCBjYWxjdWxhdGlvblxyXG4gICAgICBjb25zdCB2YWx1ZSA9IGQudmFsdWUgPT09IC0xID8gMCA6IGQudmFsdWU7XHJcbiAgICAgIHJldHVybiBoZWlnaHQgLSB5KHZhbHVlKTtcclxuICAgIH0pXHJcbiAgICAuc3R5bGUoJ2N1cnNvcicsIChkKSA9PiAobWV0YURhdGEuaGFzRHJpbGxEb3duICYmICFpc1JpYSA/ICdwb2ludGVyJyA6ICdkZWZhdWx0JykpXHJcbiAgICAuYXR0cignZmlsbCcsIChkKSA9PiB0aGlzLmdldEJhckNvbG9yKGQsIG1ldGFEYXRhKSk7XHJcblxyXG4gICAgaWYgKCFpc1JpYSAmJiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uZGlzcGxheVRpdGxlT25Ub3AgfHwgKCF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0c09uQmFyICYmICF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCkpKSB7XHJcbiAgICAgIHN0YXRlLnNlbGVjdEFsbCgncmVjdCcpLm9uKCdtb3VzZW91dCcsIChkLCBpKSA9PiB0aGlzLmhhbmRsZU1vdXNlT3V0KHN2ZykpLm9uKCdtb3VzZW92ZXInLCAoZCwgaSkgPT4gdGhpcy5oYW5kbGVNb3VzZU92ZXIoc3ZnLCBkLCBkYXRhLCBtZXRhRGF0YSwgeCwgeSwgc2NhbGVzLmxlZnRBbmRSaWdodFNwYWNlcykpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0c09uQmFyICYmICF0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyQmFyVGV4dHMoc3RhdGUsIGRhdGEsIG1ldGFEYXRhLCBrZXlMaXN0LCB4LCB4U3ViZ3JvdXAsIHksIGlzUmlhLCBzdmcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIGxpbmUnKS5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByZXBhcmVCYXJEYXRhKGQ6IGFueSwga2V5TGlzdDogc3RyaW5nW10pOiBhbnlbXSB7XHJcbiAgICByZXR1cm4ga2V5TGlzdC5tYXAoKGtleSkgPT4gKHsga2V5LCB2YWx1ZTogZFtrZXldLCBuYW1lOiBkLm5hbWUgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVCYXJDbGljayhkOiBhbnksIG1ldGFEYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChkLmtleSA9PT0gJ1RhcmdldCcpIHJldHVybjtcclxuICAgIGlmIChcclxuICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljaz8ubGVuZ3RoIHx8XHJcbiAgICAgICghbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/Lm5hbWUpICYmICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ua2V5KSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmhhbmRsZUNsaWNrKGQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCYXJYKGQ6IGFueSwgZGF0YTogYW55W10sIHg6IGFueSwgeFN1Ymdyb3VwOiBhbnkpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlRHJpbGxkb3duQmFyWChkLCBkYXRhLCB4KTtcclxuICAgIH1cclxuICAgIHJldHVybiB4U3ViZ3JvdXAoZC5rZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVEcmlsbGRvd25CYXJYKGQ6IGFueSwgZGF0YTogYW55W10sIHg6IGFueSk6IG51bWJlciB7XHJcbiAgICBsZXQgdGVtcFNjYWxlO1xyXG4gICAgZGF0YS5mb3JFYWNoKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpbmRpdi5uYW1lID09PSBkLm5hbWUpIHtcclxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPT0gMCk7XHJcbiAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgIHRlbXBTY2FsZSA9IHRoaXMuYWRqdXN0RHJpbGxkb3duU2NhbGUodGVtcFNjYWxlLCBkYXRhLCB4KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRlbXBTY2FsZSA/IHRlbXBTY2FsZShkLmtleSkgOiAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGp1c3REcmlsbGRvd25TY2FsZSh0ZW1wU2NhbGU6IGFueSwgZGF0YTogYW55W10sIHg6IGFueSk6IGFueSB7XHJcbiAgICBpZiAodGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgY29uc3Qga2V5c0xlbmd0aCA9IE9iamVjdC5rZXlzKHRoaXMuY2hhcnREYXRhLmRhdGFbMF0pLmxlbmd0aDtcclxuICAgICAgY29uc3Qgb2Zmc2V0ID0ga2V5c0xlbmd0aCA9PT0gMiA/IDIwMCA6IDMwMDtcclxuICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSBvZmZzZXQpIC8gMixcclxuICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSBvZmZzZXQpIC8gMixcclxuICAgICAgXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICBdKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0ZW1wU2NhbGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJhcldpZHRoKGQ6IGFueSwgZGF0YTogYW55W10sIHg6IGFueSwgeFN1Ymdyb3VwOiBhbnkpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgbGV0IHRlbXBTY2FsZTtcclxuICAgICAgZGF0YS5mb3JFYWNoKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGluZGl2Lm5hbWUgPT09IGQubmFtZSkge1xyXG4gICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT09IDApO1xyXG4gICAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgICAgICB0ZW1wU2NhbGUgPSB0aGlzLmFkanVzdERyaWxsZG93blNjYWxlKHRlbXBTY2FsZSwgZGF0YSwgeCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHRlbXBTY2FsZSA/IHRlbXBTY2FsZS5iYW5kd2lkdGgoKSA6IDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geFN1Ymdyb3VwLmJhbmR3aWR0aCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCYXJIZWlnaHQoZDogYW55LCB5OiBhbnksIGhlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmIChkLnZhbHVlID09PSAtMSkgcmV0dXJuIGhlaWdodCAtIHkoMCk7XHJcbiAgICBpZiAoZC52YWx1ZSkgcmV0dXJuIGhlaWdodCAtIHkoZC52YWx1ZSk7XHJcbiAgICByZXR1cm4gaGVpZ2h0IC0geSgwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QmFyQ29sb3IoZDogYW55LCBtZXRhRGF0YTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChcclxuICAgICAgZC52YWx1ZSAmJlxyXG4gICAgICB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICBkLnZhbHVlID49IHBhcnNlSW50KHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCkgJiZcclxuICAgICAgdGhpcy5jaGFydERhdGEubWV0YURhdGEuY29sb3JBYm92ZVRhcmdldFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvckFib3ZlVGFyZ2V0W2Qua2V5XTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJCYXJUZXh0cyhcclxuICAgIHN0YXRlOiBhbnksXHJcbiAgICBkYXRhOiBhbnlbXSxcclxuICAgIG1ldGFEYXRhOiBhbnksXHJcbiAgICBrZXlMaXN0OiBzdHJpbmdbXSxcclxuICAgIHg6IGFueSxcclxuICAgIHhTdWJncm91cDogYW55LFxyXG4gICAgeTogYW55LFxyXG4gICAgaXNSaWE6IGJvb2xlYW4sXHJcbiAgICBzdmc6IGFueVxyXG4gICk6IHZvaWQge1xyXG4gICAgc3RhdGVcclxuICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgIC5kYXRhKChkKSA9PiB0aGlzLnByZXBhcmVCYXJEYXRhKGQsIGtleUxpc3QpKVxyXG4gICAgICAuZW50ZXIoKVxyXG4gICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgLmF0dHIoJ3gnLCAwKVxyXG4gICAgICAuYXR0cigneScsIDApXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItZGF0YS1sYWJlbHMtd2Vla2x5Y2hhcnRzJylcclxuICAgICAgLnRleHQoKGQpID0+IHRoaXMuZ2V0QmFyVGV4dExhYmVsKGQpKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAnIzAwMCcpXHJcbiAgICAgIC5zdHlsZSgnZm9udC13ZWlnaHQnLCAnYm9sZCcpXHJcbiAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgKCkgPT4gdGhpcy5nZXRCYXJUZXh0Rm9udFNpemUoKSlcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIChkKSA9PiB0aGlzLmdldEJhclRleHRUcmFuc2Zvcm0oZCwgZGF0YSwgeCwgeFN1Ymdyb3VwLCB5KSlcclxuICAgICAgLm9uKCdjbGljaycsIChkKSA9PiB0aGlzLmhhbmRsZUJhckNsaWNrKGQsIG1ldGFEYXRhKSk7XHJcblxyXG4gICAgaWYgKCFpc1JpYSkge1xyXG4gICAgICBzdGF0ZVxyXG4gICAgICAgIC5zZWxlY3RBbGwoJy5saWItZGF0YS1sYWJlbHMtd2Vla2x5Y2hhcnRzJylcclxuICAgICAgICAub24oJ21vdXNlb3V0JywgKGQsIGkpID0+IHRoaXMuaGFuZGxlTW91c2VPdXQoc3ZnKSlcclxuICAgICAgICAub24oJ21vdXNlb3ZlcicsIChkLCBpKSA9PlxyXG4gICAgICAgICAgdGhpcy5oYW5kbGVNb3VzZU92ZXIoc3ZnLCBkLCBkYXRhLCBtZXRhRGF0YSwgeCwgeSwgeC5iYW5kd2lkdGgoKSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCYXJUZXh0TGFiZWwoZDogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICghZC5rZXkgfHwgIWQudmFsdWUpIHJldHVybiAnJztcclxuICAgIHJldHVybiBkLmtleS5sZW5ndGggPiAyMCA/IGQua2V5LnN1YnN0cmluZygwLCAxNykgKyAnLi4uJyA6IGQua2V5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCYXJUZXh0Rm9udFNpemUoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+IDE5MDApIHJldHVybiAnMThweCc7XHJcbiAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDE0MDApIHJldHVybiAnMTBweCc7XHJcbiAgICAgIHJldHVybiAnMTRweCc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJzE0cHgnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCYXJUZXh0VHJhbnNmb3JtKGQ6IGFueSwgZGF0YTogYW55W10sIHg6IGFueSwgeFN1Ymdyb3VwOiBhbnksIHk6IGFueSk6IHN0cmluZyB7XHJcbiAgICBsZXQgdGVtcFNjYWxlO1xyXG4gICAgZGF0YS5mb3JFYWNoKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpbmRpdi5uYW1lID09PSBkLm5hbWUpIHtcclxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPT0gMCk7XHJcbiAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgIHRlbXBTY2FsZSA9IHRoaXMuYWRqdXN0RHJpbGxkb3duU2NhbGUodGVtcFNjYWxlLCBkYXRhLCB4KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0QWx3YXlzSG9yaXpvbnRhbCkge1xyXG4gICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke3hTdWJncm91cChkLmtleSl9LCR7eShkLnZhbHVlKSAtIDN9KWA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRlbXBTY2FsZSAmJiAhaXNOYU4odGVtcFNjYWxlKGQua2V5KSkpIHtcclxuICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoJHt0ZW1wU2NhbGUoZC5rZXkpICsgdGVtcFNjYWxlLmJhbmR3aWR0aCgpICogMC41NX0sJHt5KDApIC0gMTB9KSByb3RhdGUoMjcwKWA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ3RyYW5zbGF0ZSgwLDApJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTW91c2VPdmVyKFxyXG4gICAgc3ZnOiBhbnksXHJcbiAgICBkOiBhbnksXHJcbiAgICBkYXRhOiBhbnlbXSxcclxuICAgIG1ldGFEYXRhOiBhbnksXHJcbiAgICB4OiBhbnksXHJcbiAgICB5OiBhbnksXHJcbiAgICBsZWZ0QW5kUmlnaHRTcGFjZXM6IG51bWJlclxyXG4gICk6IHZvaWQge1xyXG4gICAgc3ZnLnNlbGVjdEFsbCgnLmxpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJykucmVtb3ZlKCk7XHJcblxyXG4gICAgbGV0IHRlbXBTY2FsZTtcclxuICAgIGRhdGEuZm9yRWFjaCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaW5kaXYubmFtZSA9PT0gZC5uYW1lKSB7XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT09IDApO1xyXG4gICAgICAgIHRlbXBTY2FsZSA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihrZXlzKS5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICB0ZW1wU2NhbGUgPSB0aGlzLmFkanVzdERyaWxsZG93blNjYWxlKHRlbXBTY2FsZSwgZGF0YSwgeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBmb3JlaWduT2JqZWN0ID0gc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxyXG4gICAgICAuYXR0cigneCcsICgpID0+IHRoaXMuY2FsY3VsYXRlVG9vbHRpcFgoZCwgeCwgdGVtcFNjYWxlLCBtZXRhRGF0YSwgbGVmdEFuZFJpZ2h0U3BhY2VzKSlcclxuICAgICAgLmF0dHIoJ3knLCAoKSA9PiB5KGQudmFsdWUpIC0gNDMpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItdmVydGljYWxzdGFjay10aXRsZS1vbnRvcCcpXHJcbiAgICAgIC5hdHRyKCd3aWR0aCcsICgpID0+IHRoaXMuY2FsY3VsYXRlVG9vbHRpcFdpZHRoKHRlbXBTY2FsZSwgbWV0YURhdGEsIGxlZnRBbmRSaWdodFNwYWNlcykpXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCA0MCk7XHJcblxyXG4gICAgZm9yZWlnbk9iamVjdFxyXG4gICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAndGl0bGUnKVxyXG4gICAgICAuc3R5bGUoJ3otaW5kZXgnLCA5OSlcclxuICAgICAgLmh0bWwoKCkgPT4gdGhpcy5nZXRUb29sdGlwSFRNTChkLCBtZXRhRGF0YSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVUb29sdGlwWChcclxuICAgIGQ6IGFueSxcclxuICAgIHg6IGFueSxcclxuICAgIHRlbXBTY2FsZTogYW55LFxyXG4gICAgbWV0YURhdGE6IGFueSxcclxuICAgIGxlZnRBbmRSaWdodFNwYWNlczogbnVtYmVyXHJcbiAgKTogbnVtYmVyIHtcclxuICAgIGlmIChtZXRhRGF0YS5oYXNEcmlsbERvd24pIHtcclxuICAgICAgaWYgKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIgPiAxODApIHtcclxuICAgICAgICByZXR1cm4geChkLm5hbWUpICsgdGVtcFNjYWxlKGQua2V5KSArIHRlbXBTY2FsZS5iYW5kd2lkdGgoKSAvIDIgLSA5MDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHgoZC5uYW1lKSArXHJcbiAgICAgICAgdGVtcFNjYWxlKGQua2V5KSAtXHJcbiAgICAgICAgKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIpIC8gMiArXHJcbiAgICAgICAgdGVtcFNjYWxlLmJhbmR3aWR0aCgpIC8gMlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgeChkLm5hbWUpICtcclxuICAgICAgdGVtcFNjYWxlKGQua2V5KSAtXHJcbiAgICAgICh0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyKSAvIDIgK1xyXG4gICAgICB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgLyAyXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVUb29sdGlwV2lkdGgodGVtcFNjYWxlOiBhbnksIG1ldGFEYXRhOiBhbnksIGxlZnRBbmRSaWdodFNwYWNlczogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmIChtZXRhRGF0YS5oYXNEcmlsbERvd24pIHtcclxuICAgICAgaWYgKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIgPiAxODApIHtcclxuICAgICAgICByZXR1cm4gJzE4MHB4JztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMjtcclxuICAgIH1cclxuICAgIHJldHVybiB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUb29sdGlwSFRNTChkOiBhbnksIG1ldGFEYXRhOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZGF0YVR5cGUgPSBtZXRhRGF0YS5kYXRhVHlwZSB8fCAnJztcclxuICAgIGlmICghdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLW5hbWVcIj4ke2QubmFtZX08L3NwYW4+PHNwYW4gY2xhc3M9XCJ0aXRsZS1iYXItdmFsdWVcIj48c3Bhbj4ke2QudmFsdWV9PC9zcGFuPiR7ZGF0YVR5cGV9PC9zcGFuPmA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB0ZW1wS2V5ID0gZC5uYW1lLmxlbmd0aCA8PSA4ID8gZC5uYW1lIDogZC5uYW1lLnN1YnN0cmluZygwLCA1KSArICcuLi4nO1xyXG4gICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLW5hbWVcIj4ke3RlbXBLZXl9OiR7ZC52YWx1ZX0ke2RhdGFUeXBlfTwvc3Bhbj48c3BhbiBjbGFzcz1cInRpdGxlLWJhci12YWx1ZVwiPiR7ZC5uYW1lfTwvc3Bhbj5gO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVNb3VzZU91dChzdmc6IGFueSk6IHZvaWQge1xyXG4gICAgc3ZnLnNlbGVjdEFsbCgnLmxpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJykucmVtb3ZlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckxhYmVscyhzdmdFbGVtZW50czogYW55LCBzY2FsZXM6IGFueSwgY2hhcnRDb250ZXh0OiBhbnksIGRpbWVuc2lvbnM6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBzdmcsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCB9ID0gc3ZnRWxlbWVudHM7XHJcbiAgICBjb25zdCB7IG1ldGFEYXRhIH0gPSBjaGFydENvbnRleHQ7XHJcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIG1hcmdpbiB9ID0gZGltZW5zaW9ucztcclxuXHJcbiAgICBpZiAobWV0YURhdGEueUxhYmVsKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyWUF4aXNMYWJlbChzdmdZQXhpc0xlZnQsIG1ldGFEYXRhLnlMYWJlbCwgaGVpZ2h0LCBtYXJnaW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtZXRhRGF0YS54TGFiZWwpIHtcclxuICAgICAgdGhpcy5yZW5kZXJYQXhpc0xhYmVsKHN2ZywgbWV0YURhdGEueExhYmVsLCB3aWR0aCwgaGVpZ2h0LCBtYXJnaW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtZXRhRGF0YS5saW5leUxhYmVsKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyTGluZVlBeGlzTGFiZWwoc3ZnWUF4aXNSaWdodCwgbWV0YURhdGEubGluZXlMYWJlbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxucHJpdmF0ZSByZW5kZXJZQXhpc0xhYmVsKHN2Z1lBeGlzTGVmdDogYW55LCB5TGFiZWw6IHN0cmluZywgaGVpZ2h0OiBudW1iZXIsIG1hcmdpbjogYW55KTogdm9pZCB7XHJcbiAgICAvLyBGSVhFRDogUHJvcGVyIFktYXhpcyBsYWJlbCB3aXRoIGNvcnJlY3QgcG9zaXRpb25pbmdcclxuICAgIHN2Z1lBeGlzTGVmdFxyXG4gICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1heGlzLWdyb3VwLWxhYmVsIGxpYi15bGFiZWwtdmlzaWJsZScpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKC05MCknKVxyXG4gICAgICAuYXR0cigneScsIC1tYXJnaW4ubGVmdClcclxuICAgICAgLmF0dHIoJ3gnLCAwIC0gaGVpZ2h0IC8gMilcclxuICAgICAgLmF0dHIoJ2R5JywgJzFlbScpXHJcbiAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMTNweCcpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yLCAjNjY2NjY2KScpO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHN2Z1lBeGlzTGVmdC5zZWxlY3RBbGwoJy5saWItYXhpcy1ncm91cC1sYWJlbCcpLnRleHQoeUxhYmVsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN2Z1lBeGlzTGVmdFxyXG4gICAgICAgIC5zZWxlY3RBbGwoJy5saWItYXhpcy1ncm91cC1sYWJlbCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15bGFiZWwtd2Vla2x5Q2hhcnRzIGxpYi15bGFiZWwtdmlzaWJsZScpXHJcbiAgICAgICAgLnRleHQoeUxhYmVsLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbnByaXZhdGUgcmVuZGVyWEF4aXNMYWJlbChzdmc6IGFueSwgeExhYmVsOiBzdHJpbmcsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBtYXJnaW46IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgaXNBY3JvbnltID0gdGhpcy5pc0Fjcm9ueW0oeExhYmVsLnJlcGxhY2UoL1teQS1aYS16XS9nLCAnJykpO1xyXG5cclxuICAgIGxldCBiYXNlQ2xhc3MgPSAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgZm9udC1zaXplLTEnO1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgYmFzZUNsYXNzICs9ICcgbGliLXhsYWJlbC1kcmlsbGRvd25jaGFydHMnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGJhc2VDbGFzcyArPSAnIGxpYi14bGFiZWwtd2Vla2x5Q2hhcnRzJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGJhc2VDbGFzcyArPSAnIGxpYi1heGlzLXdhdGVyZmFsbC1sYWJlbCc7XHJcbiAgICB9XHJcblxyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCBiYXNlQ2xhc3MpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgIC8vIEZJWEVEOiBBZGp1c3RlZCBmb3IgcmVkdWNlZCBib3R0b20gbWFyZ2luXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7d2lkdGggLyAyfSwke2hlaWdodCArIDMyfSlgKVxyXG4gICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yLCAjNjY2NjY2KScpXHJcbiAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJzEzcHgnKVxyXG4gICAgICAudGV4dChpc0Fjcm9ueW0gPyB4TGFiZWwudG9VcHBlckNhc2UoKSA6IHhMYWJlbC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAuc3R5bGUoJ3RleHQtdHJhbnNmb3JtJywgaXNBY3JvbnltID8gJ25vbmUnIDogJ2NhcGl0YWxpemUnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNBY3JvbnltKGxhYmVsOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIChsYWJlbC5sZW5ndGggPD0gNCAmJiAvXltBLVpdKyQvLnRlc3QobGFiZWwpKSB8fFxyXG4gICAgICAobGFiZWwgPT09IGxhYmVsLnRvVXBwZXJDYXNlKCkgJiYgL1tBLVpdLy50ZXN0KGxhYmVsKSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckxpbmVZQXhpc0xhYmVsKHN2Z1lBeGlzUmlnaHQ6IGFueSwgbGluZXlMYWJlbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgbGliLWxpbmUtYXhpcycpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCkgcm90YXRlKDkwKScpXHJcbiAgICAgIC5hdHRyKCd5JywgLTEwMClcclxuICAgICAgLmF0dHIoJ3gnLCAxMDApXHJcbiAgICAgIC5hdHRyKCdkeScsICc1ZW0nKVxyXG4gICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJ3NtYWxsZXInKVxyXG4gICAgICAudGV4dChsaW5leUxhYmVsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyVGFyZ2V0TGluZShzdmdFbGVtZW50czogYW55LCBzY2FsZXM6IGFueSwgY2hhcnRDb250ZXh0OiBhbnksIGRpbWVuc2lvbnM6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHsgc3ZnLCBzdmdZQXhpc1JpZ2h0IH0gPSBzdmdFbGVtZW50cztcclxuICAgIGNvbnN0IHsgeSB9ID0gc2NhbGVzO1xyXG4gICAgY29uc3QgeyB3aWR0aCB9ID0gZGltZW5zaW9ucztcclxuICAgIGNvbnN0IHsgbWV0YURhdGEgfSA9IGNoYXJ0Q29udGV4dDtcclxuICAgIGNvbnN0IHRhcmdldERhdGE6IFRhcmdldExpbmVEYXRhID0gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGE7XHJcblxyXG4gICAgY29uc3QgeVplcm8gPSB5KHRhcmdldERhdGEudGFyZ2V0KTtcclxuXHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnbGluZScpXHJcbiAgICAgIC5hdHRyKCd4MScsIDApXHJcbiAgICAgIC5hdHRyKCd4MicsIHdpZHRoKVxyXG4gICAgICAuYXR0cigneTEnLCB5WmVybylcclxuICAgICAgLmF0dHIoJ3kyJywgeVplcm8pXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZScsIHRhcmdldERhdGEuY29sb3IpO1xyXG5cclxuICAgIGNvbnN0IHJpZ2h0U3ZnV2lkdGggPSA2MDtcclxuICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHt5WmVybyAtIDMwfSlgKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCByaWdodFN2Z1dpZHRoKVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgNTApXHJcbiAgICAgIC5hcHBlbmQoJ3hodG1sOmRpdicpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICd0YXJnZXQtZGlzcGxheScpXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAuaHRtbCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0YVR5cGUgPSBtZXRhRGF0YS5kYXRhVHlwZSB8fCAnJztcclxuICAgICAgICBjb25zdCB0YXJnZXROYW1lID0gdGFyZ2V0RGF0YS50YXJnZXROYW1lIHx8ICd0YXJnZXQnO1xyXG4gICAgICAgIHJldHVybiBgPGRpdj4ke3RhcmdldE5hbWV9PC9kaXY+PGRpdj4ke3RhcmdldERhdGEudGFyZ2V0fSR7ZGF0YVR5cGV9PC9kaXY+YDtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckxpbmVHcmFwaChzdmc6IGFueSwgY2hhcnRDb250ZXh0OiBhbnksIHNjYWxlczogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCB7IGxpbmVEYXRhLCBtZXRhRGF0YSB9ID0gY2hhcnRDb250ZXh0O1xyXG4gICAgaWYgKCFsaW5lRGF0YSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHsgeCwgbGluZVlzY2FsZSB9ID0gc2NhbGVzO1xyXG5cclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdwYXRoJylcclxuICAgICAgLmRhdHVtKGxpbmVEYXRhKVxyXG4gICAgICAuYXR0cignZmlsbCcsICdub25lJylcclxuICAgICAgLmF0dHIoJ3N0cm9rZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKVxyXG4gICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgMS41KVxyXG4gICAgICAuYXR0cihcclxuICAgICAgICAnZCcsXHJcbiAgICAgICAgZDNcclxuICAgICAgICAgIC5saW5lKClcclxuICAgICAgICAgIC54KChkOiBhbnkpID0+IHgoZC5uYW1lKSArIHguYmFuZHdpZHRoKCkgLyAyKVxyXG4gICAgICAgICAgLnkoKGQ6IGFueSkgPT4gbGluZVlzY2FsZShkLnZhbHVlKSlcclxuICAgICAgKTtcclxuXHJcbiAgICBjb25zdCBkb3QgPSBzdmdcclxuICAgICAgLnNlbGVjdEFsbCgnbXlDaXJjbGVzJylcclxuICAgICAgLmRhdGEobGluZURhdGEpXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAub24oJ2NsaWNrJywgKGQpID0+IHRoaXMuaGFuZGxlQmFyQ2xpY2soZCwgbWV0YURhdGEpKTtcclxuXHJcbiAgICBkb3RcclxuICAgICAgLmFwcGVuZCgnY2lyY2xlJylcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcilcclxuICAgICAgLmF0dHIoJ3N0cm9rZScsICdub25lJylcclxuICAgICAgLmF0dHIoJ2N4JywgKGQ6IGFueSkgPT4geChkLm5hbWUpICsgeC5iYW5kd2lkdGgoKSAvIDIpXHJcbiAgICAgIC5hdHRyKCdjeScsIChkOiBhbnkpID0+IGxpbmVZc2NhbGUoZC52YWx1ZSkpXHJcbiAgICAgIC5zdHlsZSgnY3Vyc29yJywgJ3BvaW50ZXInKVxyXG4gICAgICAuYXR0cigncicsIDMpO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcikge1xyXG4gICAgICBkb3RcclxuICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnZG90JylcclxuICAgICAgICAuYXR0cignY29sb3InLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcilcclxuICAgICAgICAuYXR0cignc3R5bGUnLCAnZm9udC1zaXplOiAuODVlbScpXHJcbiAgICAgICAgLmF0dHIoJ3gnLCAoZDogYW55KSA9PiB4KGQubmFtZSkgKyB4LmJhbmR3aWR0aCgpIC8gMilcclxuICAgICAgICAuYXR0cigneScsIChkOiBhbnkpID0+IGxpbmVZc2NhbGUoZC52YWx1ZSkpXHJcbiAgICAgICAgLmF0dHIoJ2R5JywgJy0xZW0nKVxyXG4gICAgICAgIC50ZXh0KChkOiBhbnkpID0+IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxhYmVsRm9ybWF0dGVyKGQudmFsdWUpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUNsaWNrKGQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93biB8fCBkPy50b2dnbGVGcm9tKSB7XHJcbiAgICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KGQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlSGVhZGVyTWVudUNsaWNrKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaGVhZGVyTWVudWNsaWNrRXZlbnQuZW1pdChpZCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVERDFDbGljayhldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmlzREQxT3BlbiA9IHRydWU7XHJcbiAgICB0aGlzLmlzREQyT3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlREQyQ2xpY2soZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0REMk9wZW4gPSB0cnVlO1xyXG4gICAgdGhpcy5pc0REMU9wZW4gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdChldmVudCk7XHJcbiAgfVxyXG59IiwiPGRpdlxyXG4gICNncm91cGNvbnRhaW5lclxyXG4gIGNsYXNzPVwibGliLWNoYXJ0LXdyYXBwZXJcIlxyXG4gIFtuZ0NsYXNzXT1cInsgJ2xpYi1uby1iYWNrZ3JvdW5kJzogaXNUcmFuc3BhcmVudEJhY2tncm91bmQgfVwiXHJcbiAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jYXJkLWJnKTtcIlxyXG4gIChyZXNpemVkKT1cIm9uUmVzaXplZCgkZXZlbnQpXCJcclxuPlxyXG5cclxuPGRpdiBjbGFzcz1cImhlYWRlci1hbHRcIiAqbmdJZj1cIiFpc0hlYWRlclZpc2libGVcIj5cclxuICA8bGliLWNoYXJ0LWhlYWRlci12MlxyXG4gICAgW2NoYXJ0RGF0YV09XCJjaGFydERhdGFcIlxyXG4gICAgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgKGNsaWNrRXZlbnQpPVwiaGFuZGxlQ2xpY2soJGV2ZW50KVwiXHJcbiAgPjwvbGliLWNoYXJ0LWhlYWRlci12Mj5cclxuICA8bGliLWNoYXJ0LWhlYWRlci12M1xyXG4gICAgW2NoYXJ0RGF0YV09XCJjaGFydERhdGFcIlxyXG4gICAgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgKGNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbik9XCJoYW5kbGVDb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24oJGV2ZW50KVwiXHJcbiAgICAoem9vbUluWm9vbU91dENsaWNrKT1cImhhbmRsZVpvb21pblpvb21vdXRDbGljaygkZXZlbnQpXCJcclxuICA+PC9saWItY2hhcnQtaGVhZGVyLXYzPlxyXG48L2Rpdj5cclxuXHJcbiAgPGxpYi1jaGFydC1oZWFkZXItdjFcclxuICBbdGl0bGVdPVwiY2hhcnREYXRhLm1ldGFEYXRhLnRpdGxlXCJcclxuICBbaGFzRHJpbGxEb3duXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS5oYXNEcmlsbERvd25cIlxyXG4gIFtpc0VkaXRFbmFibGVkXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS5pc0VkaXRFbmFibGVkXCJcclxuICBbbWVudU9wdGlvbnNdPVwiY2hhcnRDb25maWd1cmF0aW9uLmhlYWRlck1lbnVPcHRpb25zXCJcclxuICBbaXNyaWFdPVwiY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uLmlzUmlhXCJcclxuICBbc2VsZWN0ZWRLcGlUb29sdG9wXT1cImNoYXJ0Q29uZmlndXJhdGlvbi5zZWxlY3RlZEtwaVRvb2x0b3BcIlxyXG4gIChtZW51T3B0aW9uQ2xpY2tFdmVudCk9XCJoYW5kbGVIZWFkZXJNZW51Q2xpY2soJGV2ZW50KVwiXHJcbiAgW2lzQWxlcnRFbmFibGVkXT1cImlzQWxlcnRFbmFibGVkXCJcclxuICAqbmdJZj1cImlzSGVhZGVyVmlzaWJsZVwiXHJcbj48L2xpYi1jaGFydC1oZWFkZXItdjE+XHJcblxyXG4gIDxkaXZcclxuICAgIFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodFwiXHJcbiAgICBpZD1cImdyb3VwY2hhcnRjb250YWluZXJcIlxyXG4gICAgI2dyb3VwY2hhcnRjb250YWluZXJcclxuICAgIGNsYXNzPVwibGliLWNoYXJ0LXN2Z1wiXHJcbiAgPjwvZGl2PlxyXG48L2Rpdj5cclxuIl19
990
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2dyb3VwLWNoYXJ0L2dyb3VwLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ncm91cC1jaGFydC9ncm91cC1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sa0JBQWtCLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7QUE4RWxELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxpQkFBaUI7SUFxRHhEO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUE3Q0EsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUV6RCxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUNyQiw0QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFDaEMsdUJBQWtCLEdBQXVCLEVBQXdCLENBQUM7UUFDbEUsZUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFFVix5QkFBb0IsR0FBZ0M7WUFDakUsUUFBUSxFQUFFO2dCQUNOLEtBQUssRUFBRSxFQUFFO2dCQUNULE1BQU0sRUFBRSxHQUFH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O1FBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFRCw4QkFBOEIsQ0FBQyxLQUFVO1FBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7K0dBam9DVSxtQkFBbUI7bUdBQW5CLG1CQUFtQixvZkM1RmhDLDA3Q0F5Q0E7OzRGRG1EYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsaUJBQWlCLGlCQUdaLGlCQUFpQixDQUFDLElBQUk7d0RBSXJDLFlBQVk7c0JBRFgsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSWxELGlCQUFpQjtzQkFEaEIsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR3BDLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBFbGVtZW50UmVmLFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudFVuaXF1ZUlkIH0gZnJvbSAnLi4vdW5pcXVlLWlkJztcclxuaW1wb3J0IENoYXJ0SGVscGVyIGZyb20gJy4uL2NoYXJ0LWhlbHBlcic7XHJcbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcclxuaW1wb3J0IHsgUmVzaXplZEV2ZW50IH0gZnJvbSAnYW5ndWxhci1yZXNpemUtZXZlbnQnO1xyXG5pbXBvcnQgSGVhZGVyQ29uZmlnSGVscGVyIGZyb20gJy4uL2hlYWRlci1jb25maWcnO1xyXG5cclxuaW50ZXJmYWNlIENoYXJ0TWV0YURhdGEge1xyXG4gIGNvbG9yczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuICBjb2xvckFib3ZlVGFyZ2V0PzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuICBrZXlMaXN0OiBzdHJpbmdbXTtcclxuICBoYXNEcmlsbERvd24/OiBib29sZWFuO1xyXG4gIGJhcldpdGhvdXRDbGljaz86IHN0cmluZ1tdO1xyXG4gIGRhdGFUeXBlPzogc3RyaW5nO1xyXG4gIHlMYWJlbD86IHN0cmluZztcclxuICB4TGFiZWw/OiBzdHJpbmc7XHJcbiAgbGluZXlMYWJlbD86IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIFRhcmdldExpbmVEYXRhIHtcclxuICB0YXJnZXQ6IG51bWJlcjtcclxuICBjb2xvcjogc3RyaW5nO1xyXG4gIHRhcmdldE5hbWU/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBDaGFydENvbmZpZ3VyYXRpb24ge1xyXG4gIG1hcmdpbjogeyB0b3A6IG51bWJlcjsgcmlnaHQ6IG51bWJlcjsgYm90dG9tOiBudW1iZXI7IGxlZnQ6IG51bWJlciB9O1xyXG4gIGxhYmVsRm9ybWF0dGVyOiAodmFsdWU6IGFueSkgPT4gc3RyaW5nO1xyXG4gIHN2Z0hlaWdodDogbnVtYmVyO1xyXG4gIG51bWJlck9mWVRpY2tzOiBudW1iZXI7XHJcbiAgbGVnZW5kSnVzdGlmaWVkOiBib29sZWFuO1xyXG4gIHlMaW5lQXhpc0xhYmVsRm9tYXR0ZXI6ICh2YWx1ZTogYW55KSA9PiBzdHJpbmc7XHJcbiAgeUF4aXNMYWJlbEZvbWF0dGVyOiAodmFsdWU6IGFueSkgPT4gc3RyaW5nO1xyXG4gIGxpbmVHcmFwaENvbG9yOiBzdHJpbmc7XHJcbiAgc2hvd0xpbmVDaGFydEF4aXM6IGJvb2xlYW47XHJcbiAgc2hvd1ZhbHVlczogYm9vbGVhbjtcclxuICBoZWFkZXJNZW51T3B0aW9uczogYW55W107XHJcbiAgeEF4aXNHcmlkPzogYm9vbGVhbjtcclxuICB5QXhpc0dyaWQ6IGJvb2xlYW47XHJcbiAgbGVnZW5kVmlzaWJsZTogYm9vbGVhbjtcclxuICBpc0hlYWRlclZpc2libGU/OiBib29sZWFuO1xyXG4gIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kPzogYm9vbGVhbjtcclxuICBpc011bHRpQ2hhcnRHcmlkTGluZT86IGJvb2xlYW47XHJcbiAgaXNGdWxsU2NyZWVuPzogYm9vbGVhbjtcclxuICBjdXN0b21Zc2NhbGU/OiBudW1iZXI7XHJcbiAgdGV4dHNPbkJhcj86IGJvb2xlYW47XHJcbiAgaXNYYXhpc0xhYmVsSGlkZGVuPzogYm9vbGVhbjtcclxuICBpc1lheGlzTGFiZWxIaWRkZW46IGJvb2xlYW47XHJcbiAgaXNZYXhpc0hpZGRlbj86IGJvb2xlYW47XHJcbiAgaXNZYXhpc0Rhc2hlZD86IGJvb2xlYW47XHJcbiAgdGV4dEZvcm1hdHRlcj86IHN0cmluZztcclxuICBpc05vQWx0ZXJuYXRlWGF4aXNUZXh0PzogYm9vbGVhbjtcclxuICBpc1hncmlkQmV0d2VlbkxhYmVscz86IGJvb2xlYW47XHJcbiAgYmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XHJcbiAgaGlkZUxlZ2VuZE9uVG9wOiBib29sZWFuO1xyXG4gIGlzWGF4aXNDb2xvcjogc3RyaW5nO1xyXG4gIGxhYmVsT3ZlcmxhcE1pbm9yRml4OiBib29sZWFuO1xyXG4gIG5vSG92ZXJFZmZlY3Q6IGJvb2xlYW47XHJcbiAgbm9Ib3ZlckRpc3BsYXlEYXRhOiBib29sZWFuO1xyXG4gIHNob3dYYXhpc1RvcDogYm9vbGVhbjtcclxuICBkaXNwbGF5WWF4aXNMYWJlbHM/OiBib29sZWFuO1xyXG4gIHhMYWJlbHNPblNhbWVMaW5lPzogYm9vbGVhbjtcclxuICB0ZXh0QWx3YXlzSG9yaXpvbnRhbD86IGJvb2xlYW47XHJcbiAgbGVnZW5kQXRUb3BSaWdodD86IGJvb2xlYW47XHJcbiAgaXNEcmlsbGRvd25DaGFydD86IGJvb2xlYW47XHJcbiAgZGlzcGxheVRpdGxlT25Ub3A/OiBib29sZWFuO1xyXG4gIGlzVG9nZ2xlVmlzaWJsZT86IGJvb2xlYW47XHJcbiAgaXNUaXRsZUhpZGRlbj86IGJvb2xlYW47XHJcbiAgaXNEaXNwbGF5QmFyRGV0YWlsc0F0Qm90dG9tPzogYm9vbGVhbjtcclxuICBob3dtYW55QmFyRGV0YWlsc1RvRGlzcGxheTogbnVtYmVyO1xyXG4gIGJhclZhdWxlQ29sb3I/OiBzdHJpbmc7XHJcbiAgeUF4aXNDdXN0b21UZXh0U3R5bGVzPzogc3RyaW5nO1xyXG4gIHlBeGlzQ3VzdG9tbGFiZWxTdHlsZXM/OiBzdHJpbmc7XHJcbiAgeEF4aXNDdXN0b21sYWJlbFN0eWxlcz86IHN0cmluZztcclxuICBpc1JpYT86IGJvb2xlYW47XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWdyb3VwLWNoYXJ0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ3JvdXAtY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2dyb3VwLWNoYXJ0LmNvbXBvbmVudC5sZXNzJywgJy4uL2NvbW1vbi1zdHlsZXMubGVzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHcm91cENoYXJ0Q29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50VW5pcXVlSWQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBWaWV3Q2hpbGQoJ2dyb3VwY2hhcnRjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGNvbnRhaW5lckVsdCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2dyb3VwY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBncm91cGNvbnRhaW5lckVsdCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBJbnB1dCgpIGNoYXJ0RGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbjogYW55O1xyXG4gIEBPdXRwdXQoKSBjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGhlYWRlck1lbnVjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIGlzSGVhZGVyVmlzaWJsZSA9IHRydWU7XHJcbiAgbGVnZW5kVmlzaWJsZSA9IHRydWU7XHJcbiAgaXNUcmFuc3BhcmVudEJhY2tncm91bmQgPSBmYWxzZTtcclxuICBjaGFydENvbmZpZ3VyYXRpb246IENoYXJ0Q29uZmlndXJhdGlvbiA9IHt9IGFzIENoYXJ0Q29uZmlndXJhdGlvbjtcclxuICBvYmplY3RLZXlzID0gT2JqZWN0LmtleXM7XHJcblxyXG5wcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRDb25maWd1cmF0aW9uOiBQYXJ0aWFsPENoYXJ0Q29uZmlndXJhdGlvbj4gPSB7XHJcbiAgICBcIm1hcmdpblwiOiB7XHJcbiAgICAgICAgXCJ0b3BcIjogMzAsXHJcbiAgICAgICAgXCJsZWZ0XCI6IDExMCxcclxuICAgICAgICBcInJpZ2h0XCI6IDQwLFxyXG4gICAgICAgIFwiYm90dG9tXCI6IDUwXHJcbiAgICB9LFxyXG4gICAgbGFiZWxGb3JtYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICBzdmdIZWlnaHQ6IDcwLFxyXG4gICAgbnVtYmVyT2ZZVGlja3M6IDUsXHJcbiAgICBsZWdlbmRKdXN0aWZpZWQ6IHRydWUsXHJcbiAgICB5TGluZUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgeUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgbGluZUdyYXBoQ29sb3I6ICcjRjZEMjgzJyxcclxuICAgIHNob3dMaW5lQ2hhcnRBeGlzOiB0cnVlLFxyXG4gICAgc2hvd1ZhbHVlczogdHJ1ZSxcclxuICAgIGhlYWRlck1lbnVPcHRpb25zOiBIZWFkZXJDb25maWdIZWxwZXIuaGVhZGVyQ29uZmlnLmhlYWRlck1lbnVPcHRpb25zLFxyXG4gICAgeUF4aXNHcmlkOiB0cnVlLFxyXG4gICAgbGVnZW5kVmlzaWJsZTogdHJ1ZSxcclxuICAgIGlzWWF4aXNMYWJlbEhpZGRlbjogZmFsc2UsXHJcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjRkZGRkZGJyxcclxuICAgIGhpZGVMZWdlbmRPblRvcDogdHJ1ZSxcclxuICAgIGlzWGF4aXNDb2xvcjogJyM5OTk5OTknLFxyXG4gICAgbGFiZWxPdmVybGFwTWlub3JGaXg6IHRydWUsXHJcbiAgICBub0hvdmVyRWZmZWN0OiB0cnVlLFxyXG4gICAgbm9Ib3ZlckRpc3BsYXlEYXRhOiB0cnVlLFxyXG4gICAgc2hvd1hheGlzVG9wOiB0cnVlLFxyXG4gICAgaG93bWFueUJhckRldGFpbHNUb0Rpc3BsYXk6IDAsXHJcbiAgfTtcclxuXHJcbiAgdW5pcXVlSWQ6IGFueSA9IHRoaXMuZ2V0VW5pcXVlSWQoKTtcclxuICBpc1pvb21lZE91dCA9IGZhbHNlO1xyXG4gIGlzREQxT3BlbiA9IGZhbHNlO1xyXG4gIGlzREQyT3BlbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHt9XHJcblxyXG4gIGdldCBpc0FsZXJ0RW5hYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbj8uaGVhZGVyTWVudU9wdGlvbnM/LnNvbWUoXHJcbiAgICAgIChvcHRpb24pID0+IG9wdGlvbi5pZCA9PT0gJ2VkaXRBbGVydCdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvblJlc2l6ZWQoZXZlbnQ6IFJlc2l6ZWRFdmVudCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGQzLnNlbGVjdCgnIycgKyB0aGlzLnVuaXF1ZUlkKS5yZW1vdmUoKTtcclxuICAgICAgdGhpcy5pbml0aWFsaXplZ3JvdXBDaGFydCgpO1xyXG4gICAgfSwgMTApO1xyXG4gIH1cclxuXHJcbiAgaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0OiBib29sZWFuLCBldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmlzWm9vbWVkT3V0ID0gaXNab29tT3V0O1xyXG4gICAgdGhpcy5vblJlc2l6ZWQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlWm9vbWluWm9vbW91dENsaWNrKHsgaXNab29tT3V0LCBldmVudCB9KTogdm9pZCB7XHJcbiAgICB0aGlzLmlzWm9vbU91dFNlbGVjdGVkKGlzWm9vbU91dCwgZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgaXNMZWdlbmRWaXNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhKFxyXG4gICAgICB0aGlzLmNoYXJ0RGF0YT8ubWV0YURhdGE/LmNvbG9ycyAmJlxyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnMpLmxlbmd0aCA+IDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBrZWVwT3JkZXIgPSAoYSwgYikgPT4gYTtcclxuXHJcbiAgaW5pdGlhbGl6ZWdyb3VwQ2hhcnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLm1lcmdlQ29uZmlndXJhdGlvbnMoKTtcclxuICAgIGNvbnN0IGNoYXJ0Q29udGV4dCA9IHRoaXMucHJlcGFyZUNoYXJ0RGF0YSgpO1xyXG4gICAgY29uc3QgZGltZW5zaW9ucyA9IHRoaXMuY2FsY3VsYXRlRGltZW5zaW9ucyhjaGFydENvbnRleHQpO1xyXG4gICAgY29uc3Qgc2NhbGVzID0gdGhpcy5jcmVhdGVTY2FsZXMoY2hhcnRDb250ZXh0LCBkaW1lbnNpb25zKTtcclxuICAgIGNvbnN0IHN2Z0VsZW1lbnRzID0gdGhpcy5jcmVhdGVTVkdTdHJ1Y3R1cmUoZGltZW5zaW9ucyk7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJBeGVzKHN2Z0VsZW1lbnRzLCBzY2FsZXMsIGNoYXJ0Q29udGV4dCwgZGltZW5zaW9ucyk7XHJcbiAgICB0aGlzLnJlbmRlckJhcnMoc3ZnRWxlbWVudHMuc3ZnLCBjaGFydENvbnRleHQsIHNjYWxlcywgZGltZW5zaW9ucyk7XHJcbiAgICB0aGlzLnJlbmRlckxhYmVscyhzdmdFbGVtZW50cywgc2NhbGVzLCBjaGFydENvbnRleHQsIGRpbWVuc2lvbnMpO1xyXG4gICAgdGhpcy5yZW5kZXJUYXJnZXRMaW5lKHN2Z0VsZW1lbnRzLCBzY2FsZXMsIGNoYXJ0Q29udGV4dCwgZGltZW5zaW9ucyk7XHJcbiAgICB0aGlzLnJlbmRlckxpbmVHcmFwaChzdmdFbGVtZW50cy5zdmcsIGNoYXJ0Q29udGV4dCwgc2NhbGVzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWVyZ2VDb25maWd1cmF0aW9ucygpOiB2b2lkIHtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb25ba2V5XSA9IENoYXJ0SGVscGVyLmdldFZhbHVlQnlDb25maWd1cmF0aW9uVHlwZShcclxuICAgICAgICBrZXksXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbixcclxuICAgICAgICB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvblxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzSGVhZGVyVmlzaWJsZSA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRWaXNpYmxlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5sZWdlbmRWaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kVmlzaWJsZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RyYW5zcGFyZW50QmFja2dyb3VuZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaXNUcmFuc3BhcmVudEJhY2tncm91bmQgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RyYW5zcGFyZW50QmFja2dyb3VuZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUNoYXJ0RGF0YSgpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNoYXJ0RGF0YS5kYXRhO1xyXG4gICAgY29uc3QgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEgPSB0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YTtcclxuICAgIGNvbnN0IGxpbmVEYXRhID0gdGhpcy5jaGFydERhdGEubGluZURhdGE7XHJcblxyXG4gICAgaWYgKCFtZXRhRGF0YS5jb2xvckFib3ZlVGFyZ2V0KSB7XHJcbiAgICAgIG1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXQgPSBtZXRhRGF0YS5jb2xvcnM7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZGF0YSxcclxuICAgICAgbWV0YURhdGEsXHJcbiAgICAgIGxpbmVEYXRhLFxyXG4gICAgICBrZXlMaXN0OiBtZXRhRGF0YS5rZXlMaXN0LFxyXG4gICAgICBjb2xvck1hcDogbWV0YURhdGEuY29sb3JzLFxyXG4gICAgICBpc1JpYTogdGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb24/LmlzUmlhIHx8IGZhbHNlLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY3VsYXRlRGltZW5zaW9ucyhjaGFydENvbnRleHQ6IGFueSkge1xyXG4gICAgY29uc3QgY2hhcnRDb250YWluZXIgPSBkMy5zZWxlY3QodGhpcy5jb250YWluZXJFbHQubmF0aXZlRWxlbWVudCk7XHJcbiAgICBjb25zdCB2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIgPSBkMy5zZWxlY3QodGhpcy5ncm91cGNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50KTtcclxuICAgIGNvbnN0IG1hcmdpbiA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbjtcclxuXHJcbiAgICBsZXQgd2lkdGggPSB0aGlzLmNhbGN1bGF0ZVdpZHRoKGNoYXJ0Q29udGFpbmVyLCBtYXJnaW4pO1xyXG4gICAgbGV0IGhlaWdodCA9IHRoaXMuY2FsY3VsYXRlSGVpZ2h0KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lciwgbWFyZ2luKTtcclxuXHJcbiAgICBjb25zdCBtaW5IZWlnaHQgPSAxNTU7XHJcbiAgICBoZWlnaHQgPSBNYXRoLm1heChoZWlnaHQsIG1pbkhlaWdodCk7XHJcblxyXG4gICAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgbWFyZ2luLCBjaGFydENvbnRhaW5lciwgdmVydGljYWxzdGFja2VkY29udGFpbmVyIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGN1bGF0ZVdpZHRoKGNoYXJ0Q29udGFpbmVyOiBhbnksIG1hcmdpbjogYW55KTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gcGFyc2VJbnQoY2hhcnRDb250YWluZXIuc3R5bGUoJ3dpZHRoJykpO1xyXG4gICAgY29uc3QgbGVmdFN2Z1dpZHRoID0gbWFyZ2luLmxlZnQgKyAyMDtcclxuICAgIGNvbnN0IHJpZ2h0U3ZnV2lkdGggPSA2MDtcclxuICAgIGNvbnN0IGJhc2VXaWR0aCA9IGNvbnRhaW5lcldpZHRoIC0gbGVmdFN2Z1dpZHRoIC0gcmlnaHRTdmdXaWR0aDtcclxuICAgIGNvbnN0IGRhdGFMZW5ndGggPSB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aDtcclxuICAgIGxldCB3aWR0aCA9IGJhc2VXaWR0aDtcclxuXHJcbiAgICBpZiAoZGF0YUxlbmd0aCA+IDMwICYmIHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgY29uc3QgbXVsdGlwbGllciA9IHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTEgPyA2MCA6IDQwO1xyXG4gICAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBkYXRhTGVuZ3RoICogbXVsdGlwbGllcik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTIgJiYgd2lkdGggPCBkYXRhTGVuZ3RoICogMTIwICYmIHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgd2lkdGggPSBkYXRhTGVuZ3RoICogMTIwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRhTGVuZ3RoID4gOCAmJiAhdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgICBpZiAodGhpcy5jaGFydERhdGEuZHJvcGRvd25EYXRhMiAmJiB3aWR0aCA8IGRhdGFMZW5ndGggKiAyNTApIHtcclxuICAgICAgICB3aWR0aCA9IGRhdGFMZW5ndGggKiAyNTA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgd2lkdGggPSBkYXRhTGVuZ3RoICogMTYwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHdpZHRoO1xyXG4gIH1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlSGVpZ2h0KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lcjogYW55LCBtYXJnaW46IGFueSk6IG51bWJlciB7XHJcbiAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gcGFyc2VJbnQodmVydGljYWxzdGFja2VkY29udGFpbmVyLnN0eWxlKCdoZWlnaHQnKSkgfHwgNDAwO1xyXG4gIGxldCBoZWlnaHQ7XHJcblxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0Z1bGxTY3JlZW4pIHtcclxuICAgIGhlaWdodCA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodCB8fCBjb250YWluZXJIZWlnaHQ7XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIEZJWEVEOiBVc2UgcGVyY2VudGFnZSBvZiBjb250YWluZXIgaGVpZ2h0IG1vcmUgcmVsaWFibHlcclxuICAgIGNvbnN0IHN2Z0hlaWdodFBlcmNlbnRhZ2UgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgfHwgNzA7XHJcbiAgICBoZWlnaHQgPSAoY29udGFpbmVySGVpZ2h0ICogc3ZnSGVpZ2h0UGVyY2VudGFnZSkgLyAxMDA7XHJcbiAgfVxyXG5cclxuICAvLyBGSVhFRDogQXBwbHkgbWFyZ2luIGFkanVzdG1lbnRzIGNvbnNpc3RlbnRseVxyXG4gIGhlaWdodCA9IGhlaWdodCAtIG1hcmdpbi50b3AgLSBtYXJnaW4uYm90dG9tO1xyXG5cclxuICAvLyBGSVhFRDogQWRkaXRpb25hbCBhZGp1c3RtZW50cyBmb3IgaGVhZGVyc1xyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0ICYmICF0aGlzLmlzSGVhZGVyVmlzaWJsZSkge1xyXG4gICAgaGVpZ2h0IC09IDEzMDtcclxuICB9IGVsc2UgaWYgKHRoaXMuaXNIZWFkZXJWaXNpYmxlKSB7XHJcbiAgICBoZWlnaHQgLT0gMTAwO1xyXG4gIH1cclxuXHJcbiAgLy8gRklYRUQ6IEFkZCB0aGUgZXh0cmEgNTBweCB5b3Ugd2FudGVkXHJcbiAgaGVpZ2h0ICs9IDUwO1xyXG5cclxuICByZXR1cm4gTWF0aC5tYXgoaGVpZ2h0LCAxNTApOyAvLyBFbnN1cmUgbWluaW11bSBoZWlnaHRcclxufVxyXG5cclxucHJpdmF0ZSBjcmVhdGVTY2FsZXMoY2hhcnRDb250ZXh0OiBhbnksIGRpbWVuc2lvbnM6IGFueSkge1xyXG4gIGNvbnN0IHsgZGF0YSwgbWV0YURhdGEsIGxpbmVEYXRhLCBrZXlMaXN0IH0gPSBjaGFydENvbnRleHQ7XHJcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBtYXJnaW4gfSA9IGRpbWVuc2lvbnM7XHJcbiAgY29uc3QgbGVmdEFuZFJpZ2h0U3BhY2VzID0gNTA7XHJcbiAgY29uc3QgcmlnaHRTdmdXaWR0aCA9IDYwO1xyXG5cclxuICBjb25zdCBncm91cHMgPSBkMy5tYXAoZGF0YSwgKGQpID0+IGQubmFtZSkua2V5cygpO1xyXG5cclxuICBsZXQgeDogYW55O1xyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICB4ID0gZDNcclxuICAgICAgLnNjYWxlQmFuZCgpXHJcbiAgICAgIC5yYW5nZVJvdW5kKFswLCB3aWR0aF0pIC8vIEZJWEVEOiBDaGFuZ2VkIHJhbmdlIHRvIHN0YXJ0IGZyb20gMFxyXG4gICAgICAuYWxpZ24oMC41KVxyXG4gICAgICAucGFkZGluZygwLjUpXHJcbiAgICAgIC5kb21haW4oZGF0YS5tYXAoKGQ6IGFueSkgPT4gZC5uYW1lLnRvTG93ZXJDYXNlKCkpKTtcclxuICB9IGVsc2Uge1xyXG4gICAgeCA9IGQzXHJcbiAgICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgICAuZG9tYWluKGdyb3VwcylcclxuICAgICAgLnJhbmdlKFswLCB3aWR0aCAtIHJpZ2h0U3ZnV2lkdGhdKSAvLyBGSVhFRDogU3RhcnQgZnJvbSAwIGZvciBiZXR0ZXIgY2VudGVyaW5nXHJcbiAgICAgIC5wYWRkaW5nKDAuMylcclxuICAgICAgLmFsaWduKDAuNSk7IC8vIEZJWEVEOiBDZW50ZXIgdGhlIGJhbmRzXHJcbiAgfVxyXG5cclxuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMSAmJiAhdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUpIHtcclxuICAgIGNvbnN0IHNpbmdsZUJhcldpZHRoID0gTWF0aC5taW4oODAsICh3aWR0aCAtIHJpZ2h0U3ZnV2lkdGgpICogMC42KTsgLy8gTWF4IDYwJSBvZiBhdmFpbGFibGUgd2lkdGhcclxuICAgIHgucmFuZ2UoW1xyXG4gICAgICAoKHdpZHRoIC0gcmlnaHRTdmdXaWR0aCkgLSBzaW5nbGVCYXJXaWR0aCkgLyAyLFxyXG4gICAgICAoKHdpZHRoIC0gcmlnaHRTdmdXaWR0aCkgLSBzaW5nbGVCYXJXaWR0aCkgLyAyICsgc2luZ2xlQmFyV2lkdGhcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgeFNjYWxlRnJvbU9yaWdpbiA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihncm91cHMpLnJhbmdlKFswLCB3aWR0aCAtIHJpZ2h0U3ZnV2lkdGhdKTtcclxuXHJcbmNvbnN0IHhTdWJncm91cCA9IGQzLnNjYWxlQmFuZCgpXHJcbiAgICAuZG9tYWluKGtleUxpc3QpXHJcbiAgICAucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKVxyXG4gICAgLnBhZGRpbmcoMC4xKTtcclxuXHJcblxyXG4gIC8vIEZJWEVEOiBJbXByb3ZlZCBtYXggdmFsdWUgY2FsY3VsYXRpb24gdGhhdCBjb25zaWRlcnMgaGVpZ2h0XHJcbiAgY29uc3QgbWF4VmFsdWUgPSB0aGlzLmNhbGN1bGF0ZU1heFZhbHVlKGRhdGEsIGtleUxpc3QsIGhlaWdodCk7XHJcbiAgY29uc3QgeSA9IGQzLnNjYWxlTGluZWFyKCkuZG9tYWluKFswLCBtYXhWYWx1ZV0pLm5pY2UoKS5yYW5nZVJvdW5kKFtoZWlnaHQsIDBdKTtcclxuXHJcbiAgbGV0IGxpbmVZc2NhbGUgPSBudWxsO1xyXG4gIGlmIChsaW5lRGF0YSkge1xyXG4gICAgbGluZVlzY2FsZSA9IHRoaXMuY3JlYXRlTGluZVlTY2FsZShsaW5lRGF0YSwgaGVpZ2h0KTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGNvbG9yID0gZDMuc2NhbGVPcmRpbmFsKCkuZG9tYWluKGtleUxpc3QpLnJhbmdlKE9iamVjdC52YWx1ZXMobWV0YURhdGEuY29sb3JzKSk7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICB4LFxyXG4gICAgeFNjYWxlRnJvbU9yaWdpbixcclxuICAgIHhTdWJncm91cCxcclxuICAgIHksXHJcbiAgICBsaW5lWXNjYWxlLFxyXG4gICAgY29sb3IsXHJcbiAgICBsZWZ0QW5kUmlnaHRTcGFjZXMsXHJcbiAgICByaWdodFN2Z1dpZHRoLFxyXG4gIH07XHJcbn1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlTWF4VmFsdWUoZGF0YTogYW55W10sIGtleUxpc3Q6IHN0cmluZ1tdLCBoZWlnaHQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgbGV0IG1heFZhbHVlID0gZDMubWF4KGRhdGEsIChkKSA9PiBkMy5tYXgoa2V5TGlzdCwgKGtleSkgPT4gK2Rba2V5XSkpIHx8IDA7XHJcblxyXG4gIC8vIEZJWEVEOiBCZXR0ZXIgaGFuZGxpbmcgZm9yIHplcm8gdmFsdWVzXHJcbiAgaWYgKG1heFZhbHVlID09PSAwKSB7XHJcbiAgICBtYXhWYWx1ZSA9IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhXHJcbiAgICAgID8gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICsgMjBcclxuICAgICAgOiAxMDA7XHJcbiAgfVxyXG5cclxuICAvLyBGSVhFRDogU2NhbGUgYmFzZWQgb24gYXZhaWxhYmxlIGhlaWdodFxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGUpIHtcclxuICAgIG1heFZhbHVlICo9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZTtcclxuICB9IGVsc2UgaWYgKGhlaWdodCA+IDQwMCkge1xyXG4gICAgLy8gQXV0by1zY2FsZSBmb3IgbGFyZ2VyIGhlaWdodHNcclxuICAgIG1heFZhbHVlICo9IDEuMjtcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJiBtYXhWYWx1ZSA8IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0O1xyXG4gICAgbWF4VmFsdWUgPSBtYXhWYWx1ZSA8IDEwICYmIHRhcmdldCA8IDEwID8gdGFyZ2V0ICsgMyA6IHRhcmdldCArICh0YXJnZXQgKiAwLjIpOyAvLyAyMCUgYnVmZmVyXHJcbiAgfVxyXG5cclxuICByZXR1cm4gbWF4VmFsdWU7XHJcbn1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVMaW5lWVNjYWxlKGxpbmVEYXRhOiBhbnlbXSwgaGVpZ2h0OiBudW1iZXIpIHtcclxuICAgIGxldCBtYXhMaW5lVmFsdWUgPSBkMy5tYXgobGluZURhdGEsIChkKSA9PiArZC52YWx1ZSkgfHwgMDtcclxuICAgIG1heExpbmVWYWx1ZSAqPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGUgfHwgMTtcclxuXHJcbiAgICBsZXQgbWluTGluZVZhbHVlID0gZDMubWluKGxpbmVEYXRhLCAoZCkgPT4gK2QudmFsdWUpIHx8IDA7XHJcbiAgICBpZiAobWF4TGluZVZhbHVlID4gMCkgbWluTGluZVZhbHVlIC09IDM7XHJcbiAgICBpZiAobWluTGluZVZhbHVlID4gMCkgbWluTGluZVZhbHVlID0gMDtcclxuXHJcbiAgICByZXR1cm4gZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oW21pbkxpbmVWYWx1ZSwgbWF4TGluZVZhbHVlXSkucmFuZ2UoW2hlaWdodCwgbWluTGluZVZhbHVlXSk7XHJcbiAgfVxyXG5cclxucHJpdmF0ZSBjcmVhdGVTVkdTdHJ1Y3R1cmUoZGltZW5zaW9uczogYW55KSB7XHJcbiAgY29uc3QgeyBjaGFydENvbnRhaW5lciwgaGVpZ2h0LCBtYXJnaW4gfSA9IGRpbWVuc2lvbnM7XHJcbiAgY29uc3QgcmlnaHRTdmdXaWR0aCA9IDYwO1xyXG4gIFxyXG4gIC8vIEZJWEVEOiBDYWxjdWxhdGUgdG90YWwgaGVpZ2h0IGluY2x1ZGluZyBtYXJnaW5zIGFuZCBleHRyYSBzcGFjZVxyXG4gIGNvbnN0IHRvdGFsSGVpZ2h0ID0gaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b207IC8vIEFkZGVkIGV4dHJhIDYwcHhcclxuXHJcbiAgY29uc3Qgb3V0ZXJDb250YWluZXIgPSBjaGFydENvbnRhaW5lclxyXG4gICAgLmFwcGVuZCgnZGl2JylcclxuICAgIC5hdHRyKCdpZCcsIHRoaXMudW5pcXVlSWQpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnb3V0ZXItY29udGFpbmVyJylcclxuICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAuc3R5bGUoJ2hlaWdodCcsIGAke3RvdGFsSGVpZ2h0fXB4YClcclxuICAgIC5zdHlsZSgnb3ZlcmZsb3cnLCAnaGlkZGVuJylcclxuICAgIC5zdHlsZSgncGFkZGluZy1sZWZ0JywgJzAnKSAvLyBSZW1vdmUgbGVmdCBwYWRkaW5nIGZyb20gb3V0ZXIgY29udGFpbmVyXHJcbiAgICAuc3R5bGUoJ3BhZGRpbmctcmlnaHQnLCBgJHtyaWdodFN2Z1dpZHRofXB4YClcclxuICAgIC5zdHlsZSgnbWFyZ2luLWxlZnQnLCAnMCcpIC8vIFJlbW92ZSBsZWZ0IG1hcmdpblxyXG4gICAgLnN0eWxlKCdwb3NpdGlvbicsICdyZWxhdGl2ZScpO1xyXG5cclxuICBjb25zdCBsZWZ0U3ZnV2lkdGggPSBtYXJnaW4ubGVmdCArIDIwO1xyXG5cclxuICAvLyBGSVhFRDogWS1heGlzIFNWRyB3aXRoIHByb3BlciBoZWlnaHRcclxuICBjb25zdCBzdmdZQXhpc0xlZnQgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgLmFwcGVuZCgnc3ZnJylcclxuICAgIC5hdHRyKCd3aWR0aCcsIGxlZnRTdmdXaWR0aClcclxuICAgIC5hdHRyKCdoZWlnaHQnLCB0b3RhbEhlaWdodClcclxuICAgIC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxyXG4gICAgLnN0eWxlKCdsZWZ0JywgJzAnKVxyXG4gICAgLnN0eWxlKCd0b3AnLCAnMCcpXHJcbiAgICAuc3R5bGUoJ3otaW5kZXgnLCAyKSAvLyBJbmNyZWFzZWQgei1pbmRleCB0byBlbnN1cmUgaXQgc3RheXMgYWJvdmVcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHttYXJnaW4ubGVmdCArIDV9LCR7bWFyZ2luLnRvcH0pYCk7XHJcblxyXG4gIGNvbnN0IHN2Z1lBeGlzUmlnaHQgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgLmFwcGVuZCgnc3ZnJylcclxuICAgIC5hdHRyKCd3aWR0aCcsIHJpZ2h0U3ZnV2lkdGgpXHJcbiAgICAuYXR0cignaGVpZ2h0JywgdG90YWxIZWlnaHQpXHJcbiAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgIC5zdHlsZSgncmlnaHQnLCAnNDBweCcpXHJcbiAgICAuc3R5bGUoJ3RvcCcsICcwJylcclxuICAgIC5zdHlsZSgnei1pbmRleCcsIDIpIC8vIEluY3JlYXNlZCB6LWluZGV4XHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHttYXJnaW4udG9wfSlgKTtcclxuXHJcbiAgLy8gRklYRUQ6IElubmVyIGNvbnRhaW5lciBzdGFydHMgQUZURVIgdGhlIHktYXhpcyBsYWJlbHNcclxuY29uc3QgaW5uZXJDb250YWluZXIgPSBvdXRlckNvbnRhaW5lclxyXG4gIC5hcHBlbmQoJ2RpdicpXHJcbiAgLmF0dHIoJ2NsYXNzJywgJ2lubmVyLWNvbnRhaW5lcicpXHJcbiAgLnN0eWxlKCd3aWR0aCcsIGBjYWxjKDEwMCUgLSAke2xlZnRTdmdXaWR0aH1weClgKVxyXG4gIC5zdHlsZSgnaGVpZ2h0JywgYCR7dG90YWxIZWlnaHR9cHhgKVxyXG4gIC5zdHlsZSgnbWFyZ2luLWxlZnQnLCBgJHtsZWZ0U3ZnV2lkdGggLSAxNX1weGApIC8vIEdvb2QgYWRqdXN0bWVudCBmb3IgdGhlIDE1cHggb2Zmc2V0XHJcbiAgLnN0eWxlKCdvdmVyZmxvdy14JywgJ2F1dG8nKVxyXG4gIC5zdHlsZSgnb3ZlcmZsb3cteScsICdoaWRkZW4nKVxyXG4gIC5zdHlsZSgncG9zaXRpb24nLCAncmVsYXRpdmUnKTsgLy8gQWRkIHRoaXMgZm9yIGJldHRlciBwb3NpdGlvbmluZyBjb250ZXh0XHJcblxyXG4gIC8vIEZJWEVEOiBNYWluIFNWRyB3aXRoIGluY3JlYXNlZCBoZWlnaHQgYW5kIHByb3BlciBwb3NpdGlvbmluZ1xyXG4gIGNvbnN0IHN2ZyA9IGlubmVyQ29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgZGltZW5zaW9ucy53aWR0aCAtIHJpZ2h0U3ZnV2lkdGgpXHJcbiAgICAuYXR0cignaGVpZ2h0JywgdG90YWxIZWlnaHQpXHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHttYXJnaW4udG9wfSlgKTtcclxuXHJcbiAgcmV0dXJuIHsgb3V0ZXJDb250YWluZXIsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCwgc3ZnLCB0b3RhbEhlaWdodCB9O1xyXG59XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQXhlcyhzdmdFbGVtZW50czogYW55LCBzY2FsZXM6IGFueSwgY2hhcnRDb250ZXh0OiBhbnksIGRpbWVuc2lvbnM6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBzdmcsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCB9ID0gc3ZnRWxlbWVudHM7XHJcbiAgICBjb25zdCB7IHgsIHhTY2FsZUZyb21PcmlnaW4sIHksIGxpbmVZc2NhbGUgfSA9IHNjYWxlcztcclxuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBkaW1lbnNpb25zO1xyXG4gICAgY29uc3QgeyBtZXRhRGF0YSwgbGluZURhdGEsIGtleUxpc3QgfSA9IGNoYXJ0Q29udGV4dDtcclxuXHJcbiAgICB0aGlzLnJlbmRlclhBeGlzKHN2ZywgeCwgeFNjYWxlRnJvbU9yaWdpbiwgaGVpZ2h0LCBjaGFydENvbnRleHQsIGtleUxpc3QpO1xyXG4gICAgdGhpcy5yZW5kZXJZQXhpcyhzdmcsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCwgeSwgZGltZW5zaW9ucyk7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzR3JpZCkge1xyXG4gICAgICB0aGlzLnJlbmRlcllBeGlzR3JpZChzdmcsIHksIGRpbWVuc2lvbnMud2lkdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hncmlkQmV0d2VlbkxhYmVscykge1xyXG4gICAgICB0aGlzLnJlbmRlclhBeGlzR3JpZChzdmcsIHgsIGhlaWdodCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGxpbmVEYXRhICYmIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnNob3dMaW5lQ2hhcnRBeGlzICYmIGxpbmVZc2NhbGUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJMaW5lWUF4aXMoc3ZnWUF4aXNSaWdodCwgbGluZVlzY2FsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxucHJpdmF0ZSByZW5kZXJYQXhpcyhcclxuICAgIHN2ZzogYW55LFxyXG4gICAgeDogYW55LFxyXG4gICAgeFNjYWxlRnJvbU9yaWdpbjogYW55LFxyXG4gICAgaGVpZ2h0OiBudW1iZXIsXHJcbiAgICBjaGFydENvbnRleHQ6IGFueSxcclxuICAgIGtleUxpc3Q6IHN0cmluZ1tdXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCB7IGRhdGEsIG1ldGFEYXRhIH0gPSBjaGFydENvbnRleHQ7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgeEF4aXMgPSBzdmdcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAneDEgYXhpczEnKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHtoZWlnaHR9KWApXHJcbiAgICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4KS50aWNrU2l6ZSgwKSk7XHJcblxyXG4gICAgICAgIHhBeGlzXHJcbiAgICAgIC5zZWxlY3RBbGwoJ2cudGljayB0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IsICM2NjY2NjYpJylcclxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMTFweCcpXHJcbiAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAuYXR0cignZHgnLCB4LmJhbmR3aWR0aCgpIC8gMik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbmRlck11bHRpQ2hhcnRYQXhpcyhzdmcsIHgsIGhlaWdodCwgZGF0YSwgbWV0YURhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi54TGFiZWxzT25TYW1lTGluZSkge1xyXG4gICAgICB0aGlzLnJlbmRlclhMYWJlbHNPblNhbWVMaW5lKHN2ZywgZGF0YSwgbWV0YURhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEJvdHRvbSB4LWF4aXNcclxuICAgIGNvbnN0IHhBeGlzMiA9IHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ3gyIGF4aXMyJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke2hlaWdodH0pYClcclxuICAgICAgLnN0eWxlKCdjb2xvcicsICcjMDAwJylcclxuICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4U2NhbGVGcm9tT3JpZ2luKS50aWNrU2l6ZSgwKSk7XHJcblxyXG4gICAgeEF4aXMyXHJcbiAgICAgIC5zZWxlY3QoJy5kb21haW4nKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjMDAwMDAwKScpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgJzFweCcpXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgJ25vbmUnKTtcclxuXHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngyLmF4aXMyIGcudGljayB0ZXh0Jykuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgIHN2Zy5zZWxlY3RBbGwoJy5saWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJNdWx0aUNoYXJ0WEF4aXMoc3ZnOiBhbnksIHg6IGFueSwgaGVpZ2h0OiBudW1iZXIsIGRhdGE6IGFueVtdLCBtZXRhRGF0YTogYW55KTogdm9pZCB7XHJcbiAgICBsZXQgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgIGNvbnN0IHNob3J0X3RpY2tfbGVuZ3RoX2JnID0gNTtcclxuICAgIGNvbnN0IGxvbmdfdGlja19sZW5ndGhfYmcgPSAzMDtcclxuXHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICd4MSBheGlzMScpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHtoZWlnaHR9KWApXHJcbiAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkudGlja1NpemUoMCkpXHJcbiAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ2ZpbGwnLCAnbm9uZScpKTtcclxuXHJcbiAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayBsaW5lJykuYXR0cigneTInLCAoKSA9PiB7XHJcbiAgICAgIGlmIChhbHRlcm5hdGVfdGV4dCAmJiAhdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNOb0FsdGVybmF0ZVhheGlzVGV4dCkge1xyXG4gICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIGxvbmdfdGlja19sZW5ndGhfYmcgLSA3O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gc2hvcnRfdGlja19sZW5ndGhfYmcgLSA0O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtd2Vla2x5Y2hhcnRzJykuYXR0cigneScsICgpID0+IHtcclxuICAgICAgaWYgKGFsdGVybmF0ZV90ZXh0KSB7XHJcbiAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gbG9uZ190aWNrX2xlbmd0aF9iZztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHNob3J0X3RpY2tfbGVuZ3RoX2JnO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyWExhYmVsc09uU2FtZUxpbmUoc3ZnOiBhbnksIGRhdGE6IGFueVtdLCBtZXRhRGF0YTogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBzaG9ydF90aWNrX2xlbmd0aF9iZyA9IDU7XHJcbiAgICBjb25zdCBsb25nX3RpY2tfbGVuZ3RoX2JnID0gMzA7XHJcblxyXG4gICAgc3ZnXHJcbiAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAuYXR0cigneScsIHNob3J0X3RpY2tfbGVuZ3RoX2JnKVxyXG4gICAgICAudGV4dCgoZCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzVmFsdWVUb0JlSWdub3JlZCA9IGRhdGEuc29tZShcclxuICAgICAgICAgIChpbmRpdjogYW55KSA9PlxyXG4gICAgICAgICAgICBpbmRpdi5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGQudHJpbSgpLnRvTG93ZXJDYXNlKCkgJiZcclxuICAgICAgICAgICAgaW5kaXZbbWV0YURhdGEua2V5TGlzdFswXV0gPT09IC0xXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaXNWYWx1ZVRvQmVJZ25vcmVkKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmIChkLnRyaW0oKS5pbmRleE9mKCcgJykgPiAtMSkge1xyXG4gICAgICAgICAgcmV0dXJuIGQudHJpbSgpLnN1YnN0cmluZygwLCBkLmluZGV4T2YoJyAnKSkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGQudG9Mb3dlckNhc2UoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgc3ZnXHJcbiAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrJylcclxuICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgIC5hdHRyKCd5JywgbG9uZ190aWNrX2xlbmd0aF9iZylcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCAnY3VycmVudENvbG9yJylcclxuICAgICAgLnRleHQoKGQpID0+IHtcclxuICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgIHJldHVybiBkLnRyaW0oKS5zdWJzdHJpbmcoZC5pbmRleE9mKCcgJykpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlcllBeGlzKHN2ZzogYW55LCBzdmdZQXhpc0xlZnQ6IGFueSwgc3ZnWUF4aXNSaWdodDogYW55LCB5OiBhbnksIGRpbWVuc2lvbnM6IGFueSk6IHZvaWQge1xyXG4gICAgLy8gTWFpbiBZLWF4aXMgaW4gY2hhcnQgYXJlYSAoaGlkZGVuKVxyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteS1heGlzLXRleHQgeWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeSlcclxuICAgICAgLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuXHJcbiAgICAvLyBGSVhFRDogTGVmdCBZLWF4aXMgd2l0aCB2aXNpYmxlIGxpbmVcclxuICAgIGNvbnN0IHlBeGlzTGVmdCA9IGQzXHJcbiAgICAgIC5heGlzTGVmdCh5KVxyXG4gICAgICAudGlja1NpemUoMClcclxuICAgICAgLnRpY2tzKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAudGlja0Zvcm1hdCh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0xhYmVsRm9tYXR0ZXIpO1xyXG5cclxuICAgIGNvbnN0IHlBeGlzR3JvdXAgPSBzdmdZQXhpc0xlZnRcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93biB5YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgICAuY2FsbCh5QXhpc0xlZnQpO1xyXG5cclxuICAgIC8vIEZJWEVEOiBTaG93IFktYXhpcyB2ZXJ0aWNhbCBsaW5lXHJcbiAgICB5QXhpc0dyb3VwXHJcbiAgICAgIC5zZWxlY3QoJy5kb21haW4nKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjMDAwMDAwKScpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgJzFweCcpXHJcbiAgICAgIC5zdHlsZSgnZGlzcGxheScsICdibG9jaycpO1xyXG5cclxuICAgIC8vIEZJWEVEOiBQb3NpdGlvbiBZLWF4aXMgdmFsdWVzIHdpdGggcHJvcGVyIHNwYWNpbmdcclxuICAgIHlBeGlzR3JvdXBcclxuICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yLCAjNjY2NjY2KScpXHJcbiAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJzExcHgnKVxyXG4gICAgICAuc3R5bGUoJ2ZvbnQtd2VpZ2h0JywgJzQwMCcpXHJcbiAgICAgIC5hdHRyKCd4JywgLTYpICAvLyBGSVhFRDogU21hbGwgZ2FwIGZyb20gYXhpcyBsaW5lXHJcbiAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdlbmQnKVxyXG4gICAgICAuYXR0cignZHknLCAnMC4zMmVtJyk7XHJcblxyXG4gICAgLy8gUmlnaHQgWS1heGlzIChoaWRkZW4pXHJcbiAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24geWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeSlcclxuICAgICAgLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuXHJcbiAgICB0aGlzLmFwcGx5QXhpc1Zpc2liaWxpdHlTZXR0aW5ncygpO1xyXG4gIH1cclxuXHJcbnByaXZhdGUgYXBwbHlBeGlzVmlzaWJpbGl0eVNldHRpbmdzKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNMYWJlbEhpZGRlbikge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJ2cubGliLWxpbmUteC1heGlzLXRleHQgPiBnID4gdGV4dCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNMYWJlbEhpZGRlbikge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQgPiBnID4gdGV4dCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgICAvLyBGSVhFRDogRG9uJ3QgaGlkZSB0aGUgWS1heGlzIGxhYmVsIGVsZW1lbnRcclxuICAgICAgZDMuc2VsZWN0QWxsKCcubGliLXlsYWJlbC12aXNpYmxlJykuc3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzSGlkZGVuKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgICAvLyBGSVhFRDogS2VlcCBZLWF4aXMgbGFiZWwgdmlzaWJsZVxyXG4gICAgICBkMy5zZWxlY3RBbGwoJy5saWIteWxhYmVsLXZpc2libGUnKS5zdHlsZSgnZGlzcGxheScsICdibG9jaycpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNEYXNoZWQpIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkIC5kb21haW4nKS5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKS5zdHlsZSgnY29sb3InLCAnIzk5OTk5OScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbnByaXZhdGUgcmVuZGVyWUF4aXNHcmlkKHN2ZzogYW55LCB5OiBhbnksIHdpZHRoOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ3ktYXhpcy1ncmlkJylcclxuICAgICAgLmNhbGwoXHJcbiAgICAgICAgZDMuYXhpc0xlZnQoeSlcclxuICAgICAgICAgIC50aWNrcyh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgICAgIC50aWNrU2l6ZSgtd2lkdGgpXHJcbiAgICAgICAgICAudGlja0Zvcm1hdCgnJylcclxuICAgICAgKVxyXG4gICAgICAuc3R5bGUoJ2NvbG9yJywgJyM1MzUzNTNmZicpICAvLyBGSVhFRDogTGlnaHRlciBncmlkXHJcbiAgICAgIC5zdHlsZSgnb3BhY2l0eScsICcwLjcnKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnbm9uZScpXHJcbiAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpKVxyXG4gICAgICAuc2VsZWN0QWxsKCdsaW5lJylcclxuICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMC41cHgnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyWEF4aXNHcmlkKHN2ZzogYW55LCB4OiBhbnksIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdncmlkJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHt4LmJhbmR3aWR0aCgpIC8gMn0sJHtoZWlnaHR9KWApXHJcbiAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkudGlja1NpemUoLWhlaWdodCkudGlja0Zvcm1hdCgnJykpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWdyaWQtY29sb3IsICM5OTk5OTkpJylcclxuICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJMaW5lWUF4aXMoc3ZnWUF4aXNSaWdodDogYW55LCBsaW5lWXNjYWxlOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHlMaW5lQXhpcyA9IGQzXHJcbiAgICAgIC5heGlzUmlnaHQobGluZVlzY2FsZSlcclxuICAgICAgLnRpY2tzKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAudGlja1NpemUoMClcclxuICAgICAgLnRpY2tGb3JtYXQodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUxpbmVBeGlzTGFiZWxGb21hdHRlcik7XHJcblxyXG4gICAgc3ZnWUF4aXNSaWdodFxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXktYXhpcy10ZXh0MScpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpXHJcbiAgICAgIC5jYWxsKHlMaW5lQXhpcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckJhcnMoc3ZnOiBhbnksIGNoYXJ0Q29udGV4dDogYW55LCBzY2FsZXM6IGFueSwgZGltZW5zaW9uczogYW55KTogdm9pZCB7XHJcbiAgY29uc3QgeyBkYXRhLCBtZXRhRGF0YSwga2V5TGlzdCwgaXNSaWEgfSA9IGNoYXJ0Q29udGV4dDtcclxuICBjb25zdCB7IHgsIHhTdWJncm91cCwgeSB9ID0gc2NhbGVzO1xyXG4gIGNvbnN0IHsgaGVpZ2h0IH0gPSBkaW1lbnNpb25zO1xyXG5cclxuICAvLyBGSVhFRDogSW1wcm92ZWQgYmFyIGdyb3VwIHBvc2l0aW9uaW5nXHJcbiAgY29uc3Qgc3RhdGUgPSBzdmdcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLnNlbGVjdEFsbCgnLnN0YXRlJylcclxuICAgIC5kYXRhKGRhdGEpXHJcbiAgICAuZW50ZXIoKVxyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgKGQpID0+IGB0cmFuc2xhdGUoJHt4KGQubmFtZSl9LDApYCk7XHJcblxyXG4gIHN0YXRlXHJcbiAgICAuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgIC5kYXRhKChkKSA9PiB0aGlzLnByZXBhcmVCYXJEYXRhKGQsIGtleUxpc3QpKVxyXG4gICAgLmVudGVyKClcclxuICAgIC5hcHBlbmQoJ3JlY3QnKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2JhcnMnKVxyXG4gICAgLm9uKCdjbGljaycsIChkKSA9PiB0aGlzLmhhbmRsZUJhckNsaWNrKGQsIG1ldGFEYXRhKSlcclxuICAgIC5hdHRyKCd4JywgKGQpID0+IHtcclxuICAgICAgLy8gRklYRUQ6IEltcHJvdmVkIFggcG9zaXRpb25pbmcgZm9yIGNlbnRlcmluZ1xyXG4gICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZURyaWxsZG93bkJhclgoZCwgZGF0YSwgeCkgLSAodGhpcy5nZXRCYXJXaWR0aChkLCBkYXRhLCB4LCB4U3ViZ3JvdXApIC8gMik7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHhTdWJncm91cChkLmtleSk7XHJcbiAgICB9KVxyXG4gICAgLmF0dHIoJ3knLCAoZCkgPT4ge1xyXG4gICAgICBjb25zdCB2YWx1ZSA9IGQudmFsdWUgPT09IC0xID8gMCA6IGQudmFsdWU7XHJcbiAgICAgIHJldHVybiB5KHZhbHVlKTtcclxuICAgIH0pXHJcbiAgICAuYXR0cignd2lkdGgnLCAoZCkgPT4gdGhpcy5nZXRCYXJXaWR0aChkLCBkYXRhLCB4LCB4U3ViZ3JvdXApKVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIChkKSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gZC52YWx1ZSA9PT0gLTEgPyAwIDogZC52YWx1ZTtcclxuICAgICAgcmV0dXJuIGhlaWdodCAtIHkodmFsdWUpO1xyXG4gICAgfSlcclxuICAgIC5zdHlsZSgnY3Vyc29yJywgKGQpID0+IChtZXRhRGF0YS5oYXNEcmlsbERvd24gJiYgIWlzUmlhID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnKSlcclxuICAgIC5hdHRyKCdmaWxsJywgKGQpID0+IHRoaXMuZ2V0QmFyQ29sb3IoZCwgbWV0YURhdGEpKTtcclxuXHJcbiAgICBpZiAoIWlzUmlhICYmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCB8fCAoIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRzT25CYXIgJiYgIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmRpc3BsYXlUaXRsZU9uVG9wKSkpIHtcclxuICAgICAgc3RhdGUuc2VsZWN0QWxsKCdyZWN0Jykub24oJ21vdXNlb3V0JywgKGQsIGkpID0+IHRoaXMuaGFuZGxlTW91c2VPdXQoc3ZnKSkub24oJ21vdXNlb3ZlcicsIChkLCBpKSA9PiB0aGlzLmhhbmRsZU1vdXNlT3ZlcihzdmcsIGQsIGRhdGEsIG1ldGFEYXRhLCB4LCB5LCBzY2FsZXMubGVmdEFuZFJpZ2h0U3BhY2VzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRzT25CYXIgJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgdGhpcy5yZW5kZXJCYXJUZXh0cyhzdGF0ZSwgZGF0YSwgbWV0YURhdGEsIGtleUxpc3QsIHgsIHhTdWJncm91cCwgeSwgaXNSaWEsIHN2Zyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgbGluZScpLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUJhckRhdGEoZDogYW55LCBrZXlMaXN0OiBzdHJpbmdbXSk6IGFueVtdIHtcclxuICAgIHJldHVybiBrZXlMaXN0Lm1hcCgoa2V5KSA9PiAoeyBrZXksIHZhbHVlOiBkW2tleV0sIG5hbWU6IGQubmFtZSB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUJhckNsaWNrKGQ6IGFueSwgbWV0YURhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKGQua2V5ID09PSAnVGFyZ2V0JykgcmV0dXJuO1xyXG4gICAgaWYgKFxyXG4gICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrPy5sZW5ndGggfHxcclxuICAgICAgKCFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ubmFtZSkgJiYgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5pbmNsdWRlcyhkPy5rZXkpKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlQ2xpY2soZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxucHJpdmF0ZSBnZXRCYXJYKGQ6IGFueSwgZGF0YTogYW55W10sIHg6IGFueSwgeFN1Ymdyb3VwOiBhbnkpOiBudW1iZXIge1xyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVEcmlsbGRvd25CYXJYKGQsIGRhdGEsIHgpO1xyXG4gIH1cclxuICBcclxuICAvLyBGSVhFRDogRm9yIG5vbi1kcmlsbGRvd24gY2hhcnRzLCBlbnN1cmUgcHJvcGVyIHBvc2l0aW9uaW5nXHJcbiAgY29uc3QgYmFzZVBvc2l0aW9uID0geFN1Ymdyb3VwKGQua2V5KTtcclxuICBjb25zdCBiYXJXaWR0aCA9IHhTdWJncm91cC5iYW5kd2lkdGgoKTtcclxuICByZXR1cm4gYmFzZVBvc2l0aW9uICsgKGJhcldpZHRoIC8gMik7IC8vIENlbnRlciBvZiB0aGUgYmFyXHJcbn1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlRHJpbGxkb3duQmFyWChkOiBhbnksIGRhdGE6IGFueVtdLCB4OiBhbnkpOiBudW1iZXIge1xyXG4gIGxldCB0ZW1wU2NhbGU7XHJcbiAgZGF0YS5mb3JFYWNoKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICBpZiAoaW5kaXYubmFtZSA9PT0gZC5uYW1lKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9PSAwKTtcclxuICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBGSVhFRDogQmV0dGVyIGNlbnRlcmluZyBmb3Igc2luZ2xlIGJhciBhbmQgbXVsdGlwbGUgYmFyc1xyXG4gICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgIHRlbXBTY2FsZSA9IHRoaXMuYWRqdXN0RHJpbGxkb3duU2NhbGUodGVtcFNjYWxlLCBkYXRhLCB4KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG4gIFxyXG4gIC8vIEZJWEVEOiBFbnN1cmUgcHJvcGVyIGNlbnRlcmluZ1xyXG4gIGlmICh0ZW1wU2NhbGUpIHtcclxuICAgIGNvbnN0IGJhclBvc2l0aW9uID0gdGVtcFNjYWxlKGQua2V5KTtcclxuICAgIGNvbnN0IGJhcldpZHRoID0gdGVtcFNjYWxlLmJhbmR3aWR0aCgpO1xyXG4gICAgcmV0dXJuIGJhclBvc2l0aW9uICsgKGJhcldpZHRoIC8gMik7IC8vIENlbnRlciBvZiB0aGUgYmFyXHJcbiAgfVxyXG4gIHJldHVybiAwO1xyXG59XHJcblxyXG5wcml2YXRlIGFkanVzdERyaWxsZG93blNjYWxlKHRlbXBTY2FsZTogYW55LCBkYXRhOiBhbnlbXSwgeDogYW55KTogYW55IHtcclxuICAvLyBGSVhFRDogSW1wcm92ZWQgY2VudGVyaW5nIGxvZ2ljXHJcbiAgaWYgKHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoID09PSAxKSB7XHJcbiAgICAvLyBTaW5nbGUgYmFyIC0gY2VudGVyIGl0IHByb3Blcmx5XHJcbiAgICBjb25zdCBrZXlzTGVuZ3RoID0gT2JqZWN0LmtleXModGhpcy5jaGFydERhdGEuZGF0YVswXSkubGVuZ3RoIC0gMTsgLy8gRXhjbHVkZSAnbmFtZSdcclxuICAgIGNvbnN0IHRvdGFsQmFyV2lkdGggPSBNYXRoLm1pbihrZXlzTGVuZ3RoICogNDAsIHguYmFuZHdpZHRoKCkgKiAwLjgpOyAvLyBNYXggODAlIG9mIGF2YWlsYWJsZSB3aWR0aFxyXG4gICAgXHJcbiAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAoeC5iYW5kd2lkdGgoKSAtIHRvdGFsQmFyV2lkdGgpIC8gMixcclxuICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gdG90YWxCYXJXaWR0aCkgLyAyXHJcbiAgICBdKS5wYWRkaW5nKDAuMik7XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIE11bHRpcGxlIGJhcnMgLSBkaXN0cmlidXRlIGV2ZW5seSB3aXRoIHByb3BlciBwYWRkaW5nXHJcbiAgICBjb25zdCB0b3RhbEJhcldpZHRoID0gTWF0aC5taW4oMTI1LCB4LmJhbmR3aWR0aCgpICogMC44KTtcclxuICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICh4LmJhbmR3aWR0aCgpIC0gdG90YWxCYXJXaWR0aCkgLyAyLFxyXG4gICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSB0b3RhbEJhcldpZHRoKSAvIDJcclxuICAgIF0pLnBhZGRpbmcoMC4zKTtcclxuICB9XHJcbiAgcmV0dXJuIHRlbXBTY2FsZTtcclxufVxyXG5cclxuICBwcml2YXRlIGdldEJhcldpZHRoKGQ6IGFueSwgZGF0YTogYW55W10sIHg6IGFueSwgeFN1Ymdyb3VwOiBhbnkpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgbGV0IHRlbXBTY2FsZTtcclxuICAgICAgZGF0YS5mb3JFYWNoKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGluZGl2Lm5hbWUgPT09IGQubmFtZSkge1xyXG4gICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT09IDApO1xyXG4gICAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgICAgICB0ZW1wU2NhbGUgPSB0aGlzLmFkanVzdERyaWxsZG93blNjYWxlKHRlbXBTY2FsZSwgZGF0YSwgeCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHRlbXBTY2FsZSA/IHRlbXBTY2FsZS5iYW5kd2lkdGgoKSA6IDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geFN1Ymdyb3VwLmJhbmR3aWR0aCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCYXJIZWlnaHQoZDogYW55LCB5OiBhbnksIGhlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmIChkLnZhbHVlID09PSAtMSkgcmV0dXJuIGhlaWdodCAtIHkoMCk7XHJcbiAgICBpZiAoZC52YWx1ZSkgcmV0dXJuIGhlaWdodCAtIHkoZC52YWx1ZSk7XHJcbiAgICByZXR1cm4gaGVpZ2h0IC0geSgwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QmFyQ29sb3IoZDogYW55LCBtZXRhRGF0YTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChcclxuICAgICAgZC52YWx1ZSAmJlxyXG4gICAgICB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICBkLnZhbHVlID49IHBhcnNlSW50KHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCkgJiZcclxuICAgICAgdGhpcy5jaGFydERhdGEubWV0YURhdGEuY29sb3JBYm92ZVRhcmdldFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvckFib3ZlVGFyZ2V0W2Qua2V5XTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJCYXJUZXh0cyhcclxuICAgIHN0YXRlOiBhbnksXHJcbiAgICBkYXRhOiBhbnlbXSxcclxuICAgIG1ldGFEYXRhOiBhbnksXHJcbiAgICBrZXlMaXN0OiBzdHJpbmdbXSxcclxuICAgIHg6IGFueSxcclxuICAgIHhTdWJncm91cDogYW55LFxyXG4gICAgeTogYW55LFxyXG4gICAgaXNSaWE6IGJvb2xlYW4sXHJcbiAgICBzdmc6IGFueVxyXG4gICk6IHZvaWQge1xyXG4gICAgc3RhdGVcclxuICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgIC5kYXRhKChkKSA9PiB0aGlzLnByZXBhcmVCYXJEYXRhKGQsIGtleUxpc3QpKVxyXG4gICAgICAuZW50ZXIoKVxyXG4gICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgLmF0dHIoJ3gnLCAwKVxyXG4gICAgICAuYXR0cigneScsIDApXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItZGF0YS1sYWJlbHMtd2Vla2x5Y2hhcnRzJylcclxuICAgICAgLnRleHQoKGQpID0+IHRoaXMuZ2V0QmFyVGV4dExhYmVsKGQpKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAnIzAwMCcpXHJcbiAgICAgIC5zdHlsZSgnZm9udC13ZWlnaHQnLCAnYm9sZCcpXHJcbiAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgKCkgPT4gdGhpcy5nZXRCYXJUZXh0Rm9udFNpemUoKSlcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIChkKSA9PiB0aGlzLmdldEJhclRleHRUcmFuc2Zvcm0oZCwgZGF0YSwgeCwgeFN1Ymdyb3VwLCB5KSlcclxuICAgICAgLm9uKCdjbGljaycsIChkKSA9PiB0aGlzLmhhbmRsZUJhckNsaWNrKGQsIG1ldGFEYXRhKSk7XHJcblxyXG4gICAgaWYgKCFpc1JpYSkge1xyXG4gICAgICBzdGF0ZVxyXG4gICAgICAgIC5zZWxlY3RBbGwoJy5saWItZGF0YS1sYWJlbHMtd2Vla2x5Y2hhcnRzJylcclxuICAgICAgICAub24oJ21vdXNlb3V0JywgKGQsIGkpID0+IHRoaXMuaGFuZGxlTW91c2VPdXQoc3ZnKSlcclxuICAgICAgICAub24oJ21vdXNlb3ZlcicsIChkLCBpKSA9PlxyXG4gICAgICAgICAgdGhpcy5oYW5kbGVNb3VzZU92ZXIoc3ZnLCBkLCBkYXRhLCBtZXRhRGF0YSwgeCwgeSwgeC5iYW5kd2lkdGgoKSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCYXJUZXh0TGFiZWwoZDogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICghZC5rZXkgfHwgIWQudmFsdWUpIHJldHVybiAnJztcclxuICAgIHJldHVybiBkLmtleS5sZW5ndGggPiAyMCA/IGQua2V5LnN1YnN0cmluZygwLCAxNykgKyAnLi4uJyA6IGQua2V5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCYXJUZXh0Rm9udFNpemUoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+IDE5MDApIHJldHVybiAnMThweCc7XHJcbiAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDE0MDApIHJldHVybiAnMTBweCc7XHJcbiAgICAgIHJldHVybiAnMTRweCc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJzE0cHgnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCYXJUZXh0VHJhbnNmb3JtKGQ6IGFueSwgZGF0YTogYW55W10sIHg6IGFueSwgeFN1Ymdyb3VwOiBhbnksIHk6IGFueSk6IHN0cmluZyB7XHJcbiAgICBsZXQgdGVtcFNjYWxlO1xyXG4gICAgZGF0YS5mb3JFYWNoKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpbmRpdi5uYW1lID09PSBkLm5hbWUpIHtcclxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPT0gMCk7XHJcbiAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgIHRlbXBTY2FsZSA9IHRoaXMuYWRqdXN0RHJpbGxkb3duU2NhbGUodGVtcFNjYWxlLCBkYXRhLCB4KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0QWx3YXlzSG9yaXpvbnRhbCkge1xyXG4gICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke3hTdWJncm91cChkLmtleSl9LCR7eShkLnZhbHVlKSAtIDN9KWA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRlbXBTY2FsZSAmJiAhaXNOYU4odGVtcFNjYWxlKGQua2V5KSkpIHtcclxuICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoJHt0ZW1wU2NhbGUoZC5rZXkpICsgdGVtcFNjYWxlLmJhbmR3aWR0aCgpICogMC41NX0sJHt5KDApIC0gMTB9KSByb3RhdGUoMjcwKWA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ3RyYW5zbGF0ZSgwLDApJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTW91c2VPdmVyKFxyXG4gICAgc3ZnOiBhbnksXHJcbiAgICBkOiBhbnksXHJcbiAgICBkYXRhOiBhbnlbXSxcclxuICAgIG1ldGFEYXRhOiBhbnksXHJcbiAgICB4OiBhbnksXHJcbiAgICB5OiBhbnksXHJcbiAgICBsZWZ0QW5kUmlnaHRTcGFjZXM6IG51bWJlclxyXG4gICk6IHZvaWQge1xyXG4gICAgc3ZnLnNlbGVjdEFsbCgnLmxpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJykucmVtb3ZlKCk7XHJcblxyXG4gICAgbGV0IHRlbXBTY2FsZTtcclxuICAgIGRhdGEuZm9yRWFjaCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaW5kaXYubmFtZSA9PT0gZC5uYW1lKSB7XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT09IDApO1xyXG4gICAgICAgIHRlbXBTY2FsZSA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihrZXlzKS5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICB0ZW1wU2NhbGUgPSB0aGlzLmFkanVzdERyaWxsZG93blNjYWxlKHRlbXBTY2FsZSwgZGF0YSwgeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBmb3JlaWduT2JqZWN0ID0gc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxyXG4gICAgICAuYXR0cigneCcsICgpID0+IHRoaXMuY2FsY3VsYXRlVG9vbHRpcFgoZCwgeCwgdGVtcFNjYWxlLCBtZXRhRGF0YSwgbGVmdEFuZFJpZ2h0U3BhY2VzKSlcclxuICAgICAgLmF0dHIoJ3knLCAoKSA9PiB5KGQudmFsdWUpIC0gNDMpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItdmVydGljYWxzdGFjay10aXRsZS1vbnRvcCcpXHJcbiAgICAgIC5hdHRyKCd3aWR0aCcsICgpID0+IHRoaXMuY2FsY3VsYXRlVG9vbHRpcFdpZHRoKHRlbXBTY2FsZSwgbWV0YURhdGEsIGxlZnRBbmRSaWdodFNwYWNlcykpXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCA0MCk7XHJcblxyXG4gICAgZm9yZWlnbk9iamVjdFxyXG4gICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAndGl0bGUnKVxyXG4gICAgICAuc3R5bGUoJ3otaW5kZXgnLCA5OSlcclxuICAgICAgLmh0bWwoKCkgPT4gdGhpcy5nZXRUb29sdGlwSFRNTChkLCBtZXRhRGF0YSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVUb29sdGlwWChcclxuICAgIGQ6IGFueSxcclxuICAgIHg6IGFueSxcclxuICAgIHRlbXBTY2FsZTogYW55LFxyXG4gICAgbWV0YURhdGE6IGFueSxcclxuICAgIGxlZnRBbmRSaWdodFNwYWNlczogbnVtYmVyXHJcbiAgKTogbnVtYmVyIHtcclxuICAgIGlmIChtZXRhRGF0YS5oYXNEcmlsbERvd24pIHtcclxuICAgICAgaWYgKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIgPiAxODApIHtcclxuICAgICAgICByZXR1cm4geChkLm5hbWUpICsgdGVtcFNjYWxlKGQua2V5KSArIHRlbXBTY2FsZS5iYW5kd2lkdGgoKSAvIDIgLSA5MDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHgoZC5uYW1lKSArXHJcbiAgICAgICAgdGVtcFNjYWxlKGQua2V5KSAtXHJcbiAgICAgICAgKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIpIC8gMiArXHJcbiAgICAgICAgdGVtcFNjYWxlLmJhbmR3aWR0aCgpIC8gMlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgeChkLm5hbWUpICtcclxuICAgICAgdGVtcFNjYWxlKGQua2V5KSAtXHJcbiAgICAgICh0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyKSAvIDIgK1xyXG4gICAgICB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgLyAyXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVUb29sdGlwV2lkdGgodGVtcFNjYWxlOiBhbnksIG1ldGFEYXRhOiBhbnksIGxlZnRBbmRSaWdodFNwYWNlczogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmIChtZXRhRGF0YS5oYXNEcmlsbERvd24pIHtcclxuICAgICAgaWYgKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIgPiAxODApIHtcclxuICAgICAgICByZXR1cm4gJzE4MHB4JztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMjtcclxuICAgIH1cclxuICAgIHJldHVybiB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUb29sdGlwSFRNTChkOiBhbnksIG1ldGFEYXRhOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZGF0YVR5cGUgPSBtZXRhRGF0YS5kYXRhVHlwZSB8fCAnJztcclxuICAgIGlmICghdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLW5hbWVcIj4ke2QubmFtZX08L3NwYW4+PHNwYW4gY2xhc3M9XCJ0aXRsZS1iYXItdmFsdWVcIj48c3Bhbj4ke2QudmFsdWV9PC9zcGFuPiR7ZGF0YVR5cGV9PC9zcGFuPmA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB0ZW1wS2V5ID0gZC5uYW1lLmxlbmd0aCA8PSA4ID8gZC5uYW1lIDogZC5uYW1lLnN1YnN0cmluZygwLCA1KSArICcuLi4nO1xyXG4gICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLW5hbWVcIj4ke3RlbXBLZXl9OiR7ZC52YWx1ZX0ke2RhdGFUeXBlfTwvc3Bhbj48c3BhbiBjbGFzcz1cInRpdGxlLWJhci12YWx1ZVwiPiR7ZC5uYW1lfTwvc3Bhbj5gO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVNb3VzZU91dChzdmc6IGFueSk6IHZvaWQge1xyXG4gICAgc3ZnLnNlbGVjdEFsbCgnLmxpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJykucmVtb3ZlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckxhYmVscyhzdmdFbGVtZW50czogYW55LCBzY2FsZXM6IGFueSwgY2hhcnRDb250ZXh0OiBhbnksIGRpbWVuc2lvbnM6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBzdmcsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCB9ID0gc3ZnRWxlbWVudHM7XHJcbiAgICBjb25zdCB7IG1ldGFEYXRhIH0gPSBjaGFydENvbnRleHQ7XHJcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIG1hcmdpbiB9ID0gZGltZW5zaW9ucztcclxuXHJcbiAgICBpZiAobWV0YURhdGEueUxhYmVsKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyWUF4aXNMYWJlbChzdmdZQXhpc0xlZnQsIG1ldGFEYXRhLnlMYWJlbCwgaGVpZ2h0LCBtYXJnaW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtZXRhRGF0YS54TGFiZWwpIHtcclxuICAgICAgdGhpcy5yZW5kZXJYQXhpc0xhYmVsKHN2ZywgbWV0YURhdGEueExhYmVsLCB3aWR0aCwgaGVpZ2h0LCBtYXJnaW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtZXRhRGF0YS5saW5leUxhYmVsKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyTGluZVlBeGlzTGFiZWwoc3ZnWUF4aXNSaWdodCwgbWV0YURhdGEubGluZXlMYWJlbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxucHJpdmF0ZSByZW5kZXJZQXhpc0xhYmVsKHN2Z1lBeGlzTGVmdDogYW55LCB5TGFiZWw6IHN0cmluZywgaGVpZ2h0OiBudW1iZXIsIG1hcmdpbjogYW55KTogdm9pZCB7XHJcbiAgICAvLyBGSVhFRDogUHJvcGVyIFktYXhpcyBsYWJlbCB3aXRoIGNvcnJlY3QgcG9zaXRpb25pbmdcclxuICAgIHN2Z1lBeGlzTGVmdFxyXG4gICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1heGlzLWdyb3VwLWxhYmVsIGxpYi15bGFiZWwtdmlzaWJsZScpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKC05MCknKVxyXG4gICAgICAuYXR0cigneScsIC1tYXJnaW4ubGVmdClcclxuICAgICAgLmF0dHIoJ3gnLCAwIC0gaGVpZ2h0IC8gMilcclxuICAgICAgLmF0dHIoJ2R5JywgJzFlbScpXHJcbiAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMTNweCcpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yLCAjNjY2NjY2KScpO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHN2Z1lBeGlzTGVmdC5zZWxlY3RBbGwoJy5saWItYXhpcy1ncm91cC1sYWJlbCcpLnRleHQoeUxhYmVsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN2Z1lBeGlzTGVmdFxyXG4gICAgICAgIC5zZWxlY3RBbGwoJy5saWItYXhpcy1ncm91cC1sYWJlbCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15bGFiZWwtd2Vla2x5Q2hhcnRzIGxpYi15bGFiZWwtdmlzaWJsZScpXHJcbiAgICAgICAgLnRleHQoeUxhYmVsLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbnByaXZhdGUgcmVuZGVyWEF4aXNMYWJlbChzdmc6IGFueSwgeExhYmVsOiBzdHJpbmcsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBtYXJnaW46IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgaXNBY3JvbnltID0gdGhpcy5pc0Fjcm9ueW0oeExhYmVsLnJlcGxhY2UoL1teQS1aYS16XS9nLCAnJykpO1xyXG5cclxuICAgIGxldCBiYXNlQ2xhc3MgPSAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgZm9udC1zaXplLTEnO1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgYmFzZUNsYXNzICs9ICcgbGliLXhsYWJlbC1kcmlsbGRvd25jaGFydHMnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGJhc2VDbGFzcyArPSAnIGxpYi14bGFiZWwtd2Vla2x5Q2hhcnRzJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGJhc2VDbGFzcyArPSAnIGxpYi1heGlzLXdhdGVyZmFsbC1sYWJlbCc7XHJcbiAgICB9XHJcblxyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCBiYXNlQ2xhc3MpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgIC8vIEZJWEVEOiBBZGp1c3RlZCBmb3IgcmVkdWNlZCBib3R0b20gbWFyZ2luXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7d2lkdGggLyAyfSwke2hlaWdodCArIDMyfSlgKVxyXG4gICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yLCAjNjY2NjY2KScpXHJcbiAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJzEzcHgnKVxyXG4gICAgICAudGV4dChpc0Fjcm9ueW0gPyB4TGFiZWwudG9VcHBlckNhc2UoKSA6IHhMYWJlbC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAuc3R5bGUoJ3RleHQtdHJhbnNmb3JtJywgaXNBY3JvbnltID8gJ25vbmUnIDogJ2NhcGl0YWxpemUnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNBY3JvbnltKGxhYmVsOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIChsYWJlbC5sZW5ndGggPD0gNCAmJiAvXltBLVpdKyQvLnRlc3QobGFiZWwpKSB8fFxyXG4gICAgICAobGFiZWwgPT09IGxhYmVsLnRvVXBwZXJDYXNlKCkgJiYgL1tBLVpdLy50ZXN0KGxhYmVsKSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckxpbmVZQXhpc0xhYmVsKHN2Z1lBeGlzUmlnaHQ6IGFueSwgbGluZXlMYWJlbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgbGliLWxpbmUtYXhpcycpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCkgcm90YXRlKDkwKScpXHJcbiAgICAgIC5hdHRyKCd5JywgLTEwMClcclxuICAgICAgLmF0dHIoJ3gnLCAxMDApXHJcbiAgICAgIC5hdHRyKCdkeScsICc1ZW0nKVxyXG4gICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJ3NtYWxsZXInKVxyXG4gICAgICAudGV4dChsaW5leUxhYmVsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyVGFyZ2V0TGluZShzdmdFbGVtZW50czogYW55LCBzY2FsZXM6IGFueSwgY2hhcnRDb250ZXh0OiBhbnksIGRpbWVuc2lvbnM6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHsgc3ZnLCBzdmdZQXhpc1JpZ2h0IH0gPSBzdmdFbGVtZW50cztcclxuICAgIGNvbnN0IHsgeSB9ID0gc2NhbGVzO1xyXG4gICAgY29uc3QgeyB3aWR0aCB9ID0gZGltZW5zaW9ucztcclxuICAgIGNvbnN0IHsgbWV0YURhdGEgfSA9IGNoYXJ0Q29udGV4dDtcclxuICAgIGNvbnN0IHRhcmdldERhdGE6IFRhcmdldExpbmVEYXRhID0gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGE7XHJcblxyXG4gICAgY29uc3QgeVplcm8gPSB5KHRhcmdldERhdGEudGFyZ2V0KTtcclxuXHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnbGluZScpXHJcbiAgICAgIC5hdHRyKCd4MScsIDApXHJcbiAgICAgIC5hdHRyKCd4MicsIHdpZHRoKVxyXG4gICAgICAuYXR0cigneTEnLCB5WmVybylcclxuICAgICAgLmF0dHIoJ3kyJywgeVplcm8pXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZScsIHRhcmdldERhdGEuY29sb3IpO1xyXG5cclxuICAgIGNvbnN0IHJpZ2h0U3ZnV2lkdGggPSA2MDtcclxuICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHt5WmVybyAtIDMwfSlgKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCByaWdodFN2Z1dpZHRoKVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgNTApXHJcbiAgICAgIC5hcHBlbmQoJ3hodG1sOmRpdicpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICd0YXJnZXQtZGlzcGxheScpXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAuaHRtbCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0YVR5cGUgPSBtZXRhRGF0YS5kYXRhVHlwZSB8fCAnJztcclxuICAgICAgICBjb25zdCB0YXJnZXROYW1lID0gdGFyZ2V0RGF0YS50YXJnZXROYW1lIHx8ICd0YXJnZXQnO1xyXG4gICAgICAgIHJldHVybiBgPGRpdj4ke3RhcmdldE5hbWV9PC9kaXY+PGRpdj4ke3RhcmdldERhdGEudGFyZ2V0fSR7ZGF0YVR5cGV9PC9kaXY+YDtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckxpbmVHcmFwaChzdmc6IGFueSwgY2hhcnRDb250ZXh0OiBhbnksIHNjYWxlczogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCB7IGxpbmVEYXRhLCBtZXRhRGF0YSB9ID0gY2hhcnRDb250ZXh0O1xyXG4gICAgaWYgKCFsaW5lRGF0YSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHsgeCwgbGluZVlzY2FsZSB9ID0gc2NhbGVzO1xyXG5cclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdwYXRoJylcclxuICAgICAgLmRhdHVtKGxpbmVEYXRhKVxyXG4gICAgICAuYXR0cignZmlsbCcsICdub25lJylcclxuICAgICAgLmF0dHIoJ3N0cm9rZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKVxyXG4gICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgMS41KVxyXG4gICAgICAuYXR0cihcclxuICAgICAgICAnZCcsXHJcbiAgICAgICAgZDNcclxuICAgICAgICAgIC5saW5lKClcclxuICAgICAgICAgIC54KChkOiBhbnkpID0+IHgoZC5uYW1lKSArIHguYmFuZHdpZHRoKCkgLyAyKVxyXG4gICAgICAgICAgLnkoKGQ6IGFueSkgPT4gbGluZVlzY2FsZShkLnZhbHVlKSlcclxuICAgICAgKTtcclxuXHJcbiAgICBjb25zdCBkb3QgPSBzdmdcclxuICAgICAgLnNlbGVjdEFsbCgnbXlDaXJjbGVzJylcclxuICAgICAgLmRhdGEobGluZURhdGEpXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAub24oJ2NsaWNrJywgKGQpID0+IHRoaXMuaGFuZGxlQmFyQ2xpY2soZCwgbWV0YURhdGEpKTtcclxuXHJcbiAgICBkb3RcclxuICAgICAgLmFwcGVuZCgnY2lyY2xlJylcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcilcclxuICAgICAgLmF0dHIoJ3N0cm9rZScsICdub25lJylcclxuICAgICAgLmF0dHIoJ2N4JywgKGQ6IGFueSkgPT4geChkLm5hbWUpICsgeC5iYW5kd2lkdGgoKSAvIDIpXHJcbiAgICAgIC5hdHRyKCdjeScsIChkOiBhbnkpID0+IGxpbmVZc2NhbGUoZC52YWx1ZSkpXHJcbiAgICAgIC5zdHlsZSgnY3Vyc29yJywgJ3BvaW50ZXInKVxyXG4gICAgICAuYXR0cigncicsIDMpO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcikge1xyXG4gICAgICBkb3RcclxuICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnZG90JylcclxuICAgICAgICAuYXR0cignY29sb3InLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcilcclxuICAgICAgICAuYXR0cignc3R5bGUnLCAnZm9udC1zaXplOiAuODVlbScpXHJcbiAgICAgICAgLmF0dHIoJ3gnLCAoZDogYW55KSA9PiB4KGQubmFtZSkgKyB4LmJhbmR3aWR0aCgpIC8gMilcclxuICAgICAgICAuYXR0cigneScsIChkOiBhbnkpID0+IGxpbmVZc2NhbGUoZC52YWx1ZSkpXHJcbiAgICAgICAgLmF0dHIoJ2R5JywgJy0xZW0nKVxyXG4gICAgICAgIC50ZXh0KChkOiBhbnkpID0+IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxhYmVsRm9ybWF0dGVyKGQudmFsdWUpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUNsaWNrKGQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93biB8fCBkPy50b2dnbGVGcm9tKSB7XHJcbiAgICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KGQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlSGVhZGVyTWVudUNsaWNrKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaGVhZGVyTWVudWNsaWNrRXZlbnQuZW1pdChpZCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVERDFDbGljayhldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmlzREQxT3BlbiA9IHRydWU7XHJcbiAgICB0aGlzLmlzREQyT3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlREQyQ2xpY2soZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0REMk9wZW4gPSB0cnVlO1xyXG4gICAgdGhpcy5pc0REMU9wZW4gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdChldmVudCk7XHJcbiAgfVxyXG59IiwiPGRpdlxyXG4gICNncm91cGNvbnRhaW5lclxyXG4gIGNsYXNzPVwibGliLWNoYXJ0LXdyYXBwZXJcIlxyXG4gIFtuZ0NsYXNzXT1cInsgJ2xpYi1uby1iYWNrZ3JvdW5kJzogaXNUcmFuc3BhcmVudEJhY2tncm91bmQgfVwiXHJcbiAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jYXJkLWJnKTtcIlxyXG4gIChyZXNpemVkKT1cIm9uUmVzaXplZCgkZXZlbnQpXCJcclxuPlxyXG5cclxuPGRpdiBjbGFzcz1cImhlYWRlci1hbHRcIiAqbmdJZj1cIiFpc0hlYWRlclZpc2libGVcIj5cclxuICA8bGliLWNoYXJ0LWhlYWRlci12MlxyXG4gICAgW2NoYXJ0RGF0YV09XCJjaGFydERhdGFcIlxyXG4gICAgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgKGNsaWNrRXZlbnQpPVwiaGFuZGxlQ2xpY2soJGV2ZW50KVwiXHJcbiAgPjwvbGliLWNoYXJ0LWhlYWRlci12Mj5cclxuICA8bGliLWNoYXJ0LWhlYWRlci12M1xyXG4gICAgW2NoYXJ0RGF0YV09XCJjaGFydERhdGFcIlxyXG4gICAgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgKGNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbik9XCJoYW5kbGVDb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24oJGV2ZW50KVwiXHJcbiAgICAoem9vbUluWm9vbU91dENsaWNrKT1cImhhbmRsZVpvb21pblpvb21vdXRDbGljaygkZXZlbnQpXCJcclxuICA+PC9saWItY2hhcnQtaGVhZGVyLXYzPlxyXG48L2Rpdj5cclxuXHJcbiAgPGxpYi1jaGFydC1oZWFkZXItdjFcclxuICBbdGl0bGVdPVwiY2hhcnREYXRhLm1ldGFEYXRhLnRpdGxlXCJcclxuICBbaGFzRHJpbGxEb3duXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS5oYXNEcmlsbERvd25cIlxyXG4gIFtpc0VkaXRFbmFibGVkXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS5pc0VkaXRFbmFibGVkXCJcclxuICBbbWVudU9wdGlvbnNdPVwiY2hhcnRDb25maWd1cmF0aW9uLmhlYWRlck1lbnVPcHRpb25zXCJcclxuICBbaXNyaWFdPVwiY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uLmlzUmlhXCJcclxuICBbc2VsZWN0ZWRLcGlUb29sdG9wXT1cImNoYXJ0Q29uZmlndXJhdGlvbi5zZWxlY3RlZEtwaVRvb2x0b3BcIlxyXG4gIChtZW51T3B0aW9uQ2xpY2tFdmVudCk9XCJoYW5kbGVIZWFkZXJNZW51Q2xpY2soJGV2ZW50KVwiXHJcbiAgW2lzQWxlcnRFbmFibGVkXT1cImlzQWxlcnRFbmFibGVkXCJcclxuICAqbmdJZj1cImlzSGVhZGVyVmlzaWJsZVwiXHJcbj48L2xpYi1jaGFydC1oZWFkZXItdjE+XHJcblxyXG4gIDxkaXZcclxuICAgIFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodFwiXHJcbiAgICBpZD1cImdyb3VwY2hhcnRjb250YWluZXJcIlxyXG4gICAgI2dyb3VwY2hhcnRjb250YWluZXJcclxuICAgIGNsYXNzPVwibGliLWNoYXJ0LXN2Z1wiXHJcbiAgPjwvZGl2PlxyXG48L2Rpdj5cclxuIl19