ca-components 1.2.25 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/assets/scss/input-dropdown.scss +1528 -1579
  2. package/esm2022/lib/components/ca-chart/ca-chart.component.mjs +17 -22
  3. package/esm2022/lib/components/ca-chart/enums/e-chart-types.enum.mjs +2 -0
  4. package/esm2022/lib/components/ca-chart/enums/index.mjs +2 -2
  5. package/esm2022/lib/components/ca-chart/utils/guards/chart-type.guard.mjs +2 -2
  6. package/esm2022/lib/components/ca-filters/components/ca-location-filter/ca-location-filter.component.mjs +4 -4
  7. package/esm2022/lib/components/ca-input/ca-input.component.mjs +3 -3
  8. package/esm2022/lib/components/ca-input/config/ca-input.config.mjs +1 -1
  9. package/esm2022/lib/components/ca-input/input-test/input-test.component.mjs +6 -13
  10. package/esm2022/lib/components/ca-input/pipes/input-class.pipe.mjs +7 -1
  11. package/esm2022/lib/components/ca-input-address-dropdown/ca-input-address-dropdown.component.mjs +98 -65
  12. package/esm2022/lib/components/ca-input-datetime-picker/ca-input-datetime-picker.component.mjs +3 -3
  13. package/esm2022/lib/components/ca-input-dropdown/ca-input-dropdown.component.mjs +683 -184
  14. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-default-template/ca-input-dropdown-default-template.component.mjs +9 -26
  15. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-details-template/ca-input-dropdown-details-template.component.mjs +8 -25
  16. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-dispatch/ca-input-dropdown-dispatch.component.mjs +9 -26
  17. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-double-text-template/ca-input-dropdown-double-text-template.component.mjs +8 -25
  18. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-fuel-franchise/ca-input-dropdown-fuel-franchise.component.mjs +8 -25
  19. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-groups/ca-input-dropdown-groups.component.mjs +8 -25
  20. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-labels/ca-input-dropdown-labels.component.mjs +8 -25
  21. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-load-broker/ca-input-dropdown-load-broker.component.mjs +14 -28
  22. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-load-broker-contact/ca-input-dropdown-load-broker-contact.component.mjs +10 -31
  23. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-load-broker-shipper/ca-input-dropdown-load-broker-shipper.component.mjs +11 -30
  24. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-load-dispatcher/ca-input-dropdown-load-dispatcher.component.mjs +18 -31
  25. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-load-dispatches-ttd/ca-input-dropdown-load-dispatches-ttd.component.mjs +13 -27
  26. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-multiselect/ca-input-dropdown-multiselect.component.mjs +8 -25
  27. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-payroll-trucks/ca-input-dropdown-payroll-trucks.component.mjs +8 -25
  28. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-svg-template/ca-input-dropdown-svg-template.component.mjs +10 -31
  29. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-svgtext-dispatch-template/ca-input-dropdown-svgtext-dispatch-template.component.mjs +15 -30
  30. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-svgtext-template/ca-input-dropdown-svgtext-template.component.mjs +19 -32
  31. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-text-counter/ca-input-dropdown-text-counter.component.mjs +9 -26
  32. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-triple-text-template/ca-input-dropdown-triple-text-template.component.mjs +8 -25
  33. package/esm2022/lib/components/ca-input-dropdown/models/input-dropdown-option.model.mjs +1 -1
  34. package/esm2022/lib/components/ca-input-dropdown/pipes/index.mjs +1 -2
  35. package/esm2022/lib/components/ca-input-dropdown/pipes/input-dropdown-default-template-class.pipe.mjs +2 -4
  36. package/esm2022/lib/components/ca-input-dropdown/pipes/input-dropdown-label-class.pipe.mjs +1 -1
  37. package/esm2022/lib/components/ca-input-dropdown/pipes/input-dropdown-multiselect-class.pipe.mjs +1 -1
  38. package/esm2022/lib/components/ca-input-dropdown/pipes/input-dropdown-svgtext-template-icon.pipe.mjs +1 -1
  39. package/esm2022/lib/components/ca-map/ca-map.component.mjs +3 -3
  40. package/esm2022/lib/services/image-base64.service.mjs +23 -0
  41. package/fesm2022/ca-components.mjs +2972 -3041
  42. package/fesm2022/ca-components.mjs.map +1 -1
  43. package/lib/components/ca-chart/enums/{chart-types.enum.d.ts → e-chart-types.enum.d.ts} +1 -1
  44. package/lib/components/ca-chart/enums/index.d.ts +1 -1
  45. package/lib/components/ca-input/config/ca-input.config.d.ts +1 -3
  46. package/lib/components/ca-input/input-test/input-test.component.d.ts +3 -4
  47. package/lib/components/ca-input-address-dropdown/ca-input-address-dropdown.component.d.ts +6 -10
  48. package/lib/components/ca-input-dropdown/ca-input-dropdown.component.d.ts +16 -33
  49. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-default-template/ca-input-dropdown-default-template.component.d.ts +5 -8
  50. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-details-template/ca-input-dropdown-details-template.component.d.ts +5 -8
  51. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-dispatch/ca-input-dropdown-dispatch.component.d.ts +5 -8
  52. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-double-text-template/ca-input-dropdown-double-text-template.component.d.ts +5 -8
  53. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-fuel-franchise/ca-input-dropdown-fuel-franchise.component.d.ts +5 -8
  54. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-groups/ca-input-dropdown-groups.component.d.ts +5 -8
  55. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-labels/ca-input-dropdown-labels.component.d.ts +5 -8
  56. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-load-broker/ca-input-dropdown-load-broker.component.d.ts +5 -8
  57. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-load-broker-contact/ca-input-dropdown-load-broker-contact.component.d.ts +5 -8
  58. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-load-broker-shipper/ca-input-dropdown-load-broker-shipper.component.d.ts +5 -8
  59. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-load-dispatcher/ca-input-dropdown-load-dispatcher.component.d.ts +5 -10
  60. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-load-dispatches-ttd/ca-input-dropdown-load-dispatches-ttd.component.d.ts +5 -8
  61. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-multiselect/ca-input-dropdown-multiselect.component.d.ts +5 -8
  62. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-payroll-trucks/ca-input-dropdown-payroll-trucks.component.d.ts +5 -8
  63. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-svg-template/ca-input-dropdown-svg-template.component.d.ts +5 -10
  64. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-svgtext-dispatch-template/ca-input-dropdown-svgtext-dispatch-template.component.d.ts +8 -9
  65. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-svgtext-template/ca-input-dropdown-svgtext-template.component.d.ts +8 -9
  66. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-text-counter/ca-input-dropdown-text-counter.component.d.ts +5 -8
  67. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-triple-text-template/ca-input-dropdown-triple-text-template.component.d.ts +5 -8
  68. package/lib/components/ca-input-dropdown/models/input-dropdown-option.model.d.ts +0 -1
  69. package/lib/components/ca-input-dropdown/pipes/index.d.ts +0 -1
  70. package/lib/services/image-base64.service.d.ts +10 -0
  71. package/package.json +1 -1
  72. package/esm2022/lib/components/ca-chart/enums/chart-types.enum.mjs +0 -2
  73. package/esm2022/lib/components/ca-input-address-dropdown/enums/input-address-basic-string.enum.mjs +0 -6
  74. package/esm2022/lib/components/ca-input-address-dropdown/validators/ca-input-address-value.validations.mjs +0 -11
  75. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-load-broker/ca-input-dropdown-load-broker-item/ca-input-dropdown-load-broker-item.component.mjs +0 -41
  76. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-load-broker-contact/ca-input-dropdown-load-broker-contact-item/ca-input-dropdown-load-broker-contact-item.component.mjs +0 -38
  77. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-load-broker-shipper/ca-input-dropdown-load-broker-shipper-item/ca-input-dropdown-load-broker-shipper-item.component.mjs +0 -37
  78. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-load-dispatcher/ca-input-dropdown-load-dispatcher-item/ca-input-dropdown-load-dispatcher-item.component.mjs +0 -49
  79. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-load-dispatches-ttd/ca-input-dropdown-load-dispatches-ttd-item/ca-input-dropdown-load-dispatches-ttd-item.mjs +0 -49
  80. package/esm2022/lib/components/ca-input-dropdown/components/ca-input-dropdown-svgtext-template/ca-input-dropdown-svgtext-template-item/ca-input-dropdown-svgtext-template-item.component.mjs +0 -56
  81. package/esm2022/lib/components/ca-input-dropdown/pipes/dropdown-options.pipe.mjs +0 -73
  82. package/esm2022/lib/components/ca-input-dropdown/pipes/input-dropdown-get-icon.pipe.mjs +0 -18
  83. package/esm2022/lib/components/ca-input-dropdown/utils/svg-routes/index.mjs +0 -2
  84. package/lib/components/ca-input-address-dropdown/enums/input-address-basic-string.enum.d.ts +0 -4
  85. package/lib/components/ca-input-address-dropdown/validators/ca-input-address-value.validations.d.ts +0 -2
  86. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-load-broker/ca-input-dropdown-load-broker-item/ca-input-dropdown-load-broker-item.component.d.ts +0 -10
  87. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-load-broker-contact/ca-input-dropdown-load-broker-contact-item/ca-input-dropdown-load-broker-contact-item.component.d.ts +0 -11
  88. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-load-broker-shipper/ca-input-dropdown-load-broker-shipper-item/ca-input-dropdown-load-broker-shipper-item.component.d.ts +0 -11
  89. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-load-dispatcher/ca-input-dropdown-load-dispatcher-item/ca-input-dropdown-load-dispatcher-item.component.d.ts +0 -14
  90. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-load-dispatches-ttd/ca-input-dropdown-load-dispatches-ttd-item/ca-input-dropdown-load-dispatches-ttd-item.d.ts +0 -14
  91. package/lib/components/ca-input-dropdown/components/ca-input-dropdown-svgtext-template/ca-input-dropdown-svgtext-template-item/ca-input-dropdown-svgtext-template-item.component.d.ts +0 -15
  92. package/lib/components/ca-input-dropdown/pipes/dropdown-options.pipe.d.ts +0 -10
  93. package/lib/components/ca-input-dropdown/pipes/input-dropdown-get-icon.pipe.d.ts +0 -9
  94. package/lib/components/ca-input-dropdown/utils/svg-routes/index.d.ts +0 -1
  95. /package/src/assets/ca-components/svg/common/trailermake/{ic_trailer_de_lucio.svg → ic_trailer_de_lucio.svg.svg} +0 -0
@@ -108,7 +108,7 @@ export class CaChartComponent {
108
108
  }
109
109
  });
110
110
  }
111
- else {
111
+ else
112
112
  this.chart.data.datasets = this.chart.data.datasets.map((dataset) => {
113
113
  if (!dataset.hidden) {
114
114
  const originalColor = dataset.borderColor
@@ -124,7 +124,6 @@ export class CaChartComponent {
124
124
  else
125
125
  return dataset;
126
126
  });
127
- }
128
127
  this.chart.update();
129
128
  }
130
129
  createChart() {
@@ -135,7 +134,7 @@ export class CaChartComponent {
135
134
  if (this.chart)
136
135
  this.chart.destroy();
137
136
  this.initializeAnnotationPlugin();
138
- if (this._chartConfig.chartType === "doughnut" /* ChartTypesStringEnum.DOUGHNUT */)
137
+ if (this._chartConfig.chartType === "doughnut" /* eChartTypesString.DOUGHNUT */)
139
138
  Chart.overrides.doughnut.cutout = '88%';
140
139
  this.chart = new Chart(this.chartContext, {
141
140
  type: this._chartConfig.chartType,
@@ -164,7 +163,7 @@ export class CaChartComponent {
164
163
  fill: item?.fill,
165
164
  };
166
165
  if (this._chartConfig.chartType ===
167
- "doughnut" /* ChartTypesStringEnum.DOUGHNUT */)
166
+ "doughnut" /* eChartTypesString.DOUGHNUT */)
168
167
  return {
169
168
  ...datasetConfig,
170
169
  backgroundColor: item.backgroundColor,
@@ -219,20 +218,18 @@ export class CaChartComponent {
219
218
  layout: {
220
219
  padding: {
221
220
  top: this._chartConfig.chartType ===
222
- "doughnut" /* ChartTypesStringEnum.DOUGHNUT */
221
+ "doughnut" /* eChartTypesString.DOUGHNUT */
223
222
  ? 8
224
223
  : 0,
225
224
  bottom: this._chartConfig.chartType ===
226
- "doughnut" /* ChartTypesStringEnum.DOUGHNUT */
225
+ "doughnut" /* eChartTypesString.DOUGHNUT */
227
226
  ? 8
228
227
  : 0,
229
- left: this._chartConfig.chartType ===
230
- "bar" /* ChartTypesStringEnum.BAR */ &&
228
+ left: this._chartConfig.chartType === "bar" /* eChartTypesString.BAR */ &&
231
229
  this._chartConfig.verticalyAlignBarChartWithLineCart
232
230
  ? 6
233
231
  : 0,
234
- right: this._chartConfig.chartType ===
235
- "bar" /* ChartTypesStringEnum.BAR */ &&
232
+ right: this._chartConfig.chartType === "bar" /* eChartTypesString.BAR */ &&
236
233
  this._chartConfig.verticalyAlignBarChartWithLineCart
237
234
  ? 6
238
235
  : 0,
@@ -296,19 +293,18 @@ export class CaChartComponent {
296
293
  this.setVerticalDashedAnnotationLine(event);
297
294
  }
298
295
  this.setOriginalDoughnutArcsColor();
299
- if (this._chartConfig.chartType ===
300
- "doughnut" /* ChartTypesStringEnum.DOUGHNUT */) {
301
- this.hoveredIndex.emit(item[0]?.index || null);
296
+ if (this._chartConfig.chartType === "doughnut" /* eChartTypesString.DOUGHNUT */) {
302
297
  item[0]?.index >= 0
303
298
  ? this.focusDoughnutArc(item[0]?.index)
304
299
  : this.setOriginalDoughnutArcsColor();
300
+ this.hoveredIndex.emit(item[0]?.index || null);
305
301
  }
306
302
  this.chart.update();
307
303
  },
308
304
  };
309
305
  }
310
306
  focusDoughnutArc(index) {
311
- if (this._chartConfig.chartType !== "doughnut" /* ChartTypesStringEnum.DOUGHNUT */ ||
307
+ if (this._chartConfig.chartType !== "doughnut" /* eChartTypesString.DOUGHNUT */ ||
312
308
  index === this.chart.data.datasets[0].data.length - 1)
313
309
  return;
314
310
  const colors = this.chart?.data?.datasets[0]
@@ -322,7 +318,7 @@ export class CaChartComponent {
322
318
  this.chart.data.datasets[0].backgroundColor = updatedColors;
323
319
  }
324
320
  setOriginalDoughnutArcsColor() {
325
- if (this._chartConfig.chartType !== "doughnut" /* ChartTypesStringEnum.DOUGHNUT */)
321
+ if (this._chartConfig.chartType !== "doughnut" /* eChartTypesString.DOUGHNUT */)
326
322
  return;
327
323
  const colors = this.chart.data.datasets[0]
328
324
  .backgroundColor;
@@ -334,7 +330,7 @@ export class CaChartComponent {
334
330
  this.chart.update();
335
331
  }
336
332
  setChartDataProperties() {
337
- if (this._chartConfig.chartType === "line" /* ChartTypesStringEnum.LINE */) {
333
+ if (this._chartConfig.chartType === "line" /* eChartTypesString.LINE */) {
338
334
  this._chartConfig.chartData.datasets.forEach((dataset) => {
339
335
  dataset.order = dataset.order;
340
336
  if (ChartTypeGuard.isLineDataset(dataset)) {
@@ -458,7 +454,7 @@ export class CaChartComponent {
458
454
  },
459
455
  },
460
456
  ];
461
- if (this._chartConfig.chartType === "doughnut" /* ChartTypesStringEnum.DOUGHNUT */)
457
+ if (this._chartConfig.chartType === "doughnut" /* eChartTypesString.DOUGHNUT */)
462
458
  this.plugins = [
463
459
  ...this.plugins,
464
460
  {
@@ -504,8 +500,8 @@ export class CaChartComponent {
504
500
  }
505
501
  setMultipleYAxis(chartData) {
506
502
  chartData.datasets.forEach((dataset, index) => {
507
- if (dataset.type === "line" /* ChartTypesStringEnum.LINE */ ||
508
- dataset.type === "bar" /* ChartTypesStringEnum.BAR */) {
503
+ if (dataset.type === "line" /* eChartTypesString.LINE */ ||
504
+ dataset.type === "bar" /* eChartTypesString.BAR */) {
509
505
  const yAxisID = this._chartConfig.isMultiYAxis
510
506
  ? `y-axis-${index}`
511
507
  : dataset.yAxisID || 'y-axis-0';
@@ -547,10 +543,9 @@ export class CaChartComponent {
547
543
  removeVerticalDashedLine() {
548
544
  const annotations = this._chartConfig?.chartOptions?.plugins?.annotation?.annotations;
549
545
  const key = ChartPluginIdsStringEnum.X_DASHED;
550
- if (annotations) {
546
+ if (annotations)
551
547
  delete this._chartConfig?.chartOptions?.plugins?.annotation
552
548
  ?.annotations?.[key];
553
- }
554
549
  this.chart.update();
555
550
  }
556
551
  setVerticalDashedAnnotationLine(event, color) {
@@ -630,4 +625,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
630
625
  }], hoveredIndex: [{
631
626
  type: Output
632
627
  }] } });
633
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtY2hhcnQvY2EtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtY2hhcnQvY2EtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1QsWUFBWSxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxTQUFTO0FBQ1QsT0FBTyxFQUVILEtBQUssR0FJUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLGdCQUFnQixNQUFNLDJCQUEyQixDQUFDO0FBR3pELFFBQVE7QUFDUixPQUFPLEVBRUgscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUV4Qiw0QkFBNEIsRUFDNUIseUJBQXlCLEVBQ3pCLDZCQUE2QixFQUU3QixnQkFBZ0IsR0FDbkIsTUFBTSxTQUFTLENBQUM7QUFFakIsVUFBVTtBQUNWLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5QyxTQUFTO0FBQ1QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBa0JoRCxZQUFZO0FBQ1osT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTW5ELFFBQVE7QUFDUixPQUFPLEVB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bEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUYsaUJBQWlCO3NCQURwQixLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBZ0JPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBU0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgT3B0aW9uYWwsXG4gICAgVmlld0NoaWxkLFxuICAgIEV2ZW50RW1pdHRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQW55T2JqZWN0IH0gZnJvbSAnY2hhcnQuanMvZGlzdC90eXBlcy9iYXNpYyc7XG5pbXBvcnQgeyBBbmd1bGFyU3ZnSWNvbk1vZHVsZSB9IGZyb20gJ2FuZ3VsYXItc3ZnLWljb24nO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbi8vIENoYXJ0c1xuaW1wb3J0IHtcbiAgICBDYXRlZ29yeVNjYWxlLFxuICAgIENoYXJ0LFxuICAgIENoYXJ0RXZlbnQsXG4gICAgTGluZWFyU2NhbGUsXG4gICAgUGx1Z2luLFxufSBmcm9tICdjaGFydC5qcy9hdXRvJztcbmltcG9ydCBhbm5vdGF0aW9uUGx1Z2luIGZyb20gJ2NoYXJ0anMtcGx1Z2luLWFubm90YXRpb24nO1xuaW1wb3J0IHsgQWN0aXZlRGF0YVBvaW50LCBDaGFydFR5cGUgfSBmcm9tICdjaGFydC5qcyc7XG5cbi8vIEVudW1zXG5pbXBvcnQge1xuICAgIENoYXJ0Q29sb3JzU3RyaW5nRW51bSxcbiAgICBFQ2hhcnRFdmVudFByb3BlcnRpZXMsXG4gICAgQ2hhcnRQbHVnaW5JZHNTdHJpbmdFbnVtLFxuICAgIENoYXJ0VHlwZXNTdHJpbmdFbnVtLFxuICAgIEN1YmljSW50ZXJwb2xhdGlvblN0cmluZ0VudW0sXG4gICAgQ2hhcnRFdmVudFR5cGVzU3RyaW5nRW51bSxcbiAgICBDaGFydEZvbnRQcm9wZXJ0aWVzU3RyaW5nRW51bSxcbiAgICBFQ2hhcnRBbm5vdGF0aW9uVHlwZSxcbiAgICBFQ2hhcnRBbm5vdGF0aW9uLFxufSBmcm9tICcuL2VudW1zJztcblxuLy8gSGVscGVyc1xuaW1wb3J0IHsgQ2hhcnRIZWxwZXIgfSBmcm9tICcuL3V0aWxzL2hlbHBlcnMnO1xuXG4vLyBHdWFyZHNcbmltcG9ydCB7IENoYXJ0VHlwZUd1YXJkIH0gZnJvbSAnLi91dGlscy9ndWFyZHMnO1xuXG4vL01vZGVsc1xuaW1wb3J0IHtcbiAgICBJQ2hhcnREYXRhLFxuICAgIElMaW5lRGF0YXNldCxcbiAgICBJQ2hhcnRDb25maWd1cmF0aW9uLFxuICAgIElCYXNlRGF0YXNldCxcbiAgICBJQ2hhcnRBbm5vdGF0aW9uLFxuICAgIElDaGFydERhdGFzZXRIb3ZlcixcbiAgICBJQ2hhcnRDZW50ZXJMYWJlbCxcbiAgICBJQ2hhcnRMZWdlbmRDb25maWcsXG59IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IEFjdGl2ZUVsZW1lbnQgfSBmcm9tICdjaGFydC5qcy9kaXN0L3BsdWdpbnMvcGx1Z2luLnRvb2x0aXAnO1xuXG4vL1NlcnZpY2VzXG5pbXBvcnQgeyBDaGFydE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY2EtY2hhcnQtbWFuYWdlci9zZXJ2aWNlcyc7XG5cbi8vIENvbnN0YW50c1xuaW1wb3J0IHsgQ2hhcnRDb25zdGFudHMgfSBmcm9tICcuL3V0aWxzL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIF9EZWVwUGFydGlhbEFycmF5LFxuICAgIF9EZWVwUGFydGlhbE9iamVjdCxcbn0gZnJvbSAnY2hhcnQuanMvZGlzdC90eXBlcy91dGlscyc7XG5cbi8vIFBpcGVzXG5pbXBvcnQgeyBUaG91c2FuZFNlcGFyYXRvclBpcGUsIFVuaXRQb3NpdGlvblBpcGUgfSBmcm9tICcuLi8uLi9waXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWNhLWNoYXJ0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2EtY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NhLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgQW5ndWxhclN2Z0ljb25Nb2R1bGUsXG4gICAgICAgIFVuaXRQb3NpdGlvblBpcGUsXG4gICAgICAgIFRob3VzYW5kU2VwYXJhdG9yUGlwZSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDYUNoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgQFZpZXdDaGlsZCgnY2hhcnRDYW52YXMnLCB7IHN0YXRpYzogZmFsc2UgfSkgY2hhcnRDYW52YXMhOiBFbGVtZW50UmVmO1xuXG4gICAgQElucHV0KCkgbGVnZW5kRGF0YSE6IElDaGFydExlZ2VuZENvbmZpZztcbiAgICBASW5wdXQoKSBjaGFydElkITogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNoYXJ0RGF0YXNldEhvdmVyKHZhbHVlOiBJQ2hhcnREYXRhc2V0SG92ZXIgfCBudWxsKSB7XG4gICAgICAgIGlmICh2YWx1ZSkgdGhpcy51cGRhdGVEYXRhc2V0QmFja2dyb3VuZE9uSG92ZXIodmFsdWUpO1xuICAgIH1cbiAgICBASW5wdXQoKSBzZXQgY2hhcnRDb25maWcodmFsdWU6IElDaGFydENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgdGhpcy5fY2hhcnRDb25maWcgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pc0NoYXJ0RGF0YUF2YWlsYWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuaXNDaGFydERhdGFBdmFpbGFibGUgPVxuICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWc/LmNoYXJ0RGF0YT8uZGF0YXNldHM/LnNvbWUoKGl0ZW06IElCYXNlRGF0YXNldCkgPT5cbiAgICAgICAgICAgICAgICBpdGVtLmRhdGEuc29tZSgodmFsdWU6IG51bWJlciB8IG51bWJlcltdKSA9PlxuICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZVswXSAhPT0gMCB8fCB2YWx1ZVsxXSAhPT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZSAhPT0gMFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkgPz8gZmFsc2U7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzQ2hhcnREYXRhQXZhaWxhYmxlKSB0aGlzLnVwZGF0ZUNoYXJ0KCk7XG4gICAgfVxuICAgIEBJbnB1dCgpIHNldCBzZWxlY3RlZEluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoYXJ0IHx8ICF0aGlzLmlzQ2hhcnREYXRhQXZhaWxhYmxlKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB0aGlzLmZvY3VzRG91Z2hudXRBcmModmFsdWUpO1xuICAgICAgICBlbHNlIHRoaXMuc2V0T3JpZ2luYWxEb3VnaG51dEFyY3NDb2xvcigpO1xuXG4gICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIGhvdmVyZWRJbmRleDogRXZlbnRFbWl0dGVyPG51bWJlciB8IG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBwcml2YXRlIGNoYXJ0ITogQ2hhcnQ7XG4gICAgcHJpdmF0ZSBjaGFydENvbnRleHQhOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gICAgcHJpdmF0ZSBwbHVnaW5zPzogUGx1Z2luPENoYXJ0VHlwZSwgQW55T2JqZWN0PltdO1xuICAgIHByaXZhdGUgYXJlQW5pbWF0aW9uc0NvbXBsZWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIF9ob3ZlcmVkSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgbGFzdEhvdmVyZWRJbmRleDogbnVtYmVyID0gLTE7XG5cbiAgICBwdWJsaWMgX2NoYXJ0Q29uZmlnITogSUNoYXJ0Q29uZmlndXJhdGlvbjtcbiAgICBwdWJsaWMgaXNDaGFydERhdGFBdmFpbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjaGFydE1hbmFnZXJTZXJ2aWNlPzogQ2hhcnRNYW5hZ2VyU2VydmljZVxuICAgICkge31cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDaGFydERhdGFBdmFpbGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUFubm90YXRpb25QbHVnaW4oKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ2hhcnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVDaGFydE1hbmFnZXJTZXJ2aWNlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplQ2hhcnRNYW5hZ2VyU2VydmljZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoYXJ0TWFuYWdlclNlcnZpY2UpIHJldHVybjtcblxuICAgICAgICB0aGlzLmNoYXJ0TWFuYWdlclNlcnZpY2UuaG92ZXJTdGF0ZSRcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgaW5kZXgsIGNoYXJ0SWQgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjaGFydElkICE9PSB0aGlzLmNoYXJ0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faG92ZXJlZEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoYXJ0KSB0aGlzLmNoYXJ0LmRyYXcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVBbm5vdGF0aW9uUGx1Z2luKCk6IHZvaWQge1xuICAgICAgICBDaGFydC5yZWdpc3Rlcihhbm5vdGF0aW9uUGx1Z2luKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlRGF0YXNldEJhY2tncm91bmRPbkhvdmVyKFxuICAgICAgICBjaGFydERhdGFzZXRIb3ZlcjogSUNoYXJ0RGF0YXNldEhvdmVyXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jaGFydCB8fCAhdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzKSByZXR1cm47XG5cbiAgICAgICAgaWYgKGNoYXJ0RGF0YXNldEhvdmVyLmlzSG92ZXJkKSB7XG4gICAgICAgICAgICBjb25zdCBncmFkaWVudCA9IENoYXJ0SGVscGVyLmNyZWF0ZUdyYWRpZW50KFxuICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDb250ZXh0LFxuICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDYW52YXMsXG4gICAgICAgICAgICAgICAgY2hhcnREYXRhc2V0SG92ZXIuY29sb3IsXG4gICAgICAgICAgICAgICAgY2hhcnREYXRhc2V0SG92ZXIuY29sb3IsXG4gICAgICAgICAgICAgICAgMC42LFxuICAgICAgICAgICAgICAgIDAuMSxcbiAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzID0gdGhpcy5jaGFydD8uZGF0YT8uZGF0YXNldHM/Lm1hcChcbiAgICAgICAgICAgICAgICAoZGF0YXNldCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YXNldC5oaWRkZW4pIHJldHVybiBkYXRhc2V0O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQ/LmxhYmVsPy50b1VwcGVyQ2FzZSgpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnREYXRhc2V0SG92ZXI/LmxhYmVsPy50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaG92ZXJkRGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBncmFkaWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogY2hhcnREYXRhc2V0SG92ZXIuY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhvdmVyZERhdGFTZXQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib3JkZXJDb2xvcldpdGhPcGFjaXR5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFydEhlbHBlci5jaGFuZ2VPcGFjaXR5T2ZSZ2JPclJnYmEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuYm9yZGVyQ29sb3IgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBib3JkZXJDb2xvcldpdGhPcGFjaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMgPSB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMubWFwKFxuICAgICAgICAgICAgICAgIChkYXRhc2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YXNldC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsQ29sb3IgPSBkYXRhc2V0LmJvcmRlckNvbG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDaGFydEhlbHBlci5jaGFuZ2VPcGFjaXR5T2ZSZ2JPclJnYmEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5ib3JkZXJDb2xvciBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQ2hhcnRDb25zdGFudHMuU1RSSU5HX0VNUFRZO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRhdGFzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IG9yaWdpbmFsQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBDaGFydENvbnN0YW50cy5TVFJJTkdfRU1QVFksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgcmV0dXJuIGRhdGFzZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVDaGFydCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGFydENvbnRleHQgPSB0aGlzLmNoYXJ0Q2FudmFzPy5uYXRpdmVFbGVtZW50Py5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgICAgIHRoaXMuc2V0Q2hhcnRPcHRpb25zUHJvcGVydGllcygpO1xuICAgICAgICB0aGlzLnNldENoYXJ0RGF0YVByb3BlcnRpZXMoKTtcbiAgICAgICAgdGhpcy5zZXRDaGFydFBsdWdpbnNQcm9wZXJ0aWVzKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hhcnQpIHRoaXMuY2hhcnQuZGVzdHJveSgpO1xuXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUFubm90YXRpb25QbHVnaW4oKTtcbiAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gQ2hhcnRUeXBlc1N0cmluZ0VudW0uRE9VR0hOVVQpXG4gICAgICAgICAgICBDaGFydC5vdmVycmlkZXMuZG91Z2hudXQuY3V0b3V0ID0gJzg4JSc7XG5cbiAgICAgICAgdGhpcy5jaGFydCA9IG5ldyBDaGFydCh0aGlzLmNoYXJ0Q29udGV4dCwge1xuICAgICAgICAgICAgdHlwZTogdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5fY2hhcnRDb25maWcuY2hhcnREYXRhLFxuICAgICAgICAgICAgb3B0aW9uczogdGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLFxuICAgICAgICAgICAgcGx1Z2luczogdGhpcy5wbHVnaW5zLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXRoaXMuX2NoYXJ0Q29uZmlnLmlzRGFzaGJvYXJkQ2hhcnQpXG4gICAgICAgICAgICB0aGlzLmNoYXJ0LmNvbmZpZy5kYXRhLmRhdGFzZXRzID0gW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnPy5jaGFydERhdGE/LmRhdGFzZXRzPy5tYXAoXG4gICAgICAgICAgICAgICAgICAgIChpdGVtOiBJQmFzZURhdGFzZXQsIGluZHg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9pbnRDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRCYWNrZ3JvdW5kQ29sb3I6IENoYXJ0Q29sb3JzU3RyaW5nRW51bS5XSElURSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludEJvcmRlcldpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50UmFkaXVzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDaGFydEFubm90YXRpb25zKGl0ZW0sIGluZHgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB5U2NhbGUgPSB0aGlzLmNoYXJ0LnNjYWxlc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQ2hhcnRFdmVudFByb3BlcnRpZXMuWV9BWElTXzBcbiAgICAgICAgICAgICAgICAgICAgICAgIF0gYXMgQ2F0ZWdvcnlTY2FsZSB8IExpbmVhclNjYWxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yICYmIGl0ZW0/LmNvbG9yMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENoYXJ0SGVscGVyLmNyZWF0ZUdyYWRpZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydENhbnZhcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy5jb2xvcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YXNldENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50Qm9yZGVyQ29sb3I6IGl0ZW0uY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucG9pbnRDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGl0ZW0/LmZpbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0VHlwZXNTdHJpbmdFbnVtLkRPVUdITlVUXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZGF0YXNldENvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBpdGVtLmJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0uc2hpZnRWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhc2V0Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5jb2xvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY29sb3IyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5jb2xvciAhPT0gaXRlbT8uY29sb3IyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDaGFydEhlbHBlci5jcmVhdGVHcmFkaWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q2FudmFzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbT8uY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hpZnRWYWx1ZVB4OiBudW1iZXIgPSB5U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNoaWZ0VmFsdWUgfHwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoaWZ0VmFsdWVBZGp1c3RlZDogbnVtYmVyID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdFZhbHVlUHggLyB5U2NhbGUubWF4SGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xvcjE6IHN0cmluZyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jb2xvciB8fCBDaGFydENvbnN0YW50cy5TVFJJTkdfRU1QVFk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xvcjI6IHN0cmluZyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jb2xvcjIgfHwgQ2hhcnRDb25zdGFudHMuU1RSSU5HX0VNUFRZO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib3JkZXJDb2xvcjogQ2FudmFzR3JhZGllbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0SGVscGVyLmNyZWF0ZUdyYWRpZW50V2l0aFNoaWZ0VmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5U2NhbGUubWF4SGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRWYWx1ZUFkanVzdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnBvaW50Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50Qm9yZGVyQ29sb3I6IGJvcmRlckNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRIZWxwZXIuY3JlYXRlR3JhZGllbnRXaXRoU2hpZnRWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeVNjYWxlLm1heEhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0VmFsdWVBZGp1c3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVDaGFydCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhcnQpIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgICAgIHRoaXMuY3JlYXRlQ2hhcnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENoYXJ0T3B0aW9uc1Byb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0RGF0YS5sYWJlbHM7XG5cbiAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zID0ge1xuICAgICAgICAgICAgcmVzcG9uc2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1haW50YWluQXNwZWN0UmF0aW86IGZhbHNlLFxuICAgICAgICAgICAgY2xpcDogZmFsc2UsXG4gICAgICAgICAgICBhbmltYXRpb246IHtcbiAgICAgICAgICAgICAgICBvbkNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXJlQW5pbWF0aW9uc0NvbXBsZWF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0LmRyYXcoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3M6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcmVBbmltYXRpb25zQ29tcGxlYXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0LmRyYXcoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgdG9wOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRUeXBlc1N0cmluZ0VudW0uRE9VR0hOVVRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0VHlwZXNTdHJpbmdFbnVtLkRPVUdITlVUXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyA4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0VHlwZXNTdHJpbmdFbnVtLkJBUiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcudmVydGljYWx5QWxpZ25CYXJDaGFydFdpdGhMaW5lQ2FydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gNlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRUeXBlc1N0cmluZ0VudW0uQkFSICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy52ZXJ0aWNhbHlBbGlnbkJhckNoYXJ0V2l0aExpbmVDYXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyA2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGx1Z2luczoge1xuICAgICAgICAgICAgICAgIGxlZ2VuZDoge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzY2FsZXM6IHtcbiAgICAgICAgICAgICAgICB4OiB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2JvdHRvbScsXG4gICAgICAgICAgICAgICAgICAgIGdyaWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0aWNrczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLlhfQVhJU19MQUJFTF9DT0xPUixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiAxMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYW1pbHk6IENoYXJ0Rm9udFByb3BlcnRpZXNTdHJpbmdFbnVtLkZPTlRfRkFNSUxZX01PTlRTRVJSQVQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiBDaGFydEZvbnRQcm9wZXJ0aWVzU3RyaW5nRW51bS5GT05UX1dFSUdIVF9CT0xERVIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1NraXA6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvU2tpcFBhZGRpbmc6IDEyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4Um90YXRpb246IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5Sb3RhdGlvbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vTGFiZWwgd3JpdHRlbiBpbiAyIGxpbmVzLCB3aWxsIGJlIGFkanVzdGVkIHdpdGggbmV3IGRlc2lnblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBudW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICk6IHN0cmluZyB8IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IGxhYmVsc1tpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlMaW5lTGFiZWwgPSBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGxhYmVsLnNwbGl0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbXVsdGlMaW5lTGFiZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiB0aGlzLl9jaGFydENvbmZpZy5zaG93WEF4aXNMYWJlbHMsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luQXRaZXJvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB5OiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBiZWdpbkF0WmVybzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgICAgICBtYXg6IENoYXJ0SGVscGVyLmNhbGN1bGF0ZURhdGFzZXRNYXhWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0RGF0YS5kYXRhc2V0cyBhcyBhbnkgLy9sZWF2ZSB0aGlzIGFzIGFueVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25Ib3ZlcjogKGV2ZW50OiBDaGFydEV2ZW50LCBpdGVtOiBBY3RpdmVFbGVtZW50W10pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhcnRDb25maWcuaGFzVmVydGljYWxEYXNoZWRBbm5vdGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlVmVydGljYWxEYXNoZWRMaW5lKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmVydGljYWxEYXNoZWRBbm5vdGF0aW9uTGluZShldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRPcmlnaW5hbERvdWdobnV0QXJjc0NvbG9yKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgQ2hhcnRUeXBlc1N0cmluZ0VudW0uRE9VR0hOVVRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXguZW1pdChpdGVtWzBdPy5pbmRleCB8fCBudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICBpdGVtWzBdPy5pbmRleCA+PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZm9jdXNEb3VnaG51dEFyYyhpdGVtWzBdPy5pbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5zZXRPcmlnaW5hbERvdWdobnV0QXJjc0NvbG9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNEb3VnaG51dEFyYyhpbmRleDogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgIT09IENoYXJ0VHlwZXNTdHJpbmdFbnVtLkRPVUdITlVUIHx8XG4gICAgICAgICAgICBpbmRleCA9PT0gdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzWzBdLmRhdGEubGVuZ3RoIC0gMVxuICAgICAgICApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGNvbG9yczogc3RyaW5nW10gPSB0aGlzLmNoYXJ0Py5kYXRhPy5kYXRhc2V0c1swXVxuICAgICAgICAgICAgPy5iYWNrZ3JvdW5kQ29sb3IgYXMgc3RyaW5nW107XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRDb2xvcnM6IHN0cmluZ1tdID0gY29sb3JzLm1hcChcbiAgICAgICAgICAgIChjb2xvcjogc3RyaW5nLCBpbmR4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5keCA9PT0gaW5kZXgpIHJldHVybiBjb2xvcjtcbiAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZWRWYWx1ZSA9IENoYXJ0SGVscGVyLmNvbnZlcnRSZ2JUb1JnYmEoY29sb3IsIDAuMik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1swXS5iYWNrZ3JvdW5kQ29sb3IgPSB1cGRhdGVkQ29sb3JzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0T3JpZ2luYWxEb3VnaG51dEFyY3NDb2xvcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSAhPT0gQ2hhcnRUeXBlc1N0cmluZ0VudW0uRE9VR0hOVVQpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY29sb3JzOiBzdHJpbmdbXSA9IHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1swXVxuICAgICAgICAgICAgLmJhY2tncm91bmRDb2xvciBhcyBzdHJpbmdbXTtcblxuICAgICAgICB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbMF0uYmFja2dyb3VuZENvbG9yID0gW1xuICAgICAgICAgICAgLi4uY29sb3JzLm1hcCgoY29sb3I6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBDaGFydEhlbHBlci5yZ2JUb1JnYmEoY29sb3IsIDEpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG5cbiAgICAgICAgdGhpcy5jaGFydC51cGRhdGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBzZXRDaGFydERhdGFQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSBDaGFydFR5cGVzU3RyaW5nRW51bS5MSU5FKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydERhdGEuZGF0YXNldHMuZm9yRWFjaCgoZGF0YXNldCkgPT4ge1xuICAgICAgICAgICAgICAgIGRhdGFzZXQub3JkZXIgPSBkYXRhc2V0Lm9yZGVyO1xuICAgICAgICAgICAgICAgIGlmIChDaGFydFR5cGVHdWFyZC5pc0xpbmVEYXRhc2V0KGRhdGFzZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQudGVuc2lvbiA9IGRhdGFzZXQudGVuc2lvbiA/PyAwLjU7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuY3ViaWNJbnRlcnBvbGF0aW9uTW9kZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LmN1YmljSW50ZXJwb2xhdGlvbk1vZGUgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgIEN1YmljSW50ZXJwb2xhdGlvblN0cmluZ0VudW0uTU9OT1RPTkU7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQucG9pbnRCb3JkZXJDb2xvciA9XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnBvaW50Qm9yZGVyQ29sb3IgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0Q29sb3JzU3RyaW5nRW51bS5UUkFOU1BBUkVOVDtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5wb2ludEJhY2tncm91bmRDb2xvciA9XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnBvaW50QmFja2dyb3VuZENvbG9yID8/XG4gICAgICAgICAgICAgICAgICAgICAgICBDaGFydENvbG9yc1N0cmluZ0VudW0uVFJBTlNQQVJFTlQ7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQucG9pbnRIb3ZlckJhY2tncm91bmRDb2xvciA9XG4gICAgICAgICAgICAgICAgICAgICAgICBDaGFydENvbG9yc1N0cmluZ0VudW0uV0hJVEU7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQucG9pbnRIb3ZlckJvcmRlckNvbG9yID0gZGF0YXNldC5ib3JkZXJDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5wb2ludEJvcmRlcldpZHRoID0gZGF0YXNldC5wb2ludEJvcmRlcldpZHRoID8/IDM7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQucG9pbnRIb3ZlclJhZGl1cyA9IDQ7XG4gICAgICAgICAgICAgICAgICAgIC8vZGF0YXNldC5wb2ludEhvdmVyUmFkaXVzID0gODtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5wb2ludEhvdmVyQm9yZGVyV2lkdGggPSAzO1xuXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuc3BhbkdhcHMgPSBkYXRhc2V0LnNwYW5HYXBzID8/IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnNob3dMaW5lID0gZGF0YXNldC5zaG93TGluZSA/PyB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5zZXRNdWx0aXBsZVlBeGlzKHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0RGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENoYXJ0UGx1Z2luc1Byb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogQ2hhcnRQbHVnaW5JZHNTdHJpbmdFbnVtLkhJR0hMSUdIVF9TRUdNRU5UX09OX0hPVkVSLFxuICAgICAgICAgICAgICAgIGFmdGVyRXZlbnQ6IChjaGFydCwgZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmF0aXZlRXZlbnQgPSBldmVudC5ldmVudC5uYXRpdmUgYXMgTW91c2VFdmVudDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5ldmVudC50eXBlID09PSBDaGFydEV2ZW50VHlwZXNTdHJpbmdFbnVtLk1PVVNFX09VVFxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kaW5nUmVjdCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydC5jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc01vdXNlT3V0c2lkZUNoYXJ0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudC5jbGllbnRYIDwgYm91bmRpbmdSZWN0LmxlZnQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudC5jbGllbnRYID4gYm91bmRpbmdSZWN0LnJpZ2h0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQuY2xpZW50WSA8IGJvdW5kaW5nUmVjdC50b3AgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudC5jbGllbnRZID4gYm91bmRpbmdSZWN0LmJvdHRvbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTW91c2VPdXRzaWRlQ2hhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3ZlcmVkSW5kZXggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRNYW5hZ2VyU2VydmljZT8uc2V0SG92ZXJTdGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydElkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVZlcnRpY2FsRGFzaGVkTGluZUFuZEZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydC5kcmF3KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2NoYXJ0Q29uZmlnLnNob3dUb29sdGlwQmFja2dyb3VuZCkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kaW5nUmVjdCA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0LmNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW91c2VIb3Jpem9udGFsQ29vcmRpbmF0ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudC5jbGllbnRYIC0gYm91bmRpbmdSZWN0LmxlZnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBsZWZ0LCByaWdodCB9ID0gdGhpcy5jaGFydC5jaGFydEFyZWE7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VIb3Jpem9udGFsQ29vcmRpbmF0ZSA8IGxlZnQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlSG9yaXpvbnRhbENvb3JkaW5hdGUgPiByaWdodFxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hvdmVyZWRJbmRleCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0TWFuYWdlclNlcnZpY2U/LnNldEhvdmVyU3RhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0SWRcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0LmRyYXcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhTY2FsZSA9IHRoaXMuY2hhcnQuc2NhbGVzW1xuICAgICAgICAgICAgICAgICAgICAgICAgRUNoYXJ0RXZlbnRQcm9wZXJ0aWVzLlhcbiAgICAgICAgICAgICAgICAgICAgXSBhcyBDYXRlZ29yeVNjYWxlIHwgTGluZWFyU2NhbGU7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGlja1Bvc2l0aW9ucyA9IHhTY2FsZS50aWNrcy5tYXAoKHRpY2spID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB4U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZSh0aWNrLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlZ21lbnRCb3VuZGFyaWVzID0gdGlja1Bvc2l0aW9ucy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAodGlja1BvcywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsZWZ0Qm91bmRhcnkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBsZWZ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICh0aWNrUG9zICsgdGlja1Bvc2l0aW9uc1tpbmRleCAtIDFdKSAvIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmlnaHRCb3VuZGFyeSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID09PSB0aWNrUG9zaXRpb25zLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcmlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHRpY2tQb3MgKyB0aWNrUG9zaXRpb25zW2luZGV4ICsgMV0pIC8gMjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGxlZnRCb3VuZGFyeSwgcmlnaHRCb3VuZGFyeSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0hvdmVyZWRJbmRleCA9IHNlZ21lbnRCb3VuZGFyaWVzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAgIChib3VuZGFyeSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUhvcml6b250YWxDb29yZGluYXRlID49XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5LmxlZnRCb3VuZGFyeSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlSG9yaXpvbnRhbENvb3JkaW5hdGUgPCBib3VuZGFyeS5yaWdodEJvdW5kYXJ5XG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0hvdmVyZWRJbmRleCAhPT0gdGhpcy5faG92ZXJlZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3ZlcmVkSW5kZXggPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0hvdmVyZWRJbmRleCA9PT0gLTEgPyBudWxsIDogbmV3SG92ZXJlZEluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydE1hbmFnZXJTZXJ2aWNlPy5zZXRIb3ZlclN0YXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hvdmVyZWRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudEJvdW5kYXJpZXNbdGhpcy5faG92ZXJlZEluZGV4IGFzIG51bWJlcl1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0LmRyYXcoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBiZWZvcmVEcmF3OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9ob3ZlcmVkSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFydEFyZWEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVzOiB7IHg6IHhTY2FsZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSA9IHRoaXMuY2hhcnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0SGVscGVyLmhpZ2hsaWdodFNlZ21lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydENvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeFNjYWxlIGFzIENhdGVnb3J5U2NhbGUgfCBMaW5lYXJTY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFydEFyZWEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hvdmVyZWRJbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlRGF0YSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWc/LmNoYXJ0RGF0YT8uZGF0YXNldHM/Lm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXRJbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHRoaXMuX2hvdmVyZWRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0LnNldEFjdGl2ZUVsZW1lbnRzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZURhdGEgYXMgQWN0aXZlRGF0YVBvaW50W11cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogQ2hhcnRQbHVnaW5JZHNTdHJpbmdFbnVtLkJPUkRFUl9CT1RUT01fTElORV9DSEFSVCxcbiAgICAgICAgICAgICAgICBiZWZvcmVEcmF3OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFydENvbmZpZz8uc2hvd0JvdHRvbUxpbmVPbkxpbmVDaGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0QXJlYSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZXM6IHsgeDogeFNjYWxlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9ID0gdGhpcy5jaGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhLmRhdGFzZXRzWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IGRhdGFzZXQuZGF0YS5sZW5ndGggLSAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFZhbHVlID0gZGF0YXNldC5kYXRhW2ZpcnN0SW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdFZhbHVlID0gZGF0YXNldC5kYXRhW2xhc3RJbmRleF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeFN0YXJ0ID0geFNjYWxlLmdldFBpeGVsRm9yVmFsdWUoZmlyc3RJbmRleCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4RW5kID0geFNjYWxlLmdldFBpeGVsRm9yVmFsdWUobGFzdEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB5Qm90dG9tID0gY2hhcnRBcmVhLmJvdHRvbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLkJPUkRFUl9CT1RUT01fTElORV9DSEFSVF9DT0xPUjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRoID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lm1vdmVUbyh4U3RhcnQsIHlCb3R0b20pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oeEVuZCwgeUJvdHRvbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAodGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSBDaGFydFR5cGVzU3RyaW5nRW51bS5ET1VHSE5VVClcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucyA9IFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnBsdWdpbnMsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZDogJ2RvdWdobnV0LWxhYmVsJyxcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlRGF0YXNldERyYXc6IChjaGFydDogQ2hhcnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNlbnRlckxhYmVscz8ubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYWJlbDogSUNoYXJ0Q2VudGVyTGFiZWwsIGluZHg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFydEhlbHBlci5kcmF3RG91Z2hudXRMZWdlbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmR4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFRvcDogbGFiZWwucG9zaXRpb24/LnRvcCB8fCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwuZm9udFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbC5jb2xvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVDaGFydEFubm90YXRpb25zKGl0ZW06IElCYXNlRGF0YXNldCwgaW5keDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fY2hhcnRDb25maWcuYW5ub3RhdGlvbnM/Lmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmFubm90YXRpb25zPy5mb3JFYWNoKFxuICAgICAgICAgICAgKGFubm90YXRpb246IElDaGFydEFubm90YXRpb24sIGtleTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLnBsdWdpbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucy5wbHVnaW5zLFxuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnM/LnBsdWdpbnM/LmFubm90YXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucz8ucGx1Z2luc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LmFubm90YXRpb24/LmFubm90YXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtgJHtpdGVtLmxhYmVsfS0ke2luZHh9LSR7a2V5fWBdOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbi5pZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGFubm90YXRpb24tJHtpbmR4fS0ke2tleX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBhbm5vdGF0aW9uLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlSUQ6IGFubm90YXRpb24uYXhpcyB8fCBpdGVtLnlBeGlzSUQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhbm5vdGF0aW9uLnZhbHVlIHx8IGl0ZW0uc2hpZnRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uLmNvbG9yIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFydENvbG9yc1N0cmluZ0VudW0uQk9SREVSX0JPVFRPTV9MSU5FX0NIQVJUX0NPTE9SLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogYW5ub3RhdGlvbi5ib3JkZXJXaWR0aCB8fCAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJEYXNoOiBhbm5vdGF0aW9uLmJvcmRlckRhc2ggfHwgWzAsIDBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRNdWx0aXBsZVlBeGlzKGNoYXJ0RGF0YTogSUNoYXJ0RGF0YTxJTGluZURhdGFzZXQ+KTogdm9pZCB7XG4gICAgICAgIGNoYXJ0RGF0YS5kYXRhc2V0cy5mb3JFYWNoKChkYXRhc2V0LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGRhdGFzZXQudHlwZSA9PT0gQ2hhcnRUeXBlc1N0cmluZ0VudW0uTElORSB8fFxuICAgICAgICAgICAgICAgIGRhdGFzZXQudHlwZSA9PT0gQ2hhcnRUeXBlc1N0cmluZ0VudW0uQkFSXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCB5QXhpc0lEID0gdGhpcy5fY2hhcnRDb25maWcuaXNNdWx0aVlBeGlzXG4gICAgICAgICAgICAgICAgICAgID8gYHktYXhpcy0ke2luZGV4fWBcbiAgICAgICAgICAgICAgICAgICAgOiBkYXRhc2V0LnlBeGlzSUQgfHwgJ3ktYXhpcy0wJztcblxuICAgICAgICAgICAgICAgIC8vIERldGVjdCBpZiB0aGUgZGF0YXNldCBpcyBhbGwgMFxuICAgICAgICAgICAgICAgIGNvbnN0IGlzQWxsWmVyb0RhdGFzZXQgPSAoZGF0YXNldC5kYXRhIGFzIG51bWJlcltdKS5ldmVyeShcbiAgICAgICAgICAgICAgICAgICAgKHZhbDogbnVtYmVyKSA9PiB2YWwgPT09IDBcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgbGV0IG1pblZhbHVlID0gQ2hhcnRIZWxwZXIuY2FsY3VsYXRlTWluVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuZGF0YSBhcyBudW1iZXJbXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbGV0IG1heFZhbHVlID0gQ2hhcnRIZWxwZXIuY2FsY3VsYXRlTWF4VmFsdWUoXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuZGF0YSBhcyBudW1iZXJbXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFkZGluZyA9IG1heFZhbHVlICogMC4wMztcblxuICAgICAgICAgICAgICAgIC8vIEFkanVzdCBzY2FsaW5nIGZvciBhbGwgMCBkYXRhc2V0c1xuICAgICAgICAgICAgICAgIGlmIChpc0FsbFplcm9EYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1pblZhbHVlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWUgPSAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG1pblZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFZhbHVlID09PSBtaW5WYWx1ZSA/IG1pblZhbHVlIC0gMC4xIDogbWluVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIG1heFZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFZhbHVlID09PSBtaW5WYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbWF4VmFsdWUgKyAwLjFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1heFZhbHVlICsgcGFkZGluZztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnMuc2NhbGVzID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnMuc2NhbGVzLFxuICAgICAgICAgICAgICAgICAgICBbeUF4aXNJRF06IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5BdFplcm86IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IG1pblZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiBtYXhWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrZWQ6IHRoaXMuX2NoYXJ0Q29uZmlnLmlzU3RhY2tlZCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY2hhcnREYXRhLmRhdGFzZXRzW2luZGV4XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZGF0YXNldCxcbiAgICAgICAgICAgICAgICAgICAgeUF4aXNJRCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZVZlcnRpY2FsRGFzaGVkTGluZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYW5ub3RhdGlvbnMgPVxuICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWc/LmNoYXJ0T3B0aW9ucz8ucGx1Z2lucz8uYW5ub3RhdGlvbj8uYW5ub3RhdGlvbnM7XG5cbiAgICAgICAgY29uc3Qga2V5OiBzdHJpbmcgPSBDaGFydFBsdWdpbklkc1N0cmluZ0VudW0uWF9EQVNIRUQ7XG5cbiAgICAgICAgaWYgKGFubm90YXRpb25zKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fY2hhcnRDb25maWc/LmNoYXJ0T3B0aW9ucz8ucGx1Z2lucz8uYW5ub3RhdGlvblxuICAgICAgICAgICAgICAgID8uYW5ub3RhdGlvbnM/LltrZXkgYXMga2V5b2YgdHlwZW9mIGFubm90YXRpb25zXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRWZXJ0aWNhbERhc2hlZEFubm90YXRpb25MaW5lKFxuICAgICAgICBldmVudDogQ2hhcnRFdmVudCxcbiAgICAgICAgY29sb3I/OiBzdHJpbmdcbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBsZWZ0LCByaWdodCB9ID0gdGhpcy5jaGFydC5jaGFydEFyZWE7XG5cbiAgICAgICAgY29uc3QgeFNjYWxlID0gdGhpcy5jaGFydC5zY2FsZXNbRUNoYXJ0RXZlbnRQcm9wZXJ0aWVzLlhdIGFzXG4gICAgICAgICAgICB8IENhdGVnb3J5U2NhbGVcbiAgICAgICAgICAgIHwgTGluZWFyU2NhbGU7XG5cbiAgICAgICAgY29uc3QgdGlja1Bvc2l0aW9ucyA9IHRoaXMuX2NoYXJ0Q29uZmlnPy5jaGFydERhdGE/LmxhYmVscz8ubWFwKFxuICAgICAgICAgICAgKGxhYmVsOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geFNjYWxlLmdldFBpeGVsRm9yVmFsdWUoaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzZWdtZW50Qm91bmRhcmllcyA9IHRpY2tQb3NpdGlvbnMubWFwKCh0aWNrUG9zLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGVmdEJvdW5kYXJ5ID1cbiAgICAgICAgICAgICAgICBpbmRleCA9PT0gMCA/IGxlZnQgOiAodGlja1BvcyArIHRpY2tQb3NpdGlvbnNbaW5kZXggLSAxXSkgLyAyO1xuICAgICAgICAgICAgY29uc3QgcmlnaHRCb3VuZGFyeSA9XG4gICAgICAgICAgICAgICAgaW5kZXggPT09IHRpY2tQb3NpdGlvbnMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICA/IHJpZ2h0XG4gICAgICAgICAgICAgICAgICAgIDogKHRpY2tQb3MgKyB0aWNrUG9zaXRpb25zW2luZGV4ICsgMV0pIC8gMjtcblxuICAgICAgICAgICAgcmV0dXJuIHsgbGVmdEJvdW5kYXJ5LCByaWdodEJvdW5kYXJ5IH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IG5hdGl2ZUV2ZW50ID0gZXZlbnQubmF0aXZlIGFzIE1vdXNlRXZlbnQ7XG5cbiAgICAgICAgY29uc3QgYm91bmRpbmdSZWN0ID0gdGhpcy5jaGFydC5jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IG1vdXNlSG9yaXpvbnRhbENvb3JkaW5hdGUgPVxuICAgICAgICAgICAgbmF0aXZlRXZlbnQuY2xpZW50WCAtIGJvdW5kaW5nUmVjdC5sZWZ0O1xuXG4gICAgICAgIGNvbnN0IG5ld0hvdmVyZWRJbmRleCA9IHNlZ21lbnRCb3VuZGFyaWVzLmZpbmRJbmRleChcbiAgICAgICAgICAgIChib3VuZGFyeSkgPT5cbiAgICAgICAgICAgICAgICBtb3VzZUhvcml6b250YWxDb29yZGluYXRlID49IGJvdW5kYXJ5LmxlZnRCb3VuZGFyeSAmJlxuICAgICAgICAgICAgICAgIG1vdXNlSG9yaXpvbnRhbENvb3JkaW5hdGUgPCBib3VuZGFyeS5yaWdodEJvdW5kYXJ5XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKG5ld0hvdmVyZWRJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnMucGx1Z2lucyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnMucGx1Z2lucyxcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucz8ucGx1Z2lucz8uYW5ub3RhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucz8ucGx1Z2lucz8uYW5ub3RhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8uYW5ub3RhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBbQ2hhcnRQbHVnaW5JZHNTdHJpbmdFbnVtLlhfREFTSEVEXToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLkVDaGFydEFubm90YXRpb24uWF9EQVNIRUQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG5ld0hvdmVyZWRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLkJPUkRFUl9CT1RUT01fTElORV9DSEFSVF9DT0xPUixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhvdmVyZWRJbmRleC5lbWl0KG5ld0hvdmVyZWRJbmRleCk7XG4gICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZVZlcnRpY2FsRGFzaGVkTGluZUFuZEZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhvdmVyZWRJbmRleC5lbWl0KG51bGwpO1xuICAgICAgICBpZiAodGhpcy5fY2hhcnRDb25maWcuaGFzVmVydGljYWxEYXNoZWRBbm5vdGF0aW9uKVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVWZXJ0aWNhbERhc2hlZExpbmUoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iLCJAaWYgKGlzQ2hhcnREYXRhQXZhaWxhYmxlKSB7XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgbGVnZW5kO1xuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgIGNvbmZpZzogbGVnZW5kRGF0YSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPGRpdlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICBoZWlnaHQ6IF9jaGFydENvbmZpZz8uaGVpZ2h0ICsgJ3B4JyxcbiAgICAgICAgICAgIHdpZHRoOiBfY2hhcnRDb25maWc/LndpZHRoICsgJyUnLFxuICAgICAgICB9XCJcbiAgICA+XG4gICAgICAgIDxjYW52YXMgI2NoYXJ0Q2FudmFzPjwvY2FudmFzPlxuICAgIDwvZGl2PlxufSBAZWxzZSB7XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgIGhlaWdodDogX2NoYXJ0Q29uZmlnPy5oZWlnaHQgKyAncHgnLFxuICAgICAgICAgICAgd2lkdGg6IF9jaGFydENvbmZpZz8ud2lkdGggKyAnJScsXG4gICAgICAgIH1cIlxuICAgID5cbiAgICAgICAgPHN2Zy1pY29uXG4gICAgICAgICAgICBbc3JjXT1cIl9jaGFydENvbmZpZy5ub0RhdGFJbWFnZVwiXG4gICAgICAgICAgICBhbHQ9XCJObyBkYXRhIGF2YWlsYWJsZVwiXG4gICAgICAgICAgICBjbGFzcz1cIm5vLWRhdGEtc3ZnXCJcbiAgICAgICAgPjwvc3ZnLWljb24+XG4gICAgPC9kaXY+XG59XG48bmctdGVtcGxhdGUgI2xlZ2VuZCBsZXQtY29uZmlnPVwiY29uZmlnXCI+XG4gICAgQGlmIChjb25maWc/LmRhdGEpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29uZmlnLmhhc0hpZ2hsaWdodGVkQmFja2dyb3VuZCAmJiAnY29sb3JlZC1iYWNrZ3JvdW5kJ1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoY29uZmlnLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC10aXRsZSBmb250LXNpemUtMTQgdGEtZm9udC1leHRyYS1ib2xkXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbmZpZy50aXRsZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC13cmFwcGVyIGQtZmxleFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICBpdGVtIG9mIGNvbmZpZy5kYXRhO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSAkaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrIGl0ZW0ubmFtZVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1jb250ZW50LWNlbnRlciB0ZXh0LXNpemUtMTEgdGEtZm9udC1ib2xkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtPy5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uaXNMaW5lSW5kaWNhdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbGluZS1pbmRpY2F0b3InXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnY2lyY2xlLWluZGljYXRvcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBiYWNrZ3JvdW5kOiBpdGVtPy5jb2xvciB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zaXplLTE4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW0/LnZhbHVlICE9PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChpdGVtPy52YWx1ZSB8IHRob3VzYW5kU2VwYXJhdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfCB1bml0UG9zaXRpb246IGl0ZW0/LnVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuIl19
628
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtY2hhcnQvY2EtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtY2hhcnQvY2EtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1QsWUFBWSxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxTQUFTO0FBQ1QsT0FBTyxFQUVILEtBQUssR0FJUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLGdCQUFnQixNQUFNLDJCQUEyQixDQUFDO0FBR3pELFFBQVE7QUFDUixPQUFPLEVBRUgscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUV4Qiw0QkFBNEIsRUFDNUIseUJBQXlCLEVBQ3pCLDZCQUE2QixFQUM3QixnQkFBZ0IsR0FDbkIsTUFBTSxTQUFTLENBQUM7QUFFakIsVUFBVTtBQUNWLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5QyxTQUFTO0FBQ1QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBa0JoRCxZQUFZO0FBQ1osT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTW5ELFFBQVE7QUFDUixPQUFPLEVB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aUJBQWlCO3NCQURwQixLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBZ0JPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBU0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgT3B0aW9uYWwsXG4gICAgVmlld0NoaWxkLFxuICAgIEV2ZW50RW1pdHRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQW55T2JqZWN0IH0gZnJvbSAnY2hhcnQuanMvZGlzdC90eXBlcy9iYXNpYyc7XG5pbXBvcnQgeyBBbmd1bGFyU3ZnSWNvbk1vZHVsZSB9IGZyb20gJ2FuZ3VsYXItc3ZnLWljb24nO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbi8vIENoYXJ0c1xuaW1wb3J0IHtcbiAgICBDYXRlZ29yeVNjYWxlLFxuICAgIENoYXJ0LFxuICAgIENoYXJ0RXZlbnQsXG4gICAgTGluZWFyU2NhbGUsXG4gICAgUGx1Z2luLFxufSBmcm9tICdjaGFydC5qcy9hdXRvJztcbmltcG9ydCBhbm5vdGF0aW9uUGx1Z2luIGZyb20gJ2NoYXJ0anMtcGx1Z2luLWFubm90YXRpb24nO1xuaW1wb3J0IHsgQWN0aXZlRGF0YVBvaW50LCBDaGFydFR5cGUgfSBmcm9tICdjaGFydC5qcyc7XG5cbi8vIEVudW1zXG5pbXBvcnQge1xuICAgIENoYXJ0Q29sb3JzU3RyaW5nRW51bSxcbiAgICBFQ2hhcnRFdmVudFByb3BlcnRpZXMsXG4gICAgQ2hhcnRQbHVnaW5JZHNTdHJpbmdFbnVtLFxuICAgIGVDaGFydFR5cGVzU3RyaW5nLFxuICAgIEN1YmljSW50ZXJwb2xhdGlvblN0cmluZ0VudW0sXG4gICAgQ2hhcnRFdmVudFR5cGVzU3RyaW5nRW51bSxcbiAgICBDaGFydEZvbnRQcm9wZXJ0aWVzU3RyaW5nRW51bSxcbiAgICBFQ2hhcnRBbm5vdGF0aW9uLFxufSBmcm9tICcuL2VudW1zJztcblxuLy8gSGVscGVyc1xuaW1wb3J0IHsgQ2hhcnRIZWxwZXIgfSBmcm9tICcuL3V0aWxzL2hlbHBlcnMnO1xuXG4vLyBHdWFyZHNcbmltcG9ydCB7IENoYXJ0VHlwZUd1YXJkIH0gZnJvbSAnLi91dGlscy9ndWFyZHMnO1xuXG4vL01vZGVsc1xuaW1wb3J0IHtcbiAgICBJQ2hhcnREYXRhLFxuICAgIElMaW5lRGF0YXNldCxcbiAgICBJQ2hhcnRDb25maWd1cmF0aW9uLFxuICAgIElCYXNlRGF0YXNldCxcbiAgICBJQ2hhcnRBbm5vdGF0aW9uLFxuICAgIElDaGFydERhdGFzZXRIb3ZlcixcbiAgICBJQ2hhcnRDZW50ZXJMYWJlbCxcbiAgICBJQ2hhcnRMZWdlbmRDb25maWcsXG59IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IEFjdGl2ZUVsZW1lbnQgfSBmcm9tICdjaGFydC5qcy9kaXN0L3BsdWdpbnMvcGx1Z2luLnRvb2x0aXAnO1xuXG4vL1NlcnZpY2VzXG5pbXBvcnQgeyBDaGFydE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY2EtY2hhcnQtbWFuYWdlci9zZXJ2aWNlcyc7XG5cbi8vIENvbnN0YW50c1xuaW1wb3J0IHsgQ2hhcnRDb25zdGFudHMgfSBmcm9tICcuL3V0aWxzL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIF9EZWVwUGFydGlhbEFycmF5LFxuICAgIF9EZWVwUGFydGlhbE9iamVjdCxcbn0gZnJvbSAnY2hhcnQuanMvZGlzdC90eXBlcy91dGlscyc7XG5cbi8vIFBpcGVzXG5pbXBvcnQgeyBUaG91c2FuZFNlcGFyYXRvclBpcGUsIFVuaXRQb3NpdGlvblBpcGUgfSBmcm9tICcuLi8uLi9waXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWNhLWNoYXJ0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2EtY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NhLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgQW5ndWxhclN2Z0ljb25Nb2R1bGUsXG4gICAgICAgIFVuaXRQb3NpdGlvblBpcGUsXG4gICAgICAgIFRob3VzYW5kU2VwYXJhdG9yUGlwZSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDYUNoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgQFZpZXdDaGlsZCgnY2hhcnRDYW52YXMnLCB7IHN0YXRpYzogZmFsc2UgfSkgY2hhcnRDYW52YXMhOiBFbGVtZW50UmVmO1xuXG4gICAgQElucHV0KCkgbGVnZW5kRGF0YSE6IElDaGFydExlZ2VuZENvbmZpZztcbiAgICBASW5wdXQoKSBjaGFydElkITogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNoYXJ0RGF0YXNldEhvdmVyKHZhbHVlOiBJQ2hhcnREYXRhc2V0SG92ZXIgfCBudWxsKSB7XG4gICAgICAgIGlmICh2YWx1ZSkgdGhpcy51cGRhdGVEYXRhc2V0QmFja2dyb3VuZE9uSG92ZXIodmFsdWUpO1xuICAgIH1cbiAgICBASW5wdXQoKSBzZXQgY2hhcnRDb25maWcodmFsdWU6IElDaGFydENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgdGhpcy5fY2hhcnRDb25maWcgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pc0NoYXJ0RGF0YUF2YWlsYWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuaXNDaGFydERhdGFBdmFpbGFibGUgPVxuICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWc/LmNoYXJ0RGF0YT8uZGF0YXNldHM/LnNvbWUoKGl0ZW06IElCYXNlRGF0YXNldCkgPT5cbiAgICAgICAgICAgICAgICBpdGVtLmRhdGEuc29tZSgodmFsdWU6IG51bWJlciB8IG51bWJlcltdKSA9PlxuICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZVswXSAhPT0gMCB8fCB2YWx1ZVsxXSAhPT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZSAhPT0gMFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkgPz8gZmFsc2U7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzQ2hhcnREYXRhQXZhaWxhYmxlKSB0aGlzLnVwZGF0ZUNoYXJ0KCk7XG4gICAgfVxuICAgIEBJbnB1dCgpIHNldCBzZWxlY3RlZEluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoYXJ0IHx8ICF0aGlzLmlzQ2hhcnREYXRhQXZhaWxhYmxlKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB0aGlzLmZvY3VzRG91Z2hudXRBcmModmFsdWUpO1xuICAgICAgICBlbHNlIHRoaXMuc2V0T3JpZ2luYWxEb3VnaG51dEFyY3NDb2xvcigpO1xuXG4gICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIGhvdmVyZWRJbmRleDogRXZlbnRFbWl0dGVyPG51bWJlciB8IG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBwcml2YXRlIGNoYXJ0ITogQ2hhcnQ7XG4gICAgcHJpdmF0ZSBjaGFydENvbnRleHQhOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gICAgcHJpdmF0ZSBwbHVnaW5zPzogUGx1Z2luPENoYXJ0VHlwZSwgQW55T2JqZWN0PltdO1xuICAgIHByaXZhdGUgYXJlQW5pbWF0aW9uc0NvbXBsZWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIF9ob3ZlcmVkSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgbGFzdEhvdmVyZWRJbmRleDogbnVtYmVyID0gLTE7XG5cbiAgICBwdWJsaWMgX2NoYXJ0Q29uZmlnITogSUNoYXJ0Q29uZmlndXJhdGlvbjtcbiAgICBwdWJsaWMgaXNDaGFydERhdGFBdmFpbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjaGFydE1hbmFnZXJTZXJ2aWNlPzogQ2hhcnRNYW5hZ2VyU2VydmljZVxuICAgICkge31cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDaGFydERhdGFBdmFpbGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUFubm90YXRpb25QbHVnaW4oKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ2hhcnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVDaGFydE1hbmFnZXJTZXJ2aWNlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplQ2hhcnRNYW5hZ2VyU2VydmljZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoYXJ0TWFuYWdlclNlcnZpY2UpIHJldHVybjtcblxuICAgICAgICB0aGlzLmNoYXJ0TWFuYWdlclNlcnZpY2UuaG92ZXJTdGF0ZSRcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgaW5kZXgsIGNoYXJ0SWQgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjaGFydElkICE9PSB0aGlzLmNoYXJ0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faG92ZXJlZEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoYXJ0KSB0aGlzLmNoYXJ0LmRyYXcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVBbm5vdGF0aW9uUGx1Z2luKCk6IHZvaWQge1xuICAgICAgICBDaGFydC5yZWdpc3Rlcihhbm5vdGF0aW9uUGx1Z2luKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlRGF0YXNldEJhY2tncm91bmRPbkhvdmVyKFxuICAgICAgICBjaGFydERhdGFzZXRIb3ZlcjogSUNoYXJ0RGF0YXNldEhvdmVyXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jaGFydCB8fCAhdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzKSByZXR1cm47XG5cbiAgICAgICAgaWYgKGNoYXJ0RGF0YXNldEhvdmVyLmlzSG92ZXJkKSB7XG4gICAgICAgICAgICBjb25zdCBncmFkaWVudCA9IENoYXJ0SGVscGVyLmNyZWF0ZUdyYWRpZW50KFxuICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDb250ZXh0LFxuICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDYW52YXMsXG4gICAgICAgICAgICAgICAgY2hhcnREYXRhc2V0SG92ZXIuY29sb3IsXG4gICAgICAgICAgICAgICAgY2hhcnREYXRhc2V0SG92ZXIuY29sb3IsXG4gICAgICAgICAgICAgICAgMC42LFxuICAgICAgICAgICAgICAgIDAuMSxcbiAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzID0gdGhpcy5jaGFydD8uZGF0YT8uZGF0YXNldHM/Lm1hcChcbiAgICAgICAgICAgICAgICAoZGF0YXNldCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YXNldC5oaWRkZW4pIHJldHVybiBkYXRhc2V0O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQ/LmxhYmVsPy50b1VwcGVyQ2FzZSgpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnREYXRhc2V0SG92ZXI/LmxhYmVsPy50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaG92ZXJkRGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBncmFkaWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogY2hhcnREYXRhc2V0SG92ZXIuY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhvdmVyZERhdGFTZXQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib3JkZXJDb2xvcldpdGhPcGFjaXR5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFydEhlbHBlci5jaGFuZ2VPcGFjaXR5T2ZSZ2JPclJnYmEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuYm9yZGVyQ29sb3IgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBib3JkZXJDb2xvcldpdGhPcGFjaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzID0gdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzLm1hcChcbiAgICAgICAgICAgICAgICAoZGF0YXNldCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGFzZXQuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbENvbG9yID0gZGF0YXNldC5ib3JkZXJDb2xvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gQ2hhcnRIZWxwZXIuY2hhbmdlT3BhY2l0eU9mUmdiT3JSZ2JhKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuYm9yZGVyQ29sb3IgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENoYXJ0Q29uc3RhbnRzLlNUUklOR19FTVBUWTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBvcmlnaW5hbENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogQ2hhcnRDb25zdGFudHMuU1RSSU5HX0VNUFRZLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHJldHVybiBkYXRhc2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVDaGFydCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGFydENvbnRleHQgPSB0aGlzLmNoYXJ0Q2FudmFzPy5uYXRpdmVFbGVtZW50Py5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgICAgIHRoaXMuc2V0Q2hhcnRPcHRpb25zUHJvcGVydGllcygpO1xuICAgICAgICB0aGlzLnNldENoYXJ0RGF0YVByb3BlcnRpZXMoKTtcbiAgICAgICAgdGhpcy5zZXRDaGFydFBsdWdpbnNQcm9wZXJ0aWVzKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hhcnQpIHRoaXMuY2hhcnQuZGVzdHJveSgpO1xuXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUFubm90YXRpb25QbHVnaW4oKTtcbiAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT0gZUNoYXJ0VHlwZXNTdHJpbmcuRE9VR0hOVVQpXG4gICAgICAgICAgICBDaGFydC5vdmVycmlkZXMuZG91Z2hudXQuY3V0b3V0ID0gJzg4JSc7XG5cbiAgICAgICAgdGhpcy5jaGFydCA9IG5ldyBDaGFydCh0aGlzLmNoYXJ0Q29udGV4dCwge1xuICAgICAgICAgICAgdHlwZTogdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5fY2hhcnRDb25maWcuY2hhcnREYXRhLFxuICAgICAgICAgICAgb3B0aW9uczogdGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLFxuICAgICAgICAgICAgcGx1Z2luczogdGhpcy5wbHVnaW5zLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXRoaXMuX2NoYXJ0Q29uZmlnLmlzRGFzaGJvYXJkQ2hhcnQpXG4gICAgICAgICAgICB0aGlzLmNoYXJ0LmNvbmZpZy5kYXRhLmRhdGFzZXRzID0gW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnPy5jaGFydERhdGE/LmRhdGFzZXRzPy5tYXAoXG4gICAgICAgICAgICAgICAgICAgIChpdGVtOiBJQmFzZURhdGFzZXQsIGluZHg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9pbnRDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRCYWNrZ3JvdW5kQ29sb3I6IENoYXJ0Q29sb3JzU3RyaW5nRW51bS5XSElURSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludEJvcmRlcldpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50UmFkaXVzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDaGFydEFubm90YXRpb25zKGl0ZW0sIGluZHgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB5U2NhbGUgPSB0aGlzLmNoYXJ0LnNjYWxlc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQ2hhcnRFdmVudFByb3BlcnRpZXMuWV9BWElTXzBcbiAgICAgICAgICAgICAgICAgICAgICAgIF0gYXMgQ2F0ZWdvcnlTY2FsZSB8IExpbmVhclNjYWxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yICYmIGl0ZW0/LmNvbG9yMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENoYXJ0SGVscGVyLmNyZWF0ZUdyYWRpZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydENhbnZhcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy5jb2xvcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YXNldENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50Qm9yZGVyQ29sb3I6IGl0ZW0uY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucG9pbnRDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGl0ZW0/LmZpbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVDaGFydFR5cGVzU3RyaW5nLkRPVUdITlVUXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZGF0YXNldENvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBpdGVtLmJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0uc2hpZnRWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhc2V0Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5jb2xvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uY29sb3IyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5jb2xvciAhPT0gaXRlbT8uY29sb3IyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDaGFydEhlbHBlci5jcmVhdGVHcmFkaWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q2FudmFzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmNvbG9yMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbT8uY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hpZnRWYWx1ZVB4OiBudW1iZXIgPSB5U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNoaWZ0VmFsdWUgfHwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoaWZ0VmFsdWVBZGp1c3RlZDogbnVtYmVyID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdFZhbHVlUHggLyB5U2NhbGUubWF4SGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xvcjE6IHN0cmluZyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jb2xvciB8fCBDaGFydENvbnN0YW50cy5TVFJJTkdfRU1QVFk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xvcjI6IHN0cmluZyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jb2xvcjIgfHwgQ2hhcnRDb25zdGFudHMuU1RSSU5HX0VNUFRZO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib3JkZXJDb2xvcjogQ2FudmFzR3JhZGllbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0SGVscGVyLmNyZWF0ZUdyYWRpZW50V2l0aFNoaWZ0VmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5U2NhbGUubWF4SGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRWYWx1ZUFkanVzdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnBvaW50Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50Qm9yZGVyQ29sb3I6IGJvcmRlckNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRIZWxwZXIuY3JlYXRlR3JhZGllbnRXaXRoU2hpZnRWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeVNjYWxlLm1heEhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0VmFsdWVBZGp1c3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVDaGFydCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhcnQpIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgICAgIHRoaXMuY3JlYXRlQ2hhcnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENoYXJ0T3B0aW9uc1Byb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0RGF0YS5sYWJlbHM7XG5cbiAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zID0ge1xuICAgICAgICAgICAgcmVzcG9uc2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1haW50YWluQXNwZWN0UmF0aW86IGZhbHNlLFxuICAgICAgICAgICAgY2xpcDogZmFsc2UsXG4gICAgICAgICAgICBhbmltYXRpb246IHtcbiAgICAgICAgICAgICAgICBvbkNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXJlQW5pbWF0aW9uc0NvbXBsZWF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0LmRyYXcoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3M6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcmVBbmltYXRpb25zQ29tcGxlYXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0LmRyYXcoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgdG9wOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgZUNoYXJ0VHlwZXNTdHJpbmcuRE9VR0hOVVRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVDaGFydFR5cGVzU3RyaW5nLkRPVUdITlVUXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyA4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSBlQ2hhcnRUeXBlc1N0cmluZy5CQVIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLnZlcnRpY2FseUFsaWduQmFyQ2hhcnRXaXRoTGluZUNhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSBlQ2hhcnRUeXBlc1N0cmluZy5CQVIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLnZlcnRpY2FseUFsaWduQmFyQ2hhcnRXaXRoTGluZUNhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwbHVnaW5zOiB7XG4gICAgICAgICAgICAgICAgbGVnZW5kOiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNjYWxlczoge1xuICAgICAgICAgICAgICAgIHg6IHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYm90dG9tJyxcbiAgICAgICAgICAgICAgICAgICAgZ3JpZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHRpY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBDaGFydENvbG9yc1N0cmluZ0VudW0uWF9BWElTX0xBQkVMX0NPTE9SLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IDExLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseTogQ2hhcnRGb250UHJvcGVydGllc1N0cmluZ0VudW0uRk9OVF9GQU1JTFlfTU9OVFNFUlJBVCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IENoYXJ0Rm9udFByb3BlcnRpZXNTdHJpbmdFbnVtLkZPTlRfV0VJR0hUX0JPTERFUixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvU2tpcDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9Ta2lwUGFkZGluZzogMTIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhSb3RhdGlvbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pblJvdGF0aW9uOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9MYWJlbCB3cml0dGVuIGluIDIgbGluZXMsIHdpbGwgYmUgYWRqdXN0ZWQgd2l0aCBuZXcgZGVzaWduXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IG51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgKTogc3RyaW5nIHwgc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gbGFiZWxzW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aUxpbmVMYWJlbCA9IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbGFiZWwuc3BsaXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtdWx0aUxpbmVMYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IHRoaXMuX2NoYXJ0Q29uZmlnLnNob3dYQXhpc0xhYmVscyxcbiAgICAgICAgICAgICAgICAgICAgYmVnaW5BdFplcm86IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHk6IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luQXRaZXJvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgICAgIG1heDogQ2hhcnRIZWxwZXIuY2FsY3VsYXRlRGF0YXNldE1heFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnREYXRhLmRhdGFzZXRzIGFzIGFueSAvL2xlYXZlIHRoaXMgYXMgYW55XG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkhvdmVyOiAoZXZlbnQ6IENoYXJ0RXZlbnQsIGl0ZW06IEFjdGl2ZUVsZW1lbnRbXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFydENvbmZpZy5oYXNWZXJ0aWNhbERhc2hlZEFubm90YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVWZXJ0aWNhbERhc2hlZExpbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWZXJ0aWNhbERhc2hlZEFubm90YXRpb25MaW5lKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNldE9yaWdpbmFsRG91Z2hudXRBcmNzQ29sb3IoKTtcblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRUeXBlID09PSBlQ2hhcnRUeXBlc1N0cmluZy5ET1VHSE5VVFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtWzBdPy5pbmRleCA+PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZm9jdXNEb3VnaG51dEFyYyhpdGVtWzBdPy5pbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5zZXRPcmlnaW5hbERvdWdobnV0QXJjc0NvbG9yKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJlZEluZGV4LmVtaXQoaXRlbVswXT8uaW5kZXggfHwgbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQudXBkYXRlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNEb3VnaG51dEFyYyhpbmRleDogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgIT09IGVDaGFydFR5cGVzU3RyaW5nLkRPVUdITlVUIHx8XG4gICAgICAgICAgICBpbmRleCA9PT0gdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzWzBdLmRhdGEubGVuZ3RoIC0gMVxuICAgICAgICApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGNvbG9yczogc3RyaW5nW10gPSB0aGlzLmNoYXJ0Py5kYXRhPy5kYXRhc2V0c1swXVxuICAgICAgICAgICAgPy5iYWNrZ3JvdW5kQ29sb3IgYXMgc3RyaW5nW107XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRDb2xvcnM6IHN0cmluZ1tdID0gY29sb3JzLm1hcChcbiAgICAgICAgICAgIChjb2xvcjogc3RyaW5nLCBpbmR4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5keCA9PT0gaW5kZXgpIHJldHVybiBjb2xvcjtcbiAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZWRWYWx1ZSA9IENoYXJ0SGVscGVyLmNvbnZlcnRSZ2JUb1JnYmEoY29sb3IsIDAuMik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1swXS5iYWNrZ3JvdW5kQ29sb3IgPSB1cGRhdGVkQ29sb3JzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0T3JpZ2luYWxEb3VnaG51dEFyY3NDb2xvcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0VHlwZSAhPT0gZUNoYXJ0VHlwZXNTdHJpbmcuRE9VR0hOVVQpIHJldHVybjtcblxuICAgICAgICBjb25zdCBjb2xvcnM6IHN0cmluZ1tdID0gdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzWzBdXG4gICAgICAgICAgICAuYmFja2dyb3VuZENvbG9yIGFzIHN0cmluZ1tdO1xuXG4gICAgICAgIHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1swXS5iYWNrZ3JvdW5kQ29sb3IgPSBbXG4gICAgICAgICAgICAuLi5jb2xvcnMubWFwKChjb2xvcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIENoYXJ0SGVscGVyLnJnYlRvUmdiYShjb2xvciwgMSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcblxuICAgICAgICB0aGlzLmNoYXJ0LnVwZGF0ZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIHNldENoYXJ0RGF0YVByb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgPT09IGVDaGFydFR5cGVzU3RyaW5nLkxJTkUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0RGF0YS5kYXRhc2V0cy5mb3JFYWNoKChkYXRhc2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgZGF0YXNldC5vcmRlciA9IGRhdGFzZXQub3JkZXI7XG4gICAgICAgICAgICAgICAgaWYgKENoYXJ0VHlwZUd1YXJkLmlzTGluZURhdGFzZXQoZGF0YXNldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC50ZW5zaW9uID0gZGF0YXNldC50ZW5zaW9uID8/IDAuNTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5jdWJpY0ludGVycG9sYXRpb25Nb2RlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuY3ViaWNJbnRlcnBvbGF0aW9uTW9kZSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgQ3ViaWNJbnRlcnBvbGF0aW9uU3RyaW5nRW51bS5NT05PVE9ORTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5wb2ludEJvcmRlckNvbG9yID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQucG9pbnRCb3JkZXJDb2xvciA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRDb2xvcnNTdHJpbmdFbnVtLlRSQU5TUEFSRU5UO1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnBvaW50QmFja2dyb3VuZENvbG9yID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQucG9pbnRCYWNrZ3JvdW5kQ29sb3IgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0Q29sb3JzU3RyaW5nRW51bS5UUkFOU1BBUkVOVDtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5wb2ludEhvdmVyQmFja2dyb3VuZENvbG9yID1cbiAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0Q29sb3JzU3RyaW5nRW51bS5XSElURTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5wb2ludEhvdmVyQm9yZGVyQ29sb3IgPSBkYXRhc2V0LmJvcmRlckNvbG9yO1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnBvaW50Qm9yZGVyV2lkdGggPSBkYXRhc2V0LnBvaW50Qm9yZGVyV2lkdGggPz8gMztcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5wb2ludEhvdmVyUmFkaXVzID0gNDtcbiAgICAgICAgICAgICAgICAgICAgLy9kYXRhc2V0LnBvaW50SG92ZXJSYWRpdXMgPSA4O1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnBvaW50SG92ZXJCb3JkZXJXaWR0aCA9IDM7XG5cbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5zcGFuR2FwcyA9IGRhdGFzZXQuc3BhbkdhcHMgPz8gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuc2hvd0xpbmUgPSBkYXRhc2V0LnNob3dMaW5lID8/IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNldE11bHRpcGxlWUF4aXModGhpcy5fY2hhcnRDb25maWcuY2hhcnREYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q2hhcnRQbHVnaW5zUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiBDaGFydFBsdWdpbklkc1N0cmluZ0VudW0uSElHSExJR0hUX1NFR01FTlRfT05fSE9WRVIsXG4gICAgICAgICAgICAgICAgYWZ0ZXJFdmVudDogKGNoYXJ0LCBldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYXRpdmVFdmVudCA9IGV2ZW50LmV2ZW50Lm5hdGl2ZSBhcyBNb3VzZUV2ZW50O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50LnR5cGUgPT09IENoYXJ0RXZlbnRUeXBlc1N0cmluZ0VudW0uTU9VU0VfT1VUXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm91bmRpbmdSZWN0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0LmNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTW91c2VPdXRzaWRlQ2hhcnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmNsaWVudFggPCBib3VuZGluZ1JlY3QubGVmdCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmNsaWVudFggPiBib3VuZGluZ1JlY3QucmlnaHQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudC5jbGllbnRZIDwgYm91bmRpbmdSZWN0LnRvcCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmNsaWVudFkgPiBib3VuZGluZ1JlY3QuYm90dG9tO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNNb3VzZU91dHNpZGVDaGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hvdmVyZWRJbmRleCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydE1hbmFnZXJTZXJ2aWNlPy5zZXRIb3ZlclN0YXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0SWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlVmVydGljYWxEYXNoZWRMaW5lQW5kRm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0LmRyYXcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2hhcnRDb25maWcuc2hvd1Rvb2x0aXBCYWNrZ3JvdW5kKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm91bmRpbmdSZWN0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQuY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb3VzZUhvcml6b250YWxDb29yZGluYXRlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmNsaWVudFggLSBib3VuZGluZ1JlY3QubGVmdDtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxlZnQsIHJpZ2h0IH0gPSB0aGlzLmNoYXJ0LmNoYXJ0QXJlYTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUhvcml6b250YWxDb29yZGluYXRlIDwgbGVmdCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VIb3Jpem9udGFsQ29vcmRpbmF0ZSA+IHJpZ2h0XG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG92ZXJlZEluZGV4ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRNYW5hZ2VyU2VydmljZT8uc2V0SG92ZXJTdGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRJZFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQuZHJhdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeFNjYWxlID0gdGhpcy5jaGFydC5zY2FsZXNbXG4gICAgICAgICAgICAgICAgICAgICAgICBFQ2hhcnRFdmVudFByb3BlcnRpZXMuWFxuICAgICAgICAgICAgICAgICAgICBdIGFzIENhdGVnb3J5U2NhbGUgfCBMaW5lYXJTY2FsZTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aWNrUG9zaXRpb25zID0geFNjYWxlLnRpY2tzLm1hcCgodGljaykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHhTY2FsZS5nZXRQaXhlbEZvclZhbHVlKHRpY2sudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudEJvdW5kYXJpZXMgPSB0aWNrUG9zaXRpb25zLm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aWNrUG9zLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRCb3VuZGFyeSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID09PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGxlZnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHRpY2tQb3MgKyB0aWNrUG9zaXRpb25zW2luZGV4IC0gMV0pIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByaWdodEJvdW5kYXJ5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPT09IHRpY2tQb3NpdGlvbnMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyByaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAodGlja1BvcyArIHRpY2tQb3NpdGlvbnNbaW5kZXggKyAxXSkgLyAyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbGVmdEJvdW5kYXJ5LCByaWdodEJvdW5kYXJ5IH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3SG92ZXJlZEluZGV4ID0gc2VnbWVudEJvdW5kYXJpZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgICAgKGJvdW5kYXJ5KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlSG9yaXpvbnRhbENvb3JkaW5hdGUgPj1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnkubGVmdEJvdW5kYXJ5ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VIb3Jpem9udGFsQ29vcmRpbmF0ZSA8IGJvdW5kYXJ5LnJpZ2h0Qm91bmRhcnlcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3SG92ZXJlZEluZGV4ICE9PSB0aGlzLl9ob3ZlcmVkSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hvdmVyZWRJbmRleCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SG92ZXJlZEluZGV4ID09PSAtMSA/IG51bGwgOiBuZXdIb3ZlcmVkSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0TWFuYWdlclNlcnZpY2U/LnNldEhvdmVyU3RhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG92ZXJlZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50Qm91bmRhcmllc1t0aGlzLl9ob3ZlcmVkSW5kZXggYXMgbnVtYmVyXVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQuZHJhdygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGJlZm9yZURyYXc6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2hvdmVyZWRJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0QXJlYSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZXM6IHsgeDogeFNjYWxlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9ID0gdGhpcy5jaGFydDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnRIZWxwZXIuaGlnaGxpZ2h0U2VnbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0Q29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4U2NhbGUgYXMgQ2F0ZWdvcnlTY2FsZSB8IExpbmVhclNjYWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0QXJlYSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG92ZXJlZEluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVEYXRhID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZz8uY2hhcnREYXRhPy5kYXRhc2V0cz8ubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldEluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogdGhpcy5faG92ZXJlZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQuc2V0QWN0aXZlRWxlbWVudHMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlRGF0YSBhcyBBY3RpdmVEYXRhUG9pbnRbXVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiBDaGFydFBsdWdpbklkc1N0cmluZ0VudW0uQk9SREVSX0JPVFRPTV9MSU5FX0NIQVJULFxuICAgICAgICAgICAgICAgIGJlZm9yZURyYXc6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnPy5zaG93Qm90dG9tTGluZU9uTGluZUNoYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnRBcmVhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlczogeyB4OiB4U2NhbGUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gPSB0aGlzLmNoYXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YXNldCA9IGRhdGEuZGF0YXNldHNbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdEluZGV4ID0gZGF0YXNldC5kYXRhLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0VmFsdWUgPSBkYXRhc2V0LmRhdGFbZmlyc3RJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0VmFsdWUgPSBkYXRhc2V0LmRhdGFbbGFzdEluZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0VmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4U3RhcnQgPSB4U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShmaXJzdEluZGV4KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhFbmQgPSB4U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShsYXN0SW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHlCb3R0b20gPSBjaGFydEFyZWEuYm90dG9tO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFydENvbG9yc1N0cmluZ0VudW0uQk9SREVSX0JPVFRPTV9MSU5FX0NIQVJUX0NPTE9SO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKHhTdGFydCwgeUJvdHRvbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4RW5kLCB5Qm90dG9tKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICh0aGlzLl9jaGFydENvbmZpZy5jaGFydFR5cGUgPT09IGVDaGFydFR5cGVzU3RyaW5nLkRPVUdITlVUKVxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zID0gW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucGx1Z2lucyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiAnZG91Z2hudXQtbGFiZWwnLFxuICAgICAgICAgICAgICAgICAgICBiZWZvcmVEYXRhc2V0RHJhdzogKGNoYXJ0OiBDaGFydCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2VudGVyTGFiZWxzPy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsOiBJQ2hhcnRDZW50ZXJMYWJlbCwgaW5keDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0SGVscGVyLmRyYXdEb3VnaG51dExlZ2VuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0VG9wOiBsYWJlbC5wb3NpdGlvbj8udG9wIHx8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbC5mb250U2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsLmNvbG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNoYXJ0QW5ub3RhdGlvbnMoaXRlbTogSUJhc2VEYXRhc2V0LCBpbmR4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jaGFydENvbmZpZy5hbm5vdGF0aW9ucz8ubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuYW5ub3RhdGlvbnM/LmZvckVhY2goXG4gICAgICAgICAgICAoYW5ub3RhdGlvbjogSUNoYXJ0QW5ub3RhdGlvbiwga2V5OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnMucGx1Z2lucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLnBsdWdpbnMsXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucz8ucGx1Z2lucz8uYW5ub3RhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zPy5wbHVnaW5zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8uYW5ub3RhdGlvbj8uYW5ub3RhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Ake2l0ZW0ubGFiZWx9LSR7aW5keH0tJHtrZXl9YF06IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uLmlkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYW5ub3RhdGlvbi0ke2luZHh9LSR7a2V5fWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGFubm90YXRpb24udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVJRDogYW5ub3RhdGlvbi5heGlzIHx8IGl0ZW0ueUF4aXNJRCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFubm90YXRpb24udmFsdWUgfHwgaXRlbS5zaGlmdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb24uY29sb3IgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0Q29sb3JzU3RyaW5nRW51bS5CT1JERVJfQk9UVE9NX0xJTkVfQ0hBUlRfQ09MT1IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiBhbm5vdGF0aW9uLmJvcmRlcldpZHRoIHx8IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckRhc2g6IGFubm90YXRpb24uYm9yZGVyRGFzaCB8fCBbMCwgMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jaGFydC51cGRhdGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE11bHRpcGxlWUF4aXMoY2hhcnREYXRhOiBJQ2hhcnREYXRhPElMaW5lRGF0YXNldD4pOiB2b2lkIHtcbiAgICAgICAgY2hhcnREYXRhLmRhdGFzZXRzLmZvckVhY2goKGRhdGFzZXQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZGF0YXNldC50eXBlID09PSBlQ2hhcnRUeXBlc1N0cmluZy5MSU5FIHx8XG4gICAgICAgICAgICAgICAgZGF0YXNldC50eXBlID09PSBlQ2hhcnRUeXBlc1N0cmluZy5CQVJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHlBeGlzSUQgPSB0aGlzLl9jaGFydENvbmZpZy5pc011bHRpWUF4aXNcbiAgICAgICAgICAgICAgICAgICAgPyBgeS1heGlzLSR7aW5kZXh9YFxuICAgICAgICAgICAgICAgICAgICA6IGRhdGFzZXQueUF4aXNJRCB8fCAneS1heGlzLTAnO1xuXG4gICAgICAgICAgICAgICAgLy8gRGV0ZWN0IGlmIHRoZSBkYXRhc2V0IGlzIGFsbCAwXG4gICAgICAgICAgICAgICAgY29uc3QgaXNBbGxaZXJvRGF0YXNldCA9IChkYXRhc2V0LmRhdGEgYXMgbnVtYmVyW10pLmV2ZXJ5KFxuICAgICAgICAgICAgICAgICAgICAodmFsOiBudW1iZXIpID0+IHZhbCA9PT0gMFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBsZXQgbWluVmFsdWUgPSBDaGFydEhlbHBlci5jYWxjdWxhdGVNaW5WYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5kYXRhIGFzIG51bWJlcltdXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBsZXQgbWF4VmFsdWUgPSBDaGFydEhlbHBlci5jYWxjdWxhdGVNYXhWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5kYXRhIGFzIG51bWJlcltdXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWRkaW5nID0gbWF4VmFsdWUgKiAwLjAzO1xuXG4gICAgICAgICAgICAgICAgLy8gQWRqdXN0IHNjYWxpbmcgZm9yIGFsbCAwIGRhdGFzZXRzXG4gICAgICAgICAgICAgICAgaWYgKGlzQWxsWmVyb0RhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgbWluVmFsdWUgPSAwO1xuICAgICAgICAgICAgICAgICAgICBtYXhWYWx1ZSA9IDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbWluVmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWUgPT09IG1pblZhbHVlID8gbWluVmFsdWUgLSAwLjEgOiBtaW5WYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWUgPT09IG1pblZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtYXhWYWx1ZSArIDAuMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbWF4VmFsdWUgKyBwYWRkaW5nO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucy5zY2FsZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NoYXJ0Q29uZmlnLmNoYXJ0T3B0aW9ucy5zY2FsZXMsXG4gICAgICAgICAgICAgICAgICAgIFt5QXhpc0lEXToge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbkF0WmVybzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogbWluVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXg6IG1heFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tlZDogdGhpcy5fY2hhcnRDb25maWcuaXNTdGFja2VkLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjaGFydERhdGEuZGF0YXNldHNbaW5kZXhdID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5kYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICB5QXhpc0lELFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlVmVydGljYWxEYXNoZWRMaW5lKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhbm5vdGF0aW9ucyA9XG4gICAgICAgICAgICB0aGlzLl9jaGFydENvbmZpZz8uY2hhcnRPcHRpb25zPy5wbHVnaW5zPy5hbm5vdGF0aW9uPy5hbm5vdGF0aW9ucztcblxuICAgICAgICBjb25zdCBrZXk6IHN0cmluZyA9IENoYXJ0UGx1Z2luSWRzU3RyaW5nRW51bS5YX0RBU0hFRDtcblxuICAgICAgICBpZiAoYW5ub3RhdGlvbnMpXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fY2hhcnRDb25maWc/LmNoYXJ0T3B0aW9ucz8ucGx1Z2lucz8uYW5ub3RhdGlvblxuICAgICAgICAgICAgICAgID8uYW5ub3RhdGlvbnM/LltrZXkgYXMga2V5b2YgdHlwZW9mIGFubm90YXRpb25zXTtcblxuICAgICAgICB0aGlzLmNoYXJ0LnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VmVydGljYWxEYXNoZWRBbm5vdGF0aW9uTGluZShcbiAgICAgICAgZXZlbnQ6IENoYXJ0RXZlbnQsXG4gICAgICAgIGNvbG9yPzogc3RyaW5nXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgbGVmdCwgcmlnaHQgfSA9IHRoaXMuY2hhcnQuY2hhcnRBcmVhO1xuXG4gICAgICAgIGNvbnN0IHhTY2FsZSA9IHRoaXMuY2hhcnQuc2NhbGVzW0VDaGFydEV2ZW50UHJvcGVydGllcy5YXSBhc1xuICAgICAgICAgICAgfCBDYXRlZ29yeVNjYWxlXG4gICAgICAgICAgICB8IExpbmVhclNjYWxlO1xuXG4gICAgICAgIGNvbnN0IHRpY2tQb3NpdGlvbnMgPSB0aGlzLl9jaGFydENvbmZpZz8uY2hhcnREYXRhPy5sYWJlbHM/Lm1hcChcbiAgICAgICAgICAgIChsYWJlbDogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHhTY2FsZS5nZXRQaXhlbEZvclZhbHVlKGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc2VnbWVudEJvdW5kYXJpZXMgPSB0aWNrUG9zaXRpb25zLm1hcCgodGlja1BvcywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRCb3VuZGFyeSA9XG4gICAgICAgICAgICAgICAgaW5kZXggPT09IDAgPyBsZWZ0IDogKHRpY2tQb3MgKyB0aWNrUG9zaXRpb25zW2luZGV4IC0gMV0pIC8gMjtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0Qm91bmRhcnkgPVxuICAgICAgICAgICAgICAgIGluZGV4ID09PSB0aWNrUG9zaXRpb25zLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgPyByaWdodFxuICAgICAgICAgICAgICAgICAgICA6ICh0aWNrUG9zICsgdGlja1Bvc2l0aW9uc1tpbmRleCArIDFdKSAvIDI7XG5cbiAgICAgICAgICAgIHJldHVybiB7IGxlZnRCb3VuZGFyeSwgcmlnaHRCb3VuZGFyeSB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBuYXRpdmVFdmVudCA9IGV2ZW50Lm5hdGl2ZSBhcyBNb3VzZUV2ZW50O1xuXG4gICAgICAgIGNvbnN0IGJvdW5kaW5nUmVjdCA9IHRoaXMuY2hhcnQuY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBtb3VzZUhvcml6b250YWxDb29yZGluYXRlID1cbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmNsaWVudFggLSBib3VuZGluZ1JlY3QubGVmdDtcblxuICAgICAgICBjb25zdCBuZXdIb3ZlcmVkSW5kZXggPSBzZWdtZW50Qm91bmRhcmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoYm91bmRhcnkpID0+XG4gICAgICAgICAgICAgICAgbW91c2VIb3Jpem9udGFsQ29vcmRpbmF0ZSA+PSBib3VuZGFyeS5sZWZ0Qm91bmRhcnkgJiZcbiAgICAgICAgICAgICAgICBtb3VzZUhvcml6b250YWxDb29yZGluYXRlIDwgYm91bmRhcnkucmlnaHRCb3VuZGFyeVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChuZXdIb3ZlcmVkSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLnBsdWdpbnMgPSB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5fY2hhcnRDb25maWcuY2hhcnRPcHRpb25zLnBsdWdpbnMsXG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnM/LnBsdWdpbnM/LmFubm90YXRpb24sXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9jaGFydENvbmZpZy5jaGFydE9wdGlvbnM/LnBsdWdpbnM/LmFubm90YXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LmFubm90YXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgW0NoYXJ0UGx1Z2luSWRzU3RyaW5nRW51bS5YX0RBU0hFRF06IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5FQ2hhcnRBbm5vdGF0aW9uLlhfREFTSEVELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBuZXdIb3ZlcmVkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJ0Q29sb3JzU3RyaW5nRW51bS5CT1JERVJfQk9UVE9NX0xJTkVfQ0hBUlRfQ09MT1IsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXguZW1pdChuZXdIb3ZlcmVkSW5kZXgpO1xuICAgICAgICB0aGlzLmNoYXJ0LnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVWZXJ0aWNhbERhc2hlZExpbmVBbmRGb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXguZW1pdChudWxsKTtcbiAgICAgICAgaWYgKHRoaXMuX2NoYXJ0Q29uZmlnLmhhc1ZlcnRpY2FsRGFzaGVkQW5ub3RhdGlvbilcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVmVydGljYWxEYXNoZWRMaW5lKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIiwiQGlmIChpc0NoYXJ0RGF0YUF2YWlsYWJsZSkge1xuICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGxlZ2VuZDtcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICBjb25maWc6IGxlZ2VuZERhdGEsXG4gICAgICAgICAgICB9XG4gICAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxkaXZcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgaGVpZ2h0OiBfY2hhcnRDb25maWc/LmhlaWdodCArICdweCcsXG4gICAgICAgICAgICB3aWR0aDogX2NoYXJ0Q29uZmlnPy53aWR0aCArICclJyxcbiAgICAgICAgfVwiXG4gICAgPlxuICAgICAgICA8Y2FudmFzICNjaGFydENhbnZhcz48L2NhbnZhcz5cbiAgICA8L2Rpdj5cbn0gQGVsc2Uge1xuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICBoZWlnaHQ6IF9jaGFydENvbmZpZz8uaGVpZ2h0ICsgJ3B4JyxcbiAgICAgICAgICAgIHdpZHRoOiBfY2hhcnRDb25maWc/LndpZHRoICsgJyUnLFxuICAgICAgICB9XCJcbiAgICA+XG4gICAgICAgIDxzdmctaWNvblxuICAgICAgICAgICAgW3NyY109XCJfY2hhcnRDb25maWcubm9EYXRhSW1hZ2VcIlxuICAgICAgICAgICAgYWx0PVwiTm8gZGF0YSBhdmFpbGFibGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJuby1kYXRhLXN2Z1wiXG4gICAgICAgID48L3N2Zy1pY29uPlxuICAgIDwvZGl2PlxufVxuPG5nLXRlbXBsYXRlICNsZWdlbmQgbGV0LWNvbmZpZz1cImNvbmZpZ1wiPlxuICAgIEBpZiAoY29uZmlnPy5kYXRhKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbmZpZy5oYXNIaWdobGlnaHRlZEJhY2tncm91bmQgJiYgJ2NvbG9yZWQtYmFja2dyb3VuZCdcIlxuICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGNvbmZpZy50aXRsZSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdGl0bGUgZm9udC1zaXplLTE0IHRhLWZvbnQtZXh0cmEtYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjb25maWcudGl0bGUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtd3JhcHBlciBkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgICAgaXRlbSBvZiBjb25maWcuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gJGluZGV4O1xuICAgICAgICAgICAgICAgICAgICB0cmFjayBpdGVtLm5hbWVcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24tY29udGVudC1jZW50ZXIgdGV4dC1zaXplLTExIHRhLWZvbnQtYm9sZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbT8ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LmlzTGluZUluZGljYXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2xpbmUtaW5kaWNhdG9yJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2NpcmNsZS1pbmRpY2F0b3InXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgYmFja2dyb3VuZDogaXRlbT8uY29sb3IgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc2l6ZS0xOFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtPy52YWx1ZSAhPT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoaXRlbT8udmFsdWUgfCB0aG91c2FuZFNlcGFyYXRvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHwgdW5pdFBvc2l0aW9uOiBpdGVtPy51bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZS1jaGFydC10eXBlcy5lbnVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtY2hhcnQvZW51bXMvZS1jaGFydC10eXBlcy5lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZW51bSBlQ2hhcnRUeXBlc1N0cmluZyB7XG4gIExJTkUgPSAnbGluZScsXG4gIEJBUiA9ICdiYXInLFxuICBET1VHSE5VVCA9ICdkb3VnaG51dCcsXG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- export * from './chart-types.enum';
1
+ export * from './e-chart-types.enum';
2
2
  export * from './cubic-interpolation-mode.enum';
3
3
  export * from './chart-colors.enum';
4
4
  export * from './chart-plugin-ids.enum';
@@ -8,4 +8,4 @@ export * from './chart-images.enum';
8
8
  export * from './chart-font-properties.enum';
9
9
  export * from './chart-annotation-type.enum';
10
10
  export * from './chart-annotation.enum';
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jYS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYS1jaGFydC9lbnVtcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jaGFydC10eXBlcy5lbnVtJztcbmV4cG9ydCAqIGZyb20gJy4vY3ViaWMtaW50ZXJwb2xhdGlvbi1tb2RlLmVudW0nO1xuZXhwb3J0ICogZnJvbSAnLi9jaGFydC1jb2xvcnMuZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2NoYXJ0LXBsdWdpbi1pZHMuZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2NoYXJ0LWV2ZW50LXR5cGVzLmVudW0nO1xuZXhwb3J0ICogZnJvbSAnLi9jaGFydC1ldmVudC1wcm9wZXJ0aWVzLmVudW0nO1xuZXhwb3J0ICogZnJvbSAnLi9jaGFydC1pbWFnZXMuZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2NoYXJ0LWZvbnQtcHJvcGVydGllcy5lbnVtJztcbmV4cG9ydCAqIGZyb20gJy4vY2hhcnQtYW5ub3RhdGlvbi10eXBlLmVudW0nO1xuZXhwb3J0ICogZnJvbSAnLi9jaGFydC1hbm5vdGF0aW9uLmVudW0nOyJdfQ==
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jYS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYS1jaGFydC9lbnVtcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9lLWNoYXJ0LXR5cGVzLmVudW0nO1xuZXhwb3J0ICogZnJvbSAnLi9jdWJpYy1pbnRlcnBvbGF0aW9uLW1vZGUuZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2NoYXJ0LWNvbG9ycy5lbnVtJztcbmV4cG9ydCAqIGZyb20gJy4vY2hhcnQtcGx1Z2luLWlkcy5lbnVtJztcbmV4cG9ydCAqIGZyb20gJy4vY2hhcnQtZXZlbnQtdHlwZXMuZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2NoYXJ0LWV2ZW50LXByb3BlcnRpZXMuZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2NoYXJ0LWltYWdlcy5lbnVtJztcbmV4cG9ydCAqIGZyb20gJy4vY2hhcnQtZm9udC1wcm9wZXJ0aWVzLmVudW0nO1xuZXhwb3J0ICogZnJvbSAnLi9jaGFydC1hbm5vdGF0aW9uLXR5cGUuZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2NoYXJ0LWFubm90YXRpb24uZW51bSc7Il19
@@ -1,7 +1,7 @@
1
1
  export class ChartTypeGuard {
2
2
  static isLineDataset(dataset) {
3
- const isLineDataset = dataset.type === "line" /* ChartTypesStringEnum.LINE */;
3
+ const isLineDataset = dataset.type === "line" /* eChartTypesString.LINE */;
4
4
  return isLineDataset;
5
5
  }
6
6
  }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtdHlwZS5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLWNoYXJ0L3V0aWxzL2d1YXJkcy9jaGFydC10eXBlLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBcUI7UUFDeEMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksMkNBQThCLENBQUM7UUFFakUsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhcnRUeXBlc1N0cmluZ0VudW0gfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBJQmFzZURhdGFzZXQsIElMaW5lRGF0YXNldCB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBDaGFydFR5cGVHdWFyZCB7XG4gIHN0YXRpYyBpc0xpbmVEYXRhc2V0KGRhdGFzZXQ6IElCYXNlRGF0YXNldCk6IGRhdGFzZXQgaXMgSUxpbmVEYXRhc2V0IHtcbiAgICBjb25zdCBpc0xpbmVEYXRhc2V0ID0gZGF0YXNldC50eXBlID09PSBDaGFydFR5cGVzU3RyaW5nRW51bS5MSU5FO1xuXG4gICAgcmV0dXJuIGlzTGluZURhdGFzZXQ7XG4gIH1cbn1cbiJdfQ==
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtdHlwZS5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLWNoYXJ0L3V0aWxzL2d1YXJkcy9jaGFydC10eXBlLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBcUI7UUFDeEMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksd0NBQTJCLENBQUM7UUFFOUQsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZUNoYXJ0VHlwZXNTdHJpbmcgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBJQmFzZURhdGFzZXQsIElMaW5lRGF0YXNldCB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBDaGFydFR5cGVHdWFyZCB7XG4gIHN0YXRpYyBpc0xpbmVEYXRhc2V0KGRhdGFzZXQ6IElCYXNlRGF0YXNldCk6IGRhdGFzZXQgaXMgSUxpbmVEYXRhc2V0IHtcbiAgICBjb25zdCBpc0xpbmVEYXRhc2V0ID0gZGF0YXNldC50eXBlID09PSBlQ2hhcnRUeXBlc1N0cmluZy5MSU5FO1xuXG4gICAgcmV0dXJuIGlzTGluZURhdGFzZXQ7XG4gIH1cbn1cbiJdfQ==