@tetacom/svg-charts 1.1.21 → 1.1.24

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.
@@ -4,11 +4,11 @@ import * as d3 from 'd3';
4
4
  import { zoomIdentity } from 'd3';
5
5
  import { ZoomType } from '../model/enum/zoom-type';
6
6
  import { AxisOrientation } from '../model/enum/axis-orientation';
7
- import { ZoomMessage } from '../model/i-broadcast-message';
7
+ import { ZoomMessage, } from '../model/i-broadcast-message';
8
8
  import { BrushType } from '../model/enum/brush-type';
9
9
  import { debounceTime, tap } from 'rxjs/operators';
10
- import { combineLatest, filter, takeWhile } from 'rxjs';
11
- import { ZoomBehaviorType } from "../model/enum/zoom-behavior-type";
10
+ import { combineLatest, filter, takeWhile, } from 'rxjs';
11
+ import { ZoomBehaviorType } from '../model/enum/zoom-behavior-type';
12
12
  import * as i0 from "@angular/core";
13
13
  import * as i1 from "../service/zoom.service";
14
14
  import * as i2 from "../service/broadcast.service";
@@ -23,6 +23,7 @@ export class ZoomableDirective {
23
23
  this.zoomable = false;
24
24
  this.alive = true;
25
25
  this.currentTransform = zoomIdentity;
26
+ this.wheelIdle = true;
26
27
  this.zoomed = (event) => {
27
28
  if (event.sourceEvent) {
28
29
  if (Object.keys(event.sourceEvent).length !== 0) {
@@ -30,14 +31,14 @@ export class ZoomableDirective {
30
31
  return;
31
32
  }
32
33
  const origin = this.brushScale.copy().domain(this.zoomAxis.extremes);
33
- let domain = this.config.zoom?.type === ZoomType.y ?
34
- event.transform.rescaleY(origin).domain() :
35
- event.transform.rescaleX(origin).domain();
34
+ let domain = this.config.zoom?.type === ZoomType.y
35
+ ? event.transform.rescaleY(origin).domain()
36
+ : event.transform.rescaleX(origin).domain();
36
37
  const message = new ZoomMessage({
37
38
  event,
38
39
  axis: this.zoomAxis,
39
40
  brushDomain: domain,
40
- chartId: this.config.id
41
+ chartId: this.config.id,
41
42
  });
42
43
  this.broadcastService.broadcastZoom({
43
44
  channel: this.config?.zoom?.syncChannel,
@@ -46,7 +47,7 @@ export class ZoomableDirective {
46
47
  }
47
48
  this.zoomService.setZoom({
48
49
  event,
49
- target: this.zoomAxis
50
+ target: this.zoomAxis,
50
51
  });
51
52
  this.currentTransform = event.transform;
52
53
  }
@@ -58,119 +59,164 @@ export class ZoomableDirective {
58
59
  }
59
60
  }
60
61
  ngAfterViewInit() {
61
- const enable = this.axis?.options?.zoom && this.axis?.options.visible !== false || this.config?.zoom?.enable;
62
+ const enable = (this.axis?.options?.zoom && this.axis?.options.visible !== false) ||
63
+ this.config?.zoom?.enable;
62
64
  if (!enable) {
63
65
  return;
64
66
  }
65
67
  this._element = d3.select(this.elementRef.nativeElement);
66
- this.zoom = d3
67
- .zoom()
68
- .extent([
68
+ this.zoom = d3.zoom().extent([
69
69
  [0, 0],
70
70
  [this.size.width, this.size.height],
71
71
  ]);
72
72
  if (this.config.zoom?.limitTranslateByData) {
73
- this.zoom.translateExtent([[0, 0], [this.size.width, this.size.height]]);
73
+ this.zoom.translateExtent([
74
+ [0, 0],
75
+ [this.size.width, this.size.height],
76
+ ]);
74
77
  }
75
- const commonZoomAxis = Axis.createAxis(this.config?.zoom.type === ZoomType.x ? AxisOrientation.x : AxisOrientation.y, this.config, 0, true);
78
+ const commonZoomAxis = Axis.createAxis(this.config?.zoom.type === ZoomType.x
79
+ ? AxisOrientation.x
80
+ : AxisOrientation.y, this.config, 0, true);
76
81
  this.zoomAxis = this.axis ?? commonZoomAxis;
77
82
  if (enable) {
78
- const maxZoom = this.config.zoom?.max ? (this.zoomAxis.extremes[1] - this.zoomAxis.extremes[0]) / this.config.zoom?.max : this.config.zoom?.limitZoomByData ? 1 : 0;
79
- const minZoom = this.config.zoom?.min ? (this.zoomAxis.extremes[1] - this.zoomAxis.extremes[0]) / this.config.zoom?.min : Infinity;
83
+ const maxZoom = this.config.zoom?.max
84
+ ? (this.zoomAxis.extremes[1] - this.zoomAxis.extremes[0]) /
85
+ this.config.zoom?.max
86
+ : this.config.zoom?.limitZoomByData
87
+ ? 1
88
+ : 0;
89
+ const minZoom = this.config.zoom?.min
90
+ ? (this.zoomAxis.extremes[1] - this.zoomAxis.extremes[0]) /
91
+ this.config.zoom?.min
92
+ : Infinity;
80
93
  this.zoom.scaleExtent([maxZoom, minZoom]);
81
94
  this.zoom.on('start zoom end', this.zoomed);
82
95
  this._element.call(this.zoom).on('dblclick.zoom', null);
83
96
  if (this.config?.zoom?.zoomBehavior === ZoomBehaviorType.wheel) {
84
- let wheeling;
85
97
  let type = 'start';
86
- const origin = this.brushScale.copy().domain(this.zoomAxis.extremes);
98
+ let wheeling;
87
99
  this.zoom
88
- .filter((event) => event.ctrlKey && event.type === 'wheel')
100
+ .filter((event) => (event.ctrlKey && event.type === 'wheel') ||
101
+ Boolean(window.TouchEvent))
89
102
  .wheelDelta((event) => {
90
- const delta = this.config?.zoom.type === ZoomType.x ? -event.deltaX : -event.deltaY;
103
+ const delta = this.config?.zoom.type === ZoomType.x
104
+ ? -event.deltaX
105
+ : -event.deltaY;
91
106
  return delta * 0.002;
92
107
  });
108
+ const emit = (type, event) => {
109
+ const origin = this.brushScale.copy().domain(this.zoomAxis.extremes);
110
+ let transform = zoomIdentity;
111
+ const delta = type === 'end'
112
+ ? 0
113
+ : this.config.zoom?.type === ZoomType.y
114
+ ? event.deltaY
115
+ : event.deltaX;
116
+ if (this.config.zoom?.type === ZoomType.y) {
117
+ transform = transform.translate(0, this.currentTransform.y - delta / 2);
118
+ }
119
+ if (this.config.zoom?.type === ZoomType.x) {
120
+ transform = transform.translate(this.currentTransform.x - delta / 2, 0);
121
+ }
122
+ transform = transform.scale(this.currentTransform.k);
123
+ let domain = this.config.zoom?.type === ZoomType.y
124
+ ? transform.rescaleY(origin).domain()
125
+ : transform.rescaleX(origin).domain();
126
+ const message = new ZoomMessage({
127
+ event: {
128
+ sourceEvent: event,
129
+ transform,
130
+ type,
131
+ },
132
+ axis: this.zoomAxis,
133
+ brushDomain: domain,
134
+ chartId: this.config.id,
135
+ });
136
+ this.zoomService.setZoom({
137
+ event: {
138
+ sourceEvent: event,
139
+ transform,
140
+ type,
141
+ },
142
+ target: this.zoomAxis,
143
+ });
144
+ this._element.call(this.zoom.transform, transform);
145
+ this.currentTransform = transform;
146
+ this.broadcastService.broadcastZoom({
147
+ channel: this.config?.zoom?.syncChannel,
148
+ message,
149
+ });
150
+ };
93
151
  this._element.on('wheel', (event) => {
94
152
  event.preventDefault();
95
153
  if (event.ctrlKey) {
96
154
  return;
97
155
  }
98
- const emit = (type) => {
99
- let transform = zoomIdentity;
100
- const delta = type === 'end' ? 0 : this.config.zoom?.type === ZoomType.y ? event.deltaY : event.deltaX;
101
- if (this.config.zoom?.type === ZoomType.y) {
102
- transform = transform.translate(0, this.currentTransform.y - delta / 2);
103
- }
104
- if (this.config.zoom?.type === ZoomType.x) {
105
- transform = transform.translate(this.currentTransform.x - delta / 2, 0);
106
- }
107
- transform = transform.scale(this.currentTransform.k);
108
- let domain = this.config.zoom?.type === ZoomType.y ?
109
- transform.rescaleY(origin).domain() :
110
- transform.rescaleX(origin).domain();
111
- const message = new ZoomMessage({
112
- event: {
113
- sourceEvent: event,
114
- transform,
115
- type
116
- },
117
- axis: this.zoomAxis,
118
- brushDomain: domain,
119
- chartId: this.config.id
120
- });
121
- this.zoomService.setZoom({
122
- event: {
123
- sourceEvent: event,
124
- transform,
125
- type
126
- },
127
- target: this.zoomAxis
128
- });
129
- this.broadcastService.broadcastZoom({
130
- channel: this.config?.zoom?.syncChannel,
131
- message,
132
- });
133
- this._element.call(this.zoom.transform, transform);
134
- this.currentTransform = transform;
135
- };
136
156
  this.zone.runOutsideAngular(() => {
137
157
  clearTimeout(wheeling);
138
- emit(type);
158
+ emit(type, event);
139
159
  type = 'zoom';
160
+ this.wheelIdle = false;
140
161
  wheeling = setTimeout(() => {
141
162
  type = 'end';
142
- emit(type);
163
+ emit(type, event);
164
+ this.wheelIdle = true;
143
165
  type = 'start';
144
- }, 300);
166
+ }, 150);
145
167
  });
146
168
  });
147
169
  }
148
170
  }
149
171
  // Subscribe to zoom events
150
- this.broadcastService.subscribeToZoom(this.config?.zoom.syncChannel).pipe(takeWhile((_) => this.alive), filter((m) => m.message.event.sourceEvent instanceof MouseEvent || m.message.event.sourceEvent instanceof WheelEvent), filter((m) => {
151
- return this.zoomAxis.index === m.message?.axis?.index && this.zoomAxis.orientation === m.message?.axis?.orientation;
172
+ this.broadcastService
173
+ .subscribeToZoom(this.config?.zoom.syncChannel)
174
+ .pipe(takeWhile((_) => this.alive), filter((m) => m.message.event.sourceEvent instanceof MouseEvent ||
175
+ m.message.event.sourceEvent instanceof WheelEvent ||
176
+ (window.TouchEvent &&
177
+ m.message.event.sourceEvent instanceof TouchEvent)), filter((m) => {
178
+ return (this.zoomAxis.index === m.message?.axis?.index &&
179
+ this.zoomAxis.orientation === m.message?.axis?.orientation);
152
180
  }), tap((m) => {
153
181
  if (this.config.id !== m.message.chartId) {
182
+ this.wheelIdle = false;
183
+ if (m.message.event.type === 'end') {
184
+ this.wheelIdle = true;
185
+ }
154
186
  this._element.call(this.zoom.transform, m.message.event.transform, null, {});
155
187
  }
156
188
  else {
157
- if (m.message.axis.isFake && !this.zoomAxis.isFake || !m.message.axis.isFake && this.zoomAxis.isFake) {
189
+ if ((m.message.axis.isFake && !this.zoomAxis.isFake) ||
190
+ (!m.message.axis.isFake && this.zoomAxis.isFake)) {
158
191
  this._element.call(this.zoom.transform, m.message.event.transform);
159
192
  }
160
193
  }
161
- })).subscribe();
194
+ }))
195
+ .subscribe();
162
196
  // Subscribe to brush events x or y
163
- if ((this.config.brush?.type === BrushType.x && this.zoomAxis.orientation === AxisOrientation.x) ||
164
- (this.config.brush?.type === BrushType.y && this.zoomAxis.orientation === AxisOrientation.y)) {
165
- combineLatest([this.broadcastService.subscribeToBrush(this.config?.zoom.syncChannel), this.chartService.size]).pipe(takeWhile((_) => this.alive), debounceTime(150), filter((data) => Boolean(data[0].message.selection)), tap((data) => {
197
+ if ((this.config.brush?.type === BrushType.x &&
198
+ this.zoomAxis.orientation === AxisOrientation.x) ||
199
+ (this.config.brush?.type === BrushType.y &&
200
+ this.zoomAxis.orientation === AxisOrientation.y)) {
201
+ combineLatest([
202
+ this.broadcastService.subscribeToBrush(this.config?.zoom.syncChannel),
203
+ this.chartService.size,
204
+ ])
205
+ .pipe(takeWhile((_) => this.alive), debounceTime(150), filter((data) => Boolean(data[0].message.selection)), tap((data) => {
166
206
  const [m] = data;
207
+ if (!this.wheelIdle) {
208
+ return;
209
+ }
167
210
  const currentTransform = d3.zoomTransform(this._element.node());
168
- if (!m.message.event && this.currentSelection && currentTransform.k !== 1) {
211
+ if (!m.message.event &&
212
+ this.currentSelection &&
213
+ currentTransform.k !== 1) {
169
214
  return;
170
215
  }
171
- this.currentSelection = m.message.selection;
172
216
  this.updateZoom(m);
173
- })).subscribe();
217
+ this.currentSelection = m.message.selection;
218
+ }))
219
+ .subscribe();
174
220
  }
175
221
  }
176
222
  ngOnDestroy() {
@@ -212,4 +258,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
212
258
  type: HostBinding,
213
259
  args: ['class.zoomable']
214
260
  }] } });
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9vbWFibGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2RpcmVjdGl2ZXMvem9vbWFibGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFjLFdBQVcsRUFBRSxLQUFLLEdBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRzNHLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUN2QyxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEVBQTRCLFlBQVksRUFBQyxNQUFNLElBQUksQ0FBQztBQUMzRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sRUFBa0MsV0FBVyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDMUYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxZQUFZLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXRELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtDQUFrQyxDQUFDOzs7OztBQUtsRSxNQUFNLE9BQU8saUJBQWlCO0lBaUI1QixZQUNVLFVBQXNCLEVBQ3RCLFdBQXdCLEVBQ3hCLGdCQUFrQyxFQUNsQyxZQUEwQixFQUMxQixJQUFZO1FBSlosZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLFNBQUksR0FBSixJQUFJLENBQVE7UUFm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O3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSW5wdXQsIE5nWm9uZSwgT25EZXN0cm95LH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1pvb21TZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL3pvb20uc2VydmljZSc7XG5pbXBvcnQge0lDaGFydENvbmZpZ30gZnJvbSAnLi4vbW9kZWwvaS1jaGFydC1jb25maWcnO1xuaW1wb3J0IHtBeGlzfSBmcm9tICcuLi9jb3JlL2F4aXMvYXhpcyc7XG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5pbXBvcnQge0QzWm9vbUV2ZW50LCBab29tQmVoYXZpb3IsIHpvb21JZGVudGl0eX0gZnJvbSAnZDMnO1xuaW1wb3J0IHtab29tVHlwZX0gZnJvbSAnLi4vbW9kZWwvZW51bS96b29tLXR5cGUnO1xuaW1wb3J0IHtBeGlzT3JpZW50YXRpb259IGZyb20gJy4uL21vZGVsL2VudW0vYXhpcy1vcmllbnRhdGlvbic7XG5pbXBvcnQge0JydXNoTWVzc2FnZSwgSUJyb2FkY2FzdE1lc3NhZ2UsIFpvb21NZXNzYWdlfSBmcm9tICcuLi9tb2RlbC9pLWJyb2FkY2FzdC1tZXNzYWdlJztcbmltcG9ydCB7QnJ1c2hUeXBlfSBmcm9tICcuLi9tb2RlbC9lbnVtL2JydXNoLXR5cGUnO1xuaW1wb3J0IHtCcm9hZGNhc3RTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL2Jyb2FkY2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Y29tYmluZUxhdGVzdCwgZmlsdGVyLCB0YWtlV2hpbGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtDaGFydFNlcnZpY2V9IGZyb20gXCIuLi9zZXJ2aWNlL2NoYXJ0LnNlcnZpY2VcIjtcbmltcG9ydCB7Wm9vbUJlaGF2aW9yVHlwZX0gZnJvbSBcIi4uL21vZGVsL2VudW0vem9vbS1iZWhhdmlvci10eXBlXCI7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0ZXRhWm9vbWFibGVdJyxcbn0pXG5leHBvcnQgY2xhc3MgWm9vbWFibGVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBjb25maWc6IElDaGFydENvbmZpZztcbiAgQElucHV0KCkgYXhpcz86IEF4aXM7XG4gIEBJbnB1dCgpIHNpemU6IERPTVJlY3Q7XG4gIEBJbnB1dCgpIGJydXNoU2NhbGU/OiBhbnk7XG5cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnpvb21hYmxlJykgcHJpdmF0ZSB6b29tYWJsZSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2VsZW1lbnQ6IGQzLlNlbGVjdGlvbjxTVkdFbGVtZW50LCBhbnksIGFueSwgYW55PjtcbiAgcHJpdmF0ZSB6b29tQXhpczogQXhpcztcbiAgcHJpdmF0ZSB6b29tOiBab29tQmVoYXZpb3I8YW55LCBhbnk+O1xuICBwcml2YXRlIGFsaXZlID0gdHJ1ZTtcblxuICBwcml2YXRlIGN1cnJlbnRUcmFuc2Zvcm0gPSB6b29tSWRlbnRpdHk7XG4gIHByaXZhdGUgY3VycmVudFNlbGVjdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSB6b29tU2VydmljZTogWm9vbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBicm9hZGNhc3RTZXJ2aWNlOiBCcm9hZGNhc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhcnRTZXJ2aWNlOiBDaGFydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmVcbiAgKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5heGlzPy5vcHRpb25zPy56b29tIHx8IHRoaXMuY29uZmlnPy56b29tPy5lbmFibGUpIHtcbiAgICAgIHRoaXMuem9vbWFibGUgPSB0aGlzLmNvbmZpZz8uem9vbT8uem9vbUJlaGF2aW9yID09PSBab29tQmVoYXZpb3JUeXBlLm1vdmU7XG4gICAgfVxuICB9XG5cblxuICB6b29tZWQgPSAoZXZlbnQ6IEQzWm9vbUV2ZW50PGFueSwgYW55PikgPT4ge1xuXG4gICAgaWYgKGV2ZW50LnNvdXJjZUV2ZW50KSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMoZXZlbnQuc291cmNlRXZlbnQpLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50VHJhbnNmb3JtID09PSBldmVudC50cmFuc2Zvcm0gJiYgZXZlbnQudHlwZSAhPT0gJ2VuZCcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcmlnaW4gPSB0aGlzLmJydXNoU2NhbGUuY29weSgpLmRvbWFpbih0aGlzLnpvb21BeGlzLmV4dHJlbWVzKTtcblxuICAgICAgICBsZXQgZG9tYWluID0gdGhpcy5jb25maWcuem9vbT8udHlwZSA9PT0gWm9vbVR5cGUueSA/XG4gICAgICAgICAgZXZlbnQudHJhbnNmb3JtLnJlc2NhbGVZKG9yaWdpbikuZG9tYWluKCkgOlxuICAgICAgICAgIGV2ZW50LnRyYW5zZm9ybS5yZXNjYWxlWChvcmlnaW4pLmRvbWFpbigpO1xuXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXcgWm9vbU1lc3NhZ2Uoe1xuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIGF4aXM6IHRoaXMuem9vbUF4aXMsXG4gICAgICAgICAgYnJ1c2hEb21haW46IGRvbWFpbixcbiAgICAgICAgICBjaGFydElkOiB0aGlzLmNvbmZpZy5pZFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2UuYnJvYWRjYXN0Wm9vbSh7XG4gICAgICAgICAgY2hhbm5lbDogdGhpcy5jb25maWc/Lnpvb20/LnN5bmNDaGFubmVsLFxuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnpvb21TZXJ2aWNlLnNldFpvb20oe1xuICAgICAgICBldmVudCxcbiAgICAgICAgdGFyZ2V0OiB0aGlzLnpvb21BeGlzXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jdXJyZW50VHJhbnNmb3JtID0gZXZlbnQudHJhbnNmb3JtO1xuICAgIH1cbiAgfTtcblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG5cbiAgICBjb25zdCBlbmFibGUgPSB0aGlzLmF4aXM/Lm9wdGlvbnM/Lnpvb20gJiYgdGhpcy5heGlzPy5vcHRpb25zLnZpc2libGUgIT09IGZhbHNlIHx8IHRoaXMuY29uZmlnPy56b29tPy5lbmFibGU7XG5cbiAgICBpZiAoIWVuYWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQgPSBkMy5zZWxlY3QodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuem9vbSA9IGQzXG4gICAgICAuem9vbSgpXG4gICAgICAuZXh0ZW50KFtcbiAgICAgICAgWzAsIDBdLFxuICAgICAgICBbdGhpcy5zaXplLndpZHRoLCB0aGlzLnNpemUuaGVpZ2h0XSxcbiAgICAgIF0pO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLnpvb20/LmxpbWl0VHJhbnNsYXRlQnlEYXRhKSB7XG4gICAgICB0aGlzLnpvb20udHJhbnNsYXRlRXh0ZW50KFtbMCwgMF0sIFt0aGlzLnNpemUud2lkdGgsIHRoaXMuc2l6ZS5oZWlnaHRdXSlcbiAgICB9XG5cblxuICAgIGNvbnN0IGNvbW1vblpvb21BeGlzID0gQXhpcy5jcmVhdGVBeGlzKFxuICAgICAgdGhpcy5jb25maWc/Lnpvb20udHlwZSA9PT0gWm9vbVR5cGUueCA/IEF4aXNPcmllbnRhdGlvbi54IDogQXhpc09yaWVudGF0aW9uLnksXG4gICAgICB0aGlzLmNvbmZpZyxcbiAgICAgIDAsXG4gICAgICB0cnVlXG4gICAgKTtcblxuICAgIHRoaXMuem9vbUF4aXMgPSB0aGlzLmF4aXMgPz8gY29tbW9uWm9vbUF4aXM7XG5cbiAgICBpZiAoZW5hYmxlKSB7XG5cbiAgICAgIGNvbnN0IG1heFpvb20gPSB0aGlzLmNvbmZpZy56b29tPy5tYXggPyAodGhpcy56b29tQXhpcy5leHRyZW1lc1sxXSAtIHRoaXMuem9vbUF4aXMuZXh0cmVtZXNbMF0pIC8gdGhpcy5jb25maWcuem9vbT8ubWF4IDogdGhpcy5jb25maWcuem9vbT8ubGltaXRab29tQnlEYXRhID8gMSA6IDA7XG4gICAgICBjb25zdCBtaW5ab29tID0gdGhpcy5jb25maWcuem9vbT8ubWluID8gKHRoaXMuem9vbUF4aXMuZXh0cmVtZXNbMV0gLSB0aGlzLnpvb21BeGlzLmV4dHJlbWVzWzBdKSAvIHRoaXMuY29uZmlnLnpvb20/Lm1pbiA6IEluZmluaXR5O1xuXG4gICAgICB0aGlzLnpvb20uc2NhbGVFeHRlbnQoW21heFpvb20sIG1pblpvb21dKTtcblxuICAgICAgdGhpcy56b29tLm9uKCdzdGFydCB6b29tIGVuZCcsIHRoaXMuem9vbWVkKVxuICAgICAgdGhpcy5fZWxlbWVudC5jYWxsKHRoaXMuem9vbSkub24oJ2RibGNsaWNrLnpvb20nLCBudWxsKVxuXG5cbiAgICAgIGlmKHRoaXMuY29uZmlnPy56b29tPy56b29tQmVoYXZpb3IgPT09IFpvb21CZWhhdmlvclR5cGUud2hlZWwpIHtcblxuICAgICAgICBsZXQgd2hlZWxpbmc7XG4gICAgICAgIGxldCB0eXBlOiAnc3RhcnQnIHwgJ3pvb20nIHwgJ2VuZCcgPSAnc3RhcnQnO1xuXG4gICAgICAgIGNvbnN0IG9yaWdpbiA9IHRoaXMuYnJ1c2hTY2FsZS5jb3B5KCkuZG9tYWluKHRoaXMuem9vbUF4aXMuZXh0cmVtZXMpO1xuXG4gICAgICAgIHRoaXMuem9vbVxuICAgICAgICAgIC5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5jdHJsS2V5ICYmIGV2ZW50LnR5cGUgPT09ICd3aGVlbCcpXG4gICAgICAgICAgLndoZWVsRGVsdGEoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWx0YSA9IHRoaXMuY29uZmlnPy56b29tLnR5cGUgPT09IFpvb21UeXBlLnggPyAtZXZlbnQuZGVsdGFYIDogLWV2ZW50LmRlbHRhWVxuICAgICAgICAgICAgcmV0dXJuIGRlbHRhICogMC4wMDJcbiAgICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMuX2VsZW1lbnQub24oJ3doZWVsJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIGlmKGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cblxuICAgICAgICAgIGNvbnN0IGVtaXQgPSAodHlwZTogc3RyaW5nKSA9PiB7XG5cbiAgICAgICAgICAgIGxldCB0cmFuc2Zvcm0gPSB6b29tSWRlbnRpdHk7XG4gICAgICAgICAgICBjb25zdCBkZWx0YSA9IHR5cGUgPT09ICdlbmQnID8gMCA6IHRoaXMuY29uZmlnLnpvb20/LnR5cGUgPT09IFpvb21UeXBlLnkgPyBldmVudC5kZWx0YVkgOiBldmVudC5kZWx0YVg7XG5cbiAgICAgICAgICAgIGlmKHRoaXMuY29uZmlnLnpvb20/LnR5cGUgPT09IFpvb21UeXBlLnkpIHtcbiAgICAgICAgICAgICAgdHJhbnNmb3JtID0gdHJhbnNmb3JtLnRyYW5zbGF0ZSgwLCB0aGlzLmN1cnJlbnRUcmFuc2Zvcm0ueSAtIGRlbHRhIC8gMik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKHRoaXMuY29uZmlnLnpvb20/LnR5cGUgPT09IFpvb21UeXBlLngpIHtcbiAgICAgICAgICAgICAgdHJhbnNmb3JtID0gdHJhbnNmb3JtLnRyYW5zbGF0ZSh0aGlzLmN1cnJlbnRUcmFuc2Zvcm0ueCAtIGRlbHRhIC8gMiwgMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybS5zY2FsZSh0aGlzLmN1cnJlbnRUcmFuc2Zvcm0uayk7XG5cbiAgICAgICAgICAgIGxldCBkb21haW4gPSB0aGlzLmNvbmZpZy56b29tPy50eXBlID09PSBab29tVHlwZS55ID9cbiAgICAgICAgICAgICAgdHJhbnNmb3JtLnJlc2NhbGVZKG9yaWdpbikuZG9tYWluKCkgOlxuICAgICAgICAgICAgICB0cmFuc2Zvcm0ucmVzY2FsZVgob3JpZ2luKS5kb21haW4oKTtcblxuXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gbmV3IFpvb21NZXNzYWdlKHtcbiAgICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgICBzb3VyY2VFdmVudDogZXZlbnQsXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYXhpczogdGhpcy56b29tQXhpcyxcbiAgICAgICAgICAgICAgYnJ1c2hEb21haW46IGRvbWFpbixcbiAgICAgICAgICAgICAgY2hhcnRJZDogdGhpcy5jb25maWcuaWRcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnpvb21TZXJ2aWNlLnNldFpvb20oe1xuICAgICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICAgIHNvdXJjZUV2ZW50OiBldmVudCxcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgdHlwZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0YXJnZXQ6IHRoaXMuem9vbUF4aXNcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2UuYnJvYWRjYXN0Wm9vbSh7XG4gICAgICAgICAgICAgIGNoYW5uZWw6IHRoaXMuY29uZmlnPy56b29tPy5zeW5jQ2hhbm5lbCxcbiAgICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50LmNhbGwodGhpcy56b29tLnRyYW5zZm9ybSwgdHJhbnNmb3JtKTtcblxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQod2hlZWxpbmcpO1xuICAgICAgICAgICAgZW1pdCh0eXBlKVxuICAgICAgICAgICAgdHlwZSA9ICd6b29tJztcbiAgICAgICAgICAgIHdoZWVsaW5nID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHR5cGUgPSAnZW5kJztcbiAgICAgICAgICAgICAgZW1pdCh0eXBlKVxuICAgICAgICAgICAgICB0eXBlID0gJ3N0YXJ0JztcbiAgICAgICAgICAgIH0sIDMwMClcbiAgICAgICAgICB9KVxuXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gem9vbSBldmVudHNcbiAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc3Vic2NyaWJlVG9ab29tKHRoaXMuY29uZmlnPy56b29tLnN5bmNDaGFubmVsKS5waXBlKFxuICAgICAgdGFrZVdoaWxlKChfKSA9PiB0aGlzLmFsaXZlKSxcbiAgICAgIGZpbHRlcigobTogSUJyb2FkY2FzdE1lc3NhZ2U8Wm9vbU1lc3NhZ2U+KSA9PiBtLm1lc3NhZ2UuZXZlbnQuc291cmNlRXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50IHx8IG0ubWVzc2FnZS5ldmVudC5zb3VyY2VFdmVudCBpbnN0YW5jZW9mIFdoZWVsRXZlbnQpLFxuICAgICAgZmlsdGVyKChtOiBJQnJvYWRjYXN0TWVzc2FnZTxab29tTWVzc2FnZT4pID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuem9vbUF4aXMuaW5kZXggPT09IG0ubWVzc2FnZT8uYXhpcz8uaW5kZXggJiYgdGhpcy56b29tQXhpcy5vcmllbnRhdGlvbiA9PT0gbS5tZXNzYWdlPy5heGlzPy5vcmllbnRhdGlvbjtcbiAgICAgIH0pLFxuICAgICAgdGFwKChtOiBJQnJvYWRjYXN0TWVzc2FnZTxab29tTWVzc2FnZT4pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmlkICE9PSBtLm1lc3NhZ2UuY2hhcnRJZCkge1xuICAgICAgICAgIHRoaXMuX2VsZW1lbnQuY2FsbCh0aGlzLnpvb20udHJhbnNmb3JtLCBtLm1lc3NhZ2UuZXZlbnQudHJhbnNmb3JtLCBudWxsLCB7fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG0ubWVzc2FnZS5heGlzLmlzRmFrZSAmJiAhdGhpcy56b29tQXhpcy5pc0Zha2UgfHwgIW0ubWVzc2FnZS5heGlzLmlzRmFrZSAmJiB0aGlzLnpvb21BeGlzLmlzRmFrZSkge1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5jYWxsKHRoaXMuem9vbS50cmFuc2Zvcm0sIG0ubWVzc2FnZS5ldmVudC50cmFuc2Zvcm0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApLnN1YnNjcmliZSgpO1xuXG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gYnJ1c2ggZXZlbnRzIHggb3IgeVxuXG4gICAgaWYgKCh0aGlzLmNvbmZpZy5icnVzaD8udHlwZSA9PT0gQnJ1c2hUeXBlLnggJiYgdGhpcy56b29tQXhpcy5vcmllbnRhdGlvbiA9PT0gQXhpc09yaWVudGF0aW9uLngpIHx8XG4gICAgICAodGhpcy5jb25maWcuYnJ1c2g/LnR5cGUgPT09IEJydXNoVHlwZS55ICYmIHRoaXMuem9vbUF4aXMub3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi55KSkge1xuXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc3Vic2NyaWJlVG9CcnVzaCh0aGlzLmNvbmZpZz8uem9vbS5zeW5jQ2hhbm5lbCksIHRoaXMuY2hhcnRTZXJ2aWNlLnNpemVdKS5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKF8pID0+IHRoaXMuYWxpdmUpLFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTUwKSxcbiAgICAgICAgZmlsdGVyKChkYXRhOiBbSUJyb2FkY2FzdE1lc3NhZ2U8QnJ1c2hNZXNzYWdlPiwgRE9NUmVjdF0pID0+IEJvb2xlYW4oZGF0YVswXS5tZXNzYWdlLnNlbGVjdGlvbikpLFxuICAgICAgICB0YXAoKGRhdGE6IFtJQnJvYWRjYXN0TWVzc2FnZTxCcnVzaE1lc3NhZ2U+LCBET01SZWN0XSkgPT4ge1xuXG4gICAgICAgICAgY29uc3QgW21dID0gZGF0YTtcblxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmFuc2Zvcm0gPSBkMy56b29tVHJhbnNmb3JtKFxuICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5ub2RlKClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKCFtLm1lc3NhZ2UuZXZlbnQgJiYgdGhpcy5jdXJyZW50U2VsZWN0aW9uICYmIGN1cnJlbnRUcmFuc2Zvcm0uayAhPT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY3VycmVudFNlbGVjdGlvbiA9IG0ubWVzc2FnZS5zZWxlY3Rpb247XG5cblxuICAgICAgICAgIHRoaXMudXBkYXRlWm9vbShtKTtcblxuICAgICAgICB9KSxcbiAgICAgICkuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnpvb20/Lm9uKCdzdGFydCB6b29tIGVuZCcsIG51bGwpO1xuICAgIHRoaXMuX2VsZW1lbnQ/Lm9uKCd3aGVlbCcsIG51bGwpO1xuXG4gICAgdGhpcy5hbGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVab29tKG06IElCcm9hZGNhc3RNZXNzYWdlPEJydXNoTWVzc2FnZT4pIHtcblxuICAgIGNvbnN0IHMgPSBtLm1lc3NhZ2Uuc2VsZWN0aW9uO1xuICAgIHRoaXMuYnJ1c2hTY2FsZS5kb21haW4odGhpcy56b29tQXhpcy5leHRyZW1lcyk7XG4gICAgY29uc3QgZG9tYWluID0gdGhpcy5icnVzaFNjYWxlLmRvbWFpbigpO1xuXG4gICAgY29uc3Qgc2NhbGUgPSAoZG9tYWluWzFdIC0gZG9tYWluWzBdKSAvIChzWzFdIC0gc1swXSk7XG5cbiAgICBsZXQgdHJhbnNmb3JtID0gem9vbUlkZW50aXR5LnNjYWxlKHNjYWxlKTtcblxuICAgIGlmIChtLm1lc3NhZ2U/LmJydXNoVHlwZSA9PT0gQnJ1c2hUeXBlLngpIHtcbiAgICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybS50cmFuc2xhdGUoLXRoaXMuYnJ1c2hTY2FsZShzWzBdKSwgMCk7XG4gICAgfVxuICAgIGlmIChtLm1lc3NhZ2U/LmJydXNoVHlwZSA9PT0gQnJ1c2hUeXBlLnkpIHtcbiAgICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybS50cmFuc2xhdGUoMCwgLXRoaXMuYnJ1c2hTY2FsZShzWzBdKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5jYWxsKFxuICAgICAgdGhpcy56b29tLnRyYW5zZm9ybSxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIG51bGwsXG4gICAgICB7fVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9vbWFibGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2RpcmVjdGl2ZXMvem9vbWFibGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsV0FBVyxFQUNYLEtBQUssR0FHTixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDekMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxFQUE2QixZQUFZLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBR0wsV0FBVyxHQUNaLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJELE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUEwQixNQUFNLGdCQUFnQixDQUFDO0FBQzNFLE9BQU8sRUFFTCxhQUFhLEVBQ2IsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7OztBQUtwRSxNQUFNLE9BQU8saUJBQWlCO0lBaUI1QixZQUNVLFVBQXNCLEVBQ3RCLFdBQXdCLEVBQ3hCLGdCQUFrQyxFQUNsQyxZQUEwQixFQUMxQixJQUFZO1FBSlosZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLFNBQUksR0FBSixJQUFJLENBQVE7UUFoQmlC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QUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM1RDtRQUNELElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxTQUFTLEtBQUssU0FBUyxDQUFDLENBQUMsRUFBRTtZQUN4QyxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUQ7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELENBQUM7OzhHQS9VVSxpQkFBaUI7a0dBQWpCLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQUg3QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7aUJBQzNCOzBNQUVVLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRWlDLFFBQVE7c0JBQTlDLFdBQVc7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFpvb21TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS96b29tLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUNoYXJ0Q29uZmlnIH0gZnJvbSAnLi4vbW9kZWwvaS1jaGFydC1jb25maWcnO1xuaW1wb3J0IHsgQXhpcyB9IGZyb20gJy4uL2NvcmUvYXhpcy9heGlzJztcbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcbmltcG9ydCB7IEQzWm9vbUV2ZW50LCBab29tQmVoYXZpb3IsIHpvb21JZGVudGl0eSB9IGZyb20gJ2QzJztcbmltcG9ydCB7IFpvb21UeXBlIH0gZnJvbSAnLi4vbW9kZWwvZW51bS96b29tLXR5cGUnO1xuaW1wb3J0IHsgQXhpc09yaWVudGF0aW9uIH0gZnJvbSAnLi4vbW9kZWwvZW51bS9heGlzLW9yaWVudGF0aW9uJztcbmltcG9ydCB7XG4gIEJydXNoTWVzc2FnZSxcbiAgSUJyb2FkY2FzdE1lc3NhZ2UsXG4gIFpvb21NZXNzYWdlLFxufSBmcm9tICcuLi9tb2RlbC9pLWJyb2FkY2FzdC1tZXNzYWdlJztcbmltcG9ydCB7IEJydXNoVHlwZSB9IGZyb20gJy4uL21vZGVsL2VudW0vYnJ1c2gtdHlwZSc7XG5pbXBvcnQgeyBCcm9hZGNhc3RTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9icm9hZGNhc3Quc2VydmljZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRhcCwgdGhyb3R0bGUsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLFxuICBjb21iaW5lTGF0ZXN0LFxuICBmaWx0ZXIsXG4gIHRha2VXaGlsZSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDaGFydFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL2NoYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgWm9vbUJlaGF2aW9yVHlwZSB9IGZyb20gJy4uL21vZGVsL2VudW0vem9vbS1iZWhhdmlvci10eXBlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3RldGFab29tYWJsZV0nLFxufSlcbmV4cG9ydCBjbGFzcyBab29tYWJsZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIGNvbmZpZzogSUNoYXJ0Q29uZmlnO1xuICBASW5wdXQoKSBheGlzPzogQXhpcztcbiAgQElucHV0KCkgc2l6ZTogRE9NUmVjdDtcbiAgQElucHV0KCkgYnJ1c2hTY2FsZT86IGFueTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnpvb21hYmxlJykgcHJpdmF0ZSB6b29tYWJsZSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2VsZW1lbnQ6IGQzLlNlbGVjdGlvbjxTVkdFbGVtZW50LCBhbnksIGFueSwgYW55PjtcbiAgcHJpdmF0ZSB6b29tQXhpczogQXhpcztcbiAgcHJpdmF0ZSB6b29tOiBab29tQmVoYXZpb3I8YW55LCBhbnk+O1xuICBwcml2YXRlIGFsaXZlID0gdHJ1ZTtcblxuICBwcml2YXRlIGN1cnJlbnRUcmFuc2Zvcm0gPSB6b29tSWRlbnRpdHk7XG4gIHByaXZhdGUgY3VycmVudFNlbGVjdGlvbjtcbiAgcHJpdmF0ZSB3aGVlbElkbGUgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHpvb21TZXJ2aWNlOiBab29tU2VydmljZSxcbiAgICBwcml2YXRlIGJyb2FkY2FzdFNlcnZpY2U6IEJyb2FkY2FzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFydFNlcnZpY2U6IENoYXJ0U2VydmljZSxcbiAgICBwcml2YXRlIHpvbmU6IE5nWm9uZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuYXhpcz8ub3B0aW9ucz8uem9vbSB8fCB0aGlzLmNvbmZpZz8uem9vbT8uZW5hYmxlKSB7XG4gICAgICB0aGlzLnpvb21hYmxlID0gdGhpcy5jb25maWc/Lnpvb20/Lnpvb21CZWhhdmlvciA9PT0gWm9vbUJlaGF2aW9yVHlwZS5tb3ZlO1xuICAgIH1cbiAgfVxuXG4gIHpvb21lZCA9IChldmVudDogRDNab29tRXZlbnQ8YW55LCBhbnk+KSA9PiB7XG4gICAgaWYgKGV2ZW50LnNvdXJjZUV2ZW50KSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMoZXZlbnQuc291cmNlRXZlbnQpLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50VHJhbnNmb3JtID09PSBldmVudC50cmFuc2Zvcm0gJiYgZXZlbnQudHlwZSAhPT0gJ2VuZCcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcmlnaW4gPSB0aGlzLmJydXNoU2NhbGUuY29weSgpLmRvbWFpbih0aGlzLnpvb21BeGlzLmV4dHJlbWVzKTtcblxuICAgICAgICBsZXQgZG9tYWluID1cbiAgICAgICAgICB0aGlzLmNvbmZpZy56b29tPy50eXBlID09PSBab29tVHlwZS55XG4gICAgICAgICAgICA/IGV2ZW50LnRyYW5zZm9ybS5yZXNjYWxlWShvcmlnaW4pLmRvbWFpbigpXG4gICAgICAgICAgICA6IGV2ZW50LnRyYW5zZm9ybS5yZXNjYWxlWChvcmlnaW4pLmRvbWFpbigpO1xuXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXcgWm9vbU1lc3NhZ2Uoe1xuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIGF4aXM6IHRoaXMuem9vbUF4aXMsXG4gICAgICAgICAgYnJ1c2hEb21haW46IGRvbWFpbixcbiAgICAgICAgICBjaGFydElkOiB0aGlzLmNvbmZpZy5pZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLmJyb2FkY2FzdFpvb20oe1xuICAgICAgICAgIGNoYW5uZWw6IHRoaXMuY29uZmlnPy56b29tPy5zeW5jQ2hhbm5lbCxcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy56b29tU2VydmljZS5zZXRab29tKHtcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHRhcmdldDogdGhpcy56b29tQXhpcyxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmN1cnJlbnRUcmFuc2Zvcm0gPSBldmVudC50cmFuc2Zvcm07XG4gICAgfVxuICB9O1xuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBjb25zdCBlbmFibGUgPVxuICAgICAgKHRoaXMuYXhpcz8ub3B0aW9ucz8uem9vbSAmJiB0aGlzLmF4aXM/Lm9wdGlvbnMudmlzaWJsZSAhPT0gZmFsc2UpIHx8XG4gICAgICB0aGlzLmNvbmZpZz8uem9vbT8uZW5hYmxlO1xuXG4gICAgaWYgKCFlbmFibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50ID0gZDMuc2VsZWN0KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnpvb20gPSBkMy56b29tKCkuZXh0ZW50KFtcbiAgICAgIFswLCAwXSxcbiAgICAgIFt0aGlzLnNpemUud2lkdGgsIHRoaXMuc2l6ZS5oZWlnaHRdLFxuICAgIF0pO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLnpvb20/LmxpbWl0VHJhbnNsYXRlQnlEYXRhKSB7XG4gICAgICB0aGlzLnpvb20udHJhbnNsYXRlRXh0ZW50KFtcbiAgICAgICAgWzAsIDBdLFxuICAgICAgICBbdGhpcy5zaXplLndpZHRoLCB0aGlzLnNpemUuaGVpZ2h0XSxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbW1vblpvb21BeGlzID0gQXhpcy5jcmVhdGVBeGlzKFxuICAgICAgdGhpcy5jb25maWc/Lnpvb20udHlwZSA9PT0gWm9vbVR5cGUueFxuICAgICAgICA/IEF4aXNPcmllbnRhdGlvbi54XG4gICAgICAgIDogQXhpc09yaWVudGF0aW9uLnksXG4gICAgICB0aGlzLmNvbmZpZyxcbiAgICAgIDAsXG4gICAgICB0cnVlXG4gICAgKTtcblxuICAgIHRoaXMuem9vbUF4aXMgPSB0aGlzLmF4aXMgPz8gY29tbW9uWm9vbUF4aXM7XG5cbiAgICBpZiAoZW5hYmxlKSB7XG4gICAgICBjb25zdCBtYXhab29tID0gdGhpcy5jb25maWcuem9vbT8ubWF4XG4gICAgICAgID8gKHRoaXMuem9vbUF4aXMuZXh0cmVtZXNbMV0gLSB0aGlzLnpvb21BeGlzLmV4dHJlbWVzWzBdKSAvXG4gICAgICAgICAgdGhpcy5jb25maWcuem9vbT8ubWF4XG4gICAgICAgIDogdGhpcy5jb25maWcuem9vbT8ubGltaXRab29tQnlEYXRhXG4gICAgICAgID8gMVxuICAgICAgICA6IDA7XG5cbiAgICAgIGNvbnN0IG1pblpvb20gPSB0aGlzLmNvbmZpZy56b29tPy5taW5cbiAgICAgICAgPyAodGhpcy56b29tQXhpcy5leHRyZW1lc1sxXSAtIHRoaXMuem9vbUF4aXMuZXh0cmVtZXNbMF0pIC9cbiAgICAgICAgICB0aGlzLmNvbmZpZy56b29tPy5taW5cbiAgICAgICAgOiBJbmZpbml0eTtcblxuICAgICAgdGhpcy56b29tLnNjYWxlRXh0ZW50KFttYXhab29tLCBtaW5ab29tXSk7XG5cbiAgICAgIHRoaXMuem9vbS5vbignc3RhcnQgem9vbSBlbmQnLCB0aGlzLnpvb21lZCk7XG4gICAgICB0aGlzLl9lbGVtZW50LmNhbGwodGhpcy56b29tKS5vbignZGJsY2xpY2suem9vbScsIG51bGwpO1xuXG4gICAgICBpZiAodGhpcy5jb25maWc/Lnpvb20/Lnpvb21CZWhhdmlvciA9PT0gWm9vbUJlaGF2aW9yVHlwZS53aGVlbCkge1xuICAgICAgICBsZXQgdHlwZTogJ3N0YXJ0JyB8ICd6b29tJyB8ICdlbmQnID0gJ3N0YXJ0JztcbiAgICAgICAgbGV0IHdoZWVsaW5nO1xuXG4gICAgICAgIHRoaXMuem9vbVxuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAoZXZlbnQpID0+XG4gICAgICAgICAgICAgIChldmVudC5jdHJsS2V5ICYmIGV2ZW50LnR5cGUgPT09ICd3aGVlbCcpIHx8XG4gICAgICAgICAgICAgIEJvb2xlYW4od2luZG93LlRvdWNoRXZlbnQpXG4gICAgICAgICAgKVxuICAgICAgICAgIC53aGVlbERlbHRhKChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVsdGEgPVxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZz8uem9vbS50eXBlID09PSBab29tVHlwZS54XG4gICAgICAgICAgICAgICAgPyAtZXZlbnQuZGVsdGFYXG4gICAgICAgICAgICAgICAgOiAtZXZlbnQuZGVsdGFZO1xuICAgICAgICAgICAgcmV0dXJuIGRlbHRhICogMC4wMDI7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZW1pdCA9ICh0eXBlOiBzdHJpbmcsIGV2ZW50OiBXaGVlbEV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luID0gdGhpcy5icnVzaFNjYWxlLmNvcHkoKS5kb21haW4odGhpcy56b29tQXhpcy5leHRyZW1lcyk7XG4gICAgICAgICAgbGV0IHRyYW5zZm9ybSA9IHpvb21JZGVudGl0eTtcbiAgICAgICAgICBjb25zdCBkZWx0YSA9XG4gICAgICAgICAgICB0eXBlID09PSAnZW5kJ1xuICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgOiB0aGlzLmNvbmZpZy56b29tPy50eXBlID09PSBab29tVHlwZS55XG4gICAgICAgICAgICAgID8gZXZlbnQuZGVsdGFZXG4gICAgICAgICAgICAgIDogZXZlbnQuZGVsdGFYO1xuXG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnpvb20/LnR5cGUgPT09IFpvb21UeXBlLnkpIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybS50cmFuc2xhdGUoXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudFRyYW5zZm9ybS55IC0gZGVsdGEgLyAyXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy56b29tPy50eXBlID09PSBab29tVHlwZS54KSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm0udHJhbnNsYXRlKFxuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUcmFuc2Zvcm0ueCAtIGRlbHRhIC8gMixcbiAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm0uc2NhbGUodGhpcy5jdXJyZW50VHJhbnNmb3JtLmspO1xuXG4gICAgICAgICAgbGV0IGRvbWFpbiA9XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy56b29tPy50eXBlID09PSBab29tVHlwZS55XG4gICAgICAgICAgICAgID8gdHJhbnNmb3JtLnJlc2NhbGVZKG9yaWdpbikuZG9tYWluKClcbiAgICAgICAgICAgICAgOiB0cmFuc2Zvcm0ucmVzY2FsZVgob3JpZ2luKS5kb21haW4oKTtcblxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXcgWm9vbU1lc3NhZ2Uoe1xuICAgICAgICAgICAgZXZlbnQ6IHtcbiAgICAgICAgICAgICAgc291cmNlRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXhpczogdGhpcy56b29tQXhpcyxcbiAgICAgICAgICAgIGJydXNoRG9tYWluOiBkb21haW4sXG4gICAgICAgICAgICBjaGFydElkOiB0aGlzLmNvbmZpZy5pZCxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMuem9vbVNlcnZpY2Uuc2V0Wm9vbSh7XG4gICAgICAgICAgICBldmVudDoge1xuICAgICAgICAgICAgICBzb3VyY2VFdmVudDogZXZlbnQsXG4gICAgICAgICAgICAgIHRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0YXJnZXQ6IHRoaXMuem9vbUF4aXMsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLl9lbGVtZW50LmNhbGwodGhpcy56b29tLnRyYW5zZm9ybSwgdHJhbnNmb3JtKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG5cbiAgICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2UuYnJvYWRjYXN0Wm9vbSh7XG4gICAgICAgICAgICBjaGFubmVsOiB0aGlzLmNvbmZpZz8uem9vbT8uc3luY0NoYW5uZWwsXG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX2VsZW1lbnQub24oJ3doZWVsJywgKGV2ZW50OiBXaGVlbEV2ZW50KSA9PiB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh3aGVlbGluZyk7XG4gICAgICAgICAgICBlbWl0KHR5cGUsIGV2ZW50KTtcbiAgICAgICAgICAgIHR5cGUgPSAnem9vbSc7XG5cbiAgICAgICAgICAgIHRoaXMud2hlZWxJZGxlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHdoZWVsaW5nID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHR5cGUgPSAnZW5kJztcbiAgICAgICAgICAgICAgZW1pdCh0eXBlLCBldmVudCk7XG4gICAgICAgICAgICAgIHRoaXMud2hlZWxJZGxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdHlwZSA9ICdzdGFydCc7XG4gICAgICAgICAgICB9LCAxNTApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gem9vbSBldmVudHNcbiAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2VcbiAgICAgIC5zdWJzY3JpYmVUb1pvb20odGhpcy5jb25maWc/Lnpvb20uc3luY0NoYW5uZWwpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVdoaWxlKChfKSA9PiB0aGlzLmFsaXZlKSxcbiAgICAgICAgZmlsdGVyKFxuICAgICAgICAgIChtOiBJQnJvYWRjYXN0TWVzc2FnZTxab29tTWVzc2FnZT4pID0+XG4gICAgICAgICAgICBtLm1lc3NhZ2UuZXZlbnQuc291cmNlRXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50IHx8XG4gICAgICAgICAgICBtLm1lc3NhZ2UuZXZlbnQuc291cmNlRXZlbnQgaW5zdGFuY2VvZiBXaGVlbEV2ZW50IHx8XG4gICAgICAgICAgICAod2luZG93LlRvdWNoRXZlbnQgJiZcbiAgICAgICAgICAgICAgbS5tZXNzYWdlLmV2ZW50LnNvdXJjZUV2ZW50IGluc3RhbmNlb2YgVG91Y2hFdmVudClcbiAgICAgICAgKSxcbiAgICAgICAgZmlsdGVyKChtOiBJQnJvYWRjYXN0TWVzc2FnZTxab29tTWVzc2FnZT4pID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy56b29tQXhpcy5pbmRleCA9PT0gbS5tZXNzYWdlPy5heGlzPy5pbmRleCAmJlxuICAgICAgICAgICAgdGhpcy56b29tQXhpcy5vcmllbnRhdGlvbiA9PT0gbS5tZXNzYWdlPy5heGlzPy5vcmllbnRhdGlvblxuICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKG06IElCcm9hZGNhc3RNZXNzYWdlPFpvb21NZXNzYWdlPikgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5pZCAhPT0gbS5tZXNzYWdlLmNoYXJ0SWQpIHtcbiAgICAgICAgICAgIHRoaXMud2hlZWxJZGxlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChtLm1lc3NhZ2UuZXZlbnQudHlwZSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgICAgICAgdGhpcy53aGVlbElkbGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50LmNhbGwoXG4gICAgICAgICAgICAgIHRoaXMuem9vbS50cmFuc2Zvcm0sXG4gICAgICAgICAgICAgIG0ubWVzc2FnZS5ldmVudC50cmFuc2Zvcm0sXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIChtLm1lc3NhZ2UuYXhpcy5pc0Zha2UgJiYgIXRoaXMuem9vbUF4aXMuaXNGYWtlKSB8fFxuICAgICAgICAgICAgICAoIW0ubWVzc2FnZS5heGlzLmlzRmFrZSAmJiB0aGlzLnpvb21BeGlzLmlzRmFrZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50LmNhbGwoXG4gICAgICAgICAgICAgICAgdGhpcy56b29tLnRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICBtLm1lc3NhZ2UuZXZlbnQudHJhbnNmb3JtXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgLy8gU3Vic2NyaWJlIHRvIGJydXNoIGV2ZW50cyB4IG9yIHlcblxuICAgIGlmIChcbiAgICAgICh0aGlzLmNvbmZpZy5icnVzaD8udHlwZSA9PT0gQnJ1c2hUeXBlLnggJiZcbiAgICAgICAgdGhpcy56b29tQXhpcy5vcmllbnRhdGlvbiA9PT0gQXhpc09yaWVudGF0aW9uLngpIHx8XG4gICAgICAodGhpcy5jb25maWcuYnJ1c2g/LnR5cGUgPT09IEJydXNoVHlwZS55ICYmXG4gICAgICAgIHRoaXMuem9vbUF4aXMub3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi55KVxuICAgICkge1xuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zdWJzY3JpYmVUb0JydXNoKHRoaXMuY29uZmlnPy56b29tLnN5bmNDaGFubmVsKSxcbiAgICAgICAgdGhpcy5jaGFydFNlcnZpY2Uuc2l6ZSxcbiAgICAgIF0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VXaGlsZSgoXykgPT4gdGhpcy5hbGl2ZSksXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDE1MCksXG4gICAgICAgICAgZmlsdGVyKChkYXRhOiBbSUJyb2FkY2FzdE1lc3NhZ2U8QnJ1c2hNZXNzYWdlPiwgRE9NUmVjdF0pID0+XG4gICAgICAgICAgICBCb29sZWFuKGRhdGFbMF0ubWVzc2FnZS5zZWxlY3Rpb24pXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0YXAoKGRhdGE6IFtJQnJvYWRjYXN0TWVzc2FnZTxCcnVzaE1lc3NhZ2U+LCBET01SZWN0XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgW21dID0gZGF0YTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLndoZWVsSWRsZSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmFuc2Zvcm0gPSBkMy56b29tVHJhbnNmb3JtKHRoaXMuX2VsZW1lbnQubm9kZSgpKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhbS5tZXNzYWdlLmV2ZW50ICYmXG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudFNlbGVjdGlvbiAmJlxuICAgICAgICAgICAgICBjdXJyZW50VHJhbnNmb3JtLmsgIT09IDFcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlWm9vbShtKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNlbGVjdGlvbiA9IG0ubWVzc2FnZS5zZWxlY3Rpb247XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy56b29tPy5vbignc3RhcnQgem9vbSBlbmQnLCBudWxsKTtcbiAgICB0aGlzLl9lbGVtZW50Py5vbignd2hlZWwnLCBudWxsKTtcblxuICAgIHRoaXMuYWxpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlWm9vbShtOiBJQnJvYWRjYXN0TWVzc2FnZTxCcnVzaE1lc3NhZ2U+KSB7XG4gICAgY29uc3QgcyA9IG0ubWVzc2FnZS5zZWxlY3Rpb247XG4gICAgdGhpcy5icnVzaFNjYWxlLmRvbWFpbih0aGlzLnpvb21BeGlzLmV4dHJlbWVzKTtcbiAgICBjb25zdCBkb21haW4gPSB0aGlzLmJydXNoU2NhbGUuZG9tYWluKCk7XG5cbiAgICBjb25zdCBzY2FsZSA9IChkb21haW5bMV0gLSBkb21haW5bMF0pIC8gKHNbMV0gLSBzWzBdKTtcblxuICAgIGxldCB0cmFuc2Zvcm0gPSB6b29tSWRlbnRpdHkuc2NhbGUoc2NhbGUpO1xuXG4gICAgaWYgKG0ubWVzc2FnZT8uYnJ1c2hUeXBlID09PSBCcnVzaFR5cGUueCkge1xuICAgICAgdHJhbnNmb3JtID0gdHJhbnNmb3JtLnRyYW5zbGF0ZSgtdGhpcy5icnVzaFNjYWxlKHNbMF0pLCAwKTtcbiAgICB9XG4gICAgaWYgKG0ubWVzc2FnZT8uYnJ1c2hUeXBlID09PSBCcnVzaFR5cGUueSkge1xuICAgICAgdHJhbnNmb3JtID0gdHJhbnNmb3JtLnRyYW5zbGF0ZSgwLCAtdGhpcy5icnVzaFNjYWxlKHNbMF0pKTtcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50LmNhbGwodGhpcy56b29tLnRyYW5zZm9ybSwgdHJhbnNmb3JtLCBudWxsLCB7fSk7XG4gIH1cbn1cbiJdfQ==
@@ -103,6 +103,7 @@ export class ChartService {
103
103
  config.series = config.series.map((_, index) => {
104
104
  return {
105
105
  ..._,
106
+ data: _.data ?? [],
106
107
  id: _.id ?? index,
107
108
  };
108
109
  });
@@ -123,6 +124,7 @@ export class ChartService {
123
124
  config.bounds.right = 0;
124
125
  }
125
126
  config.tooltip = Object.assign({}, defaultChartConfig().tooltip, config.tooltip);
127
+ config.zoom = Object.assign({}, defaultChartConfig().zoom, config.zoom);
126
128
  config.zoom.syncChannel = config.zoom?.syncChannel ?? id;
127
129
  return config;
128
130
  }
@@ -166,4 +168,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
166
168
  providedIn: 'root',
167
169
  }]
168
170
  }], ctorParameters: function () { return []; } });
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9zZXJ2aWNlL2NoYXJ0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLE1BQU0sRUFDTixHQUFHLEVBRUgsRUFBRSxFQUNGLFdBQVcsRUFDWCxPQUFPLEVBQ1AsY0FBYyxHQUNmLE1BQU0sTUFBTSxDQUFDO0FBTWQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7O0FBUXZFLE1BQU0sT0FBTyxZQUFZO0lBOEJ2QjtRQWRRLFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBZSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFDbEUsVUFBSyxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksZUFBZSxFQUFFLENBQUMsQ0FBQztRQUM1RCxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFnQixDQUFDO1FBQzNDLGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FFckMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ0wsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBeUIsQ0FBQztRQUN0RCxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUF5QixDQUFDO1FBQ3JELGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBMkIsQ0FBQztRQUNwRCxnQkFBVyxHQUFHLElBQUksT0FBTyxFQUEwQixDQUFDO1FBQ3BELHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUEwQixDQUFDO1FBQzFELHFCQUFnQixHQUFHLElBQUksT0FBTyxFQUEyQixDQUFDO1FBQzFELG9CQUFlLEdBQUcsSUFBSSxPQUFP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O29CQUNKLENBQUMsQ0FBQztpQkFDSCxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELElBQUksTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7WUFDekIsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEUsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDakU7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOzt5R0F2TlUsWUFBWTs2R0FBWixZQUFZLGNBRlgsTUFBTTsyRkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElDaGFydENvbmZpZyB9IGZyb20gJy4uL21vZGVsL2ktY2hhcnQtY29uZmlnJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgZmlsdGVyLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBzaGFyZVJlcGxheSxcbiAgU3ViamVjdCxcbiAgd2l0aExhdGVzdEZyb20sXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSUNoYXJ0RXZlbnQgfSBmcm9tICcuLi9tb2RlbC9pLWNoYXJ0LWV2ZW50JztcbmltcG9ydCB7IElEaXNwbGF5VG9vbHRpcCB9IGZyb20gJy4uL21vZGVsL2ktZGlzcGxheS10b29sdGlwJztcbmltcG9ydCB7IFBsb3RCYW5kIH0gZnJvbSAnLi4vbW9kZWwvcGxvdC1iYW5kJztcbmltcG9ydCB7IFBsb3RMaW5lIH0gZnJvbSAnLi4vbW9kZWwvcGxvdC1saW5lJztcbmltcG9ydCB7IElQb2ludE1vdmUgfSBmcm9tICcuLi9tb2RlbC9pLXBvaW50LW1vdmUnO1xuaW1wb3J0IHsgZGVmYXVsdENoYXJ0Q29uZmlnIH0gZnJvbSAnLi4vZGVmYXVsdC9kZWZhdWx0LWNoYXJ0LWNvbmZpZyc7XG5pbXBvcnQgeyBkZWZhdWx0QXhpc0NvbmZpZyB9IGZyb20gJy4uL2RlZmF1bHQvZGVmYXVsdC1heGlzLWNvbmZpZyc7XG5pbXBvcnQgeyBkZWZhdWx0U2VyaWVzQ29uZmlnIH0gZnJvbSAnLi4vZGVmYXVsdC9kZWZhdWx0LXNlcmllcy1jb25maWcnO1xuaW1wb3J0IHsgQmFzZVBvaW50IH0gZnJvbSAnLi4vbW9kZWwvYmFzZS1wb2ludCc7XG5pbXBvcnQgeyBTZXJpZXMgfSBmcm9tICcuLi9tb2RlbC9zZXJpZXMnO1xuaW1wb3J0IHsgQW5ub3RhdGlvbiB9IGZyb20gJy4uL21vZGVsL2Fubm90YXRpb24nO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ2hhcnRTZXJ2aWNlIHtcbiAgcHVibGljIGlkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHB1YmxpYyBjb25maWc6IE9ic2VydmFibGU8SUNoYXJ0Q29uZmlnPjtcbiAgcHVibGljIHNpemU6IE9ic2VydmFibGU8RE9NUmVjdD47XG4gIHB1YmxpYyBwb2ludGVyTW92ZTogT2JzZXJ2YWJsZTxQb2ludGVyRXZlbnQ+O1xuICBwdWJsaWMgdG9vbHRpcHM6IE9ic2VydmFibGU8TWFwPFNlcmllczxCYXNlUG9pbnQ+LCBJRGlzcGxheVRvb2x0aXA+PjtcbiAgcHVibGljIHBsb3RCYW5kRXZlbnQ6IE9ic2VydmFibGU8SUNoYXJ0RXZlbnQ8UGxvdEJhbmQ+PjtcbiAgcHVibGljIHBsb3RMaW5lTW92ZTogT2JzZXJ2YWJsZTxJQ2hhcnRFdmVudDxQbG90TGluZT4+O1xuICBwdWJsaWMgcGxvdEJhbmRDbGljazogT2JzZXJ2YWJsZTxJQ2hhcnRFdmVudDxQbG90QmFuZD4+O1xuICBwdWJsaWMgcGxvdEJhbmRDb250ZXh0TWVudTogT2JzZXJ2YWJsZTxJQ2hhcnRFdmVudDxQbG90QmFuZD4+O1xuICBwdWJsaWMgcG9pbnRNb3ZlOiBPYnNlcnZhYmxlPElDaGFydEV2ZW50PElQb2ludE1vdmU+PjtcbiAgcHVibGljIGFubm90YXRpb25Nb3ZlOiBPYnNlcnZhYmxlPElDaGFydEV2ZW50PEFubm90YXRpb24+PjtcbiAgcHVibGljIGFubm90YXRpb25DbGljazogT2JzZXJ2YWJsZTxJQ2hhcnRFdmVudDxBbm5vdGF0aW9uPj47XG4gIHB1YmxpYyBhbm5vdGF0aW9uQ29udGV4dE1lbnU6IE9ic2VydmFibGU8SUNoYXJ0RXZlbnQ8QW5ub3RhdGlvbj4+O1xuICBwdWJsaWMgY2hhcnRDbGljazogT2JzZXJ2YWJsZTxJQ2hhcnRFdmVudDxCYXNlUG9pbnQ+PjtcbiAgcHVibGljIGNoYXJ0Q29udGV4dE1lbnU6IE9ic2VydmFibGU8SUNoYXJ0RXZlbnQ8QmFzZVBvaW50Pj47XG4gIHByaXZhdGUgY29uZmlnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUNoYXJ0Q29uZmlnPihkZWZhdWx0Q2hhcnRDb25maWcoKSk7XG4gIHByaXZhdGUgc2l6ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERPTVJlY3Q+KG5ldyBET01SZWN0UmVhZE9ubHkoKSk7XG4gIHByaXZhdGUgcG9pbnRlck1vdmUkID0gbmV3IFN1YmplY3Q8UG9pbnRlckV2ZW50PigpO1xuICBwcml2YXRlIHRvb2x0aXBzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgTWFwPFNlcmllczxCYXNlUG9pbnQ+LCBJRGlzcGxheVRvb2x0aXA+XG4gID4obmV3IE1hcCgpKTtcbiAgcHJpdmF0ZSBwbG90QmFuZEV2ZW50JCA9IG5ldyBTdWJqZWN0PElDaGFydEV2ZW50PFBsb3RCYW5kPj4oKTtcbiAgcHJpdmF0ZSBwbG90TGluZU1vdmUkID0gbmV3IFN1YmplY3Q8SUNoYXJ0RXZlbnQ8UGxvdExpbmU+PigpO1xuICBwcml2YXRlIHBvaW50TW92ZSQgPSBuZXcgU3ViamVjdDxJQ2hhcnRFdmVudDxJUG9pbnRNb3ZlPj4oKTtcbiAgcHJpdmF0ZSBjaGFydENsaWNrJCA9IG5ldyBTdWJqZWN0PElDaGFydEV2ZW50PEJhc2VQb2ludD4+KCk7XG4gIHByaXZhdGUgY2hhcnRDb250ZXh0TWVudSQgPSBuZXcgU3ViamVjdDxJQ2hhcnRFdmVudDxCYXNlUG9pbnQ+PigpO1xuICBwcml2YXRlIGFubm90YXRpb25FdmVudCQgPSBuZXcgU3ViamVjdDxJQ2hhcnRFdmVudDxBbm5vdGF0aW9uPj4oKTtcbiAgcHJpdmF0ZSBhbm5vdGF0aW9uTW92ZSQgPSBuZXcgU3ViamVjdDxJQ2hhcnRFdmVudDxBbm5vdGF0aW9uPj4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmlkID0gb2YoKERhdGUubm93KCkgKyBNYXRoLnJhbmRvbSgpKS50b1N0cmluZygzNikpO1xuXG4gICAgdGhpcy5jb25maWcgPSB0aGlzLmNvbmZpZyQuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuaWQpLFxuICAgICAgbWFwKHRoaXMuc2V0RGVmYXVsdHMpLFxuICAgICAgbWFwKHRoaXMuc2V0UHJlcGFyYXRpb25EYXRhKSxcbiAgICAgIHNoYXJlUmVwbGF5KHtcbiAgICAgICAgYnVmZmVyU2l6ZTogMSxcbiAgICAgICAgcmVmQ291bnQ6IHRydWUsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnNpemUgPSB0aGlzLnNpemUkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgdGhpcy5wb2ludGVyTW92ZSA9IHRoaXMucG9pbnRlck1vdmUkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMudG9vbHRpcHMgPSB0aGlzLnRvb2x0aXBzJC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnBsb3RCYW5kRXZlbnQgPSB0aGlzLnBsb3RCYW5kRXZlbnQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMucGxvdExpbmVNb3ZlID0gdGhpcy5wbG90TGluZU1vdmUkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMucG9pbnRNb3ZlID0gdGhpcy5wb2ludE1vdmUkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuY2hhcnRDbGljayA9IHRoaXMuY2hhcnRDbGljayQuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5jaGFydENvbnRleHRNZW51ID0gdGhpcy5jaGFydENvbnRleHRNZW51JC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmFubm90YXRpb25DbGljayA9IHRoaXMuYW5ub3RhdGlvbkV2ZW50JFxuICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAucGlwZShmaWx0ZXIoKF8pID0+IF8/LmV2ZW50Py50eXBlID09PSAnY2xpY2snKSk7XG4gICAgdGhpcy5hbm5vdGF0aW9uQ29udGV4dE1lbnUgPSB0aGlzLmFubm90YXRpb25FdmVudCRcbiAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgLnBpcGUoZmlsdGVyKChfKSA9PiBfPy5ldmVudD8udHlwZSA9PT0gJ2NvbnRleHRtZW51JykpO1xuICAgIHRoaXMuYW5ub3RhdGlvbk1vdmUgPSB0aGlzLmFubm90YXRpb25Nb3ZlJC5hc09ic2VydmFibGUoKTtcblxuICAgIHRoaXMucGxvdEJhbmRDbGljayA9IHRoaXMucGxvdEJhbmRFdmVudCRcbiAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgLnBpcGUoZmlsdGVyKChfKSA9PiBfPy5ldmVudD8udHlwZSA9PT0gJ2NsaWNrJykpO1xuICAgIHRoaXMucGxvdEJhbmRDb250ZXh0TWVudSA9IHRoaXMucGxvdEJhbmRFdmVudCRcbiAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgLnBpcGUoZmlsdGVyKChfKSA9PiBfPy5ldmVudD8udHlwZSA9PT0gJ2NvbnRleHRtZW51JykpO1xuICB9XG5cbiAgcHVibGljIHNldENvbmZpZyhjb25maWc6IElDaGFydENvbmZpZykge1xuICAgIHRoaXMuY2xlYXJUb29sdGlwcygpO1xuICAgIHRoaXMuY29uZmlnJC5uZXh0KGNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgc2V0U2l6ZShzaXplOiBET01SZWN0KSB7XG4gICAgdGhpcy5zaXplJC5uZXh0KHNpemUpO1xuICB9XG5cbiAgcHVibGljIHNldFBvaW50ZXJNb3ZlKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICB0aGlzLnBvaW50ZXJNb3ZlJC5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRUb29sdGlwKHRvb2x0aXA6IElEaXNwbGF5VG9vbHRpcCkge1xuICAgIGNvbnN0IGN1cnJlbnRUb29sdGlwcyA9IHRoaXMudG9vbHRpcHMkLnZhbHVlO1xuICAgIGlmICghdG9vbHRpcC5wb2ludCkge1xuICAgICAgY3VycmVudFRvb2x0aXBzLmRlbGV0ZSh0b29sdGlwLnNlcmllcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRUb29sdGlwcy5zZXQodG9vbHRpcC5zZXJpZXMsIHRvb2x0aXApO1xuICAgIH1cbiAgICB0aGlzLnRvb2x0aXBzJC5uZXh0KFxuICAgICAgbmV3IE1hcDxTZXJpZXM8QmFzZVBvaW50PiwgSURpc3BsYXlUb29sdGlwPihjdXJyZW50VG9vbHRpcHMpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhclRvb2x0aXBzKCkge1xuICAgIHRoaXMudG9vbHRpcHMkLm5leHQobmV3IE1hcCgpKTtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0TW92ZUFubm90YXRpb24oZXZlbnQ6IElDaGFydEV2ZW50PEFubm90YXRpb24+KSB7XG4gICAgdGhpcy5hbm5vdGF0aW9uTW92ZSQubmV4dChldmVudCk7XG4gIH1cblxuICBwdWJsaWMgZW1pdEFubm90YXRpb24oZXZlbnQ6IElDaGFydEV2ZW50PEFubm90YXRpb24+KSB7XG4gICAgdGhpcy5hbm5vdGF0aW9uRXZlbnQkLm5leHQoZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIGVtaXRQbG90YmFuZChldmVudDogSUNoYXJ0RXZlbnQ8UGxvdEJhbmQ+KSB7XG4gICAgdGhpcy5wbG90QmFuZEV2ZW50JC5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0UGxvdGxpbmUoZXZlbnQ6IElDaGFydEV2ZW50PFBsb3RMaW5lPikge1xuICAgIHRoaXMucGxvdExpbmVNb3ZlJC5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0UG9pbnQoZXZlbnQ6IElDaGFydEV2ZW50PElQb2ludE1vdmU+KSB7XG4gICAgdGhpcy5wb2ludE1vdmUkLm5leHQoZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIGVtaXRDaGFydENsaWNrKGV2ZW50OiBJQ2hhcnRFdmVudDxCYXNlUG9pbnQ+KSB7XG4gICAgdGhpcy5jaGFydENsaWNrJC5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0Q2hhcnRDb250ZXh0TWVudShldmVudDogSUNoYXJ0RXZlbnQ8QmFzZVBvaW50Pikge1xuICAgIHRoaXMuY2hhcnRDb250ZXh0TWVudSQubmV4dChldmVudCk7XG4gIH1cblxuICBwcml2YXRlIHNldERlZmF1bHRzKGRhdGE6IFtJQ2hhcnRDb25maWcsIHN0cmluZ10pOiBJQ2hhcnRDb25maWcge1xuICAgIGxldCBbY29uZmlnLCBpZF0gPSBkYXRhO1xuXG4gICAgY29uc3QgZGVmYXVsdENvbmZpZyA9IChkZWZhdWx0Q29uZmlnKSA9PiB7XG4gICAgICByZXR1cm4gKHNvdXJjZSkgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdENvbmZpZywgc291cmNlKTtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRDaGFydENvbmZpZygpLCBjb25maWcpO1xuICAgIGNvbmZpZy5pZCA9IGlkO1xuXG4gICAgY29uZmlnLnhBeGlzID0gY29uZmlnLnhBeGlzLm1hcChkZWZhdWx0Q29uZmlnKGRlZmF1bHRBeGlzQ29uZmlnKSk7XG4gICAgY29uZmlnLnlBeGlzID0gY29uZmlnLnlBeGlzLm1hcChkZWZhdWx0Q29uZmlnKGRlZmF1bHRBeGlzQ29uZmlnKSk7XG4gICAgY29uZmlnLnNlcmllcyA9IGNvbmZpZy5zZXJpZXMubWFwKGRlZmF1bHRDb25maWcoZGVmYXVsdFNlcmllc0NvbmZpZygpKSk7XG5cbiAgICBjb25maWcuc2VyaWVzID0gY29uZmlnLnNlcmllcy5tYXAoKF8sIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5fLFxuICAgICAgICBpZDogXy5pZCA/PyBpbmRleCxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBvcHBvc2l0ZVlDb3VudCA9IGNvbmZpZy55QXhpcz8uZmlsdGVyKChfKSA9PiBfLm9wcG9zaXRlKTtcbiAgICBjb25zdCBvcHBvc2l0ZVhDb3VudCA9IGNvbmZpZy54QXhpcz8uZmlsdGVyKChfKSA9PiBfLm9wcG9zaXRlKTtcblxuICAgIGNvbnN0IG5vbk9wcG9zaXRlWUNvdW50ID0gY29uZmlnLnlBeGlzPy5maWx0ZXIoKF8pID0+ICFfLm9wcG9zaXRlKTtcbiAgICBjb25zdCBub25PcHBvc2l0ZVhDb3VudCA9IGNvbmZpZy54QXhpcz8uZmlsdGVyKChfKSA9PiAhXy5vcHBvc2l0ZSk7XG5cbiAgICBpZiAobm9uT3Bwb3NpdGVYQ291bnQ/Lmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbmZpZy5ib3VuZHMuYm90dG9tID0gMDtcbiAgICB9XG5cbiAgICBpZiAob3Bwb3NpdGVYQ291bnQ/Lmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbmZpZy5ib3VuZHMudG9wID0gMDtcbiAgICB9XG5cbiAgICBpZiAobm9uT3Bwb3NpdGVZQ291bnQ/Lmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbmZpZy5ib3VuZHMubGVmdCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKG9wcG9zaXRlWUNvdW50Py5sZW5ndGggPiAxKSB7XG4gICAgICBjb25maWcuYm91bmRzLnJpZ2h0ID0gMDtcbiAgICB9XG5cbiAgICBjb25maWcudG9vbHRpcCA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIGRlZmF1bHRDaGFydENvbmZpZygpLnRvb2x0aXAsXG4gICAgICBjb25maWcudG9vbHRpcFxuICAgICk7XG5cbiAgICBjb25maWcuem9vbS5zeW5jQ2hhbm5lbCA9IGNvbmZpZy56b29tPy5zeW5jQ2hhbm5lbCA/PyBpZDtcblxuICAgIHJldHVybiBjb25maWc7XG4gIH1cblxuICBwcml2YXRlIHNldFByZXBhcmF0aW9uRGF0YShjb25maWc6IElDaGFydENvbmZpZyk6IElDaGFydENvbmZpZyB7XG4gICAgaWYgKGNvbmZpZy5pbnZlcnRlZCkge1xuICAgICAgY29uc3QgeEF4ZXMgPSBbLi4uY29uZmlnLnhBeGlzXTtcbiAgICAgIGNvbnN0IHlBeGVzID0gWy4uLmNvbmZpZy55QXhpc107XG5cbiAgICAgIGNvbmZpZy54QXhpcyA9IHlBeGVzO1xuICAgICAgY29uZmlnLnlBeGlzID0geEF4ZXM7XG5cbiAgICAgIGNvbmZpZy5zZXJpZXMgPSBjb25maWcuc2VyaWVzPy5tYXAoKHNlcmllKSA9PiB7XG4gICAgICAgIGNvbnN0IHggPSBzZXJpZS54QXhpc0luZGV4O1xuICAgICAgICBjb25zdCB5ID0gc2VyaWUueUF4aXNJbmRleDtcbiAgICAgICAgc2VyaWUueEF4aXNJbmRleCA9IHk7XG4gICAgICAgIHNlcmllLnlBeGlzSW5kZXggPSB4O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnNlcmllLFxuICAgICAgICAgIGRhdGE6IHNlcmllPy5kYXRhPy5tYXAoKHBvaW50KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5wb2ludCxcbiAgICAgICAgICAgICAgeDogcG9pbnQ/LnksXG4gICAgICAgICAgICAgIHk6IHBvaW50Py54LFxuICAgICAgICAgICAgICB4MTogcG9pbnQ/LnkxLFxuICAgICAgICAgICAgICB5MTogcG9pbnQ/LngxLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjb25maWc/LmJydXNoPy5lbmFibGUpIHtcbiAgICAgIGNvbmZpZy55QXhpcyA9IGNvbmZpZy55QXhpcy5tYXAoKF8pID0+ICh7IC4uLl8sIHpvb206IGZhbHNlIH0pKTtcbiAgICAgIGNvbmZpZy54QXhpcyA9IGNvbmZpZy54QXhpcy5tYXAoKF8pID0+ICh7IC4uLl8sIHpvb206IGZhbHNlIH0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG59XG4iXX0=
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9zZXJ2aWNlL2NoYXJ0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLE1BQU0sRUFDTixHQUFHLEVBRUgsRUFBRSxFQUNGLFdBQVcsRUFDWCxPQUFPLEVBQ1AsY0FBYyxHQUNmLE1BQU0sTUFBTSxDQUFDO0FBTWQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7O0FBUXZFLE1BQU0sT0FBTyxZQUFZO0lBOEJ2QjtRQWRRLFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBZSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFDbEUsVUFBSyxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksZUFBZSxFQUFFLENBQUMsQ0FBQztRQUM1RCxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFnQixDQUFDO1FBQzNDLGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FFckMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ0wsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBeUIsQ0FBQztRQUN0RCxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUF5QixDQUFDO1FBQ3JELGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBMkIsQ0FBQztRQUNwRCxnQkFBVyxHQUFHLElBQUksT0FBTyxFQUEwQixDQUFDO1FBQ3BELHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUEwQixDQUFDO1FBQzFELHFCQUFnQixHQUFHLElBQUksT0FBTyxFQUEyQixDQUFDO1FBQzFELG9CQUFlLEdBQUcsSUFBSSxPQUFP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OzRCQUNMLEdBQUcsS0FBSzs0QkFDUixDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7NEJBQ1gsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDOzRCQUNYLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRTs0QkFDYixFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUU7eUJBQ2QsQ0FBQztvQkFDSixDQUFDLENBQUM7aUJBQ0gsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO1lBQ3pCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2pFO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7eUdBOU5VLFlBQVk7NkdBQVosWUFBWSxjQUZYLE1BQU07MkZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJQ2hhcnRDb25maWcgfSBmcm9tICcuLi9tb2RlbC9pLWNoYXJ0LWNvbmZpZyc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgc2hhcmVSZXBsYXksXG4gIFN1YmplY3QsXG4gIHdpdGhMYXRlc3RGcm9tLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElDaGFydEV2ZW50IH0gZnJvbSAnLi4vbW9kZWwvaS1jaGFydC1ldmVudCc7XG5pbXBvcnQgeyBJRGlzcGxheVRvb2x0aXAgfSBmcm9tICcuLi9tb2RlbC9pLWRpc3BsYXktdG9vbHRpcCc7XG5pbXBvcnQgeyBQbG90QmFuZCB9IGZyb20gJy4uL21vZGVsL3Bsb3QtYmFuZCc7XG5pbXBvcnQgeyBQbG90TGluZSB9IGZyb20gJy4uL21vZGVsL3Bsb3QtbGluZSc7XG5pbXBvcnQgeyBJUG9pbnRNb3ZlIH0gZnJvbSAnLi4vbW9kZWwvaS1wb2ludC1tb3ZlJztcbmltcG9ydCB7IGRlZmF1bHRDaGFydENvbmZpZyB9IGZyb20gJy4uL2RlZmF1bHQvZGVmYXVsdC1jaGFydC1jb25maWcnO1xuaW1wb3J0IHsgZGVmYXVsdEF4aXNDb25maWcgfSBmcm9tICcuLi9kZWZhdWx0L2RlZmF1bHQtYXhpcy1jb25maWcnO1xuaW1wb3J0IHsgZGVmYXVsdFNlcmllc0NvbmZpZyB9IGZyb20gJy4uL2RlZmF1bHQvZGVmYXVsdC1zZXJpZXMtY29uZmlnJztcbmltcG9ydCB7IEJhc2VQb2ludCB9IGZyb20gJy4uL21vZGVsL2Jhc2UtcG9pbnQnO1xuaW1wb3J0IHsgU2VyaWVzIH0gZnJvbSAnLi4vbW9kZWwvc2VyaWVzJztcbmltcG9ydCB7IEFubm90YXRpb24gfSBmcm9tICcuLi9tb2RlbC9hbm5vdGF0aW9uJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIENoYXJ0U2VydmljZSB7XG4gIHB1YmxpYyBpZDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBwdWJsaWMgY29uZmlnOiBPYnNlcnZhYmxlPElDaGFydENvbmZpZz47XG4gIHB1YmxpYyBzaXplOiBPYnNlcnZhYmxlPERPTVJlY3Q+O1xuICBwdWJsaWMgcG9pbnRlck1vdmU6IE9ic2VydmFibGU8UG9pbnRlckV2ZW50PjtcbiAgcHVibGljIHRvb2x0aXBzOiBPYnNlcnZhYmxlPE1hcDxTZXJpZXM8QmFzZVBvaW50PiwgSURpc3BsYXlUb29sdGlwPj47XG4gIHB1YmxpYyBwbG90QmFuZEV2ZW50OiBPYnNlcnZhYmxlPElDaGFydEV2ZW50PFBsb3RCYW5kPj47XG4gIHB1YmxpYyBwbG90TGluZU1vdmU6IE9ic2VydmFibGU8SUNoYXJ0RXZlbnQ8UGxvdExpbmU+PjtcbiAgcHVibGljIHBsb3RCYW5kQ2xpY2s6IE9ic2VydmFibGU8SUNoYXJ0RXZlbnQ8UGxvdEJhbmQ+PjtcbiAgcHVibGljIHBsb3RCYW5kQ29udGV4dE1lbnU6IE9ic2VydmFibGU8SUNoYXJ0RXZlbnQ8UGxvdEJhbmQ+PjtcbiAgcHVibGljIHBvaW50TW92ZTogT2JzZXJ2YWJsZTxJQ2hhcnRFdmVudDxJUG9pbnRNb3ZlPj47XG4gIHB1YmxpYyBhbm5vdGF0aW9uTW92ZTogT2JzZXJ2YWJsZTxJQ2hhcnRFdmVudDxBbm5vdGF0aW9uPj47XG4gIHB1YmxpYyBhbm5vdGF0aW9uQ2xpY2s6IE9ic2VydmFibGU8SUNoYXJ0RXZlbnQ8QW5ub3RhdGlvbj4+O1xuICBwdWJsaWMgYW5ub3RhdGlvbkNvbnRleHRNZW51OiBPYnNlcnZhYmxlPElDaGFydEV2ZW50PEFubm90YXRpb24+PjtcbiAgcHVibGljIGNoYXJ0Q2xpY2s6IE9ic2VydmFibGU8SUNoYXJ0RXZlbnQ8QmFzZVBvaW50Pj47XG4gIHB1YmxpYyBjaGFydENvbnRleHRNZW51OiBPYnNlcnZhYmxlPElDaGFydEV2ZW50PEJhc2VQb2ludD4+O1xuICBwcml2YXRlIGNvbmZpZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElDaGFydENvbmZpZz4oZGVmYXVsdENoYXJ0Q29uZmlnKCkpO1xuICBwcml2YXRlIHNpemUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxET01SZWN0PihuZXcgRE9NUmVjdFJlYWRPbmx5KCkpO1xuICBwcml2YXRlIHBvaW50ZXJNb3ZlJCA9IG5ldyBTdWJqZWN0PFBvaW50ZXJFdmVudD4oKTtcbiAgcHJpdmF0ZSB0b29sdGlwcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIE1hcDxTZXJpZXM8QmFzZVBvaW50PiwgSURpc3BsYXlUb29sdGlwPlxuICA+KG5ldyBNYXAoKSk7XG4gIHByaXZhdGUgcGxvdEJhbmRFdmVudCQgPSBuZXcgU3ViamVjdDxJQ2hhcnRFdmVudDxQbG90QmFuZD4+KCk7XG4gIHByaXZhdGUgcGxvdExpbmVNb3ZlJCA9IG5ldyBTdWJqZWN0PElDaGFydEV2ZW50PFBsb3RMaW5lPj4oKTtcbiAgcHJpdmF0ZSBwb2ludE1vdmUkID0gbmV3IFN1YmplY3Q8SUNoYXJ0RXZlbnQ8SVBvaW50TW92ZT4+KCk7XG4gIHByaXZhdGUgY2hhcnRDbGljayQgPSBuZXcgU3ViamVjdDxJQ2hhcnRFdmVudDxCYXNlUG9pbnQ+PigpO1xuICBwcml2YXRlIGNoYXJ0Q29udGV4dE1lbnUkID0gbmV3IFN1YmplY3Q8SUNoYXJ0RXZlbnQ8QmFzZVBvaW50Pj4oKTtcbiAgcHJpdmF0ZSBhbm5vdGF0aW9uRXZlbnQkID0gbmV3IFN1YmplY3Q8SUNoYXJ0RXZlbnQ8QW5ub3RhdGlvbj4+KCk7XG4gIHByaXZhdGUgYW5ub3RhdGlvbk1vdmUkID0gbmV3IFN1YmplY3Q8SUNoYXJ0RXZlbnQ8QW5ub3RhdGlvbj4+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pZCA9IG9mKChEYXRlLm5vdygpICsgTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMzYpKTtcblxuICAgIHRoaXMuY29uZmlnID0gdGhpcy5jb25maWckLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmlkKSxcbiAgICAgIG1hcCh0aGlzLnNldERlZmF1bHRzKSxcbiAgICAgIG1hcCh0aGlzLnNldFByZXBhcmF0aW9uRGF0YSksXG4gICAgICBzaGFyZVJlcGxheSh7XG4gICAgICAgIGJ1ZmZlclNpemU6IDEsXG4gICAgICAgIHJlZkNvdW50OiB0cnVlLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zaXplID0gdGhpcy5zaXplJC5hc09ic2VydmFibGUoKTtcblxuICAgIHRoaXMucG9pbnRlck1vdmUgPSB0aGlzLnBvaW50ZXJNb3ZlJC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnRvb2x0aXBzID0gdGhpcy50b29sdGlwcyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5wbG90QmFuZEV2ZW50ID0gdGhpcy5wbG90QmFuZEV2ZW50JC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnBsb3RMaW5lTW92ZSA9IHRoaXMucGxvdExpbmVNb3ZlJC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnBvaW50TW92ZSA9IHRoaXMucG9pbnRNb3ZlJC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmNoYXJ0Q2xpY2sgPSB0aGlzLmNoYXJ0Q2xpY2skLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuY2hhcnRDb250ZXh0TWVudSA9IHRoaXMuY2hhcnRDb250ZXh0TWVudSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5hbm5vdGF0aW9uQ2xpY2sgPSB0aGlzLmFubm90YXRpb25FdmVudCRcbiAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgLnBpcGUoZmlsdGVyKChfKSA9PiBfPy5ldmVudD8udHlwZSA9PT0gJ2NsaWNrJykpO1xuICAgIHRoaXMuYW5ub3RhdGlvbkNvbnRleHRNZW51ID0gdGhpcy5hbm5vdGF0aW9uRXZlbnQkXG4gICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgIC5waXBlKGZpbHRlcigoXykgPT4gXz8uZXZlbnQ/LnR5cGUgPT09ICdjb250ZXh0bWVudScpKTtcbiAgICB0aGlzLmFubm90YXRpb25Nb3ZlID0gdGhpcy5hbm5vdGF0aW9uTW92ZSQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICB0aGlzLnBsb3RCYW5kQ2xpY2sgPSB0aGlzLnBsb3RCYW5kRXZlbnQkXG4gICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgIC5waXBlKGZpbHRlcigoXykgPT4gXz8uZXZlbnQ/LnR5cGUgPT09ICdjbGljaycpKTtcbiAgICB0aGlzLnBsb3RCYW5kQ29udGV4dE1lbnUgPSB0aGlzLnBsb3RCYW5kRXZlbnQkXG4gICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgIC5waXBlKGZpbHRlcigoXykgPT4gXz8uZXZlbnQ/LnR5cGUgPT09ICdjb250ZXh0bWVudScpKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb25maWcoY29uZmlnOiBJQ2hhcnRDb25maWcpIHtcbiAgICB0aGlzLmNsZWFyVG9vbHRpcHMoKTtcbiAgICB0aGlzLmNvbmZpZyQubmV4dChjb25maWcpO1xuICB9XG5cbiAgcHVibGljIHNldFNpemUoc2l6ZTogRE9NUmVjdCkge1xuICAgIHRoaXMuc2l6ZSQubmV4dChzaXplKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRQb2ludGVyTW92ZShldmVudDogUG9pbnRlckV2ZW50KSB7XG4gICAgdGhpcy5wb2ludGVyTW92ZSQubmV4dChldmVudCk7XG4gIH1cblxuICBwdWJsaWMgc2V0VG9vbHRpcCh0b29sdGlwOiBJRGlzcGxheVRvb2x0aXApIHtcbiAgICBjb25zdCBjdXJyZW50VG9vbHRpcHMgPSB0aGlzLnRvb2x0aXBzJC52YWx1ZTtcbiAgICBpZiAoIXRvb2x0aXAucG9pbnQpIHtcbiAgICAgIGN1cnJlbnRUb29sdGlwcy5kZWxldGUodG9vbHRpcC5zZXJpZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50VG9vbHRpcHMuc2V0KHRvb2x0aXAuc2VyaWVzLCB0b29sdGlwKTtcbiAgICB9XG4gICAgdGhpcy50b29sdGlwcyQubmV4dChcbiAgICAgIG5ldyBNYXA8U2VyaWVzPEJhc2VQb2ludD4sIElEaXNwbGF5VG9vbHRpcD4oY3VycmVudFRvb2x0aXBzKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJUb29sdGlwcygpIHtcbiAgICB0aGlzLnRvb2x0aXBzJC5uZXh0KG5ldyBNYXAoKSk7XG4gIH1cblxuICBwdWJsaWMgZW1pdE1vdmVBbm5vdGF0aW9uKGV2ZW50OiBJQ2hhcnRFdmVudDxBbm5vdGF0aW9uPikge1xuICAgIHRoaXMuYW5ub3RhdGlvbk1vdmUkLm5leHQoZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIGVtaXRBbm5vdGF0aW9uKGV2ZW50OiBJQ2hhcnRFdmVudDxBbm5vdGF0aW9uPikge1xuICAgIHRoaXMuYW5ub3RhdGlvbkV2ZW50JC5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0UGxvdGJhbmQoZXZlbnQ6IElDaGFydEV2ZW50PFBsb3RCYW5kPikge1xuICAgIHRoaXMucGxvdEJhbmRFdmVudCQubmV4dChldmVudCk7XG4gIH1cblxuICBwdWJsaWMgZW1pdFBsb3RsaW5lKGV2ZW50OiBJQ2hhcnRFdmVudDxQbG90TGluZT4pIHtcbiAgICB0aGlzLnBsb3RMaW5lTW92ZSQubmV4dChldmVudCk7XG4gIH1cblxuICBwdWJsaWMgZW1pdFBvaW50KGV2ZW50OiBJQ2hhcnRFdmVudDxJUG9pbnRNb3ZlPikge1xuICAgIHRoaXMucG9pbnRNb3ZlJC5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0Q2hhcnRDbGljayhldmVudDogSUNoYXJ0RXZlbnQ8QmFzZVBvaW50Pikge1xuICAgIHRoaXMuY2hhcnRDbGljayQubmV4dChldmVudCk7XG4gIH1cblxuICBwdWJsaWMgZW1pdENoYXJ0Q29udGV4dE1lbnUoZXZlbnQ6IElDaGFydEV2ZW50PEJhc2VQb2ludD4pIHtcbiAgICB0aGlzLmNoYXJ0Q29udGV4dE1lbnUkLm5leHQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREZWZhdWx0cyhkYXRhOiBbSUNoYXJ0Q29uZmlnLCBzdHJpbmddKTogSUNoYXJ0Q29uZmlnIHtcbiAgICBsZXQgW2NvbmZpZywgaWRdID0gZGF0YTtcblxuICAgIGNvbnN0IGRlZmF1bHRDb25maWcgPSAoZGVmYXVsdENvbmZpZykgPT4ge1xuICAgICAgcmV0dXJuIChzb3VyY2UpID0+IHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRDb25maWcsIHNvdXJjZSk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Q2hhcnRDb25maWcoKSwgY29uZmlnKTtcbiAgICBjb25maWcuaWQgPSBpZDtcblxuICAgIGNvbmZpZy54QXhpcyA9IGNvbmZpZy54QXhpcy5tYXAoZGVmYXVsdENvbmZpZyhkZWZhdWx0QXhpc0NvbmZpZykpO1xuICAgIGNvbmZpZy55QXhpcyA9IGNvbmZpZy55QXhpcy5tYXAoZGVmYXVsdENvbmZpZyhkZWZhdWx0QXhpc0NvbmZpZykpO1xuICAgIGNvbmZpZy5zZXJpZXMgPSBjb25maWcuc2VyaWVzLm1hcChkZWZhdWx0Q29uZmlnKGRlZmF1bHRTZXJpZXNDb25maWcoKSkpO1xuXG4gICAgY29uZmlnLnNlcmllcyA9IGNvbmZpZy5zZXJpZXMubWFwKChfLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uXyxcbiAgICAgICAgZGF0YTogXy5kYXRhID8/IFtdLFxuICAgICAgICBpZDogXy5pZCA/PyBpbmRleCxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBvcHBvc2l0ZVlDb3VudCA9IGNvbmZpZy55QXhpcz8uZmlsdGVyKChfKSA9PiBfLm9wcG9zaXRlKTtcbiAgICBjb25zdCBvcHBvc2l0ZVhDb3VudCA9IGNvbmZpZy54QXhpcz8uZmlsdGVyKChfKSA9PiBfLm9wcG9zaXRlKTtcblxuICAgIGNvbnN0IG5vbk9wcG9zaXRlWUNvdW50ID0gY29uZmlnLnlBeGlzPy5maWx0ZXIoKF8pID0+ICFfLm9wcG9zaXRlKTtcbiAgICBjb25zdCBub25PcHBvc2l0ZVhDb3VudCA9IGNvbmZpZy54QXhpcz8uZmlsdGVyKChfKSA9PiAhXy5vcHBvc2l0ZSk7XG5cbiAgICBpZiAobm9uT3Bwb3NpdGVYQ291bnQ/Lmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbmZpZy5ib3VuZHMuYm90dG9tID0gMDtcbiAgICB9XG5cbiAgICBpZiAob3Bwb3NpdGVYQ291bnQ/Lmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbmZpZy5ib3VuZHMudG9wID0gMDtcbiAgICB9XG5cbiAgICBpZiAobm9uT3Bwb3NpdGVZQ291bnQ/Lmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbmZpZy5ib3VuZHMubGVmdCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKG9wcG9zaXRlWUNvdW50Py5sZW5ndGggPiAxKSB7XG4gICAgICBjb25maWcuYm91bmRzLnJpZ2h0ID0gMDtcbiAgICB9XG5cbiAgICBjb25maWcudG9vbHRpcCA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIGRlZmF1bHRDaGFydENvbmZpZygpLnRvb2x0aXAsXG4gICAgICBjb25maWcudG9vbHRpcFxuICAgICk7XG5cbiAgICBjb25maWcuem9vbSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIGRlZmF1bHRDaGFydENvbmZpZygpLnpvb20sXG4gICAgICBjb25maWcuem9vbVxuICAgICk7XG5cbiAgICBjb25maWcuem9vbS5zeW5jQ2hhbm5lbCA9IGNvbmZpZy56b29tPy5zeW5jQ2hhbm5lbCA/PyBpZDtcbiAgICBcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQcmVwYXJhdGlvbkRhdGEoY29uZmlnOiBJQ2hhcnRDb25maWcpOiBJQ2hhcnRDb25maWcge1xuICAgIGlmIChjb25maWcuaW52ZXJ0ZWQpIHtcbiAgICAgIGNvbnN0IHhBeGVzID0gWy4uLmNvbmZpZy54QXhpc107XG4gICAgICBjb25zdCB5QXhlcyA9IFsuLi5jb25maWcueUF4aXNdO1xuXG4gICAgICBjb25maWcueEF4aXMgPSB5QXhlcztcbiAgICAgIGNvbmZpZy55QXhpcyA9IHhBeGVzO1xuXG4gICAgICBjb25maWcuc2VyaWVzID0gY29uZmlnLnNlcmllcz8ubWFwKChzZXJpZSkgPT4ge1xuICAgICAgICBjb25zdCB4ID0gc2VyaWUueEF4aXNJbmRleDtcbiAgICAgICAgY29uc3QgeSA9IHNlcmllLnlBeGlzSW5kZXg7XG4gICAgICAgIHNlcmllLnhBeGlzSW5kZXggPSB5O1xuICAgICAgICBzZXJpZS55QXhpc0luZGV4ID0geDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zZXJpZSxcbiAgICAgICAgICBkYXRhOiBzZXJpZT8uZGF0YT8ubWFwKChwb2ludCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4ucG9pbnQsXG4gICAgICAgICAgICAgIHg6IHBvaW50Py55LFxuICAgICAgICAgICAgICB5OiBwb2ludD8ueCxcbiAgICAgICAgICAgICAgeDE6IHBvaW50Py55MSxcbiAgICAgICAgICAgICAgeTE6IHBvaW50Py54MSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnPy5icnVzaD8uZW5hYmxlKSB7XG4gICAgICBjb25maWcueUF4aXMgPSBjb25maWcueUF4aXMubWFwKChfKSA9PiAoeyAuLi5fLCB6b29tOiBmYWxzZSB9KSk7XG4gICAgICBjb25maWcueEF4aXMgPSBjb25maWcueEF4aXMubWFwKChfKSA9PiAoeyAuLi5fLCB6b29tOiBmYWxzZSB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxufVxuIl19