@tetacom/svg-charts 1.6.2 → 1.6.4

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 (67) hide show
  1. package/chart/chart-container/crosshair/crosshair.component.d.ts +3 -3
  2. package/chart/chart-container/gridlines/gridlines.component.d.ts +4 -4
  3. package/chart/chart-container/y-axis/y-axis.component.d.ts +2 -2
  4. package/chart/legend/legend.component.d.ts +1 -1
  5. package/chart/model/series.d.ts +1 -1
  6. package/chart/model/tooltip-options.d.ts +1 -1
  7. package/esm2022/chart/base/series-base.component.mjs +3 -4
  8. package/esm2022/chart/chart/chart.component.mjs +15 -39
  9. package/esm2022/chart/chart-container/annotation/annotation.component.mjs +8 -11
  10. package/esm2022/chart/chart-container/chart-container.component.mjs +21 -46
  11. package/esm2022/chart/chart-container/crosshair/crosshair.component.mjs +7 -9
  12. package/esm2022/chart/chart-container/gridlines/gridlines.component.mjs +15 -14
  13. package/esm2022/chart/chart-container/plotband/plot-band.component.mjs +7 -15
  14. package/esm2022/chart/chart-container/plotline/plotline.component.mjs +7 -14
  15. package/esm2022/chart/chart-container/series/area-series/area-series.component.mjs +9 -12
  16. package/esm2022/chart/chart-container/series/bar/bar-series.component.mjs +5 -12
  17. package/esm2022/chart/chart-container/series/block-area-series/block-area-series.component.mjs +8 -16
  18. package/esm2022/chart/chart-container/series/block-horizontal-series/block-horizontal-series.component.mjs +9 -18
  19. package/esm2022/chart/chart-container/series/block-series/block-series.component.mjs +9 -17
  20. package/esm2022/chart/chart-container/series/line/line-series.component.mjs +6 -9
  21. package/esm2022/chart/chart-container/series/linear-series-base.mjs +11 -29
  22. package/esm2022/chart/chart-container/series/scatter-series/scatter-series.component.mjs +7 -10
  23. package/esm2022/chart/chart-container/series-host/series-host.component.mjs +2 -3
  24. package/esm2022/chart/chart-container/tooltip/tooltip.component.mjs +9 -18
  25. package/esm2022/chart/chart-container/x-axis/x-axis.component.mjs +7 -8
  26. package/esm2022/chart/chart-container/y-axis/y-axis.component.mjs +8 -13
  27. package/esm2022/chart/core/axis/axis.mjs +3 -5
  28. package/esm2022/chart/core/axis/builders/axis-size-builder.mjs +2 -2
  29. package/esm2022/chart/core/axis/builders/extremes-builder.mjs +4 -6
  30. package/esm2022/chart/core/utils/generate-ticks.mjs +2 -4
  31. package/esm2022/chart/core/utils/get-text-width.mjs +1 -1
  32. package/esm2022/chart/core/utils/position-util.mjs +6 -14
  33. package/esm2022/chart/default/default-chart-config.mjs +8 -8
  34. package/esm2022/chart/default/default-series-config.mjs +3 -3
  35. package/esm2022/chart/default/defaultSeriesTypeMapping.mjs +1 -1
  36. package/esm2022/chart/directives/brushable.directive.mjs +20 -46
  37. package/esm2022/chart/directives/draggable-point.directive.mjs +20 -18
  38. package/esm2022/chart/directives/zoomable.directive.mjs +15 -35
  39. package/esm2022/chart/legend/legend.component.mjs +5 -5
  40. package/esm2022/chart/model/annotation.mjs +1 -1
  41. package/esm2022/chart/model/chart-bounds.mjs +1 -1
  42. package/esm2022/chart/model/enum/align.enum.mjs +1 -1
  43. package/esm2022/chart/model/enum/axis-orientation.mjs +1 -1
  44. package/esm2022/chart/model/enum/clip-points-direction.mjs +1 -1
  45. package/esm2022/chart/model/enum/public-api.mjs +1 -1
  46. package/esm2022/chart/model/enum/scale-type.mjs +1 -1
  47. package/esm2022/chart/model/enum/series-type.mjs +1 -1
  48. package/esm2022/chart/model/enum/vertical-align.enum.mjs +1 -1
  49. package/esm2022/chart/model/enum/zoom-behavior-type.mjs +1 -1
  50. package/esm2022/chart/model/i-broadcast-message.mjs +1 -1
  51. package/esm2022/chart/model/i-chart-config.mjs +1 -1
  52. package/esm2022/chart/model/marker-options.mjs +1 -1
  53. package/esm2022/chart/model/plot-band.mjs +2 -3
  54. package/esm2022/chart/model/plot-line.mjs +1 -1
  55. package/esm2022/chart/model/public-api.mjs +1 -1
  56. package/esm2022/chart/model/series.mjs +1 -1
  57. package/esm2022/chart/model/tooltip-options.mjs +1 -1
  58. package/esm2022/chart/service/broadcast.service.mjs +1 -1
  59. package/esm2022/chart/service/brush.service.mjs +1 -1
  60. package/esm2022/chart/service/chart.service.mjs +24 -35
  61. package/esm2022/chart/service/scale.service.mjs +14 -26
  62. package/esm2022/chart/service/zoom.service.mjs +10 -8
  63. package/esm2022/index.mjs +1 -1
  64. package/esm2022/observable/zoneObservable.mjs +4 -4
  65. package/fesm2022/tetacom-svg-charts.mjs +250 -474
  66. package/fesm2022/tetacom-svg-charts.mjs.map +1 -1
  67. package/package.json +4 -4
@@ -23,19 +23,13 @@ export class BlockAreaSeriesComponent extends SeriesBaseComponent {
23
23
  this.id = (Date.now() + Math.random()).toString(36);
24
24
  }
25
25
  ngOnInit() {
26
- this.x = this.scaleService.scales.pipe(map(_ => _.x.get(this.series.xAxisIndex)?.scale));
27
- this.y = this.scaleService.scales.pipe(map(_ => _.y.get(this.series.yAxisIndex)?.scale));
28
- this.displayPoints = this.y.pipe(filter(y => y), map(y => {
26
+ this.x = this.scaleService.scales.pipe(map((_) => _.x.get(this.series.xAxisIndex)?.scale));
27
+ this.y = this.scaleService.scales.pipe(map((_) => _.y.get(this.series.yAxisIndex)?.scale));
28
+ this.displayPoints = this.y.pipe(filter((y) => y), map((y) => {
29
29
  return this.series.data.filter((point, index, arr) => {
30
30
  const [min, max] = y.domain();
31
- return ((point.y >= min ||
32
- point.y1 >= min ||
33
- arr[index + 1]?.y >= min ||
34
- arr[index + 1]?.y1 >= min) &&
35
- (point.y <= max ||
36
- point.y1 <= max ||
37
- arr[index - 1]?.y <= max ||
38
- arr[index - 1]?.y1 <= max));
31
+ return ((point.y >= min || point.y1 >= min || arr[index + 1]?.y >= min || arr[index + 1]?.y1 >= min) &&
32
+ (point.y <= max || point.y1 <= max || arr[index - 1]?.y <= max || arr[index - 1]?.y1 <= max));
39
33
  });
40
34
  }));
41
35
  }
@@ -53,12 +47,10 @@ export class BlockAreaSeriesComponent extends SeriesBaseComponent {
53
47
  });
54
48
  }
55
49
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: BlockAreaSeriesComponent, deps: [{ token: i1.ChartService }, { token: i0.ChangeDetectorRef }, { token: i2.ScaleService }, { token: i3.ZoomService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
56
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: BlockAreaSeriesComponent, isStandalone: true, selector: "svg:svg[teta-block-area-series]", usesInheritance: true, ngImport: i0, template: "@if ({\n y: y | async,\n x: x | async,\n points: displayPoints | async\n}; as data) {\n @if (series?.fillType === fillType.gradient) {\n <svg:defs>\n <svg:linearGradient [id]=\"'gradient-fill-' + id\"\n gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted ? '100%' : '0%'\"\n y2=\"0%\">\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.9\"></svg:stop>\n </svg:linearGradient>\n </svg:defs>\n }\n @if (data.x && data.y) {\n @for (point of data.points; track point) {\n <svg:g (mouseenter)=\"mouseenter(point)\"\n (mouseleave)=\"mouseleave(point)\">\n @if (!!config.inverted) {\n <svg:rect\n [attr.x]=\"data.x(0) < data.x(point.x) ? data.x(0) : data.x(point.x)\"\n [attr.y]=\"data.y(point.y)\"\n [attr.height]=\"Math.abs(data.y(point.y1) - data.y(point.y))\"\n [attr.width]=\"data.x(0) < data.x(point.x) ? data.x(point.x) - data.x(0) : data.x(0) - data.x(point.x)\"\n [attr.stroke]=\"point.iconId ? '' : point.color ?? series.style?.stroke ?? series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n [attr.fill]=\"series.fillType === fillType.gradient ? 'url(#gradient-fill-'+id+')' : point.iconId ? 'url(#pattern'+point.iconId+')' : point.color ?? series.style?.fill ?? series.color\"\n [attr.fill-opacity]=\"series.style?.fillOpacity\">\n </svg:rect>\n } @else {\n <svg:rect\n [attr.x]=\"data.x(point.x)\"\n [attr.y]=\"data.y(0)\"\n [attr.height]=\"Math.abs(data.y(0) - data.y(point.y))\"\n [attr.width]=\"data.x(point.x1) - data.x(point.x)\"\n [attr.stroke]=\"point.iconId ? '' : point.color ?? series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n [attr.fill]=\"series.fillType === fillType.gradient ? 'url(#gradient-fill-'+id+')' : point.iconId ? 'url(#pattern'+point.iconId+')' : point.color ?? series.color\"\n [attr.fill-opacity]=\"series.style?.fillOpacity\">\n </svg:rect>\n }\n @if (point.text) {\n <svg:text x=\"50%\"\n fill=\"var(--color-text-50)\"\n [attr.y]=\"(data.y(point.y1) + data.y(point.y)) / 2\"\n alignment-baseline=\"middle\"\n text-anchor=\"middle\">{{ point.text }}\n </svg:text>\n }\n </svg:g>\n }\n }\n}\n", styles: [""], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
50
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: BlockAreaSeriesComponent, isStandalone: true, selector: "svg:svg[teta-block-area-series]", usesInheritance: true, ngImport: i0, template: "@if ({ y: y | async, x: x | async, points: displayPoints | async }; as data) { @if (series?.fillType ===\nfillType.gradient) {\n<svg:defs>\n <svg:linearGradient\n [id]=\"'gradient-fill-' + id\"\n gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted ? '100%' : '0%'\"\n y2=\"0%\"\n >\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.9\"></svg:stop>\n </svg:linearGradient>\n</svg:defs>\n} @if (data.x && data.y) { @for (point of data.points; track point) {\n<svg:g (mouseenter)=\"mouseenter(point)\" (mouseleave)=\"mouseleave(point)\">\n @if (!!config.inverted) {\n <svg:rect\n [attr.x]=\"data.x(0) < data.x(point.x) ? data.x(0) : data.x(point.x)\"\n [attr.y]=\"data.y(point.y)\"\n [attr.height]=\"Math.abs(data.y(point.y1) - data.y(point.y))\"\n [attr.width]=\"data.x(0) < data.x(point.x) ? data.x(point.x) - data.x(0) : data.x(0) - data.x(point.x)\"\n [attr.stroke]=\"point.iconId ? '' : point.color ?? series.style?.stroke ?? series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n [attr.fill]=\"\n series.fillType === fillType.gradient\n ? 'url(#gradient-fill-' + id + ')'\n : point.iconId\n ? 'url(#pattern' + point.iconId + ')'\n : point.color ?? series.style?.fill ?? series.color\n \"\n [attr.fill-opacity]=\"series.style?.fillOpacity\"\n ></svg:rect>\n } @else {\n <svg:rect\n [attr.x]=\"data.x(point.x)\"\n [attr.y]=\"data.y(0)\"\n [attr.height]=\"Math.abs(data.y(0) - data.y(point.y))\"\n [attr.width]=\"data.x(point.x1) - data.x(point.x)\"\n [attr.stroke]=\"point.iconId ? '' : point.color ?? series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n [attr.fill]=\"\n series.fillType === fillType.gradient\n ? 'url(#gradient-fill-' + id + ')'\n : point.iconId\n ? 'url(#pattern' + point.iconId + ')'\n : point.color ?? series.color\n \"\n [attr.fill-opacity]=\"series.style?.fillOpacity\"\n ></svg:rect>\n } @if (point.text) {\n <svg:text\n x=\"50%\"\n fill=\"var(--color-text-50)\"\n [attr.y]=\"(data.y(point.y1) + data.y(point.y)) / 2\"\n alignment-baseline=\"middle\"\n text-anchor=\"middle\"\n >\n {{ point.text }}\n </svg:text>\n }\n</svg:g>\n} } }\n", styles: [""], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
57
51
  }
58
52
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: BlockAreaSeriesComponent, decorators: [{
59
53
  type: Component,
60
- args: [{ selector: 'svg:svg[teta-block-area-series]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
61
- AsyncPipe,
62
- ], template: "@if ({\n y: y | async,\n x: x | async,\n points: displayPoints | async\n}; as data) {\n @if (series?.fillType === fillType.gradient) {\n <svg:defs>\n <svg:linearGradient [id]=\"'gradient-fill-' + id\"\n gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted ? '100%' : '0%'\"\n y2=\"0%\">\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.9\"></svg:stop>\n </svg:linearGradient>\n </svg:defs>\n }\n @if (data.x && data.y) {\n @for (point of data.points; track point) {\n <svg:g (mouseenter)=\"mouseenter(point)\"\n (mouseleave)=\"mouseleave(point)\">\n @if (!!config.inverted) {\n <svg:rect\n [attr.x]=\"data.x(0) < data.x(point.x) ? data.x(0) : data.x(point.x)\"\n [attr.y]=\"data.y(point.y)\"\n [attr.height]=\"Math.abs(data.y(point.y1) - data.y(point.y))\"\n [attr.width]=\"data.x(0) < data.x(point.x) ? data.x(point.x) - data.x(0) : data.x(0) - data.x(point.x)\"\n [attr.stroke]=\"point.iconId ? '' : point.color ?? series.style?.stroke ?? series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n [attr.fill]=\"series.fillType === fillType.gradient ? 'url(#gradient-fill-'+id+')' : point.iconId ? 'url(#pattern'+point.iconId+')' : point.color ?? series.style?.fill ?? series.color\"\n [attr.fill-opacity]=\"series.style?.fillOpacity\">\n </svg:rect>\n } @else {\n <svg:rect\n [attr.x]=\"data.x(point.x)\"\n [attr.y]=\"data.y(0)\"\n [attr.height]=\"Math.abs(data.y(0) - data.y(point.y))\"\n [attr.width]=\"data.x(point.x1) - data.x(point.x)\"\n [attr.stroke]=\"point.iconId ? '' : point.color ?? series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n [attr.fill]=\"series.fillType === fillType.gradient ? 'url(#gradient-fill-'+id+')' : point.iconId ? 'url(#pattern'+point.iconId+')' : point.color ?? series.color\"\n [attr.fill-opacity]=\"series.style?.fillOpacity\">\n </svg:rect>\n }\n @if (point.text) {\n <svg:text x=\"50%\"\n fill=\"var(--color-text-50)\"\n [attr.y]=\"(data.y(point.y1) + data.y(point.y)) / 2\"\n alignment-baseline=\"middle\"\n text-anchor=\"middle\">{{ point.text }}\n </svg:text>\n }\n </svg:g>\n }\n }\n}\n" }]
54
+ args: [{ selector: 'svg:svg[teta-block-area-series]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AsyncPipe], template: "@if ({ y: y | async, x: x | async, points: displayPoints | async }; as data) { @if (series?.fillType ===\nfillType.gradient) {\n<svg:defs>\n <svg:linearGradient\n [id]=\"'gradient-fill-' + id\"\n gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted ? '100%' : '0%'\"\n y2=\"0%\"\n >\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.9\"></svg:stop>\n </svg:linearGradient>\n</svg:defs>\n} @if (data.x && data.y) { @for (point of data.points; track point) {\n<svg:g (mouseenter)=\"mouseenter(point)\" (mouseleave)=\"mouseleave(point)\">\n @if (!!config.inverted) {\n <svg:rect\n [attr.x]=\"data.x(0) < data.x(point.x) ? data.x(0) : data.x(point.x)\"\n [attr.y]=\"data.y(point.y)\"\n [attr.height]=\"Math.abs(data.y(point.y1) - data.y(point.y))\"\n [attr.width]=\"data.x(0) < data.x(point.x) ? data.x(point.x) - data.x(0) : data.x(0) - data.x(point.x)\"\n [attr.stroke]=\"point.iconId ? '' : point.color ?? series.style?.stroke ?? series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n [attr.fill]=\"\n series.fillType === fillType.gradient\n ? 'url(#gradient-fill-' + id + ')'\n : point.iconId\n ? 'url(#pattern' + point.iconId + ')'\n : point.color ?? series.style?.fill ?? series.color\n \"\n [attr.fill-opacity]=\"series.style?.fillOpacity\"\n ></svg:rect>\n } @else {\n <svg:rect\n [attr.x]=\"data.x(point.x)\"\n [attr.y]=\"data.y(0)\"\n [attr.height]=\"Math.abs(data.y(0) - data.y(point.y))\"\n [attr.width]=\"data.x(point.x1) - data.x(point.x)\"\n [attr.stroke]=\"point.iconId ? '' : point.color ?? series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n [attr.fill]=\"\n series.fillType === fillType.gradient\n ? 'url(#gradient-fill-' + id + ')'\n : point.iconId\n ? 'url(#pattern' + point.iconId + ')'\n : point.color ?? series.color\n \"\n [attr.fill-opacity]=\"series.style?.fillOpacity\"\n ></svg:rect>\n } @if (point.text) {\n <svg:text\n x=\"50%\"\n fill=\"var(--color-text-50)\"\n [attr.y]=\"(data.y(point.y1) + data.y(point.y)) / 2\"\n alignment-baseline=\"middle\"\n text-anchor=\"middle\"\n >\n {{ point.text }}\n </svg:text>\n }\n</svg:g>\n} } }\n" }]
63
55
  }], ctorParameters: () => [{ type: i1.ChartService }, { type: i0.ChangeDetectorRef }, { type: i2.ScaleService }, { type: i3.ZoomService }, { type: i0.ElementRef }] });
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stYXJlYS1zZXJpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvYmxvY2stYXJlYS1zZXJpZXMvYmxvY2stYXJlYS1zZXJpZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvYmxvY2stYXJlYS1zZXJpZXMvYmxvY2stYXJlYS1zZXJpZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsR0FFWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUUvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUUxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztBQVk1QyxNQUFNLE9BQU8sd0JBQ1gsU0FBUSxtQkFBc0I7SUFTOUIsWUFDcUIsR0FBaUIsRUFDakIsR0FBc0IsRUFDdEIsWUFBMEIsRUFDMUIsV0FBd0IsRUFDeEIsT0FBbUI7UUFFdEMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQU5qQyxRQUFHLEdBQUgsR0FBRyxDQUFjO1FB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LFdBQ3RDO3dCQUNQLFNBQVM7cUJBQ1YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNlcmllc0Jhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9iYXNlL3Nlcmllcy1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCYXNlUG9pbnQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbC9iYXNlLXBvaW50JztcbmltcG9ydCB7IEZpbGxUeXBlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWwvZW51bS9maWxsLXR5cGUnO1xuaW1wb3J0IHsgQ2hhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9jaGFydC5zZXJ2aWNlJztcbmltcG9ydCB7IFNjYWxlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2Uvc2NhbGUuc2VydmljZSc7XG5pbXBvcnQgeyBab29tU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2Uvem9vbS5zZXJ2aWNlJztcbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N2ZzpzdmdbdGV0YS1ibG9jay1hcmVhLXNlcmllc10nLFxuICB0ZW1wbGF0ZVVybDogJy4vYmxvY2stYXJlYS1zZXJpZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ibG9jay1hcmVhLXNlcmllcy5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIEFzeW5jUGlwZSxcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBCbG9ja0FyZWFTZXJpZXNDb21wb25lbnQ8VCBleHRlbmRzIEJhc2VQb2ludD5cbiAgZXh0ZW5kcyBTZXJpZXNCYXNlQ29tcG9uZW50PFQ+XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0XG57XG4gIHg6IE9ic2VydmFibGU8YW55PjtcbiAgeTogT2JzZXJ2YWJsZTxhbnk+O1xuICBkaXNwbGF5UG9pbnRzOiBPYnNlcnZhYmxlPEJhc2VQb2ludFtdPjtcbiAgZmlsbFR5cGUgPSBGaWxsVHlwZTtcbiAgaWQ6IHN0cmluZztcbiAgTWF0aCA9IE1hdGg7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBzdmM6IENoYXJ0U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2NhbGVTZXJ2aWNlOiBTY2FsZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHpvb21TZXJ2aWNlOiBab29tU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZWxlbWVudDogRWxlbWVudFJlZlxuICApIHtcbiAgICBzdXBlcihzdmMsIGNkciwgc2NhbGVTZXJ2aWNlLCB6b29tU2VydmljZSwgZWxlbWVudCk7XG4gICAgdGhpcy5pZCA9IChEYXRlLm5vdygpICsgTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMzYpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy54ID0gdGhpcy5zY2FsZVNlcnZpY2Uuc2NhbGVzLnBpcGUoXG4gICAgICBtYXAoXyA9PiBfLnguZ2V0KHRoaXMuc2VyaWVzLnhBeGlzSW5kZXgpPy5zY2FsZSlcbiAgICApO1xuICAgIHRoaXMueSA9IHRoaXMuc2NhbGVTZXJ2aWNlLnNjYWxlcy5waXBlKFxuICAgICAgbWFwKF8gPT4gXy55LmdldCh0aGlzLnNlcmllcy55QXhpc0luZGV4KT8uc2NhbGUpXG4gICAgKTtcblxuICAgIHRoaXMuZGlzcGxheVBvaW50cyA9IHRoaXMueS5waXBlKFxuICAgICAgZmlsdGVyKHkgPT4geSksXG4gICAgICBtYXAoeSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcmllcy5kYXRhLmZpbHRlcigocG9pbnQsIGluZGV4LCBhcnIpID0+IHtcbiAgICAgICAgICBjb25zdCBbbWluLCBtYXhdID0geS5kb21haW4oKTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHBvaW50LnkgPj0gbWluIHx8XG4gICAgICAgICAgICAgIHBvaW50LnkxID49IG1pbiB8fFxuICAgICAgICAgICAgICBhcnJbaW5kZXggKyAxXT8ueSA+PSBtaW4gfHxcbiAgICAgICAgICAgICAgYXJyW2luZGV4ICsgMV0/LnkxID49IG1pbikgJiZcbiAgICAgICAgICAgIChwb2ludC55IDw9IG1heCB8fFxuICAgICAgICAgICAgICBwb2ludC55MSA8PSBtYXggfHxcbiAgICAgICAgICAgICAgYXJyW2luZGV4IC0gMV0/LnkgPD0gbWF4IHx8XG4gICAgICAgICAgICAgIGFycltpbmRleCAtIDFdPy55MSA8PSBtYXgpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7fVxuXG4gIG1vdXNlZW50ZXIocG9pbnQ6IEJhc2VQb2ludCkge1xuICAgIHRoaXMuc3ZjLnNldFRvb2x0aXAoe1xuICAgICAgcG9pbnQ6IHBvaW50LFxuICAgICAgc2VyaWVzOiB0aGlzLnNlcmllcyxcbiAgICB9KTtcbiAgfVxuXG4gIG1vdXNlbGVhdmUocG9pbnQ6IEJhc2VQb2ludCkge1xuICAgIHRoaXMuc3ZjLnNldFRvb2x0aXAoe1xuICAgICAgcG9pbnQ6IG51bGwsXG4gICAgICBzZXJpZXM6IHRoaXMuc2VyaWVzLFxuICAgIH0pO1xuICB9XG59XG4iLCJAaWYgKHtcbiAgeTogeSB8IGFzeW5jLFxuICB4OiB4IHwgYXN5bmMsXG4gIHBvaW50czogZGlzcGxheVBvaW50cyB8IGFzeW5jXG59OyBhcyBkYXRhKSB7XG4gIEBpZiAoc2VyaWVzPy5maWxsVHlwZSA9PT0gZmlsbFR5cGUuZ3JhZGllbnQpIHtcbiAgICA8c3ZnOmRlZnM+XG4gICAgICA8c3ZnOmxpbmVhckdyYWRpZW50IFtpZF09XCInZ3JhZGllbnQtZmlsbC0nICsgaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB4MT1cIjAlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIueTFdPVwiY29uZmlnPy5pbnZlcnRlZCA/ICcwJScgOiAnMTAwJSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci54Ml09XCJjb25maWc/LmludmVydGVkID8gJzEwMCUnIDogJzAlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHkyPVwiMCVcIj5cbiAgICAgICAgPHN2ZzpzdG9wIG9mZnNldD1cIjAlXCIgW2F0dHIuc3RvcC1jb2xvcl09XCJzZXJpZXMuc3R5bGU/LmZpbGwgPz8gc2VyaWVzLmNvbG9yXCIgc3RvcC1vcGFjaXR5PVwiMFwiPjwvc3ZnOnN0b3A+XG4gICAgICAgIDxzdmc6c3RvcCBvZmZzZXQ9XCI1JVwiIFthdHRyLnN0b3AtY29sb3JdPVwic2VyaWVzLnN0eWxlPy5maWxsID8/IHNlcmllcy5jb2xvclwiIHN0b3Atb3BhY2l0eT1cIjAuMVwiPjwvc3ZnOnN0b3A+XG4gICAgICAgIDxzdmc6c3RvcCBvZmZzZXQ9XCIyMCVcIiBbYXR0ci5zdG9wLWNvbG9yXT1cInNlcmllcy5zdHlsZT8uZmlsbCA/PyBzZXJpZXMuY29sb3JcIiBzdG9wLW9wYWNpdHk9XCIwLjJcIj48L3N2ZzpzdG9wPlxuICAgICAgICA8c3ZnOnN0b3Agb2Zmc2V0PVwiNjAlXCIgW2F0dHIuc3RvcC1jb2xvcl09XCJzZXJpZXMuc3R5bGU/LmZpbGwgPz8gc2VyaWVzLmNvbG9yXCIgc3RvcC1vcGFjaXR5PVwiMC41XCI+PC9zdmc6c3RvcD5cbiAgICAgICAgPHN2ZzpzdG9wIG9mZnNldD1cIjEwMCVcIiBbYXR0ci5zdG9wLWNvbG9yXT1cInNlcmllcy5zdHlsZT8uZmlsbCA/PyBzZXJpZXMuY29sb3JcIiBzdG9wLW9wYWNpdHk9XCIwLjlcIj48L3N2ZzpzdG9wPlxuICAgICAgPC9zdmc6bGluZWFyR3JhZGllbnQ+XG4gICAgPC9zdmc6ZGVmcz5cbiAgfVxuICBAaWYgKGRhdGEueCAmJiBkYXRhLnkpIHtcbiAgICBAZm9yIChwb2ludCBvZiBkYXRhLnBvaW50czsgdHJhY2sgcG9pbnQpIHtcbiAgICAgIDxzdmc6ZyAobW91c2VlbnRlcik9XCJtb3VzZWVudGVyKHBvaW50KVwiXG4gICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwibW91c2VsZWF2ZShwb2ludClcIj5cbiAgICAgICAgQGlmICghIWNvbmZpZy5pbnZlcnRlZCkge1xuICAgICAgICAgIDxzdmc6cmVjdFxuICAgICAgICAgICAgW2F0dHIueF09XCJkYXRhLngoMCkgPCBkYXRhLngocG9pbnQueCkgPyBkYXRhLngoMCkgOiBkYXRhLngocG9pbnQueClcIlxuICAgICAgICAgICAgW2F0dHIueV09XCJkYXRhLnkocG9pbnQueSlcIlxuICAgICAgICAgICAgW2F0dHIuaGVpZ2h0XT1cIk1hdGguYWJzKGRhdGEueShwb2ludC55MSkgLSBkYXRhLnkocG9pbnQueSkpXCJcbiAgICAgICAgICAgIFthdHRyLndpZHRoXT1cImRhdGEueCgwKSA8IGRhdGEueChwb2ludC54KSA/IGRhdGEueChwb2ludC54KSAtIGRhdGEueCgwKSA6IGRhdGEueCgwKSAtIGRhdGEueChwb2ludC54KVwiXG4gICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwicG9pbnQuaWNvbklkID8gJycgOiBwb2ludC5jb2xvciA/PyBzZXJpZXMuc3R5bGU/LnN0cm9rZSA/PyBzZXJpZXMuY29sb3JcIlxuICAgICAgICAgICAgW2F0dHIuc3Ryb2tlLWRhc2hhcnJheV09XCJzZXJpZXMuc3R5bGU/LnN0cm9rZURhc2hhcnJheVwiXG4gICAgICAgICAgICBbYXR0ci5zdHJva2Utd2lkdGhdPVwic2VyaWVzLnN0eWxlPy5zdHJva2VXaWR0aFwiXG4gICAgICAgICAgICBbYXR0ci5maWxsXT1cInNlcmllcy5maWxsVHlwZSA9PT0gZmlsbFR5cGUuZ3JhZGllbnQgPyAndXJsKCNncmFkaWVudC1maWxsLScraWQrJyknIDogcG9pbnQuaWNvbklkID8gJ3VybCgjcGF0dGVybicrcG9pbnQuaWNvbklkKycpJyA6IHBvaW50LmNvbG9yID8/IHNlcmllcy5zdHlsZT8uZmlsbCA/PyBzZXJpZXMuY29sb3JcIlxuICAgICAgICAgICAgW2F0dHIuZmlsbC1vcGFjaXR5XT1cInNlcmllcy5zdHlsZT8uZmlsbE9wYWNpdHlcIj5cbiAgICAgICAgICA8L3N2ZzpyZWN0PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8c3ZnOnJlY3RcbiAgICAgICAgICAgIFthdHRyLnhdPVwiZGF0YS54KHBvaW50LngpXCJcbiAgICAgICAgICAgIFthdHRyLnldPVwiZGF0YS55KDApXCJcbiAgICAgICAgICAgIFthdHRyLmhlaWdodF09XCJNYXRoLmFicyhkYXRhLnkoMCkgLSBkYXRhLnkocG9pbnQueSkpXCJcbiAgICAgICAgICAgIFthdHRyLndpZHRoXT1cImRhdGEueChwb2ludC54MSkgLSBkYXRhLngocG9pbnQueClcIlxuICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInBvaW50Lmljb25JZCA/ICcnIDogcG9pbnQuY29sb3IgPz8gc2VyaWVzLmNvbG9yXCJcbiAgICAgICAgICAgIFthdHRyLnN0cm9rZS1kYXNoYXJyYXldPVwic2VyaWVzLnN0eWxlPy5zdHJva2VEYXNoYXJyYXlcIlxuICAgICAgICAgICAgW2F0dHIuc3Ryb2tlLXdpZHRoXT1cInNlcmllcy5zdHlsZT8uc3Ryb2tlV2lkdGhcIlxuICAgICAgICAgICAgW2F0dHIuZmlsbF09XCJzZXJpZXMuZmlsbFR5cGUgPT09IGZpbGxUeXBlLmdyYWRpZW50ID8gJ3VybCgjZ3JhZGllbnQtZmlsbC0nK2lkKycpJyA6IHBvaW50Lmljb25JZCA/ICd1cmwoI3BhdHRlcm4nK3BvaW50Lmljb25JZCsnKScgOiBwb2ludC5jb2xvciA/PyBzZXJpZXMuY29sb3JcIlxuICAgICAgICAgICAgW2F0dHIuZmlsbC1vcGFjaXR5XT1cInNlcmllcy5zdHlsZT8uZmlsbE9wYWNpdHlcIj5cbiAgICAgICAgICA8L3N2ZzpyZWN0PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAocG9pbnQudGV4dCkge1xuICAgICAgICAgIDxzdmc6dGV4dCB4PVwiNTAlXCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cInZhcigtLWNvbG9yLXRleHQtNTApXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIueV09XCIoZGF0YS55KHBvaW50LnkxKSArIGRhdGEueShwb2ludC55KSkgLyAyXCJcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50LWJhc2VsaW5lPVwibWlkZGxlXCJcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1hbmNob3I9XCJtaWRkbGVcIj57eyBwb2ludC50ZXh0IH19XG4gICAgICAgICAgPC9zdmc6dGV4dD5cbiAgICAgICAgfVxuICAgICAgPC9zdmc6Zz5cbiAgICB9XG4gIH1cbn1cbiJdfQ==
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stYXJlYS1zZXJpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvYmxvY2stYXJlYS1zZXJpZXMvYmxvY2stYXJlYS1zZXJpZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvYmxvY2stYXJlYS1zZXJpZXMvYmxvY2stYXJlYS1zZXJpZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsR0FFWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUUvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUUxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztBQVU1QyxNQUFNLE9BQU8sd0JBQ1gsU0FBUSxtQkFBc0I7SUFTOUIsWUFDcUIsR0FBaUIsRUFDakIsR0FBc0IsRUFDdEIsWUFBMEIsRUFDMUIsV0FBd0IsRUFDeEIsT0FBbUI7UUFFdEMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQU5qQyxRQUFHLEdBQUgsR0FBRyxDQUFjO1FB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QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNlcmllc0Jhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9iYXNlL3Nlcmllcy1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCYXNlUG9pbnQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbC9iYXNlLXBvaW50JztcbmltcG9ydCB7IEZpbGxUeXBlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWwvZW51bS9maWxsLXR5cGUnO1xuaW1wb3J0IHsgQ2hhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9jaGFydC5zZXJ2aWNlJztcbmltcG9ydCB7IFNjYWxlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2Uvc2NhbGUuc2VydmljZSc7XG5pbXBvcnQgeyBab29tU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2Uvem9vbS5zZXJ2aWNlJztcbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N2ZzpzdmdbdGV0YS1ibG9jay1hcmVhLXNlcmllc10nLFxuICB0ZW1wbGF0ZVVybDogJy4vYmxvY2stYXJlYS1zZXJpZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ibG9jay1hcmVhLXNlcmllcy5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0FzeW5jUGlwZV0sXG59KVxuZXhwb3J0IGNsYXNzIEJsb2NrQXJlYVNlcmllc0NvbXBvbmVudDxUIGV4dGVuZHMgQmFzZVBvaW50PlxuICBleHRlbmRzIFNlcmllc0Jhc2VDb21wb25lbnQ8VD5cbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXRcbntcbiAgeDogT2JzZXJ2YWJsZTxhbnk+O1xuICB5OiBPYnNlcnZhYmxlPGFueT47XG4gIGRpc3BsYXlQb2ludHM6IE9ic2VydmFibGU8QmFzZVBvaW50W10+O1xuICBmaWxsVHlwZSA9IEZpbGxUeXBlO1xuICBpZDogc3RyaW5nO1xuICBNYXRoID0gTWF0aDtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHN2YzogQ2hhcnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBzY2FsZVNlcnZpY2U6IFNjYWxlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgem9vbVNlcnZpY2U6IFpvb21TZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBlbGVtZW50OiBFbGVtZW50UmVmXG4gICkge1xuICAgIHN1cGVyKHN2YywgY2RyLCBzY2FsZVNlcnZpY2UsIHpvb21TZXJ2aWNlLCBlbGVtZW50KTtcbiAgICB0aGlzLmlkID0gKERhdGUubm93KCkgKyBNYXRoLnJhbmRvbSgpKS50b1N0cmluZygzNik7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnggPSB0aGlzLnNjYWxlU2VydmljZS5zY2FsZXMucGlwZShtYXAoKF8pID0+IF8ueC5nZXQodGhpcy5zZXJpZXMueEF4aXNJbmRleCk/LnNjYWxlKSk7XG4gICAgdGhpcy55ID0gdGhpcy5zY2FsZVNlcnZpY2Uuc2NhbGVzLnBpcGUobWFwKChfKSA9PiBfLnkuZ2V0KHRoaXMuc2VyaWVzLnlBeGlzSW5kZXgpPy5zY2FsZSkpO1xuXG4gICAgdGhpcy5kaXNwbGF5UG9pbnRzID0gdGhpcy55LnBpcGUoXG4gICAgICBmaWx0ZXIoKHkpID0+IHkpLFxuICAgICAgbWFwKCh5KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcmllcy5kYXRhLmZpbHRlcigocG9pbnQsIGluZGV4LCBhcnIpID0+IHtcbiAgICAgICAgICBjb25zdCBbbWluLCBtYXhdID0geS5kb21haW4oKTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHBvaW50LnkgPj0gbWluIHx8IHBvaW50LnkxID49IG1pbiB8fCBhcnJbaW5kZXggKyAxXT8ueSA+PSBtaW4gfHwgYXJyW2luZGV4ICsgMV0/LnkxID49IG1pbikgJiZcbiAgICAgICAgICAgIChwb2ludC55IDw9IG1heCB8fCBwb2ludC55MSA8PSBtYXggfHwgYXJyW2luZGV4IC0gMV0/LnkgPD0gbWF4IHx8IGFycltpbmRleCAtIDFdPy55MSA8PSBtYXgpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7fVxuXG4gIG1vdXNlZW50ZXIocG9pbnQ6IEJhc2VQb2ludCkge1xuICAgIHRoaXMuc3ZjLnNldFRvb2x0aXAoe1xuICAgICAgcG9pbnQ6IHBvaW50LFxuICAgICAgc2VyaWVzOiB0aGlzLnNlcmllcyxcbiAgICB9KTtcbiAgfVxuXG4gIG1vdXNlbGVhdmUocG9pbnQ6IEJhc2VQb2ludCkge1xuICAgIHRoaXMuc3ZjLnNldFRvb2x0aXAoe1xuICAgICAgcG9pbnQ6IG51bGwsXG4gICAgICBzZXJpZXM6IHRoaXMuc2VyaWVzLFxuICAgIH0pO1xuICB9XG59XG4iLCJAaWYgKHsgeTogeSB8IGFzeW5jLCB4OiB4IHwgYXN5bmMsIHBvaW50czogZGlzcGxheVBvaW50cyB8IGFzeW5jIH07IGFzIGRhdGEpIHsgQGlmIChzZXJpZXM/LmZpbGxUeXBlID09PVxuZmlsbFR5cGUuZ3JhZGllbnQpIHtcbjxzdmc6ZGVmcz5cbiAgPHN2ZzpsaW5lYXJHcmFkaWVudFxuICAgIFtpZF09XCInZ3JhZGllbnQtZmlsbC0nICsgaWRcIlxuICAgIGdyYWRpZW50VW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiXG4gICAgeDE9XCIwJVwiXG4gICAgW2F0dHIueTFdPVwiY29uZmlnPy5pbnZlcnRlZCA/ICcwJScgOiAnMTAwJSdcIlxuICAgIFthdHRyLngyXT1cImNvbmZpZz8uaW52ZXJ0ZWQgPyAnMTAwJScgOiAnMCUnXCJcbiAgICB5Mj1cIjAlXCJcbiAgPlxuICAgIDxzdmc6c3RvcCBvZmZzZXQ9XCIwJVwiIFthdHRyLnN0b3AtY29sb3JdPVwic2VyaWVzLnN0eWxlPy5maWxsID8/IHNlcmllcy5jb2xvclwiIHN0b3Atb3BhY2l0eT1cIjBcIj48L3N2ZzpzdG9wPlxuICAgIDxzdmc6c3RvcCBvZmZzZXQ9XCI1JVwiIFthdHRyLnN0b3AtY29sb3JdPVwic2VyaWVzLnN0eWxlPy5maWxsID8/IHNlcmllcy5jb2xvclwiIHN0b3Atb3BhY2l0eT1cIjAuMVwiPjwvc3ZnOnN0b3A+XG4gICAgPHN2ZzpzdG9wIG9mZnNldD1cIjIwJVwiIFthdHRyLnN0b3AtY29sb3JdPVwic2VyaWVzLnN0eWxlPy5maWxsID8/IHNlcmllcy5jb2xvclwiIHN0b3Atb3BhY2l0eT1cIjAuMlwiPjwvc3ZnOnN0b3A+XG4gICAgPHN2ZzpzdG9wIG9mZnNldD1cIjYwJVwiIFthdHRyLnN0b3AtY29sb3JdPVwic2VyaWVzLnN0eWxlPy5maWxsID8/IHNlcmllcy5jb2xvclwiIHN0b3Atb3BhY2l0eT1cIjAuNVwiPjwvc3ZnOnN0b3A+XG4gICAgPHN2ZzpzdG9wIG9mZnNldD1cIjEwMCVcIiBbYXR0ci5zdG9wLWNvbG9yXT1cInNlcmllcy5zdHlsZT8uZmlsbCA/PyBzZXJpZXMuY29sb3JcIiBzdG9wLW9wYWNpdHk9XCIwLjlcIj48L3N2ZzpzdG9wPlxuICA8L3N2ZzpsaW5lYXJHcmFkaWVudD5cbjwvc3ZnOmRlZnM+XG59IEBpZiAoZGF0YS54ICYmIGRhdGEueSkgeyBAZm9yIChwb2ludCBvZiBkYXRhLnBvaW50czsgdHJhY2sgcG9pbnQpIHtcbjxzdmc6ZyAobW91c2VlbnRlcik9XCJtb3VzZWVudGVyKHBvaW50KVwiIChtb3VzZWxlYXZlKT1cIm1vdXNlbGVhdmUocG9pbnQpXCI+XG4gIEBpZiAoISFjb25maWcuaW52ZXJ0ZWQpIHtcbiAgPHN2ZzpyZWN0XG4gICAgW2F0dHIueF09XCJkYXRhLngoMCkgPCBkYXRhLngocG9pbnQueCkgPyBkYXRhLngoMCkgOiBkYXRhLngocG9pbnQueClcIlxuICAgIFthdHRyLnldPVwiZGF0YS55KHBvaW50LnkpXCJcbiAgICBbYXR0ci5oZWlnaHRdPVwiTWF0aC5hYnMoZGF0YS55KHBvaW50LnkxKSAtIGRhdGEueShwb2ludC55KSlcIlxuICAgIFthdHRyLndpZHRoXT1cImRhdGEueCgwKSA8IGRhdGEueChwb2ludC54KSA/IGRhdGEueChwb2ludC54KSAtIGRhdGEueCgwKSA6IGRhdGEueCgwKSAtIGRhdGEueChwb2ludC54KVwiXG4gICAgW2F0dHIuc3Ryb2tlXT1cInBvaW50Lmljb25JZCA/ICcnIDogcG9pbnQuY29sb3IgPz8gc2VyaWVzLnN0eWxlPy5zdHJva2UgPz8gc2VyaWVzLmNvbG9yXCJcbiAgICBbYXR0ci5zdHJva2UtZGFzaGFycmF5XT1cInNlcmllcy5zdHlsZT8uc3Ryb2tlRGFzaGFycmF5XCJcbiAgICBbYXR0ci5zdHJva2Utd2lkdGhdPVwic2VyaWVzLnN0eWxlPy5zdHJva2VXaWR0aFwiXG4gICAgW2F0dHIuZmlsbF09XCJcbiAgICAgIHNlcmllcy5maWxsVHlwZSA9PT0gZmlsbFR5cGUuZ3JhZGllbnRcbiAgICAgICAgPyAndXJsKCNncmFkaWVudC1maWxsLScgKyBpZCArICcpJ1xuICAgICAgICA6IHBvaW50Lmljb25JZFxuICAgICAgICA/ICd1cmwoI3BhdHRlcm4nICsgcG9pbnQuaWNvbklkICsgJyknXG4gICAgICAgIDogcG9pbnQuY29sb3IgPz8gc2VyaWVzLnN0eWxlPy5maWxsID8/IHNlcmllcy5jb2xvclxuICAgIFwiXG4gICAgW2F0dHIuZmlsbC1vcGFjaXR5XT1cInNlcmllcy5zdHlsZT8uZmlsbE9wYWNpdHlcIlxuICA+PC9zdmc6cmVjdD5cbiAgfSBAZWxzZSB7XG4gIDxzdmc6cmVjdFxuICAgIFthdHRyLnhdPVwiZGF0YS54KHBvaW50LngpXCJcbiAgICBbYXR0ci55XT1cImRhdGEueSgwKVwiXG4gICAgW2F0dHIuaGVpZ2h0XT1cIk1hdGguYWJzKGRhdGEueSgwKSAtIGRhdGEueShwb2ludC55KSlcIlxuICAgIFthdHRyLndpZHRoXT1cImRhdGEueChwb2ludC54MSkgLSBkYXRhLngocG9pbnQueClcIlxuICAgIFthdHRyLnN0cm9rZV09XCJwb2ludC5pY29uSWQgPyAnJyA6IHBvaW50LmNvbG9yID8/IHNlcmllcy5jb2xvclwiXG4gICAgW2F0dHIuc3Ryb2tlLWRhc2hhcnJheV09XCJzZXJpZXMuc3R5bGU/LnN0cm9rZURhc2hhcnJheVwiXG4gICAgW2F0dHIuc3Ryb2tlLXdpZHRoXT1cInNlcmllcy5zdHlsZT8uc3Ryb2tlV2lkdGhcIlxuICAgIFthdHRyLmZpbGxdPVwiXG4gICAgICBzZXJpZXMuZmlsbFR5cGUgPT09IGZpbGxUeXBlLmdyYWRpZW50XG4gICAgICAgID8gJ3VybCgjZ3JhZGllbnQtZmlsbC0nICsgaWQgKyAnKSdcbiAgICAgICAgOiBwb2ludC5pY29uSWRcbiAgICAgICAgPyAndXJsKCNwYXR0ZXJuJyArIHBvaW50Lmljb25JZCArICcpJ1xuICAgICAgICA6IHBvaW50LmNvbG9yID8/IHNlcmllcy5jb2xvclxuICAgIFwiXG4gICAgW2F0dHIuZmlsbC1vcGFjaXR5XT1cInNlcmllcy5zdHlsZT8uZmlsbE9wYWNpdHlcIlxuICA+PC9zdmc6cmVjdD5cbiAgfSBAaWYgKHBvaW50LnRleHQpIHtcbiAgPHN2Zzp0ZXh0XG4gICAgeD1cIjUwJVwiXG4gICAgZmlsbD1cInZhcigtLWNvbG9yLXRleHQtNTApXCJcbiAgICBbYXR0ci55XT1cIihkYXRhLnkocG9pbnQueTEpICsgZGF0YS55KHBvaW50LnkpKSAvIDJcIlxuICAgIGFsaWdubWVudC1iYXNlbGluZT1cIm1pZGRsZVwiXG4gICAgdGV4dC1hbmNob3I9XCJtaWRkbGVcIlxuICA+XG4gICAge3sgcG9pbnQudGV4dCB9fVxuICA8L3N2Zzp0ZXh0PlxuICB9XG48L3N2ZzpnPlxufSB9IH1cbiJdfQ==
@@ -1,4 +1,4 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef } from '@angular/core';
2
2
  import { filter, map } from 'rxjs';
3
3
  import { SeriesBaseComponent } from '../../../base/series-base.component';
4
4
  import { FillType } from '../../../model/enum/fill-type';
@@ -23,19 +23,13 @@ export class BlockHorizontalSeriesComponent extends SeriesBaseComponent {
23
23
  this.id = (Date.now() + Math.random()).toString(36);
24
24
  }
25
25
  ngOnInit() {
26
- this.x = this.scaleService.scales.pipe(map(_ => _.x.get(this.series.xAxisIndex)?.scale));
27
- this.y = this.scaleService.scales.pipe(map(_ => _.y.get(this.series.yAxisIndex)?.scale));
28
- this.displayPoints = this.x.pipe(filter(y => y), map(y => {
26
+ this.x = this.scaleService.scales.pipe(map((_) => _.x.get(this.series.xAxisIndex)?.scale));
27
+ this.y = this.scaleService.scales.pipe(map((_) => _.y.get(this.series.yAxisIndex)?.scale));
28
+ this.displayPoints = this.x.pipe(filter((y) => y), map((y) => {
29
29
  return this.series.data.filter((point, index, arr) => {
30
30
  const [min, max] = y.domain();
31
- return ((point.x >= min ||
32
- point.x1 >= min ||
33
- arr[index + 1]?.x >= min ||
34
- arr[index + 1]?.x1 >= min) &&
35
- (point.x <= max ||
36
- point.x1 <= max ||
37
- arr[index - 1]?.x <= max ||
38
- arr[index - 1]?.x1 <= max));
31
+ return ((point.x >= min || point.x1 >= min || arr[index + 1]?.x >= min || arr[index + 1]?.x1 >= min) &&
32
+ (point.x <= max || point.x1 <= max || arr[index - 1]?.x <= max || arr[index - 1]?.x1 <= max));
39
33
  });
40
34
  }));
41
35
  }
@@ -52,13 +46,10 @@ export class BlockHorizontalSeriesComponent extends SeriesBaseComponent {
52
46
  });
53
47
  }
54
48
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: BlockHorizontalSeriesComponent, deps: [{ token: i1.ChartService }, { token: i0.ChangeDetectorRef }, { token: i2.ScaleService }, { token: i3.ZoomService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
55
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: BlockHorizontalSeriesComponent, isStandalone: true, selector: "svg:svg[teta-block-horizontal-series]", usesInheritance: true, ngImport: i0, template: "@if ({\n y: y | async,\n x: x | async,\n points: displayPoints | async\n}; as data) {\n @if (series?.fillType === fillType.gradient) {\n <svg:defs>\n <svg:linearGradient [id]=\"'gradient-fill-' + id\" gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted ? '100%' : '0%'\"\n y2=\"0%\">\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.9\"></svg:stop>\n </svg:linearGradient>\n </svg:defs>\n }\n @if (data.x && data.y) {\n @for (point of data.points; track point) {\n <svg:g (mouseenter)=\"mouseenter(point)\"\n (mouseleave)=\"mouseleave(point)\">\n <svg:rect\n x=\"0\"\n [attr.x]=\"data.x(point.x)\"\n [attr.width]=\"Math.abs(data.x(point.x1) - data.x(point.x))\"\n [attr.fill]=\"series.fillType === fillType.gradient ? 'url(#gradient-fill-'+id+')' : point.iconId ? 'url(#pattern'+point.iconId+')' : point.color ?? series.style?.fill ?? series.color\"\n [attr.fill-opacity]=\"series.style?.fillOpacity\"\n height=\"100%\">\n </svg:rect>\n @if (point.text && data.x(point.x1) - data.x(point.x) > 8) {\n <svg:text [attr.transform]=\"'rotate(270)'\"\n [ngStyle]='{\"transform-origin\": (data.x(point.x1) + data.x(point.x)) / 2+\"px 50%\"}'\n y=\"50%\"\n [attr.x]=\"(data.x(point.x1) + data.x(point.x)) / 2\"\n text-anchor=\"middle\" alignment-baseline=\"middle\"\n text-anchor=\"middle\">{{ point.text }}\n </svg:text>\n }\n <svg:line y1=\"0\" y2=\"100%\" [attr.x1]=\"data.x(point.x)\" [attr.x2]=\"data.x(point.x)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"></svg:line>\n <svg:line y1=\"0\" y2=\"100%\" [attr.x1]=\"data.x(point.x1)\" [attr.x2]=\"data.x(point.x1)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"></svg:line>\n </svg:g>\n }\n }\n}\n", styles: [""], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
49
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: BlockHorizontalSeriesComponent, isStandalone: true, selector: "svg:svg[teta-block-horizontal-series]", usesInheritance: true, ngImport: i0, template: "@if ({ y: y | async, x: x | async, points: displayPoints | async }; as data) { @if (series?.fillType ===\nfillType.gradient) {\n<svg:defs>\n <svg:linearGradient\n [id]=\"'gradient-fill-' + id\"\n gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted ? '100%' : '0%'\"\n y2=\"0%\"\n >\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.9\"></svg:stop>\n </svg:linearGradient>\n</svg:defs>\n} @if (data.x && data.y) { @for (point of data.points; track point) {\n<svg:g (mouseenter)=\"mouseenter(point)\" (mouseleave)=\"mouseleave(point)\">\n <svg:rect\n x=\"0\"\n [attr.x]=\"data.x(point.x)\"\n [attr.width]=\"Math.abs(data.x(point.x1) - data.x(point.x))\"\n [attr.fill]=\"\n series.fillType === fillType.gradient\n ? 'url(#gradient-fill-' + id + ')'\n : point.iconId\n ? 'url(#pattern' + point.iconId + ')'\n : point.color ?? series.style?.fill ?? series.color\n \"\n [attr.fill-opacity]=\"series.style?.fillOpacity\"\n height=\"100%\"\n ></svg:rect>\n @if (point.text && data.x(point.x1) - data.x(point.x) > 8) {\n <svg:text\n [attr.transform]=\"'rotate(270)'\"\n [ngStyle]=\"{ 'transform-origin': (data.x(point.x1) + data.x(point.x)) / 2 + 'px 50%' }\"\n y=\"50%\"\n [attr.x]=\"(data.x(point.x1) + data.x(point.x)) / 2\"\n text-anchor=\"middle\"\n alignment-baseline=\"middle\"\n text-anchor=\"middle\"\n >\n {{ point.text }}\n </svg:text>\n }\n <svg:line\n y1=\"0\"\n y2=\"100%\"\n [attr.x1]=\"data.x(point.x)\"\n [attr.x2]=\"data.x(point.x)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"\n ></svg:line>\n <svg:line\n y1=\"0\"\n y2=\"100%\"\n [attr.x1]=\"data.x(point.x1)\"\n [attr.x2]=\"data.x(point.x1)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"\n ></svg:line>\n</svg:g>\n} } }\n", styles: [""], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
56
50
  }
57
51
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: BlockHorizontalSeriesComponent, decorators: [{
58
52
  type: Component,
59
- args: [{ selector: 'svg:svg[teta-block-horizontal-series]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
60
- AsyncPipe,
61
- NgStyle,
62
- ], template: "@if ({\n y: y | async,\n x: x | async,\n points: displayPoints | async\n}; as data) {\n @if (series?.fillType === fillType.gradient) {\n <svg:defs>\n <svg:linearGradient [id]=\"'gradient-fill-' + id\" gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted ? '100%' : '0%'\"\n y2=\"0%\">\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.9\"></svg:stop>\n </svg:linearGradient>\n </svg:defs>\n }\n @if (data.x && data.y) {\n @for (point of data.points; track point) {\n <svg:g (mouseenter)=\"mouseenter(point)\"\n (mouseleave)=\"mouseleave(point)\">\n <svg:rect\n x=\"0\"\n [attr.x]=\"data.x(point.x)\"\n [attr.width]=\"Math.abs(data.x(point.x1) - data.x(point.x))\"\n [attr.fill]=\"series.fillType === fillType.gradient ? 'url(#gradient-fill-'+id+')' : point.iconId ? 'url(#pattern'+point.iconId+')' : point.color ?? series.style?.fill ?? series.color\"\n [attr.fill-opacity]=\"series.style?.fillOpacity\"\n height=\"100%\">\n </svg:rect>\n @if (point.text && data.x(point.x1) - data.x(point.x) > 8) {\n <svg:text [attr.transform]=\"'rotate(270)'\"\n [ngStyle]='{\"transform-origin\": (data.x(point.x1) + data.x(point.x)) / 2+\"px 50%\"}'\n y=\"50%\"\n [attr.x]=\"(data.x(point.x1) + data.x(point.x)) / 2\"\n text-anchor=\"middle\" alignment-baseline=\"middle\"\n text-anchor=\"middle\">{{ point.text }}\n </svg:text>\n }\n <svg:line y1=\"0\" y2=\"100%\" [attr.x1]=\"data.x(point.x)\" [attr.x2]=\"data.x(point.x)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"></svg:line>\n <svg:line y1=\"0\" y2=\"100%\" [attr.x1]=\"data.x(point.x1)\" [attr.x2]=\"data.x(point.x1)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"></svg:line>\n </svg:g>\n }\n }\n}\n" }]
53
+ args: [{ selector: 'svg:svg[teta-block-horizontal-series]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AsyncPipe, NgStyle], template: "@if ({ y: y | async, x: x | async, points: displayPoints | async }; as data) { @if (series?.fillType ===\nfillType.gradient) {\n<svg:defs>\n <svg:linearGradient\n [id]=\"'gradient-fill-' + id\"\n gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted ? '100%' : '0%'\"\n y2=\"0%\"\n >\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.9\"></svg:stop>\n </svg:linearGradient>\n</svg:defs>\n} @if (data.x && data.y) { @for (point of data.points; track point) {\n<svg:g (mouseenter)=\"mouseenter(point)\" (mouseleave)=\"mouseleave(point)\">\n <svg:rect\n x=\"0\"\n [attr.x]=\"data.x(point.x)\"\n [attr.width]=\"Math.abs(data.x(point.x1) - data.x(point.x))\"\n [attr.fill]=\"\n series.fillType === fillType.gradient\n ? 'url(#gradient-fill-' + id + ')'\n : point.iconId\n ? 'url(#pattern' + point.iconId + ')'\n : point.color ?? series.style?.fill ?? series.color\n \"\n [attr.fill-opacity]=\"series.style?.fillOpacity\"\n height=\"100%\"\n ></svg:rect>\n @if (point.text && data.x(point.x1) - data.x(point.x) > 8) {\n <svg:text\n [attr.transform]=\"'rotate(270)'\"\n [ngStyle]=\"{ 'transform-origin': (data.x(point.x1) + data.x(point.x)) / 2 + 'px 50%' }\"\n y=\"50%\"\n [attr.x]=\"(data.x(point.x1) + data.x(point.x)) / 2\"\n text-anchor=\"middle\"\n alignment-baseline=\"middle\"\n text-anchor=\"middle\"\n >\n {{ point.text }}\n </svg:text>\n }\n <svg:line\n y1=\"0\"\n y2=\"100%\"\n [attr.x1]=\"data.x(point.x)\"\n [attr.x2]=\"data.x(point.x)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"\n ></svg:line>\n <svg:line\n y1=\"0\"\n y2=\"100%\"\n [attr.x1]=\"data.x(point.x1)\"\n [attr.x2]=\"data.x(point.x1)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"\n ></svg:line>\n</svg:g>\n} } }\n" }]
63
54
  }], ctorParameters: () => [{ type: i1.ChartService }, { type: i0.ChangeDetectorRef }, { type: i2.ScaleService }, { type: i3.ZoomService }, { type: i0.ElementRef }] });
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2staG9yaXpvbnRhbC1zZXJpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvYmxvY2staG9yaXpvbnRhbC1zZXJpZXMvYmxvY2staG9yaXpvbnRhbC1zZXJpZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvYmxvY2staG9yaXpvbnRhbC1zZXJpZXMvYmxvY2staG9yaXpvbnRhbC1zZXJpZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsR0FFWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUUvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUUxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFhckQsTUFBTSxPQUFPLDhCQUNYLFNBQVEsbUJBQXNCO0lBVTlCLFlBQ3FCLEdBQWlCLEVBQ2pCLEdBQXNCLEVBQ3RCLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLE9BQW1CO1FBRXRDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFOakMsUUFBRyxHQUFILEdBQUcsQ0FBYztRQUNqQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBVHhDLGFBQVEsR0FBRyxRQUFRLENBQUM7UUFFcEIsU0FBSSxHQUFHLElBQUksQ0FBQztRQVVWLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFUSxRQUFRO1FBQ2YsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3BDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQ2pELENBQUM7UUFDRixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDcEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FDakQsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzlCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDbkQsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzlCLE9BQU8sQ0FDTCxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRztvQkFDYixLQUFLLENBQUMsRUFBRSxJQUFJLEdBQUc7b0JBQ2YsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRztvQkFDeEIsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDO29CQUM1QixDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRzt3QkFDYixLQUFLLENBQUMsRUFBRSxJQUFJLEdBQUc7d0JBQ2YsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRzt3QkFDeEIsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDLENBQzdCLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWdCO1FBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1lBQ2xCLEtBQUssRUFBRSxLQUFLO1lBQ1osTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3BCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBZ0I7UUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFDbEIsS0FBSyxFQUFFLElBQUk7WUFDWCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0E5RFUsOEJBQThCO2tHQUE5Qiw4QkFBOEIsd0hDNUIzQyw4dUZBaURBLHFERHpCSSxTQUFTLDhDQUNULE9BQU87OzJGQUdFLDhCQUE4QjtrQkFYMUMsU0FBUzsrQkFDRSx1Q0FBdUMsY0FHckMsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLFNBQVM7d0JBQ1QsT0FBTztxQkFDUiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2VyaWVzQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Jhc2Uvc2VyaWVzLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IEJhc2VQb2ludCB9IGZyb20gJy4uLy4uLy4uL21vZGVsL2Jhc2UtcG9pbnQnO1xuaW1wb3J0IHsgRmlsbFR5cGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbC9lbnVtL2ZpbGwtdHlwZSc7XG5pbXBvcnQgeyBDaGFydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL2NoYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NhbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9zY2FsZS5zZXJ2aWNlJztcbmltcG9ydCB7IFpvb21TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS96b29tLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ1N0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3ZnOnN2Z1t0ZXRhLWJsb2NrLWhvcml6b250YWwtc2VyaWVzXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9ibG9jay1ob3Jpem9udGFsLXNlcmllcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Jsb2NrLWhvcml6b250YWwtc2VyaWVzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgQXN5bmNQaXBlLFxuICAgIE5nU3R5bGUsXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQmxvY2tIb3Jpem9udGFsU2VyaWVzQ29tcG9uZW50PFQgZXh0ZW5kcyBCYXNlUG9pbnQ+XG4gIGV4dGVuZHMgU2VyaWVzQmFzZUNvbXBvbmVudDxUPlxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICB4OiBPYnNlcnZhYmxlPGFueT47XG4gIHk6IE9ic2VydmFibGU8YW55PjtcbiAgZGlzcGxheVBvaW50czogT2JzZXJ2YWJsZTxCYXNlUG9pbnRbXT47XG4gIGZpbGxUeXBlID0gRmlsbFR5cGU7XG4gIGlkOiBzdHJpbmc7XG4gIE1hdGggPSBNYXRoO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBzdmM6IENoYXJ0U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2NhbGVTZXJ2aWNlOiBTY2FsZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHpvb21TZXJ2aWNlOiBab29tU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZWxlbWVudDogRWxlbWVudFJlZlxuICApIHtcbiAgICBzdXBlcihzdmMsIGNkciwgc2NhbGVTZXJ2aWNlLCB6b29tU2VydmljZSwgZWxlbWVudCk7XG4gICAgdGhpcy5pZCA9IChEYXRlLm5vdygpICsgTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMzYpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy54ID0gdGhpcy5zY2FsZVNlcnZpY2Uuc2NhbGVzLnBpcGUoXG4gICAgICBtYXAoXyA9PiBfLnguZ2V0KHRoaXMuc2VyaWVzLnhBeGlzSW5kZXgpPy5zY2FsZSlcbiAgICApO1xuICAgIHRoaXMueSA9IHRoaXMuc2NhbGVTZXJ2aWNlLnNjYWxlcy5waXBlKFxuICAgICAgbWFwKF8gPT4gXy55LmdldCh0aGlzLnNlcmllcy55QXhpc0luZGV4KT8uc2NhbGUpXG4gICAgKTtcblxuICAgIHRoaXMuZGlzcGxheVBvaW50cyA9IHRoaXMueC5waXBlKFxuICAgICAgZmlsdGVyKHkgPT4geSksXG4gICAgICBtYXAoeSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcmllcy5kYXRhLmZpbHRlcigocG9pbnQsIGluZGV4LCBhcnIpID0+IHtcbiAgICAgICAgICBjb25zdCBbbWluLCBtYXhdID0geS5kb21haW4oKTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHBvaW50LnggPj0gbWluIHx8XG4gICAgICAgICAgICAgIHBvaW50LngxID49IG1pbiB8fFxuICAgICAgICAgICAgICBhcnJbaW5kZXggKyAxXT8ueCA+PSBtaW4gfHxcbiAgICAgICAgICAgICAgYXJyW2luZGV4ICsgMV0/LngxID49IG1pbikgJiZcbiAgICAgICAgICAgIChwb2ludC54IDw9IG1heCB8fFxuICAgICAgICAgICAgICBwb2ludC54MSA8PSBtYXggfHxcbiAgICAgICAgICAgICAgYXJyW2luZGV4IC0gMV0/LnggPD0gbWF4IHx8XG4gICAgICAgICAgICAgIGFycltpbmRleCAtIDFdPy54MSA8PSBtYXgpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBtb3VzZWVudGVyKHBvaW50OiBCYXNlUG9pbnQpIHtcbiAgICB0aGlzLnN2Yy5zZXRUb29sdGlwKHtcbiAgICAgIHBvaW50OiBwb2ludCxcbiAgICAgIHNlcmllczogdGhpcy5zZXJpZXMsXG4gICAgfSk7XG4gIH1cblxuICBtb3VzZWxlYXZlKHBvaW50OiBCYXNlUG9pbnQpIHtcbiAgICB0aGlzLnN2Yy5zZXRUb29sdGlwKHtcbiAgICAgIHBvaW50OiBudWxsLFxuICAgICAgc2VyaWVzOiB0aGlzLnNlcmllcyxcbiAgICB9KTtcbiAgfVxufVxuIiwiQGlmICh7XG4gIHk6IHkgfCBhc3luYyxcbiAgeDogeCB8IGFzeW5jLFxuICBwb2ludHM6IGRpc3BsYXlQb2ludHMgfCBhc3luY1xufTsgYXMgZGF0YSkge1xuICBAaWYgKHNlcmllcz8uZmlsbFR5cGUgPT09IGZpbGxUeXBlLmdyYWRpZW50KSB7XG4gICAgPHN2ZzpkZWZzPlxuICAgICAgPHN2ZzpsaW5lYXJHcmFkaWVudCBbaWRdPVwiJ2dyYWRpZW50LWZpbGwtJyArIGlkXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeDE9XCIwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnkxXT1cImNvbmZpZz8uaW52ZXJ0ZWQgPyAnMCUnIDogJzEwMCUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIueDJdPVwiY29uZmlnPy5pbnZlcnRlZCA/ICcxMDAlJyA6ICcwJSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB5Mj1cIjAlXCI+XG4gICAgICAgIDxzdmc6c3RvcCBvZmZzZXQ9XCIwJVwiIFthdHRyLnN0b3AtY29sb3JdPVwic2VyaWVzLnN0eWxlPy5maWxsID8/IHNlcmllcy5jb2xvclwiIHN0b3Atb3BhY2l0eT1cIjBcIj48L3N2ZzpzdG9wPlxuICAgICAgICA8c3ZnOnN0b3Agb2Zmc2V0PVwiNSVcIiBbYXR0ci5zdG9wLWNvbG9yXT1cInNlcmllcy5zdHlsZT8uZmlsbCA/PyBzZXJpZXMuY29sb3JcIiBzdG9wLW9wYWNpdHk9XCIwLjFcIj48L3N2ZzpzdG9wPlxuICAgICAgICA8c3ZnOnN0b3Agb2Zmc2V0PVwiMjAlXCIgW2F0dHIuc3RvcC1jb2xvcl09XCJzZXJpZXMuc3R5bGU/LmZpbGwgPz8gc2VyaWVzLmNvbG9yXCIgc3RvcC1vcGFjaXR5PVwiMC4yXCI+PC9zdmc6c3RvcD5cbiAgICAgICAgPHN2ZzpzdG9wIG9mZnNldD1cIjYwJVwiIFthdHRyLnN0b3AtY29sb3JdPVwic2VyaWVzLnN0eWxlPy5maWxsID8/IHNlcmllcy5jb2xvclwiIHN0b3Atb3BhY2l0eT1cIjAuNVwiPjwvc3ZnOnN0b3A+XG4gICAgICAgIDxzdmc6c3RvcCBvZmZzZXQ9XCIxMDAlXCIgW2F0dHIuc3RvcC1jb2xvcl09XCJzZXJpZXMuc3R5bGU/LmZpbGwgPz8gc2VyaWVzLmNvbG9yXCIgc3RvcC1vcGFjaXR5PVwiMC45XCI+PC9zdmc6c3RvcD5cbiAgICAgIDwvc3ZnOmxpbmVhckdyYWRpZW50PlxuICAgIDwvc3ZnOmRlZnM+XG4gIH1cbiAgQGlmIChkYXRhLnggJiYgZGF0YS55KSB7XG4gICAgQGZvciAocG9pbnQgb2YgZGF0YS5wb2ludHM7IHRyYWNrIHBvaW50KSB7XG4gICAgICA8c3ZnOmcgKG1vdXNlZW50ZXIpPVwibW91c2VlbnRlcihwb2ludClcIlxuICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm1vdXNlbGVhdmUocG9pbnQpXCI+XG4gICAgICAgIDxzdmc6cmVjdFxuICAgICAgICAgIHg9XCIwXCJcbiAgICAgICAgICBbYXR0ci54XT1cImRhdGEueChwb2ludC54KVwiXG4gICAgICAgICAgW2F0dHIud2lkdGhdPVwiTWF0aC5hYnMoZGF0YS54KHBvaW50LngxKSAtIGRhdGEueChwb2ludC54KSlcIlxuICAgICAgICAgIFthdHRyLmZpbGxdPVwic2VyaWVzLmZpbGxUeXBlID09PSBmaWxsVHlwZS5ncmFkaWVudCA/ICd1cmwoI2dyYWRpZW50LWZpbGwtJytpZCsnKScgOiBwb2ludC5pY29uSWQgPyAndXJsKCNwYXR0ZXJuJytwb2ludC5pY29uSWQrJyknIDogcG9pbnQuY29sb3IgPz8gc2VyaWVzLnN0eWxlPy5maWxsID8/IHNlcmllcy5jb2xvclwiXG4gICAgICAgICAgW2F0dHIuZmlsbC1vcGFjaXR5XT1cInNlcmllcy5zdHlsZT8uZmlsbE9wYWNpdHlcIlxuICAgICAgICAgIGhlaWdodD1cIjEwMCVcIj5cbiAgICAgICAgPC9zdmc6cmVjdD5cbiAgICAgICAgQGlmIChwb2ludC50ZXh0ICYmIGRhdGEueChwb2ludC54MSkgLSBkYXRhLngocG9pbnQueCkgPiA4KSB7XG4gICAgICAgICAgPHN2Zzp0ZXh0IFthdHRyLnRyYW5zZm9ybV09XCIncm90YXRlKDI3MCknXCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPSd7XCJ0cmFuc2Zvcm0tb3JpZ2luXCI6IChkYXRhLngocG9pbnQueDEpICsgZGF0YS54KHBvaW50LngpKSAvIDIrXCJweCA1MCVcIn0nXG4gICAgICAgICAgICAgICAgICAgIHk9XCI1MCVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci54XT1cIihkYXRhLngocG9pbnQueDEpICsgZGF0YS54KHBvaW50LngpKSAvIDJcIlxuICAgICAgICAgICAgICAgICAgICB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiIGFsaWdubWVudC1iYXNlbGluZT1cIm1pZGRsZVwiXG4gICAgICAgICAgICAgICAgICAgIHRleHQtYW5jaG9yPVwibWlkZGxlXCI+e3sgcG9pbnQudGV4dCB9fVxuICAgICAgICAgIDwvc3ZnOnRleHQ+XG4gICAgICAgIH1cbiAgICAgICAgPHN2ZzpsaW5lIHkxPVwiMFwiIHkyPVwiMTAwJVwiIFthdHRyLngxXT1cImRhdGEueChwb2ludC54KVwiIFthdHRyLngyXT1cImRhdGEueChwb2ludC54KVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwicG9pbnQuaWNvbklkID8gJ3ZhcigtLWNvbG9yLXRleHQtMTApJyA6IHBvaW50LmNvbG9yID8/IHNlcmllcy5zdHlsZT8uc3Ryb2tlID8/IHNlcmllcy5jb2xvclwiPjwvc3ZnOmxpbmU+XG4gICAgICAgIDxzdmc6bGluZSB5MT1cIjBcIiB5Mj1cIjEwMCVcIiBbYXR0ci54MV09XCJkYXRhLngocG9pbnQueDEpXCIgW2F0dHIueDJdPVwiZGF0YS54KHBvaW50LngxKVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwicG9pbnQuaWNvbklkID8gJ3ZhcigtLWNvbG9yLXRleHQtMTApJyA6IHBvaW50LmNvbG9yID8/IHNlcmllcy5zdHlsZT8uc3Ryb2tlID8/IHNlcmllcy5jb2xvclwiPjwvc3ZnOmxpbmU+XG4gICAgICA8L3N2ZzpnPlxuICAgIH1cbiAgfVxufVxuIl19
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2staG9yaXpvbnRhbC1zZXJpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvYmxvY2staG9yaXpvbnRhbC1zZXJpZXMvYmxvY2staG9yaXpvbnRhbC1zZXJpZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvYmxvY2staG9yaXpvbnRhbC1zZXJpZXMvYmxvY2staG9yaXpvbnRhbC1zZXJpZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDMUcsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFFL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFMUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBVXJELE1BQU0sT0FBTyw4QkFBb0QsU0FBUSxtQkFBc0I7SUFRN0YsWUFDcUIsR0FBaUIsRUFDakIsR0FBc0IsRUFDdEIsWUFBMEIsRUFDMUIsV0FBd0IsRUFDeEIsT0FBbUI7UUFFdEMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxPQUFP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LHVDQUF1QyxjQUdyQyxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2VyaWVzQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Jhc2Uvc2VyaWVzLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IEJhc2VQb2ludCB9IGZyb20gJy4uLy4uLy4uL21vZGVsL2Jhc2UtcG9pbnQnO1xuaW1wb3J0IHsgRmlsbFR5cGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbC9lbnVtL2ZpbGwtdHlwZSc7XG5pbXBvcnQgeyBDaGFydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL2NoYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NhbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9zY2FsZS5zZXJ2aWNlJztcbmltcG9ydCB7IFpvb21TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS96b29tLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ1N0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3ZnOnN2Z1t0ZXRhLWJsb2NrLWhvcml6b250YWwtc2VyaWVzXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9ibG9jay1ob3Jpem9udGFsLXNlcmllcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Jsb2NrLWhvcml6b250YWwtc2VyaWVzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbQXN5bmNQaXBlLCBOZ1N0eWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgQmxvY2tIb3Jpem9udGFsU2VyaWVzQ29tcG9uZW50PFQgZXh0ZW5kcyBCYXNlUG9pbnQ+IGV4dGVuZHMgU2VyaWVzQmFzZUNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHg6IE9ic2VydmFibGU8YW55PjtcbiAgeTogT2JzZXJ2YWJsZTxhbnk+O1xuICBkaXNwbGF5UG9pbnRzOiBPYnNlcnZhYmxlPEJhc2VQb2ludFtdPjtcbiAgZmlsbFR5cGUgPSBGaWxsVHlwZTtcbiAgaWQ6IHN0cmluZztcbiAgTWF0aCA9IE1hdGg7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHN2YzogQ2hhcnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBzY2FsZVNlcnZpY2U6IFNjYWxlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgem9vbVNlcnZpY2U6IFpvb21TZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBlbGVtZW50OiBFbGVtZW50UmVmXG4gICkge1xuICAgIHN1cGVyKHN2YywgY2RyLCBzY2FsZVNlcnZpY2UsIHpvb21TZXJ2aWNlLCBlbGVtZW50KTtcbiAgICB0aGlzLmlkID0gKERhdGUubm93KCkgKyBNYXRoLnJhbmRvbSgpKS50b1N0cmluZygzNik7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnggPSB0aGlzLnNjYWxlU2VydmljZS5zY2FsZXMucGlwZShtYXAoKF8pID0+IF8ueC5nZXQodGhpcy5zZXJpZXMueEF4aXNJbmRleCk/LnNjYWxlKSk7XG4gICAgdGhpcy55ID0gdGhpcy5zY2FsZVNlcnZpY2Uuc2NhbGVzLnBpcGUobWFwKChfKSA9PiBfLnkuZ2V0KHRoaXMuc2VyaWVzLnlBeGlzSW5kZXgpPy5zY2FsZSkpO1xuXG4gICAgdGhpcy5kaXNwbGF5UG9pbnRzID0gdGhpcy54LnBpcGUoXG4gICAgICBmaWx0ZXIoKHkpID0+IHkpLFxuICAgICAgbWFwKCh5KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcmllcy5kYXRhLmZpbHRlcigocG9pbnQsIGluZGV4LCBhcnIpID0+IHtcbiAgICAgICAgICBjb25zdCBbbWluLCBtYXhdID0geS5kb21haW4oKTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHBvaW50LnggPj0gbWluIHx8IHBvaW50LngxID49IG1pbiB8fCBhcnJbaW5kZXggKyAxXT8ueCA+PSBtaW4gfHwgYXJyW2luZGV4ICsgMV0/LngxID49IG1pbikgJiZcbiAgICAgICAgICAgIChwb2ludC54IDw9IG1heCB8fCBwb2ludC54MSA8PSBtYXggfHwgYXJyW2luZGV4IC0gMV0/LnggPD0gbWF4IHx8IGFycltpbmRleCAtIDFdPy54MSA8PSBtYXgpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBtb3VzZWVudGVyKHBvaW50OiBCYXNlUG9pbnQpIHtcbiAgICB0aGlzLnN2Yy5zZXRUb29sdGlwKHtcbiAgICAgIHBvaW50OiBwb2ludCxcbiAgICAgIHNlcmllczogdGhpcy5zZXJpZXMsXG4gICAgfSk7XG4gIH1cblxuICBtb3VzZWxlYXZlKHBvaW50OiBCYXNlUG9pbnQpIHtcbiAgICB0aGlzLnN2Yy5zZXRUb29sdGlwKHtcbiAgICAgIHBvaW50OiBudWxsLFxuICAgICAgc2VyaWVzOiB0aGlzLnNlcmllcyxcbiAgICB9KTtcbiAgfVxufVxuIiwiQGlmICh7IHk6IHkgfCBhc3luYywgeDogeCB8IGFzeW5jLCBwb2ludHM6IGRpc3BsYXlQb2ludHMgfCBhc3luYyB9OyBhcyBkYXRhKSB7IEBpZiAoc2VyaWVzPy5maWxsVHlwZSA9PT1cbmZpbGxUeXBlLmdyYWRpZW50KSB7XG48c3ZnOmRlZnM+XG4gIDxzdmc6bGluZWFyR3JhZGllbnRcbiAgICBbaWRdPVwiJ2dyYWRpZW50LWZpbGwtJyArIGlkXCJcbiAgICBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIlxuICAgIHgxPVwiMCVcIlxuICAgIFthdHRyLnkxXT1cImNvbmZpZz8uaW52ZXJ0ZWQgPyAnMCUnIDogJzEwMCUnXCJcbiAgICBbYXR0ci54Ml09XCJjb25maWc/LmludmVydGVkID8gJzEwMCUnIDogJzAlJ1wiXG4gICAgeTI9XCIwJVwiXG4gID5cbiAgICA8c3ZnOnN0b3Agb2Zmc2V0PVwiMCVcIiBbYXR0ci5zdG9wLWNvbG9yXT1cInNlcmllcy5zdHlsZT8uZmlsbCA/PyBzZXJpZXMuY29sb3JcIiBzdG9wLW9wYWNpdHk9XCIwXCI+PC9zdmc6c3RvcD5cbiAgICA8c3ZnOnN0b3Agb2Zmc2V0PVwiNSVcIiBbYXR0ci5zdG9wLWNvbG9yXT1cInNlcmllcy5zdHlsZT8uZmlsbCA/PyBzZXJpZXMuY29sb3JcIiBzdG9wLW9wYWNpdHk9XCIwLjFcIj48L3N2ZzpzdG9wPlxuICAgIDxzdmc6c3RvcCBvZmZzZXQ9XCIyMCVcIiBbYXR0ci5zdG9wLWNvbG9yXT1cInNlcmllcy5zdHlsZT8uZmlsbCA/PyBzZXJpZXMuY29sb3JcIiBzdG9wLW9wYWNpdHk9XCIwLjJcIj48L3N2ZzpzdG9wPlxuICAgIDxzdmc6c3RvcCBvZmZzZXQ9XCI2MCVcIiBbYXR0ci5zdG9wLWNvbG9yXT1cInNlcmllcy5zdHlsZT8uZmlsbCA/PyBzZXJpZXMuY29sb3JcIiBzdG9wLW9wYWNpdHk9XCIwLjVcIj48L3N2ZzpzdG9wPlxuICAgIDxzdmc6c3RvcCBvZmZzZXQ9XCIxMDAlXCIgW2F0dHIuc3RvcC1jb2xvcl09XCJzZXJpZXMuc3R5bGU/LmZpbGwgPz8gc2VyaWVzLmNvbG9yXCIgc3RvcC1vcGFjaXR5PVwiMC45XCI+PC9zdmc6c3RvcD5cbiAgPC9zdmc6bGluZWFyR3JhZGllbnQ+XG48L3N2ZzpkZWZzPlxufSBAaWYgKGRhdGEueCAmJiBkYXRhLnkpIHsgQGZvciAocG9pbnQgb2YgZGF0YS5wb2ludHM7IHRyYWNrIHBvaW50KSB7XG48c3ZnOmcgKG1vdXNlZW50ZXIpPVwibW91c2VlbnRlcihwb2ludClcIiAobW91c2VsZWF2ZSk9XCJtb3VzZWxlYXZlKHBvaW50KVwiPlxuICA8c3ZnOnJlY3RcbiAgICB4PVwiMFwiXG4gICAgW2F0dHIueF09XCJkYXRhLngocG9pbnQueClcIlxuICAgIFthdHRyLndpZHRoXT1cIk1hdGguYWJzKGRhdGEueChwb2ludC54MSkgLSBkYXRhLngocG9pbnQueCkpXCJcbiAgICBbYXR0ci5maWxsXT1cIlxuICAgICAgc2VyaWVzLmZpbGxUeXBlID09PSBmaWxsVHlwZS5ncmFkaWVudFxuICAgICAgICA/ICd1cmwoI2dyYWRpZW50LWZpbGwtJyArIGlkICsgJyknXG4gICAgICAgIDogcG9pbnQuaWNvbklkXG4gICAgICAgID8gJ3VybCgjcGF0dGVybicgKyBwb2ludC5pY29uSWQgKyAnKSdcbiAgICAgICAgOiBwb2ludC5jb2xvciA/PyBzZXJpZXMuc3R5bGU/LmZpbGwgPz8gc2VyaWVzLmNvbG9yXG4gICAgXCJcbiAgICBbYXR0ci5maWxsLW9wYWNpdHldPVwic2VyaWVzLnN0eWxlPy5maWxsT3BhY2l0eVwiXG4gICAgaGVpZ2h0PVwiMTAwJVwiXG4gID48L3N2ZzpyZWN0PlxuICBAaWYgKHBvaW50LnRleHQgJiYgZGF0YS54KHBvaW50LngxKSAtIGRhdGEueChwb2ludC54KSA+IDgpIHtcbiAgPHN2Zzp0ZXh0XG4gICAgW2F0dHIudHJhbnNmb3JtXT1cIidyb3RhdGUoMjcwKSdcIlxuICAgIFtuZ1N0eWxlXT1cInsgJ3RyYW5zZm9ybS1vcmlnaW4nOiAoZGF0YS54KHBvaW50LngxKSArIGRhdGEueChwb2ludC54KSkgLyAyICsgJ3B4IDUwJScgfVwiXG4gICAgeT1cIjUwJVwiXG4gICAgW2F0dHIueF09XCIoZGF0YS54KHBvaW50LngxKSArIGRhdGEueChwb2ludC54KSkgLyAyXCJcbiAgICB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiXG4gICAgYWxpZ25tZW50LWJhc2VsaW5lPVwibWlkZGxlXCJcbiAgICB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiXG4gID5cbiAgICB7eyBwb2ludC50ZXh0IH19XG4gIDwvc3ZnOnRleHQ+XG4gIH1cbiAgPHN2ZzpsaW5lXG4gICAgeTE9XCIwXCJcbiAgICB5Mj1cIjEwMCVcIlxuICAgIFthdHRyLngxXT1cImRhdGEueChwb2ludC54KVwiXG4gICAgW2F0dHIueDJdPVwiZGF0YS54KHBvaW50LngpXCJcbiAgICBbYXR0ci5zdHJva2VdPVwicG9pbnQuaWNvbklkID8gJ3ZhcigtLWNvbG9yLXRleHQtMTApJyA6IHBvaW50LmNvbG9yID8/IHNlcmllcy5zdHlsZT8uc3Ryb2tlID8/IHNlcmllcy5jb2xvclwiXG4gID48L3N2ZzpsaW5lPlxuICA8c3ZnOmxpbmVcbiAgICB5MT1cIjBcIlxuICAgIHkyPVwiMTAwJVwiXG4gICAgW2F0dHIueDFdPVwiZGF0YS54KHBvaW50LngxKVwiXG4gICAgW2F0dHIueDJdPVwiZGF0YS54KHBvaW50LngxKVwiXG4gICAgW2F0dHIuc3Ryb2tlXT1cInBvaW50Lmljb25JZCA/ICd2YXIoLS1jb2xvci10ZXh0LTEwKScgOiBwb2ludC5jb2xvciA/PyBzZXJpZXMuc3R5bGU/LnN0cm9rZSA/PyBzZXJpZXMuY29sb3JcIlxuICA+PC9zdmc6bGluZT5cbjwvc3ZnOmc+XG59IH0gfVxuIl19
@@ -1,4 +1,4 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef } from '@angular/core';
2
2
  import { filter, map } from 'rxjs';
3
3
  import { SeriesBaseComponent } from '../../../base/series-base.component';
4
4
  import { FillType } from '../../../model/enum/fill-type';
@@ -23,19 +23,13 @@ export class BlockSeriesComponent extends SeriesBaseComponent {
23
23
  this.id = (Date.now() + Math.random()).toString(36);
24
24
  }
25
25
  ngOnInit() {
26
- this.x = this.scaleService.scales.pipe(map(_ => _.x.get(this.series.xAxisIndex)?.scale));
27
- this.y = this.scaleService.scales.pipe(map(_ => _.y.get(this.series.yAxisIndex)?.scale));
28
- this.displayPoints = this.y.pipe(filter(y => y), map(y => {
26
+ this.x = this.scaleService.scales.pipe(map((_) => _.x.get(this.series.xAxisIndex)?.scale));
27
+ this.y = this.scaleService.scales.pipe(map((_) => _.y.get(this.series.yAxisIndex)?.scale));
28
+ this.displayPoints = this.y.pipe(filter((y) => y), map((y) => {
29
29
  return this.series.data.filter((point, index, arr) => {
30
30
  const [min, max] = y.domain();
31
- return ((point.y >= min ||
32
- point.y1 >= min ||
33
- arr[index + 1]?.y >= min ||
34
- arr[index + 1]?.y1 >= min) &&
35
- (point.y <= max ||
36
- point.y1 <= max ||
37
- arr[index - 1]?.y <= max ||
38
- arr[index - 1]?.y1 <= max));
31
+ return ((point.y >= min || point.y1 >= min || arr[index + 1]?.y >= min || arr[index + 1]?.y1 >= min) &&
32
+ (point.y <= max || point.y1 <= max || arr[index - 1]?.y <= max || arr[index - 1]?.y1 <= max));
39
33
  });
40
34
  }));
41
35
  }
@@ -52,12 +46,10 @@ export class BlockSeriesComponent extends SeriesBaseComponent {
52
46
  });
53
47
  }
54
48
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: BlockSeriesComponent, deps: [{ token: i1.ChartService }, { token: i0.ChangeDetectorRef }, { token: i2.ScaleService }, { token: i3.ZoomService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
55
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: BlockSeriesComponent, isStandalone: true, selector: "svg:svg[teta-block-series]", usesInheritance: true, ngImport: i0, template: "@if ({\n y: y | async,\n x: x | async,\n points: displayPoints | async\n}; as data) {\n @if (series?.fillType === fillType.gradient) {\n <svg:defs>\n <svg:linearGradient [id]=\"'gradient-fill-' + id\" gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted ? '100%' : '0%'\"\n y2=\"0%\">\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.9\"></svg:stop>\n </svg:linearGradient>\n </svg:defs>\n }\n @if (data.x && data.y) {\n @for (point of data.points; track point) {\n <svg:g (mouseenter)=\"mouseenter(point)\"\n (mouseleave)=\"mouseleave(point)\">\n <svg:rect\n x=\"0\"\n [attr.y]=\"data.y(point.y)\"\n [attr.height]=\"Math.abs(data.y(point.y1) - data.y(point.y))\"\n [attr.fill]=\"series.fillType === fillType.gradient ? 'url(#gradient-fill-'+id+')' : point.iconId ? 'url(#pattern'+point.iconId+')' : point.color ?? series.style?.fill ?? series.color\"\n [attr.fill-opacity]=\"series.style?.fillOpacity\"\n width=\"100%\">\n </svg:rect>\n @if (point.text && data.y(point.y1) - data.y(point.y) > 8) {\n <svg:text x=\"50%\"\n [attr.y]=\"(data.y(point.y1) + data.y(point.y)) / 2\"\n alignment-baseline=\"middle\"\n text-anchor=\"middle\">{{ point.text }}\n </svg:text>\n }\n <svg:line x1=\"0\" x2=\"100%\" [attr.y1]=\"data.y(point.y)\" [attr.y2]=\"data.y(point.y)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"></svg:line>\n <svg:line x1=\"0\" x2=\"100%\" [attr.y1]=\"data.y(point.y1)\" [attr.y2]=\"data.y(point.y1)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"></svg:line>\n </svg:g>\n }\n }\n}\n", styles: [""], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
49
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: BlockSeriesComponent, isStandalone: true, selector: "svg:svg[teta-block-series]", usesInheritance: true, ngImport: i0, template: "@if ({ y: y | async, x: x | async, points: displayPoints | async }; as data) { @if (series?.fillType ===\nfillType.gradient) {\n<svg:defs>\n <svg:linearGradient\n [id]=\"'gradient-fill-' + id\"\n gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted ? '100%' : '0%'\"\n y2=\"0%\"\n >\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.9\"></svg:stop>\n </svg:linearGradient>\n</svg:defs>\n} @if (data.x && data.y) { @for (point of data.points; track point) {\n<svg:g (mouseenter)=\"mouseenter(point)\" (mouseleave)=\"mouseleave(point)\">\n <svg:rect\n x=\"0\"\n [attr.y]=\"data.y(point.y)\"\n [attr.height]=\"Math.abs(data.y(point.y1) - data.y(point.y))\"\n [attr.fill]=\"\n series.fillType === fillType.gradient\n ? 'url(#gradient-fill-' + id + ')'\n : point.iconId\n ? 'url(#pattern' + point.iconId + ')'\n : point.color ?? series.style?.fill ?? series.color\n \"\n [attr.fill-opacity]=\"series.style?.fillOpacity\"\n width=\"100%\"\n ></svg:rect>\n @if (point.text && data.y(point.y1) - data.y(point.y) > 8) {\n <svg:text\n x=\"50%\"\n [attr.y]=\"(data.y(point.y1) + data.y(point.y)) / 2\"\n alignment-baseline=\"middle\"\n text-anchor=\"middle\"\n >\n {{ point.text }}\n </svg:text>\n }\n <svg:line\n x1=\"0\"\n x2=\"100%\"\n [attr.y1]=\"data.y(point.y)\"\n [attr.y2]=\"data.y(point.y)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"\n ></svg:line>\n <svg:line\n x1=\"0\"\n x2=\"100%\"\n [attr.y1]=\"data.y(point.y1)\"\n [attr.y2]=\"data.y(point.y1)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"\n ></svg:line>\n</svg:g>\n} } }\n", styles: [""], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
56
50
  }
57
51
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: BlockSeriesComponent, decorators: [{
58
52
  type: Component,
59
- args: [{ selector: 'svg:svg[teta-block-series]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
60
- AsyncPipe,
61
- ], template: "@if ({\n y: y | async,\n x: x | async,\n points: displayPoints | async\n}; as data) {\n @if (series?.fillType === fillType.gradient) {\n <svg:defs>\n <svg:linearGradient [id]=\"'gradient-fill-' + id\" gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted ? '100%' : '0%'\"\n y2=\"0%\">\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.9\"></svg:stop>\n </svg:linearGradient>\n </svg:defs>\n }\n @if (data.x && data.y) {\n @for (point of data.points; track point) {\n <svg:g (mouseenter)=\"mouseenter(point)\"\n (mouseleave)=\"mouseleave(point)\">\n <svg:rect\n x=\"0\"\n [attr.y]=\"data.y(point.y)\"\n [attr.height]=\"Math.abs(data.y(point.y1) - data.y(point.y))\"\n [attr.fill]=\"series.fillType === fillType.gradient ? 'url(#gradient-fill-'+id+')' : point.iconId ? 'url(#pattern'+point.iconId+')' : point.color ?? series.style?.fill ?? series.color\"\n [attr.fill-opacity]=\"series.style?.fillOpacity\"\n width=\"100%\">\n </svg:rect>\n @if (point.text && data.y(point.y1) - data.y(point.y) > 8) {\n <svg:text x=\"50%\"\n [attr.y]=\"(data.y(point.y1) + data.y(point.y)) / 2\"\n alignment-baseline=\"middle\"\n text-anchor=\"middle\">{{ point.text }}\n </svg:text>\n }\n <svg:line x1=\"0\" x2=\"100%\" [attr.y1]=\"data.y(point.y)\" [attr.y2]=\"data.y(point.y)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"></svg:line>\n <svg:line x1=\"0\" x2=\"100%\" [attr.y1]=\"data.y(point.y1)\" [attr.y2]=\"data.y(point.y1)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"></svg:line>\n </svg:g>\n }\n }\n}\n" }]
53
+ args: [{ selector: 'svg:svg[teta-block-series]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AsyncPipe], template: "@if ({ y: y | async, x: x | async, points: displayPoints | async }; as data) { @if (series?.fillType ===\nfillType.gradient) {\n<svg:defs>\n <svg:linearGradient\n [id]=\"'gradient-fill-' + id\"\n gradientUnits=\"userSpaceOnUse\"\n x1=\"0%\"\n [attr.y1]=\"config?.inverted ? '0%' : '100%'\"\n [attr.x2]=\"config?.inverted ? '100%' : '0%'\"\n y2=\"0%\"\n >\n <svg:stop offset=\"0%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0\"></svg:stop>\n <svg:stop offset=\"5%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.1\"></svg:stop>\n <svg:stop offset=\"20%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.2\"></svg:stop>\n <svg:stop offset=\"60%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.5\"></svg:stop>\n <svg:stop offset=\"100%\" [attr.stop-color]=\"series.style?.fill ?? series.color\" stop-opacity=\"0.9\"></svg:stop>\n </svg:linearGradient>\n</svg:defs>\n} @if (data.x && data.y) { @for (point of data.points; track point) {\n<svg:g (mouseenter)=\"mouseenter(point)\" (mouseleave)=\"mouseleave(point)\">\n <svg:rect\n x=\"0\"\n [attr.y]=\"data.y(point.y)\"\n [attr.height]=\"Math.abs(data.y(point.y1) - data.y(point.y))\"\n [attr.fill]=\"\n series.fillType === fillType.gradient\n ? 'url(#gradient-fill-' + id + ')'\n : point.iconId\n ? 'url(#pattern' + point.iconId + ')'\n : point.color ?? series.style?.fill ?? series.color\n \"\n [attr.fill-opacity]=\"series.style?.fillOpacity\"\n width=\"100%\"\n ></svg:rect>\n @if (point.text && data.y(point.y1) - data.y(point.y) > 8) {\n <svg:text\n x=\"50%\"\n [attr.y]=\"(data.y(point.y1) + data.y(point.y)) / 2\"\n alignment-baseline=\"middle\"\n text-anchor=\"middle\"\n >\n {{ point.text }}\n </svg:text>\n }\n <svg:line\n x1=\"0\"\n x2=\"100%\"\n [attr.y1]=\"data.y(point.y)\"\n [attr.y2]=\"data.y(point.y)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"\n ></svg:line>\n <svg:line\n x1=\"0\"\n x2=\"100%\"\n [attr.y1]=\"data.y(point.y1)\"\n [attr.y2]=\"data.y(point.y1)\"\n [attr.stroke]=\"point.iconId ? 'var(--color-text-10)' : point.color ?? series.style?.stroke ?? series.color\"\n ></svg:line>\n</svg:g>\n} } }\n" }]
62
54
  }], ctorParameters: () => [{ type: i1.ChartService }, { type: i0.ChangeDetectorRef }, { type: i2.ScaleService }, { type: i3.ZoomService }, { type: i0.ElementRef }] });
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stc2VyaWVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC1jb250YWluZXIvc2VyaWVzL2Jsb2NrLXNlcmllcy9ibG9jay1zZXJpZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvYmxvY2stc2VyaWVzL2Jsb2NrLXNlcmllcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxHQUVYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBRS9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBWTVDLE1BQU0sT0FBTyxvQkFDWCxTQUFRLG1CQUFzQjtJQVU5QixZQUNxQixHQUFpQixFQUNqQixHQUFzQixFQUN0QixZQUEwQixFQUMxQixXQUF3QixFQUN4QixPQUFtQjtRQUV0QyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBTmpDLFFBQUcsR0FBSCxHQUFHLENBQWM7UUFDakIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7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cG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2VyaWVzQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Jhc2Uvc2VyaWVzLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IEJhc2VQb2ludCB9IGZyb20gJy4uLy4uLy4uL21vZGVsL2Jhc2UtcG9pbnQnO1xuaW1wb3J0IHsgRmlsbFR5cGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbC9lbnVtL2ZpbGwtdHlwZSc7XG5pbXBvcnQgeyBDaGFydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL2NoYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NhbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9zY2FsZS5zZXJ2aWNlJztcbmltcG9ydCB7IFpvb21TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS96b29tLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3ZnOnN2Z1t0ZXRhLWJsb2NrLXNlcmllc10nLFxuICB0ZW1wbGF0ZVVybDogJy4vYmxvY2stc2VyaWVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYmxvY2stc2VyaWVzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgQXN5bmNQaXBlLFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEJsb2NrU2VyaWVzQ29tcG9uZW50PFQgZXh0ZW5kcyBCYXNlUG9pbnQ+XG4gIGV4dGVuZHMgU2VyaWVzQmFzZUNvbXBvbmVudDxUPlxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICB4OiBPYnNlcnZhYmxlPGFueT47XG4gIHk6IE9ic2VydmFibGU8YW55PjtcbiAgZGlzcGxheVBvaW50czogT2JzZXJ2YWJsZTxCYXNlUG9pbnRbXT47XG4gIGZpbGxUeXBlID0gRmlsbFR5cGU7XG4gIGlkOiBzdHJpbmc7XG4gIE1hdGggPSBNYXRoO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBzdmM6IENoYXJ0U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2NhbGVTZXJ2aWNlOiBTY2FsZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHpvb21TZXJ2aWNlOiBab29tU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZWxlbWVudDogRWxlbWVudFJlZlxuICApIHtcbiAgICBzdXBlcihzdmMsIGNkciwgc2NhbGVTZXJ2aWNlLCB6b29tU2VydmljZSwgZWxlbWVudCk7XG4gICAgdGhpcy5pZCA9IChEYXRlLm5vdygpICsgTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMzYpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy54ID0gdGhpcy5zY2FsZVNlcnZpY2Uuc2NhbGVzLnBpcGUoXG4gICAgICBtYXAoXyA9PiBfLnguZ2V0KHRoaXMuc2VyaWVzLnhBeGlzSW5kZXgpPy5zY2FsZSlcbiAgICApO1xuICAgIHRoaXMueSA9IHRoaXMuc2NhbGVTZXJ2aWNlLnNjYWxlcy5waXBlKFxuICAgICAgbWFwKF8gPT4gXy55LmdldCh0aGlzLnNlcmllcy55QXhpc0luZGV4KT8uc2NhbGUpXG4gICAgKTtcblxuICAgIHRoaXMuZGlzcGxheVBvaW50cyA9IHRoaXMueS5waXBlKFxuICAgICAgZmlsdGVyKHkgPT4geSksXG4gICAgICBtYXAoeSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcmllcy5kYXRhLmZpbHRlcigocG9pbnQsIGluZGV4LCBhcnIpID0+IHtcbiAgICAgICAgICBjb25zdCBbbWluLCBtYXhdID0geS5kb21haW4oKTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHBvaW50LnkgPj0gbWluIHx8XG4gICAgICAgICAgICAgIHBvaW50LnkxID49IG1pbiB8fFxuICAgICAgICAgICAgICBhcnJbaW5kZXggKyAxXT8ueSA+PSBtaW4gfHxcbiAgICAgICAgICAgICAgYXJyW2luZGV4ICsgMV0/LnkxID49IG1pbikgJiZcbiAgICAgICAgICAgIChwb2ludC55IDw9IG1heCB8fFxuICAgICAgICAgICAgICBwb2ludC55MSA8PSBtYXggfHxcbiAgICAgICAgICAgICAgYXJyW2luZGV4IC0gMV0/LnkgPD0gbWF4IHx8XG4gICAgICAgICAgICAgIGFycltpbmRleCAtIDFdPy55MSA8PSBtYXgpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBtb3VzZWVudGVyKHBvaW50OiBCYXNlUG9pbnQpIHtcbiAgICB0aGlzLnN2Yy5zZXRUb29sdGlwKHtcbiAgICAgIHBvaW50OiBwb2ludCxcbiAgICAgIHNlcmllczogdGhpcy5zZXJpZXMsXG4gICAgfSk7XG4gIH1cblxuICBtb3VzZWxlYXZlKHBvaW50OiBCYXNlUG9pbnQpIHtcbiAgICB0aGlzLnN2Yy5zZXRUb29sdGlwKHtcbiAgICAgIHBvaW50OiBudWxsLFxuICAgICAgc2VyaWVzOiB0aGlzLnNlcmllcyxcbiAgICB9KTtcbiAgfVxufVxuIiwiQGlmICh7XG4gIHk6IHkgfCBhc3luYyxcbiAgeDogeCB8IGFzeW5jLFxuICBwb2ludHM6IGRpc3BsYXlQb2ludHMgfCBhc3luY1xufTsgYXMgZGF0YSkge1xuICBAaWYgKHNlcmllcz8uZmlsbFR5cGUgPT09IGZpbGxUeXBlLmdyYWRpZW50KSB7XG4gICAgPHN2ZzpkZWZzPlxuICAgICAgPHN2ZzpsaW5lYXJHcmFkaWVudCBbaWRdPVwiJ2dyYWRpZW50LWZpbGwtJyArIGlkXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeDE9XCIwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnkxXT1cImNvbmZpZz8uaW52ZXJ0ZWQgPyAnMCUnIDogJzEwMCUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIueDJdPVwiY29uZmlnPy5pbnZlcnRlZCA/ICcxMDAlJyA6ICcwJSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB5Mj1cIjAlXCI+XG4gICAgICAgIDxzdmc6c3RvcCBvZmZzZXQ9XCIwJVwiIFthdHRyLnN0b3AtY29sb3JdPVwic2VyaWVzLnN0eWxlPy5maWxsID8/IHNlcmllcy5jb2xvclwiIHN0b3Atb3BhY2l0eT1cIjBcIj48L3N2ZzpzdG9wPlxuICAgICAgICA8c3ZnOnN0b3Agb2Zmc2V0PVwiNSVcIiBbYXR0ci5zdG9wLWNvbG9yXT1cInNlcmllcy5zdHlsZT8uZmlsbCA/PyBzZXJpZXMuY29sb3JcIiBzdG9wLW9wYWNpdHk9XCIwLjFcIj48L3N2ZzpzdG9wPlxuICAgICAgICA8c3ZnOnN0b3Agb2Zmc2V0PVwiMjAlXCIgW2F0dHIuc3RvcC1jb2xvcl09XCJzZXJpZXMuc3R5bGU/LmZpbGwgPz8gc2VyaWVzLmNvbG9yXCIgc3RvcC1vcGFjaXR5PVwiMC4yXCI+PC9zdmc6c3RvcD5cbiAgICAgICAgPHN2ZzpzdG9wIG9mZnNldD1cIjYwJVwiIFthdHRyLnN0b3AtY29sb3JdPVwic2VyaWVzLnN0eWxlPy5maWxsID8/IHNlcmllcy5jb2xvclwiIHN0b3Atb3BhY2l0eT1cIjAuNVwiPjwvc3ZnOnN0b3A+XG4gICAgICAgIDxzdmc6c3RvcCBvZmZzZXQ9XCIxMDAlXCIgW2F0dHIuc3RvcC1jb2xvcl09XCJzZXJpZXMuc3R5bGU/LmZpbGwgPz8gc2VyaWVzLmNvbG9yXCIgc3RvcC1vcGFjaXR5PVwiMC45XCI+PC9zdmc6c3RvcD5cbiAgICAgIDwvc3ZnOmxpbmVhckdyYWRpZW50PlxuICAgIDwvc3ZnOmRlZnM+XG4gIH1cbiAgQGlmIChkYXRhLnggJiYgZGF0YS55KSB7XG4gICAgQGZvciAocG9pbnQgb2YgZGF0YS5wb2ludHM7IHRyYWNrIHBvaW50KSB7XG4gICAgICA8c3ZnOmcgKG1vdXNlZW50ZXIpPVwibW91c2VlbnRlcihwb2ludClcIlxuICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm1vdXNlbGVhdmUocG9pbnQpXCI+XG4gICAgICAgIDxzdmc6cmVjdFxuICAgICAgICAgIHg9XCIwXCJcbiAgICAgICAgICBbYXR0ci55XT1cImRhdGEueShwb2ludC55KVwiXG4gICAgICAgICAgW2F0dHIuaGVpZ2h0XT1cIk1hdGguYWJzKGRhdGEueShwb2ludC55MSkgLSBkYXRhLnkocG9pbnQueSkpXCJcbiAgICAgICAgICBbYXR0ci5maWxsXT1cInNlcmllcy5maWxsVHlwZSA9PT0gZmlsbFR5cGUuZ3JhZGllbnQgPyAndXJsKCNncmFkaWVudC1maWxsLScraWQrJyknIDogcG9pbnQuaWNvbklkID8gJ3VybCgjcGF0dGVybicrcG9pbnQuaWNvbklkKycpJyA6IHBvaW50LmNvbG9yID8/IHNlcmllcy5zdHlsZT8uZmlsbCA/PyBzZXJpZXMuY29sb3JcIlxuICAgICAgICAgIFthdHRyLmZpbGwtb3BhY2l0eV09XCJzZXJpZXMuc3R5bGU/LmZpbGxPcGFjaXR5XCJcbiAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cbiAgICAgICAgPC9zdmc6cmVjdD5cbiAgICAgICAgQGlmIChwb2ludC50ZXh0ICYmIGRhdGEueShwb2ludC55MSkgLSBkYXRhLnkocG9pbnQueSkgPiA4KSB7XG4gICAgICAgICAgPHN2Zzp0ZXh0IHg9XCI1MCVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci55XT1cIihkYXRhLnkocG9pbnQueTEpICsgZGF0YS55KHBvaW50LnkpKSAvIDJcIlxuICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQtYmFzZWxpbmU9XCJtaWRkbGVcIlxuICAgICAgICAgICAgICAgICAgICB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiPnt7IHBvaW50LnRleHQgfX1cbiAgICAgICAgICA8L3N2Zzp0ZXh0PlxuICAgICAgICB9XG4gICAgICAgIDxzdmc6bGluZSB4MT1cIjBcIiB4Mj1cIjEwMCVcIiBbYXR0ci55MV09XCJkYXRhLnkocG9pbnQueSlcIiBbYXR0ci55Ml09XCJkYXRhLnkocG9pbnQueSlcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInBvaW50Lmljb25JZCA/ICd2YXIoLS1jb2xvci10ZXh0LTEwKScgOiBwb2ludC5jb2xvciA/PyBzZXJpZXMuc3R5bGU/LnN0cm9rZSA/PyBzZXJpZXMuY29sb3JcIj48L3N2ZzpsaW5lPlxuICAgICAgICA8c3ZnOmxpbmUgeDE9XCIwXCIgeDI9XCIxMDAlXCIgW2F0dHIueTFdPVwiZGF0YS55KHBvaW50LnkxKVwiIFthdHRyLnkyXT1cImRhdGEueShwb2ludC55MSlcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInBvaW50Lmljb25JZCA/ICd2YXIoLS1jb2xvci10ZXh0LTEwKScgOiBwb2ludC5jb2xvciA/PyBzZXJpZXMuc3R5bGU/LnN0cm9rZSA/PyBzZXJpZXMuY29sb3JcIj48L3N2ZzpsaW5lPlxuICAgICAgPC9zdmc6Zz5cbiAgICB9XG4gIH1cbn1cbiJdfQ==
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stc2VyaWVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC1jb250YWluZXIvc2VyaWVzL2Jsb2NrLXNlcmllcy9ibG9jay1zZXJpZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvYmxvY2stc2VyaWVzL2Jsb2NrLXNlcmllcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUUvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUUxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztBQVU1QyxNQUFNLE9BQU8sb0JBQTBDLFNBQVEsbUJBQXNCO0lBUW5GLFlBQ3FCLEdBQWlCLEVBQ2pCLEdBQXNCLEVBQ3RCLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLE9BQW1CO1FBRXRDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFOakMsUUFBRyxHQUFILEdBQUcsQ0FBYztRQUNqQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtR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bnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2VyaWVzQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Jhc2Uvc2VyaWVzLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IEJhc2VQb2ludCB9IGZyb20gJy4uLy4uLy4uL21vZGVsL2Jhc2UtcG9pbnQnO1xuaW1wb3J0IHsgRmlsbFR5cGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbC9lbnVtL2ZpbGwtdHlwZSc7XG5pbXBvcnQgeyBDaGFydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL2NoYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NhbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9zY2FsZS5zZXJ2aWNlJztcbmltcG9ydCB7IFpvb21TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS96b29tLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3ZnOnN2Z1t0ZXRhLWJsb2NrLXNlcmllc10nLFxuICB0ZW1wbGF0ZVVybDogJy4vYmxvY2stc2VyaWVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYmxvY2stc2VyaWVzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbQXN5bmNQaXBlXSxcbn0pXG5leHBvcnQgY2xhc3MgQmxvY2tTZXJpZXNDb21wb25lbnQ8VCBleHRlbmRzIEJhc2VQb2ludD4gZXh0ZW5kcyBTZXJpZXNCYXNlQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgeDogT2JzZXJ2YWJsZTxhbnk+O1xuICB5OiBPYnNlcnZhYmxlPGFueT47XG4gIGRpc3BsYXlQb2ludHM6IE9ic2VydmFibGU8QmFzZVBvaW50W10+O1xuICBmaWxsVHlwZSA9IEZpbGxUeXBlO1xuICBpZDogc3RyaW5nO1xuICBNYXRoID0gTWF0aDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc3ZjOiBDaGFydFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHNjYWxlU2VydmljZTogU2NhbGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB6b29tU2VydmljZTogWm9vbVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGVsZW1lbnQ6IEVsZW1lbnRSZWZcbiAgKSB7XG4gICAgc3VwZXIoc3ZjLCBjZHIsIHNjYWxlU2VydmljZSwgem9vbVNlcnZpY2UsIGVsZW1lbnQpO1xuICAgIHRoaXMuaWQgPSAoRGF0ZS5ub3coKSArIE1hdGgucmFuZG9tKCkpLnRvU3RyaW5nKDM2KTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMueCA9IHRoaXMuc2NhbGVTZXJ2aWNlLnNjYWxlcy5waXBlKG1hcCgoXykgPT4gXy54LmdldCh0aGlzLnNlcmllcy54QXhpc0luZGV4KT8uc2NhbGUpKTtcbiAgICB0aGlzLnkgPSB0aGlzLnNjYWxlU2VydmljZS5zY2FsZXMucGlwZShtYXAoKF8pID0+IF8ueS5nZXQodGhpcy5zZXJpZXMueUF4aXNJbmRleCk/LnNjYWxlKSk7XG5cbiAgICB0aGlzLmRpc3BsYXlQb2ludHMgPSB0aGlzLnkucGlwZShcbiAgICAgIGZpbHRlcigoeSkgPT4geSksXG4gICAgICBtYXAoKHkpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VyaWVzLmRhdGEuZmlsdGVyKChwb2ludCwgaW5kZXgsIGFycikgPT4ge1xuICAgICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSB5LmRvbWFpbigpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAocG9pbnQueSA+PSBtaW4gfHwgcG9pbnQueTEgPj0gbWluIHx8IGFycltpbmRleCArIDFdPy55ID49IG1pbiB8fCBhcnJbaW5kZXggKyAxXT8ueTEgPj0gbWluKSAmJlxuICAgICAgICAgICAgKHBvaW50LnkgPD0gbWF4IHx8IHBvaW50LnkxIDw9IG1heCB8fCBhcnJbaW5kZXggLSAxXT8ueSA8PSBtYXggfHwgYXJyW2luZGV4IC0gMV0/LnkxIDw9IG1heClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG1vdXNlZW50ZXIocG9pbnQ6IEJhc2VQb2ludCkge1xuICAgIHRoaXMuc3ZjLnNldFRvb2x0aXAoe1xuICAgICAgcG9pbnQ6IHBvaW50LFxuICAgICAgc2VyaWVzOiB0aGlzLnNlcmllcyxcbiAgICB9KTtcbiAgfVxuXG4gIG1vdXNlbGVhdmUocG9pbnQ6IEJhc2VQb2ludCkge1xuICAgIHRoaXMuc3ZjLnNldFRvb2x0aXAoe1xuICAgICAgcG9pbnQ6IG51bGwsXG4gICAgICBzZXJpZXM6IHRoaXMuc2VyaWVzLFxuICAgIH0pO1xuICB9XG59XG4iLCJAaWYgKHsgeTogeSB8IGFzeW5jLCB4OiB4IHwgYXN5bmMsIHBvaW50czogZGlzcGxheVBvaW50cyB8IGFzeW5jIH07IGFzIGRhdGEpIHsgQGlmIChzZXJpZXM/LmZpbGxUeXBlID09PVxuZmlsbFR5cGUuZ3JhZGllbnQpIHtcbjxzdmc6ZGVmcz5cbiAgPHN2ZzpsaW5lYXJHcmFkaWVudFxuICAgIFtpZF09XCInZ3JhZGllbnQtZmlsbC0nICsgaWRcIlxuICAgIGdyYWRpZW50VW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiXG4gICAgeDE9XCIwJVwiXG4gICAgW2F0dHIueTFdPVwiY29uZmlnPy5pbnZlcnRlZCA/ICcwJScgOiAnMTAwJSdcIlxuICAgIFthdHRyLngyXT1cImNvbmZpZz8uaW52ZXJ0ZWQgPyAnMTAwJScgOiAnMCUnXCJcbiAgICB5Mj1cIjAlXCJcbiAgPlxuICAgIDxzdmc6c3RvcCBvZmZzZXQ9XCIwJVwiIFthdHRyLnN0b3AtY29sb3JdPVwic2VyaWVzLnN0eWxlPy5maWxsID8/IHNlcmllcy5jb2xvclwiIHN0b3Atb3BhY2l0eT1cIjBcIj48L3N2ZzpzdG9wPlxuICAgIDxzdmc6c3RvcCBvZmZzZXQ9XCI1JVwiIFthdHRyLnN0b3AtY29sb3JdPVwic2VyaWVzLnN0eWxlPy5maWxsID8/IHNlcmllcy5jb2xvclwiIHN0b3Atb3BhY2l0eT1cIjAuMVwiPjwvc3ZnOnN0b3A+XG4gICAgPHN2ZzpzdG9wIG9mZnNldD1cIjIwJVwiIFthdHRyLnN0b3AtY29sb3JdPVwic2VyaWVzLnN0eWxlPy5maWxsID8/IHNlcmllcy5jb2xvclwiIHN0b3Atb3BhY2l0eT1cIjAuMlwiPjwvc3ZnOnN0b3A+XG4gICAgPHN2ZzpzdG9wIG9mZnNldD1cIjYwJVwiIFthdHRyLnN0b3AtY29sb3JdPVwic2VyaWVzLnN0eWxlPy5maWxsID8/IHNlcmllcy5jb2xvclwiIHN0b3Atb3BhY2l0eT1cIjAuNVwiPjwvc3ZnOnN0b3A+XG4gICAgPHN2ZzpzdG9wIG9mZnNldD1cIjEwMCVcIiBbYXR0ci5zdG9wLWNvbG9yXT1cInNlcmllcy5zdHlsZT8uZmlsbCA/PyBzZXJpZXMuY29sb3JcIiBzdG9wLW9wYWNpdHk9XCIwLjlcIj48L3N2ZzpzdG9wPlxuICA8L3N2ZzpsaW5lYXJHcmFkaWVudD5cbjwvc3ZnOmRlZnM+XG59IEBpZiAoZGF0YS54ICYmIGRhdGEueSkgeyBAZm9yIChwb2ludCBvZiBkYXRhLnBvaW50czsgdHJhY2sgcG9pbnQpIHtcbjxzdmc6ZyAobW91c2VlbnRlcik9XCJtb3VzZWVudGVyKHBvaW50KVwiIChtb3VzZWxlYXZlKT1cIm1vdXNlbGVhdmUocG9pbnQpXCI+XG4gIDxzdmc6cmVjdFxuICAgIHg9XCIwXCJcbiAgICBbYXR0ci55XT1cImRhdGEueShwb2ludC55KVwiXG4gICAgW2F0dHIuaGVpZ2h0XT1cIk1hdGguYWJzKGRhdGEueShwb2ludC55MSkgLSBkYXRhLnkocG9pbnQueSkpXCJcbiAgICBbYXR0ci5maWxsXT1cIlxuICAgICAgc2VyaWVzLmZpbGxUeXBlID09PSBmaWxsVHlwZS5ncmFkaWVudFxuICAgICAgICA/ICd1cmwoI2dyYWRpZW50LWZpbGwtJyArIGlkICsgJyknXG4gICAgICAgIDogcG9pbnQuaWNvbklkXG4gICAgICAgID8gJ3VybCgjcGF0dGVybicgKyBwb2ludC5pY29uSWQgKyAnKSdcbiAgICAgICAgOiBwb2ludC5jb2xvciA/PyBzZXJpZXMuc3R5bGU/LmZpbGwgPz8gc2VyaWVzLmNvbG9yXG4gICAgXCJcbiAgICBbYXR0ci5maWxsLW9wYWNpdHldPVwic2VyaWVzLnN0eWxlPy5maWxsT3BhY2l0eVwiXG4gICAgd2lkdGg9XCIxMDAlXCJcbiAgPjwvc3ZnOnJlY3Q+XG4gIEBpZiAocG9pbnQudGV4dCAmJiBkYXRhLnkocG9pbnQueTEpIC0gZGF0YS55KHBvaW50LnkpID4gOCkge1xuICA8c3ZnOnRleHRcbiAgICB4PVwiNTAlXCJcbiAgICBbYXR0ci55XT1cIihkYXRhLnkocG9pbnQueTEpICsgZGF0YS55KHBvaW50LnkpKSAvIDJcIlxuICAgIGFsaWdubWVudC1iYXNlbGluZT1cIm1pZGRsZVwiXG4gICAgdGV4dC1hbmNob3I9XCJtaWRkbGVcIlxuICA+XG4gICAge3sgcG9pbnQudGV4dCB9fVxuICA8L3N2Zzp0ZXh0PlxuICB9XG4gIDxzdmc6bGluZVxuICAgIHgxPVwiMFwiXG4gICAgeDI9XCIxMDAlXCJcbiAgICBbYXR0ci55MV09XCJkYXRhLnkocG9pbnQueSlcIlxuICAgIFthdHRyLnkyXT1cImRhdGEueShwb2ludC55KVwiXG4gICAgW2F0dHIuc3Ryb2tlXT1cInBvaW50Lmljb25JZCA/ICd2YXIoLS1jb2xvci10ZXh0LTEwKScgOiBwb2ludC5jb2xvciA/PyBzZXJpZXMuc3R5bGU/LnN0cm9rZSA/PyBzZXJpZXMuY29sb3JcIlxuICA+PC9zdmc6bGluZT5cbiAgPHN2ZzpsaW5lXG4gICAgeDE9XCIwXCJcbiAgICB4Mj1cIjEwMCVcIlxuICAgIFthdHRyLnkxXT1cImRhdGEueShwb2ludC55MSlcIlxuICAgIFthdHRyLnkyXT1cImRhdGEueShwb2ludC55MSlcIlxuICAgIFthdHRyLnN0cm9rZV09XCJwb2ludC5pY29uSWQgPyAndmFyKC0tY29sb3ItdGV4dC0xMCknIDogcG9pbnQuY29sb3IgPz8gc2VyaWVzLnN0eWxlPy5zdHJva2UgPz8gc2VyaWVzLmNvbG9yXCJcbiAgPjwvc3ZnOmxpbmU+XG48L3N2ZzpnPlxufSB9IH1cbiJdfQ==
@@ -1,4 +1,4 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef } from '@angular/core';
2
2
  import { ChartService } from '../../../service/chart.service';
3
3
  import { ScaleService } from '../../../service/scale.service';
4
4
  import { ZoomService } from '../../../service/zoom.service';
@@ -52,7 +52,7 @@ export class LineSeriesComponent extends LinearSeriesBase {
52
52
  this._update.next();
53
53
  const emitEvent = {
54
54
  type: 'end',
55
- sourceEvent: event
55
+ sourceEvent: event,
56
56
  };
57
57
  this.svc.emitPoint({
58
58
  target: {
@@ -68,7 +68,7 @@ export class LineSeriesComponent extends LinearSeriesBase {
68
68
  this._update.next();
69
69
  const emitEvent = {
70
70
  type: 'drag',
71
- sourceEvent: event
71
+ sourceEvent: event,
72
72
  };
73
73
  this.svc.emitPoint({
74
74
  target: {
@@ -86,13 +86,10 @@ export class LineSeriesComponent extends LinearSeriesBase {
86
86
  label.dy = this.labelStart.dy + event.deltaY;
87
87
  }
88
88
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: LineSeriesComponent, deps: [{ token: i1.ChartService }, { token: i0.ChangeDetectorRef }, { token: i2.ScaleService }, { token: i3.ZoomService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
89
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: LineSeriesComponent, isStandalone: true, selector: "svg:svg[teta-line-series]", usesInheritance: true, ngImport: i0, template: "<svg:path\n class=\"line\"\n [attr.d]=\"path | async\"\n [attr.stroke]=\"series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n fill=\"none\">\n</svg:path>\n@if (transform | async; as t) {\n @if (t?.x != null && t?.y != null) {\n <svg:circle r=\"3\"\n [attr.fill]=\"series.color\"\n [attr.transform]=\"'translate('+ t.x +', '+ t.y +')'\">\n </svg:circle>\n }\n}\n@if (markers; as draggablePoints) {\n @if (x && y) {\n @for (point of draggablePoints; track point) {\n <svg:g\n [attr.transform]=\"'translate(' + x(point.x) + ',' + y(point.y) + ')'\">\n <svg:g [tetaDraggablePoint]=\"point.marker.draggable\"\n [dragDirection]=\"point.marker.dragType\"\n [allowDrag]=\"allowDrag(point)\"\n #dragPoint=\"tetaDraggablePoint\"\n (moveStart)=\"moveStart($event, point)\"\n (moveEnd)=\"moveEnd($event, point);dragPoint.resetTransform();\"\n (moveProcess)=\"moveProcess($event, point);dragPoint.resetTransform();\"\n [class.draggable-marker]=\"point?.marker?.draggable\">\n <svg:circle\n class=\"marker\"\n [attr.r]=\"point.marker.style?.radius ?? 5\"\n [attr.fill]=\"point.marker.style?.fill ?? 'transparent'\"\n [attr.stroke]=\"point.marker.style?.stroke ?? 'none'\"\n [attr.stroke-width]=\"point.marker.style?.strokeWidth\"\n [attr.stroke-dasharray]=\"point.marker.style?.strokeDasharray\"\n [attr.cx]=\"0\"\n [attr.cy]=\"0\">\n </svg:circle>\n @if (point.marker.label?.text) {\n <svg:line\n [attr.x1]=\"0\"\n [attr.y1]=\"0\"\n [attr.x2]=\"point.marker.label?.dx\"\n [attr.y2]=\"point.marker.label?.dy\"\n [attr.stroke]=\"point.marker.label?.style?.stroke ?? 'var(--color-text-90)'\"\n [attr.stroke-width]=\"point.marker.label?.style?.strokeWidth ?? 1\"\n [attr.stroke-dasharray]=\"point.marker.label?.style?.strokeDasharray ?? null\">\n </svg:line>\n <svg:foreignObject\n [tetaDraggablePoint]=\"point.marker.label?.draggable\"\n [dragDirection]=\"point.marker.label.dragType\"\n #labelPoint=\"tetaDraggablePoint\"\n (moveStart)=\"startLabel($event, point.marker.label)\"\n (moveProcess)=\"moveLabel($event, point.marker.label); labelPoint.resetTransform();\"\n (moveEnd)=\"labelPoint.resetTransform();\"\n [attr.width]=\"annotationNode?.offsetWidth ?? 0\"\n [attr.height]=\"annotationNode?.offsetHeight ?? 0\"\n [attr.x]=\"point.marker.label?.dx\"\n [attr.y]=\"point.marker.label?.dy\"\n class=\"position-absolute\">\n <div\n #annotationNode\n class=\"shadow-2 padding-2\"\n [style.color]=\"'var(--color-text-90)'\"\n [style.background-color]=\"'var(--color-global-bgcard)'\"\n [style.cursor]=\"'move'\"\n style=\"border-radius: 2px; display: inline-block;\">\n {{ point.marker.label?.text }}\n </div>\n </svg:foreignObject>\n }\n </svg:g>\n </svg:g>\n }\n }\n}\n", styles: [".draggable-marker{cursor:move}.active{stroke-opacity:.5}.marker-grab{opacity:0}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: DraggablePointDirective, selector: "[tetaDraggablePoint]", inputs: ["tetaDraggablePoint", "dragDirection", "allowDrag"], outputs: ["moveStart", "moveProcess", "moveEnd"], exportAs: ["tetaDraggablePoint"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
89
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: LineSeriesComponent, isStandalone: true, selector: "svg:svg[teta-line-series]", usesInheritance: true, ngImport: i0, template: "<svg:path\n class=\"line\"\n [attr.d]=\"path | async\"\n [attr.stroke]=\"series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n fill=\"none\"\n></svg:path>\n@if (transform | async; as t) { @if (t?.x != null && t?.y != null) {\n<svg:circle r=\"3\" [attr.fill]=\"series.color\" [attr.transform]=\"'translate(' + t.x + ', ' + t.y + ')'\"></svg:circle>\n} } @if (markers; as draggablePoints) { @if (x && y) { @for (point of draggablePoints; track point) {\n<svg:g [attr.transform]=\"'translate(' + x(point.x) + ',' + y(point.y) + ')'\">\n <svg:g\n [tetaDraggablePoint]=\"point.marker.draggable\"\n [dragDirection]=\"point.marker.dragType\"\n [allowDrag]=\"allowDrag(point)\"\n #dragPoint=\"tetaDraggablePoint\"\n (moveStart)=\"moveStart($event, point)\"\n (moveEnd)=\"moveEnd($event, point); dragPoint.resetTransform()\"\n (moveProcess)=\"moveProcess($event, point); dragPoint.resetTransform()\"\n [class.draggable-marker]=\"point?.marker?.draggable\"\n >\n <svg:circle\n class=\"marker\"\n [attr.r]=\"point.marker.style?.radius ?? 5\"\n [attr.fill]=\"point.marker.style?.fill ?? 'transparent'\"\n [attr.stroke]=\"point.marker.style?.stroke ?? 'none'\"\n [attr.stroke-width]=\"point.marker.style?.strokeWidth\"\n [attr.stroke-dasharray]=\"point.marker.style?.strokeDasharray\"\n [attr.cx]=\"0\"\n [attr.cy]=\"0\"\n ></svg:circle>\n @if (point.marker.label?.text) {\n <svg:line\n [attr.x1]=\"0\"\n [attr.y1]=\"0\"\n [attr.x2]=\"point.marker.label?.dx\"\n [attr.y2]=\"point.marker.label?.dy\"\n [attr.stroke]=\"point.marker.label?.style?.stroke ?? 'var(--color-text-90)'\"\n [attr.stroke-width]=\"point.marker.label?.style?.strokeWidth ?? 1\"\n [attr.stroke-dasharray]=\"point.marker.label?.style?.strokeDasharray ?? null\"\n ></svg:line>\n <svg:foreignObject\n [tetaDraggablePoint]=\"point.marker.label?.draggable\"\n [dragDirection]=\"point.marker.label.dragType\"\n #labelPoint=\"tetaDraggablePoint\"\n (moveStart)=\"startLabel($event, point.marker.label)\"\n (moveProcess)=\"moveLabel($event, point.marker.label); labelPoint.resetTransform()\"\n (moveEnd)=\"labelPoint.resetTransform()\"\n [attr.width]=\"annotationNode?.offsetWidth ?? 0\"\n [attr.height]=\"annotationNode?.offsetHeight ?? 0\"\n [attr.x]=\"point.marker.label?.dx\"\n [attr.y]=\"point.marker.label?.dy\"\n class=\"position-absolute\"\n >\n <div\n #annotationNode\n class=\"shadow-2 padding-2\"\n [style.color]=\"'var(--color-text-90)'\"\n [style.background-color]=\"'var(--color-global-bgcard)'\"\n [style.cursor]=\"'move'\"\n style=\"border-radius: 2px; display: inline-block\"\n >\n {{ point.marker.label?.text }}\n </div>\n </svg:foreignObject>\n }\n </svg:g>\n</svg:g>\n} } }\n", styles: [".draggable-marker{cursor:move}.active{stroke-opacity:.5}.marker-grab{opacity:0}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: DraggablePointDirective, selector: "[tetaDraggablePoint]", inputs: ["tetaDraggablePoint", "dragDirection", "allowDrag"], outputs: ["moveStart", "moveProcess", "moveEnd"], exportAs: ["tetaDraggablePoint"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
90
90
  }
91
91
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: LineSeriesComponent, decorators: [{
92
92
  type: Component,
93
- args: [{ selector: 'svg:svg[teta-line-series]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
94
- AsyncPipe,
95
- DraggablePointDirective,
96
- ], template: "<svg:path\n class=\"line\"\n [attr.d]=\"path | async\"\n [attr.stroke]=\"series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n fill=\"none\">\n</svg:path>\n@if (transform | async; as t) {\n @if (t?.x != null && t?.y != null) {\n <svg:circle r=\"3\"\n [attr.fill]=\"series.color\"\n [attr.transform]=\"'translate('+ t.x +', '+ t.y +')'\">\n </svg:circle>\n }\n}\n@if (markers; as draggablePoints) {\n @if (x && y) {\n @for (point of draggablePoints; track point) {\n <svg:g\n [attr.transform]=\"'translate(' + x(point.x) + ',' + y(point.y) + ')'\">\n <svg:g [tetaDraggablePoint]=\"point.marker.draggable\"\n [dragDirection]=\"point.marker.dragType\"\n [allowDrag]=\"allowDrag(point)\"\n #dragPoint=\"tetaDraggablePoint\"\n (moveStart)=\"moveStart($event, point)\"\n (moveEnd)=\"moveEnd($event, point);dragPoint.resetTransform();\"\n (moveProcess)=\"moveProcess($event, point);dragPoint.resetTransform();\"\n [class.draggable-marker]=\"point?.marker?.draggable\">\n <svg:circle\n class=\"marker\"\n [attr.r]=\"point.marker.style?.radius ?? 5\"\n [attr.fill]=\"point.marker.style?.fill ?? 'transparent'\"\n [attr.stroke]=\"point.marker.style?.stroke ?? 'none'\"\n [attr.stroke-width]=\"point.marker.style?.strokeWidth\"\n [attr.stroke-dasharray]=\"point.marker.style?.strokeDasharray\"\n [attr.cx]=\"0\"\n [attr.cy]=\"0\">\n </svg:circle>\n @if (point.marker.label?.text) {\n <svg:line\n [attr.x1]=\"0\"\n [attr.y1]=\"0\"\n [attr.x2]=\"point.marker.label?.dx\"\n [attr.y2]=\"point.marker.label?.dy\"\n [attr.stroke]=\"point.marker.label?.style?.stroke ?? 'var(--color-text-90)'\"\n [attr.stroke-width]=\"point.marker.label?.style?.strokeWidth ?? 1\"\n [attr.stroke-dasharray]=\"point.marker.label?.style?.strokeDasharray ?? null\">\n </svg:line>\n <svg:foreignObject\n [tetaDraggablePoint]=\"point.marker.label?.draggable\"\n [dragDirection]=\"point.marker.label.dragType\"\n #labelPoint=\"tetaDraggablePoint\"\n (moveStart)=\"startLabel($event, point.marker.label)\"\n (moveProcess)=\"moveLabel($event, point.marker.label); labelPoint.resetTransform();\"\n (moveEnd)=\"labelPoint.resetTransform();\"\n [attr.width]=\"annotationNode?.offsetWidth ?? 0\"\n [attr.height]=\"annotationNode?.offsetHeight ?? 0\"\n [attr.x]=\"point.marker.label?.dx\"\n [attr.y]=\"point.marker.label?.dy\"\n class=\"position-absolute\">\n <div\n #annotationNode\n class=\"shadow-2 padding-2\"\n [style.color]=\"'var(--color-text-90)'\"\n [style.background-color]=\"'var(--color-global-bgcard)'\"\n [style.cursor]=\"'move'\"\n style=\"border-radius: 2px; display: inline-block;\">\n {{ point.marker.label?.text }}\n </div>\n </svg:foreignObject>\n }\n </svg:g>\n </svg:g>\n }\n }\n}\n", styles: [".draggable-marker{cursor:move}.active{stroke-opacity:.5}.marker-grab{opacity:0}\n"] }]
93
+ args: [{ selector: 'svg:svg[teta-line-series]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AsyncPipe, DraggablePointDirective], template: "<svg:path\n class=\"line\"\n [attr.d]=\"path | async\"\n [attr.stroke]=\"series.color\"\n [attr.stroke-dasharray]=\"series.style?.strokeDasharray\"\n [attr.stroke-width]=\"series.style?.strokeWidth\"\n fill=\"none\"\n></svg:path>\n@if (transform | async; as t) { @if (t?.x != null && t?.y != null) {\n<svg:circle r=\"3\" [attr.fill]=\"series.color\" [attr.transform]=\"'translate(' + t.x + ', ' + t.y + ')'\"></svg:circle>\n} } @if (markers; as draggablePoints) { @if (x && y) { @for (point of draggablePoints; track point) {\n<svg:g [attr.transform]=\"'translate(' + x(point.x) + ',' + y(point.y) + ')'\">\n <svg:g\n [tetaDraggablePoint]=\"point.marker.draggable\"\n [dragDirection]=\"point.marker.dragType\"\n [allowDrag]=\"allowDrag(point)\"\n #dragPoint=\"tetaDraggablePoint\"\n (moveStart)=\"moveStart($event, point)\"\n (moveEnd)=\"moveEnd($event, point); dragPoint.resetTransform()\"\n (moveProcess)=\"moveProcess($event, point); dragPoint.resetTransform()\"\n [class.draggable-marker]=\"point?.marker?.draggable\"\n >\n <svg:circle\n class=\"marker\"\n [attr.r]=\"point.marker.style?.radius ?? 5\"\n [attr.fill]=\"point.marker.style?.fill ?? 'transparent'\"\n [attr.stroke]=\"point.marker.style?.stroke ?? 'none'\"\n [attr.stroke-width]=\"point.marker.style?.strokeWidth\"\n [attr.stroke-dasharray]=\"point.marker.style?.strokeDasharray\"\n [attr.cx]=\"0\"\n [attr.cy]=\"0\"\n ></svg:circle>\n @if (point.marker.label?.text) {\n <svg:line\n [attr.x1]=\"0\"\n [attr.y1]=\"0\"\n [attr.x2]=\"point.marker.label?.dx\"\n [attr.y2]=\"point.marker.label?.dy\"\n [attr.stroke]=\"point.marker.label?.style?.stroke ?? 'var(--color-text-90)'\"\n [attr.stroke-width]=\"point.marker.label?.style?.strokeWidth ?? 1\"\n [attr.stroke-dasharray]=\"point.marker.label?.style?.strokeDasharray ?? null\"\n ></svg:line>\n <svg:foreignObject\n [tetaDraggablePoint]=\"point.marker.label?.draggable\"\n [dragDirection]=\"point.marker.label.dragType\"\n #labelPoint=\"tetaDraggablePoint\"\n (moveStart)=\"startLabel($event, point.marker.label)\"\n (moveProcess)=\"moveLabel($event, point.marker.label); labelPoint.resetTransform()\"\n (moveEnd)=\"labelPoint.resetTransform()\"\n [attr.width]=\"annotationNode?.offsetWidth ?? 0\"\n [attr.height]=\"annotationNode?.offsetHeight ?? 0\"\n [attr.x]=\"point.marker.label?.dx\"\n [attr.y]=\"point.marker.label?.dy\"\n class=\"position-absolute\"\n >\n <div\n #annotationNode\n class=\"shadow-2 padding-2\"\n [style.color]=\"'var(--color-text-90)'\"\n [style.background-color]=\"'var(--color-global-bgcard)'\"\n [style.cursor]=\"'move'\"\n style=\"border-radius: 2px; display: inline-block\"\n >\n {{ point.marker.label?.text }}\n </div>\n </svg:foreignObject>\n }\n </svg:g>\n</svg:g>\n} } }\n", styles: [".draggable-marker{cursor:move}.active{stroke-opacity:.5}.marker-grab{opacity:0}\n"] }]
97
94
  }], ctorParameters: () => [{ type: i1.ChartService }, { type: i0.ChangeDetectorRef }, { type: i2.ScaleService }, { type: i3.ZoomService }, { type: i0.ElementRef }] });
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1zZXJpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvbGluZS9saW5lLXNlcmllcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2hhcnQvY2hhcnQtY29udGFpbmVyL3Nlcmllcy9saW5lL2xpbmUtc2VyaWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEdBR1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBRTVELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDOzs7OztBQWF4RixNQUFNLE9BQU8sbUJBQ1gsU0FBUSxnQkFBbUI7SUFHM0IsWUFDcUIsR0FBaUIsRUFDakIsR0FBc0IsRUFDdEIsWUFBMEIsRUFDMUIsV0FBd0IsRUFDeEIsT0FBbUI7UUFFdEMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQU5qQyxRQUFHLEdBQUgsR0FBRyxDQUFjO1FBQ2pCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFlBQU8sR0FB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RSxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUs7UUFDcEIsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzdDLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUMvQyxDQUFDOzhHQTlEVSxtQkFBbUI7a0dBQW5CLG1CQUFtQiw0R0MzQmhDLHczR0E2RUEsc0lEdERJLFNBQVMsOENBQ1QsdUJBQXVCOzsyRkFHZCxtQkFBbUI7a0JBWC9CLFNBQVM7K0JBQ0UsMkJBQTJCLGNBR3pCLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxTQUFTO3dCQUNULHVCQUF1QjtxQkFDeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDaGFydFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvY2hhcnQuc2VydmljZSc7XG5pbXBvcnQge0Jhc2VQb2ludH0gZnJvbSAnLi4vLi4vLi4vbW9kZWwvYmFzZS1wb2ludCc7XG5pbXBvcnQge1NjYWxlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9zY2FsZS5zZXJ2aWNlJztcbmltcG9ydCB7Wm9vbVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2Uvem9vbS5zZXJ2aWNlJztcbmltcG9ydCB7TGluZWFyU2VyaWVzQmFzZX0gZnJvbSAnLi4vbGluZWFyLXNlcmllcy1iYXNlJztcbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEcmFnZ2FibGVQb2ludERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvZHJhZ2dhYmxlLXBvaW50LmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N2ZzpzdmdbdGV0YS1saW5lLXNlcmllc10nLFxuICB0ZW1wbGF0ZVVybDogJy4vbGluZS1zZXJpZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9saW5lLXNlcmllcy5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIEFzeW5jUGlwZSxcbiAgICBEcmFnZ2FibGVQb2ludERpcmVjdGl2ZSxcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMaW5lU2VyaWVzQ29tcG9uZW50PFQgZXh0ZW5kcyBCYXNlUG9pbnQ+XG4gIGV4dGVuZHMgTGluZWFyU2VyaWVzQmFzZTxUPlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc3ZjOiBDaGFydFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHNjYWxlU2VydmljZTogU2NhbGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB6b29tU2VydmljZTogWm9vbVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICkge1xuICAgIHN1cGVyKHN2YywgY2RyLCBzY2FsZVNlcnZpY2UsIHpvb21TZXJ2aWNlLCBlbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnQ6IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfTtcbiAgcHJpdmF0ZSBsYWJlbFN0YXJ0OiB7IGR4OiBudW1iZXIsIGR5OiBudW1iZXIgfTtcblxuICBtb3ZlU3RhcnQoZXZlbnQsIHBvaW50KSB7XG4gICAgdGhpcy5zdGFydCA9IHt4OiBwb2ludC54LCB5OiBwb2ludC55fTtcbiAgfVxuXG4gIG1vdmVFbmQoZXZlbnQsIHBvaW50KSB7XG4gICAgcG9pbnQueCA9IHRoaXMueC5pbnZlcnQodGhpcy54KHRoaXMuc3RhcnQueCkgKyBldmVudC5kZWx0YVgpO1xuICAgIHBvaW50LnkgPSB0aGlzLnkuaW52ZXJ0KHRoaXMueSh0aGlzLnN0YXJ0LnkpICsgZXZlbnQuZGVsdGFZKTtcbiAgICB0aGlzLl91cGRhdGUubmV4dCgpO1xuICAgIGNvbnN0IGVtaXRFdmVudCA9IHtcbiAgICAgIHR5cGU6ICdlbmQnLFxuICAgICAgc291cmNlRXZlbnQ6IGV2ZW50XG4gICAgfTtcbiAgICB0aGlzLnN2Yy5lbWl0UG9pbnQoe1xuICAgICAgdGFyZ2V0OiB7XG4gICAgICAgIHNlcmllczogdGhpcy5zZXJpZXMsXG4gICAgICAgIHBvaW50OiBwb2ludCxcbiAgICAgIH0sXG4gICAgICBldmVudDogZW1pdEV2ZW50LFxuICAgIH0pO1xuICB9XG5cbiAgbW92ZVByb2Nlc3MoZXZlbnQsIHBvaW50KSB7XG4gICAgcG9pbnQueCA9IHRoaXMueC5pbnZlcnQodGhpcy54KHRoaXMuc3RhcnQueCkgKyBldmVudC5kZWx0YVgpO1xuICAgIHBvaW50LnkgPSB0aGlzLnkuaW52ZXJ0KHRoaXMueSh0aGlzLnN0YXJ0LnkpICsgZXZlbnQuZGVsdGFZKTtcbiAgICB0aGlzLl91cGRhdGUubmV4dCgpO1xuICAgIGNvbnN0IGVtaXRFdmVudCA9IHtcbiAgICAgIHR5cGU6ICdkcmFnJyxcbiAgICAgIHNvdXJjZUV2ZW50OiBldmVudFxuICAgIH07XG4gICAgdGhpcy5zdmMuZW1pdFBvaW50KHtcbiAgICAgIHRhcmdldDoge1xuICAgICAgICBzZXJpZXM6IHRoaXMuc2VyaWVzLFxuICAgICAgICBwb2ludDogcG9pbnQsXG4gICAgICB9LFxuICAgICAgZXZlbnQ6IGVtaXRFdmVudCxcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXJ0TGFiZWwoZXZlbnQsIGxhYmVsKSB7XG4gICAgdGhpcy5sYWJlbFN0YXJ0ID0ge2R4OiBsYWJlbC5keCwgZHk6IGxhYmVsLmR5fTtcbiAgfVxuXG4gIG1vdmVMYWJlbChldmVudCwgbGFiZWwpIHtcbiAgICBsYWJlbC5keCA9IHRoaXMubGFiZWxTdGFydC5keCArIGV2ZW50LmRlbHRhWDtcbiAgICBsYWJlbC5keSA9IHRoaXMubGFiZWxTdGFydC5keSArIGV2ZW50LmRlbHRhWTtcbiAgfVxuXG4gIGFsbG93RHJhZyA9IChwb2ludDogQmFzZVBvaW50KSA9PiB7XG4gICAgcmV0dXJuIChuZXdQb2ludCkgPT4ge1xuICAgICAgaWYgKHBvaW50Lm1hcmtlci5taW5YICE9PSBudWxsICYmIHBvaW50Lm1hcmtlci5taW5YICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHRoaXMueC5pbnZlcnQodGhpcy54KHRoaXMuc3RhcnQueCkgKyBuZXdQb2ludC5kZWx0YVgpIDwgcG9pbnQubWFya2VyLm1pblgpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwb2ludC5tYXJrZXIubWF4WCAhPT0gbnVsbCAmJiBwb2ludC5tYXJrZXIubWF4WCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0aGlzLnguaW52ZXJ0KHRoaXMueCh0aGlzLnN0YXJ0LngpICsgbmV3UG9pbnQuZGVsdGFYKSA+IHBvaW50Lm1hcmtlci5tYXhYKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocG9pbnQubWFya2VyLm1pblkgIT09IG51bGwgJiYgcG9pbnQubWFya2VyLm1pblkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodGhpcy55LmludmVydCh0aGlzLnkodGhpcy5zdGFydC55KSArIG5ld1BvaW50LmRlbHRhWSkgPCBwb2ludC5tYXJrZXIubWluWSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBvaW50Lm1hcmtlci5tYXhZICE9PSBudWxsICYmIHBvaW50Lm1hcmtlci5tYXhZICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHRoaXMueS5pbnZlcnQodGhpcy55KHRoaXMuc3RhcnQueSkgKyBuZXdQb2ludC5kZWx0YVkpID4gcG9pbnQubWFya2VyLm1heFkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gIH07XG59XG4iLCI8c3ZnOnBhdGhcbiAgY2xhc3M9XCJsaW5lXCJcbiAgW2F0dHIuZF09XCJwYXRoIHwgYXN5bmNcIlxuICBbYXR0ci5zdHJva2VdPVwic2VyaWVzLmNvbG9yXCJcbiAgW2F0dHIuc3Ryb2tlLWRhc2hhcnJheV09XCJzZXJpZXMuc3R5bGU/LnN0cm9rZURhc2hhcnJheVwiXG4gIFthdHRyLnN0cm9rZS13aWR0aF09XCJzZXJpZXMuc3R5bGU/LnN0cm9rZVdpZHRoXCJcbiAgZmlsbD1cIm5vbmVcIj5cbjwvc3ZnOnBhdGg+XG5AaWYgKHRyYW5zZm9ybSB8IGFzeW5jOyBhcyB0KSB7XG4gIEBpZiAodD8ueCAhPSBudWxsICYmIHQ/LnkgIT0gbnVsbCkge1xuICAgIDxzdmc6Y2lyY2xlIHI9XCIzXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5maWxsXT1cInNlcmllcy5jb2xvclwiXG4gICAgICAgICAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoJysgdC54ICsnLCAnKyB0LnkgKycpJ1wiPlxuICAgIDwvc3ZnOmNpcmNsZT5cbiAgfVxufVxuQGlmIChtYXJrZXJzOyBhcyBkcmFnZ2FibGVQb2ludHMpIHtcbiAgQGlmICh4ICYmIHkpIHtcbiAgICBAZm9yIChwb2ludCBvZiBkcmFnZ2FibGVQb2ludHM7IHRyYWNrIHBvaW50KSB7XG4gICAgICA8c3ZnOmdcbiAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoJyArIHgocG9pbnQueCkgKyAnLCcgKyB5KHBvaW50LnkpICsgJyknXCI+XG4gICAgICAgIDxzdmc6ZyBbdGV0YURyYWdnYWJsZVBvaW50XT1cInBvaW50Lm1hcmtlci5kcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgW2RyYWdEaXJlY3Rpb25dPVwicG9pbnQubWFya2VyLmRyYWdUeXBlXCJcbiAgICAgICAgICAgICAgIFthbGxvd0RyYWddPVwiYWxsb3dEcmFnKHBvaW50KVwiXG4gICAgICAgICAgICAgICAjZHJhZ1BvaW50PVwidGV0YURyYWdnYWJsZVBvaW50XCJcbiAgICAgICAgICAgICAgIChtb3ZlU3RhcnQpPVwibW92ZVN0YXJ0KCRldmVudCwgcG9pbnQpXCJcbiAgICAgICAgICAgICAgIChtb3ZlRW5kKT1cIm1vdmVFbmQoJGV2ZW50LCBwb2ludCk7ZHJhZ1BvaW50LnJlc2V0VHJhbnNmb3JtKCk7XCJcbiAgICAgICAgICAgICAgIChtb3ZlUHJvY2Vzcyk9XCJtb3ZlUHJvY2VzcygkZXZlbnQsIHBvaW50KTtkcmFnUG9pbnQucmVzZXRUcmFuc2Zvcm0oKTtcIlxuICAgICAgICAgICAgICAgW2NsYXNzLmRyYWdnYWJsZS1tYXJrZXJdPVwicG9pbnQ/Lm1hcmtlcj8uZHJhZ2dhYmxlXCI+XG4gICAgICAgICAgPHN2ZzpjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwibWFya2VyXCJcbiAgICAgICAgICAgIFthdHRyLnJdPVwicG9pbnQubWFya2VyLnN0eWxlPy5yYWRpdXMgPz8gNVwiXG4gICAgICAgICAgICBbYXR0ci5maWxsXT1cInBvaW50Lm1hcmtlci5zdHlsZT8uZmlsbCA/PyAndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJwb2ludC5tYXJrZXIuc3R5bGU/LnN0cm9rZSA/PyAnbm9uZSdcIlxuICAgICAgICAgICAgW2F0dHIuc3Ryb2tlLXdpZHRoXT1cInBvaW50Lm1hcmtlci5zdHlsZT8uc3Ryb2tlV2lkdGhcIlxuICAgICAgICAgICAgW2F0dHIuc3Ryb2tlLWRhc2hhcnJheV09XCJwb2ludC5tYXJrZXIuc3R5bGU/LnN0cm9rZURhc2hhcnJheVwiXG4gICAgICAgICAgICBbYXR0ci5jeF09XCIwXCJcbiAgICAgICAgICAgIFthdHRyLmN5XT1cIjBcIj5cbiAgICAgICAgICA8L3N2ZzpjaXJjbGU+XG4gICAgICAgICAgQGlmIChwb2ludC5tYXJrZXIubGFiZWw/LnRleHQpIHtcbiAgICAgICAgICAgIDxzdmc6bGluZVxuICAgICAgICAgICAgICBbYXR0ci54MV09XCIwXCJcbiAgICAgICAgICAgICAgW2F0dHIueTFdPVwiMFwiXG4gICAgICAgICAgICAgIFthdHRyLngyXT1cInBvaW50Lm1hcmtlci5sYWJlbD8uZHhcIlxuICAgICAgICAgICAgICBbYXR0ci55Ml09XCJwb2ludC5tYXJrZXIubGFiZWw/LmR5XCJcbiAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInBvaW50Lm1hcmtlci5sYWJlbD8uc3R5bGU/LnN0cm9rZSA/PyAndmFyKC0tY29sb3ItdGV4dC05MCknXCJcbiAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlLXdpZHRoXT1cInBvaW50Lm1hcmtlci5sYWJlbD8uc3R5bGU/LnN0cm9rZVdpZHRoID8/IDFcIlxuICAgICAgICAgICAgICBbYXR0ci5zdHJva2UtZGFzaGFycmF5XT1cInBvaW50Lm1hcmtlci5sYWJlbD8uc3R5bGU/LnN0cm9rZURhc2hhcnJheSA/PyBudWxsXCI+XG4gICAgICAgICAgICA8L3N2ZzpsaW5lPlxuICAgICAgICAgICAgPHN2Zzpmb3JlaWduT2JqZWN0XG4gICAgICAgICAgICAgIFt0ZXRhRHJhZ2dhYmxlUG9pbnRdPVwicG9pbnQubWFya2VyLmxhYmVsPy5kcmFnZ2FibGVcIlxuICAgICAgICAgICAgICBbZHJhZ0RpcmVjdGlvbl09XCJwb2ludC5tYXJrZXIubGFiZWwuZHJhZ1R5cGVcIlxuICAgICAgICAgICAgICAjbGFiZWxQb2ludD1cInRldGFEcmFnZ2FibGVQb2ludFwiXG4gICAgICAgICAgICAgIChtb3ZlU3RhcnQpPVwic3RhcnRMYWJlbCgkZXZlbnQsIHBvaW50Lm1hcmtlci5sYWJlbClcIlxuICAgICAgICAgICAgICAobW92ZVByb2Nlc3MpPVwibW92ZUxhYmVsKCRldmVudCwgcG9pbnQubWFya2VyLmxhYmVsKTsgbGFiZWxQb2ludC5yZXNldFRyYW5zZm9ybSgpO1wiXG4gICAgICAgICAgICAgIChtb3ZlRW5kKT1cImxhYmVsUG9pbnQucmVzZXRUcmFuc2Zvcm0oKTtcIlxuICAgICAgICAgICAgICBbYXR0ci53aWR0aF09XCJhbm5vdGF0aW9uTm9kZT8ub2Zmc2V0V2lkdGggPz8gMFwiXG4gICAgICAgICAgICAgIFthdHRyLmhlaWdodF09XCJhbm5vdGF0aW9uTm9kZT8ub2Zmc2V0SGVpZ2h0ID8/IDBcIlxuICAgICAgICAgICAgICBbYXR0ci54XT1cInBvaW50Lm1hcmtlci5sYWJlbD8uZHhcIlxuICAgICAgICAgICAgICBbYXR0ci55XT1cInBvaW50Lm1hcmtlci5sYWJlbD8uZHlcIlxuICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAjYW5ub3RhdGlvbk5vZGVcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNoYWRvdy0yIHBhZGRpbmctMlwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIid2YXIoLS1jb2xvci10ZXh0LTkwKSdcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIid2YXIoLS1jb2xvci1nbG9iYWwtYmdjYXJkKSdcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5jdXJzb3JdPVwiJ21vdmUnXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDJweDsgZGlzcGxheTogaW5saW5lLWJsb2NrO1wiPlxuICAgICAgICAgICAgICAgIHt7IHBvaW50Lm1hcmtlci5sYWJlbD8udGV4dCB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvc3ZnOmZvcmVpZ25PYmplY3Q+XG4gICAgICAgICAgfVxuICAgICAgICA8L3N2ZzpnPlxuICAgICAgPC9zdmc6Zz5cbiAgICB9XG4gIH1cbn1cbiJdfQ==
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1zZXJpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvbGluZS9saW5lLXNlcmllcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2hhcnQvY2hhcnQtY29udGFpbmVyL3Nlcmllcy9saW5lL2xpbmUtc2VyaWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7Ozs7O0FBVXhGLE1BQU0sT0FBTyxtQkFBeUMsU0FBUSxnQkFBbUI7SUFDL0UsWUFDcUIsR0FBaUIsRUFDakIsR0FBc0IsRUFDdEIsWUFBMEIsRUFDMUIsV0FBd0IsRUFDeEIsT0FBbUI7UUFFdEMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQU5qQyxRQUFHLEdBQUgsR0FBRyxDQUFjO1FBQ2pCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFlBQU8sR0FB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RSxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUs7UUFDcEIsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzdDLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUMvQyxDQUFDOzhHQTNEVSxtQkFBbUI7a0dBQW5CLG1CQUFtQiw0R0NqQmhDLCs1RkFzRUEsc0lEdkRZLFNBQVMsOENBQUUsdUJBQXVCOzsyRkFFakMsbUJBQW1CO2tCQVIvQixTQUFTOytCQUNFLDJCQUEyQixjQUd6QixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxTQUFTLEVBQUUsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvY2hhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlUG9pbnQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbC9iYXNlLXBvaW50JztcbmltcG9ydCB7IFNjYWxlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2Uvc2NhbGUuc2VydmljZSc7XG5pbXBvcnQgeyBab29tU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2Uvem9vbS5zZXJ2aWNlJztcbmltcG9ydCB7IExpbmVhclNlcmllc0Jhc2UgfSBmcm9tICcuLi9saW5lYXItc2VyaWVzLWJhc2UnO1xuaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERyYWdnYWJsZVBvaW50RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9kcmFnZ2FibGUtcG9pbnQuZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3ZnOnN2Z1t0ZXRhLWxpbmUtc2VyaWVzXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9saW5lLXNlcmllcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2xpbmUtc2VyaWVzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbQXN5bmNQaXBlLCBEcmFnZ2FibGVQb2ludERpcmVjdGl2ZV0sXG59KVxuZXhwb3J0IGNsYXNzIExpbmVTZXJpZXNDb21wb25lbnQ8VCBleHRlbmRzIEJhc2VQb2ludD4gZXh0ZW5kcyBMaW5lYXJTZXJpZXNCYXNlPFQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc3ZjOiBDaGFydFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHNjYWxlU2VydmljZTogU2NhbGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB6b29tU2VydmljZTogWm9vbVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGVsZW1lbnQ6IEVsZW1lbnRSZWZcbiAgKSB7XG4gICAgc3VwZXIoc3ZjLCBjZHIsIHNjYWxlU2VydmljZSwgem9vbVNlcnZpY2UsIGVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9O1xuICBwcml2YXRlIGxhYmVsU3RhcnQ6IHsgZHg6IG51bWJlcjsgZHk6IG51bWJlciB9O1xuXG4gIG1vdmVTdGFydChldmVudCwgcG9pbnQpIHtcbiAgICB0aGlzLnN0YXJ0ID0geyB4OiBwb2ludC54LCB5OiBwb2ludC55IH07XG4gIH1cblxuICBtb3ZlRW5kKGV2ZW50LCBwb2ludCkge1xuICAgIHBvaW50LnggPSB0aGlzLnguaW52ZXJ0KHRoaXMueCh0aGlzLnN0YXJ0LngpICsgZXZlbnQuZGVsdGFYKTtcbiAgICBwb2ludC55ID0gdGhpcy55LmludmVydCh0aGlzLnkodGhpcy5zdGFydC55KSArIGV2ZW50LmRlbHRhWSk7XG4gICAgdGhpcy5fdXBkYXRlLm5leHQoKTtcbiAgICBjb25zdCBlbWl0RXZlbnQgPSB7XG4gICAgICB0eXBlOiAnZW5kJyxcbiAgICAgIHNvdXJjZUV2ZW50OiBldmVudCxcbiAgICB9O1xuICAgIHRoaXMuc3ZjLmVtaXRQb2ludCh7XG4gICAgICB0YXJnZXQ6IHtcbiAgICAgICAgc2VyaWVzOiB0aGlzLnNlcmllcyxcbiAgICAgICAgcG9pbnQ6IHBvaW50LFxuICAgICAgfSxcbiAgICAgIGV2ZW50OiBlbWl0RXZlbnQsXG4gICAgfSk7XG4gIH1cblxuICBtb3ZlUHJvY2VzcyhldmVudCwgcG9pbnQpIHtcbiAgICBwb2ludC54ID0gdGhpcy54LmludmVydCh0aGlzLngodGhpcy5zdGFydC54KSArIGV2ZW50LmRlbHRhWCk7XG4gICAgcG9pbnQueSA9IHRoaXMueS5pbnZlcnQodGhpcy55KHRoaXMuc3RhcnQueSkgKyBldmVudC5kZWx0YVkpO1xuICAgIHRoaXMuX3VwZGF0ZS5uZXh0KCk7XG4gICAgY29uc3QgZW1pdEV2ZW50ID0ge1xuICAgICAgdHlwZTogJ2RyYWcnLFxuICAgICAgc291cmNlRXZlbnQ6IGV2ZW50LFxuICAgIH07XG4gICAgdGhpcy5zdmMuZW1pdFBvaW50KHtcbiAgICAgIHRhcmdldDoge1xuICAgICAgICBzZXJpZXM6IHRoaXMuc2VyaWVzLFxuICAgICAgICBwb2ludDogcG9pbnQsXG4gICAgICB9LFxuICAgICAgZXZlbnQ6IGVtaXRFdmVudCxcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXJ0TGFiZWwoZXZlbnQsIGxhYmVsKSB7XG4gICAgdGhpcy5sYWJlbFN0YXJ0ID0geyBkeDogbGFiZWwuZHgsIGR5OiBsYWJlbC5keSB9O1xuICB9XG5cbiAgbW92ZUxhYmVsKGV2ZW50LCBsYWJlbCkge1xuICAgIGxhYmVsLmR4ID0gdGhpcy5sYWJlbFN0YXJ0LmR4ICsgZXZlbnQuZGVsdGFYO1xuICAgIGxhYmVsLmR5ID0gdGhpcy5sYWJlbFN0YXJ0LmR5ICsgZXZlbnQuZGVsdGFZO1xuICB9XG5cbiAgYWxsb3dEcmFnID0gKHBvaW50OiBCYXNlUG9pbnQpID0+IHtcbiAgICByZXR1cm4gKG5ld1BvaW50KSA9PiB7XG4gICAgICBpZiAocG9pbnQubWFya2VyLm1pblggIT09IG51bGwgJiYgcG9pbnQubWFya2VyLm1pblggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodGhpcy54LmludmVydCh0aGlzLngodGhpcy5zdGFydC54KSArIG5ld1BvaW50LmRlbHRhWCkgPCBwb2ludC5tYXJrZXIubWluWCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBvaW50Lm1hcmtlci5tYXhYICE9PSBudWxsICYmIHBvaW50Lm1hcmtlci5tYXhYICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHRoaXMueC5pbnZlcnQodGhpcy54KHRoaXMuc3RhcnQueCkgKyBuZXdQb2ludC5kZWx0YVgpID4gcG9pbnQubWFya2VyLm1heFgpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwb2ludC5tYXJrZXIubWluWSAhPT0gbnVsbCAmJiBwb2ludC5tYXJrZXIubWluWSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0aGlzLnkuaW52ZXJ0KHRoaXMueSh0aGlzLnN0YXJ0LnkpICsgbmV3UG9pbnQuZGVsdGFZKSA8IHBvaW50Lm1hcmtlci5taW5ZKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocG9pbnQubWFya2VyLm1heFkgIT09IG51bGwgJiYgcG9pbnQubWFya2VyLm1heFkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodGhpcy55LmludmVydCh0aGlzLnkodGhpcy5zdGFydC55KSArIG5ld1BvaW50LmRlbHRhWSkgPiBwb2ludC5tYXJrZXIubWF4WSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfTtcbn1cbiIsIjxzdmc6cGF0aFxuICBjbGFzcz1cImxpbmVcIlxuICBbYXR0ci5kXT1cInBhdGggfCBhc3luY1wiXG4gIFthdHRyLnN0cm9rZV09XCJzZXJpZXMuY29sb3JcIlxuICBbYXR0ci5zdHJva2UtZGFzaGFycmF5XT1cInNlcmllcy5zdHlsZT8uc3Ryb2tlRGFzaGFycmF5XCJcbiAgW2F0dHIuc3Ryb2tlLXdpZHRoXT1cInNlcmllcy5zdHlsZT8uc3Ryb2tlV2lkdGhcIlxuICBmaWxsPVwibm9uZVwiXG4+PC9zdmc6cGF0aD5cbkBpZiAodHJhbnNmb3JtIHwgYXN5bmM7IGFzIHQpIHsgQGlmICh0Py54ICE9IG51bGwgJiYgdD8ueSAhPSBudWxsKSB7XG48c3ZnOmNpcmNsZSByPVwiM1wiIFthdHRyLmZpbGxdPVwic2VyaWVzLmNvbG9yXCIgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoJyArIHQueCArICcsICcgKyB0LnkgKyAnKSdcIj48L3N2ZzpjaXJjbGU+XG59IH0gQGlmIChtYXJrZXJzOyBhcyBkcmFnZ2FibGVQb2ludHMpIHsgQGlmICh4ICYmIHkpIHsgQGZvciAocG9pbnQgb2YgZHJhZ2dhYmxlUG9pbnRzOyB0cmFjayBwb2ludCkge1xuPHN2ZzpnIFthdHRyLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlKCcgKyB4KHBvaW50LngpICsgJywnICsgeShwb2ludC55KSArICcpJ1wiPlxuICA8c3ZnOmdcbiAgICBbdGV0YURyYWdnYWJsZVBvaW50XT1cInBvaW50Lm1hcmtlci5kcmFnZ2FibGVcIlxuICAgIFtkcmFnRGlyZWN0aW9uXT1cInBvaW50Lm1hcmtlci5kcmFnVHlwZVwiXG4gICAgW2FsbG93RHJhZ109XCJhbGxvd0RyYWcocG9pbnQpXCJcbiAgICAjZHJhZ1BvaW50PVwidGV0YURyYWdnYWJsZVBvaW50XCJcbiAgICAobW92ZVN0YXJ0KT1cIm1vdmVTdGFydCgkZXZlbnQsIHBvaW50KVwiXG4gICAgKG1vdmVFbmQpPVwibW92ZUVuZCgkZXZlbnQsIHBvaW50KTsgZHJhZ1BvaW50LnJlc2V0VHJhbnNmb3JtKClcIlxuICAgIChtb3ZlUHJvY2Vzcyk9XCJtb3ZlUHJvY2VzcygkZXZlbnQsIHBvaW50KTsgZHJhZ1BvaW50LnJlc2V0VHJhbnNmb3JtKClcIlxuICAgIFtjbGFzcy5kcmFnZ2FibGUtbWFya2VyXT1cInBvaW50Py5tYXJrZXI/LmRyYWdnYWJsZVwiXG4gID5cbiAgICA8c3ZnOmNpcmNsZVxuICAgICAgY2xhc3M9XCJtYXJrZXJcIlxuICAgICAgW2F0dHIucl09XCJwb2ludC5tYXJrZXIuc3R5bGU/LnJhZGl1cyA/PyA1XCJcbiAgICAgIFthdHRyLmZpbGxdPVwicG9pbnQubWFya2VyLnN0eWxlPy5maWxsID8/ICd0cmFuc3BhcmVudCdcIlxuICAgICAgW2F0dHIuc3Ryb2tlXT1cInBvaW50Lm1hcmtlci5zdHlsZT8uc3Ryb2tlID8/ICdub25lJ1wiXG4gICAgICBbYXR0ci5zdHJva2Utd2lkdGhdPVwicG9pbnQubWFya2VyLnN0eWxlPy5zdHJva2VXaWR0aFwiXG4gICAgICBbYXR0ci5zdHJva2UtZGFzaGFycmF5XT1cInBvaW50Lm1hcmtlci5zdHlsZT8uc3Ryb2tlRGFzaGFycmF5XCJcbiAgICAgIFthdHRyLmN4XT1cIjBcIlxuICAgICAgW2F0dHIuY3ldPVwiMFwiXG4gICAgPjwvc3ZnOmNpcmNsZT5cbiAgICBAaWYgKHBvaW50Lm1hcmtlci5sYWJlbD8udGV4dCkge1xuICAgIDxzdmc6bGluZVxuICAgICAgW2F0dHIueDFdPVwiMFwiXG4gICAgICBbYXR0ci55MV09XCIwXCJcbiAgICAgIFthdHRyLngyXT1cInBvaW50Lm1hcmtlci5sYWJlbD8uZHhcIlxuICAgICAgW2F0dHIueTJdPVwicG9pbnQubWFya2VyLmxhYmVsPy5keVwiXG4gICAgICBbYXR0ci5zdHJva2VdPVwicG9pbnQubWFya2VyLmxhYmVsPy5zdHlsZT8uc3Ryb2tlID8/ICd2YXIoLS1jb2xvci10ZXh0LTkwKSdcIlxuICAgICAgW2F0dHIuc3Ryb2tlLXdpZHRoXT1cInBvaW50Lm1hcmtlci5sYWJlbD8uc3R5bGU/LnN0cm9rZVdpZHRoID8/IDFcIlxuICAgICAgW2F0dHIuc3Ryb2tlLWRhc2hhcnJheV09XCJwb2ludC5tYXJrZXIubGFiZWw/LnN0eWxlPy5zdHJva2VEYXNoYXJyYXkgPz8gbnVsbFwiXG4gICAgPjwvc3ZnOmxpbmU+XG4gICAgPHN2Zzpmb3JlaWduT2JqZWN0XG4gICAgICBbdGV0YURyYWdnYWJsZVBvaW50XT1cInBvaW50Lm1hcmtlci5sYWJlbD8uZHJhZ2dhYmxlXCJcbiAgICAgIFtkcmFnRGlyZWN0aW9uXT1cInBvaW50Lm1hcmtlci5sYWJlbC5kcmFnVHlwZVwiXG4gICAgICAjbGFiZWxQb2ludD1cInRldGFEcmFnZ2FibGVQb2ludFwiXG4gICAgICAobW92ZVN0YXJ0KT1cInN0YXJ0TGFiZWwoJGV2ZW50LCBwb2ludC5tYXJrZXIubGFiZWwpXCJcbiAgICAgIChtb3ZlUHJvY2Vzcyk9XCJtb3ZlTGFiZWwoJGV2ZW50LCBwb2ludC5tYXJrZXIubGFiZWwpOyBsYWJlbFBvaW50LnJlc2V0VHJhbnNmb3JtKClcIlxuICAgICAgKG1vdmVFbmQpPVwibGFiZWxQb2ludC5yZXNldFRyYW5zZm9ybSgpXCJcbiAgICAgIFthdHRyLndpZHRoXT1cImFubm90YXRpb25Ob2RlPy5vZmZzZXRXaWR0aCA/PyAwXCJcbiAgICAgIFthdHRyLmhlaWdodF09XCJhbm5vdGF0aW9uTm9kZT8ub2Zmc2V0SGVpZ2h0ID8/IDBcIlxuICAgICAgW2F0dHIueF09XCJwb2ludC5tYXJrZXIubGFiZWw/LmR4XCJcbiAgICAgIFthdHRyLnldPVwicG9pbnQubWFya2VyLmxhYmVsPy5keVwiXG4gICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgICNhbm5vdGF0aW9uTm9kZVxuICAgICAgICBjbGFzcz1cInNoYWRvdy0yIHBhZGRpbmctMlwiXG4gICAgICAgIFtzdHlsZS5jb2xvcl09XCIndmFyKC0tY29sb3ItdGV4dC05MCknXCJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiJ3ZhcigtLWNvbG9yLWdsb2JhbC1iZ2NhcmQpJ1wiXG4gICAgICAgIFtzdHlsZS5jdXJzb3JdPVwiJ21vdmUnXCJcbiAgICAgICAgc3R5bGU9XCJib3JkZXItcmFkaXVzOiAycHg7IGRpc3BsYXk6IGlubGluZS1ibG9ja1wiXG4gICAgICA+XG4gICAgICAgIHt7IHBvaW50Lm1hcmtlci5sYWJlbD8udGV4dCB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9zdmc6Zm9yZWlnbk9iamVjdD5cbiAgICB9XG4gIDwvc3ZnOmc+XG48L3N2ZzpnPlxufSB9IH1cbiJdfQ==