bbj-screen-widget 2.4.67 → 2.4.69

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 (36) hide show
  1. package/bbj-screen-widget.d.ts +15 -12
  2. package/bbj-screen-widget.metadata.json +1 -1
  3. package/bundles/bbj-screen-widget-core.umd.js +147 -4
  4. package/bundles/bbj-screen-widget-core.umd.js.map +1 -1
  5. package/bundles/bbj-screen-widget-core.umd.min.js +1 -1
  6. package/bundles/bbj-screen-widget-core.umd.min.js.map +1 -1
  7. package/bundles/bbj-screen-widget.umd.js +1313 -205
  8. package/bundles/bbj-screen-widget.umd.js.map +1 -1
  9. package/bundles/bbj-screen-widget.umd.min.js +1 -1
  10. package/bundles/bbj-screen-widget.umd.min.js.map +1 -1
  11. package/core/bbj-screen-widget-core.metadata.json +1 -1
  12. package/core/public_api.d.ts +2 -0
  13. package/core/util/map.util.d.ts +23 -0
  14. package/core/util/scale.util.d.ts +4 -0
  15. package/esm2015/bbj-screen-widget.js +16 -13
  16. package/esm2015/core/public_api.js +3 -1
  17. package/esm2015/core/util/map.util.js +104 -0
  18. package/esm2015/core/util/scale.util.js +33 -0
  19. package/esm2015/lib/custom-baidu-map/custom-baidu-map.component.js +4 -42
  20. package/esm2015/lib/screen-widget.module.js +7 -1
  21. package/esm2015/lib/tianditu/base-layer.js +80 -0
  22. package/esm2015/lib/tianditu/tianditu-marker/tianditu-marker.component.js +666 -0
  23. package/esm2015/lib/tianditu/tianditu.component.js +399 -0
  24. package/esm2015/lib/tianditu/tianditu.module.js +21 -0
  25. package/esm2015/public-api.js +2 -1
  26. package/fesm2015/bbj-screen-widget-core.js +138 -1
  27. package/fesm2015/bbj-screen-widget-core.js.map +1 -1
  28. package/fesm2015/bbj-screen-widget.js +1193 -86
  29. package/fesm2015/bbj-screen-widget.js.map +1 -1
  30. package/lib/custom-baidu-map/custom-baidu-map.component.d.ts +1 -1
  31. package/lib/tianditu/base-layer.d.ts +20 -0
  32. package/lib/tianditu/tianditu-marker/tianditu-marker.component.d.ts +63 -0
  33. package/lib/tianditu/tianditu.component.d.ts +53 -0
  34. package/lib/tianditu/tianditu.module.d.ts +4 -0
  35. package/package.json +1 -1
  36. package/public-api.d.ts +1 -0
@@ -0,0 +1,666 @@
1
+ import { __awaiter, __decorate, __metadata } from "tslib";
2
+ import { Component, EventEmitter, NgZone, ViewChild, } from '@angular/core';
3
+ import { Data, DataOutput, Property, Widget, Event, DataInput } from 'bbj-widget-base';
4
+ import { BaseLayer } from '../base-layer';
5
+ import { FileUrlService } from '../../shared/service/file-url.service';
6
+ import { NzContextMenuService } from 'ng-zorro-antd/dropdown';
7
+ import { getUUID } from '../../shared/util/base.util';
8
+ import { takeUntil } from 'rxjs/operators';
9
+ import { TiandituComponent } from '../tianditu.component';
10
+ const ɵ0 = { type: 'string', title: 'id' }, ɵ1 = { type: 'string', title: 'id' }, ɵ2 = { type: 'string', title: 'id' };
11
+ let TiandituMarkerComponent = class TiandituMarkerComponent extends BaseLayer {
12
+ constructor(parent, zone, fileUrlService, nzContextMenuService) {
13
+ super(parent, zone);
14
+ this.parent = parent;
15
+ this.zone = zone;
16
+ this.fileUrlService = fileUrlService;
17
+ this.nzContextMenuService = nzContextMenuService;
18
+ this.iconUrl = 'assets/img/screen/marker.png';
19
+ this.iconWidth = 20;
20
+ this.iconHeight = 30;
21
+ this.iconOffsetX = 10;
22
+ this.iconOffsetY = 30;
23
+ // @Property('分组', {type: 'string'})
24
+ // group = '';
25
+ this.toCenter = false;
26
+ // @Property('标签底色', { ui: { widget: 'myColor', visibleIf: { showLabel: [true] } } })
27
+ // labelBackground: string;
28
+ this.labelFont = {
29
+ family: '',
30
+ color: '#000000',
31
+ weight: 'normal',
32
+ size: 16,
33
+ space: 0,
34
+ lineHeight: 0,
35
+ };
36
+ // @Property('阴影', { ui: { widget: 'myShadow' } })
37
+ // shadow: any = { color: '', X: 0, Y: 0, Z: 0 };
38
+ this.labelOffsetX = -50;
39
+ this.labelOffsetY = 10;
40
+ this.unselectOnClickBlank = true;
41
+ this.groups = [];
42
+ this.data = [
43
+ {
44
+ id: '1',
45
+ address: '',
46
+ information: '暂无信息',
47
+ group: '',
48
+ lng: '120.7',
49
+ lat: '28',
50
+ },
51
+ ];
52
+ // id: string;
53
+ this.makerClick = new EventEmitter();
54
+ this.onClick = new EventEmitter();
55
+ this.layers = [];
56
+ // defaultLayer: any;
57
+ this.optionsMap = {};
58
+ this.dataMap = {};
59
+ }
60
+ ngOnInit() {
61
+ const _super = Object.create(null, {
62
+ ngOnInit: { get: () => super.ngOnInit }
63
+ });
64
+ return __awaiter(this, void 0, void 0, function* () {
65
+ yield _super.ngOnInit.call(this);
66
+ if (this.showLabel && this.showLabelMinZoom != null) {
67
+ this.parent.zoomChange.pipe(takeUntil(this.destroy$)).subscribe((zoom) => {
68
+ this.updateTextVisible(zoom);
69
+ });
70
+ }
71
+ });
72
+ }
73
+ ngOnChanges(changes) {
74
+ if (this.inited) {
75
+ if (changes.data) {
76
+ this.zone.runOutsideAngular(() => {
77
+ this.updateOverlays();
78
+ });
79
+ }
80
+ if (changes.selectedId) {
81
+ if (this.selectedId != this.currentSelectedId) {
82
+ this.select(this.selectedId, { move: true });
83
+ }
84
+ }
85
+ }
86
+ }
87
+ ngOnDestroy() {
88
+ super.ngOnDestroy();
89
+ this.destroy$.next();
90
+ this.destroy$.complete();
91
+ }
92
+ init() {
93
+ var _a;
94
+ this.optionsMap = {};
95
+ const defaultOptions = this.createOptions();
96
+ this.optionsMap[''] = defaultOptions;
97
+ if ((_a = this.groups) === null || _a === void 0 ? void 0 : _a.length) {
98
+ this.groups.forEach((group) => {
99
+ if (group.group) {
100
+ const options = this.createOptions(group);
101
+ this.optionsMap[group.group] = options;
102
+ }
103
+ });
104
+ }
105
+ if (this.unselectOnClickBlank) {
106
+ this.parent.mapClick.pipe(takeUntil(this.destroy$)).subscribe(() => {
107
+ this.selectedId = null;
108
+ this.select(null);
109
+ });
110
+ }
111
+ // if (!this.enableMarkerClusterer && this.showLabel) {
112
+ // const textOptions = {
113
+ // ...this.getTextOptions(this.labelFont),
114
+ // // color: '#fff',
115
+ // // fontFamily: 'Microsoft Yahei',
116
+ // // fontSize: 14,
117
+ // flat: false,
118
+ // collides: true,
119
+ // offset: [this.labelOffsetX || 0, this.labelOffsetY || 0],
120
+ // stroke: {
121
+ // color: this.stroke,
122
+ // },
123
+ // padding: [2, 2],
124
+ // margin: [0, 0],
125
+ // };
126
+ // if (this.stroke && this.stroke !== 'rgba(0,0,0,0)') {
127
+ // textOptions.stroke = { color: this.stroke };
128
+ // }
129
+ // if (this.strokeWidth) {
130
+ // textOptions.lineWidth = this.strokeWidth;
131
+ // }
132
+ // if (this.shadow) {
133
+ // textOptions.shadow = {
134
+ // color: this.shadow.color,
135
+ // blur: this.shadow.Z,
136
+ // offsetX: this.shadow.X,
137
+ // offsetY: this.shadow.Y,
138
+ // };
139
+ // }
140
+ // this.textLayer = new mapvgl.TextLayer(textOptions);
141
+ // if (this.showLabelMinZoom != null) {
142
+ // this.parent.init$.then(() => {
143
+ // const zoom = this.parent.map.getZoom();
144
+ // this.updateTextVisible(zoom);
145
+ // });
146
+ // }
147
+ // layers.push(this.textLayer);
148
+ // }
149
+ }
150
+ createOptions(group) {
151
+ const iconOptions = this.getIconOptions(group);
152
+ return { icon: iconOptions };
153
+ // if (this.enableMarkerClusterer || group?.enableMarkerClusterer) {
154
+ // const options: any = {
155
+ // iconOptions,
156
+ // textOptions: this.getTextOptions(this.clusterFont),
157
+ // minSize: this.clusterMinSize || 25,
158
+ // maxSize: this.clusterMaxSize || 40,
159
+ // };
160
+ // if (this.clusterGradient?.length) {
161
+ // const gradient: any = {};
162
+ // gradient[0] = this.clusterGradient[0];
163
+ // this.clusterGradient.slice(1).forEach((g, i) => {
164
+ // gradient[(i + 1) / this.clusterGradient.length] = g;
165
+ // });
166
+ // options.gradient = gradient;
167
+ // }
168
+ // if (this.clusterMaxZoom != null) {
169
+ // options.maxZoom = this.clusterMaxZoom;
170
+ // }
171
+ // this.addPickEvent(options);
172
+ // layer = new mapvgl.ClusterLayer(options);
173
+ // } else {
174
+ // this.addPickEvent(iconOptions);
175
+ // layer = new mapvgl.IconLayer(iconOptions);
176
+ // }
177
+ }
178
+ updateTextVisible(zoom) {
179
+ if (this.textLayer) {
180
+ if (zoom >= this.showLabelMinZoom) {
181
+ this.textLayer.show();
182
+ }
183
+ else {
184
+ this.textLayer.hide();
185
+ }
186
+ }
187
+ }
188
+ createOverlays() {
189
+ const overlays = [];
190
+ this.dataMap = {};
191
+ if (this.toCenter && this.data.length > 0) {
192
+ let maxLng = -180;
193
+ let minLng = 180;
194
+ let maxLat = -90;
195
+ let minLat = 90;
196
+ this.data.forEach((res) => {
197
+ maxLng = Math.max(maxLng, res.lng);
198
+ minLng = Math.min(minLng, res.lng);
199
+ maxLat = Math.max(maxLat, res.lat);
200
+ minLat = Math.min(minLat, res.lat);
201
+ });
202
+ this.parent.setRectCenterAndZoom(minLng, maxLng, minLat, maxLat);
203
+ }
204
+ const groupData = {};
205
+ this.groupData = groupData;
206
+ const textData = [];
207
+ const groups = Object.keys(this.optionsMap);
208
+ groups.forEach((group) => {
209
+ groupData[group] = [];
210
+ });
211
+ // const defaultData = [];
212
+ this.data.forEach((record) => {
213
+ let groupName = record.group;
214
+ if (groupName == null || this.optionsMap[groupName] == null) {
215
+ groupName = '';
216
+ }
217
+ let id = record.id_value || record.id;
218
+ if (id == null || id == '') {
219
+ id = getUUID();
220
+ }
221
+ // MapVGL的bug,ClusterLayer的iconOptions无效,只能通过properties设置
222
+ const options = this.optionsMap[groupName];
223
+ // if (layer != null && layer instanceof mapvgl.ClusterLayer) {
224
+ // const options = layer.getOptions();
225
+ // if (options.iconOptions) {
226
+ // const { height, width, offset, icon } = options.iconOptions;
227
+ // item.properties = { height, width, offset, icon, ...item.properties };
228
+ // }
229
+ // }
230
+ var point = this.parent.createLngLat(record.lng, record.lat);
231
+ var marker = new T.Marker(point, options); // 创建标注
232
+ marker.addEventListener('click', (e) => {
233
+ this.selectedId = id;
234
+ this.select(id);
235
+ this.zone.run(() => {
236
+ this.onClick.emit(Object.assign(Object.assign({}, record), { id }));
237
+ });
238
+ if (record.information) {
239
+ this.openInfo(record.information, e);
240
+ }
241
+ });
242
+ overlays.push(marker);
243
+ if (this.showLabel && record.address) {
244
+ const label = new T.Label({
245
+ text: `${record.address}`,
246
+ position: marker.getLngLat(),
247
+ offset: new T.Point(this.labelOffsetX || -50, this.labelOffsetY || 10),
248
+ });
249
+ label.setBorderLine(this.strokeWidth || 0);
250
+ label.setBorderColor(this.stroke);
251
+ label.setBackgroundColor('rgba(0,0,0,0)');
252
+ label.setFontColor(this.labelFont.color);
253
+ label.setFontSize(this.labelFont.size);
254
+ overlays.push(label);
255
+ }
256
+ // if (this.selectedId && this.selectedId == id) {
257
+ // this.updateSize(item, 1.5);
258
+ // this.lastSelect = item;
259
+ // }
260
+ groupData[groupName].push(record);
261
+ this.dataMap[id] = record;
262
+ if (this.textLayer) {
263
+ textData.push(record);
264
+ }
265
+ });
266
+ // if (this.selectedId) {
267
+ // this.select(this.selectedId, { move: this.selectedId != this.currentSelectedId, resetLayer: false, force: true });
268
+ // }
269
+ // groups.forEach((group) => {
270
+ // const layer = this.layerMap[group];
271
+ // const data = groupData[group];
272
+ // layer.setData(data);
273
+ // });
274
+ // if (this.textLayer) {
275
+ // this.textLayer.setData(textData);
276
+ // }
277
+ return overlays;
278
+ }
279
+ getIconOptions(group) {
280
+ let icon = this.iconUrl || 'assets/img/screen/marker.png';
281
+ let height = this.iconHeight || 30;
282
+ let width = this.iconWidth || 20;
283
+ let offsetX = this.iconOffsetX == null ? width / 2 : this.iconOffsetX;
284
+ let offsetY = this.iconOffsetY == null ? height : this.iconOffsetY;
285
+ if (group && group.imageUrl) {
286
+ icon = this.fileUrlService.getUrl(group.imageUrl);
287
+ width = group.width || width;
288
+ height = group.height || height;
289
+ offsetX = group.XOffset != null ? group.XOffset : width / 2;
290
+ offsetY = group.YOffset != null ? group.YOffset : height;
291
+ }
292
+ const iconOptions = new T.Icon({
293
+ iconUrl: icon,
294
+ iconSize: new T.Point(width, height),
295
+ iconAnchor: new T.Point(offsetX, offsetY),
296
+ });
297
+ return iconOptions;
298
+ }
299
+ openInfo(content, e) {
300
+ var point = e.lnglat;
301
+ var markerInfoWin = new T.InfoWindow(content, { offset: new T.Point(0, -30) }); // 创建信息窗口对象
302
+ this.parent.map.openInfoWindow(markerInfoWin, point); //开启信息窗口
303
+ }
304
+ addPickEvent(options) {
305
+ // options.enablePicked = true;
306
+ // options.onClick = ({ dataItem }) => {
307
+ // // 每个图层都会触发一次click事件,如果每个图层都没有点中标记点,传出null
308
+ // if (dataItem) {
309
+ // this.clickData = dataItem;
310
+ // }
311
+ // if (this.unselectOnClickBlank !== false && this.clickTimeout == null) {
312
+ // this.clickTimeout = setTimeout(() => {
313
+ // if (this.clickData == null) {
314
+ // this.selectedId = null;
315
+ // this.select(null);
316
+ // }
317
+ // this.clickTimeout = null;
318
+ // this.clickData = null;
319
+ // this.subMarkers = null;
320
+ // });
321
+ // }
322
+ // if (dataItem) {
323
+ // if (dataItem.type === 'Feature') {
324
+ // const coordinates = dataItem.geometry.coordinates;
325
+ // this.parent.setCenterAndZoom(coordinates[0], coordinates[1], this.parent.map.getZoom() + 2);
326
+ // } else {
327
+ // const data = dataItem.properties.raw;
328
+ // if (data) {
329
+ // this.selectedId = dataItem.properties.id;
330
+ // this.select(dataItem.properties.id);
331
+ // this.zone.run(() => {
332
+ // this.onClick.emit({ ...data, id: data.id_value || data.id });
333
+ // });
334
+ // }
335
+ // }
336
+ // }
337
+ // };
338
+ // if (this.parent.showType === 'mouseover') {
339
+ // let infoWindow = null;
340
+ // let infoWindowData = null;
341
+ // options.onMousemove = ({ dataItem }) => {
342
+ // const data = dataItem != null ? dataItem.properties.raw : null;
343
+ // if (infoWindow != null && infoWindowData != data) {
344
+ // infoWindow.close();
345
+ // infoWindow = null;
346
+ // }
347
+ // if (data && data.information && infoWindow == null) {
348
+ // infoWindowData = data;
349
+ // infoWindow = this.parent.openInfoWindow(data, data.lng, data.lat);
350
+ // }
351
+ // };
352
+ // }
353
+ }
354
+ select(id, options = {}) {
355
+ if (id != this.currentSelectedId || options.force) {
356
+ let item;
357
+ if (id != null && id !== '') {
358
+ item = this.dataMap[id];
359
+ // 如果找不到数据,可能是数据还没加载,等数据加载了再执行
360
+ if (item == null) {
361
+ return;
362
+ }
363
+ }
364
+ this.currentSelectedId = id;
365
+ // let lastSelectGroup: string;
366
+ // let currentSelectGroup: string;
367
+ let selectedData;
368
+ if (this.lastSelect) {
369
+ // lastSelectGroup = this.lastSelect.properties.group;
370
+ this.updateSize(this.lastSelect, 1);
371
+ this.lastSelect = null;
372
+ }
373
+ if (item) {
374
+ // currentSelectGroup = item.properties.group;
375
+ // this.updateSize(item, this.selectedSize ?? 1.5);
376
+ this.lastSelect = item;
377
+ selectedData = item;
378
+ if (options.move) {
379
+ // const layer = this.optionsMap[currentSelectGroup];
380
+ let zoom = this.parent.map.getZoom();
381
+ if (this.selectedMapZoom) {
382
+ zoom = this.selectedMapZoom;
383
+ }
384
+ // else if (
385
+ // layer instanceof mapvgl.ClusterLayer &&
386
+ // this.clusterMaxZoom != null &&
387
+ // Math.floor(zoom) <= this.clusterMaxZoom
388
+ // ) {
389
+ // zoom = this.clusterMaxZoom + 2;
390
+ // }
391
+ this.parent.setCenterAndZoom(selectedData.lng, selectedData.lat, zoom);
392
+ }
393
+ // if (selectedData.information && this.parent.showType !== 'mouseover') {
394
+ // // 防止其他图层将信息窗口关闭
395
+ // setTimeout(() => {
396
+ // this.parent.openInfoWindow(selectedData, selectedData.lng, selectedData.lat);
397
+ // });
398
+ // }
399
+ }
400
+ else {
401
+ selectedData = {};
402
+ }
403
+ // if (options.resetLayer !== false) {
404
+ // if (currentSelectGroup != null) {
405
+ // this.resetLayerData(currentSelectGroup);
406
+ // }
407
+ // if (lastSelectGroup != null && lastSelectGroup !== currentSelectGroup) {
408
+ // this.resetLayerData(lastSelectGroup);
409
+ // }
410
+ // }
411
+ // 如果选中的id找不到对应数据,可能是数据还没加载,
412
+ if (id == null || item != null) {
413
+ this.zone.run(() => {
414
+ this.makerClick.emit(Object.assign(Object.assign({}, selectedData), { id: selectedData.id_value || selectedData.id }));
415
+ });
416
+ }
417
+ }
418
+ }
419
+ resetLayerData(group) {
420
+ // const layer = this.layerMap[group];
421
+ // const data = this.groupData[group];
422
+ // if (layer && data) {
423
+ // layer.setData(data);
424
+ // }
425
+ }
426
+ updateSize(item, scale) {
427
+ // if (item && this.enlargeOnSelect) {
428
+ // const layer = this.layerMap[item.properties.group];
429
+ // let options: any;
430
+ // if (layer instanceof mapvgl.ClusterLayer) {
431
+ // options = layer.getOptions().iconOptions;
432
+ // } else {
433
+ // options = layer.getOptions();
434
+ // }
435
+ // const { height, width, offset } = options;
436
+ // item.properties.height = height * scale;
437
+ // item.properties.width = width * scale;
438
+ // if (item.properties.offset) {
439
+ // item.properties.offset = [offset[0] * scale, offset[1] * scale];
440
+ // }
441
+ // }
442
+ }
443
+ };
444
+ TiandituMarkerComponent.decorators = [
445
+ { type: Component, args: [{
446
+ selector: 'sc-tianditu-marker',
447
+ template: "",
448
+ styles: [""]
449
+ },] }
450
+ ];
451
+ TiandituMarkerComponent.ctorParameters = () => [
452
+ { type: TiandituComponent },
453
+ { type: NgZone },
454
+ { type: FileUrlService },
455
+ { type: NzContextMenuService }
456
+ ];
457
+ TiandituMarkerComponent.propDecorators = {
458
+ menu: [{ type: ViewChild, args: ['menu',] }]
459
+ };
460
+ __decorate([
461
+ Property('', { min: 1, ui: { widget: 'myPicture', spanLabel: 0, spanControl: 24 } }),
462
+ __metadata("design:type", Object)
463
+ ], TiandituMarkerComponent.prototype, "iconUrl", void 0);
464
+ __decorate([
465
+ Property('图标宽', { type: 'number' }),
466
+ __metadata("design:type", Object)
467
+ ], TiandituMarkerComponent.prototype, "iconWidth", void 0);
468
+ __decorate([
469
+ Property('图标高', { type: 'number' }),
470
+ __metadata("design:type", Object)
471
+ ], TiandituMarkerComponent.prototype, "iconHeight", void 0);
472
+ __decorate([
473
+ Property('图标偏移x', { type: 'number' }),
474
+ __metadata("design:type", Object)
475
+ ], TiandituMarkerComponent.prototype, "iconOffsetX", void 0);
476
+ __decorate([
477
+ Property('图标偏移y', { type: 'number' }),
478
+ __metadata("design:type", Object)
479
+ ], TiandituMarkerComponent.prototype, "iconOffsetY", void 0);
480
+ __decorate([
481
+ Property('移至中心'),
482
+ __metadata("design:type", Boolean)
483
+ ], TiandituMarkerComponent.prototype, "toCenter", void 0);
484
+ __decorate([
485
+ Property('显示标签', { ui: { visibleIf: { enableMarkerClusterer: [false] } } }),
486
+ __metadata("design:type", Boolean)
487
+ ], TiandituMarkerComponent.prototype, "showLabel", void 0);
488
+ __decorate([
489
+ Property('标签显示缩放等级', { ui: { visibleIf: { showLabel: [true] } } }),
490
+ __metadata("design:type", Number)
491
+ ], TiandituMarkerComponent.prototype, "showLabelMinZoom", void 0);
492
+ __decorate([
493
+ Property('标签字体', { ui: { widget: 'myFont', visibleIf: { showLabel: [true] } } }),
494
+ __metadata("design:type", Object)
495
+ ], TiandituMarkerComponent.prototype, "labelFont", void 0);
496
+ __decorate([
497
+ Property('描边颜色', {
498
+ ui: {
499
+ widget: 'myColor',
500
+ },
501
+ }),
502
+ __metadata("design:type", String)
503
+ ], TiandituMarkerComponent.prototype, "stroke", void 0);
504
+ __decorate([
505
+ Property('描边粗细', { type: 'integer' }),
506
+ __metadata("design:type", Number)
507
+ ], TiandituMarkerComponent.prototype, "strokeWidth", void 0);
508
+ __decorate([
509
+ Property('标签偏移x', { ui: { widget: 'number', visibleIf: { showLabel: [true] } } }),
510
+ __metadata("design:type", Object)
511
+ ], TiandituMarkerComponent.prototype, "labelOffsetX", void 0);
512
+ __decorate([
513
+ Property('标签偏移y', { ui: { widget: 'number', visibleIf: { showLabel: [true] } } }),
514
+ __metadata("design:type", Object)
515
+ ], TiandituMarkerComponent.prototype, "labelOffsetY", void 0);
516
+ __decorate([
517
+ Property('选中时地图缩放', { type: 'number' }),
518
+ __metadata("design:type", Number)
519
+ ], TiandituMarkerComponent.prototype, "selectedMapZoom", void 0);
520
+ __decorate([
521
+ Property('点击空白取消选中', { type: 'boolean', default: true }),
522
+ __metadata("design:type", Object)
523
+ ], TiandituMarkerComponent.prototype, "unselectOnClickBlank", void 0);
524
+ __decorate([
525
+ Property('标记分组', {
526
+ type: 'array',
527
+ title: '标记分组',
528
+ maxItems: 10,
529
+ items: {
530
+ type: 'object',
531
+ properties: {
532
+ group: {
533
+ type: 'string',
534
+ title: '分组',
535
+ },
536
+ // type: {
537
+ // title: '类型',
538
+ // type: 'string',
539
+ // enum: [
540
+ // {
541
+ // label: '图标',
542
+ // value: 'icon',
543
+ // },
544
+ // {
545
+ // label: '圆点',
546
+ // value: 'circle',
547
+ // },
548
+ // {
549
+ // label: '正方形',
550
+ // value: 'square',
551
+ // },
552
+ // {
553
+ // label: '波纹',
554
+ // value: 'wave',
555
+ // },
556
+ // {
557
+ // label: '扩散',
558
+ // value: 'bubble',
559
+ // },
560
+ // ],
561
+ // default: 'icon',
562
+ // },
563
+ // color: {
564
+ // type: 'string',
565
+ // title: '颜色',
566
+ // ui: { widget: 'myColor', visibleIf: { type: ['circle', 'square'] } },
567
+ // },
568
+ // size: {
569
+ // type: 'number',
570
+ // title: '尺寸',
571
+ // ui: { visibleIf: { type: ['circle', 'square', 'wave', 'bubble'] } },
572
+ // },
573
+ imageUrl: {
574
+ type: 'string',
575
+ title: '图片',
576
+ ui: {
577
+ widget: 'myPicture',
578
+ visibleIf: { type: ['icon'] },
579
+ },
580
+ },
581
+ width: {
582
+ type: 'number',
583
+ title: '宽度',
584
+ default: 19,
585
+ ui: { visibleIf: { type: ['icon'] } },
586
+ },
587
+ height: {
588
+ type: 'number',
589
+ title: '高度',
590
+ default: 25,
591
+ ui: { visibleIf: { type: ['icon'] } },
592
+ },
593
+ XOffset: {
594
+ type: 'number',
595
+ title: 'X轴偏移',
596
+ ui: { visibleIf: { type: ['icon'] } },
597
+ },
598
+ YOffset: {
599
+ type: 'number',
600
+ title: 'Y轴偏移',
601
+ ui: { visibleIf: { type: ['icon'] } },
602
+ },
603
+ },
604
+ required: [],
605
+ },
606
+ ui: { grid: { arraySpan: 24 }, spanControl: 24 },
607
+ }),
608
+ __metadata("design:type", Object)
609
+ ], TiandituMarkerComponent.prototype, "groups", void 0);
610
+ __decorate([
611
+ Data({
612
+ properties: {
613
+ id: ɵ0,
614
+ address: { type: 'string', title: '地点' },
615
+ information: { type: 'string', title: '信息' },
616
+ group: { type: 'string', title: '标记分组' },
617
+ lng: { type: 'number', title: '经度' },
618
+ lat: { type: 'number', title: '纬度' },
619
+ icon: { type: 'string', title: '图标' },
620
+ },
621
+ }),
622
+ __metadata("design:type", Array)
623
+ ], TiandituMarkerComponent.prototype, "data", void 0);
624
+ __decorate([
625
+ DataOutput(['id', 'address', 'lng', 'lat']),
626
+ Event('选中值改变', {
627
+ params: {
628
+ properties: {
629
+ id: ɵ1,
630
+ address: { type: 'string', title: '地点' },
631
+ lng: { type: 'number', title: '经度' },
632
+ lat: { type: 'number', title: '纬度' },
633
+ },
634
+ },
635
+ }),
636
+ __metadata("design:type", Object)
637
+ ], TiandituMarkerComponent.prototype, "makerClick", void 0);
638
+ __decorate([
639
+ DataInput('选中id'),
640
+ __metadata("design:type", String)
641
+ ], TiandituMarkerComponent.prototype, "selectedId", void 0);
642
+ __decorate([
643
+ Event('点击', {
644
+ params: {
645
+ properties: {
646
+ id: ɵ2,
647
+ address: { type: 'string', title: '地点' },
648
+ lng: { type: 'number', title: '经度' },
649
+ lat: { type: 'number', title: '纬度' },
650
+ },
651
+ },
652
+ }),
653
+ __metadata("design:type", Object)
654
+ ], TiandituMarkerComponent.prototype, "onClick", void 0);
655
+ TiandituMarkerComponent = __decorate([
656
+ Widget('标记层', {
657
+ hidden: true,
658
+ }),
659
+ __metadata("design:paramtypes", [TiandituComponent,
660
+ NgZone,
661
+ FileUrlService,
662
+ NzContextMenuService])
663
+ ], TiandituMarkerComponent);
664
+ export { TiandituMarkerComponent };
665
+ export { ɵ0, ɵ1, ɵ2 };
666
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlhbmRpdHUtbWFya2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjcmVlbi13aWRnZXQvc3JjL2xpYi90aWFuZGl0dS90aWFuZGl0dS1tYXJrZXIvdGlhbmRpdHUtbWFya2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBR1osTUFBTSxFQUtOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUl2RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU5RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO1dBZ0xoRCxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQXdCN0IsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FhL0IsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7SUF6TTlCLHVCQUF1QixTQUF2Qix1QkFBd0IsU0FBUSxTQUFTO0lBZ09wRCxZQUNZLE1BQXlCLEVBQ3pCLElBQVksRUFDZCxjQUE4QixFQUM5QixvQkFBMEM7UUFFbEQsS0FBSyxDQUFDLE1BQU0sRUFB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LEVBQUU7YUFDckM7U0FDRjtLQUNGLENBQUM7OzJEQUM4QjtBQUVoQztJQURDLFNBQVMsQ0FBQyxNQUFNLENBQUM7OzJEQUNDO0FBV25CO0lBVkMsS0FBSyxDQUFDLElBQUksRUFBRTtRQUNYLE1BQU0sRUFBRTtZQUNOLFVBQVUsRUFBRTtnQkFDVixFQUFFLElBQWlDO2dCQUNuQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7Z0JBQ3hDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtnQkFDcEMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO2FBQ3JDO1NBQ0Y7S0FDRixDQUFDOzt3REFDMkI7QUFoTmxCLHVCQUF1QjtJQUhuQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2IsTUFBTSxFQUFFLElBQUk7S0FDYixDQUFDO3FDQWtPb0IsaUJBQWlCO1FBQ25CLE1BQU07UUFDRSxjQUFjO1FBQ1Isb0JBQW9CO0dBcE96Qyx1QkFBdUIsQ0EwbUJuQztTQTFtQlksdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YSwgRGF0YU91dHB1dCwgUHJvcGVydHksIFdpZGdldCwgRXZlbnQsIERhdGFJbnB1dCB9IGZyb20gJ2Jiai13aWRnZXQtYmFzZSc7XG5pbXBvcnQgeyBQYXJlbnRDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXJlbnQtY29udGFpbmVyL3BhcmVudC1jb250YWluZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNGQXJyYXlXaWRnZXRTY2hlbWEgfSBmcm9tICdAZGVsb24vZm9ybSc7XG5pbXBvcnQgeyBnZXRGb250U3R5bGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbC9zdHlsZS51dGlsJztcbmltcG9ydCB7IEJhc2VMYXllciB9IGZyb20gJy4uL2Jhc2UtbGF5ZXInO1xuaW1wb3J0IHsgRmlsZVVybFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZS9maWxlLXVybC5zZXJ2aWNlJztcbmltcG9ydCB7IE56Q29udGV4dE1lbnVTZXJ2aWNlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9kcm9wZG93bic7XG5pbXBvcnQgeyBTY3JvbGxEaXNwYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBnZXRVVUlEIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWwvYmFzZS51dGlsJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRpYW5kaXR1Q29tcG9uZW50IH0gZnJvbSAnLi4vdGlhbmRpdHUuY29tcG9uZW50JztcblxuZGVjbGFyZSB2YXIgVDogYW55O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzYy10aWFuZGl0dS1tYXJrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdGlhbmRpdHUtbWFya2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGlhbmRpdHUtbWFya2VyLmNvbXBvbmVudC5sZXNzJ10sXG59KVxuQFdpZGdldCgn5qCH6K6w5bGCJywge1xuICBoaWRkZW46IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFRpYW5kaXR1TWFya2VyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUxheWVyIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIEBQcm9wZXJ0eSgnJywgeyBtaW46IDEsIHVpOiB7IHdpZGdldDogJ215UGljdHVyZScsIHNwYW5MYWJlbDogMCwgc3BhbkNvbnRyb2w6IDI0IH0gfSlcbiAgaWNvblVybCA9ICdhc3NldHMvaW1nL3NjcmVlbi9tYXJrZXIucG5nJztcbiAgQFByb3BlcnR5KCflm77moIflrr0nLCB7IHR5cGU6ICdudW1iZXInIH0pXG4gIGljb25XaWR0aCA9IDIwO1xuICBAUHJvcGVydHkoJ+Wbvuagh+mrmCcsIHsgdHlwZTogJ251bWJlcicgfSlcbiAgaWNvbkhlaWdodCA9IDMwO1xuICBAUHJvcGVydHkoJ+Wbvuagh+WBj+enu3gnLCB7IHR5cGU6ICdudW1iZXInIH0pXG4gIGljb25PZmZzZXRYID0gMTA7XG4gIEBQcm9wZXJ0eSgn5Zu+5qCH5YGP56e7eScsIHsgdHlwZTogJ251bWJlcicgfSlcbiAgaWNvbk9mZnNldFkgPSAzMDtcbiAgLy8gQFByb3BlcnR5KCfliIbnu4QnLCB7dHlwZTogJ3N0cmluZyd9KVxuICAvLyBncm91cCA9ICcnO1xuXG4gIEBQcm9wZXJ0eSgn56e76Iez5Lit5b+DJylcbiAgdG9DZW50ZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gQFByb3BlcnR5KCfngrnogZrlkIgnKVxuICAvLyBlbmFibGVNYXJrZXJDbHVzdGVyZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gQFByb3BlcnR5KCfogZrlkIjmnIDlsI/nm7TlvoQnLCB7IHR5cGU6ICdudW1iZXInLCB1aTogeyB2aXNpYmxlSWY6IHsgZW5hYmxlTWFya2VyQ2x1c3RlcmVyOiBbdHJ1ZV0gfSB9IH0pXG4gIC8vIGNsdXN0ZXJNaW5TaXplID0gMjU7XG4gIC8vIEBQcm9wZXJ0eSgn6IGa5ZCI5pyA5aSn55u05b6EJywgeyB0eXBlOiAnbnVtYmVyJywgdWk6IHsgdmlzaWJsZUlmOiB7IGVuYWJsZU1hcmtlckNsdXN0ZXJlcjogW3RydWVdIH0gfSB9KVxuICAvLyBjbHVzdGVyTWF4U2l6ZSA9IDQwO1xuICAvLyBAUHJvcGVydHkoJ+iBmuWQiOWtl+S9kycsIHsgdWk6IHsgd2lkZ2V0OiAnbXlGb250JyB9IH0pXG4gIC8vIGNsdXN0ZXJGb250OiBhbnkgPSB7XG4gIC8vICAgY29sb3I6ICcjZmZmZmZmJyxcbiAgLy8gICBzaXplOiAxNixcbiAgLy8gfTtcbiAgLy8gQFByb3BlcnR5KCfogZrlkIjpopzoibInLCB7XG4gIC8vICAgdWk6IHtcbiAgLy8gICAgIHdpZGdldDogJ3Nlcmllc0NvbG9yJyxcbiAgLy8gICAgIHZpc2libGVJZjogeyBlbmFibGVNYXJrZXJDbHVzdGVyZXI6IFt0cnVlXSB9LFxuICAvLyAgIH0sXG4gIC8vIH0pXG4gIC8vIGNsdXN0ZXJHcmFkaWVudDogc3RyaW5nW107XG4gIC8vIEBQcm9wZXJ0eSgn6IGa5ZCI5pyA5aSn57qn5YirJywgeyB0eXBlOiAnbnVtYmVyJywgdWk6IHsgdmlzaWJsZUlmOiB7IGVuYWJsZU1hcmtlckNsdXN0ZXJlcjogW3RydWVdIH0gfSB9KVxuICAvLyBjbHVzdGVyTWF4Wm9vbSA9IDQ7XG4gIEBQcm9wZXJ0eSgn5pi+56S65qCH562+JywgeyB1aTogeyB2aXNpYmxlSWY6IHsgZW5hYmxlTWFya2VyQ2x1c3RlcmVyOiBbZmFsc2VdIH0gfSB9KVxuICBzaG93TGFiZWw6IGJvb2xlYW47XG4gIEBQcm9wZXJ0eSgn5qCH562+5pi+56S657yp5pS+562J57qnJywgeyB1aTogeyB2aXNpYmxlSWY6IHsgc2hvd0xhYmVsOiBbdHJ1ZV0gfSB9IH0pXG4gIHNob3dMYWJlbE1pblpvb206IG51bWJlcjtcbiAgLy8gQFByb3BlcnR5KCfmoIfnrb7lupXoibInLCB7IHVpOiB7IHdpZGdldDogJ215Q29sb3InLCB2aXNpYmxlSWY6IHsgc2hvd0xhYmVsOiBbdHJ1ZV0gfSB9IH0pXG4gIC8vIGxhYmVsQmFja2dyb3VuZDogc3RyaW5nO1xuICBAUHJvcGVydHkoJ+agh+etvuWtl+S9kycsIHsgdWk6IHsgd2lkZ2V0OiAnbXlGb250JywgdmlzaWJsZUlmOiB7IHNob3dMYWJlbDogW3RydWVdIH0gfSB9KVxuICBsYWJlbEZvbnQ6IGFueSA9IHtcbiAgICBmYW1pbHk6ICcnLFxuICAgIGNvbG9yOiAnIzAwMDAwMCcsXG4gICAgd2VpZ2h0OiAnbm9ybWFsJyxcbiAgICBzaXplOiAxNixcbiAgICBzcGFjZTogMCxcbiAgICBsaW5lSGVpZ2h0OiAwLFxuICB9O1xuICBAUHJvcGVydHkoJ+aPj+i+ueminOiJsicsIHtcbiAgICB1aToge1xuICAgICAgd2lkZ2V0OiAnbXlDb2xvcicsXG4gICAgfSxcbiAgfSlcbiAgc3Ryb2tlOiBzdHJpbmc7XG4gIEBQcm9wZXJ0eSgn5o+P6L6557KX57uGJywgeyB0eXBlOiAnaW50ZWdlcicgfSlcbiAgc3Ryb2tlV2lkdGg6IG51bWJlcjtcbiAgLy8gQFByb3BlcnR5KCfpmLTlvbEnLCB7IHVpOiB7IHdpZGdldDogJ215U2hhZG93JyB9IH0pXG4gIC8vIHNoYWRvdzogYW55ID0geyBjb2xvcjogJycsIFg6IDAsIFk6IDAsIFo6IDAgfTtcbiAgQFByb3BlcnR5KCfmoIfnrb7lgY/np7t4JywgeyB1aTogeyB3aWRnZXQ6ICdudW1iZXInLCB2aXNpYmxlSWY6IHsgc2hvd0xhYmVsOiBbdHJ1ZV0gfSB9IH0pXG4gIGxhYmVsT2Zmc2V0WCA9IC01MDtcbiAgQFByb3BlcnR5KCfmoIfnrb7lgY/np7t5JywgeyB1aTogeyB3aWRnZXQ6ICdudW1iZXInLCB2aXNpYmxlSWY6IHsgc2hvd0xhYmVsOiBbdHJ1ZV0gfSB9IH0pXG4gIGxhYmVsT2Zmc2V0WSA9IDEwO1xuICAvLyBAUHJvcGVydHkoJ+mAieS4reaUvuWkpycpXG4gIC8vIGVubGFyZ2VPblNlbGVjdDogYm9vbGVhbjtcbiAgLy8gQFByb3BlcnR5KCfpgInkuK3ml7bmlL7lpKflgI3mlbAnLCB7IHR5cGU6ICdudW1iZXInIH0pXG4gIC8vIHNlbGVjdGVkU2l6ZSA9IDEuNTtcbiAgQFByb3BlcnR5KCfpgInkuK3ml7blnLDlm77nvKnmlL4nLCB7IHR5cGU6ICdudW1iZXInIH0pXG4gIHNlbGVjdGVkTWFwWm9vbTogbnVtYmVyO1xuICBAUHJvcGVydHkoJ+eCueWHu+epuueZveWPlua2iOmAieS4rScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiB0cnVlIH0pXG4gIHVuc2VsZWN0T25DbGlja0JsYW5rID0gdHJ1ZTtcbiAgQFByb3BlcnR5KCfmoIforrDliIbnu4QnLCB7XG4gICAgdHlwZTogJ2FycmF5JyxcbiAgICB0aXRsZTogJ+agh+iusOWIhue7hCcsXG4gICAgbWF4SXRlbXM6IDEwLFxuICAgIGl0ZW1zOiB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgZ3JvdXA6IHtcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB0aXRsZTogJ+WIhue7hCcsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHR5cGU6IHtcbiAgICAgICAgLy8gICB0aXRsZTogJ+exu+WeiycsXG4gICAgICAgIC8vICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIC8vICAgZW51bTogW1xuICAgICAgICAvLyAgICAge1xuICAgICAgICAvLyAgICAgICBsYWJlbDogJ+WbvuaghycsXG4gICAgICAgIC8vICAgICAgIHZhbHVlOiAnaWNvbicsXG4gICAgICAgIC8vICAgICB9LFxuICAgICAgICAvLyAgICAge1xuICAgICAgICAvLyAgICAgICBsYWJlbDogJ+WchueCuScsXG4gICAgICAgIC8vICAgICAgIHZhbHVlOiAnY2lyY2xlJyxcbiAgICAgICAgLy8gICAgIH0sXG4gICAgICAgIC8vICAgICB7XG4gICAgICAgIC8vICAgICAgIGxhYmVsOiAn5q2j5pa55b2iJyxcbiAgICAgICAgLy8gICAgICAgdmFsdWU6ICdzcXVhcmUnLFxuICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgLy8gICAgIHtcbiAgICAgICAgLy8gICAgICAgbGFiZWw6ICfms6LnurknLFxuICAgICAgICAvLyAgICAgICB2YWx1ZTogJ3dhdmUnLFxuICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgLy8gICAgIHtcbiAgICAgICAgLy8gICAgICAgbGFiZWw6ICfmianmlaMnLFxuICAgICAgICAvLyAgICAgICB2YWx1ZTogJ2J1YmJsZScsXG4gICAgICAgIC8vICAgICB9LFxuICAgICAgICAvLyAgIF0sXG4gICAgICAgIC8vICAgZGVmYXVsdDogJ2ljb24nLFxuICAgICAgICAvLyB9LFxuICAgICAgICAvLyBjb2xvcjoge1xuICAgICAgICAvLyAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAvLyAgIHRpdGxlOiAn6aKc6ImyJyxcbiAgICAgICAgLy8gICB1aTogeyB3aWRnZXQ6ICdteUNvbG9yJywgdmlzaWJsZUlmOiB7IHR5cGU6IFsnY2lyY2xlJywgJ3NxdWFyZSddIH0gfSxcbiAgICAgICAgLy8gfSxcbiAgICAgICAgLy8gc2l6ZToge1xuICAgICAgICAvLyAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAvLyAgIHRpdGxlOiAn5bC65a+4JyxcbiAgICAgICAgLy8gICB1aTogeyB2aXNpYmxlSWY6IHsgdHlwZTogWydjaXJjbGUnLCAnc3F1YXJlJywgJ3dhdmUnLCAnYnViYmxlJ10gfSB9LFxuICAgICAgICAvLyB9LFxuICAgICAgICBpbWFnZVVybDoge1xuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIHRpdGxlOiAn5Zu+54mHJyxcbiAgICAgICAgICB1aToge1xuICAgICAgICAgICAgd2lkZ2V0OiAnbXlQaWN0dXJlJyxcbiAgICAgICAgICAgIHZpc2libGVJZjogeyB0eXBlOiBbJ2ljb24nXSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHdpZHRoOiB7XG4gICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgdGl0bGU6ICflrr3luqYnLFxuICAgICAgICAgIGRlZmF1bHQ6IDE5LFxuICAgICAgICAgIHVpOiB7IHZpc2libGVJZjogeyB0eXBlOiBbJ2ljb24nXSB9IH0sXG4gICAgICAgIH0sXG4gICAgICAgIGhlaWdodDoge1xuICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgIHRpdGxlOiAn6auY5bqmJyxcbiAgICAgICAgICBkZWZhdWx0OiAyNSxcbiAgICAgICAgICB1aTogeyB2aXNpYmxlSWY6IHsgdHlwZTogWydpY29uJ10gfSB9LFxuICAgICAgICB9LFxuICAgICAgICBYT2Zmc2V0OiB7XG4gICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgdGl0bGU6ICdY6L205YGP56e7JyxcbiAgICAgICAgICB1aTogeyB2aXNpYmxlSWY6IHsgdHlwZTogWydpY29uJ10gfSB9LFxuICAgICAgICB9LFxuICAgICAgICBZT2Zmc2V0OiB7XG4gICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgdGl0bGU6ICdZ6L205YGP56e7JyxcbiAgICAgICAgICB1aTogeyB2aXNpYmxlSWY6IHsgdHlwZTogWydpY29uJ10gfSB9LFxuICAgICAgICB9LFxuICAgICAgICAvLyBlbmFibGVNYXJrZXJDbHVzdGVyZXI6IHtcbiAgICAgICAgLy8gICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIC8vICAgdGl0bGU6ICfmmK/lkKbogZrlkIgnLFxuICAgICAgICAvLyAgIHVpOiB7IHZpc2libGVJZjogeyB0eXBlOiBbJ2ljb24nXSB9IH0sXG4gICAgICAgIC8vIH0sXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IFtdLFxuICAgIH0sXG4gICAgdWk6IHsgZ3JpZDogeyBhcnJheVNwYW46IDI0IH0sIHNwYW5Db250cm9sOiAyNCB9IGFzIFNGQXJyYXlXaWRnZXRTY2hlbWEsXG4gIH0pXG4gIGdyb3VwcyA9IFtdO1xuICBARGF0YSh7XG4gICAgcHJvcGVydGllczoge1xuICAgICAgaWQ6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAnaWQnIH0sXG4gICAgICBhZGRyZXNzOiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ+WcsOeCuScgfSxcbiAgICAgIGluZm9ybWF0aW9uOiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ+S/oeaBrycgfSxcbiAgICAgIGdyb3VwOiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ+agh+iusOWIhue7hCcgfSxcbiAgICAgIGxuZzogeyB0eXBlOiAnbnVtYmVyJywgdGl0bGU6ICfnu4/luqYnIH0sXG4gICAgICBsYXQ6IHsgdHlwZTogJ251bWJlcicsIHRpdGxlOiAn57qs5bqmJyB9LFxuICAgICAgaWNvbjogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICflm77moIcnIH0sXG4gICAgfSxcbiAgfSlcbiAgZGF0YTogYW55W10gPSBbXG4gICAge1xuICAgICAgaWQ6ICcxJyxcbiAgICAgIGFkZHJlc3M6ICcnLFxuICAgICAgaW5mb3JtYXRpb246ICfmmoLml6Dkv6Hmga8nLFxuICAgICAgZ3JvdXA6ICcnLFxuICAgICAgbG5nOiAnMTIwLjcnLFxuICAgICAgbGF0OiAnMjgnLFxuICAgIH0sXG4gIF07XG4gIC8vIGlkOiBzdHJpbmc7XG4gIEBEYXRhT3V0cHV0KFsnaWQnLCAnYWRkcmVzcycsICdsbmcnLCAnbGF0J10pXG4gIEBFdmVudCgn6YCJ5Lit5YC85pS55Y+YJywge1xuICAgIHBhcmFtczoge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpZDogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICdpZCcgfSxcbiAgICAgICAgYWRkcmVzczogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICflnLDngrknIH0sXG4gICAgICAgIGxuZzogeyB0eXBlOiAnbnVtYmVyJywgdGl0bGU6ICfnu4/luqYnIH0sXG4gICAgICAgIGxhdDogeyB0eXBlOiAnbnVtYmVyJywgdGl0bGU6ICfnuqzluqYnIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pXG4gIG1ha2VyQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBEYXRhSW5wdXQoJ+mAieS4rWlkJylcbiAgc2VsZWN0ZWRJZDogc3RyaW5nO1xuICBARXZlbnQoJ+eCueWHuycsIHtcbiAgICBwYXJhbXM6IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaWQ6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAnaWQnIH0sXG4gICAgICAgIGFkZHJlc3M6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAn5Zyw54K5JyB9LFxuICAgICAgICBsbmc6IHsgdHlwZTogJ251bWJlcicsIHRpdGxlOiAn57uP5bqmJyB9LFxuICAgICAgICBsYXQ6IHsgdHlwZTogJ251bWJlcicsIHRpdGxlOiAn57qs5bqmJyB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KVxuICBvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGxheWVycyA9IFtdO1xuICBpbml0ZWQ6IGJvb2xlYW47XG4gIC8vIGRlZmF1bHRMYXllcjogYW55O1xuICBvcHRpb25zTWFwID0ge307XG4gIGNsaWNrRGF0YTogYW55O1xuICBjbGlja1RpbWVvdXQ6IGFueTtcbiAgQFZpZXdDaGlsZCgnbWVudScpXG4gIG1lbnU6IGFueTtcbiAgc3ViTWFya2VyczogYW55W107XG4gIGRhdGFNYXAgPSB7fTtcbiAgZ3JvdXBEYXRhOiB7fTtcbiAgbGFzdFNlbGVjdDogYW55O1xuICBjdXJyZW50U2VsZWN0ZWRJZDogc3RyaW5nO1xuICB0ZXh0TGF5ZXI6IGFueTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHBhcmVudDogVGlhbmRpdHVDb21wb25lbnQsXG4gICAgcHJvdGVjdGVkIHpvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGZpbGVVcmxTZXJ2aWNlOiBGaWxlVXJsU2VydmljZSxcbiAgICBwcml2YXRlIG56Q29udGV4dE1lbnVTZXJ2aWNlOiBOekNvbnRleHRNZW51U2VydmljZSxcbiAgKSB7XG4gICAgc3VwZXIocGFyZW50LCB6b25lKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIGF3YWl0IHN1cGVyLm5nT25Jbml0KCk7XG4gICAgaWYgKHRoaXMuc2hvd0xhYmVsICYmIHRoaXMuc2hvd0xhYmVsTWluWm9vbSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnBhcmVudC56b29tQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHpvb20pID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0VmlzaWJsZSh6b29tKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAodGhpcy5pbml0ZWQpIHtcbiAgICAgIGlmIChjaGFuZ2VzLmRhdGEpIHtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU92ZXJsYXlzKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZXMuc2VsZWN0ZWRJZCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZElkICE9IHRoaXMuY3VycmVudFNlbGVjdGVkSWQpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdCh0aGlzLnNlbGVjdGVkSWQsIHsgbW92ZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgaW5pdCgpIHtcbiAgICB0aGlzLm9wdGlvbnNNYXAgPSB7fTtcbiAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHRoaXMuY3JlYXRlT3B0aW9ucygpO1xuICAgIHRoaXMub3B0aW9uc01hcFsnJ10gPSBkZWZhdWx0T3B0aW9ucztcbiAgICBpZiAodGhpcy5ncm91cHM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5ncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgICAgaWYgKGdyb3VwLmdyb3VwKSB7XG4gICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuY3JlYXRlT3B0aW9ucyhncm91cCk7XG4gICAgICAgICAgdGhpcy5vcHRpb25zTWFwW2dyb3VwLmdyb3VwXSA9IG9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy51bnNlbGVjdE9uQ2xpY2tCbGFuaykge1xuICAgICAgdGhpcy5wYXJlbnQubWFwQ2xpY2sucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0KG51bGwpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGlmICghdGhpcy5lbmFibGVNYXJrZXJDbHVzdGVyZXIgJiYgdGhpcy5zaG93TGFiZWwpIHtcbiAgICAvLyAgIGNvbnN0IHRleHRPcHRpb25zID0ge1xuICAgIC8vICAgICAuLi50aGlzLmdldFRleHRPcHRpb25zKHRoaXMubGFiZWxGb250KSxcbiAgICAvLyAgICAgLy8gY29sb3I6ICcjZmZmJyxcbiAgICAvLyAgICAgLy8gZm9udEZhbWlseTogJ01pY3Jvc29mdCBZYWhlaScsXG4gICAgLy8gICAgIC8vIGZvbnRTaXplOiAxNCxcbiAgICAvLyAgICAgZmxhdDogZmFsc2UsXG4gICAgLy8gICAgIGNvbGxpZGVzOiB0cnVlLFxuICAgIC8vICAgICBvZmZzZXQ6IFt0aGlzLmxhYmVsT2Zmc2V0WCB8fCAwLCB0aGlzLmxhYmVsT2Zmc2V0WSB8fCAwXSxcbiAgICAvLyAgICAgc3Ryb2tlOiB7XG4gICAgLy8gICAgICAgY29sb3I6IHRoaXMuc3Ryb2tlLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBwYWRkaW5nOiBbMiwgMl0sXG4gICAgLy8gICAgIG1hcmdpbjogWzAsIDBdLFxuICAgIC8vICAgfTtcbiAgICAvLyAgIGlmICh0aGlzLnN0cm9rZSAmJiB0aGlzLnN0cm9rZSAhPT0gJ3JnYmEoMCwwLDAsMCknKSB7XG4gICAgLy8gICAgIHRleHRPcHRpb25zLnN0cm9rZSA9IHsgY29sb3I6IHRoaXMuc3Ryb2tlIH07XG4gICAgLy8gICB9XG4gICAgLy8gICBpZiAodGhpcy5zdHJva2VXaWR0aCkge1xuICAgIC8vICAgICB0ZXh0T3B0aW9ucy5saW5lV2lkdGggPSB0aGlzLnN0cm9rZVdpZHRoO1xuICAgIC8vICAgfVxuICAgIC8vICAgaWYgKHRoaXMuc2hhZG93KSB7XG4gICAgLy8gICAgIHRleHRPcHRpb25zLnNoYWRvdyA9IHtcbiAgICAvLyAgICAgICBjb2xvcjogdGhpcy5zaGFkb3cuY29sb3IsXG4gICAgLy8gICAgICAgYmx1cjogdGhpcy5zaGFkb3cuWixcbiAgICAvLyAgICAgICBvZmZzZXRYOiB0aGlzLnNoYWRvdy5YLFxuICAgIC8vICAgICAgIG9mZnNldFk6IHRoaXMuc2hhZG93LlksXG4gICAgLy8gICAgIH07XG4gICAgLy8gICB9XG4gICAgLy8gICB0aGlzLnRleHRMYXllciA9IG5ldyBtYXB2Z2wuVGV4dExheWVyKHRleHRPcHRpb25zKTtcbiAgICAvLyAgIGlmICh0aGlzLnNob3dMYWJlbE1pblpvb20gIT0gbnVsbCkge1xuICAgIC8vICAgICB0aGlzLnBhcmVudC5pbml0JC50aGVuKCgpID0+IHtcbiAgICAvLyAgICAgICBjb25zdCB6b29tID0gdGhpcy5wYXJlbnQubWFwLmdldFpvb20oKTtcbiAgICAvLyAgICAgICB0aGlzLnVwZGF0ZVRleHRWaXNpYmxlKHpvb20pO1xuICAgIC8vICAgICB9KTtcbiAgICAvLyAgIH1cbiAgICAvLyAgIGxheWVycy5wdXNoKHRoaXMudGV4dExheWVyKTtcbiAgICAvLyB9XG4gIH1cblxuICBjcmVhdGVPcHRpb25zKGdyb3VwPzogYW55KSB7XG4gICAgY29uc3QgaWNvbk9wdGlvbnMgPSB0aGlzLmdldEljb25PcHRpb25zKGdyb3VwKTtcbiAgICByZXR1cm4geyBpY29uOiBpY29uT3B0aW9ucyB9O1xuICAgIC8vIGlmICh0aGlzLmVuYWJsZU1hcmtlckNsdXN0ZXJlciB8fCBncm91cD8uZW5hYmxlTWFya2VyQ2x1c3RlcmVyKSB7XG4gICAgLy8gICBjb25zdCBvcHRpb25zOiBhbnkgPSB7XG4gICAgLy8gICAgIGljb25PcHRpb25zLFxuICAgIC8vICAgICB0ZXh0T3B0aW9uczogdGhpcy5nZXRUZXh0T3B0aW9ucyh0aGlzLmNsdXN0ZXJGb250KSxcbiAgICAvLyAgICAgbWluU2l6ZTogdGhpcy5jbHVzdGVyTWluU2l6ZSB8fCAyNSxcbiAgICAvLyAgICAgbWF4U2l6ZTogdGhpcy5jbHVzdGVyTWF4U2l6ZSB8fCA0MCxcbiAgICAvLyAgIH07XG4gICAgLy8gICBpZiAodGhpcy5jbHVzdGVyR3JhZGllbnQ/Lmxlbmd0aCkge1xuICAgIC8vICAgICBjb25zdCBncmFkaWVudDogYW55ID0ge307XG4gICAgLy8gICAgIGdyYWRpZW50WzBdID0gdGhpcy5jbHVzdGVyR3JhZGllbnRbMF07XG4gICAgLy8gICAgIHRoaXMuY2x1c3RlckdyYWRpZW50LnNsaWNlKDEpLmZvckVhY2goKGcsIGkpID0+IHtcbiAgICAvLyAgICAgICBncmFkaWVudFsoaSArIDEpIC8gdGhpcy5jbHVzdGVyR3JhZGllbnQubGVuZ3RoXSA9IGc7XG4gICAgLy8gICAgIH0pO1xuICAgIC8vICAgICBvcHRpb25zLmdyYWRpZW50ID0gZ3JhZGllbnQ7XG4gICAgLy8gICB9XG4gICAgLy8gICBpZiAodGhpcy5jbHVzdGVyTWF4Wm9vbSAhPSBudWxsKSB7XG4gICAgLy8gICAgIG9wdGlvbnMubWF4Wm9vbSA9IHRoaXMuY2x1c3Rlck1heFpvb207XG4gICAgLy8gICB9XG4gICAgLy8gICB0aGlzLmFkZFBpY2tFdmVudChvcHRpb25zKTtcbiAgICAvLyAgIGxheWVyID0gbmV3IG1hcHZnbC5DbHVzdGVyTGF5ZXIob3B0aW9ucyk7XG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyAgIHRoaXMuYWRkUGlja0V2ZW50KGljb25PcHRpb25zKTtcbiAgICAvLyAgIGxheWVyID0gbmV3IG1hcHZnbC5JY29uTGF5ZXIoaWNvbk9wdGlvbnMpO1xuICAgIC8vIH1cbiAgfVxuXG4gIHVwZGF0ZVRleHRWaXNpYmxlKHpvb20/OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy50ZXh0TGF5ZXIpIHtcbiAgICAgIGlmICh6b29tID49IHRoaXMuc2hvd0xhYmVsTWluWm9vbSkge1xuICAgICAgICB0aGlzLnRleHRMYXllci5zaG93KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRleHRMYXllci5oaWRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlT3ZlcmxheXMoKSB7XG4gICAgY29uc3Qgb3ZlcmxheXMgPSBbXTtcbiAgICB0aGlzLmRhdGFNYXAgPSB7fTtcbiAgICBpZiAodGhpcy50b0NlbnRlciAmJiB0aGlzLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IG1heExuZyA9IC0xODA7XG4gICAgICBsZXQgbWluTG5nID0gMTgwO1xuICAgICAgbGV0IG1heExhdCA9IC05MDtcbiAgICAgIGxldCBtaW5MYXQgPSA5MDtcbiAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKChyZXMpID0+IHtcbiAgICAgICAgbWF4TG5nID0gTWF0aC5tYXgobWF4TG5nLCByZXMubG5nKTtcbiAgICAgICAgbWluTG5nID0gTWF0aC5taW4obWluTG5nLCByZXMubG5nKTtcbiAgICAgICAgbWF4TGF0ID0gTWF0aC5tYXgobWF4TGF0LCByZXMubGF0KTtcbiAgICAgICAgbWluTGF0ID0gTWF0aC5taW4obWluTGF0LCByZXMubGF0KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wYXJlbnQuc2V0UmVjdENlbnRlckFuZFpvb20obWluTG5nLCBtYXhMbmcsIG1pbkxhdCwgbWF4TGF0KTtcbiAgICB9XG4gICAgY29uc3QgZ3JvdXBEYXRhID0ge307XG4gICAgdGhpcy5ncm91cERhdGEgPSBncm91cERhdGE7XG4gICAgY29uc3QgdGV4dERhdGEgPSBbXTtcbiAgICBjb25zdCBncm91cHMgPSBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnNNYXApO1xuICAgIGdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgZ3JvdXBEYXRhW2dyb3VwXSA9IFtdO1xuICAgIH0pO1xuICAgIC8vIGNvbnN0IGRlZmF1bHREYXRhID0gW107XG4gICAgdGhpcy5kYXRhLmZvckVhY2goKHJlY29yZCkgPT4ge1xuICAgICAgbGV0IGdyb3VwTmFtZSA9IHJlY29yZC5ncm91cDtcbiAgICAgIGlmIChncm91cE5hbWUgPT0gbnVsbCB8fCB0aGlzLm9wdGlvbnNNYXBbZ3JvdXBOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGdyb3VwTmFtZSA9ICcnO1xuICAgICAgfVxuICAgICAgbGV0IGlkID0gcmVjb3JkLmlkX3ZhbHVlIHx8IHJlY29yZC5pZDtcbiAgICAgIGlmIChpZCA9PSBudWxsIHx8IGlkID09ICcnKSB7XG4gICAgICAgIGlkID0gZ2V0VVVJRCgpO1xuICAgICAgfVxuICAgICAgLy8gTWFwVkdM55qEYnVn77yMQ2x1c3RlckxheWVy55qEaWNvbk9wdGlvbnPml6DmlYjvvIzlj6rog73pgJrov4dwcm9wZXJ0aWVz6K6+572uXG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zTWFwW2dyb3VwTmFtZV07XG4gICAgICAvLyBpZiAobGF5ZXIgIT0gbnVsbCAmJiBsYXllciBpbnN0YW5jZW9mIG1hcHZnbC5DbHVzdGVyTGF5ZXIpIHtcbiAgICAgIC8vICAgY29uc3Qgb3B0aW9ucyA9IGxheWVyLmdldE9wdGlvbnMoKTtcbiAgICAgIC8vICAgaWYgKG9wdGlvbnMuaWNvbk9wdGlvbnMpIHtcbiAgICAgIC8vICAgICBjb25zdCB7IGhlaWdodCwgd2lkdGgsIG9mZnNldCwgaWNvbiB9ID0gb3B0aW9ucy5pY29uT3B0aW9ucztcbiAgICAgIC8vICAgICBpdGVtLnByb3BlcnRpZXMgPSB7IGhlaWdodCwgd2lkdGgsIG9mZnNldCwgaWNvbiwgLi4uaXRlbS5wcm9wZXJ0aWVzIH07XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cbiAgICAgIHZhciBwb2ludCA9IHRoaXMucGFyZW50LmNyZWF0ZUxuZ0xhdChyZWNvcmQubG5nLCByZWNvcmQubGF0KTtcbiAgICAgIHZhciBtYXJrZXIgPSBuZXcgVC5NYXJrZXIocG9pbnQsIG9wdGlvbnMpOyAvLyDliJvlu7rmoIfms6hcbiAgICAgIG1hcmtlci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZCA9IGlkO1xuICAgICAgICB0aGlzLnNlbGVjdChpZCk7XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMub25DbGljay5lbWl0KHsgLi4ucmVjb3JkLCBpZCB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZWNvcmQuaW5mb3JtYXRpb24pIHtcbiAgICAgICAgICB0aGlzLm9wZW5JbmZvKHJlY29yZC5pbmZvcm1hdGlvbiwgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgb3ZlcmxheXMucHVzaChtYXJrZXIpO1xuICAgICAgaWYgKHRoaXMuc2hvd0xhYmVsICYmIHJlY29yZC5hZGRyZXNzKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gbmV3IFQuTGFiZWwoe1xuICAgICAgICAgIHRleHQ6IGAke3JlY29yZC5hZGRyZXNzfWAsXG4gICAgICAgICAgcG9zaXRpb246IG1hcmtlci5nZXRMbmdMYXQoKSxcbiAgICAgICAgICBvZmZzZXQ6IG5ldyBULlBvaW50KHRoaXMubGFiZWxPZmZzZXRYIHx8IC01MCwgdGhpcy5sYWJlbE9mZnNldFkgfHwgMTApLFxuICAgICAgICB9KTtcbiAgICAgICAgbGFiZWwuc2V0Qm9yZGVyTGluZSh0aGlzLnN0cm9rZVdpZHRoIHx8IDApO1xuICAgICAgICBsYWJlbC5zZXRCb3JkZXJDb2xvcih0aGlzLnN0cm9rZSk7XG4gICAgICAgIGxhYmVsLnNldEJhY2tncm91bmRDb2xvcigncmdiYSgwLDAsMCwwKScpO1xuICAgICAgICBsYWJlbC5zZXRGb250Q29sb3IodGhpcy5sYWJlbEZvbnQuY29sb3IpO1xuICAgICAgICBsYWJlbC5zZXRGb250U2l6ZSh0aGlzLmxhYmVsRm9udC5zaXplKTtcbiAgICAgICAgb3ZlcmxheXMucHVzaChsYWJlbCk7XG4gICAgICB9XG4gICAgICAvLyBpZiAodGhpcy5zZWxlY3RlZElkICYmIHRoaXMuc2VsZWN0ZWRJZCA9PSBpZCkge1xuICAgICAgLy8gICB0aGlzLnVwZGF0ZVNpemUoaXRlbSwgMS41KTtcbiAgICAgIC8vICAgdGhpcy5sYXN0U2VsZWN0ID0gaXRlbTtcbiAgICAgIC8vIH1cbiAgICAgIGdyb3VwRGF0YVtncm91cE5hbWVdLnB1c2gocmVjb3JkKTtcbiAgICAgIHRoaXMuZGF0YU1hcFtpZF0gPSByZWNvcmQ7XG4gICAgICBpZiAodGhpcy50ZXh0TGF5ZXIpIHtcbiAgICAgICAgdGV4dERhdGEucHVzaChyZWNvcmQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIGlmICh0aGlzLnNlbGVjdGVkSWQpIHtcbiAgICAvLyAgIHRoaXMuc2VsZWN0KHRoaXMuc2VsZWN0ZWRJZCwgeyBtb3ZlOiB0aGlzLnNlbGVjdGVkSWQgIT0gdGhpcy5jdXJyZW50U2VsZWN0ZWRJZCwgcmVzZXRMYXllcjogZmFsc2UsIGZvcmNlOiB0cnVlIH0pO1xuICAgIC8vIH1cbiAgICAvLyBncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAvLyAgIGNvbnN0IGxheWVyID0gdGhpcy5sYXllck1hcFtncm91cF07XG4gICAgLy8gICBjb25zdCBkYXRhID0gZ3JvdXBEYXRhW2dyb3VwXTtcbiAgICAvLyAgIGxheWVyLnNldERhdGEoZGF0YSk7XG4gICAgLy8gfSk7XG4gICAgLy8gaWYgKHRoaXMudGV4dExheWVyKSB7XG4gICAgLy8gICB0aGlzLnRleHRMYXllci5zZXREYXRhKHRleHREYXRhKTtcbiAgICAvLyB9XG4gICAgcmV0dXJuIG92ZXJsYXlzO1xuICB9XG5cbiAgZ2V0SWNvbk9wdGlvbnMoZ3JvdXA6IGFueSkge1xuICAgIGxldCBpY29uID0gdGhpcy5pY29uVXJsIHx8ICdhc3NldHMvaW1nL3NjcmVlbi9tYXJrZXIucG5nJztcbiAgICBsZXQgaGVpZ2h0ID0gdGhpcy5pY29uSGVpZ2h0IHx8IDMwO1xuICAgIGxldCB3aWR0aCA9IHRoaXMuaWNvbldpZHRoIHx8IDIwO1xuICAgIGxldCBvZmZzZXRYID0gdGhpcy5pY29uT2Zmc2V0WCA9PSBudWxsID8gd2lkdGggLyAyIDogdGhpcy5pY29uT2Zmc2V0WDtcbiAgICBsZXQgb2Zmc2V0WSA9IHRoaXMuaWNvbk9mZnNldFkgPT0gbnVsbCA/IGhlaWdodCA6IHRoaXMuaWNvbk9mZnNldFk7XG4gICAgaWYgKGdyb3VwICYmIGdyb3VwLmltYWdlVXJsKSB7XG4gICAgICBpY29uID0gdGhpcy5maWxlVXJsU2VydmljZS5nZXRVcmwoZ3JvdXAuaW1hZ2VVcmwpO1xuICAgICAgd2lkdGggPSBncm91cC53aWR0aCB8fCB3aWR0aDtcbiAgICAgIGhlaWdodCA9IGdyb3VwLmhlaWdodCB8fCBoZWlnaHQ7XG4gICAgICBvZmZzZXRYID0gZ3JvdXAuWE9mZnNldCAhPSBudWxsID8gZ3JvdXAuWE9mZnNldCA6IHdpZHRoIC8gMjtcbiAgICAgIG9mZnNldFkgPSBncm91cC5ZT2Zmc2V0ICE9IG51bGwgPyBncm91cC5ZT2Zmc2V0IDogaGVpZ2h0O1xuICAgIH1cbiAgICBjb25zdCBpY29uT3B0aW9uczogYW55ID0gbmV3IFQuSWNvbih7XG4gICAgICBpY29uVXJsOiBpY29uLFxuICAgICAgaWNvblNpemU6IG5ldyBULlBvaW50KHdpZHRoLCBoZWlnaHQpLFxuICAgICAgaWNvbkFuY2hvcjogbmV3IFQuUG9pbnQob2Zmc2V0WCwgb2Zmc2V0WSksXG4gICAgfSk7XG4gICAgcmV0dXJuIGljb25PcHRpb25zO1xuICB9XG4gIG9wZW5JbmZvKGNvbnRlbnQsIGUpIHtcbiAgICB2YXIgcG9pbnQgPSBlLmxuZ2xhdDtcbiAgICB2YXIgbWFya2VySW5mb1dpbiA9IG5ldyBULkluZm9XaW5kb3coY29udGVudCwgeyBvZmZzZXQ6IG5ldyBULlBvaW50KDAsIC0zMCkgfSk7IC8vIOWIm+W7uuS/oeaBr+eql+WPo+WvueixoVxuICAgIHRoaXMucGFyZW50Lm1hcC5vcGVuSW5mb1dpbmRvdyhtYXJrZXJJbmZvV2luLCBwb2ludCk7IC8v5byA5ZCv5L+h5oGv56qX5Y+jXG4gIH1cbiAgYWRkUGlja0V2ZW50KG9wdGlvbnM6IGFueSkge1xuICAgIC8vIG9wdGlvbnMuZW5hYmxlUGlja2VkID0gdHJ1ZTtcbiAgICAvLyBvcHRpb25zLm9uQ2xpY2sgPSAoeyBkYXRhSXRlbSB9KSA9PiB7XG4gICAgLy8gICAvLyDmr4/kuKrlm77lsYLpg73kvJrop6blj5HkuIDmrKFjbGlja+S6i+S7tu+8jOWmguaenOavj+S4quWbvuWxgumDveayoeacieeCueS4reagh+iusOeCue+8jOS8oOWHum51bGxcbiAgICAvLyAgIGlmIChkYXRhSXRlbSkge1xuICAgIC8vICAgICB0aGlzLmNsaWNrRGF0YSA9IGRhdGFJdGVtO1xuICAgIC8vICAgfVxuICAgIC8vICAgaWYgKHRoaXMudW5zZWxlY3RPbkNsaWNrQmxhbmsgIT09IGZhbHNlICYmIHRoaXMuY2xpY2tUaW1lb3V0ID09IG51bGwpIHtcbiAgICAvLyAgICAgdGhpcy5jbGlja1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICBpZiAodGhpcy5jbGlja0RhdGEgPT0gbnVsbCkge1xuICAgIC8vICAgICAgICAgdGhpcy5zZWxlY3RlZElkID0gbnVsbDtcbiAgICAvLyAgICAgICAgIHRoaXMuc2VsZWN0KG51bGwpO1xuICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgICB0aGlzLmNsaWNrVGltZW91dCA9IG51bGw7XG4gICAgLy8gICAgICAgdGhpcy5jbGlja0RhdGEgPSBudWxsO1xuICAgIC8vICAgICAgIHRoaXMuc3ViTWFya2VycyA9IG51bGw7XG4gICAgLy8gICAgIH0pO1xuICAgIC8vICAgfVxuICAgIC8vICAgaWYgKGRhdGFJdGVtKSB7XG4gICAgLy8gICAgIGlmIChkYXRhSXRlbS50eXBlID09PSAnRmVhdHVyZScpIHtcbiAgICAvLyAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IGRhdGFJdGVtLmdlb21ldHJ5LmNvb3JkaW5hdGVzO1xuICAgIC8vICAgICAgIHRoaXMucGFyZW50LnNldENlbnRlckFuZFpvb20oY29vcmRpbmF0ZXNbMF0sIGNvb3JkaW5hdGVzWzFdLCB0aGlzLnBhcmVudC5tYXAuZ2V0Wm9vbSgpICsgMik7XG4gICAgLy8gICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgY29uc3QgZGF0YSA9IGRhdGFJdGVtLnByb3BlcnRpZXMucmF3O1xuICAgIC8vICAgICAgIGlmIChkYXRhKSB7XG4gICAgLy8gICAgICAgICB0aGlzLnNlbGVjdGVkSWQgPSBkYXRhSXRlbS5wcm9wZXJ0aWVzLmlkO1xuICAgIC8vICAgICAgICAgdGhpcy5zZWxlY3QoZGF0YUl0ZW0ucHJvcGVydGllcy5pZCk7XG4gICAgLy8gICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgdGhpcy5vbkNsaWNrLmVtaXQoeyAuLi5kYXRhLCBpZDogZGF0YS5pZF92YWx1ZSB8fCBkYXRhLmlkIH0pO1xuICAgIC8vICAgICAgICAgfSk7XG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gICB9XG4gICAgLy8gfTtcbiAgICAvLyBpZiAodGhpcy5wYXJlbnQuc2hvd1R5cGUgPT09ICdtb3VzZW92ZXInKSB7XG4gICAgLy8gICBsZXQgaW5mb1dpbmRvdyA9IG51bGw7XG4gICAgLy8gICBsZXQgaW5mb1dpbmRvd0RhdGEgPSBudWxsO1xuICAgIC8vICAgb3B0aW9ucy5vbk1vdXNlbW92ZSA9ICh7IGRhdGFJdGVtIH0pID0+IHtcbiAgICAvLyAgICAgY29uc3QgZGF0YSA9IGRhdGFJdGVtICE9IG51bGwgPyBkYXRhSXRlbS5wcm9wZXJ0aWVzLnJhdyA6IG51bGw7XG4gICAgLy8gICAgIGlmIChpbmZvV2luZG93ICE9IG51bGwgJiYgaW5mb1dpbmRvd0RhdGEgIT0gZGF0YSkge1xuICAgIC8vICAgICAgIGluZm9XaW5kb3cuY2xvc2UoKTtcbiAgICAvLyAgICAgICBpbmZvV2luZG93ID0gbnVsbDtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICBpZiAoZGF0YSAmJiBkYXRhLmluZm9ybWF0aW9uICYmIGluZm9XaW5kb3cgPT0gbnVsbCkge1xuICAgIC8vICAgICAgIGluZm9XaW5kb3dEYXRhID0gZGF0YTtcbiAgICAvLyAgICAgICBpbmZvV2luZG93ID0gdGhpcy5wYXJlbnQub3BlbkluZm9XaW5kb3coZGF0YSwgZGF0YS5sbmcsIGRhdGEubGF0KTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfTtcbiAgICAvLyB9XG4gIH1cblxuICBzZWxlY3QoaWQ6IGFueSwgb3B0aW9uczogeyBtb3ZlPzogYm9vbGVhbjsgcmVzZXRMYXllcj86IGJvb2xlYW47IGZvcmNlPzogYm9vbGVhbiB9ID0ge30pIHtcbiAgICBpZiAoaWQgIT0gdGhpcy5jdXJyZW50U2VsZWN0ZWRJZCB8fCBvcHRpb25zLmZvcmNlKSB7XG4gICAgICBsZXQgaXRlbTogYW55O1xuICAgICAgaWYgKGlkICE9IG51bGwgJiYgaWQgIT09ICcnKSB7XG4gICAgICAgIGl0ZW0gPSB0aGlzLmRhdGFNYXBbaWRdO1xuICAgICAgICAvLyDlpoLmnpzmib7kuI3liLDmlbDmja7vvIzlj6/og73mmK/mlbDmja7ov5jmsqHliqDovb3vvIznrYnmlbDmja7liqDovb3kuoblho3miafooYxcbiAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5jdXJyZW50U2VsZWN0ZWRJZCA9IGlkO1xuICAgICAgLy8gbGV0IGxhc3RTZWxlY3RHcm91cDogc3RyaW5nO1xuICAgICAgLy8gbGV0IGN1cnJlbnRTZWxlY3RHcm91cDogc3RyaW5nO1xuICAgICAgbGV0IHNlbGVjdGVkRGF0YTogYW55O1xuICAgICAgaWYgKHRoaXMubGFzdFNlbGVjdCkge1xuICAgICAgICAvLyBsYXN0U2VsZWN0R3JvdXAgPSB0aGlzLmxhc3RTZWxlY3QucHJvcGVydGllcy5ncm91cDtcbiAgICAgICAgdGhpcy51cGRhdGVTaXplKHRoaXMubGFzdFNlbGVjdCwgMSk7XG4gICAgICAgIHRoaXMubGFzdFNlbGVjdCA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbSkge1xuICAgICAgICAvLyBjdXJyZW50U2VsZWN0R3JvdXAgPSBpdGVtLnByb3BlcnRpZXMuZ3JvdXA7XG4gICAgICAgIC8vIHRoaXMudXBkYXRlU2l6ZShpdGVtLCB0aGlzLnNlbGVjdGVkU2l6ZSA/PyAxLjUpO1xuICAgICAgICB0aGlzLmxhc3RTZWxlY3QgPSBpdGVtO1xuICAgICAgICBzZWxlY3RlZERhdGEgPSBpdGVtO1xuICAgICAgICBpZiAob3B0aW9ucy5tb3ZlKSB7XG4gICAgICAgICAgLy8gY29uc3QgbGF5ZXIgPSB0aGlzLm9wdGlvbnNNYXBbY3VycmVudFNlbGVjdEdyb3VwXTtcbiAgICAgICAgICBsZXQgem9vbSA9IHRoaXMucGFyZW50Lm1hcC5nZXRab29tKCk7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNYXBab29tKSB7XG4gICAgICAgICAgICB6b29tID0gdGhpcy5zZWxlY3RlZE1hcFpvb207XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGVsc2UgaWYgKFxuICAgICAgICAgIC8vICAgbGF5ZXIgaW5zdGFuY2VvZiBtYXB2Z2wuQ2x1c3RlckxheWVyICYmXG4gICAgICAgICAgLy8gICB0aGlzLmNsdXN0ZXJNYXhab29tICE9IG51bGwgJiZcbiAgICAgICAgICAvLyAgIE1hdGguZmxvb3Ioem9vbSkgPD0gdGhpcy5jbHVzdGVyTWF4Wm9vbVxuICAgICAgICAgIC8vICkge1xuICAgICAgICAgIC8vICAgem9vbSA9IHRoaXMuY2x1c3Rlck1heFpvb20gKyAyO1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgICB0aGlzLnBhcmVudC5zZXRDZW50ZXJBbmRab29tKHNlbGVjdGVkRGF0YS5sbmcsIHNlbGVjdGVkRGF0YS5sYXQsIHpvb20pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIChzZWxlY3RlZERhdGEuaW5mb3JtYXRpb24gJiYgdGhpcy5wYXJlbnQuc2hvd1R5cGUgIT09ICdtb3VzZW92ZXInKSB7XG4gICAgICAgIC8vICAgLy8g6Ziy5q2i5YW25LuW5Zu+5bGC5bCG5L+h5oGv56qX5Y+j5YWz6ZetXG4gICAgICAgIC8vICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgICB0aGlzLnBhcmVudC5vcGVuSW5mb1dpbmRvdyhzZWxlY3RlZERhdGEsIHNlbGVjdGVkRGF0YS5sbmcsIHNlbGVjdGVkRGF0YS5sYXQpO1xuICAgICAgICAvLyAgIH0pO1xuICAgICAgICAvLyB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3RlZERhdGEgPSB7fTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIChvcHRpb25zLnJlc2V0TGF5ZXIgIT09IGZhbHNlKSB7XG4gICAgICAvLyAgIGlmIChjdXJyZW50U2VsZWN0R3JvdXAgIT0gbnVsbCkge1xuICAgICAgLy8gICAgIHRoaXMucmVzZXRMYXllckRhdGEoY3VycmVudFNlbGVjdEdyb3VwKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gICBpZiAobGFzdFNlbGVjdEdyb3VwICE9IG51bGwgJiYgbGFzdFNlbGVjdEdyb3VwICE9PSBjdXJyZW50U2VsZWN0R3JvdXApIHtcbiAgICAgIC8vICAgICB0aGlzLnJlc2V0TGF5ZXJEYXRhKGxhc3RTZWxlY3RHcm91cCk7XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cbiAgICAgIC8vIOWmguaenOmAieS4reeahGlk5om+5LiN5Yiw5a+55bqU5pWw5o2uLOWPr+iDveaYr+aVsOaNrui/mOayoeWKoOi9ve+8jFxuICAgICAgaWYgKGlkID09IG51bGwgfHwgaXRlbSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMubWFrZXJDbGljay5lbWl0KHsgLi4uc2VsZWN0ZWREYXRhLCBpZDogc2VsZWN0ZWREYXRhLmlkX3ZhbHVlIHx8IHNlbGVjdGVkRGF0YS5pZCB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVzZXRMYXllckRhdGEoZ3JvdXA6IHN0cmluZykge1xuICAgIC8vIGNvbnN0IGxheWVyID0gdGhpcy5sYXllck1hcFtncm91cF07XG4gICAgLy8gY29uc3QgZGF0YSA9IHRoaXMuZ3JvdXBEYXRhW2dyb3VwXTtcbiAgICAvLyBpZiAobGF5ZXIgJiYgZGF0YSkge1xuICAgIC8vICAgbGF5ZXIuc2V0RGF0YShkYXRhKTtcbiAgICAvLyB9XG4gIH1cblxuICB1cGRhdGVTaXplKGl0ZW06IGFueSwgc2NhbGU6IG51bWJlcikge1xuICAgIC8vIGlmIChpdGVtICYmIHRoaXMuZW5sYXJnZU9uU2VsZWN0KSB7XG4gICAgLy8gICBjb25zdCBsYXllciA9IHRoaXMubGF5ZXJNYXBbaXRlbS5wcm9wZXJ0aWVzLmdyb3VwXTtcbiAgICAvLyAgIGxldCBvcHRpb25zOiBhbnk7XG4gICAgLy8gICBpZiAobGF5ZXIgaW5zdGFuY2VvZiBtYXB2Z2wuQ2x1c3RlckxheWVyKSB7XG4gICAgLy8gICAgIG9wdGlvbnMgPSBsYXllci5nZXRPcHRpb25zKCkuaWNvbk9wdGlvbnM7XG4gICAgLy8gICB9IGVsc2Uge1xuICAgIC8vICAgICBvcHRpb25zID0gbGF5ZXIuZ2V0T3B0aW9ucygpO1xuICAgIC8vICAgfVxuICAgIC8vICAgY29uc3QgeyBoZWlnaHQsIHdpZHRoLCBvZmZzZXQgfSA9IG9wdGlvbnM7XG4gICAgLy8gICBpdGVtLnByb3BlcnRpZXMuaGVpZ2h0ID0gaGVpZ2h0ICogc2NhbGU7XG4gICAgLy8gICBpdGVtLnByb3BlcnRpZXMud2lkdGggPSB3aWR0aCAqIHNjYWxlO1xuICAgIC8vICAgaWYgKGl0ZW0ucHJvcGVydGllcy5vZmZzZXQpIHtcbiAgICAvLyAgICAgaXRlbS5wcm9wZXJ0aWVzLm9mZnNldCA9IFtvZmZzZXRbMF0gKiBzY2FsZSwgb2Zmc2V0WzFdICogc2NhbGVdO1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgfVxufVxuIl19