UNPKG

angular-cesium-ivy

Version:
256 lines 32.2 kB
import { DOCUMENT } from '@angular/common'; import { Component, Inject, Input } from '@angular/core'; import { CesiumService } from '../../services/cesium/cesium.service'; import { CameraService } from '../../services/camera/camera.service'; import { ContextMenuService } from '../../services/context-menu/context-menu.service'; import { CoordinateConverter } from '../../services/coordinate-converter/coordinate-converter.service'; import { ArcDrawerService } from '../../services/drawers/arc-drawer/arc-drawer.service'; import { BillboardDrawerService } from '../../services/drawers/billboard-drawer/billboard-drawer.service'; import { CzmlDrawerService } from '../../services/drawers/czml-drawer/czml-drawer.service'; import { EllipseDrawerService } from '../../services/drawers/ellipse-drawer/ellipse-drawer.service'; import { LabelDrawerService } from '../../services/drawers/label-drawer/label-drawer.service'; import { PointDrawerService } from '../../services/drawers/point-drawer/point-drawer.service'; import { PolygonDrawerService } from '../../services/drawers/polygon-drawer/polygon-drawer.service'; import { PolylineDrawerService } from '../../services/drawers/polyline-drawer/polyline-drawer.service'; import { PolylinePrimitiveDrawerService } from '../../services/drawers/polyline-primitive-drawer/polyline-primitive-drawer.service'; import { KeyboardControlService } from '../../services/keyboard-control/keyboard-control.service'; import { CesiumEventBuilder } from '../../services/map-events-mananger/cesium-event-builder'; import { MapEventsManagerService } from '../../services/map-events-mananger/map-events-manager'; import { MapLayersService } from '../../services/map-layers/map-layers.service'; import { PlonterService } from '../../services/plonter/plonter.service'; import { ScreenshotService } from '../../services/screenshot/screenshot.service'; import * as i0 from "@angular/core"; import * as i1 from "../../services/cesium/cesium.service"; import * as i2 from "../../services/camera/camera.service"; import * as i3 from "../../services/maps-manager/maps-manager.service"; import * as i4 from "../../services/drawers/billboard-drawer/billboard-drawer.service"; import * as i5 from "../../services/drawers/label-drawer/label-drawer.service"; import * as i6 from "../../services/drawers/ellipse-drawer/ellipse-drawer.service"; import * as i7 from "../../services/drawers/polyline-drawer/polyline-drawer.service"; import * as i8 from "../../services/drawers/polygon-drawer/polygon-drawer.service"; import * as i9 from "../../services/drawers/arc-drawer/arc-drawer.service"; import * as i10 from "../../services/drawers/point-drawer/point-drawer.service"; import * as i11 from "../../services/drawers/czml-drawer/czml-drawer.service"; import * as i12 from "../../services/map-events-mananger/map-events-manager"; import * as i13 from "../../services/keyboard-control/keyboard-control.service"; import * as i14 from "../../services/map-layers/map-layers.service"; import * as i15 from "../../cesium-enhancements/ConfigurationService"; import * as i16 from "../../services/screenshot/screenshot.service"; import * as i17 from "../../services/context-menu/context-menu.service"; import * as i18 from "../../services/coordinate-converter/coordinate-converter.service"; function AcMapComponent_ac_default_plonter_0_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "ac-default-plonter"); } } const _c0 = ["*"]; /** * This is a map implementation, creates the cesium map. * Every layer should be tag inside ac-map tag * * Accessing cesium viewer: * 1. acMapComponent.getCesiumViewer() * 2. Use MapManagerService.getMap().getCesiumViewer() or if more then one map: MapManagerService.getMap(mapId).getCesiumViewer() * * * @example * <ac-map> * <ac-map-layer-provider></ac-map-layer-provider> * <dynamic-ellipse-layer #layer></dynamic-ellipse-layer> * </ac-map> */ export class AcMapComponent { constructor(_cesiumService, _cameraService, _elemRef, document, mapsManagerService, billboardDrawerService, labelDrawerService, ellipseDrawerService, polylineDrawerService, polygonDrawerService, arcDrawerService, pointDrawerService, czmlDrawerService, mapEventsManager, keyboardControlService, mapLayersService, configurationService, screenshotService, contextMenuService, coordinateConverter) { this._cesiumService = _cesiumService; this._cameraService = _cameraService; this._elemRef = _elemRef; this.document = document; this.mapsManagerService = mapsManagerService; this.billboardDrawerService = billboardDrawerService; this.labelDrawerService = labelDrawerService; this.ellipseDrawerService = ellipseDrawerService; this.polylineDrawerService = polylineDrawerService; this.polygonDrawerService = polygonDrawerService; this.arcDrawerService = arcDrawerService; this.pointDrawerService = pointDrawerService; this.czmlDrawerService = czmlDrawerService; this.mapEventsManager = mapEventsManager; this.keyboardControlService = keyboardControlService; this.mapLayersService = mapLayersService; this.configurationService = configurationService; this.screenshotService = screenshotService; this.contextMenuService = contextMenuService; this.coordinateConverter = coordinateConverter; /** * Disable default plonter context menu */ this.disableDefaultPlonter = false; this.mapContainer = this.document.createElement('div'); this.mapContainer.style.width = '100%'; this.mapContainer.style.height = '100%'; this.mapContainer.className = 'map-container'; this._cesiumService.init(this.mapContainer, this); this._cameraService.init(this._cesiumService); this.mapEventsManager.init(); this.billboardDrawerService.init(); this.labelDrawerService.init(); this.ellipseDrawerService.init(); this.polylineDrawerService.init(); this.polygonDrawerService.init(); this.arcDrawerService.init(); this.pointDrawerService.init(); this.czmlDrawerService.init(); this.keyboardControlService.init(); this.contextMenuService.init(this.mapEventsManager); } ngOnInit() { this.mapId = this.mapsManagerService._registerMap(this.mapId, this); if (!this.containerId) { this._elemRef.nativeElement.appendChild(this.mapContainer); } } ngOnChanges(changes) { if (changes['sceneMode']) { this._cameraService.setSceneMode(changes['sceneMode'].currentValue); } if (changes['flyTo']) { this._cameraService.cameraFlyTo(changes['flyTo'].currentValue); } if (changes['containerId'] && !changes['containerId'].firstChange) { const element = this.document.getElementById(changes['containerId'].currentValue); if (element) { element.appendChild(this.mapContainer); } else { throw new Error(`No element found with id: ${changes['containerId'].currentValue}`); } } } ngAfterViewInit() { this.mapLayersService.drawAllLayers(); if (this.containerId) { setTimeout(() => { const element = this.document.getElementById(this.containerId); if (element) { element.appendChild(this.mapContainer); } else { throw new Error(`No element found with id: ${this.containerId}`); } }, 0); } } ngOnDestroy() { this.mapContainer.remove(); this.mapsManagerService._removeMapById(this.mapId); } /** * @returns ac-map's cesium service */ getCesiumService() { return this._cesiumService; } /** * @returns map's cesium viewer */ getCesiumViewer() { return this._cesiumService.getViewer(); } getCameraService() { return this._cameraService; } getId() { return this.mapId; } getMapContainer() { return this.mapContainer; } getMapEventsManager() { return this.mapEventsManager; } getContextMenuService() { return this.contextMenuService; } getScreenshotService() { return this.screenshotService; } getKeyboardControlService() { return this.keyboardControlService; } getCoordinateConverter() { return this.coordinateConverter; } } AcMapComponent.ɵfac = function AcMapComponent_Factory(t) { return new (t || AcMapComponent)(i0.ɵɵdirectiveInject(i1.CesiumService), i0.ɵɵdirectiveInject(i2.CameraService), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(DOCUMENT), i0.ɵɵdirectiveInject(i3.MapsManagerService), i0.ɵɵdirectiveInject(i4.BillboardDrawerService), i0.ɵɵdirectiveInject(i5.LabelDrawerService), i0.ɵɵdirectiveInject(i6.EllipseDrawerService), i0.ɵɵdirectiveInject(i7.PolylineDrawerService), i0.ɵɵdirectiveInject(i8.PolygonDrawerService), i0.ɵɵdirectiveInject(i9.ArcDrawerService), i0.ɵɵdirectiveInject(i10.PointDrawerService), i0.ɵɵdirectiveInject(i11.CzmlDrawerService), i0.ɵɵdirectiveInject(i12.MapEventsManagerService), i0.ɵɵdirectiveInject(i13.KeyboardControlService), i0.ɵɵdirectiveInject(i14.MapLayersService), i0.ɵɵdirectiveInject(i15.ConfigurationService), i0.ɵɵdirectiveInject(i16.ScreenshotService), i0.ɵɵdirectiveInject(i17.ContextMenuService), i0.ɵɵdirectiveInject(i18.CoordinateConverter)); }; AcMapComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AcMapComponent, selectors: [["ac-map"]], inputs: { disableDefaultPlonter: "disableDefaultPlonter", mapId: "mapId", flyTo: "flyTo", sceneMode: "sceneMode", containerId: "containerId" }, features: [i0.ɵɵProvidersFeature([ CesiumService, BillboardDrawerService, CesiumEventBuilder, KeyboardControlService, MapEventsManagerService, PlonterService, LabelDrawerService, PolylineDrawerService, PolylinePrimitiveDrawerService, EllipseDrawerService, PointDrawerService, ArcDrawerService, CzmlDrawerService, PolygonDrawerService, MapLayersService, CameraService, ScreenshotService, ContextMenuService, CoordinateConverter, ]), i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 3, vars: 1, consts: [[4, "ngIf"]], template: function AcMapComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵprojectionDef(); i0.ɵɵtemplate(0, AcMapComponent_ac_default_plonter_0_Template, 1, 0, "ac-default-plonter", 0); i0.ɵɵelement(1, "ac-context-menu-wrapper"); i0.ɵɵprojection(2); } if (rf & 2) { i0.ɵɵproperty("ngIf", !ctx.disableDefaultPlonter); } }, encapsulation: 2 }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AcMapComponent, [{ type: Component, args: [{ selector: 'ac-map', template: ` <ac-default-plonter *ngIf="!disableDefaultPlonter"></ac-default-plonter> <ac-context-menu-wrapper></ac-context-menu-wrapper> <ng-content></ng-content> `, providers: [ CesiumService, BillboardDrawerService, CesiumEventBuilder, KeyboardControlService, MapEventsManagerService, PlonterService, LabelDrawerService, PolylineDrawerService, PolylinePrimitiveDrawerService, EllipseDrawerService, PointDrawerService, ArcDrawerService, CzmlDrawerService, PolygonDrawerService, MapLayersService, CameraService, ScreenshotService, ContextMenuService, CoordinateConverter, ], }] }], function () { return [{ type: i1.CesiumService }, { type: i2.CameraService }, { type: i0.ElementRef }, { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT] }] }, { type: i3.MapsManagerService }, { type: i4.BillboardDrawerService }, { type: i5.LabelDrawerService }, { type: i6.EllipseDrawerService }, { type: i7.PolylineDrawerService }, { type: i8.PolygonDrawerService }, { type: i9.ArcDrawerService }, { type: i10.PointDrawerService }, { type: i11.CzmlDrawerService }, { type: i12.MapEventsManagerService }, { type: i13.KeyboardControlService }, { type: i14.MapLayersService }, { type: i15.ConfigurationService }, { type: i16.ScreenshotService }, { type: i17.ContextMenuService }, { type: i18.CoordinateConverter }]; }, { disableDefaultPlonter: [{ type: Input }], mapId: [{ type: Input }], flyTo: [{ type: Input }], sceneMode: [{ type: Input }], containerId: [{ type: Input }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWMtbWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY2VzaXVtL3NyYy9saWIvYW5ndWxhci1jZXNpdW0vY29tcG9uZW50cy9hYy1tYXAvYWMtbWFwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFpQixTQUFTLEVBQWMsTUFBTSxFQUFFLEtBQUssRUFBK0MsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBR3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUN2RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUN4RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUMxRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUNwRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUM5RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUM5RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUNwRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUN2RyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxvRkFBb0YsQ0FBQztBQUNwSSxPQUFPLEVB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dEIsa0JBQWtCO29CQUNsQixzQkFBc0I7b0JBQ3RCLHVCQUF1QjtvQkFDdkIsY0FBYztvQkFDZCxrQkFBa0I7b0JBQ2xCLHFCQUFxQjtvQkFDckIsOEJBQThCO29CQUM5QixvQkFBb0I7b0JBQ3BCLGtCQUFrQjtvQkFDbEIsZ0JBQWdCO29CQUNoQixpQkFBaUI7b0JBQ2pCLG9CQUFvQjtvQkFDcEIsZ0JBQWdCO29CQUNoQixhQUFhO29CQUNiLGlCQUFpQjtvQkFDakIsa0JBQWtCO29CQUNsQixtQkFBbUI7aUJBQ3BCO2FBQ0Y7O3NCQXdDSSxNQUFNO3VCQUFDLFFBQVE7a2tCQWxDbEIscUJBQXFCO2tCQURwQixLQUFLO1lBUU4sS0FBSztrQkFESixLQUFLO1lBT04sS0FBSztrQkFESixLQUFLO1lBT04sU0FBUztrQkFEUixLQUFLO1lBUU4sV0FBVztrQkFEVixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDZXNpdW1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2VzaXVtL2Nlc2l1bS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2VzaXVtLWVuaGFuY2VtZW50cy9Db25maWd1cmF0aW9uU2VydmljZSc7XG5pbXBvcnQgeyBTY2VuZU1vZGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvc2NlbmUtbW9kZS5lbnVtJztcbmltcG9ydCB7IENhbWVyYVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYW1lcmEvY2FtZXJhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGV4dE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5zZXJ2aWNlJztcbmltcG9ydCB7IENvb3JkaW5hdGVDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb29yZGluYXRlLWNvbnZlcnRlci9jb29yZGluYXRlLWNvbnZlcnRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFyY0RyYXdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kcmF3ZXJzL2FyYy1kcmF3ZXIvYXJjLWRyYXdlci5zZXJ2aWNlJztcbmltcG9ydCB7IEJpbGxib2FyZERyYXdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kcmF3ZXJzL2JpbGxib2FyZC1kcmF3ZXIvYmlsbGJvYXJkLWRyYXdlci5zZXJ2aWNlJztcbmltcG9ydCB7IEN6bWxEcmF3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJhd2Vycy9jem1sLWRyYXdlci9jem1sLWRyYXdlci5zZXJ2aWNlJztcbmltcG9ydCB7IEVsbGlwc2VEcmF3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJhd2Vycy9lbGxpcHNlLWRyYXdlci9lbGxpcHNlLWRyYXdlci5zZXJ2aWNlJztcbmltcG9ydCB7IExhYmVsRHJhd2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYXdlcnMvbGFiZWwtZHJhd2VyL2xhYmVsLWRyYXdlci5zZXJ2aWNlJztcbmltcG9ydCB7IFBvaW50RHJhd2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYXdlcnMvcG9pbnQtZHJhd2VyL3BvaW50LWRyYXdlci5zZXJ2aWNlJztcbmltcG9ydCB7IFBvbHlnb25EcmF3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJhd2Vycy9wb2x5Z29uLWRyYXdlci9wb2x5Z29uLWRyYXdlci5zZXJ2aWNlJztcbmltcG9ydCB7IFBvbHlsaW5lRHJhd2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYXdlcnMvcG9seWxpbmUtZHJhd2VyL3BvbHlsaW5lLWRyYXdlci5zZXJ2aWNlJztcbmltcG9ydCB7IFBvbHlsaW5lUHJpbWl0aXZlRHJhd2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYXdlcnMvcG9seWxpbmUtcHJpbWl0aXZlLWRyYXdlci9wb2x5bGluZS1wcmltaXRpdmUtZHJhd2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5Ym9hcmRDb250cm9sU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2tleWJvYXJkLWNvbnRyb2wva2V5Ym9hcmQtY29udHJvbC5zZXJ2aWNlJztcbmltcG9ydCB7IENlc2l1bUV2ZW50QnVpbGRlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21hcC1ldmVudHMtbWFuYW5nZXIvY2VzaXVtLWV2ZW50LWJ1aWxkZXInO1xuaW1wb3J0IHsgTWFwRXZlbnRzTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYXAtZXZlbnRzLW1hbmFuZ2VyL21hcC1ldmVudHMtbWFuYWdlcic7XG5pbXBvcnQgeyBNYXBMYXllcnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFwLWxheWVycy9tYXAtbGF5ZXJzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWFwc01hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFwcy1tYW5hZ2VyL21hcHMtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IFBsb250ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGxvbnRlci9wbG9udGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NyZWVuc2hvdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zY3JlZW5zaG90L3NjcmVlbnNob3Quc2VydmljZSc7XG5cbi8qKlxuICogVGhpcyBpcyBhIG1hcCBpbXBsZW1lbnRhdGlvbiwgY3JlYXRlcyB0aGUgY2VzaXVtIG1hcC5cbiAqIEV2ZXJ5IGxheWVyIHNob3VsZCBiZSB0YWcgaW5zaWRlIGFjLW1hcCB0YWdcbiAqXG4gKiBBY2Nlc3NpbmcgY2VzaXVtIHZpZXdlcjpcbiAqIDEuIGFjTWFwQ29tcG9uZW50LmdldENlc2l1bVZpZXdlcigpXG4gKiAyLiBVc2UgTWFwTWFuYWdlclNlcnZpY2UuZ2V0TWFwKCkuZ2V0Q2VzaXVtVmlld2VyKCkgb3IgaWYgbW9yZSB0aGVuIG9uZSBtYXA6IE1hcE1hbmFnZXJTZXJ2aWNlLmdldE1hcChtYXBJZCkuZ2V0Q2VzaXVtVmlld2VyKClcbiAqXG4gKlxuICogQGV4YW1wbGVcbiAqIDxhYy1tYXA+XG4gKiAgICAgPGFjLW1hcC1sYXllci1wcm92aWRlcj48L2FjLW1hcC1sYXllci1wcm92aWRlcj5cbiAqICAgICA8ZHluYW1pYy1lbGxpcHNlLWxheWVyICNsYXllcj48L2R5bmFtaWMtZWxsaXBzZS1sYXllcj5cbiAqIDwvYWMtbWFwPlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhYy1tYXAnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxhYy1kZWZhdWx0LXBsb250ZXIgKm5nSWY9XCIhZGlzYWJsZURlZmF1bHRQbG9udGVyXCI+PC9hYy1kZWZhdWx0LXBsb250ZXI+XG4gICAgPGFjLWNvbnRleHQtbWVudS13cmFwcGVyPjwvYWMtY29udGV4dC1tZW51LXdyYXBwZXI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICBgLFxuICBwcm92aWRlcnM6IFtcbiAgICBDZXNpdW1TZXJ2aWNlLFxuICAgIEJpbGxib2FyZERyYXdlclNlcnZpY2UsXG4gICAgQ2VzaXVtRXZlbnRCdWlsZGVyLFxuICAgIEtleWJvYXJkQ29udHJvbFNlcnZpY2UsXG4gICAgTWFwRXZlbnRzTWFuYWdlclNlcnZpY2UsXG4gICAgUGxvbnRlclNlcnZpY2UsXG4gICAgTGFiZWxEcmF3ZXJTZXJ2aWNlLFxuICAgIFBvbHlsaW5lRHJhd2VyU2VydmljZSxcbiAgICBQb2x5bGluZVByaW1pdGl2ZURyYXdlclNlcnZpY2UsXG4gICAgRWxsaXBzZURyYXdlclNlcnZpY2UsXG4gICAgUG9pbnREcmF3ZXJTZXJ2aWNlLFxuICAgIEFyY0RyYXdlclNlcnZpY2UsXG4gICAgQ3ptbERyYXdlclNlcnZpY2UsXG4gICAgUG9seWdvbkRyYXdlclNlcnZpY2UsXG4gICAgTWFwTGF5ZXJzU2VydmljZSxcbiAgICBDYW1lcmFTZXJ2aWNlLFxuICAgIFNjcmVlbnNob3RTZXJ2aWNlLFxuICAgIENvbnRleHRNZW51U2VydmljZSxcbiAgICBDb29yZGluYXRlQ29udmVydGVyLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBY01hcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogRGlzYWJsZSBkZWZhdWx0IHBsb250ZXIgY29udGV4dCBtZW51XG4gICAqL1xuICBASW5wdXQoKVxuICBkaXNhYmxlRGVmYXVsdFBsb250ZXIgPSBmYWxzZTtcblxuICAvKipcbiAgICogU2V0IHRoZSBpZCBuYW1lIG9mIHRoZSBtYXBcbiAgICogZGVmYXVsdDogJ2RlZmF1bHQtbWFwLWlkLVtpbmRleF0nXG4gICAqL1xuICBASW5wdXQoKVxuICBtYXBJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBmbHlUbyBvcHRpb25zIGFjY29yZGluZyB0byBodHRwczovL2Nlc2l1bWpzLm9yZy9DZXNpdW0vQnVpbGQvRG9jdW1lbnRhdGlvbi9DYW1lcmEuaHRtbD9jbGFzc0ZpbHRlcj1jYW0jZmx5VG9cbiAgICovXG4gIEBJbnB1dCgpXG4gIGZseVRvOiBhbnk7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG1hcCdzIFNjZW5lTW9kZVxuICAgKi9cbiAgQElucHV0KClcbiAgc2NlbmVNb2RlOiBTY2VuZU1vZGU7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIC0gdGhlIGNvbnRhaW5lciBlbGVtZW50J3MgaWQgaW4gd2hpY2ggdGhlIG1hcCdzIGNhbnZhcyB3aWxsIGJlIGFwcGVuZGVkIHRvLlxuICAgKiBJZiBub3Qgc3VwcGxpZWQgLSB0aGUgY29udGFpbmVyIGVsZW1lbnQgd2lsbCBiZSB0aGUgcGFyZW50IGVsZW1lbnQgb2YgYWMtbWFwO1xuICAgKi9cbiAgQElucHV0KClcbiAgY29udGFpbmVySWQ6IHN0cmluZztcblxuICBwcml2YXRlIG1hcENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfY2VzaXVtU2VydmljZTogQ2VzaXVtU2VydmljZSxcbiAgICBwcml2YXRlIF9jYW1lcmFTZXJ2aWNlOiBDYW1lcmFTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2VsZW1SZWY6IEVsZW1lbnRSZWYsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudCxcbiAgICBwcml2YXRlIG1hcHNNYW5hZ2VyU2VydmljZTogTWFwc01hbmFnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYmlsbGJvYXJkRHJhd2VyU2VydmljZTogQmlsbGJvYXJkRHJhd2VyU2VydmljZSxcbiAgICBwcml2YXRlIGxhYmVsRHJhd2VyU2VydmljZTogTGFiZWxEcmF3ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZWxsaXBzZURyYXdlclNlcnZpY2U6IEVsbGlwc2VEcmF3ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9seWxpbmVEcmF3ZXJTZXJ2aWNlOiBQb2x5bGluZURyYXdlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwb2x5Z29uRHJhd2VyU2VydmljZTogUG9seWdvbkRyYXdlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcmNEcmF3ZXJTZXJ2aWNlOiBBcmNEcmF3ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9pbnREcmF3ZXJTZXJ2aWNlOiBQb2ludERyYXdlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjem1sRHJhd2VyU2VydmljZTogQ3ptbERyYXdlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtYXBFdmVudHNNYW5hZ2VyOiBNYXBFdmVudHNNYW5hZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIGtleWJvYXJkQ29udHJvbFNlcnZpY2U6IEtleWJvYXJkQ29udHJvbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtYXBMYXllcnNTZXJ2aWNlOiBNYXBMYXllcnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvblNlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgc2NyZWVuc2hvdFNlcnZpY2U6IFNjcmVlbnNob3RTZXJ2aWNlLFxuICAgIHB1YmxpYyBjb250ZXh0TWVudVNlcnZpY2U6IENvbnRleHRNZW51U2VydmljZSxcbiAgICBwcml2YXRlIGNvb3JkaW5hdGVDb252ZXJ0ZXI6IENvb3JkaW5hdGVDb252ZXJ0ZXIsXG4gICkge1xuICAgIHRoaXMubWFwQ29udGFpbmVyID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aGlzLm1hcENvbnRhaW5lci5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICB0aGlzLm1hcENvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgdGhpcy5tYXBDb250YWluZXIuY2xhc3NOYW1lID0gJ21hcC1jb250YWluZXInO1xuICAgIHRoaXMuX2Nlc2l1bVNlcnZpY2UuaW5pdCh0aGlzLm1hcENvbnRhaW5lciwgdGhpcyk7XG4gICAgdGhpcy5fY2FtZXJhU2VydmljZS5pbml0KHRoaXMuX2Nlc2l1bVNlcnZpY2UpO1xuICAgIHRoaXMubWFwRXZlbnRzTWFuYWdlci5pbml0KCk7XG4gICAgdGhpcy5iaWxsYm9hcmREcmF3ZXJTZXJ2aWNlLmluaXQoKTtcbiAgICB0aGlzLmxhYmVsRHJhd2VyU2VydmljZS5pbml0KCk7XG4gICAgdGhpcy5lbGxpcHNlRHJhd2VyU2VydmljZS5pbml0KCk7XG4gICAgdGhpcy5wb2x5bGluZURyYXdlclNlcnZpY2UuaW5pdCgpO1xuICAgIHRoaXMucG9seWdvbkRyYXdlclNlcnZpY2UuaW5pdCgpO1xuICAgIHRoaXMuYXJjRHJhd2VyU2VydmljZS5pbml0KCk7XG4gICAgdGhpcy5wb2ludERyYXdlclNlcnZpY2UuaW5pdCgpO1xuICAgIHRoaXMuY3ptbERyYXdlclNlcnZpY2UuaW5pdCgpO1xuICAgIHRoaXMua2V5Ym9hcmRDb250cm9sU2VydmljZS5pbml0KCk7XG4gICAgdGhpcy5jb250ZXh0TWVudVNlcnZpY2UuaW5pdCh0aGlzLm1hcEV2ZW50c01hbmFnZXIpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tYXBJZCA9IHRoaXMubWFwc01hbmFnZXJTZXJ2aWNlLl9yZWdpc3Rlck1hcCh0aGlzLm1hcElkLCB0aGlzKTtcbiAgICBpZiAoIXRoaXMuY29udGFpbmVySWQpIHtcbiAgICAgIHRoaXMuX2VsZW1SZWYubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLm1hcENvbnRhaW5lcik7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydzY2VuZU1vZGUnXSkge1xuICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5zZXRTY2VuZU1vZGUoY2hhbmdlc1snc2NlbmVNb2RlJ10uY3VycmVudFZhbHVlKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2ZseVRvJ10pIHtcbiAgICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhRmx5VG8oY2hhbmdlc1snZmx5VG8nXS5jdXJyZW50VmFsdWUpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snY29udGFpbmVySWQnXSAmJiAhY2hhbmdlc1snY29udGFpbmVySWQnXS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY2hhbmdlc1snY29udGFpbmVySWQnXS5jdXJyZW50VmFsdWUpO1xuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLm1hcENvbnRhaW5lcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGVsZW1lbnQgZm91bmQgd2l0aCBpZDogJHtjaGFuZ2VzWydjb250YWluZXJJZCddLmN1cnJlbnRWYWx1ZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5tYXBMYXllcnNTZXJ2aWNlLmRyYXdBbGxMYXllcnMoKTtcbiAgICBpZiAodGhpcy5jb250YWluZXJJZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuY29udGFpbmVySWQpO1xuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5tYXBDb250YWluZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gZWxlbWVudCBmb3VuZCB3aXRoIGlkOiAke3RoaXMuY29udGFpbmVySWR9YCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubWFwQ29udGFpbmVyLnJlbW92ZSgpO1xuICAgIHRoaXMubWFwc01hbmFnZXJTZXJ2aWNlLl9yZW1vdmVNYXBCeUlkKHRoaXMubWFwSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIGFjLW1hcCdzIGNlc2l1bSBzZXJ2aWNlXG4gICAqL1xuICBnZXRDZXNpdW1TZXJ2aWNlKCkge1xuICAgIHJldHVybiB0aGlzLl9jZXNpdW1TZXJ2aWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIG1hcCdzIGNlc2l1bSB2aWV3ZXJcbiAgICovXG4gIGdldENlc2l1bVZpZXdlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fY2VzaXVtU2VydmljZS5nZXRWaWV3ZXIoKTtcbiAgfVxuXG5cbiAgZ2V0Q2FtZXJhU2VydmljZSgpOiBDYW1lcmFTZXJ2aWNlIHtcbiAgICByZXR1cm4gdGhpcy5fY2FtZXJhU2VydmljZTtcbiAgfVxuXG4gIGdldElkKCkge1xuICAgIHJldHVybiB0aGlzLm1hcElkO1xuICB9XG5cblxuICBnZXRNYXBDb250YWluZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwQ29udGFpbmVyO1xuICB9XG5cblxuICBnZXRNYXBFdmVudHNNYW5hZ2VyKCk6IE1hcEV2ZW50c01hbmFnZXJTZXJ2aWNlIHtcbiAgICByZXR1cm4gdGhpcy5tYXBFdmVudHNNYW5hZ2VyO1xuICB9XG5cbiAgZ2V0Q29udGV4dE1lbnVTZXJ2aWNlKCk6IENvbnRleHRNZW51U2VydmljZSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dE1lbnVTZXJ2aWNlO1xuICB9XG5cbiAgZ2V0U2NyZWVuc2hvdFNlcnZpY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2NyZWVuc2hvdFNlcnZpY2U7XG4gIH1cblxuICBnZXRLZXlib2FyZENvbnRyb2xTZXJ2aWNlKCkge1xuICAgIHJldHVybiB0aGlzLmtleWJvYXJkQ29udHJvbFNlcnZpY2U7XG4gIH1cblxuICBnZXRDb29yZGluYXRlQ29udmVydGVyKCkge1xuICAgIHJldHVybiB0aGlzLmNvb3JkaW5hdGVDb252ZXJ0ZXI7XG4gIH1cbn1cbiJdfQ==