ngx-amap
Version:
[][npm-badge-url] [][npm-badge-url] [][ci-url]
588 lines • 41.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: components/ngx-amap/ngx-amap.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input, ElementRef, Output, EventEmitter, NgZone, } from '@angular/core';
import { zip } from 'rxjs';
import { AMapService } from '../../shared/amap.service';
import { EventBinderService } from '../../shared/event-binder.service';
import { PluginLoaderService } from '../../shared/plugin-loader.service';
import { LoggerService } from '../../shared/logger/logger.service';
import { getOptions, ChangeFilter } from '../../utils';
/** @type {?} */
const TAG = 'ngx-amap';
/** @type {?} */
const ALL_OPTIONS = [
'view',
'layers',
'zoom',
'center',
'labelzIndex',
'zooms',
'lang',
'defaultCursor',
'crs',
'animateEnable',
'isHotspot',
'defaultLayer',
'rotateEnable',
'resizeEnable',
'showIndoorMap',
'indoorMap',
'expandZoomRange',
'dragEnable',
'zoomEnable',
'doubleClickZoom',
'keyboardEnable',
'jogEnable',
'scrollWheel',
'touchZoom',
'touchZoomCenter',
'mapStyle',
'features',
'showBuildingBlock',
'viewMode',
'pitch',
'pitchEnable',
'buildingAnimation',
'skyColor',
'preloadMode',
'mask',
'maxPitch',
'rotation',
'forceVector',
'gridMapForeign',
'vectorMapForeign',
];
export class NgxAmapComponent {
/**
* @param {?} el
* @param {?} amap
* @param {?} pluginLoader
* @param {?} logger
* @param {?} binder
* @param {?} ngZone
*/
constructor(el, amap, pluginLoader, logger, binder, ngZone) {
this.el = el;
this.amap = amap;
this.pluginLoader = pluginLoader;
this.logger = logger;
this.binder = binder;
this.ngZone = ngZone;
// ---- Map Events ----
this.naReady = new EventEmitter();
this.naPluginsLoaded = new EventEmitter();
this.inited = false;
/** @type {?} */
const m = this.amap.get();
this.naComplete = this.binder.bindEvent(m, 'complete');
this.naClick = this.binder.bindEvent(m, 'click');
this.naDblClick = this.binder.bindEvent(m, 'dblclick');
this.naRightClick = this.binder.bindEvent(m, 'rightclick');
this.naMouseMove = this.binder.bindEvent(m, 'mousemove');
this.naMouseOver = this.binder.bindEvent(m, 'mouseover');
this.naMouseWheel = this.binder.bindEvent(m, 'mousewheel');
this.naMouseUp = this.binder.bindEvent(m, 'mouseup');
this.naMouseOut = this.binder.bindEvent(m, 'mouseout');
this.naMouseDown = this.binder.bindEvent(m, 'mousedown');
this.naTouchStart = this.binder.bindEvent(m, 'touchstart');
this.naTouchMove = this.binder.bindEvent(m, 'touchmove');
this.naTouchEnd = this.binder.bindEvent(m, 'touchend');
this.naHotspotClick = this.binder.bindEvent(m, 'hotspotclick');
this.naHotspotOver = this.binder.bindEvent(m, 'hotspotover');
this.naHotspotOut = this.binder.bindEvent(m, 'hotspotout');
this.naDragStart = this.binder.bindEvent(m, 'dragstart');
this.naDragging = this.binder.bindEvent(m, 'dragging');
this.naDragEnd = this.binder.bindEvent(m, 'dragend');
this.naResize = this.binder.bindEvent(m, 'resize');
this.naZoomStart = this.binder.bindEvent(m, 'zoomstart');
this.naZoomEnd = this.binder.bindEvent(m, 'zoomend');
this.naZoomChange = this.binder.bindEvent(m, 'zoomchange');
this.naMoveStart = this.binder.bindEvent(m, 'movestart');
this.naMoveEnd = this.binder.bindEvent(m, 'moveend');
this.naMove = this.binder.bindEvent(m, 'mapmove');
}
/**
* @return {?}
*/
ngOnInit() {
this.logger.d(TAG, 'initializing ...');
/** @type {?} */
const container = this.el.nativeElement.querySelector('div.ngx-amap-container-inner');
/** @type {?} */
const options = getOptions(this, ALL_OPTIONS);
this.logger.d(TAG, 'options:', options);
this.amap.create(container, options).subscribe((/**
* @param {?} amap
* @return {?}
*/
amap => {
this.logger.d(TAG, 'map is ready.');
this.ngZone.run((/**
* @return {?}
*/
() => this.naReady.emit(amap)));
}));
this.inited = true;
}
/**
* @return {?}
*/
ngOnDestroy() {
this.amap.destroy();
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
/** @type {?} */
const filter = ChangeFilter.of(changes);
/** @type {?} */
const amap = this.get();
if (this.inited) {
zip(filter.has('zoom'), amap).subscribe((/**
* @param {?} __0
* @return {?}
*/
([v, m]) => {
this.logger.d(TAG, 'setZoom:', v);
m.setZoom(v);
}));
zip(filter.has('center'), amap).subscribe((/**
* @param {?} __0
* @return {?}
*/
([v, m]) => {
this.logger.d(TAG, 'setCenter:', v);
m.setCenter(v);
}));
}
// Not included in OPTIONS
zip(filter.has('city'), amap).subscribe((/**
* @param {?} __0
* @return {?}
*/
([v, m]) => {
m.setCity(v, (/**
* @return {?}
*/
() => {
this.logger.d(TAG, 'setCity:', v);
}));
}));
zip(filter.notEmpty('plugins'), amap).subscribe((/**
* @param {?} __0
* @return {?}
*/
([v, m]) => {
this.pluginLoader.load(v).subscribe((/**
* @return {?}
*/
() => {
this.logger.d(TAG, 'plugins loaded.');
this.ngZone.run((/**
* @return {?}
*/
() => this.naPluginsLoaded.emit(m)));
}));
}));
}
/**
* 获取已创建的 AMap.Map 对象
* @return {?}
*/
get() {
return this.amap.get();
}
}
NgxAmapComponent.decorators = [
{ type: Component, args: [{
selector: 'ngx-amap',
exportAs: 'amap',
template: "<div class='ngx-amap-container-inner'></div>\n<div class='ngx-amap-content'>\n <ng-content></ng-content>\n</div>",
providers: [AMapService, PluginLoaderService],
styles: [".ngx-amap-container-inner{width:inherit;height:inherit}.ngx-amap-content{display:none}"]
}] }
];
/** @nocollapse */
NgxAmapComponent.ctorParameters = () => [
{ type: ElementRef },
{ type: AMapService },
{ type: PluginLoaderService },
{ type: LoggerService },
{ type: EventBinderService },
{ type: NgZone }
];
NgxAmapComponent.propDecorators = {
view: [{ type: Input }],
layers: [{ type: Input }],
zoom: [{ type: Input }],
center: [{ type: Input }],
labelzIndex: [{ type: Input }],
zooms: [{ type: Input }],
lang: [{ type: Input }],
defaultCursor: [{ type: Input }],
crs: [{ type: Input }],
animateEnable: [{ type: Input }],
isHotspot: [{ type: Input }],
defaultLayer: [{ type: Input }],
rotateEnable: [{ type: Input }],
resizeEnable: [{ type: Input }],
showIndoorMap: [{ type: Input }],
indoorMap: [{ type: Input }],
expandZoomRange: [{ type: Input }],
dragEnable: [{ type: Input }],
zoomEnable: [{ type: Input }],
doubleClickZoom: [{ type: Input }],
keyboardEnable: [{ type: Input }],
jogEnable: [{ type: Input }],
scrollWheel: [{ type: Input }],
touchZoom: [{ type: Input }],
touchZoomCenter: [{ type: Input }],
mapStyle: [{ type: Input }],
features: [{ type: Input }],
showBuildingBlock: [{ type: Input }],
viewMode: [{ type: Input }],
pitch: [{ type: Input }],
pitchEnable: [{ type: Input }],
buildingAnimation: [{ type: Input }],
skyColor: [{ type: Input }],
preloadMode: [{ type: Input }],
mask: [{ type: Input }],
maxPitch: [{ type: Input }],
rotation: [{ type: Input }],
forceVector: [{ type: Input }],
gridMapForeign: [{ type: Input }],
vectorMapForeign: [{ type: Input }],
city: [{ type: Input }],
name: [{ type: Input }],
plugins: [{ type: Input }],
naReady: [{ type: Output }],
naComplete: [{ type: Output }],
naClick: [{ type: Output }],
naDblClick: [{ type: Output }],
naRightClick: [{ type: Output }],
naMouseMove: [{ type: Output }],
naMouseOver: [{ type: Output }],
naMouseWheel: [{ type: Output }],
naMouseUp: [{ type: Output }],
naMouseOut: [{ type: Output }],
naMouseDown: [{ type: Output }],
naTouchStart: [{ type: Output }],
naTouchMove: [{ type: Output }],
naTouchEnd: [{ type: Output }],
naHotspotClick: [{ type: Output }],
naHotspotOver: [{ type: Output }],
naHotspotOut: [{ type: Output }],
naDragStart: [{ type: Output }],
naDragging: [{ type: Output }],
naDragEnd: [{ type: Output }],
naResize: [{ type: Output }],
naZoomStart: [{ type: Output }],
naZoomEnd: [{ type: Output }],
naZoomChange: [{ type: Output }],
naMoveStart: [{ type: Output }],
naMoveEnd: [{ type: Output }],
naMove: [{ type: Output }],
naPluginsLoaded: [{ type: Output }]
};
if (false) {
/**
* 地图视口,用于控制影响地图静态显示的属性
* @type {?}
*/
NgxAmapComponent.prototype.view;
/**
* 地图图层数组,数组可以是图层 中的一个或多个,默认为普通二维地图
* @type {?}
*/
NgxAmapComponent.prototype.layers;
/**
* 地图显示的缩放级别
* @type {?}
*/
NgxAmapComponent.prototype.zoom;
/**
* 地图中心点坐标值
* @type {?}
*/
NgxAmapComponent.prototype.center;
/**
* 地图标注显示顺序
* @type {?}
*/
NgxAmapComponent.prototype.labelzIndex;
/**
* 地图显示的缩放级别范围
* @type {?}
*/
NgxAmapComponent.prototype.zooms;
/**
* 地图语言类型
* @type {?}
*/
NgxAmapComponent.prototype.lang;
/**
* 地图默认鼠标样式
* @type {?}
*/
NgxAmapComponent.prototype.defaultCursor;
/**
* 地图显示的参考坐标系
* @type {?}
*/
NgxAmapComponent.prototype.crs;
/**
* 地图平移过程中是否使用动画
* @type {?}
*/
NgxAmapComponent.prototype.animateEnable;
/**
* 是否开启地图热点和标注的hover效果
* @type {?}
*/
NgxAmapComponent.prototype.isHotspot;
/**
* 当前地图中默认显示的图层
* @type {?}
*/
NgxAmapComponent.prototype.defaultLayer;
/**
* 地图是否可旋转
* @type {?}
*/
NgxAmapComponent.prototype.rotateEnable;
/**
* 是否监控地图容器尺寸变化
* @type {?}
*/
NgxAmapComponent.prototype.resizeEnable;
/**
* 是否在有矢量底图的时候自动展示室内地图
* @type {?}
*/
NgxAmapComponent.prototype.showIndoorMap;
/**
* 在展示矢量图的时候自动展示室内地图图层
* @type {?}
*/
NgxAmapComponent.prototype.indoorMap;
/**
* 是否支持可以扩展最大缩放级别
* @type {?}
*/
NgxAmapComponent.prototype.expandZoomRange;
/**
* 地图是否可通过鼠标拖拽平移
* @type {?}
*/
NgxAmapComponent.prototype.dragEnable;
/**
* 地图是否可缩放
* @type {?}
*/
NgxAmapComponent.prototype.zoomEnable;
/**
* 地图是否可通过双击鼠标放大地图
* @type {?}
*/
NgxAmapComponent.prototype.doubleClickZoom;
/**
* 地图是否可通过键盘控制
* @type {?}
*/
NgxAmapComponent.prototype.keyboardEnable;
/**
* 地图是否使用缓动效果
* @type {?}
*/
NgxAmapComponent.prototype.jogEnable;
/**
* 地图是否可通过鼠标滚轮缩放浏览
* @type {?}
*/
NgxAmapComponent.prototype.scrollWheel;
/**
* 地图在移动终端上是否可通过多点触控缩放浏览地图
* @type {?}
*/
NgxAmapComponent.prototype.touchZoom;
/**
* 当touchZoomCenter=1的时候,手机端双指缩放的以地图中心为中心,否则默认以双指中间点为中心
* @type {?}
*/
NgxAmapComponent.prototype.touchZoomCenter;
/**
* 设置地图的显示样式
* @type {?}
*/
NgxAmapComponent.prototype.mapStyle;
/**
* 设置地图上显示的元素种类
* @type {?}
*/
NgxAmapComponent.prototype.features;
/**
* 设置地图显示3D楼块效果
* @type {?}
*/
NgxAmapComponent.prototype.showBuildingBlock;
/**
* 视图模式
* @type {?}
*/
NgxAmapComponent.prototype.viewMode;
/**
* 俯仰角度
* @type {?}
*/
NgxAmapComponent.prototype.pitch;
/**
* 是否允许设置俯仰角度
* @type {?}
*/
NgxAmapComponent.prototype.pitchEnable;
/**
* 楼块出现和消失的时候是否显示动画过程
* @type {?}
*/
NgxAmapComponent.prototype.buildingAnimation;
/**
* 调整天空颜色
* @type {?}
*/
NgxAmapComponent.prototype.skyColor;
/**
* 设置地图的预加载模式
* @type {?}
*/
NgxAmapComponent.prototype.preloadMode;
/**
* 为 Map 实例指定掩模的路径,各图层将只显示路径范围内图像
* @type {?}
*/
NgxAmapComponent.prototype.mask;
/** @type {?} */
NgxAmapComponent.prototype.maxPitch;
/** @type {?} */
NgxAmapComponent.prototype.rotation;
/** @type {?} */
NgxAmapComponent.prototype.forceVector;
/** @type {?} */
NgxAmapComponent.prototype.gridMapForeign;
/**
* 额外: 海外⽮量地图样式
* @type {?}
*/
NgxAmapComponent.prototype.vectorMapForeign;
/**
* 额外: 设置城市
* @type {?}
*/
NgxAmapComponent.prototype.city;
/**
* 额外: 设置地图名
* @type {?}
*/
NgxAmapComponent.prototype.name;
/**
* 额外:加载插件
* @type {?}
*/
NgxAmapComponent.prototype.plugins;
/** @type {?} */
NgxAmapComponent.prototype.naReady;
/** @type {?} */
NgxAmapComponent.prototype.naComplete;
/** @type {?} */
NgxAmapComponent.prototype.naClick;
/** @type {?} */
NgxAmapComponent.prototype.naDblClick;
/** @type {?} */
NgxAmapComponent.prototype.naRightClick;
/** @type {?} */
NgxAmapComponent.prototype.naMouseMove;
/** @type {?} */
NgxAmapComponent.prototype.naMouseOver;
/** @type {?} */
NgxAmapComponent.prototype.naMouseWheel;
/** @type {?} */
NgxAmapComponent.prototype.naMouseUp;
/** @type {?} */
NgxAmapComponent.prototype.naMouseOut;
/** @type {?} */
NgxAmapComponent.prototype.naMouseDown;
/** @type {?} */
NgxAmapComponent.prototype.naTouchStart;
/** @type {?} */
NgxAmapComponent.prototype.naTouchMove;
/** @type {?} */
NgxAmapComponent.prototype.naTouchEnd;
/** @type {?} */
NgxAmapComponent.prototype.naHotspotClick;
/** @type {?} */
NgxAmapComponent.prototype.naHotspotOver;
/** @type {?} */
NgxAmapComponent.prototype.naHotspotOut;
/** @type {?} */
NgxAmapComponent.prototype.naDragStart;
/** @type {?} */
NgxAmapComponent.prototype.naDragging;
/** @type {?} */
NgxAmapComponent.prototype.naDragEnd;
/** @type {?} */
NgxAmapComponent.prototype.naResize;
/** @type {?} */
NgxAmapComponent.prototype.naZoomStart;
/** @type {?} */
NgxAmapComponent.prototype.naZoomEnd;
/** @type {?} */
NgxAmapComponent.prototype.naZoomChange;
/** @type {?} */
NgxAmapComponent.prototype.naMoveStart;
/** @type {?} */
NgxAmapComponent.prototype.naMoveEnd;
/** @type {?} */
NgxAmapComponent.prototype.naMove;
/** @type {?} */
NgxAmapComponent.prototype.naPluginsLoaded;
/**
* @type {?}
* @private
*/
NgxAmapComponent.prototype.inited;
/**
* @type {?}
* @private
*/
NgxAmapComponent.prototype.el;
/**
* @type {?}
* @private
*/
NgxAmapComponent.prototype.amap;
/**
* @type {?}
* @private
*/
NgxAmapComponent.prototype.pluginLoader;
/**
* @type {?}
* @private
*/
NgxAmapComponent.prototype.logger;
/**
* @type {?}
* @private
*/
NgxAmapComponent.prototype.binder;
/**
* @type {?}
* @private
*/
NgxAmapComponent.prototype.ngZone;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWFtYXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWFtYXAvIiwic291cmNlcyI6WyJjb21wb25lbnRzL25neC1hbWFwL25neC1hbWFwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLFVBQVUsRUFFVixNQUFNLEVBQ04sWUFBWSxFQUdaLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7O01BRWpELEdBQUcsR0FBRyxVQUFVOztNQUNoQixXQUFXLEdBQUc7SUFDbEIsTUFBTTtJQUNOLFFBQVE7SUFDUixNQUFNO0lBQ04sUUFBUTtJQUNSLGFBQWE7SUFDYixPQUFPO0lBQ1AsTUFBTTtJQUNOLGVBQWU7SUFDZixLQUFLO0lBQ0wsZUFBZTtJQUNmLFdBQVc7SUFDWCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxlQUFlO0lBQ2YsV0FBVztJQUNYLGlCQUFpQjtJQUNqQixZQUFZO0lBQ1osWUFBWTtJQUNaLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsV0FBVztJQUNYLGFBQWE7SUFDYixXQUFXO0lBQ1gsaUJBQWlCO0lBQ2pCLFVBQVU7SUFDVixVQUFVO0lBQ1YsbUJBQW1CO0lBQ25CLFVBQVU7SUFDVixPQUFPO0lBQ1AsYUFBYTtJQUNiLG1CQUFtQjtJQUNuQixVQUFVO0lBQ1YsYUFBYTtJQUNiLE1BQU07SUFDTixVQUFVO0lBQ1YsVUFBVTtJQUNWLGFBQWE7SUFDYixnQkFBZ0I7SUFDaEIsa0JBQWtCO0NBQ25CO0FBU0QsTUFBTSxPQUFPLGdCQUFnQjs7Ozs7Ozs7O0lBb00zQixZQUNVLEVBQWMsRUFDZCxJQUFpQixFQUNqQixZQUFpQyxFQUNqQyxNQUFxQixFQUNyQixNQUEwQixFQUMxQixNQUFjO1FBTGQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFDMUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTs7UUFyQ2QsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUEyQjdCLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUVqRCxXQUFNLEdBQUcsS0FBSyxDQUFDOztjQVVmLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMzRCxJQUFJ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OztJQUM5QiwwQ0FBaUM7Ozs7O0lBSWpDLDRDQUFrQzs7Ozs7SUFLbEMsZ0NBQXNCOzs7OztJQUl0QixnQ0FBc0I7Ozs7O0lBSXRCLG1DQUEyQjs7SUFHM0IsbUNBQXVDOztJQUN2QyxzQ0FBd0M7O0lBQ3hDLG1DQUFxQzs7SUFDckMsc0NBQXdDOztJQUN4Qyx3Q0FBMEM7O0lBQzFDLHVDQUF5Qzs7SUFDekMsdUNBQXlDOztJQUN6Qyx3Q0FBMEM7O0lBQzFDLHFDQUF1Qzs7SUFDdkMsc0NBQXdDOztJQUN4Qyx1Q0FBeUM7O0lBQ3pDLHdDQUEwQzs7SUFDMUMsdUNBQXlDOztJQUN6QyxzQ0FBd0M7O0lBQ3hDLDBDQUE0Qzs7SUFDNUMseUNBQTJDOztJQUMzQyx3Q0FBMEM7O0lBQzFDLHVDQUF5Qzs7SUFDekMsc0NBQXdDOztJQUN4QyxxQ0FBdUM7O0lBQ3ZDLG9DQUFzQzs7SUFDdEMsdUNBQXlDOztJQUN6QyxxQ0FBdUM7O0lBQ3ZDLHdDQUEwQzs7SUFDMUMsdUNBQXlDOztJQUN6QyxxQ0FBdUM7O0lBQ3ZDLGtDQUFvQzs7SUFDcEMsMkNBQXlEOzs7OztJQUV6RCxrQ0FBdUI7Ozs7O0lBR3JCLDhCQUFzQjs7Ozs7SUFDdEIsZ0NBQXlCOzs7OztJQUN6Qix3Q0FBeUM7Ozs7O0lBQ3pDLGtDQUE2Qjs7Ozs7SUFDN0Isa0NBQWtDOzs7OztJQUNsQyxrQ0FBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE9uQ2hhbmdlcyxcbiAgTmdab25lLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHppcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQU1hcFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvYW1hcC5zZXJ2aWNlJztcbmltcG9ydCB7IEV2ZW50QmluZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9ldmVudC1iaW5kZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQbHVnaW5Mb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3BsdWdpbi1sb2FkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRPcHRpb25zLCBDaGFuZ2VGaWx0ZXIgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmNvbnN0IFRBRyA9ICduZ3gtYW1hcCc7XG5jb25zdCBBTExfT1BUSU9OUyA9IFtcbiAgJ3ZpZXcnLFxuICAnbGF5ZXJzJyxcbiAgJ3pvb20nLFxuICAnY2VudGVyJyxcbiAgJ2xhYmVsekluZGV4JyxcbiAgJ3pvb21zJyxcbiAgJ2xhbmcnLFxuICAnZGVmYXVsdEN1cnNvcicsXG4gICdjcnMnLFxuICAnYW5pbWF0ZUVuYWJsZScsXG4gICdpc0hvdHNwb3QnLFxuICAnZGVmYXVsdExheWVyJyxcbiAgJ3JvdGF0ZUVuYWJsZScsXG4gICdyZXNpemVFbmFibGUnLFxuICAnc2hvd0luZG9vck1hcCcsXG4gICdpbmRvb3JNYXAnLFxuICAnZXhwYW5kWm9vbVJhbmdlJyxcbiAgJ2RyYWdFbmFibGUnLFxuICAnem9vbUVuYWJsZScsXG4gICdkb3VibGVDbGlja1pvb20nLFxuICAna2V5Ym9hcmRFbmFibGUnLFxuICAnam9nRW5hYmxlJyxcbiAgJ3Njcm9sbFdoZWVsJyxcbiAgJ3RvdWNoWm9vbScsXG4gICd0b3VjaFpvb21DZW50ZXInLFxuICAnbWFwU3R5bGUnLFxuICAnZmVhdHVyZXMnLFxuICAnc2hvd0J1aWxkaW5nQmxvY2snLFxuICAndmlld01vZGUnLFxuICAncGl0Y2gnLFxuICAncGl0Y2hFbmFibGUnLFxuICAnYnVpbGRpbmdBbmltYXRpb24nLFxuICAnc2t5Q29sb3InLFxuICAncHJlbG9hZE1vZGUnLFxuICAnbWFzaycsXG4gICdtYXhQaXRjaCcsXG4gICdyb3RhdGlvbicsXG4gICdmb3JjZVZlY3RvcicsXG4gICdncmlkTWFwRm9yZWlnbicsXG4gICd2ZWN0b3JNYXBGb3JlaWduJyxcbl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1hbWFwJyxcbiAgZXhwb3J0QXM6ICdhbWFwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25neC1hbWFwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbmd4LWFtYXAuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbQU1hcFNlcnZpY2UsIFBsdWdpbkxvYWRlclNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hBbWFwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIC8vIC0tLS0gTWFwIE9wdGlvbnMgLS0tLVxuICAvKipcbiAgICog5Zyw5Zu+6KeG5Y+j77yM55So5LqO5o6n5Yi25b2x5ZON5Zyw5Zu+6Z2Z5oCB5pi+56S655qE5bGe5oCnXG4gICAqL1xuICBASW5wdXQoKSB2aWV3OiBBTWFwLlZpZXcyRDtcbiAgLyoqXG4gICAqIOWcsOWbvuWbvuWxguaVsOe7hO+8jOaVsOe7hOWPr+S7peaYr+WbvuWxgiDkuK3nmoTkuIDkuKrmiJblpJrkuKrvvIzpu5jorqTkuLrmma7pgJrkuoznu7TlnLDlm75cbiAgICovXG4gIEBJbnB1dCgpIGxheWVyczogQU1hcC5MYXllcltdO1xuICAvKipcbiAgICog5Zyw5Zu+5pi+56S655qE57yp5pS+57qn5YirXG4gICAqL1xuICBASW5wdXQoKSB6b29tOiBudW1iZXI7XG4gIC8qKlxuICAgKiDlnLDlm77kuK3lv4PngrnlnZDmoIflgLxcbiAgICovXG4gIEBJbnB1dCgpIGNlbnRlcjogQU1hcC5Mb2NhdGlvblZhbHVlO1xuICAvKipcbiAgICog5Zyw5Zu+5qCH5rOo5pi+56S66aG65bqPXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbHpJbmRleDogbnVtYmVyO1xuICAvKipcbiAgICog5Zyw5Zu+5pi+56S655qE57yp5pS+57qn5Yir6IyD5Zu0XG4gICAqL1xuICBASW5wdXQoKSB6b29tczogW251bWJlciwgbnVtYmVyXTtcbiAgLyoqXG4gICAqIOWcsOWbvuivreiogOexu+Wei1xuICAgKi9cbiAgQElucHV0KCkgbGFuZzogQU1hcC5MYW5nO1xuICAvKipcbiAgICog5Zyw5Zu+6buY6K6k6byg5qCH5qC35byPXG4gICAqL1xuICBASW5wdXQoKSBkZWZhdWx0Q3Vyc29yOiBzdHJpbmc7XG4gIC8qKlxuICAgKiDlnLDlm77mmL7npLrnmoTlj4LogIPlnZDmoIfns7tcbiAgICovXG4gIEBJbnB1dCgpIGNyczogJ0VQU0czODU3JyB8ICdFUFNHMzM5NScgfCAnRVBTRzQzMjYnO1xuICAvKipcbiAgICog5Zyw5Zu+5bmz56e76L+H56iL5Lit5piv5ZCm5L2/55So5Yqo55S7XG4gICAqL1xuICBASW5wdXQoKSBhbmltYXRlRW5hYmxlOiBib29sZWFuO1xuICAvKipcbiAgICog5piv5ZCm5byA5ZCv5Zyw5Zu+54Ot54K55ZKM5qCH5rOo55qEaG92ZXLmlYjmnpxcbiAgICovXG4gIEBJbnB1dCgpIGlzSG90c3BvdDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOW9k+WJjeWcsOWbvuS4rem7mOiupOaYvuekuueahOWbvuWxglxuICAgKi9cbiAgQElucHV0KCkgZGVmYXVsdExheWVyOiBBTWFwLlRpbGVMYXllcjtcbiAgLyoqXG4gICAqIOWcsOWbvuaYr+WQpuWPr+aXi+i9rFxuICAgKi9cbiAgQElucHV0KCkgcm90YXRlRW5hYmxlOiBib29sZWFuO1xuICAvKipcbiAgICog5piv5ZCm55uR5o6n5Zyw5Zu+5a655Zmo5bC65a+45Y+Y5YyWXG4gICAqL1xuICBASW5wdXQoKSByZXNpemVFbmFibGU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDmmK/lkKblnKjmnInnn6Lph4/lupXlm77nmoTml7blgJnoh6rliqjlsZXnpLrlrqTlhoXlnLDlm75cbiAgICovXG4gIEBJbnB1dCgpIHNob3dJbmRvb3JNYXA6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDlnKjlsZXnpLrnn6Lph4/lm77nmoTml7blgJnoh6rliqjlsZXnpLrlrqTlhoXlnLDlm77lm77lsYJcbiAgICovXG4gIEBJbnB1dCgpIGluZG9vck1hcDogYW55O1xuICAvKipcbiAgICog5piv5ZCm5pSv5oyB5Y+v5Lul5omp5bGV5pyA5aSn57yp5pS+57qn5YirXG4gICAqL1xuICBASW5wdXQoKSBleHBhbmRab29tUmFuZ2U6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDlnLDlm77mmK/lkKblj6/pgJrov4fpvKDmoIfmi5bmi73lubPnp7tcbiAgICovXG4gIEBJbnB1dCgpIGRyYWdFbmFibGU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDlnLDlm77mmK/lkKblj6/nvKnmlL5cbiAgICovXG4gIEBJbnB1dCgpIHpvb21FbmFibGU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDlnLDlm77mmK/lkKblj6/pgJrov4flj4zlh7vpvKDmoIfmlL7lpKflnLDlm75cbiAgICovXG4gIEBJbnB1dCgpIGRvdWJsZUNsaWNrWm9vbTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOWcsOWbvuaYr+WQpuWPr+mAmui/h+mUruebmOaOp+WItlxuICAgKi9cbiAgQElucHV0KCkga2V5Ym9hcmRFbmFibGU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDlnLDlm77mmK/lkKbkvb/nlKjnvJPliqjmlYjmnpxcbiAgICovXG4gIEBJbnB1dCgpIGpvZ0VuYWJsZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOWcsOWbvuaYr+WQpuWPr+mAmui/h+m8oOagh+a7mui9rue8qeaUvua1j+iniFxuICAgKi9cbiAgQElucHV0KCkgc2Nyb2xsV2hlZWw6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDlnLDlm77lnKjnp7vliqjnu4jnq6/kuIrmmK/lkKblj6/pgJrov4flpJrngrnop6bmjqfnvKnmlL7mtY/op4jlnLDlm75cbiAgICovXG4gIEBJbnB1dCgpIHRvdWNoWm9vbTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOW9k3RvdWNoWm9vbUNlbnRlcj0x55qE5pe25YCZ77yM5omL5py656uv5Y+M5oyH57yp5pS+55qE5Lul5Zyw5Zu+5Lit5b+D5Li65Lit5b+D77yM5ZCm5YiZ6buY6K6k5Lul5Y+M5oyH5Lit6Ze054K55Li65Lit5b+DXG4gICAqL1xuICBASW5wdXQoKSB0b3VjaFpvb21DZW50ZXI6IG51bWJlcjtcbiAgLyoqXG4gICAqIOiuvue9ruWcsOWbvueahOaYvuekuuagt+W8j1xuICAgKi9cbiAgQElucHV0KCkgbWFwU3R5bGU6IHN0cmluZztcbiAgLyoqXG4gICAqIOiuvue9ruWcsOWbvuS4iuaYvuekuueahOWFg+e0oOenjeexu1xuICAgKi9cbiAgQElucHV0KCkgZmVhdHVyZXM6IEFNYXAuTWFwLkZlYXR1cmVbXSB8ICdhbGwnIHwgQU1hcC5NYXAuRmVhdHVyZTtcbiAgLyoqXG4gICAqIOiuvue9ruWcsOWbvuaYvuekujNE5qW85Z2X5pWI5p6cXG4gICAqL1xuICBASW5wdXQoKSBzaG93QnVpbGRpbmdCbG9jazogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOinhuWbvuaooeW8j1xuICAgKi9cbiAgQElucHV0KCkgdmlld01vZGU6IEFNYXAuTWFwLlZpZXdNb2RlO1xuICAvKipcbiAgICog5L+v5Luw6KeS5bqmXG4gICAqL1xuICBASW5wdXQoKSBwaXRjaDogbnVtYmVyO1xuICAvKipcbiAgICog5piv5ZCm5YWB6K646K6+572u5L+v5Luw6KeS5bqmXG4gICAqL1xuICBASW5wdXQoKSBwaXRjaEVuYWJsZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOalvOWdl+WHuueOsOWSjOa2iOWkseeahOaXtuWAmeaYr+WQpuaYvuekuuWKqOeUu+i/h+eoi1xuICAgKi9cbiAgQElucHV0KCkgYnVpbGRpbmdBbmltYXRpb246IGJvb2xlYW47XG4gIC8qKlxuICAgKiDosIPmlbTlpKnnqbrpopzoibJcbiAgICovXG4gIEBJbnB1dCgpIHNreUNvbG9yOiBzdHJpbmc7XG4gIC8qKlxuICAgKiDorr7nva7lnLDlm77nmoTpooTliqDovb3mqKHlvI9cbiAgICovXG4gIEBJbnB1dCgpIHByZWxvYWRNb2RlOiBib29sZWFuO1xuICAvKipcbiAgICog5Li6IE1hcCDlrp7kvovmjIflrprmjqnmqKHnmoTot6/lvoTvvIzlkITlm77lsYLlsIblj6rmmL7npLrot6/lvoTojIPlm7TlhoXlm77lg49cbiAgICovXG4gIEBJbnB1dCgpIG1hc2s6IFtudW1iZXIsIG51bWJlcl1bXSB8IFtudW1iZXIsIG51bWJlcl1bXVtdIHwgW251bWJlciwgbnVtYmVyXVtdW11bXTtcbiAgQElucHV0KCkgbWF4UGl0Y2g6IG51bWJlcjtcbiAgQElucHV0KCkgcm90YXRpb246IG51bWJlcjtcbiAgQElucHV0KCkgZm9yY2VWZWN0b3I6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGdyaWRNYXBGb3JlaWduOiBib29sZWFuO1xuICAvKipcbiAgICog6aKd5aSWOiDmtbflpJbiva7ph4/lnLDlm77moLflvI9cbiAgICovXG4gIEBJbnB1dCgpIHZlY3Rvck1hcEZvcmVpZ246IHN0cmluZztcblxuICAvKipcbiAgICog6aKd5aSWOiDorr7nva7ln47luIJcbiAgICovXG4gIEBJbnB1dCgpIGNpdHk6IHN0cmluZztcbiAgLyoqXG4gICAqIOmineWkljog6K6+572u5Zyw5Zu+5ZCNXG4gICAqL1xuICBASW5wdXQoKSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiDpop3lpJbvvJrliqDovb3mj5Lku7ZcbiAgICovXG4gIEBJbnB1dCgpIHBsdWdpbnM6IHN0cmluZ1tdO1xuXG4gIC8vIC0tLS0gTWFwIEV2ZW50cyAtLS0tXG4gIEBPdXRwdXQoKSBuYVJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgbmFDb21wbGV0ZTogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYUNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hRGJsQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFSaWdodENsaWNrOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hTW91c2VNb3ZlOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hTW91c2VPdmVyOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hTW91c2VXaGVlbDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYU1vdXNlVXA6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFNb3VzZU91dDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYU1vdXNlRG93bjogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYVRvdWNoU3RhcnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFUb3VjaE1vdmU6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFUb3VjaEVuZDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYUhvdHNwb3RDbGljazogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYUhvdHNwb3RPdmVyOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hSG90c3BvdE91dDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYURyYWdTdGFydDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYURyYWdnaW5nOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hRHJhZ0VuZDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYVJlc2l6ZTogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYVpvb21TdGFydDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYVpvb21FbmQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFab29tQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hTW92ZVN0YXJ0OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hTW92ZUVuZDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYU1vdmU6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFQbHVnaW5zTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxBTWFwLk1hcD4oKTtcblxuICBwcml2YXRlIGluaXRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBhbWFwOiBBTWFwU2VydmljZSxcbiAgICBwcml2YXRlIHBsdWdpbkxvYWRlcjogUGx1Z2luTG9hZGVyU2VydmljZSxcbiAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIGJpbmRlcjogRXZlbnRCaW5kZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICkge1xuICAgIGNvbnN0IG0gPSB0aGlzLmFtYXAuZ2V0KCk7XG4gICAgdGhpcy5uYUNvbXBsZXRlID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICdjb21wbGV0ZScpO1xuICAgIHRoaXMubmFDbGljayA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAnY2xpY2snKTtcbiAgICB0aGlzLm5hRGJsQ2xpY2sgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ2RibGNsaWNrJyk7XG4gICAgdGhpcy5uYVJpZ2h0Q2xpY2sgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ3JpZ2h0Y2xpY2snKTtcbiAgICB0aGlzLm5hTW91c2VNb3ZlID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICdtb3VzZW1vdmUnKTtcbiAgICB0aGlzLm5hTW91c2VPdmVyID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICdtb3VzZW92ZXInKTtcbiAgICB0aGlzLm5hTW91c2VXaGVlbCA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAnbW91c2V3aGVlbCcpO1xuICAgIHRoaXMubmFNb3VzZVVwID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICdtb3VzZXVwJyk7XG4gICAgdGhpcy5uYU1vdXNlT3V0ID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICdtb3VzZW91dCcpO1xuICAgIHRoaXMubmFNb3VzZURvd24gPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ21vdXNlZG93bicpO1xuICAgIHRoaXMubmFUb3VjaFN0YXJ0ID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICd0b3VjaHN0YXJ0Jyk7XG4gICAgdGhpcy5uYVRvdWNoTW92ZSA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAndG91Y2htb3ZlJyk7XG4gICAgdGhpcy5uYVRvdWNoRW5kID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICd0b3VjaGVuZCcpO1xuICAgIHRoaXMubmFIb3RzcG90Q2xpY2sgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ2hvdHNwb3RjbGljaycpO1xuICAgIHRoaXMubmFIb3RzcG90T3ZlciA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAnaG90c3BvdG92ZXInKTtcbiAgICB0aGlzLm5hSG90c3BvdE91dCA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAnaG90c3BvdG91dCcpO1xuICAgIHRoaXMubmFEcmFnU3RhcnQgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ2RyYWdzdGFydCcpO1xuICAgIHRoaXMubmFEcmFnZ2luZyA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAnZHJhZ2dpbmcnKTtcbiAgICB0aGlzLm5hRHJhZ0VuZCA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAnZHJhZ2VuZCcpO1xuICAgIHRoaXMubmFSZXNpemUgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ3Jlc2l6ZScpO1xuICAgIHRoaXMubmFab29tU3RhcnQgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ3pvb21zdGFydCcpO1xuICAgIHRoaXMubmFab29tRW5kID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICd6b29tZW5kJyk7XG4gICAgdGhpcy5uYVpvb21DaGFuZ2UgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ3pvb21jaGFuZ2UnKTtcbiAgICB0aGlzLm5hTW92ZVN0YXJ0ID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICdtb3Zlc3RhcnQnKTtcbiAgICB0aGlzLm5hTW92ZUVuZCA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAnbW92ZWVuZCcpO1xuICAgIHRoaXMubmFNb3ZlID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICdtYXBtb3ZlJyk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvZ2dlci5kKFRBRywgJ2luaXRpYWxpemluZyAuLi4nKTtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignZGl2Lm5neC1hbWFwLWNvbnRhaW5lci1pbm5lcicpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25zPEFNYXAuTWFwLk9wdGlvbnM+KHRoaXMsIEFMTF9PUFRJT05TKTtcbiAgICB0aGlzLmxvZ2dlci5kKFRBRywgJ29wdGlvbnM6Jywgb3B0aW9ucyk7XG4gICAgdGhpcy5hbWFwLmNyZWF0ZShjb250YWluZXIsIG9wdGlvbnMpLnN1YnNjcmliZShhbWFwID0+IHtcbiAgICAgIHRoaXMubG9nZ2VyLmQoVEFHLCAnbWFwIGlzIHJlYWR5LicpO1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMubmFSZWFkeS5lbWl0KGFtYXApKTtcbiAgICB9KTtcbiAgICB0aGlzLmluaXRlZCA9IHRydWU7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmFtYXAuZGVzdHJveSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGNvbnN0IGZpbHRlciA9IENoYW5nZUZpbHRlci5vZihjaGFuZ2VzKTtcbiAgICBjb25zdCBhbWFwID0gdGhpcy5nZXQoKTtcblxuICAgIGlmICh0aGlzLmluaXRlZCkge1xuICAgICAgemlwKGZpbHRlci5oYXM8bnVtYmVyPignem9vbScpLCBhbWFwKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT4ge1xuICAgICAgICB0aGlzLmxvZ2dlci5kKFRBRywgJ3NldFpvb206Jywgdik7XG4gICAgICAgIG0uc2V0Wm9vbSh2KTtcbiAgICAgIH0pO1xuICAgICAgemlwKGZpbHRlci5oYXM8QU1hcC5Mb2NhdGlvblZhbHVlPignY2VudGVyJyksIGFtYXApLnN1YnNjcmliZSgoW3YsIG1dKSA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmQoVEFHLCAnc2V0Q2VudGVyOicsIHYpO1xuICAgICAgICBtLnNldENlbnRlcih2KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE5vdCBpbmNsdWRlZCBpbiBPUFRJT05TXG4gICAgemlwKGZpbHRlci5oYXM8c3RyaW5nPignY2l0eScpLCBhbWFwKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT4ge1xuICAgICAgbS5zZXRDaXR5KHYsICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZChUQUcsICdzZXRDaXR5OicsIHYpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgemlwKGZpbHRlci5ub3RFbXB0eTxzdHJpbmdbXT4oJ3BsdWdpbnMnKSwgYW1hcCkuc3Vic2NyaWJlKChbdiwgbV0pID0+IHtcbiAgICAgIHRoaXMucGx1Z2luTG9hZGVyLmxvYWQodikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZChUQUcsICdwbHVnaW5zIGxvYWRlZC4nKTtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMubmFQbHVnaW5zTG9hZGVkLmVtaXQobSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5bey5Yib5bu655qEIEFNYXAuTWFwIOWvueixoVxuICAgKi9cbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmFtYXAuZ2V0KCk7XG4gIH1cbn1cbiJdfQ==