@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
@@ -1,5 +1,5 @@
1
- import { ChangeDetectionStrategy, Component, ElementRef, NgZone, } from '@angular/core';
2
- import { animationFrameScheduler, combineLatest, map, observeOn, shareReplay, withLatestFrom, } from 'rxjs';
1
+ import { ChangeDetectionStrategy, Component, ElementRef, NgZone } from '@angular/core';
2
+ import { animationFrameScheduler, combineLatest, map, observeOn, shareReplay, withLatestFrom } from 'rxjs';
3
3
  import { AxisOrientation } from '../model/enum/axis-orientation';
4
4
  import { BrushType } from '../model/enum/brush-type';
5
5
  import { ZoomType } from '../model/enum/zoom-type';
@@ -29,10 +29,8 @@ export class ChartContainerComponent {
29
29
  this._zone = _zone;
30
30
  this.zoomType = ZoomType;
31
31
  this.filterPositionMap = new Map()
32
- .set(true, axis => (_) => _.options.opposite && _.options.visible && axis.index <= _.index)
33
- .set(false, axis => (_) => _.options.opposite !== true &&
34
- _.options.visible &&
35
- _.index <= axis.index);
32
+ .set(true, (axis) => (_) => _.options.opposite && _.options.visible && axis.index <= _.index)
33
+ .set(false, (axis) => (_) => _.options.opposite !== true && _.options.visible && _.index <= axis.index);
36
34
  this.sumSize = (acc, curr) => acc + curr.selfSize;
37
35
  this.config = this._svc.config;
38
36
  this.size = this._svc.size;
@@ -43,7 +41,7 @@ export class ChartContainerComponent {
43
41
  this.plotBands = combineLatest([this.config, this.scales]).pipe(map(([config, scales]) => {
44
42
  const bands = [];
45
43
  config.xAxis?.forEach((axis, index) => {
46
- axis.plotBands?.forEach(band => {
44
+ axis.plotBands?.forEach((band) => {
47
45
  bands.push({
48
46
  plotBand: band,
49
47
  axis: scales.x.get(index),
@@ -51,7 +49,7 @@ export class ChartContainerComponent {
51
49
  });
52
50
  });
53
51
  config.yAxis?.forEach((axis, index) => {
54
- axis.plotBands?.forEach(band => {
52
+ axis.plotBands?.forEach((band) => {
55
53
  bands.push({
56
54
  plotBand: band,
57
55
  axis: scales.y.get(index),
@@ -62,47 +60,28 @@ export class ChartContainerComponent {
62
60
  }));
63
61
  this.brushScale = this._scaleService.scales.pipe(withLatestFrom(this.config), map((data) => {
64
62
  const [{ x, y }, config] = data;
65
- return config.brush?.type === BrushType.x ||
66
- config?.zoom?.type === ZoomType.x
63
+ return config.brush?.type === BrushType.x || config?.zoom?.type === ZoomType.x
67
64
  ? x.get(0)?.scale
68
65
  : y.get(0)?.scale;
69
66
  }), shareReplay({
70
67
  bufferSize: 1,
71
68
  refCount: true,
72
69
  }));
73
- this.visibleRect = combineLatest([
74
- this.size,
75
- this.scales,
76
- this.config,
77
- ]).pipe(map((data) => {
70
+ this.visibleRect = combineLatest([this.size, this.scales, this.config]).pipe(map((data) => {
78
71
  const [size, { x, y }, config] = data;
79
72
  const yAxesArray = Array.from(y.values());
80
73
  const xAxesArray = Array.from(x.values());
81
- const left = yAxesArray
82
- .filter(_ => _.options.opposite !== true && _.options.visible)
83
- .reduce(this.sumSize, 0);
84
- const right = yAxesArray
85
- .filter(_ => _.options.opposite && _.options.visible)
86
- .reduce(this.sumSize, 0);
74
+ const left = yAxesArray.filter((_) => _.options.opposite !== true && _.options.visible).reduce(this.sumSize, 0);
75
+ const right = yAxesArray.filter((_) => _.options.opposite && _.options.visible).reduce(this.sumSize, 0);
87
76
  const bottom = xAxesArray
88
- .filter(_ => _.options.opposite !== true && _.options.visible)
89
- .reduce(this.sumSize, 0);
90
- const top = xAxesArray
91
- .filter(_ => _.options.opposite && _.options.visible)
77
+ .filter((_) => _.options.opposite !== true && _.options.visible)
92
78
  .reduce(this.sumSize, 0);
79
+ const top = xAxesArray.filter((_) => _.options.opposite && _.options.visible).reduce(this.sumSize, 0);
93
80
  return {
94
81
  x: left + config.bounds?.left,
95
82
  y: top + config.bounds?.top,
96
- width: size.width -
97
- left -
98
- right -
99
- config.bounds?.left -
100
- config.bounds?.right,
101
- height: size.height -
102
- top -
103
- bottom -
104
- config.bounds?.top -
105
- config.bounds?.bottom,
83
+ width: size.width - left - right - config.bounds?.left - config.bounds?.right,
84
+ height: size.height - top - bottom - config.bounds?.top - config.bounds?.bottom,
106
85
  };
107
86
  }), tetaZoneFull(this._zone), shareReplay({
108
87
  bufferSize: 1,
@@ -143,20 +122,16 @@ export class ChartContainerComponent {
143
122
  const oppositeTranslateX = oppositeOffsetX.reduce((acc, curr) => acc + curr.selfSize, config.bounds?.top);
144
123
  const nonOppisteTranslateX = nonOppositeOffsetX.reduce((acc, curr) => acc + curr.selfSize, config.bounds?.bottom);
145
124
  const left = yAxesArray
146
- .filter(_ => _.options.visible && _.options.opposite !== true)
125
+ .filter((_) => _.options.visible && _.options.opposite !== true)
147
126
  .reduce((acc, curr) => acc + curr.selfSize, config.bounds?.left);
148
127
  const top = xAxesArray
149
- .filter(_ => _.options.visible && _.options.opposite === true)
128
+ .filter((_) => _.options.visible && _.options.opposite === true)
150
129
  .reduce((acc, curr) => acc + curr.selfSize, config.bounds?.top);
151
130
  if (axis.orientation === AxisOrientation.x) {
152
- return `translate(${left}, ${axis.options.opposite
153
- ? oppositeTranslateX
154
- : size.height - nonOppisteTranslateX})`;
131
+ return `translate(${left}, ${axis.options.opposite ? oppositeTranslateX : size.height - nonOppisteTranslateX})`;
155
132
  }
156
133
  if (axis.orientation === AxisOrientation.y) {
157
- return `translate(${axis.options.opposite
158
- ? size.width - oppositeTranslateY
159
- : nonOppisteTranslateY}, ${top})`;
134
+ return `translate(${axis.options.opposite ? size.width - oppositeTranslateY : nonOppisteTranslateY}, ${top})`;
160
135
  }
161
136
  return 'translate(0, 0)';
162
137
  }));
@@ -193,7 +168,7 @@ export class ChartContainerComponent {
193
168
  return item.name?.length ? item.name : index;
194
169
  }
195
170
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ChartContainerComponent, deps: [{ token: i1.ChartService }, { token: i2.ScaleService }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
196
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: ChartContainerComponent, isStandalone: true, selector: "teta-chart-container", ngImport: i0, template: "@if ({\n size: size | async,\n config: config | async,\n scales: scales | async,\n plotBands: plotBands | async,\n visibleRect: visibleRect | async\n}; as data) {\n @if (data.config?.tooltip?.enable) {\n <teta-tooltip [size]=\"data.size\"\n [config]=\"data.config\"></teta-tooltip>\n }\n @if (data.size?.height > 0\n && data.size?.width > 0\n && data.visibleRect?.height > 0\n && data.visibleRect?.width > 0\n && data.scales?.x.size === data.config.xAxis.length\n && data.scales?.y.size === data.config.yAxis.length) {\n <svg height=\"100%\" width=\"100%\" class=\"position-absolute\">\n <g class=\"y-axis-container\">\n @for (item of data.scales.y | keyvalue; track item.value.index) {\n @if (item.value.selfSize > 0\n && item.value.options.visible\n && data.scales.x.size > 0\n && data.scales.y.size > 0) {\n <g\n teta-y-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"item.value.options.opposite ? 0 : -item.value.selfSize\"\n [attr.y]=\"0\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.width]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></rect>\n }\n }\n </g>\n <g class=\"x-axis-container\">\n @for (item of data.scales.x | keyvalue; track item.value.index) {\n @if (item.value.options.visible && data.scales.x.size > 0 && data.scales.y.size > 0) {\n <g\n teta-x-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"0\"\n [attr.y]=\"item.value.options.opposite ? -item.value.selfSize : 0\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></rect>\n }\n }\n </g>\n </svg>\n }\n @if (data.size?.height > 0\n && data.size?.width > 0\n && data.visibleRect?.height > 0\n && data.visibleRect?.width > 0\n && data.scales?.x.size === data.config.xAxis.length\n && data.scales?.y.size === data.config.yAxis.length) {\n <svg\n tetaZoomable\n tetaBrushable\n class=\"position-absolute\"\n [size]=\"data.visibleRect\"\n [config]=\"data.config\"\n [axis]=\"data.config?.zoom?.type === zoomType.x ? data.scales.x.get(0) : data.scales.y.get(0)\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.viewBox]=\"'0 0 ' + data.visibleRect.width + ' ' + data.visibleRect.height\"\n [style.transform]=\"'translate('+ data.visibleRect.x +'px, '+ data.visibleRect.y +'px)'\"\n (contextmenu)=\"contextMenu($event, data.scales.x, data.scales.y)\"\n (click)=\"click($event, data.scales.x, data.scales.y)\"\n (mouseleave)=\"mouseLeave($event)\"\n (mousemove)=\"mouseMove($event)\">\n @if (data.config.gridLines?.enable !== false) {\n <g class=\"gridlines\"\n teta-gridlines\n [size]=\"data.size\"></g>\n }\n <g class=\"x-axis-plotband-container\">\n @for (plotBand of data.plotBands; track plotBand) {\n <g teta-plot-band\n [plotBand]=\"plotBand.plotBand\"\n [scale]=\"plotBand.axis.scale\"\n [size]=\"data.visibleRect\"\n [axis]=\"plotBand.axis\"></g>\n }\n </g>\n <g class=\"series-container\">\n @for (series of data.config.series; track series; ) {\n @if (series.visible) {\n <g teta-series-host\n [config]=\"data.config\"\n [series]=\"series\"></g>\n }\n }\n </g>\n <g class=\"x-axis-plotline-container\">\n @for (axis of data.config.xAxis; let i = $index; track axis) {\n @for (plotLine of axis.plotLines; track plotLine) {\n <g teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.x.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.x.get(i)\"></g>\n }\n }\n </g>\n <g class=\"y-axis-plotline-container\">\n @for (axis of data.config.yAxis; let i = $index; track axis; ) {\n @for (plotLine of axis.plotLines; track plotLine) {\n <g teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.y.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.y.get(i)\"></g>\n }\n }\n </g>\n <g class=\"annotations\">\n @for (annotation of data.config.annotations; track annotation) {\n <g teta-annotation\n [visibleRect]=\"data.visibleRect\"\n [annotation]=\"annotation\"></g>\n }\n </g>\n @if (data.config.tooltip?.showCrosshair) {\n <g class=\"crosshair\">\n <g teta-crosshair [size]=\"data.visibleRect\"></g>\n </g>\n }\n </svg>\n }\n}\n", styles: [":host{display:flex;flex-direction:column;flex-grow:1;min-width:0;min-height:0}:host .zoomable:hover{cursor:grab}:host .zoomable:active{cursor:grabbing}:host .crosshair{cursor:crosshair}\n"], dependencies: [{ kind: "component", type: TooltipComponent, selector: "teta-tooltip", inputs: ["size", "config"] }, { kind: "directive", type: ZoomableDirective, selector: "[tetaZoomable]", inputs: ["config", "axis", "size"] }, { kind: "component", type: XAxisComponent, selector: "[teta-x-axis]", inputs: ["axis", "size"] }, { kind: "component", type: YAxisComponent, selector: "[teta-y-axis]", inputs: ["axis", "size"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "component", type: PlotBandComponent, selector: "[teta-plot-band]", inputs: ["plotBand", "axis", "scale", "size"] }, { kind: "component", type: GridlinesComponent, selector: "[teta-gridlines]", inputs: ["size"] }, { kind: "component", type: SeriesHostComponent, selector: "[teta-series-host]", inputs: ["config", "series"] }, { kind: "component", type: PlotlineComponent, selector: "[teta-plot-line]", inputs: ["plotLine", "size", "axis", "scale"] }, { kind: "component", type: AnnotationComponent, selector: "[teta-annotation]", inputs: ["visibleRect", "annotation"] }, { kind: "component", type: CrosshairComponent, selector: "[teta-crosshair]", inputs: ["size"] }, { kind: "directive", type: BrushableDirective, selector: "[tetaBrushable]", inputs: ["config", "axis"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
171
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: ChartContainerComponent, isStandalone: true, selector: "teta-chart-container", ngImport: i0, template: "@if ({ size: size | async, config: config | async, scales: scales | async, plotBands: plotBands | async, visibleRect:\nvisibleRect | async }; as data) { @if (data.config?.tooltip?.enable) {\n<teta-tooltip [size]=\"data.size\" [config]=\"data.config\"></teta-tooltip>\n} @if (data.size?.height > 0 && data.size?.width > 0 && data.visibleRect?.height > 0 && data.visibleRect?.width > 0 &&\ndata.scales?.x.size === data.config.xAxis.length && data.scales?.y.size === data.config.yAxis.length) {\n<svg height=\"100%\" width=\"100%\" class=\"position-absolute\">\n <g class=\"y-axis-container\">\n @for (item of data.scales.y | keyvalue; track item.value.index) { @if (item.value.selfSize > 0 &&\n item.value.options.visible && data.scales.x.size > 0 && data.scales.y.size > 0) {\n <g\n teta-y-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"item.value.options.opposite ? 0 : -item.value.selfSize\"\n [attr.y]=\"0\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.width]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></rect>\n } }\n </g>\n <g class=\"x-axis-container\">\n @for (item of data.scales.x | keyvalue; track item.value.index) { @if (item.value.options.visible &&\n data.scales.x.size > 0 && data.scales.y.size > 0) {\n <g\n teta-x-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"0\"\n [attr.y]=\"item.value.options.opposite ? -item.value.selfSize : 0\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></rect>\n } }\n </g>\n</svg>\n} @if (data.size?.height > 0 && data.size?.width > 0 && data.visibleRect?.height > 0 && data.visibleRect?.width > 0 &&\ndata.scales?.x.size === data.config.xAxis.length && data.scales?.y.size === data.config.yAxis.length) {\n<svg\n tetaZoomable\n tetaBrushable\n class=\"position-absolute\"\n [size]=\"data.visibleRect\"\n [config]=\"data.config\"\n [axis]=\"data.config?.zoom?.type === zoomType.x ? data.scales.x.get(0) : data.scales.y.get(0)\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.viewBox]=\"'0 0 ' + data.visibleRect.width + ' ' + data.visibleRect.height\"\n [style.transform]=\"'translate(' + data.visibleRect.x + 'px, ' + data.visibleRect.y + 'px)'\"\n (contextmenu)=\"contextMenu($event, data.scales.x, data.scales.y)\"\n (click)=\"click($event, data.scales.x, data.scales.y)\"\n (mouseleave)=\"mouseLeave($event)\"\n (mousemove)=\"mouseMove($event)\"\n>\n @if (data.config.gridLines?.enable !== false) {\n <g class=\"gridlines\" teta-gridlines [size]=\"data.size\"></g>\n }\n <g class=\"x-axis-plotband-container\">\n @for (plotBand of data.plotBands; track plotBand) {\n <g\n teta-plot-band\n [plotBand]=\"plotBand.plotBand\"\n [scale]=\"plotBand.axis.scale\"\n [size]=\"data.visibleRect\"\n [axis]=\"plotBand.axis\"\n ></g>\n }\n </g>\n <g class=\"series-container\">\n @for (series of data.config.series; track series; ) { @if (series.visible) {\n <g teta-series-host [config]=\"data.config\" [series]=\"series\"></g>\n } }\n </g>\n <g class=\"x-axis-plotline-container\">\n @for (axis of data.config.xAxis; let i = $index; track axis) { @for (plotLine of axis.plotLines; track plotLine) {\n <g\n teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.x.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.x.get(i)\"\n ></g>\n } }\n </g>\n <g class=\"y-axis-plotline-container\">\n @for (axis of data.config.yAxis; let i = $index; track axis; ) { @for (plotLine of axis.plotLines; track plotLine) {\n <g\n teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.y.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.y.get(i)\"\n ></g>\n } }\n </g>\n <g class=\"annotations\">\n @for (annotation of data.config.annotations; track annotation) {\n <g teta-annotation [visibleRect]=\"data.visibleRect\" [annotation]=\"annotation\"></g>\n }\n </g>\n @if (data.config.tooltip?.showCrosshair) {\n <g class=\"crosshair\">\n <g teta-crosshair [size]=\"data.visibleRect\"></g>\n </g>\n }\n</svg>\n} }\n", styles: [":host{display:flex;flex-direction:column;flex-grow:1;min-width:0;min-height:0}:host .zoomable:hover{cursor:grab}:host .zoomable:active{cursor:grabbing}:host .crosshair{cursor:crosshair}\n"], dependencies: [{ kind: "component", type: TooltipComponent, selector: "teta-tooltip", inputs: ["size", "config"] }, { kind: "directive", type: ZoomableDirective, selector: "[tetaZoomable]", inputs: ["config", "axis", "size"] }, { kind: "component", type: XAxisComponent, selector: "[teta-x-axis]", inputs: ["axis", "size"] }, { kind: "component", type: YAxisComponent, selector: "[teta-y-axis]", inputs: ["axis", "size"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "component", type: PlotBandComponent, selector: "[teta-plot-band]", inputs: ["plotBand", "axis", "scale", "size"] }, { kind: "component", type: GridlinesComponent, selector: "[teta-gridlines]", inputs: ["size"] }, { kind: "component", type: SeriesHostComponent, selector: "[teta-series-host]", inputs: ["config", "series"] }, { kind: "component", type: PlotlineComponent, selector: "[teta-plot-line]", inputs: ["plotLine", "size", "axis", "scale"] }, { kind: "component", type: AnnotationComponent, selector: "[teta-annotation]", inputs: ["visibleRect", "annotation"] }, { kind: "component", type: CrosshairComponent, selector: "[teta-crosshair]", inputs: ["size"] }, { kind: "directive", type: BrushableDirective, selector: "[tetaBrushable]", inputs: ["config", "axis"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
197
172
  }
198
173
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ChartContainerComponent, decorators: [{
199
174
  type: Component,
@@ -211,6 +186,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImpor
211
186
  AnnotationComponent,
212
187
  CrosshairComponent,
213
188
  BrushableDirective,
214
- ], template: "@if ({\n size: size | async,\n config: config | async,\n scales: scales | async,\n plotBands: plotBands | async,\n visibleRect: visibleRect | async\n}; as data) {\n @if (data.config?.tooltip?.enable) {\n <teta-tooltip [size]=\"data.size\"\n [config]=\"data.config\"></teta-tooltip>\n }\n @if (data.size?.height > 0\n && data.size?.width > 0\n && data.visibleRect?.height > 0\n && data.visibleRect?.width > 0\n && data.scales?.x.size === data.config.xAxis.length\n && data.scales?.y.size === data.config.yAxis.length) {\n <svg height=\"100%\" width=\"100%\" class=\"position-absolute\">\n <g class=\"y-axis-container\">\n @for (item of data.scales.y | keyvalue; track item.value.index) {\n @if (item.value.selfSize > 0\n && item.value.options.visible\n && data.scales.x.size > 0\n && data.scales.y.size > 0) {\n <g\n teta-y-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"item.value.options.opposite ? 0 : -item.value.selfSize\"\n [attr.y]=\"0\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.width]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></rect>\n }\n }\n </g>\n <g class=\"x-axis-container\">\n @for (item of data.scales.x | keyvalue; track item.value.index) {\n @if (item.value.options.visible && data.scales.x.size > 0 && data.scales.y.size > 0) {\n <g\n teta-x-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"0\"\n [attr.y]=\"item.value.options.opposite ? -item.value.selfSize : 0\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></rect>\n }\n }\n </g>\n </svg>\n }\n @if (data.size?.height > 0\n && data.size?.width > 0\n && data.visibleRect?.height > 0\n && data.visibleRect?.width > 0\n && data.scales?.x.size === data.config.xAxis.length\n && data.scales?.y.size === data.config.yAxis.length) {\n <svg\n tetaZoomable\n tetaBrushable\n class=\"position-absolute\"\n [size]=\"data.visibleRect\"\n [config]=\"data.config\"\n [axis]=\"data.config?.zoom?.type === zoomType.x ? data.scales.x.get(0) : data.scales.y.get(0)\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.viewBox]=\"'0 0 ' + data.visibleRect.width + ' ' + data.visibleRect.height\"\n [style.transform]=\"'translate('+ data.visibleRect.x +'px, '+ data.visibleRect.y +'px)'\"\n (contextmenu)=\"contextMenu($event, data.scales.x, data.scales.y)\"\n (click)=\"click($event, data.scales.x, data.scales.y)\"\n (mouseleave)=\"mouseLeave($event)\"\n (mousemove)=\"mouseMove($event)\">\n @if (data.config.gridLines?.enable !== false) {\n <g class=\"gridlines\"\n teta-gridlines\n [size]=\"data.size\"></g>\n }\n <g class=\"x-axis-plotband-container\">\n @for (plotBand of data.plotBands; track plotBand) {\n <g teta-plot-band\n [plotBand]=\"plotBand.plotBand\"\n [scale]=\"plotBand.axis.scale\"\n [size]=\"data.visibleRect\"\n [axis]=\"plotBand.axis\"></g>\n }\n </g>\n <g class=\"series-container\">\n @for (series of data.config.series; track series; ) {\n @if (series.visible) {\n <g teta-series-host\n [config]=\"data.config\"\n [series]=\"series\"></g>\n }\n }\n </g>\n <g class=\"x-axis-plotline-container\">\n @for (axis of data.config.xAxis; let i = $index; track axis) {\n @for (plotLine of axis.plotLines; track plotLine) {\n <g teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.x.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.x.get(i)\"></g>\n }\n }\n </g>\n <g class=\"y-axis-plotline-container\">\n @for (axis of data.config.yAxis; let i = $index; track axis; ) {\n @for (plotLine of axis.plotLines; track plotLine) {\n <g teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.y.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.y.get(i)\"></g>\n }\n }\n </g>\n <g class=\"annotations\">\n @for (annotation of data.config.annotations; track annotation) {\n <g teta-annotation\n [visibleRect]=\"data.visibleRect\"\n [annotation]=\"annotation\"></g>\n }\n </g>\n @if (data.config.tooltip?.showCrosshair) {\n <g class=\"crosshair\">\n <g teta-crosshair [size]=\"data.visibleRect\"></g>\n </g>\n }\n </svg>\n }\n}\n", styles: [":host{display:flex;flex-direction:column;flex-grow:1;min-width:0;min-height:0}:host .zoomable:hover{cursor:grab}:host .zoomable:active{cursor:grabbing}:host .crosshair{cursor:crosshair}\n"] }]
189
+ ], template: "@if ({ size: size | async, config: config | async, scales: scales | async, plotBands: plotBands | async, visibleRect:\nvisibleRect | async }; as data) { @if (data.config?.tooltip?.enable) {\n<teta-tooltip [size]=\"data.size\" [config]=\"data.config\"></teta-tooltip>\n} @if (data.size?.height > 0 && data.size?.width > 0 && data.visibleRect?.height > 0 && data.visibleRect?.width > 0 &&\ndata.scales?.x.size === data.config.xAxis.length && data.scales?.y.size === data.config.yAxis.length) {\n<svg height=\"100%\" width=\"100%\" class=\"position-absolute\">\n <g class=\"y-axis-container\">\n @for (item of data.scales.y | keyvalue; track item.value.index) { @if (item.value.selfSize > 0 &&\n item.value.options.visible && data.scales.x.size > 0 && data.scales.y.size > 0) {\n <g\n teta-y-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"item.value.options.opposite ? 0 : -item.value.selfSize\"\n [attr.y]=\"0\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.width]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></rect>\n } }\n </g>\n <g class=\"x-axis-container\">\n @for (item of data.scales.x | keyvalue; track item.value.index) { @if (item.value.options.visible &&\n data.scales.x.size > 0 && data.scales.y.size > 0) {\n <g\n teta-x-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></g>\n <rect\n tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"0\"\n [attr.y]=\"item.value.options.opposite ? -item.value.selfSize : 0\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"\n ></rect>\n } }\n </g>\n</svg>\n} @if (data.size?.height > 0 && data.size?.width > 0 && data.visibleRect?.height > 0 && data.visibleRect?.width > 0 &&\ndata.scales?.x.size === data.config.xAxis.length && data.scales?.y.size === data.config.yAxis.length) {\n<svg\n tetaZoomable\n tetaBrushable\n class=\"position-absolute\"\n [size]=\"data.visibleRect\"\n [config]=\"data.config\"\n [axis]=\"data.config?.zoom?.type === zoomType.x ? data.scales.x.get(0) : data.scales.y.get(0)\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.viewBox]=\"'0 0 ' + data.visibleRect.width + ' ' + data.visibleRect.height\"\n [style.transform]=\"'translate(' + data.visibleRect.x + 'px, ' + data.visibleRect.y + 'px)'\"\n (contextmenu)=\"contextMenu($event, data.scales.x, data.scales.y)\"\n (click)=\"click($event, data.scales.x, data.scales.y)\"\n (mouseleave)=\"mouseLeave($event)\"\n (mousemove)=\"mouseMove($event)\"\n>\n @if (data.config.gridLines?.enable !== false) {\n <g class=\"gridlines\" teta-gridlines [size]=\"data.size\"></g>\n }\n <g class=\"x-axis-plotband-container\">\n @for (plotBand of data.plotBands; track plotBand) {\n <g\n teta-plot-band\n [plotBand]=\"plotBand.plotBand\"\n [scale]=\"plotBand.axis.scale\"\n [size]=\"data.visibleRect\"\n [axis]=\"plotBand.axis\"\n ></g>\n }\n </g>\n <g class=\"series-container\">\n @for (series of data.config.series; track series; ) { @if (series.visible) {\n <g teta-series-host [config]=\"data.config\" [series]=\"series\"></g>\n } }\n </g>\n <g class=\"x-axis-plotline-container\">\n @for (axis of data.config.xAxis; let i = $index; track axis) { @for (plotLine of axis.plotLines; track plotLine) {\n <g\n teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.x.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.x.get(i)\"\n ></g>\n } }\n </g>\n <g class=\"y-axis-plotline-container\">\n @for (axis of data.config.yAxis; let i = $index; track axis; ) { @for (plotLine of axis.plotLines; track plotLine) {\n <g\n teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.y.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.y.get(i)\"\n ></g>\n } }\n </g>\n <g class=\"annotations\">\n @for (annotation of data.config.annotations; track annotation) {\n <g teta-annotation [visibleRect]=\"data.visibleRect\" [annotation]=\"annotation\"></g>\n }\n </g>\n @if (data.config.tooltip?.showCrosshair) {\n <g class=\"crosshair\">\n <g teta-crosshair [size]=\"data.visibleRect\"></g>\n </g>\n }\n</svg>\n} }\n", styles: [":host{display:flex;flex-direction:column;flex-grow:1;min-width:0;min-height:0}:host .zoomable:hover{cursor:grab}:host .zoomable:active{cursor:grabbing}:host .crosshair{cursor:crosshair}\n"] }]
215
190
  }], ctorParameters: () => [{ type: i1.ChartService }, { type: i2.ScaleService }, { type: i0.ElementRef }, { type: i0.NgZone }] });
216
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC1jb250YWluZXIvY2hhcnQtY29udGFpbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC1jb250YWluZXIvY2hhcnQtY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixhQUFhLEVBQ2IsR0FBRyxFQUVILFNBQVMsRUFDVCxXQUFXLEVBQ1gsY0FBYyxHQUNmLE1BQU0sTUFBTSxDQUFDO0FBSWQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFLbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFD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QUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBSztRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBSyxFQUFFLElBQXVCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUMvQyxDQUFDOzhHQXpRVSx1QkFBdUI7a0dBQXZCLHVCQUF1QixnRkN0RXBDLHNtTEFvSkEscVBEN0ZJLGdCQUFnQixxRkFDaEIsaUJBQWlCLCtGQUNqQixjQUFjLG9GQUNkLGNBQWMsK0VBQ2QsU0FBUyx5Q0FDVCxZQUFZLGlEQUNaLGlCQUFpQiw0R0FDakIsa0JBQWtCLCtFQUNsQixtQkFBbUIsNkZBQ25CLGlCQUFpQiw0R0FDakIsbUJBQW1CLHFHQUNuQixrQkFBa0IsK0VBQ2xCLGtCQUFrQjs7MkZBR1QsdUJBQXVCO2tCQXRCbkMsU0FBUzsrQkFDRSxzQkFBc0IsY0FHcEIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLGdCQUFnQjt3QkFDaEIsaUJBQWlCO3dCQUNqQixjQUFjO3dCQUNkLGNBQWM7d0JBQ2QsU0FBUzt3QkFDVCxZQUFZO3dCQUNaLGlCQUFpQjt3QkFDakIsa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLGlCQUFpQjt3QkFDakIsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLGtCQUFrQjtxQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBhbmltYXRpb25GcmFtZVNjaGVkdWxlcixcbiAgY29tYmluZUxhdGVzdCxcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvYnNlcnZlT24sXG4gIHNoYXJlUmVwbGF5LFxuICB3aXRoTGF0ZXN0RnJvbSxcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEF4aXMgfSBmcm9tICcuLi9jb3JlL2F4aXMvYXhpcyc7XG5pbXBvcnQgeyBCYXNlUG9pbnQgfSBmcm9tICcuLi9tb2RlbC9iYXNlLXBvaW50JztcbmltcG9ydCB7IEF4aXNPcmllbnRhdGlvbiB9IGZyb20gJy4uL21vZGVsL2VudW0vYXhpcy1vcmllbnRhdGlvbic7XG5pbXBvcnQgeyBCcnVzaFR5cGUgfSBmcm9tICcuLi9tb2RlbC9lbnVtL2JydXNoLXR5cGUnO1xuaW1wb3J0IHsgWm9vbVR5cGUgfSBmcm9tICcuLi9tb2RlbC9lbnVtL3pvb20tdHlwZSc7XG5pbXBvcnQgeyBJQ2hhcnRDb25maWcgfSBmcm9tICcuLi9tb2RlbC9pLWNoYXJ0LWNvbmZpZyc7XG5pbXBvcnQgeyBJU2NhbGVzTWFwIH0gZnJvbSAnLi4vbW9kZWwvaS1zY2FsZXMtbWFwJztcbmltcG9ydCB7IFBsb3RCYW5kIH0gZnJvbSAnLi4vbW9kZWwvcGxvdC1iYW5kJztcbmltcG9ydCB7IFNlcmllcyB9IGZyb20gJy4uL21vZGVsL3Nlcmllcyc7XG5pbXBvcnQgeyBDaGFydFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL2NoYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NhbGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9zY2FsZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRvb2x0aXBDb21wb25lbnQgfSBmcm9tICcuL3Rvb2x0aXAvdG9vbHRpcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgWEF4aXNDb21wb25lbnQgfSBmcm9tICcuL3gtYXhpcy94LWF4aXMuY29tcG9uZW50JztcbmltcG9ydCB7IFpvb21hYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy96b29tYWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgWUF4aXNDb21wb25lbnQgfSBmcm9tICcuL3ktYXhpcy95LWF4aXMuY29tcG9uZW50JztcbmltcG9ydCB7IEFzeW5jUGlwZSwgS2V5VmFsdWVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFBsb3RCYW5kQ29tcG9uZW50IH0gZnJvbSAnLi9wbG90YmFuZC9wbG90LWJhbmQuY29tcG9uZW50JztcbmltcG9ydCB7IEdyaWRsaW5lc0NvbXBvbmVudCB9IGZyb20gJy4vZ3JpZGxpbmVzL2dyaWRsaW5lcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VyaWVzSG9zdENvbXBvbmVudCB9IGZyb20gJy4vc2VyaWVzLWhvc3Qvc2VyaWVzLWhvc3QuY29tcG9uZW50JztcbmltcG9ydCB7IFBsb3RsaW5lQ29tcG9uZW50IH0gZnJvbSAnLi9wbG90bGluZS9wbG90bGluZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQW5ub3RhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vYW5ub3RhdGlvbi9hbm5vdGF0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcm9zc2hhaXJDb21wb25lbnQgfSBmcm9tICcuL2Nyb3NzaGFpci9jcm9zc2hhaXIuY29tcG9uZW50JztcbmltcG9ydCB7IEJydXNoYWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvYnJ1c2hhYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyB0ZXRhWm9uZUZ1bGwgfSBmcm9tICcuLi8uLi9vYnNlcnZhYmxlL3pvbmVPYnNlcnZhYmxlJztcblxudHlwZSBPcHBvc2l0ZSA9IGJvb2xlYW47XG50eXBlIERpc3BsYXlQbG90QmFuZCA9IHtcbiAgYXhpczogQXhpcztcbiAgcGxvdEJhbmQ6IFBsb3RCYW5kO1xufTtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtY2hhcnQtY29udGFpbmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXJ0LWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoYXJ0LWNvbnRhaW5lci5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIFRvb2x0aXBDb21wb25lbnQsXG4gICAgWm9vbWFibGVEaXJlY3RpdmUsXG4gICAgWEF4aXNDb21wb25lbnQsXG4gICAgWUF4aXNDb21wb25lbnQsXG4gICAgQXN5bmNQaXBlLFxuICAgIEtleVZhbHVlUGlwZSxcbiAgICBQbG90QmFuZENvbXBvbmVudCxcbiAgICBHcmlkbGluZXNDb21wb25lbnQsXG4gICAgU2VyaWVzSG9zdENvbXBvbmVudCxcbiAgICBQbG90bGluZUNvbXBvbmVudCxcbiAgICBBbm5vdGF0aW9uQ29tcG9uZW50LFxuICAgIENyb3NzaGFpckNvbXBvbmVudCxcbiAgICBCcnVzaGFibGVEaXJlY3RpdmUsXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQ2hhcnRDb250YWluZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBjb25maWc6IE9ic2VydmFibGU8SUNoYXJ0Q29uZmlnPjtcbiAgc2NhbGVzOiBPYnNlcnZhYmxlPElTY2FsZXNNYXA+O1xuICBzaXplOiBPYnNlcnZhYmxlPERPTVJlY3Q+O1xuICB2aXNpYmxlUmVjdDogT2JzZXJ2YWJsZTxhbnk+O1xuICBicnVzaFNjYWxlOiBPYnNlcnZhYmxlPGFueT47XG4gIHpvb21UeXBlID0gWm9vbVR5cGU7XG4gIHBsb3RCYW5kczogT2JzZXJ2YWJsZTxEaXNwbGF5UGxvdEJhbmRbXT47XG5cbiAgcHJpdmF0ZSBfb2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyO1xuICBwcml2YXRlIGZpbHRlclBvc2l0aW9uTWFwID0gbmV3IE1hcDxcbiAgICBPcHBvc2l0ZSxcbiAgICAoYXhpczogQXhpcykgPT4gKF86IEF4aXMpID0+IGJvb2xlYW5cbiAgPigpXG4gICAgLnNldChcbiAgICAgIHRydWUsXG4gICAgICBheGlzID0+IChfOiBBeGlzKSA9PlxuICAgICAgICBfLm9wdGlvbnMub3Bwb3NpdGUgJiYgXy5vcHRpb25zLnZpc2libGUgJiYgYXhpcy5pbmRleCA8PSBfLmluZGV4XG4gICAgKVxuICAgIC5zZXQoXG4gICAgICBmYWxzZSxcbiAgICAgIGF4aXMgPT4gKF86IEF4aXMpID0+XG4gICAgICAgIF8ub3B0aW9ucy5vcHBvc2l0ZSAhPT0gdHJ1ZSAmJlxuICAgICAgICBfLm9wdGlvbnMudmlzaWJsZSAmJlxuICAgICAgICBfLmluZGV4IDw9IGF4aXMuaW5kZXhcbiAgICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3N2YzogQ2hhcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3NjYWxlU2VydmljZTogU2NhbGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfem9uZTogTmdab25lXG4gICkge1xuICAgIHRoaXMuY29uZmlnID0gdGhpcy5fc3ZjLmNvbmZpZztcbiAgICB0aGlzLnNpemUgPSB0aGlzLl9zdmMuc2l6ZTtcblxuICAgIHRoaXMuc2NhbGVzID0gdGhpcy5fc2NhbGVTZXJ2aWNlLnNjYWxlcy5waXBlKFxuICAgICAgb2JzZXJ2ZU9uKGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyKSxcbiAgICAgIHRldGFab25lRnVsbCh0aGlzLl96b25lKSxcbiAgICAgIHNoYXJlUmVwbGF5KHtcbiAgICAgICAgYnVmZmVyU2l6ZTogMSxcbiAgICAgICAgcmVmQ291bnQ6IHRydWUsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnBsb3RCYW5kcyA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuY29uZmlnLCB0aGlzLnNjYWxlc10pLnBpcGUoXG4gICAgICBtYXAoKFtjb25maWcsIHNjYWxlc10pID0+IHtcbiAgICAgICAgY29uc3QgYmFuZHM6IERpc3BsYXlQbG90QmFuZFtdID0gW107XG4gICAgICAgIGNvbmZpZy54QXhpcz8uZm9yRWFjaCgoYXhpcywgaW5kZXgpID0+IHtcbiAgICAgICAgICBheGlzLnBsb3RCYW5kcz8uZm9yRWFjaChiYW5kID0+IHtcbiAgICAgICAgICAgIGJhbmRzLnB1c2goe1xuICAgICAgICAgICAgICBwbG90QmFuZDogYmFuZCxcbiAgICAgICAgICAgICAgYXhpczogc2NhbGVzLnguZ2V0KGluZGV4KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uZmlnLnlBeGlzPy5mb3JFYWNoKChheGlzLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGF4aXMucGxvdEJhbmRzPy5mb3JFYWNoKGJhbmQgPT4ge1xuICAgICAgICAgICAgYmFuZHMucHVzaCh7XG4gICAgICAgICAgICAgIHBsb3RCYW5kOiBiYW5kLFxuICAgICAgICAgICAgICBheGlzOiBzY2FsZXMueS5nZXQoaW5kZXgpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBiYW5kcy5zb3J0KChhLCBiKSA9PiBhLnBsb3RCYW5kLm9yZGVyIC0gYi5wbG90QmFuZC5vcmRlcik7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmJydXNoU2NhbGUgPSB0aGlzLl9zY2FsZVNlcnZpY2Uuc2NhbGVzLnBpcGUoXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmNvbmZpZyksXG4gICAgICBtYXAoKGRhdGE6IFtJU2NhbGVzTWFwLCBJQ2hhcnRDb25maWddKSA9PiB7XG4gICAgICAgIGNvbnN0IFt7IHgsIHkgfSwgY29uZmlnXSA9IGRhdGE7XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZy5icnVzaD8udHlwZSA9PT0gQnJ1c2hUeXBlLnggfHxcbiAgICAgICAgICBjb25maWc/Lnpvb20/LnR5cGUgPT09IFpvb21UeXBlLnhcbiAgICAgICAgICA/IHguZ2V0KDApPy5zY2FsZVxuICAgICAgICAgIDogeS5nZXQoMCk/LnNjYWxlO1xuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSh7XG4gICAgICAgIGJ1ZmZlclNpemU6IDEsXG4gICAgICAgIHJlZkNvdW50OiB0cnVlLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy52aXNpYmxlUmVjdCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5zaXplLFxuICAgICAgdGhpcy5zY2FsZXMsXG4gICAgICB0aGlzLmNvbmZpZyxcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChkYXRhOiBbRE9NUmVjdCwgSVNjYWxlc01hcCwgSUNoYXJ0Q29uZmlnXSkgPT4ge1xuICAgICAgICBjb25zdCBbc2l6ZSwgeyB4LCB5IH0sIGNvbmZpZ10gPSBkYXRhO1xuICAgICAgICBjb25zdCB5QXhlc0FycmF5ID0gQXJyYXkuZnJvbSh5LnZhbHVlcygpKTtcbiAgICAgICAgY29uc3QgeEF4ZXNBcnJheSA9IEFycmF5LmZyb20oeC52YWx1ZXMoKSk7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB5QXhlc0FycmF5XG4gICAgICAgICAgLmZpbHRlcihfID0+IF8ub3B0aW9ucy5vcHBvc2l0ZSAhPT0gdHJ1ZSAmJiBfLm9wdGlvbnMudmlzaWJsZSlcbiAgICAgICAgICAucmVkdWNlKHRoaXMuc3VtU2l6ZSwgMCk7XG5cbiAgICAgICAgY29uc3QgcmlnaHQgPSB5QXhlc0FycmF5XG4gICAgICAgICAgLmZpbHRlcihfID0+IF8ub3B0aW9ucy5vcHBvc2l0ZSAmJiBfLm9wdGlvbnMudmlzaWJsZSlcbiAgICAgICAgICAucmVkdWNlKHRoaXMuc3VtU2l6ZSwgMCk7XG5cbiAgICAgICAgY29uc3QgYm90dG9tID0geEF4ZXNBcnJheVxuICAgICAgICAgIC5maWx0ZXIoXyA9PiBfLm9wdGlvbnMub3Bwb3NpdGUgIT09IHRydWUgJiYgXy5vcHRpb25zLnZpc2libGUpXG4gICAgICAgICAgLnJlZHVjZSh0aGlzLnN1bVNpemUsIDApO1xuXG4gICAgICAgIGNvbnN0IHRvcCA9IHhBeGVzQXJyYXlcbiAgICAgICAgICAuZmlsdGVyKF8gPT4gXy5vcHRpb25zLm9wcG9zaXRlICYmIF8ub3B0aW9ucy52aXNpYmxlKVxuICAgICAgICAgIC5yZWR1Y2UodGhpcy5zdW1TaXplLCAwKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiBsZWZ0ICsgY29uZmlnLmJvdW5kcz8ubGVmdCxcbiAgICAgICAgICB5OiB0b3AgKyBjb25maWcuYm91bmRzPy50b3AsXG4gICAgICAgICAgd2lkdGg6XG4gICAgICAgICAgICBzaXplLndpZHRoIC1cbiAgICAgICAgICAgIGxlZnQgLVxuICAgICAgICAgICAgcmlnaHQgLVxuICAgICAgICAgICAgY29uZmlnLmJvdW5kcz8ubGVmdCAtXG4gICAgICAgICAgICBjb25maWcuYm91bmRzPy5yaWdodCxcbiAgICAgICAgICBoZWlnaHQ6XG4gICAgICAgICAgICBzaXplLmhlaWdodCAtXG4gICAgICAgICAgICB0b3AgLVxuICAgICAgICAgICAgYm90dG9tIC1cbiAgICAgICAgICAgIGNvbmZpZy5ib3VuZHM/LnRvcCAtXG4gICAgICAgICAgICBjb25maWcuYm91bmRzPy5ib3R0b20sXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIHRldGFab25lRnVsbCh0aGlzLl96b25lKSxcbiAgICAgIHNoYXJlUmVwbGF5KHtcbiAgICAgICAgYnVmZmVyU2l6ZTogMSxcbiAgICAgICAgcmVmQ291bnQ6IHRydWUsXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXM6IFJlc2l6ZU9ic2VydmVyRW50cnlbXSkgPT4ge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFBcnJheS5pc0FycmF5KGVudHJpZXMpIHx8XG4gICAgICAgICAgIWVudHJpZXMubGVuZ3RoIHx8XG4gICAgICAgICAgZW50cmllc1swXS5jb250ZW50UmVjdC53aWR0aCA8PSAwIHx8XG4gICAgICAgICAgZW50cmllc1swXS5jb250ZW50UmVjdC5oZWlnaHQgPD0gMFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc3ZjLnNldFNpemUoZW50cmllc1swXS5jb250ZW50UmVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLl9vYnNlcnZlci5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9vYnNlcnZlci51bm9ic2VydmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLl9vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gIH1cblxuICBwcml2YXRlIHN1bVNpemUgPSAoYWNjLCBjdXJyKSA9PiBhY2MgKyBjdXJyLnNlbGZTaXplO1xuXG4gIGdldFRyYW5zbGF0ZShheGlzPzogQXhpcywgc2l6ZT86IERPTVJlY3QpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnNjYWxlcy5waXBlKFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5jb25maWcpLFxuICAgICAgbWFwKChkYXRhOiBbSVNjYWxlc01hcCwgSUNoYXJ0Q29uZmlnXSkgPT4ge1xuICAgICAgICBjb25zdCBbeyB4LCB5IH0sIGNvbmZpZ10gPSBkYXRhO1xuICAgICAgICBjb25zdCB4QXhlc0FycmF5ID0gQXJyYXkuZnJvbSh4LnZhbHVlcygpKTtcbiAgICAgICAgY29uc3QgeUF4ZXNBcnJheSA9IEFycmF5LmZyb20oeS52YWx1ZXMoKSk7XG5cbiAgICAgICAgY29uc3Qgb3Bwb3NpdGVGaWx0ZXIgPSB0aGlzLmZpbHRlclBvc2l0aW9uTWFwLmdldCh0cnVlKTtcbiAgICAgICAgY29uc3Qgbm9uT3Bwb3NpdGVGaWx0ZXIgPSB0aGlzLmZpbHRlclBvc2l0aW9uTWFwLmdldChmYWxzZSk7XG5cbiAgICAgICAgY29uc3Qgb3Bwb3NpdGVPZmZzZXRZID0geUF4ZXNBcnJheS5maWx0ZXIob3Bwb3NpdGVGaWx0ZXIoYXhpcykpO1xuICAgICAgICBjb25zdCBub25PcHBvc2l0ZU9mZnNldFkgPSB5QXhlc0FycmF5LmZpbHRlcihub25PcHBvc2l0ZUZpbHRlcihheGlzKSk7XG5cbiAgICAgICAgY29uc3Qgb3Bwb3NpdGVPZmZzZXRYID0geEF4ZXNBcnJheS5maWx0ZXIob3Bwb3NpdGVGaWx0ZXIoYXhpcykpO1xuICAgICAgICBjb25zdCBub25PcHBvc2l0ZU9mZnNldFggPSB4QXhlc0FycmF5LmZpbHRlcihub25PcHBvc2l0ZUZpbHRlcihheGlzKSk7XG5cbiAgICAgICAgY29uc3Qgb3Bwb3NpdGVUcmFuc2xhdGVZID0gb3Bwb3NpdGVPZmZzZXRZLnJlZHVjZShcbiAgICAgICAgICAoYWNjLCBjdXJyKSA9PiBhY2MgKyBjdXJyLnNlbGZTaXplLFxuICAgICAgICAgIGNvbmZpZy5ib3VuZHM/LnJpZ2h0XG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5vbk9wcGlzdGVUcmFuc2xhdGVZID0gbm9uT3Bwb3NpdGVPZmZzZXRZLnJlZHVjZShcbiAgICAgICAgICAoYWNjLCBjdXJyKSA9PiBhY2MgKyBjdXJyLnNlbGZTaXplLFxuICAgICAgICAgIGNvbmZpZy5ib3VuZHM/LmxlZnRcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBvcHBvc2l0ZVRyYW5zbGF0ZVggPSBvcHBvc2l0ZU9mZnNldFgucmVkdWNlKFxuICAgICAgICAgIChhY2MsIGN1cnIpID0+IGFjYyArIGN1cnIuc2VsZlNpemUsXG4gICAgICAgICAgY29uZmlnLmJvdW5kcz8udG9wXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgbm9uT3BwaXN0ZVRyYW5zbGF0ZVggPSBub25PcHBvc2l0ZU9mZnNldFgucmVkdWNlKFxuICAgICAgICAgIChhY2MsIGN1cnIpID0+IGFjYyArIGN1cnIuc2VsZlNpemUsXG4gICAgICAgICAgY29uZmlnLmJvdW5kcz8uYm90dG9tXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgbGVmdCA9IHlBeGVzQXJyYXlcbiAgICAgICAgICAuZmlsdGVyKF8gPT4gXy5vcHRpb25zLnZpc2libGUgJiYgXy5vcHRpb25zLm9wcG9zaXRlICE9PSB0cnVlKVxuICAgICAgICAgIC5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci5zZWxmU2l6ZSwgY29uZmlnLmJvdW5kcz8ubGVmdCk7XG5cbiAgICAgICAgY29uc3QgdG9wID0geEF4ZXNBcnJheVxuICAgICAgICAgIC5maWx0ZXIoXyA9PiBfLm9wdGlvbnMudmlzaWJsZSAmJiBfLm9wdGlvbnMub3Bwb3NpdGUgPT09IHRydWUpXG4gICAgICAgICAgLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBhY2MgKyBjdXJyLnNlbGZTaXplLCBjb25maWcuYm91bmRzPy50b3ApO1xuXG4gICAgICAgIGlmIChheGlzLm9yaWVudGF0aW9uID09PSBBeGlzT3JpZW50YXRpb24ueCkge1xuICAgICAgICAgIHJldHVybiBgdHJhbnNsYXRlKCR7bGVmdH0sICR7XG4gICAgICAgICAgICBheGlzLm9wdGlvbnMub3Bwb3NpdGVcbiAgICAgICAgICAgICAgPyBvcHBvc2l0ZVRyYW5zbGF0ZVhcbiAgICAgICAgICAgICAgOiBzaXplLmhlaWdodCAtIG5vbk9wcGlzdGVUcmFuc2xhdGVYXG4gICAgICAgICAgfSlgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGF4aXMub3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi55KSB7XG4gICAgICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoJHtcbiAgICAgICAgICAgIGF4aXMub3B0aW9ucy5vcHBvc2l0ZVxuICAgICAgICAgICAgICA/IHNpemUud2lkdGggLSBvcHBvc2l0ZVRyYW5zbGF0ZVlcbiAgICAgICAgICAgICAgOiBub25PcHBpc3RlVHJhbnNsYXRlWVxuICAgICAgICAgIH0sICR7dG9wfSlgO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoMCwgMCknO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgY2xpY2soXG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQsXG4gICAgeFNjYWxlczogTWFwPG51bWJlciwgQXhpcz4sXG4gICAgeVNjYWxlczogTWFwPG51bWJlciwgQXhpcz5cbiAgKSB7XG4gICAgY29uc3QgeCA9IHhTY2FsZXMuZ2V0KDApPy5zY2FsZTtcbiAgICBjb25zdCB5ID0geVNjYWxlcy5nZXQoMCk/LnNjYWxlO1xuICAgIHRoaXMuX3N2Yy5lbWl0Q2hhcnRDbGljayh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICB0YXJnZXQ6IHtcbiAgICAgICAgeDogeC5pbnZlcnQoZXZlbnQub2Zmc2V0WCksXG4gICAgICAgIHk6IHkuaW52ZXJ0KGV2ZW50Lm9mZnNldFkpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnRleHRNZW51KFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgIHhTY2FsZXM6IE1hcDxudW1iZXIsIEF4aXM+LFxuICAgIHlTY2FsZXM6IE1hcDxudW1iZXIsIEF4aXM+XG4gICkge1xuICAgIGNvbnN0IHggPSB4U2NhbGVzLmdldCgwKT8uc2NhbGU7XG4gICAgY29uc3QgeSA9IHlTY2FsZXMuZ2V0KDApPy5zY2FsZTtcbiAgICB0aGlzLl9zdmMuZW1pdENoYXJ0Q29udGV4dE1lbnUoe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgdGFyZ2V0OiB7XG4gICAgICAgIHg6IHguaW52ZXJ0KGV2ZW50Lm9mZnNldFgpLFxuICAgICAgICB5OiB5LmludmVydChldmVudC5vZmZzZXRZKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBtb3VzZU1vdmUoZXZlbnQpIHtcbiAgICB0aGlzLl9zdmMuc2V0UG9pbnRlck1vdmUoZXZlbnQpO1xuICB9XG5cbiAgbW91c2VMZWF2ZShldmVudCkge1xuICAgIHRoaXMuX3N2Yy5zZXRQb2ludGVyTW92ZShldmVudCk7XG4gIH1cblxuICB0cmFja1NlcmllKGluZGV4LCBpdGVtOiBTZXJpZXM8QmFzZVBvaW50Pikge1xuICAgIHJldHVybiBpdGVtLm5hbWU/Lmxlbmd0aCA/IGl0ZW0ubmFtZSA6IGluZGV4O1xuICB9XG59XG4iLCJAaWYgKHtcbiAgc2l6ZTogc2l6ZSB8IGFzeW5jLFxuICBjb25maWc6IGNvbmZpZyB8IGFzeW5jLFxuICBzY2FsZXM6IHNjYWxlcyB8IGFzeW5jLFxuICBwbG90QmFuZHM6IHBsb3RCYW5kcyB8IGFzeW5jLFxuICB2aXNpYmxlUmVjdDogdmlzaWJsZVJlY3QgfCBhc3luY1xufTsgYXMgZGF0YSkge1xuICBAaWYgKGRhdGEuY29uZmlnPy50b29sdGlwPy5lbmFibGUpIHtcbiAgICA8dGV0YS10b29sdGlwIFtzaXplXT1cImRhdGEuc2l6ZVwiXG4gICAgICAgICAgICAgICAgICBbY29uZmlnXT1cImRhdGEuY29uZmlnXCI+PC90ZXRhLXRvb2x0aXA+XG4gIH1cbiAgQGlmIChkYXRhLnNpemU/LmhlaWdodCA+IDBcbiAgJiYgZGF0YS5zaXplPy53aWR0aCA+IDBcbiAgJiYgZGF0YS52aXNpYmxlUmVjdD8uaGVpZ2h0ID4gMFxuICAmJiBkYXRhLnZpc2libGVSZWN0Py53aWR0aCA+IDBcbiAgJiYgZGF0YS5zY2FsZXM/Lnguc2l6ZSA9PT0gZGF0YS5jb25maWcueEF4aXMubGVuZ3RoXG4gICYmIGRhdGEuc2NhbGVzPy55LnNpemUgPT09IGRhdGEuY29uZmlnLnlBeGlzLmxlbmd0aCkge1xuICAgIDxzdmcgaGVpZ2h0PVwiMTAwJVwiIHdpZHRoPVwiMTAwJVwiIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIj5cbiAgICAgIDxnIGNsYXNzPVwieS1heGlzLWNvbnRhaW5lclwiPlxuICAgICAgICBAZm9yIChpdGVtIG9mIGRhdGEuc2NhbGVzLnkgfCBrZXl2YWx1ZTsgdHJhY2sgaXRlbS52YWx1ZS5pbmRleCkge1xuICAgICAgICAgIEBpZiAoaXRlbS52YWx1ZS5zZWxmU2l6ZSA+IDBcbiAgICAgICAgICAmJiBpdGVtLnZhbHVlLm9wdGlvbnMudmlzaWJsZVxuICAgICAgICAgICYmIGRhdGEuc2NhbGVzLnguc2l6ZSA+IDBcbiAgICAgICAgICAmJiBkYXRhLnNjYWxlcy55LnNpemUgPiAwKSB7XG4gICAgICAgICAgICA8Z1xuICAgICAgICAgICAgICB0ZXRhLXktYXhpc1xuICAgICAgICAgICAgICBbYXhpc109XCJpdGVtLnZhbHVlXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZGF0YS52aXNpYmxlUmVjdFwiXG4gICAgICAgICAgICAgIFthdHRyLnRyYW5zZm9ybV09XCJnZXRUcmFuc2xhdGUoaXRlbS52YWx1ZSwgZGF0YS5zaXplKSB8IGFzeW5jXCI+PC9nPlxuICAgICAgICAgICAgPHJlY3RcbiAgICAgICAgICAgICAgdGV0YVpvb21hYmxlXG4gICAgICAgICAgICAgIGZpbGwtb3BhY2l0eT1cIjBcIlxuICAgICAgICAgICAgICBbYXhpc109XCJpdGVtLnZhbHVlXCJcbiAgICAgICAgICAgICAgW2NvbmZpZ109XCJkYXRhLmNvbmZpZ1wiXG4gICAgICAgICAgICAgIFtzaXplXT1cImRhdGEudmlzaWJsZVJlY3RcIlxuICAgICAgICAgICAgICBbYXR0ci54XT1cIml0ZW0udmFsdWUub3B0aW9ucy5vcHBvc2l0ZSA/IDAgOiAtaXRlbS52YWx1ZS5zZWxmU2l6ZVwiXG4gICAgICAgICAgICAgIFthdHRyLnldPVwiMFwiXG4gICAgICAgICAgICAgIFthdHRyLmhlaWdodF09XCJkYXRhLnZpc2libGVSZWN0LmhlaWdodFwiXG4gICAgICAgICAgICAgIFthdHRyLndpZHRoXT1cIml0ZW0udmFsdWUuc2VsZlNpemVcIlxuICAgICAgICAgICAgICBbYXR0ci50cmFuc2Zvcm1dPVwiZ2V0VHJhbnNsYXRlKGl0ZW0udmFsdWUsIGRhdGEuc2l6ZSkgfCBhc3luY1wiPjwvcmVjdD5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvZz5cbiAgICAgIDxnIGNsYXNzPVwieC1heGlzLWNvbnRhaW5lclwiPlxuICAgICAgICBAZm9yIChpdGVtIG9mIGRhdGEuc2NhbGVzLnggfCBrZXl2YWx1ZTsgdHJhY2sgaXRlbS52YWx1ZS5pbmRleCkge1xuICAgICAgICAgIEBpZiAoaXRlbS52YWx1ZS5vcHRpb25zLnZpc2libGUgJiYgZGF0YS5zY2FsZXMueC5zaXplID4gMCAmJiBkYXRhLnNjYWxlcy55LnNpemUgPiAwKSB7XG4gICAgICAgICAgICA8Z1xuICAgICAgICAgICAgICB0ZXRhLXgtYXhpc1xuICAgICAgICAgICAgICBbYXhpc109XCJpdGVtLnZhbHVlXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZGF0YS52aXNpYmxlUmVjdFwiXG4gICAgICAgICAgICAgIFthdHRyLnRyYW5zZm9ybV09XCJnZXRUcmFuc2xhdGUoaXRlbS52YWx1ZSwgZGF0YS5zaXplKSB8IGFzeW5jXCI+PC9nPlxuICAgICAgICAgICAgPHJlY3RcbiAgICAgICAgICAgICAgdGV0YVpvb21hYmxlXG4gICAgICAgICAgICAgIGZpbGwtb3BhY2l0eT1cIjBcIlxuICAgICAgICAgICAgICBbYXhpc109XCJpdGVtLnZhbHVlXCJcbiAgICAgICAgICAgICAgW2NvbmZpZ109XCJkYXRhLmNvbmZpZ1wiXG4gICAgICAgICAgICAgIFtzaXplXT1cImRhdGEudmlzaWJsZVJlY3RcIlxuICAgICAgICAgICAgICBbYXR0ci54XT1cIjBcIlxuICAgICAgICAgICAgICBbYXR0ci55XT1cIml0ZW0udmFsdWUub3B0aW9ucy5vcHBvc2l0ZSA/IC1pdGVtLnZhbHVlLnNlbGZTaXplIDogMFwiXG4gICAgICAgICAgICAgIFthdHRyLndpZHRoXT1cImRhdGEudmlzaWJsZVJlY3Qud2lkdGhcIlxuICAgICAgICAgICAgICBbYXR0ci5oZWlnaHRdPVwiaXRlbS52YWx1ZS5zZWxmU2l6ZVwiXG4gICAgICAgICAgICAgIFthdHRyLnRyYW5zZm9ybV09XCJnZXRUcmFuc2xhdGUoaXRlbS52YWx1ZSwgZGF0YS5zaXplKSB8IGFzeW5jXCI+PC9yZWN0PlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgPC9nPlxuICAgIDwvc3ZnPlxuICB9XG4gIEBpZiAoZGF0YS5zaXplPy5oZWlnaHQgPiAwXG4gICYmIGRhdGEuc2l6ZT8ud2lkdGggPiAwXG4gICYmIGRhdGEudmlzaWJsZVJlY3Q/LmhlaWdodCA+IDBcbiAgJiYgZGF0YS52aXNpYmxlUmVjdD8ud2lkdGggPiAwXG4gICYmIGRhdGEuc2NhbGVzPy54LnNpemUgPT09IGRhdGEuY29uZmlnLnhBeGlzLmxlbmd0aFxuICAmJiBkYXRhLnNjYWxlcz8ueS5zaXplID09PSBkYXRhLmNvbmZpZy55QXhpcy5sZW5ndGgpIHtcbiAgICA8c3ZnXG4gICAgICB0ZXRhWm9vbWFibGVcbiAgICAgIHRldGFCcnVzaGFibGVcbiAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIlxuICAgICAgW3NpemVdPVwiZGF0YS52aXNpYmxlUmVjdFwiXG4gICAgICBbY29uZmlnXT1cImRhdGEuY29uZmlnXCJcbiAgICAgIFtheGlzXT1cImRhdGEuY29uZmlnPy56b29tPy50eXBlID09PSB6b29tVHlwZS54ID8gZGF0YS5zY2FsZXMueC5nZXQoMCkgOiBkYXRhLnNjYWxlcy55LmdldCgwKVwiXG4gICAgICBbYXR0ci53aWR0aF09XCJkYXRhLnZpc2libGVSZWN0LndpZHRoXCJcbiAgICAgIFthdHRyLmhlaWdodF09XCJkYXRhLnZpc2libGVSZWN0LmhlaWdodFwiXG4gICAgICBbYXR0ci52aWV3Qm94XT1cIicwIDAgJyArIGRhdGEudmlzaWJsZVJlY3Qud2lkdGggKyAnICcgKyBkYXRhLnZpc2libGVSZWN0LmhlaWdodFwiXG4gICAgICBbc3R5bGUudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoJysgZGF0YS52aXNpYmxlUmVjdC54ICsncHgsICcrIGRhdGEudmlzaWJsZVJlY3QueSArJ3B4KSdcIlxuICAgICAgKGNvbnRleHRtZW51KT1cImNvbnRleHRNZW51KCRldmVudCwgZGF0YS5zY2FsZXMueCwgZGF0YS5zY2FsZXMueSlcIlxuICAgICAgKGNsaWNrKT1cImNsaWNrKCRldmVudCwgZGF0YS5zY2FsZXMueCwgZGF0YS5zY2FsZXMueSlcIlxuICAgICAgKG1vdXNlbGVhdmUpPVwibW91c2VMZWF2ZSgkZXZlbnQpXCJcbiAgICAgIChtb3VzZW1vdmUpPVwibW91c2VNb3ZlKCRldmVudClcIj5cbiAgICAgIEBpZiAoZGF0YS5jb25maWcuZ3JpZExpbmVzPy5lbmFibGUgIT09IGZhbHNlKSB7XG4gICAgICAgIDxnIGNsYXNzPVwiZ3JpZGxpbmVzXCJcbiAgICAgICAgICAgdGV0YS1ncmlkbGluZXNcbiAgICAgICAgICAgW3NpemVdPVwiZGF0YS5zaXplXCI+PC9nPlxuICAgICAgfVxuICAgICAgPGcgY2xhc3M9XCJ4LWF4aXMtcGxvdGJhbmQtY29udGFpbmVyXCI+XG4gICAgICAgIEBmb3IgKHBsb3RCYW5kIG9mIGRhdGEucGxvdEJhbmRzOyB0cmFjayBwbG90QmFuZCkge1xuICAgICAgICAgIDxnIHRldGEtcGxvdC1iYW5kXG4gICAgICAgICAgICAgW3Bsb3RCYW5kXT1cInBsb3RCYW5kLnBsb3RCYW5kXCJcbiAgICAgICAgICAgICBbc2NhbGVdPVwicGxvdEJhbmQuYXhpcy5zY2FsZVwiXG4gICAgICAgICAgICAgW3NpemVdPVwiZGF0YS52aXNpYmxlUmVjdFwiXG4gICAgICAgICAgICAgW2F4aXNdPVwicGxvdEJhbmQuYXhpc1wiPjwvZz5cbiAgICAgICAgfVxuICAgICAgPC9nPlxuICAgICAgPGcgY2xhc3M9XCJzZXJpZXMtY29udGFpbmVyXCI+XG4gICAgICAgIEBmb3IgKHNlcmllcyBvZiBkYXRhLmNvbmZpZy5zZXJpZXM7IHRyYWNrIHNlcmllczsgKSB7XG4gICAgICAgICAgQGlmIChzZXJpZXMudmlzaWJsZSkge1xuICAgICAgICAgICAgPGcgdGV0YS1zZXJpZXMtaG9zdFxuICAgICAgICAgICAgICAgW2NvbmZpZ109XCJkYXRhLmNvbmZpZ1wiXG4gICAgICAgICAgICAgICBbc2VyaWVzXT1cInNlcmllc1wiPjwvZz5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvZz5cbiAgICAgIDxnIGNsYXNzPVwieC1heGlzLXBsb3RsaW5lLWNvbnRhaW5lclwiPlxuICAgICAgICBAZm9yIChheGlzIG9mIGRhdGEuY29uZmlnLnhBeGlzOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgYXhpcykge1xuICAgICAgICAgIEBmb3IgKHBsb3RMaW5lIG9mIGF4aXMucGxvdExpbmVzOyB0cmFjayBwbG90TGluZSkge1xuICAgICAgICAgICAgPGcgdGV0YS1wbG90LWxpbmVcbiAgICAgICAgICAgICAgIFtwbG90TGluZV09XCJwbG90TGluZVwiXG4gICAgICAgICAgICAgICBbc2NhbGVdPVwiZGF0YS5zY2FsZXMueC5nZXQoaSkuc2NhbGVcIlxuICAgICAgICAgICAgICAgW3NpemVdPVwiZGF0YS5zaXplXCJcbiAgICAgICAgICAgICAgIFtheGlzXT1cImRhdGEuc2NhbGVzLnguZ2V0KGkpXCI+PC9nPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgPC9nPlxuICAgICAgPGcgY2xhc3M9XCJ5LWF4aXMtcGxvdGxpbmUtY29udGFpbmVyXCI+XG4gICAgICAgIEBmb3IgKGF4aXMgb2YgZGF0YS5jb25maWcueUF4aXM7IGxldCBpID0gJGluZGV4OyB0cmFjayBheGlzOyApIHtcbiAgICAgICAgICBAZm9yIChwbG90TGluZSBvZiBheGlzLnBsb3RMaW5lczsgdHJhY2sgcGxvdExpbmUpIHtcbiAgICAgICAgICAgIDxnIHRldGEtcGxvdC1saW5lXG4gICAgICAgICAgICAgICBbcGxvdExpbmVdPVwicGxvdExpbmVcIlxuICAgICAgICAgICAgICAgW3NjYWxlXT1cImRhdGEuc2NhbGVzLnkuZ2V0KGkpLnNjYWxlXCJcbiAgICAgICAgICAgICAgIFtzaXplXT1cImRhdGEuc2l6ZVwiXG4gICAgICAgICAgICAgICBbYXhpc109XCJkYXRhLnNjYWxlcy55LmdldChpKVwiPjwvZz5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvZz5cbiAgICAgIDxnIGNsYXNzPVwiYW5ub3RhdGlvbnNcIj5cbiAgICAgICAgQGZvciAoYW5ub3RhdGlvbiBvZiBkYXRhLmNvbmZpZy5hbm5vdGF0aW9uczsgdHJhY2sgYW5ub3RhdGlvbikge1xuICAgICAgICAgIDxnIHRldGEtYW5ub3RhdGlvblxuICAgICAgICAgICAgIFt2aXNpYmxlUmVjdF09XCJkYXRhLnZpc2libGVSZWN0XCJcbiAgICAgICAgICAgICBbYW5ub3RhdGlvbl09XCJhbm5vdGF0aW9uXCI+PC9nPlxuICAgICAgICB9XG4gICAgICA8L2c+XG4gICAgICBAaWYgKGRhdGEuY29uZmlnLnRvb2x0aXA/LnNob3dDcm9zc2hhaXIpIHtcbiAgICAgICAgPGcgY2xhc3M9XCJjcm9zc2hhaXJcIj5cbiAgICAgICAgICA8ZyB0ZXRhLWNyb3NzaGFpciBbc2l6ZV09XCJkYXRhLnZpc2libGVSZWN0XCI+PC9nPlxuICAgICAgICA8L2c+XG4gICAgICB9XG4gICAgPC9zdmc+XG4gIH1cbn1cbiJdfQ==
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC1jb250YWluZXIvY2hhcnQtY29udGFpbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC1jb250YWluZXIvY2hhcnQtY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQWMsU0FBUyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJdkgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFLbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFD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Q2IsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFLO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBdUI7UUFDdkMsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQy9DLENBQUM7OEdBaE5VLHVCQUF1QjtrR0FBdkIsdUJBQXVCLGdGQ3ZEcEMsd3hKQTRIQSxxUERwRkksZ0JBQWdCLHFGQUNoQixpQkFBaUIsK0ZBQ2pCLGNBQWMsb0ZBQ2QsY0FBYywrRUFDZCxTQUFTLHlDQUNULFlBQVksaURBQ1osaUJBQWlCLDRHQUNqQixrQkFBa0IsK0VBQ2xCLG1CQUFtQiw2RkFDbkIsaUJBQWlCLDRHQUNqQixtQkFBbUIscUdBQ25CLGtCQUFrQiwrRUFDbEIsa0JBQWtCOzsyRkFHVCx1QkFBdUI7a0JBdEJuQyxTQUFTOytCQUNFLHNCQUFzQixjQUdwQixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsZ0JBQWdCO3dCQUNoQixpQkFBaUI7d0JBQ2pCLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxTQUFTO3dCQUNULFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsaUJBQWlCO3dCQUNqQixtQkFBbUI7d0JBQ25CLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3FCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE5nWm9uZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhbmltYXRpb25GcmFtZVNjaGVkdWxlciwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlLCBvYnNlcnZlT24sIHNoYXJlUmVwbGF5LCB3aXRoTGF0ZXN0RnJvbSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBeGlzIH0gZnJvbSAnLi4vY29yZS9heGlzL2F4aXMnO1xuaW1wb3J0IHsgQmFzZVBvaW50IH0gZnJvbSAnLi4vbW9kZWwvYmFzZS1wb2ludCc7XG5pbXBvcnQgeyBBeGlzT3JpZW50YXRpb24gfSBmcm9tICcuLi9tb2RlbC9lbnVtL2F4aXMtb3JpZW50YXRpb24nO1xuaW1wb3J0IHsgQnJ1c2hUeXBlIH0gZnJvbSAnLi4vbW9kZWwvZW51bS9icnVzaC10eXBlJztcbmltcG9ydCB7IFpvb21UeXBlIH0gZnJvbSAnLi4vbW9kZWwvZW51bS96b29tLXR5cGUnO1xuaW1wb3J0IHsgSUNoYXJ0Q29uZmlnIH0gZnJvbSAnLi4vbW9kZWwvaS1jaGFydC1jb25maWcnO1xuaW1wb3J0IHsgSVNjYWxlc01hcCB9IGZyb20gJy4uL21vZGVsL2ktc2NhbGVzLW1hcCc7XG5pbXBvcnQgeyBQbG90QmFuZCB9IGZyb20gJy4uL21vZGVsL3Bsb3QtYmFuZCc7XG5pbXBvcnQgeyBTZXJpZXMgfSBmcm9tICcuLi9tb2RlbC9zZXJpZXMnO1xuaW1wb3J0IHsgQ2hhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9jaGFydC5zZXJ2aWNlJztcbmltcG9ydCB7IFNjYWxlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2Uvc2NhbGUuc2VydmljZSc7XG5pbXBvcnQgeyBUb29sdGlwQ29tcG9uZW50IH0gZnJvbSAnLi90b29sdGlwL3Rvb2x0aXAuY29tcG9uZW50JztcbmltcG9ydCB7IFhBeGlzQ29tcG9uZW50IH0gZnJvbSAnLi94LWF4aXMveC1heGlzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBab29tYWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvem9vbWFibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFlBeGlzQ29tcG9uZW50IH0gZnJvbSAnLi95LWF4aXMveS1heGlzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIEtleVZhbHVlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBQbG90QmFuZENvbXBvbmVudCB9IGZyb20gJy4vcGxvdGJhbmQvcGxvdC1iYW5kLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmlkbGluZXNDb21wb25lbnQgfSBmcm9tICcuL2dyaWRsaW5lcy9ncmlkbGluZXMuY29tcG9uZW50JztcbmltcG9ydCB7IFNlcmllc0hvc3RDb21wb25lbnQgfSBmcm9tICcuL3Nlcmllcy1ob3N0L3Nlcmllcy1ob3N0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQbG90bGluZUNvbXBvbmVudCB9IGZyb20gJy4vcGxvdGxpbmUvcGxvdGxpbmUuY29tcG9uZW50JztcbmltcG9ydCB7IEFubm90YXRpb25Db21wb25lbnQgfSBmcm9tICcuL2Fubm90YXRpb24vYW5ub3RhdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3Jvc3NoYWlyQ29tcG9uZW50IH0gZnJvbSAnLi9jcm9zc2hhaXIvY3Jvc3NoYWlyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCcnVzaGFibGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2JydXNoYWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgdGV0YVpvbmVGdWxsIH0gZnJvbSAnLi4vLi4vb2JzZXJ2YWJsZS96b25lT2JzZXJ2YWJsZSc7XG5cbnR5cGUgT3Bwb3NpdGUgPSBib29sZWFuO1xudHlwZSBEaXNwbGF5UGxvdEJhbmQgPSB7XG4gIGF4aXM6IEF4aXM7XG4gIHBsb3RCYW5kOiBQbG90QmFuZDtcbn07XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLWNoYXJ0LWNvbnRhaW5lcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGFydC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGFydC1jb250YWluZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBUb29sdGlwQ29tcG9uZW50LFxuICAgIFpvb21hYmxlRGlyZWN0aXZlLFxuICAgIFhBeGlzQ29tcG9uZW50LFxuICAgIFlBeGlzQ29tcG9uZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgICBLZXlWYWx1ZVBpcGUsXG4gICAgUGxvdEJhbmRDb21wb25lbnQsXG4gICAgR3JpZGxpbmVzQ29tcG9uZW50LFxuICAgIFNlcmllc0hvc3RDb21wb25lbnQsXG4gICAgUGxvdGxpbmVDb21wb25lbnQsXG4gICAgQW5ub3RhdGlvbkNvbXBvbmVudCxcbiAgICBDcm9zc2hhaXJDb21wb25lbnQsXG4gICAgQnJ1c2hhYmxlRGlyZWN0aXZlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDaGFydENvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIGNvbmZpZzogT2JzZXJ2YWJsZTxJQ2hhcnRDb25maWc+O1xuICBzY2FsZXM6IE9ic2VydmFibGU8SVNjYWxlc01hcD47XG4gIHNpemU6IE9ic2VydmFibGU8RE9NUmVjdD47XG4gIHZpc2libGVSZWN0OiBPYnNlcnZhYmxlPGFueT47XG4gIGJydXNoU2NhbGU6IE9ic2VydmFibGU8YW55PjtcbiAgem9vbVR5cGUgPSBab29tVHlwZTtcbiAgcGxvdEJhbmRzOiBPYnNlcnZhYmxlPERpc3BsYXlQbG90QmFuZFtdPjtcblxuICBwcml2YXRlIF9vYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXI7XG4gIHByaXZhdGUgZmlsdGVyUG9zaXRpb25NYXAgPSBuZXcgTWFwPE9wcG9zaXRlLCAoYXhpczogQXhpcykgPT4gKF86IEF4aXMpID0+IGJvb2xlYW4+KClcbiAgICAuc2V0KHRydWUsIChheGlzKSA9PiAoXzogQXhpcykgPT4gXy5vcHRpb25zLm9wcG9zaXRlICYmIF8ub3B0aW9ucy52aXNpYmxlICYmIGF4aXMuaW5kZXggPD0gXy5pbmRleClcbiAgICAuc2V0KGZhbHNlLCAoYXhpcykgPT4gKF86IEF4aXMpID0+IF8ub3B0aW9ucy5vcHBvc2l0ZSAhPT0gdHJ1ZSAmJiBfLm9wdGlvbnMudmlzaWJsZSAmJiBfLmluZGV4IDw9IGF4aXMuaW5kZXgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3N2YzogQ2hhcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3NjYWxlU2VydmljZTogU2NhbGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfem9uZTogTmdab25lXG4gICkge1xuICAgIHRoaXMuY29uZmlnID0gdGhpcy5fc3ZjLmNvbmZpZztcbiAgICB0aGlzLnNpemUgPSB0aGlzLl9zdmMuc2l6ZTtcblxuICAgIHRoaXMuc2NhbGVzID0gdGhpcy5fc2NhbGVTZXJ2aWNlLnNjYWxlcy5waXBlKFxuICAgICAgb2JzZXJ2ZU9uKGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyKSxcbiAgICAgIHRldGFab25lRnVsbCh0aGlzLl96b25lKSxcbiAgICAgIHNoYXJlUmVwbGF5KHtcbiAgICAgICAgYnVmZmVyU2l6ZTogMSxcbiAgICAgICAgcmVmQ291bnQ6IHRydWUsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnBsb3RCYW5kcyA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuY29uZmlnLCB0aGlzLnNjYWxlc10pLnBpcGUoXG4gICAgICBtYXAoKFtjb25maWcsIHNjYWxlc10pID0+IHtcbiAgICAgICAgY29uc3QgYmFuZHM6IERpc3BsYXlQbG90QmFuZFtdID0gW107XG4gICAgICAgIGNvbmZpZy54QXhpcz8uZm9yRWFjaCgoYXhpcywgaW5kZXgpID0+IHtcbiAgICAgICAgICBheGlzLnBsb3RCYW5kcz8uZm9yRWFjaCgoYmFuZCkgPT4ge1xuICAgICAgICAgICAgYmFuZHMucHVzaCh7XG4gICAgICAgICAgICAgIHBsb3RCYW5kOiBiYW5kLFxuICAgICAgICAgICAgICBheGlzOiBzY2FsZXMueC5nZXQoaW5kZXgpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25maWcueUF4aXM/LmZvckVhY2goKGF4aXMsIGluZGV4KSA9PiB7XG4gICAgICAgICAgYXhpcy5wbG90QmFuZHM/LmZvckVhY2goKGJhbmQpID0+IHtcbiAgICAgICAgICAgIGJhbmRzLnB1c2goe1xuICAgICAgICAgICAgICBwbG90QmFuZDogYmFuZCxcbiAgICAgICAgICAgICAgYXhpczogc2NhbGVzLnkuZ2V0KGluZGV4KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYmFuZHMuc29ydCgoYSwgYikgPT4gYS5wbG90QmFuZC5vcmRlciAtIGIucGxvdEJhbmQub3JkZXIpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5icnVzaFNjYWxlID0gdGhpcy5fc2NhbGVTZXJ2aWNlLnNjYWxlcy5waXBlKFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5jb25maWcpLFxuICAgICAgbWFwKChkYXRhOiBbSVNjYWxlc01hcCwgSUNoYXJ0Q29uZmlnXSkgPT4ge1xuICAgICAgICBjb25zdCBbeyB4LCB5IH0sIGNvbmZpZ10gPSBkYXRhO1xuXG4gICAgICAgIHJldHVybiBjb25maWcuYnJ1c2g/LnR5cGUgPT09IEJydXNoVHlwZS54IHx8IGNvbmZpZz8uem9vbT8udHlwZSA9PT0gWm9vbVR5cGUueFxuICAgICAgICAgID8geC5nZXQoMCk/LnNjYWxlXG4gICAgICAgICAgOiB5LmdldCgwKT8uc2NhbGU7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KHtcbiAgICAgICAgYnVmZmVyU2l6ZTogMSxcbiAgICAgICAgcmVmQ291bnQ6IHRydWUsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnZpc2libGVSZWN0ID0gY29tYmluZUxhdGVzdChbdGhpcy5zaXplLCB0aGlzLnNjYWxlcywgdGhpcy5jb25maWddKS5waXBlKFxuICAgICAgbWFwKChkYXRhOiBbRE9NUmVjdCwgSVNjYWxlc01hcCwgSUNoYXJ0Q29uZmlnXSkgPT4ge1xuICAgICAgICBjb25zdCBbc2l6ZSwgeyB4LCB5IH0sIGNvbmZpZ10gPSBkYXRhO1xuICAgICAgICBjb25zdCB5QXhlc0FycmF5ID0gQXJyYXkuZnJvbSh5LnZhbHVlcygpKTtcbiAgICAgICAgY29uc3QgeEF4ZXNBcnJheSA9IEFycmF5LmZyb20oeC52YWx1ZXMoKSk7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB5QXhlc0FycmF5LmZpbHRlcigoXykgPT4gXy5vcHRpb25zLm9wcG9zaXRlICE9PSB0cnVlICYmIF8ub3B0aW9ucy52aXNpYmxlKS5yZWR1Y2UodGhpcy5zdW1TaXplLCAwKTtcblxuICAgICAgICBjb25zdCByaWdodCA9IHlBeGVzQXJyYXkuZmlsdGVyKChfKSA9PiBfLm9wdGlvbnMub3Bwb3NpdGUgJiYgXy5vcHRpb25zLnZpc2libGUpLnJlZHVjZSh0aGlzLnN1bVNpemUsIDApO1xuXG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IHhBeGVzQXJyYXlcbiAgICAgICAgICAuZmlsdGVyKChfKSA9PiBfLm9wdGlvbnMub3Bwb3NpdGUgIT09IHRydWUgJiYgXy5vcHRpb25zLnZpc2libGUpXG4gICAgICAgICAgLnJlZHVjZSh0aGlzLnN1bVNpemUsIDApO1xuXG4gICAgICAgIGNvbnN0IHRvcCA9IHhBeGVzQXJyYXkuZmlsdGVyKChfKSA9PiBfLm9wdGlvbnMub3Bwb3NpdGUgJiYgXy5vcHRpb25zLnZpc2libGUpLnJlZHVjZSh0aGlzLnN1bVNpemUsIDApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IGxlZnQgKyBjb25maWcuYm91bmRzPy5sZWZ0LFxuICAgICAgICAgIHk6IHRvcCArIGNvbmZpZy5ib3VuZHM/LnRvcCxcbiAgICAgICAgICB3aWR0aDogc2l6ZS53aWR0aCAtIGxlZnQgLSByaWdodCAtIGNvbmZpZy5ib3VuZHM/LmxlZnQgLSBjb25maWcuYm91bmRzPy5yaWdodCxcbiAgICAgICAgICBoZWlnaHQ6IHNpemUuaGVpZ2h0IC0gdG9wIC0gYm90dG9tIC0gY29uZmlnLmJvdW5kcz8udG9wIC0gY29uZmlnLmJvdW5kcz8uYm90dG9tLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICB0ZXRhWm9uZUZ1bGwodGhpcy5fem9uZSksXG4gICAgICBzaGFyZVJlcGxheSh7XG4gICAgICAgIGJ1ZmZlclNpemU6IDEsXG4gICAgICAgIHJlZkNvdW50OiB0cnVlLFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX29ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzOiBSZXNpemVPYnNlcnZlckVudHJ5W10pID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhQXJyYXkuaXNBcnJheShlbnRyaWVzKSB8fFxuICAgICAgICAgICFlbnRyaWVzLmxlbmd0aCB8fFxuICAgICAgICAgIGVudHJpZXNbMF0uY29udGVudFJlY3Qud2lkdGggPD0gMCB8fFxuICAgICAgICAgIGVudHJpZXNbMF0uY29udGVudFJlY3QuaGVpZ2h0IDw9IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3N2Yy5zZXRTaXplKGVudHJpZXNbMF0uY29udGVudFJlY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fb2JzZXJ2ZXIudW5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdW1TaXplID0gKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci5zZWxmU2l6ZTtcblxuICBnZXRUcmFuc2xhdGUoYXhpcz86IEF4aXMsIHNpemU/OiBET01SZWN0KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5zY2FsZXMucGlwZShcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuY29uZmlnKSxcbiAgICAgIG1hcCgoZGF0YTogW0lTY2FsZXNNYXAsIElDaGFydENvbmZpZ10pID0+IHtcbiAgICAgICAgY29uc3QgW3sgeCwgeSB9LCBjb25maWddID0gZGF0YTtcbiAgICAgICAgY29uc3QgeEF4ZXNBcnJheSA9IEFycmF5LmZyb20oeC52YWx1ZXMoKSk7XG4gICAgICAgIGNvbnN0IHlBeGVzQXJyYXkgPSBBcnJheS5mcm9tKHkudmFsdWVzKCkpO1xuXG4gICAgICAgIGNvbnN0IG9wcG9zaXRlRmlsdGVyID0gdGhpcy5maWx0ZXJQb3NpdGlvbk1hcC5nZXQodHJ1ZSk7XG4gICAgICAgIGNvbnN0IG5vbk9wcG9zaXRlRmlsdGVyID0gdGhpcy5maWx0ZXJQb3NpdGlvbk1hcC5nZXQoZmFsc2UpO1xuXG4gICAgICAgIGNvbnN0IG9wcG9zaXRlT2Zmc2V0WSA9IHlBeGVzQXJyYXkuZmlsdGVyKG9wcG9zaXRlRmlsdGVyKGF4aXMpKTtcbiAgICAgICAgY29uc3Qgbm9uT3Bwb3NpdGVPZmZzZXRZID0geUF4ZXNBcnJheS5maWx0ZXIobm9uT3Bwb3NpdGVGaWx0ZXIoYXhpcykpO1xuXG4gICAgICAgIGNvbnN0IG9wcG9zaXRlT2Zmc2V0WCA9IHhBeGVzQXJyYXkuZmlsdGVyKG9wcG9zaXRlRmlsdGVyKGF4aXMpKTtcbiAgICAgICAgY29uc3Qgbm9uT3Bwb3NpdGVPZmZzZXRYID0geEF4ZXNBcnJheS5maWx0ZXIobm9uT3Bwb3NpdGVGaWx0ZXIoYXhpcykpO1xuXG4gICAgICAgIGNvbnN0IG9wcG9zaXRlVHJhbnNsYXRlWSA9IG9wcG9zaXRlT2Zmc2V0WS5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci5zZWxmU2l6ZSwgY29uZmlnLmJvdW5kcz8ucmlnaHQpO1xuICAgICAgICBjb25zdCBub25PcHBpc3RlVHJhbnNsYXRlWSA9IG5vbk9wcG9zaXRlT2Zmc2V0WS5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci5zZWxmU2l6ZSwgY29uZmlnLmJvdW5kcz8ubGVmdCk7XG5cbiAgICAgICAgY29uc3Qgb3Bwb3NpdGVUcmFuc2xhdGVYID0gb3Bwb3NpdGVPZmZzZXRYLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBhY2MgKyBjdXJyLnNlbGZTaXplLCBjb25maWcuYm91bmRzPy50b3ApO1xuXG4gICAgICAgIGNvbnN0IG5vbk9wcGlzdGVUcmFuc2xhdGVYID0gbm9uT3Bwb3NpdGVPZmZzZXRYLnJlZHVjZShcbiAgICAgICAgICAoYWNjLCBjdXJyKSA9PiBhY2MgKyBjdXJyLnNlbGZTaXplLFxuICAgICAgICAgIGNvbmZpZy5ib3VuZHM/LmJvdHRvbVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGxlZnQgPSB5QXhlc0FycmF5XG4gICAgICAgICAgLmZpbHRlcigoXykgPT4gXy5vcHRpb25zLnZpc2libGUgJiYgXy5vcHRpb25zLm9wcG9zaXRlICE9PSB0cnVlKVxuICAgICAgICAgIC5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci5zZWxmU2l6ZSwgY29uZmlnLmJvdW5kcz8ubGVmdCk7XG5cbiAgICAgICAgY29uc3QgdG9wID0geEF4ZXNBcnJheVxuICAgICAgICAgIC5maWx0ZXIoKF8pID0+IF8ub3B0aW9ucy52aXNpYmxlICYmIF8ub3B0aW9ucy5vcHBvc2l0ZSA9PT0gdHJ1ZSlcbiAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cnIpID0+IGFjYyArIGN1cnIuc2VsZlNpemUsIGNvbmZpZy5ib3VuZHM/LnRvcCk7XG5cbiAgICAgICAgaWYgKGF4aXMub3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi54KSB7XG4gICAgICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoJHtsZWZ0fSwgJHtcbiAgICAgICAgICAgIGF4aXMub3B0aW9ucy5vcHBvc2l0ZSA/IG9wcG9zaXRlVHJhbnNsYXRlWCA6IHNpemUuaGVpZ2h0IC0gbm9uT3BwaXN0ZVRyYW5zbGF0ZVhcbiAgICAgICAgICB9KWA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXhpcy5vcmllbnRhdGlvbiA9PT0gQXhpc09yaWVudGF0aW9uLnkpIHtcbiAgICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke2F4aXMub3B0aW9ucy5vcHBvc2l0ZSA/IHNpemUud2lkdGggLSBvcHBvc2l0ZVRyYW5zbGF0ZVkgOiBub25PcHBpc3RlVHJhbnNsYXRlWX0sICR7dG9wfSlgO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoMCwgMCknO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgY2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIHhTY2FsZXM6IE1hcDxudW1iZXIsIEF4aXM+LCB5U2NhbGVzOiBNYXA8bnVtYmVyLCBBeGlzPikge1xuICAgIGNvbnN0IHggPSB4U2NhbGVzLmdldCgwKT8uc2NhbGU7XG4gICAgY29uc3QgeSA9IHlTY2FsZXMuZ2V0KDApPy5zY2FsZTtcbiAgICB0aGlzLl9zdmMuZW1pdENoYXJ0Q2xpY2soe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgdGFyZ2V0OiB7XG4gICAgICAgIHg6IHguaW52ZXJ0KGV2ZW50Lm9mZnNldFgpLFxuICAgICAgICB5OiB5LmludmVydChldmVudC5vZmZzZXRZKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBjb250ZXh0TWVudShldmVudDogTW91c2VFdmVudCwgeFNjYWxlczogTWFwPG51bWJlciwgQXhpcz4sIHlTY2FsZXM6IE1hcDxudW1iZXIsIEF4aXM+KSB7XG4gICAgY29uc3QgeCA9IHhTY2FsZXMuZ2V0KDApPy5zY2FsZTtcbiAgICBjb25zdCB5ID0geVNjYWxlcy5nZXQoMCk/LnNjYWxlO1xuICAgIHRoaXMuX3N2Yy5lbWl0Q2hhcnRDb250ZXh0TWVudSh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICB0YXJnZXQ6IHtcbiAgICAgICAgeDogeC5pbnZlcnQoZXZlbnQub2Zmc2V0WCksXG4gICAgICAgIHk6IHkuaW52ZXJ0KGV2ZW50Lm9mZnNldFkpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIG1vdXNlTW92ZShldmVudCkge1xuICAgIHRoaXMuX3N2Yy5zZXRQb2ludGVyTW92ZShldmVudCk7XG4gIH1cblxuICBtb3VzZUxlYXZlKGV2ZW50KSB7XG4gICAgdGhpcy5fc3ZjLnNldFBvaW50ZXJNb3ZlKGV2ZW50KTtcbiAgfVxuXG4gIHRyYWNrU2VyaWUoaW5kZXgsIGl0ZW06IFNlcmllczxCYXNlUG9pbnQ+KSB7XG4gICAgcmV0dXJuIGl0ZW0ubmFtZT8ubGVuZ3RoID8gaXRlbS5uYW1lIDogaW5kZXg7XG4gIH1cbn1cbiIsIkBpZiAoeyBzaXplOiBzaXplIHwgYXN5bmMsIGNvbmZpZzogY29uZmlnIHwgYXN5bmMsIHNjYWxlczogc2NhbGVzIHwgYXN5bmMsIHBsb3RCYW5kczogcGxvdEJhbmRzIHwgYXN5bmMsIHZpc2libGVSZWN0OlxudmlzaWJsZVJlY3QgfCBhc3luYyB9OyBhcyBkYXRhKSB7IEBpZiAoZGF0YS5jb25maWc/LnRvb2x0aXA/LmVuYWJsZSkge1xuPHRldGEtdG9vbHRpcCBbc2l6ZV09XCJkYXRhLnNpemVcIiBbY29uZmlnXT1cImRhdGEuY29uZmlnXCI+PC90ZXRhLXRvb2x0aXA+XG59IEBpZiAoZGF0YS5zaXplPy5oZWlnaHQgPiAwICYmIGRhdGEuc2l6ZT8ud2lkdGggPiAwICYmIGRhdGEudmlzaWJsZVJlY3Q/LmhlaWdodCA+IDAgJiYgZGF0YS52aXNpYmxlUmVjdD8ud2lkdGggPiAwICYmXG5kYXRhLnNjYWxlcz8ueC5zaXplID09PSBkYXRhLmNvbmZpZy54QXhpcy5sZW5ndGggJiYgZGF0YS5zY2FsZXM/Lnkuc2l6ZSA9PT0gZGF0YS5jb25maWcueUF4aXMubGVuZ3RoKSB7XG48c3ZnIGhlaWdodD1cIjEwMCVcIiB3aWR0aD1cIjEwMCVcIiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlXCI+XG4gIDxnIGNsYXNzPVwieS1heGlzLWNvbnRhaW5lclwiPlxuICAgIEBmb3IgKGl0ZW0gb2YgZGF0YS5zY2FsZXMueSB8IGtleXZhbHVlOyB0cmFjayBpdGVtLnZhbHVlLmluZGV4KSB7IEBpZiAoaXRlbS52YWx1ZS5zZWxmU2l6ZSA+IDAgJiZcbiAgICBpdGVtLnZhbHVlLm9wdGlvbnMudmlzaWJsZSAmJiBkYXRhLnNjYWxlcy54LnNpemUgPiAwICYmIGRhdGEuc2NhbGVzLnkuc2l6ZSA+IDApIHtcbiAgICA8Z1xuICAgICAgdGV0YS15LWF4aXNcbiAgICAgIFtheGlzXT1cIml0ZW0udmFsdWVcIlxuICAgICAgW3NpemVdPVwiZGF0YS52aXNpYmxlUmVjdFwiXG4gICAgICBbYXR0ci50cmFuc2Zvcm1dPVwiZ2V0VHJhbnNsYXRlKGl0ZW0udmFsdWUsIGRhdGEuc2l6ZSkgfCBhc3luY1wiXG4gICAgPjwvZz5cbiAgICA8cmVjdFxuICAgICAgdGV0YVpvb21hYmxlXG4gICAgICBmaWxsLW9wYWNpdHk9XCIwXCJcbiAgICAgIFtheGlzXT1cIml0ZW0udmFsdWVcIlxuICAgICAgW2NvbmZpZ109XCJkYXRhLmNvbmZpZ1wiXG4gICAgICBbc2l6ZV09XCJkYXRhLnZpc2libGVSZWN0XCJcbiAgICAgIFthdHRyLnhdPVwiaXRlbS52YWx1ZS5vcHRpb25zLm9wcG9zaXRlID8gMCA6IC1pdGVtLnZhbHVlLnNlbGZTaXplXCJcbiAgICAgIFthdHRyLnldPVwiMFwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwiZGF0YS52aXNpYmxlUmVjdC5oZWlnaHRcIlxuICAgICAgW2F0dHIud2lkdGhdPVwiaXRlbS52YWx1ZS5zZWxmU2l6ZVwiXG4gICAgICBbYXR0ci50cmFuc2Zvcm1dPVwiZ2V0VHJhbnNsYXRlKGl0ZW0udmFsdWUsIGRhdGEuc2l6ZSkgfCBhc3luY1wiXG4gICAgPjwvcmVjdD5cbiAgICB9IH1cbiAgPC9nPlxuICA8ZyBjbGFzcz1cIngtYXhpcy1jb250YWluZXJcIj5cbiAgICBAZm9yIChpdGVtIG9mIGRhdGEuc2NhbGVzLnggfCBrZXl2YWx1ZTsgdHJhY2sgaXRlbS52YWx1ZS5pbmRleCkgeyBAaWYgKGl0ZW0udmFsdWUub3B0aW9ucy52aXNpYmxlICYmXG4gICAgZGF0YS5zY2FsZXMueC5zaXplID4gMCAmJiBkYXRhLnNjYWxlcy55LnNpemUgPiAwKSB7XG4gICAgPGdcbiAgICAgIHRldGEteC1heGlzXG4gICAgICBbYXhpc109XCJpdGVtLnZhbHVlXCJcbiAgICAgIFtzaXplXT1cImRhdGEudmlzaWJsZVJlY3RcIlxuICAgICAgW2F0dHIudHJhbnNmb3JtXT1cImdldFRyYW5zbGF0ZShpdGVtLnZhbHVlLCBkYXRhLnNpemUpIHwgYXN5bmNcIlxuICAgID48L2c+XG4gICAgPHJlY3RcbiAgICAgIHRldGFab29tYWJsZVxuICAgICAgZmlsbC1vcGFjaXR5PVwiMFwiXG4gICAgICBbYXhpc109XCJpdGVtLnZhbHVlXCJcbiAgICAgIFtjb25maWddPVwiZGF0YS5jb25maWdcIlxuICAgICAgW3NpemVdPVwiZGF0YS52aXNpYmxlUmVjdFwiXG4gICAgICBbYXR0ci54XT1cIjBcIlxuICAgICAgW2F0dHIueV09XCJpdGVtLnZhbHVlLm9wdGlvbnMub3Bwb3NpdGUgPyAtaXRlbS52YWx1ZS5zZWxmU2l6ZSA6IDBcIlxuICAgICAgW2F0dHIud2lkdGhdPVwiZGF0YS52aXNpYmxlUmVjdC53aWR0aFwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwiaXRlbS52YWx1ZS5zZWxmU2l6ZVwiXG4gICAgICBbYXR0ci50cmFuc2Zvcm1dPVwiZ2V0VHJhbnNsYXRlKGl0ZW0udmFsdWUsIGRhdGEuc2l6ZSkgfCBhc3luY1wiXG4gICAgPjwvcmVjdD5cbiAgICB9IH1cbiAgPC9nPlxuPC9zdmc+XG59IEBpZiAoZGF0YS5zaXplPy5oZWlnaHQgPiAwICYmIGRhdGEuc2l6ZT8ud2lkdGggPiAwICYmIGRhdGEudmlzaWJsZVJlY3Q/LmhlaWdodCA+IDAgJiYgZGF0YS52aXNpYmxlUmVjdD8ud2lkdGggPiAwICYmXG5kYXRhLnNjYWxlcz8ueC5zaXplID09PSBkYXRhLmNvbmZpZy54QXhpcy5sZW5ndGggJiYgZGF0YS5zY2FsZXM/Lnkuc2l6ZSA9PT0gZGF0YS5jb25maWcueUF4aXMubGVuZ3RoKSB7XG48c3ZnXG4gIHRldGFab29tYWJsZVxuICB0ZXRhQnJ1c2hhYmxlXG4gIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIlxuICBbc2l6ZV09XCJkYXRhLnZpc2libGVSZWN0XCJcbiAgW2NvbmZpZ109XCJkYXRhLmNvbmZpZ1wiXG4gIFtheGlzXT1cImRhdGEuY29uZmlnPy56b29tPy50eXBlID09PSB6b29tVHlwZS54ID8gZGF0YS5zY2FsZXMueC5nZXQoMCkgOiBkYXRhLnNjYWxlcy55LmdldCgwKVwiXG4gIFthdHRyLndpZHRoXT1cImRhdGEudmlzaWJsZVJlY3Qud2lkdGhcIlxuICBbYXR0ci5oZWlnaHRdPVwiZGF0YS52aXNpYmxlUmVjdC5oZWlnaHRcIlxuICBbYXR0ci52aWV3Qm94XT1cIicwIDAgJyArIGRhdGEudmlzaWJsZVJlY3Qud2lkdGggKyAnICcgKyBkYXRhLnZpc2libGVSZWN0LmhlaWdodFwiXG4gIFtzdHlsZS50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZSgnICsgZGF0YS52aXNpYmxlUmVjdC54ICsgJ3B4LCAnICsgZGF0YS52aXNpYmxlUmVjdC55ICsgJ3B4KSdcIlxuICAoY29udGV4dG1lbnUpPVwiY29udGV4dE1lbnUoJGV2ZW50LCBkYXRhLnNjYWxlcy54LCBkYXRhLnNjYWxlcy55KVwiXG4gIChjbGljayk9XCJjbGljaygkZXZlbnQsIGRhdGEuc2NhbGVzLngsIGRhdGEuc2NhbGVzLnkpXCJcbiAgKG1vdXNlbGVhdmUpPVwibW91c2VMZWF2ZSgkZXZlbnQpXCJcbiAgKG1vdXNlbW92ZSk9XCJtb3VzZU1vdmUoJGV2ZW50KVwiXG4+XG4gIEBpZiAoZGF0YS5jb25maWcuZ3JpZExpbmVzPy5lbmFibGUgIT09IGZhbHNlKSB7XG4gIDxnIGNsYXNzPVwiZ3JpZGxpbmVzXCIgdGV0YS1ncmlkbGluZXMgW3NpemVdPVwiZGF0YS5zaXplXCI+PC9nPlxuICB9XG4gIDxnIGNsYXNzPVwieC1heGlzLXBsb3RiYW5kLWNvbnRhaW5lclwiPlxuICAgIEBmb3IgKHBsb3RCYW5kIG9mIGRhdGEucGxvdEJhbmRzOyB0cmFjayBwbG90QmFuZCkge1xuICAgIDxnXG4gICAgICB0ZXRhLXBsb3QtYmFuZFxuICAgICAgW3Bsb3RCYW5kXT1cInBsb3RCYW5kLnBsb3RCYW5kXCJcbiAgICAgIFtzY2FsZV09XCJwbG90QmFuZC5heGlzLnNjYWxlXCJcbiAgICAgIFtzaXplXT1cImRhdGEudmlzaWJsZVJlY3RcIlxuICAgICAgW2F4aXNdPVwicGxvdEJhbmQuYXhpc1wiXG4gICAgPjwvZz5cbiAgICB9XG4gIDwvZz5cbiAgPGcgY2xhc3M9XCJzZXJpZXMtY29udGFpbmVyXCI+XG4gICAgQGZvciAoc2VyaWVzIG9mIGRhdGEuY29uZmlnLnNlcmllczsgdHJhY2sgc2VyaWVzOyApIHsgQGlmIChzZXJpZXMudmlzaWJsZSkge1xuICAgIDxnIHRldGEtc2VyaWVzLWhvc3QgW2NvbmZpZ109XCJkYXRhLmNvbmZpZ1wiIFtzZXJpZXNdPVwic2VyaWVzXCI+PC9nPlxuICAgIH0gfVxuICA8L2c+XG4gIDxnIGNsYXNzPVwieC1heGlzLXBsb3RsaW5lLWNvbnRhaW5lclwiPlxuICAgIEBmb3IgKGF4aXMgb2YgZGF0YS5jb25maWcueEF4aXM7IGxldCBpID0gJGluZGV4OyB0cmFjayBheGlzKSB7IEBmb3IgKHBsb3RMaW5lIG9mIGF4aXMucGxvdExpbmVzOyB0cmFjayBwbG90TGluZSkge1xuICAgIDxnXG4gICAgICB0ZXRhLXBsb3QtbGluZVxuICAgICAgW3Bsb3RMaW5lXT1cInBsb3RMaW5lXCJcbiAgICAgIFtzY2FsZV09XCJkYXRhLnNjYWxlcy54LmdldChpKS5zY2FsZVwiXG4gICAgICBbc2l6ZV09XCJkYXRhLnNpemVcIlxuICAgICAgW2F4aXNdPVwiZGF0YS5zY2FsZXMueC5nZXQoaSlcIlxuICAgID48L2c+XG4gICAgfSB9XG4gIDwvZz5cbiAgPGcgY2xhc3M9XCJ5LWF4aXMtcGxvdGxpbmUtY29udGFpbmVyXCI+XG4gICAgQGZvciAoYXhpcyBvZiBkYXRhLmNvbmZpZy55QXhpczsgbGV0IGkgPSAkaW5kZXg7IHRyYWNrIGF4aXM7ICkgeyBAZm9yIChwbG90TGluZSBvZiBheGlzLnBsb3RMaW5lczsgdHJhY2sgcGxvdExpbmUpIHtcbiAgICA8Z1xuICAgICAgdGV0YS1wbG90LWxpbmVcbiAgICAgIFtwbG90TGluZV09XCJwbG90TGluZVwiXG4gICAgICBbc2NhbGVdPVwiZGF0YS5zY2FsZXMueS5nZXQoaSkuc2NhbGVcIlxuICAgICAgW3NpemVdPVwiZGF0YS5zaXplXCJcbiAgICAgIFtheGlzXT1cImRhdGEuc2NhbGVzLnkuZ2V0KGkpXCJcbiAgICA+PC9nPlxuICAgIH0gfVxuICA8L2c+XG4gIDxnIGNsYXNzPVwiYW5ub3RhdGlvbnNcIj5cbiAgICBAZm9yIChhbm5vdGF0aW9uIG9mIGRhdGEuY29uZmlnLmFubm90YXRpb25zOyB0cmFjayBhbm5vdGF0aW9uKSB7XG4gICAgPGcgdGV0YS1hbm5vdGF0aW9uIFt2aXNpYmxlUmVjdF09XCJkYXRhLnZpc2libGVSZWN0XCIgW2Fubm90YXRpb25dPVwiYW5ub3RhdGlvblwiPjwvZz5cbiAgICB9XG4gIDwvZz5cbiAgQGlmIChkYXRhLmNvbmZpZy50b29sdGlwPy5zaG93Q3Jvc3NoYWlyKSB7XG4gIDxnIGNsYXNzPVwiY3Jvc3NoYWlyXCI+XG4gICAgPGcgdGV0YS1jcm9zc2hhaXIgW3NpemVdPVwiZGF0YS52aXNpYmxlUmVjdFwiPjwvZz5cbiAgPC9nPlxuICB9XG48L3N2Zz5cbn0gfVxuIl19
@@ -1,7 +1,7 @@
1
1
  import { ChangeDetectorRef, Component, Input } from '@angular/core';
2
- import { ScaleService } from "../../service/scale.service";
3
- import { map, tap } from "rxjs";
4
- import { ChartService } from "../../service/chart.service";
2
+ import { ScaleService } from '../../service/scale.service';
3
+ import { map, tap } from 'rxjs';
4
+ import { ChartService } from '../../service/chart.service';
5
5
  import { AsyncPipe } from '@angular/common';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "../../service/scale.service";
@@ -16,7 +16,7 @@ export class CrosshairComponent {
16
16
  this.transform = this.chartService.pointerMove.pipe(map((event) => {
17
17
  return {
18
18
  x: event.type === 'mouseleave' ? -9999 : event.offsetX,
19
- y: event.type === 'mouseleave' ? -9999 : event.offsetY
19
+ y: event.type === 'mouseleave' ? -9999 : event.offsetY,
20
20
  };
21
21
  }), tap(() => {
22
22
  setTimeout(() => {
@@ -25,14 +25,12 @@ export class CrosshairComponent {
25
25
  }));
26
26
  }
27
27
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: CrosshairComponent, deps: [{ token: i1.ScaleService }, { token: i2.ChartService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
28
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: CrosshairComponent, isStandalone: true, selector: "[teta-crosshair]", inputs: { size: "size" }, ngImport: i0, template: "@if (transform | async; as t) {\n <svg:line [attr.x1]=\"t.x\" y1=\"0\" [attr.x2]=\"t.x\" [attr.y2]=\"size.height\" stroke=\"var(--color-text-90)\"\n stroke-width=\"0.5\"></svg:line>\n <svg:line x1=\"0\" [attr.y1]=\"t.y\" [attr.x2]=\"size.width\" [attr.y2]=\"t.y\" stroke=\"var(--color-text-90)\"\n stroke-width=\"0.5\"></svg:line>\n}\n", styles: [":host{shape-rendering:crispEdges;pointer-events:none}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }] }); }
28
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: CrosshairComponent, isStandalone: true, selector: "[teta-crosshair]", inputs: { size: "size" }, ngImport: i0, template: "@if (transform | async; as t) {\n<svg:line\n [attr.x1]=\"t.x\"\n y1=\"0\"\n [attr.x2]=\"t.x\"\n [attr.y2]=\"size.height\"\n stroke=\"var(--color-text-90)\"\n stroke-width=\"0.5\"\n></svg:line>\n<svg:line\n x1=\"0\"\n [attr.y1]=\"t.y\"\n [attr.x2]=\"size.width\"\n [attr.y2]=\"t.y\"\n stroke=\"var(--color-text-90)\"\n stroke-width=\"0.5\"\n></svg:line>\n}\n", styles: [":host{shape-rendering:crispEdges;pointer-events:none}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }] }); }
29
29
  }
30
30
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: CrosshairComponent, decorators: [{
31
31
  type: Component,
32
- args: [{ selector: '[teta-crosshair]', standalone: true, imports: [
33
- AsyncPipe,
34
- ], template: "@if (transform | async; as t) {\n <svg:line [attr.x1]=\"t.x\" y1=\"0\" [attr.x2]=\"t.x\" [attr.y2]=\"size.height\" stroke=\"var(--color-text-90)\"\n stroke-width=\"0.5\"></svg:line>\n <svg:line x1=\"0\" [attr.y1]=\"t.y\" [attr.x2]=\"size.width\" [attr.y2]=\"t.y\" stroke=\"var(--color-text-90)\"\n stroke-width=\"0.5\"></svg:line>\n}\n", styles: [":host{shape-rendering:crispEdges;pointer-events:none}\n"] }]
32
+ args: [{ selector: '[teta-crosshair]', standalone: true, imports: [AsyncPipe], template: "@if (transform | async; as t) {\n<svg:line\n [attr.x1]=\"t.x\"\n y1=\"0\"\n [attr.x2]=\"t.x\"\n [attr.y2]=\"size.height\"\n stroke=\"var(--color-text-90)\"\n stroke-width=\"0.5\"\n></svg:line>\n<svg:line\n x1=\"0\"\n [attr.y1]=\"t.y\"\n [attr.x2]=\"size.width\"\n [attr.y2]=\"t.y\"\n stroke=\"var(--color-text-90)\"\n stroke-width=\"0.5\"\n></svg:line>\n}\n", styles: [":host{shape-rendering:crispEdges;pointer-events:none}\n"] }]
35
33
  }], ctorParameters: () => [{ type: i1.ScaleService }, { type: i2.ChartService }, { type: i0.ChangeDetectorRef }], propDecorators: { size: [{
36
34
  type: Input
37
35
  }] } });
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvc3NoYWlyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC1jb250YWluZXIvY3Jvc3NoYWlyL2Nyb3NzaGFpci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY2hhcnQvY2hhcnQtY29udGFpbmVyL2Nyb3NzaGFpci9jcm9zc2hhaXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxHQUFHLEVBQWMsR0FBRyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFXMUMsTUFBTSxPQUFPLGtCQUFrQjtJQUs3QixZQUFvQixZQUEwQixFQUFVLFlBQTBCLEVBQVUsR0FBc0I7UUFBOUYsaUJBQVksR0FBWixZQUFZLENBQWM7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUFVLFFBQUcsR0FBSCxHQUFHLENBQW1CO0lBQ2xILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ2pELEdBQUcsQ0FBQyxDQUFDLEtBQW1CLEVBQUUsRUFBRTtZQUMxQixPQUFPO2dCQUNMLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPO2dCQUN0RCxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTzthQUN2RCxDQUFBO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMzQixDQUFDLENBQUMsQ0FBQTtRQUVKLENBQUMsQ0FBQyxDQUNILENBQUE7SUFFSCxDQUFDOzhHQXhCVSxrQkFBa0I7a0dBQWxCLGtCQUFrQixzR0NmL0IseVdBTUEsNEdETUksU0FBUzs7MkZBR0Esa0JBQWtCO2tCQVQ5QixTQUFTOytCQUNFLGtCQUFrQixjQUdoQixJQUFJLFdBQ1A7d0JBQ1AsU0FBUztxQkFDVjs0SUFJUSxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtTY2FsZVNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlL3NjYWxlLnNlcnZpY2VcIjtcbmltcG9ydCB7bWFwLCBPYnNlcnZhYmxlLCB0YXB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge0NoYXJ0U2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2UvY2hhcnQuc2VydmljZVwiO1xuaW1wb3J0IHtBc3luY1BpcGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1t0ZXRhLWNyb3NzaGFpcl0nLFxuICB0ZW1wbGF0ZVVybDogJy4vY3Jvc3NoYWlyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3Jvc3NoYWlyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBBc3luY1BpcGUsXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQ3Jvc3NoYWlyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSBzaXplOiBET01SZWN0O1xuICB0cmFuc2Zvcm06IE9ic2VydmFibGU8YW55PjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNjYWxlU2VydmljZTogU2NhbGVTZXJ2aWNlLCBwcml2YXRlIGNoYXJ0U2VydmljZTogQ2hhcnRTZXJ2aWNlLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMudHJhbnNmb3JtID0gdGhpcy5jaGFydFNlcnZpY2UucG9pbnRlck1vdmUucGlwZShcbiAgICAgIG1hcCgoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IGV2ZW50LnR5cGUgPT09ICdtb3VzZWxlYXZlJyA/IC05OTk5IDogZXZlbnQub2Zmc2V0WCxcbiAgICAgICAgICB5OiBldmVudC50eXBlID09PSAnbW91c2VsZWF2ZScgPyAtOTk5OSA6IGV2ZW50Lm9mZnNldFlcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICB0YXAoKCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pXG5cbiAgICAgIH0pXG4gICAgKVxuXG4gIH1cblxufVxuIiwiQGlmICh0cmFuc2Zvcm0gfCBhc3luYzsgYXMgdCkge1xuICA8c3ZnOmxpbmUgW2F0dHIueDFdPVwidC54XCIgeTE9XCIwXCIgW2F0dHIueDJdPVwidC54XCIgW2F0dHIueTJdPVwic2l6ZS5oZWlnaHRcIiBzdHJva2U9XCJ2YXIoLS1jb2xvci10ZXh0LTkwKVwiXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIwLjVcIj48L3N2ZzpsaW5lPlxuICA8c3ZnOmxpbmUgeDE9XCIwXCIgW2F0dHIueTFdPVwidC55XCIgW2F0dHIueDJdPVwic2l6ZS53aWR0aFwiIFthdHRyLnkyXT1cInQueVwiIHN0cm9rZT1cInZhcigtLWNvbG9yLXRleHQtOTApXCJcbiAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjAuNVwiPjwvc3ZnOmxpbmU+XG59XG4iXX0=
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvc3NoYWlyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC1jb250YWluZXIvY3Jvc3NoYWlyL2Nyb3NzaGFpci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY2hhcnQvY2hhcnQtY29udGFpbmVyL2Nyb3NzaGFpci9jcm9zc2hhaXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxHQUFHLEVBQWMsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFTNUMsTUFBTSxPQUFPLGtCQUFrQjtJQUk3QixZQUFvQixZQUEwQixFQUFVLFlBQTBCLEVBQVUsR0FBc0I7UUFBOUYsaUJBQVksR0FBWixZQUFZLENBQWM7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUFVLFFBQUcsR0FBSCxHQUFHLENBQW1CO0lBQUcsQ0FBQztJQUV0SCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ2pELEdBQUcsQ0FBQyxDQUFDLEtBQW1CLEVBQUUsRUFBRTtZQUMxQixPQUFPO2dCQUNMLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPO2dCQUN0RCxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTzthQUN2RCxDQUFDO1FBQ0osQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMzQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOzhHQXBCVSxrQkFBa0I7a0dBQWxCLGtCQUFrQixzR0NiL0IsbVhBa0JBLDRHRFBZLFNBQVM7OzJGQUVSLGtCQUFrQjtrQkFQOUIsU0FBUzsrQkFDRSxrQkFBa0IsY0FHaEIsSUFBSSxXQUNQLENBQUMsU0FBUyxDQUFDOzRJQUdYLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNjYWxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2Uvc2NhbGUuc2VydmljZSc7XG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2hhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9jaGFydC5zZXJ2aWNlJztcbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1t0ZXRhLWNyb3NzaGFpcl0nLFxuICB0ZW1wbGF0ZVVybDogJy4vY3Jvc3NoYWlyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3Jvc3NoYWlyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtBc3luY1BpcGVdLFxufSlcbmV4cG9ydCBjbGFzcyBDcm9zc2hhaXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBzaXplOiBET01SZWN0O1xuICB0cmFuc2Zvcm06IE9ic2VydmFibGU8YW55PjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNjYWxlU2VydmljZTogU2NhbGVTZXJ2aWNlLCBwcml2YXRlIGNoYXJ0U2VydmljZTogQ2hhcnRTZXJ2aWNlLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB0aGlzLmNoYXJ0U2VydmljZS5wb2ludGVyTW92ZS5waXBlKFxuICAgICAgbWFwKChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeDogZXZlbnQudHlwZSA9PT0gJ21vdXNlbGVhdmUnID8gLTk5OTkgOiBldmVudC5vZmZzZXRYLFxuICAgICAgICAgIHk6IGV2ZW50LnR5cGUgPT09ICdtb3VzZWxlYXZlJyA/IC05OTk5IDogZXZlbnQub2Zmc2V0WSxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIiwiQGlmICh0cmFuc2Zvcm0gfCBhc3luYzsgYXMgdCkge1xuPHN2ZzpsaW5lXG4gIFthdHRyLngxXT1cInQueFwiXG4gIHkxPVwiMFwiXG4gIFthdHRyLngyXT1cInQueFwiXG4gIFthdHRyLnkyXT1cInNpemUuaGVpZ2h0XCJcbiAgc3Ryb2tlPVwidmFyKC0tY29sb3ItdGV4dC05MClcIlxuICBzdHJva2Utd2lkdGg9XCIwLjVcIlxuPjwvc3ZnOmxpbmU+XG48c3ZnOmxpbmVcbiAgeDE9XCIwXCJcbiAgW2F0dHIueTFdPVwidC55XCJcbiAgW2F0dHIueDJdPVwic2l6ZS53aWR0aFwiXG4gIFthdHRyLnkyXT1cInQueVwiXG4gIHN0cm9rZT1cInZhcigtLWNvbG9yLXRleHQtOTApXCJcbiAgc3Ryb2tlLXdpZHRoPVwiMC41XCJcbj48L3N2ZzpsaW5lPlxufVxuIl19
@@ -1,8 +1,8 @@
1
- import { ChangeDetectionStrategy, Component, Input, } from '@angular/core';
2
- import { ScaleService } from "../../service/scale.service";
3
- import { map, withLatestFrom } from "rxjs";
4
- import { ChartService } from "../../service/chart.service";
5
- import { generateTicks } from "../../core/utils/generate-ticks";
1
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
+ import { ScaleService } from '../../service/scale.service';
3
+ import { map, withLatestFrom } from 'rxjs';
4
+ import { ChartService } from '../../service/chart.service';
5
+ import { generateTicks } from '../../core/utils/generate-ticks';
6
6
  import { AsyncPipe } from '@angular/common';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "../../service/scale.service";
@@ -15,27 +15,28 @@ export class GridlinesComponent {
15
15
  this.tickYValues = this.svc.scales.pipe(withLatestFrom(this.config), map((_) => {
16
16
  const [scales, config] = _;
17
17
  const ratio = this.size.height / 40;
18
- return config.gridLines?.y?.ticksCount != null ? generateTicks(scales.y.get(0).scale.domain(), config.gridLines?.y?.ticksCount) : scales.y.get(0)?.scale.ticks(ratio);
18
+ return config.gridLines?.y?.ticksCount != null
19
+ ? generateTicks(scales.y.get(0).scale.domain(), config.gridLines?.y?.ticksCount)
20
+ : scales.y.get(0)?.scale.ticks(ratio);
19
21
  }));
20
22
  this.tickXValues = this.svc.scales.pipe(withLatestFrom(this.config), map((_) => {
21
23
  const [scales, config] = _;
22
24
  const ratio = this.size.width / 40;
23
- return config.gridLines?.x?.ticksCount != null ? generateTicks(scales.x.get(0).originDomain, config.gridLines?.x?.ticksCount) : scales.x.get(0)?.scale.ticks(ratio);
25
+ return config.gridLines?.x?.ticksCount != null
26
+ ? generateTicks(scales.x.get(0).originDomain, config.gridLines?.x?.ticksCount)
27
+ : scales.x.get(0)?.scale.ticks(ratio);
24
28
  }));
25
29
  this.y = this.svc.scales.pipe(map((_) => _.y.get(0)?.scale));
26
30
  this.x = this.svc.scales.pipe(map((_) => _.x.get(0)?.scale));
27
31
  }
28
- ngAfterViewInit() {
29
- }
32
+ ngAfterViewInit() { }
30
33
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: GridlinesComponent, deps: [{ token: i1.ScaleService }, { token: i2.ChartService }], target: i0.ɵɵFactoryTarget.Component }); }
31
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: GridlinesComponent, isStandalone: true, selector: "[teta-gridlines]", inputs: { size: "size" }, ngImport: i0, template: "@if ({\n xValues: tickXValues | async,\n yValues: tickYValues | async,\n x: x | async,\n y: y | async,\n config: config | async\n}; as data) {\n @if (data.y && data.config.gridLines?.showY !== false) {\n @for (tick of data.yValues; track tick) {\n <svg:line [attr.x1]=\"0\"\n [attr.y1]=\"data.y(tick) || 1\"\n [attr.x2]=\"size?.width\"\n [attr.y2]=\"data.y(tick) || 1\"></svg:line>\n }\n }\n @if (data.x && data.config.gridLines?.showX !== false) {\n @for (tick of data.xValues; track tick) {\n <svg:line [attr.x1]=\"data.x(tick) || 1\"\n [attr.y1]=\"0\"\n [attr.x2]=\"data.x(tick) || 1\"\n [attr.y2]=\"size?.height\"></svg:line>\n }\n }\n}\n", styles: [":host{shape-rendering:crispEdges}:host line{stroke:var(--color-text-5)}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: GridlinesComponent, isStandalone: true, selector: "[teta-gridlines]", inputs: { size: "size" }, ngImport: i0, template: "@if ({ xValues: tickXValues | async, yValues: tickYValues | async, x: x | async, y: y | async, config: config | async };\nas data) { @if (data.y && data.config.gridLines?.showY !== false) { @for (tick of data.yValues; track tick) {\n<svg:line [attr.x1]=\"0\" [attr.y1]=\"data.y(tick) || 1\" [attr.x2]=\"size?.width\" [attr.y2]=\"data.y(tick) || 1\"></svg:line>\n} } @if (data.x && data.config.gridLines?.showX !== false) { @for (tick of data.xValues; track tick) {\n<svg:line [attr.x1]=\"data.x(tick) || 1\" [attr.y1]=\"0\" [attr.x2]=\"data.x(tick) || 1\" [attr.y2]=\"size?.height\"></svg:line>\n} } }\n", styles: [":host{shape-rendering:crispEdges}:host line{stroke:var(--color-text-5)}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
32
35
  }
33
36
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: GridlinesComponent, decorators: [{
34
37
  type: Component,
35
- args: [{ selector: '[teta-gridlines]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
36
- AsyncPipe,
37
- ], template: "@if ({\n xValues: tickXValues | async,\n yValues: tickYValues | async,\n x: x | async,\n y: y | async,\n config: config | async\n}; as data) {\n @if (data.y && data.config.gridLines?.showY !== false) {\n @for (tick of data.yValues; track tick) {\n <svg:line [attr.x1]=\"0\"\n [attr.y1]=\"data.y(tick) || 1\"\n [attr.x2]=\"size?.width\"\n [attr.y2]=\"data.y(tick) || 1\"></svg:line>\n }\n }\n @if (data.x && data.config.gridLines?.showX !== false) {\n @for (tick of data.xValues; track tick) {\n <svg:line [attr.x1]=\"data.x(tick) || 1\"\n [attr.y1]=\"0\"\n [attr.x2]=\"data.x(tick) || 1\"\n [attr.y2]=\"size?.height\"></svg:line>\n }\n }\n}\n", styles: [":host{shape-rendering:crispEdges}:host line{stroke:var(--color-text-5)}\n"] }]
38
+ args: [{ selector: '[teta-gridlines]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AsyncPipe], template: "@if ({ xValues: tickXValues | async, yValues: tickYValues | async, x: x | async, y: y | async, config: config | async };\nas data) { @if (data.y && data.config.gridLines?.showY !== false) { @for (tick of data.yValues; track tick) {\n<svg:line [attr.x1]=\"0\" [attr.y1]=\"data.y(tick) || 1\" [attr.x2]=\"size?.width\" [attr.y2]=\"data.y(tick) || 1\"></svg:line>\n} } @if (data.x && data.config.gridLines?.showX !== false) { @for (tick of data.xValues; track tick) {\n<svg:line [attr.x1]=\"data.x(tick) || 1\" [attr.y1]=\"0\" [attr.x2]=\"data.x(tick) || 1\" [attr.y2]=\"size?.height\"></svg:line>\n} } }\n", styles: [":host{shape-rendering:crispEdges}:host line{stroke:var(--color-text-5)}\n"] }]
38
39
  }], ctorParameters: () => [{ type: i1.ScaleService }, { type: i2.ChartService }], propDecorators: { size: [{
39
40
  type: Input
40
41
  }] } });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZGxpbmVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC1jb250YWluZXIvZ3JpZGxpbmVzL2dyaWRsaW5lcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY2hhcnQvY2hhcnQtY29udGFpbmVyL2dyaWRsaW5lcy9ncmlkbGluZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQUUsS0FBSyxHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFDLEdBQUcsRUFBYyxjQUFjLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFckQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFZNUMsTUFBTSxPQUFPLGtCQUFrQjtJQVU3QixZQUFvQixHQUFpQixFQUFVLFlBQTBCO1FBQXJELFFBQUcsR0FBSCxHQUFHLENBQWM7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUN2RSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO1FBRXZDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNyQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUMzQixHQUFHLENBQUMsQ0FBQyxDQUE2QixFQUFFLEVBQUU7WUFDcEMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsVUFBVSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4SyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRU4sSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3JDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQTZCLEVBQUUsRUFBRTtZQUNwQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDbkMsT0FBTyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxVQUFVLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFTixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxlQUFlO0lBRWYsQ0FBQzs4R0FuQ1Usa0JBQWtCO2tHQUFsQixrQkFBa0Isc0dDeEIvQiw2dkJBd0JBLDhIREhJLFNBQVM7OzJGQUdBLGtCQUFrQjtrQkFWOUIsU0FBUzsrQkFDRSxrQkFBa0IsY0FHaEIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLFNBQVM7cUJBQ1Y7NEdBSVEsSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCwgSW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1NjYWxlU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2Uvc2NhbGUuc2VydmljZVwiO1xuaW1wb3J0IHttYXAsIE9ic2VydmFibGUsIHdpdGhMYXRlc3RGcm9tfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtJQ2hhcnRDb25maWd9IGZyb20gXCIuLi8uLi9tb2RlbC9pLWNoYXJ0LWNvbmZpZ1wiO1xuaW1wb3J0IHtDaGFydFNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlL2NoYXJ0LnNlcnZpY2VcIjtcbmltcG9ydCB7Z2VuZXJhdGVUaWNrc30gZnJvbSBcIi4uLy4uL2NvcmUvdXRpbHMvZ2VuZXJhdGUtdGlja3NcIjtcbmltcG9ydCB7SVNjYWxlc01hcH0gZnJvbSBcIi4uLy4uL21vZGVsL2ktc2NhbGVzLW1hcFwiO1xuaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnW3RldGEtZ3JpZGxpbmVzXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmlkbGluZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ncmlkbGluZXMuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBBc3luY1BpcGUsXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgR3JpZGxpbmVzQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgQElucHV0KCkgc2l6ZTogRE9NUmVjdDtcblxuICBjb25maWc6IE9ic2VydmFibGU8SUNoYXJ0Q29uZmlnPjtcbiAgdGlja1lWYWx1ZXM6IE9ic2VydmFibGU8bnVtYmVyW10+O1xuICB0aWNrWFZhbHVlczogT2JzZXJ2YWJsZTxudW1iZXJbXT47XG4gIHg6IE9ic2VydmFibGU8YW55PjtcbiAgeTogT2JzZXJ2YWJsZTxhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3ZjOiBTY2FsZVNlcnZpY2UsIHByaXZhdGUgY2hhcnRTZXJ2aWNlOiBDaGFydFNlcnZpY2UpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMuY2hhcnRTZXJ2aWNlLmNvbmZpZztcblxuICAgIHRoaXMudGlja1lWYWx1ZXMgPSB0aGlzLnN2Yy5zY2FsZXMucGlwZShcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuY29uZmlnKSxcbiAgICAgIG1hcCgoXzogW0lTY2FsZXNNYXAsIElDaGFydENvbmZpZ10pID0+IHtcbiAgICAgICAgY29uc3QgW3NjYWxlcywgY29uZmlnXSA9IF87XG4gICAgICAgIGNvbnN0IHJhdGlvID0gdGhpcy5zaXplLmhlaWdodCAvIDQwO1xuICAgICAgICByZXR1cm4gY29uZmlnLmdyaWRMaW5lcz8ueT8udGlja3NDb3VudCAhPSBudWxsID8gZ2VuZXJhdGVUaWNrcyhzY2FsZXMueS5nZXQoMCkuc2NhbGUuZG9tYWluKCksIGNvbmZpZy5ncmlkTGluZXM/Lnk/LnRpY2tzQ291bnQpIDogc2NhbGVzLnkuZ2V0KDApPy5zY2FsZS50aWNrcyhyYXRpbyk7XG4gICAgICB9KSk7XG5cbiAgICB0aGlzLnRpY2tYVmFsdWVzID0gdGhpcy5zdmMuc2NhbGVzLnBpcGUoXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmNvbmZpZyksXG4gICAgICBtYXAoKF86IFtJU2NhbGVzTWFwLCBJQ2hhcnRDb25maWddKSA9PiB7XG4gICAgICAgIGNvbnN0IFtzY2FsZXMsIGNvbmZpZ10gPSBfO1xuICAgICAgICBjb25zdCByYXRpbyA9IHRoaXMuc2l6ZS53aWR0aCAvIDQwO1xuICAgICAgICByZXR1cm4gY29uZmlnLmdyaWRMaW5lcz8ueD8udGlja3NDb3VudCAhPSBudWxsID8gZ2VuZXJhdGVUaWNrcyhzY2FsZXMueC5nZXQoMCkub3JpZ2luRG9tYWluLCBjb25maWcuZ3JpZExpbmVzPy54Py50aWNrc0NvdW50KSA6IHNjYWxlcy54LmdldCgwKT8uc2NhbGUudGlja3MocmF0aW8pO1xuICAgICAgfSkpO1xuXG4gICAgdGhpcy55ID0gdGhpcy5zdmMuc2NhbGVzLnBpcGUobWFwKChfKSA9PiBfLnkuZ2V0KDApPy5zY2FsZSkpO1xuICAgIHRoaXMueCA9IHRoaXMuc3ZjLnNjYWxlcy5waXBlKG1hcCgoXykgPT4gXy54LmdldCgwKT8uc2NhbGUpKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblxuICB9XG59XG4iLCJAaWYgKHtcbiAgeFZhbHVlczogdGlja1hWYWx1ZXMgfCBhc3luYyxcbiAgeVZhbHVlczogdGlja1lWYWx1ZXMgfCBhc3luYyxcbiAgeDogeCB8IGFzeW5jLFxuICB5OiB5IHwgYXN5bmMsXG4gIGNvbmZpZzogY29uZmlnIHwgYXN5bmNcbn07IGFzIGRhdGEpIHtcbiAgQGlmIChkYXRhLnkgJiYgZGF0YS5jb25maWcuZ3JpZExpbmVzPy5zaG93WSAhPT0gZmFsc2UpIHtcbiAgICBAZm9yICh0aWNrIG9mIGRhdGEueVZhbHVlczsgdHJhY2sgdGljaykge1xuICAgICAgPHN2ZzpsaW5lIFthdHRyLngxXT1cIjBcIlxuICAgICAgICAgICAgICAgIFthdHRyLnkxXT1cImRhdGEueSh0aWNrKSB8fCAxXCJcbiAgICAgICAgICAgICAgICBbYXR0ci54Ml09XCJzaXplPy53aWR0aFwiXG4gICAgICAgICAgICAgICAgW2F0dHIueTJdPVwiZGF0YS55KHRpY2spIHx8IDFcIj48L3N2ZzpsaW5lPlxuICAgIH1cbiAgfVxuICBAaWYgKGRhdGEueCAmJiBkYXRhLmNvbmZpZy5ncmlkTGluZXM/LnNob3dYICE9PSBmYWxzZSkge1xuICAgIEBmb3IgKHRpY2sgb2YgZGF0YS54VmFsdWVzOyB0cmFjayB0aWNrKSB7XG4gICAgICA8c3ZnOmxpbmUgW2F0dHIueDFdPVwiZGF0YS54KHRpY2spIHx8IDFcIlxuICAgICAgICAgICAgICAgIFthdHRyLnkxXT1cIjBcIlxuICAgICAgICAgICAgICAgIFthdHRyLngyXT1cImRhdGEueCh0aWNrKSB8fCAxXCJcbiAgICAgICAgICAgICAgICBbYXR0ci55Ml09XCJzaXplPy5oZWlnaHRcIj48L3N2ZzpsaW5lPlxuICAgIH1cbiAgfVxufVxuIl19
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZGxpbmVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC1jb250YWluZXIvZ3JpZGxpbmVzL2dyaWRsaW5lcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY2hhcnQvY2hhcnQtY29udGFpbmVyL2dyaWRsaW5lcy9ncmlkbGluZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsR0FBRyxFQUFjLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWhFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQVU1QyxNQUFNLE9BQU8sa0JBQWtCO0lBUzdCLFlBQW9CLEdBQWlCLEVBQVUsWUFBMEI7UUFBckQsUUFBRyxHQUFILEdBQUcsQ0FBYztRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQ3ZFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7UUFFdkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3JDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQTZCLEVBQUUsRUFBRTtZQUNwQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxVQUFVLElBQUksSUFBSTtnQkFDNUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDO2dCQUNoRixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3JDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQTZCLEVBQUUsRUFBRTtZQUNwQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDbkMsT0FBTyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxVQUFVLElBQUksSUFBSTtnQkFDNUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDO2dCQUM5RSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsZUFBZSxLQUFJLENBQUM7OEdBdENULGtCQUFrQjtrR0FBbEIsa0JBQWtCLHNHQ2xCL0IsNmxCQU1BLDhIRFVZLFNBQVM7OzJGQUVSLGtCQUFrQjtrQkFSOUIsU0FBUzsrQkFDRSxrQkFBa0IsY0FHaEIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsU0FBUyxDQUFDOzRHQUdYLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNjYWxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2Uvc2NhbGUuc2VydmljZSc7XG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJQ2hhcnRDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbC9pLWNoYXJ0LWNvbmZpZyc7XG5pbXBvcnQgeyBDaGFydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2NoYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2VuZXJhdGVUaWNrcyB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvZ2VuZXJhdGUtdGlja3MnO1xuaW1wb3J0IHsgSVNjYWxlc01hcCB9IGZyb20gJy4uLy4uL21vZGVsL2ktc2NhbGVzLW1hcCc7XG5pbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdbdGV0YS1ncmlkbGluZXNdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWRsaW5lcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dyaWRsaW5lcy5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0FzeW5jUGlwZV0sXG59KVxuZXhwb3J0IGNsYXNzIEdyaWRsaW5lc0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBzaXplOiBET01SZWN0O1xuXG4gIGNvbmZpZzogT2JzZXJ2YWJsZTxJQ2hhcnRDb25maWc+O1xuICB0aWNrWVZhbHVlczogT2JzZXJ2YWJsZTxudW1iZXJbXT47XG4gIHRpY2tYVmFsdWVzOiBPYnNlcnZhYmxlPG51bWJlcltdPjtcbiAgeDogT2JzZXJ2YWJsZTxhbnk+O1xuICB5OiBPYnNlcnZhYmxlPGFueT47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdmM6IFNjYWxlU2VydmljZSwgcHJpdmF0ZSBjaGFydFNlcnZpY2U6IENoYXJ0U2VydmljZSkge1xuICAgIHRoaXMuY29uZmlnID0gdGhpcy5jaGFydFNlcnZpY2UuY29uZmlnO1xuXG4gICAgdGhpcy50aWNrWVZhbHVlcyA9IHRoaXMuc3ZjLnNjYWxlcy5waXBlKFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5jb25maWcpLFxuICAgICAgbWFwKChfOiBbSVNjYWxlc01hcCwgSUNoYXJ0Q29uZmlnXSkgPT4ge1xuICAgICAgICBjb25zdCBbc2NhbGVzLCBjb25maWddID0gXztcbiAgICAgICAgY29uc3QgcmF0aW8gPSB0aGlzLnNpemUuaGVpZ2h0IC8gNDA7XG4gICAgICAgIHJldHVybiBjb25maWcuZ3JpZExpbmVzPy55Py50aWNrc0NvdW50ICE9IG51bGxcbiAgICAgICAgICA/IGdlbmVyYXRlVGlja3Moc2NhbGVzLnkuZ2V0KDApLnNjYWxlLmRvbWFpbigpLCBjb25maWcuZ3JpZExpbmVzPy55Py50aWNrc0NvdW50KVxuICAgICAgICAgIDogc2NhbGVzLnkuZ2V0KDApPy5zY2FsZS50aWNrcyhyYXRpbyk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnRpY2tYVmFsdWVzID0gdGhpcy5zdmMuc2NhbGVzLnBpcGUoXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmNvbmZpZyksXG4gICAgICBtYXAoKF86IFtJU2NhbGVzTWFwLCBJQ2hhcnRDb25maWddKSA9PiB7XG4gICAgICAgIGNvbnN0IFtzY2FsZXMsIGNvbmZpZ10gPSBfO1xuICAgICAgICBjb25zdCByYXRpbyA9IHRoaXMuc2l6ZS53aWR0aCAvIDQwO1xuICAgICAgICByZXR1cm4gY29uZmlnLmdyaWRMaW5lcz8ueD8udGlja3NDb3VudCAhPSBudWxsXG4gICAgICAgICAgPyBnZW5lcmF0ZVRpY2tzKHNjYWxlcy54LmdldCgwKS5vcmlnaW5Eb21haW4sIGNvbmZpZy5ncmlkTGluZXM/Lng/LnRpY2tzQ291bnQpXG4gICAgICAgICAgOiBzY2FsZXMueC5nZXQoMCk/LnNjYWxlLnRpY2tzKHJhdGlvKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMueSA9IHRoaXMuc3ZjLnNjYWxlcy5waXBlKG1hcCgoXykgPT4gXy55LmdldCgwKT8uc2NhbGUpKTtcbiAgICB0aGlzLnggPSB0aGlzLnN2Yy5zY2FsZXMucGlwZShtYXAoKF8pID0+IF8ueC5nZXQoMCk/LnNjYWxlKSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7fVxufVxuIiwiQGlmICh7IHhWYWx1ZXM6IHRpY2tYVmFsdWVzIHwgYXN5bmMsIHlWYWx1ZXM6IHRpY2tZVmFsdWVzIHwgYXN5bmMsIHg6IHggfCBhc3luYywgeTogeSB8IGFzeW5jLCBjb25maWc6IGNvbmZpZyB8IGFzeW5jIH07XG5hcyBkYXRhKSB7IEBpZiAoZGF0YS55ICYmIGRhdGEuY29uZmlnLmdyaWRMaW5lcz8uc2hvd1kgIT09IGZhbHNlKSB7IEBmb3IgKHRpY2sgb2YgZGF0YS55VmFsdWVzOyB0cmFjayB0aWNrKSB7XG48c3ZnOmxpbmUgW2F0dHIueDFdPVwiMFwiIFthdHRyLnkxXT1cImRhdGEueSh0aWNrKSB8fCAxXCIgW2F0dHIueDJdPVwic2l6ZT8ud2lkdGhcIiBbYXR0ci55Ml09XCJkYXRhLnkodGljaykgfHwgMVwiPjwvc3ZnOmxpbmU+XG59IH0gQGlmIChkYXRhLnggJiYgZGF0YS5jb25maWcuZ3JpZExpbmVzPy5zaG93WCAhPT0gZmFsc2UpIHsgQGZvciAodGljayBvZiBkYXRhLnhWYWx1ZXM7IHRyYWNrIHRpY2spIHtcbjxzdmc6bGluZSBbYXR0ci54MV09XCJkYXRhLngodGljaykgfHwgMVwiIFthdHRyLnkxXT1cIjBcIiBbYXR0ci54Ml09XCJkYXRhLngodGljaykgfHwgMVwiIFthdHRyLnkyXT1cInNpemU/LmhlaWdodFwiPjwvc3ZnOmxpbmU+XG59IH0gfVxuIl19