UNPKG

ngx-amap

Version:

[![npm](https://img.shields.io/npm/v/ngx-amap.svg)][npm-badge-url] [![npm](https://img.shields.io/npm/dm/ngx-amap.svg)][npm-badge-url] [![Build Status](https://travis-ci.org/xieziyu/ngx-amap.svg?branch=master)][ci-url]

292 lines 21.9 kB
/** * @fileoverview added by tsickle * Generated from: directives/amap-marker-clusterer/amap-marker-clusterer.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Directive, Input, Output, EventEmitter, ContentChildren, QueryList, NgZone, } from '@angular/core'; import { zip, combineLatest } from 'rxjs'; import { map } from 'rxjs/operators'; import { AmapMarkerClustererService } from './amap-marker-clusterer.service'; import { LoggerService } from '../../shared/logger/logger.service'; import { EventBinderService } from '../../shared/event-binder.service'; import { getOptions, ChangeFilter } from '../../utils'; import { PixelService } from '../../shared/pixel.service'; import { SizeService } from '../../shared/size.service'; import { AmapMarkerDirective } from '../amap-marker/amap-marker.directive'; import { AMapService } from '../../shared/amap.service'; /** @type {?} */ const TAG = 'amap-marker-clusterer'; /** @type {?} */ const MarkerClusterOptions = [ 'gridSize', 'minClusterSize', 'maxZoom', 'averageCenter', 'styles', 'renderClusterMarker', 'zoomOnClick', ]; export class AmapMarkerClustererDirective { /** * @param {?} os * @param {?} binder * @param {?} amaps * @param {?} pixels * @param {?} sizes * @param {?} logger * @param {?} ngZone */ constructor(os, binder, amaps, pixels, sizes, logger, ngZone) { this.os = os; this.binder = binder; this.amaps = amaps; this.pixels = pixels; this.sizes = sizes; this.logger = logger; this.ngZone = ngZone; // ---- Events ---- this.naReady = new EventEmitter(); // amap-marker directives: this.markerList = new QueryList(); this.inited = false; /** @type {?} */ const target = this.os.get(); this.naClick = this.binder.bindEvent(target, 'click'); } /** * @return {?} */ ngOnDestroy() { this.os.destroy(); } /** * @return {?} */ ngOnInit() { this.amaps.get().subscribe((/** * @return {?} */ () => { this.logger.d(TAG, 'initializing ...'); /** @type {?} */ const options = getOptions(this, MarkerClusterOptions); if (options.styles) { options.styles = options.styles.map((/** * @param {?} style * @return {?} */ style => { if (style.size) { style.size = (/** @type {?} */ (this.sizes.create(style.size))); } if (style.offset) { style.offset = this.pixels.create(style.offset); } if (style.imageOffset) { style.imageOffset = this.pixels.create(style.imageOffset); } return style; })); } this.logger.d(TAG, 'options:', options); this.os.create(options).subscribe(); this.inited = true; })); } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { if (!this.inited) { return; } /** @type {?} */ const filter = ChangeFilter.of(changes); /** @type {?} */ const cluster = this.get(); zip(filter.notEmpty('gridSize'), cluster).subscribe((/** * @param {?} __0 * @return {?} */ ([v, c]) => c.setGridSize(v))); zip(filter.notEmpty('minClusterSize'), cluster).subscribe((/** * @param {?} __0 * @return {?} */ ([v, c]) => c.setMinClusterSize(v))); zip(filter.has('maxZoom'), cluster).subscribe((/** * @param {?} __0 * @return {?} */ ([v, c]) => c.setMaxZoom(v))); zip(filter.has('averageCenter'), cluster).subscribe((/** * @param {?} __0 * @return {?} */ ([v, c]) => c.setAverageCenter(v))); zip(filter.has('styles'), cluster).subscribe((/** * @param {?} __0 * @return {?} */ ([v, c]) => c.setStyles(v))); } /** * @return {?} */ ngAfterContentInit() { this.updateMarkers().subscribe((/** * @param {?} c * @return {?} */ c => { this.ngZone.run((/** * @return {?} */ () => this.naReady.emit(c))); this.logger.d(TAG, 'markerClusterer is ready.'); })); this.markerList.changes.subscribe((/** * @return {?} */ () => this.updateMarkers().subscribe())); } /** * @private * @return {?} */ updateMarkers() { return zip(combineLatest(this.markerList.map((/** * @param {?} d * @return {?} */ d => d.get()))), this.get()).pipe(map((/** * @param {?} __0 * @return {?} */ ([markers, cluster]) => { cluster.setMarkers(markers); return cluster; }))); } /** * 获取已创建的 AMap.MarkerClusterer 对象 * @return {?} */ get() { return this.os.get(); } } AmapMarkerClustererDirective.decorators = [ { type: Directive, args: [{ selector: 'amap-marker-clusterer', exportAs: 'marker-clusterer', providers: [AmapMarkerClustererService], },] } ]; /** @nocollapse */ AmapMarkerClustererDirective.ctorParameters = () => [ { type: AmapMarkerClustererService }, { type: EventBinderService }, { type: AMapService }, { type: PixelService }, { type: SizeService }, { type: LoggerService }, { type: NgZone } ]; AmapMarkerClustererDirective.propDecorators = { gridSize: [{ type: Input }], minClusterSize: [{ type: Input }], maxZoom: [{ type: Input }], averageCenter: [{ type: Input }], styles: [{ type: Input }], renderClusterMarker: [{ type: Input }], zoomOnClick: [{ type: Input }], naReady: [{ type: Output }], naClick: [{ type: Output }], markerList: [{ type: ContentChildren, args: [AmapMarkerDirective,] }] }; if (false) { /** * 聚合计算时网格的像素大小,默认60 * @type {?} */ AmapMarkerClustererDirective.prototype.gridSize; /** * 聚合的最小数量。默认值为2,即小于2个点则不能成为一个聚合 * @type {?} */ AmapMarkerClustererDirective.prototype.minClusterSize; /** * 最大的聚合级别,大于该级别就不进行相应的聚合。默认值为18 * @type {?} */ AmapMarkerClustererDirective.prototype.maxZoom; /** * 聚合点的图标位置是否是所有聚合内点的中心点。默认为否 * @type {?} */ AmapMarkerClustererDirective.prototype.averageCenter; /** * 指定聚合后的点标记的图标样式,可缺省,缺省时为默认样式 * @type {?} */ AmapMarkerClustererDirective.prototype.styles; /** * 该方法用来实现聚合点的自定义绘制 * @type {?} */ AmapMarkerClustererDirective.prototype.renderClusterMarker; /** * 点击聚合点时,是否散开,默认值为:true * @type {?} */ AmapMarkerClustererDirective.prototype.zoomOnClick; /** @type {?} */ AmapMarkerClustererDirective.prototype.naReady; /** @type {?} */ AmapMarkerClustererDirective.prototype.naClick; /** @type {?} */ AmapMarkerClustererDirective.prototype.markerList; /** * @type {?} * @private */ AmapMarkerClustererDirective.prototype.inited; /** * @type {?} * @protected */ AmapMarkerClustererDirective.prototype.os; /** * @type {?} * @protected */ AmapMarkerClustererDirective.prototype.binder; /** * @type {?} * @private */ AmapMarkerClustererDirective.prototype.amaps; /** * @type {?} * @private */ AmapMarkerClustererDirective.prototype.pixels; /** * @type {?} * @private */ AmapMarkerClustererDirective.prototype.sizes; /** * @type {?} * @private */ AmapMarkerClustererDirective.prototype.logger; /** * @type {?} * @private */ AmapMarkerClustererDirective.prototype.ngZone; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1hcC1tYXJrZXItY2x1c3RlcmVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1hbWFwLyIsInNvdXJjZXMiOlsiZGlyZWN0aXZlcy9hbWFwLW1hcmtlci1jbHVzdGVyZXIvYW1hcC1tYXJrZXItY2x1c3RlcmVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUdMLE1BQU0sRUFDTixZQUFZLEVBR1osZUFBZSxFQUNmLFNBQVMsRUFFVCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSwwQkFBMEIsRUFBdUIsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7O01BRWxELEdBQUcsR0FBRyx1QkFBdUI7O01BQzdCLG9CQUFvQixHQUFHO0lBQzNCLFVBQVU7SUFDVixnQkFBZ0I7SUFDaEIsU0FBUztJQUNULGVBQWU7SUFDZixRQUFRO0lBQ1IscUJBQXFCO0lBQ3JCLGFBQWE7Q0FDZDtBQU9ELE1BQU0sT0FBTyw0QkFBNEI7Ozs7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Ozs7O0lBSTFCLHNEQUFnQzs7Ozs7SUFJaEMsK0NBQXlCOzs7OztJQUl6QixxREFBZ0M7Ozs7O0lBSWhDLDhDQUFtRDs7Ozs7SUFJbkQsMkRBSVc7Ozs7O0lBSVgsbURBQThCOztJQUc5QiwrQ0FBdUM7O0lBQ3ZDLCtDQUFxQzs7SUFHckMsa0RBQXdGOzs7OztJQUV4Riw4Q0FBdUI7Ozs7O0lBR3JCLDBDQUF3Qzs7Ozs7SUFDeEMsOENBQW9DOzs7OztJQUNwQyw2Q0FBMEI7Ozs7O0lBQzFCLDhDQUE0Qjs7Ozs7SUFDNUIsNkNBQTBCOzs7OztJQUMxQiw4Q0FBNkI7Ozs7O0lBQzdCLDhDQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgT25DaGFuZ2VzLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIFF1ZXJ5TGlzdCxcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgTmdab25lLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHppcCwgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQW1hcE1hcmtlckNsdXN0ZXJlclNlcnZpY2UsIEFNYXBNYXJrZXJDbHVzdGVyZXIgfSBmcm9tICcuL2FtYXAtbWFya2VyLWNsdXN0ZXJlci5zZXJ2aWNlJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvbG9nZ2VyL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IEV2ZW50QmluZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9ldmVudC1iaW5kZXIuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRPcHRpb25zLCBDaGFuZ2VGaWx0ZXIgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBQaXhlbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvcGl4ZWwuc2VydmljZSc7XG5pbXBvcnQgeyBTaXplU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zaXplLnNlcnZpY2UnO1xuaW1wb3J0IHsgQW1hcE1hcmtlckRpcmVjdGl2ZSB9IGZyb20gJy4uL2FtYXAtbWFya2VyL2FtYXAtbWFya2VyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBTWFwU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9hbWFwLnNlcnZpY2UnO1xuXG5jb25zdCBUQUcgPSAnYW1hcC1tYXJrZXItY2x1c3RlcmVyJztcbmNvbnN0IE1hcmtlckNsdXN0ZXJPcHRpb25zID0gW1xuICAnZ3JpZFNpemUnLFxuICAnbWluQ2x1c3RlclNpemUnLFxuICAnbWF4Wm9vbScsXG4gICdhdmVyYWdlQ2VudGVyJyxcbiAgJ3N0eWxlcycsXG4gICdyZW5kZXJDbHVzdGVyTWFya2VyJyxcbiAgJ3pvb21PbkNsaWNrJyxcbl07XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2FtYXAtbWFya2VyLWNsdXN0ZXJlcicsXG4gIGV4cG9ydEFzOiAnbWFya2VyLWNsdXN0ZXJlcicsXG4gIHByb3ZpZGVyczogW0FtYXBNYXJrZXJDbHVzdGVyZXJTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgQW1hcE1hcmtlckNsdXN0ZXJlckRpcmVjdGl2ZVxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudEluaXQge1xuICAvLyAtLS0tIE9wdGlvbnMgLS0tLVxuICAvKipcbiAgICog6IGa5ZCI6K6h566X5pe2572R5qC855qE5YOP57Sg5aSn5bCP77yM6buY6K6kNjBcbiAgICovXG4gIEBJbnB1dCgpIGdyaWRTaXplOiBudW1iZXI7XG4gIC8qKlxuICAgKiDogZrlkIjnmoTmnIDlsI/mlbDph4/jgILpu5jorqTlgLzkuLoy77yM5Y2z5bCP5LqOMuS4queCueWImeS4jeiDveaIkOS4uuS4gOS4quiBmuWQiFxuICAgKi9cbiAgQElucHV0KCkgbWluQ2x1c3RlclNpemU6IG51bWJlcjtcbiAgLyoqXG4gICAqIOacgOWkp+eahOiBmuWQiOe6p+WIq++8jOWkp+S6juivpee6p+WIq+WwseS4jei/m+ihjOebuOW6lOeahOiBmuWQiOOAgum7mOiupOWAvOS4ujE4XG4gICAqL1xuICBASW5wdXQoKSBtYXhab29tOiBudW1iZXI7XG4gIC8qKlxuICAgKiDogZrlkIjngrnnmoTlm77moIfkvY3nva7mmK/lkKbmmK/miYDmnInogZrlkIjlhoXngrnnmoTkuK3lv4PngrnjgILpu5jorqTkuLrlkKZcbiAgICovXG4gIEBJbnB1dCgpIGF2ZXJhZ2VDZW50ZXI6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDmjIflrprogZrlkIjlkI7nmoTngrnmoIforrDnmoTlm77moIfmoLflvI/vvIzlj6/nvLrnnIHvvIznvLrnnIHml7bkuLrpu5jorqTmoLflvI9cbiAgICovXG4gIEBJbnB1dCgpIHN0eWxlczogQU1hcE1hcmtlckNsdXN0ZXJlci5TdHlsZU9iamVjdFtdO1xuICAvKipcbiAgICog6K+l5pa55rOV55So5p2l5a6e546w6IGa5ZCI54K555qE6Ieq5a6a5LmJ57uY5Yi2XG4gICAqL1xuICBASW5wdXQoKSByZW5kZXJDbHVzdGVyTWFya2VyOiAob2JqOiB7XG4gICAgY291bnQ6IG51bWJlcjtcbiAgICBtYXJrZXJzOiBBTWFwLk1hcmtlcjxhbnk+W107XG4gICAgbWFya2VyOiBBTWFwLk1hcmtlcjxhbnk+O1xuICB9KSA9PiB2b2lkO1xuICAvKipcbiAgICog54K55Ye76IGa5ZCI54K55pe277yM5piv5ZCm5pWj5byA77yM6buY6K6k5YC85Li677yadHJ1ZVxuICAgKi9cbiAgQElucHV0KCkgem9vbU9uQ2xpY2s6IGJvb2xlYW47XG5cbiAgLy8gLS0tLSBFdmVudHMgLS0tLVxuICBAT3V0cHV0KCkgbmFSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG5hQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG4gIC8vIGFtYXAtbWFya2VyIGRpcmVjdGl2ZXM6XG4gIEBDb250ZW50Q2hpbGRyZW4oQW1hcE1hcmtlckRpcmVjdGl2ZSkgbWFya2VyTGlzdCA9IG5ldyBRdWVyeUxpc3Q8QW1hcE1hcmtlckRpcmVjdGl2ZT4oKTtcblxuICBwcml2YXRlIGluaXRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvczogQW1hcE1hcmtlckNsdXN0ZXJlclNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGJpbmRlcjogRXZlbnRCaW5kZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYW1hcHM6IEFNYXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGl4ZWxzOiBQaXhlbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzaXplczogU2l6ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5vcy5nZXQoKTtcbiAgICB0aGlzLm5hQ2xpY2sgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQodGFyZ2V0LCAnY2xpY2snKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMub3MuZGVzdHJveSgpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5hbWFwcy5nZXQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5sb2dnZXIuZChUQUcsICdpbml0aWFsaXppbmcgLi4uJyk7XG4gICAgICBjb25zdCBvcHRpb25zID0gZ2V0T3B0aW9uczxBTWFwTWFya2VyQ2x1c3RlcmVyLk9wdGlvbnM+KHRoaXMsIE1hcmtlckNsdXN0ZXJPcHRpb25zKTtcbiAgICAgIGlmIChvcHRpb25zLnN0eWxlcykge1xuICAgICAgICBvcHRpb25zLnN0eWxlcyA9IG9wdGlvbnMuc3R5bGVzLm1hcChzdHlsZSA9PiB7XG4gICAgICAgICAgaWYgKHN0eWxlLnNpemUpIHtcbiAgICAgICAgICAgIHN0eWxlLnNpemUgPSB0aGlzLnNpemVzLmNyZWF0ZShzdHlsZS5zaXplKSBhcyBBTWFwLlNpemU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdHlsZS5vZmZzZXQpIHtcbiAgICAgICAgICAgIHN0eWxlLm9mZnNldCA9IHRoaXMucGl4ZWxzLmNyZWF0ZShzdHlsZS5vZmZzZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3R5bGUuaW1hZ2VPZmZzZXQpIHtcbiAgICAgICAgICAgIHN0eWxlLmltYWdlT2Zmc2V0ID0gdGhpcy5waXhlbHMuY3JlYXRlKHN0eWxlLmltYWdlT2Zmc2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nZ2VyLmQoVEFHLCAnb3B0aW9uczonLCBvcHRpb25zKTtcbiAgICAgIHRoaXMub3MuY3JlYXRlKG9wdGlvbnMpLnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5pbml0ZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmICghdGhpcy5pbml0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyID0gQ2hhbmdlRmlsdGVyLm9mKGNoYW5nZXMpO1xuICAgIGNvbnN0IGNsdXN0ZXIgPSB0aGlzLmdldCgpO1xuICAgIHppcChmaWx0ZXIubm90RW1wdHk8bnVtYmVyPignZ3JpZFNpemUnKSwgY2x1c3Rlcikuc3Vic2NyaWJlKChbdiwgY10pID0+IGMuc2V0R3JpZFNpemUodikpO1xuICAgIHppcChmaWx0ZXIubm90RW1wdHk8bnVtYmVyPignbWluQ2x1c3RlclNpemUnKSwgY2x1c3Rlcikuc3Vic2NyaWJlKChbdiwgY10pID0+XG4gICAgICBjLnNldE1pbkNsdXN0ZXJTaXplKHYpLFxuICAgICk7XG4gICAgemlwKGZpbHRlci5oYXM8bnVtYmVyPignbWF4Wm9vbScpLCBjbHVzdGVyKS5zdWJzY3JpYmUoKFt2LCBjXSkgPT4gYy5zZXRNYXhab29tKHYpKTtcbiAgICB6aXAoZmlsdGVyLmhhczxib29sZWFuPignYXZlcmFnZUNlbnRlcicpLCBjbHVzdGVyKS5zdWJzY3JpYmUoKFt2LCBjXSkgPT4gYy5zZXRBdmVyYWdlQ2VudGVyKHYpKTtcbiAgICB6aXAoZmlsdGVyLmhhczxBTWFwTWFya2VyQ2x1c3RlcmVyLlN0eWxlT2JqZWN0W10+KCdzdHlsZXMnKSwgY2x1c3Rlcikuc3Vic2NyaWJlKChbdiwgY10pID0+XG4gICAgICBjLnNldFN0eWxlcyh2KSxcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMudXBkYXRlTWFya2VycygpLnN1YnNjcmliZShjID0+IHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLm5hUmVhZHkuZW1pdChjKSk7XG4gICAgICB0aGlzLmxvZ2dlci5kKFRBRywgJ21hcmtlckNsdXN0ZXJlciBpcyByZWFkeS4nKTtcbiAgICB9KTtcbiAgICB0aGlzLm1hcmtlckxpc3QuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVNYXJrZXJzKCkuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNYXJrZXJzKCkge1xuICAgIHJldHVybiB6aXAoY29tYmluZUxhdGVzdCh0aGlzLm1hcmtlckxpc3QubWFwKGQgPT4gZC5nZXQoKSkpLCB0aGlzLmdldCgpKS5waXBlKFxuICAgICAgbWFwKChbbWFya2VycywgY2x1c3Rlcl0pID0+IHtcbiAgICAgICAgY2x1c3Rlci5zZXRNYXJrZXJzKG1hcmtlcnMpO1xuICAgICAgICByZXR1cm4gY2x1c3RlcjtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5bey5Yib5bu655qEIEFNYXAuTWFya2VyQ2x1c3RlcmVyIOWvueixoVxuICAgKi9cbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLm9zLmdldCgpO1xuICB9XG59XG4iXX0=