angular-cesium
Version:
Angular library for working with Cesium.
110 lines • 17.9 kB
JavaScript
import { BasicDrawerService } from '../basic-drawer/basic-drawer.service';
import { GraphicsType } from './enums/graphics-type.enum';
import { OptimizedEntityCollection } from './optimized-entity-collection';
/**
* General primitives drawer responsible of drawing Cesium primitives.
* Drawers the handle Cesium primitives extend it.
*/
export class EntitiesDrawerService extends BasicDrawerService {
constructor(cesiumService, graphicsType, defaultOptions = {
collectionMaxSize: -1,
collectionSuspensionTime: -1,
collectionsNumber: 1,
}) {
super();
this.cesiumService = cesiumService;
this.graphicsType = graphicsType;
this.defaultOptions = defaultOptions;
this.entityCollections = new Map();
this.graphicsTypeName = GraphicsType[this.graphicsType];
// Fix bad enum compilation
for (const i in GraphicsType) {
if (GraphicsType[i] === this.graphicsType) {
this.graphicsTypeName = i;
}
}
}
getFreeEntitiesCollection() {
let freeEntityCollection = null;
this.entityCollections.forEach(entityCollection => {
if (entityCollection.isFree()) {
freeEntityCollection = entityCollection;
}
});
return freeEntityCollection;
}
init(options) {
const finalOptions = options || this.defaultOptions;
const dataSources = [];
for (let i = 0; i < finalOptions.collectionsNumber; i++) {
const dataSource = new Cesium.CustomDataSource(this.graphicsTypeName);
dataSources.push(dataSource);
this.cesiumService.getViewer().dataSources.add(dataSource);
this.entityCollections.set(dataSource.entities, new OptimizedEntityCollection(dataSource.entities, finalOptions.collectionMaxSize, finalOptions.collectionSuspensionTime));
}
return dataSources;
}
add(cesiumProps) {
const optimizedEntityCollection = this.getFreeEntitiesCollection();
if (optimizedEntityCollection === null) {
throw new Error('No more free entity collections');
}
const entityObject = {
position: cesiumProps.position !== undefined ? cesiumProps.position : undefined,
description: cesiumProps.description !== undefined ? cesiumProps.description : undefined,
orientation: cesiumProps.orientation !== undefined ? cesiumProps.orientation : undefined,
viewFrom: cesiumProps.viewFrom !== undefined ? cesiumProps.viewFrom : undefined,
[this.graphicsTypeName]: cesiumProps,
};
if (cesiumProps.name !== undefined) {
entityObject.name = cesiumProps.name;
}
if (cesiumProps.availability !== undefined) {
entityObject.availability = cesiumProps.availability;
}
return optimizedEntityCollection.add(entityObject);
}
update(entity, cesiumProps) {
this.suspendEntityCollection(entity);
if (entity.position instanceof Cesium.CallbackProperty) {
if (entity.position._isConstant) {
entity.position = cesiumProps.position;
}
}
entity.position = cesiumProps.position !== undefined ? cesiumProps.position : undefined;
entity.name = cesiumProps.name !== undefined ? cesiumProps.name : entity.name;
entity.description = cesiumProps.description !== undefined ? cesiumProps.description : entity.description;
entity.orientation = cesiumProps.orientation !== undefined ? cesiumProps.orientation : entity.orientation;
entity.viewFrom = cesiumProps.viewFrom !== undefined ? cesiumProps.viewFrom : entity.viewFrom;
entity.availability = cesiumProps.availability !== undefined ? cesiumProps.availability : cesiumProps.availability;
if (this._propsAssigner) {
this._propsAssigner(entity[this.graphicsTypeName], cesiumProps);
}
else {
Object.assign(entity[this.graphicsTypeName], cesiumProps);
}
}
remove(entity) {
const optimizedEntityCollection = this.entityCollections.get(entity.entityCollection);
optimizedEntityCollection.remove(entity);
}
removeAll() {
this.entityCollections.forEach(entityCollection => {
entityCollection.removeAll();
});
}
setShow(showValue) {
this.entityCollections.forEach(entityCollection => {
entityCollection.setShow(showValue);
});
}
suspendEntityCollection(entity) {
const id = entity.entityCollection;
if (!this.entityCollections.has(id)) {
throw new Error('No EntityCollection for entity.entityCollection');
}
const entityCollection = this.entityCollections.get(id);
entityCollection.suspend();
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXRpZXMtZHJhd2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNlc2l1bS9zcmMvbGliL2FuZ3VsYXItY2VzaXVtL3NlcnZpY2VzL2RyYXdlcnMvZW50aXRpZXMtZHJhd2VyL2VudGl0aWVzLWRyYXdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUUxRTs7O0dBR0c7QUFFSCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsa0JBQWtCO0lBSTNELFlBQ1UsYUFBNEIsRUFDNUIsWUFBMEIsRUFDMUIsaUJBQXdDO1FBQzlDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUNyQix3QkFBd0IsRUFBRSxDQUFDLENBQUM7UUFDNUIsaUJBQWlCLEVBQUUsQ0FBQztLQUNyQjtRQUVELEtBQUssRUFBRSxDQUFDO1FBUkEsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBSXJCO1FBVkssc0JBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQWtDLENBQUM7UUFhcEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFeEQsMkJBQTJCO1FBQzNCLEtBQUssTUFBTSxDQUFDLElBQUksWUFBWSxFQUFFO1lBQzVCLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBUSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7YUFDM0I7U0FDRjtJQUNI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QUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUMzRDtJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsTUFBVztRQUNoQixNQUFNLHlCQUF5QixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdEYseUJBQXlCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ2hELGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sQ0FBQyxTQUFrQjtRQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUU7WUFDaEQsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHVCQUF1QixDQUFDLE1BQVc7UUFDekMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztTQUNwRTtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RCxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNpY0RyYXdlclNlcnZpY2UgfSBmcm9tICcuLi9iYXNpYy1kcmF3ZXIvYmFzaWMtZHJhd2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDZXNpdW1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2VzaXVtL2Nlc2l1bS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR3JhcGhpY3NUeXBlIH0gZnJvbSAnLi9lbnVtcy9ncmFwaGljcy10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBFbnRpdGllc0RyYXdlck9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZW50aXRpZXMtZHJhd2VyLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBPcHRpbWl6ZWRFbnRpdHlDb2xsZWN0aW9uIH0gZnJvbSAnLi9vcHRpbWl6ZWQtZW50aXR5LWNvbGxlY3Rpb24nO1xyXG5cclxuLyoqXHJcbiAqICBHZW5lcmFsIHByaW1pdGl2ZXMgZHJhd2VyIHJlc3BvbnNpYmxlIG9mIGRyYXdpbmcgQ2VzaXVtIHByaW1pdGl2ZXMuXHJcbiAqICBEcmF3ZXJzIHRoZSBoYW5kbGUgQ2VzaXVtIHByaW1pdGl2ZXMgZXh0ZW5kIGl0LlxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBFbnRpdGllc0RyYXdlclNlcnZpY2UgZXh0ZW5kcyBCYXNpY0RyYXdlclNlcnZpY2Uge1xyXG4gIHByaXZhdGUgZW50aXR5Q29sbGVjdGlvbnMgPSBuZXcgTWFwPGFueSwgT3B0aW1pemVkRW50aXR5Q29sbGVjdGlvbj4oKTtcclxuICBwcml2YXRlIGdyYXBoaWNzVHlwZU5hbWU6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNlc2l1bVNlcnZpY2U6IENlc2l1bVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGdyYXBoaWNzVHlwZTogR3JhcGhpY3NUeXBlLFxyXG4gICAgcHJpdmF0ZSBkZWZhdWx0T3B0aW9uczogRW50aXRpZXNEcmF3ZXJPcHRpb25zID0ge1xyXG4gICAgICBjb2xsZWN0aW9uTWF4U2l6ZTogLTEsXHJcbiAgICAgIGNvbGxlY3Rpb25TdXNwZW5zaW9uVGltZTogLTEsXHJcbiAgICAgIGNvbGxlY3Rpb25zTnVtYmVyOiAxLFxyXG4gICAgfSxcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLmdyYXBoaWNzVHlwZU5hbWUgPSBHcmFwaGljc1R5cGVbdGhpcy5ncmFwaGljc1R5cGVdO1xyXG5cclxuICAgIC8vIEZpeCBiYWQgZW51bSBjb21waWxhdGlvblxyXG4gICAgZm9yIChjb25zdCBpIGluIEdyYXBoaWNzVHlwZSkge1xyXG4gICAgICBpZiAoR3JhcGhpY3NUeXBlW2ldIGFzIGFueSA9PT0gdGhpcy5ncmFwaGljc1R5cGUpIHtcclxuICAgICAgICB0aGlzLmdyYXBoaWNzVHlwZU5hbWUgPSBpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZyZWVFbnRpdGllc0NvbGxlY3Rpb24oKTogT3B0aW1pemVkRW50aXR5Q29sbGVjdGlvbiB7XHJcbiAgICBsZXQgZnJlZUVudGl0eUNvbGxlY3Rpb24gPSBudWxsO1xyXG4gICAgdGhpcy5lbnRpdHlDb2xsZWN0aW9ucy5mb3JFYWNoKGVudGl0eUNvbGxlY3Rpb24gPT4ge1xyXG4gICAgICBpZiAoZW50aXR5Q29sbGVjdGlvbi5pc0ZyZWUoKSkge1xyXG4gICAgICAgIGZyZWVFbnRpdHlDb2xsZWN0aW9uID0gZW50aXR5Q29sbGVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGZyZWVFbnRpdHlDb2xsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgaW5pdChvcHRpb25zPzogRW50aXRpZXNEcmF3ZXJPcHRpb25zKSB7XHJcbiAgICBjb25zdCBmaW5hbE9wdGlvbnMgPSBvcHRpb25zIHx8IHRoaXMuZGVmYXVsdE9wdGlvbnM7XHJcbiAgICBjb25zdCBkYXRhU291cmNlcyA9IFtdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaW5hbE9wdGlvbnMuY29sbGVjdGlvbnNOdW1iZXI7IGkrKykge1xyXG4gICAgICBjb25zdCBkYXRhU291cmNlID0gbmV3IENlc2l1bS5DdXN0b21EYXRhU291cmNlKHRoaXMuZ3JhcGhpY3NUeXBlTmFtZSk7XHJcbiAgICAgIGRhdGFTb3VyY2VzLnB1c2goZGF0YVNvdXJjZSk7XHJcbiAgICAgIHRoaXMuY2VzaXVtU2VydmljZS5nZXRWaWV3ZXIoKS5kYXRhU291cmNlcy5hZGQoZGF0YVNvdXJjZSk7XHJcbiAgICAgIHRoaXMuZW50aXR5Q29sbGVjdGlvbnMuc2V0KFxyXG4gICAgICAgIGRhdGFTb3VyY2UuZW50aXRpZXMsXHJcbiAgICAgICAgbmV3IE9wdGltaXplZEVudGl0eUNvbGxlY3Rpb24oZGF0YVNvdXJjZS5lbnRpdGllcywgZmluYWxPcHRpb25zLmNvbGxlY3Rpb25NYXhTaXplLCBmaW5hbE9wdGlvbnMuY29sbGVjdGlvblN1c3BlbnNpb25UaW1lKSxcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0YVNvdXJjZXM7XHJcbiAgfVxyXG5cclxuICBhZGQoY2VzaXVtUHJvcHM6IGFueSk6IGFueSB7XHJcbiAgICBjb25zdCBvcHRpbWl6ZWRFbnRpdHlDb2xsZWN0aW9uID0gdGhpcy5nZXRGcmVlRW50aXRpZXNDb2xsZWN0aW9uKCk7XHJcbiAgICBpZiAob3B0aW1pemVkRW50aXR5Q29sbGVjdGlvbiA9PT0gbnVsbCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIG1vcmUgZnJlZSBlbnRpdHkgY29sbGVjdGlvbnMnKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlbnRpdHlPYmplY3QgPSB7XHJcbiAgICAgIHBvc2l0aW9uOiBjZXNpdW1Qcm9wcy5wb3NpdGlvbiAhPT0gdW5kZWZpbmVkID8gY2VzaXVtUHJvcHMucG9zaXRpb24gOiB1bmRlZmluZWQsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBjZXNpdW1Qcm9wcy5kZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkID8gY2VzaXVtUHJvcHMuZGVzY3JpcHRpb24gOiB1bmRlZmluZWQsXHJcbiAgICAgIG9yaWVudGF0aW9uOiBjZXNpdW1Qcm9wcy5vcmllbnRhdGlvbiAhPT0gdW5kZWZpbmVkID8gY2VzaXVtUHJvcHMub3JpZW50YXRpb24gOiB1bmRlZmluZWQsXHJcbiAgICAgIHZpZXdGcm9tOiBjZXNpdW1Qcm9wcy52aWV3RnJvbSAhPT0gdW5kZWZpbmVkID8gY2VzaXVtUHJvcHMudmlld0Zyb20gOiB1bmRlZmluZWQsXHJcbiAgICAgIFt0aGlzLmdyYXBoaWNzVHlwZU5hbWVdOiBjZXNpdW1Qcm9wcyxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKGNlc2l1bVByb3BzLm5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBlbnRpdHlPYmplY3QubmFtZSA9IGNlc2l1bVByb3BzLm5hbWU7XHJcbiAgICB9XHJcbiAgICBpZiAoY2VzaXVtUHJvcHMuYXZhaWxhYmlsaXR5ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgZW50aXR5T2JqZWN0LmF2YWlsYWJpbGl0eSA9IGNlc2l1bVByb3BzLmF2YWlsYWJpbGl0eTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3B0aW1pemVkRW50aXR5Q29sbGVjdGlvbi5hZGQoZW50aXR5T2JqZWN0KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZShlbnRpdHk6IGFueSwgY2VzaXVtUHJvcHM6IGFueSkge1xyXG4gICAgdGhpcy5zdXNwZW5kRW50aXR5Q29sbGVjdGlvbihlbnRpdHkpO1xyXG5cclxuICAgIGlmIChlbnRpdHkucG9zaXRpb24gaW5zdGFuY2VvZiBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSkge1xyXG4gICAgICBpZiAoZW50aXR5LnBvc2l0aW9uLl9pc0NvbnN0YW50KSB7XHJcbiAgICAgICAgZW50aXR5LnBvc2l0aW9uID0gY2VzaXVtUHJvcHMucG9zaXRpb247XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVudGl0eS5wb3NpdGlvbiA9IGNlc2l1bVByb3BzLnBvc2l0aW9uICE9PSB1bmRlZmluZWQgPyBjZXNpdW1Qcm9wcy5wb3NpdGlvbiA6IHVuZGVmaW5lZDtcclxuICAgIGVudGl0eS5uYW1lID0gY2VzaXVtUHJvcHMubmFtZSAhPT0gdW5kZWZpbmVkID8gY2VzaXVtUHJvcHMubmFtZSA6IGVudGl0eS5uYW1lO1xyXG4gICAgZW50aXR5LmRlc2NyaXB0aW9uID0gY2VzaXVtUHJvcHMuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCA/IGNlc2l1bVByb3BzLmRlc2NyaXB0aW9uIDogZW50aXR5LmRlc2NyaXB0aW9uO1xyXG4gICAgZW50aXR5Lm9yaWVudGF0aW9uID0gY2VzaXVtUHJvcHMub3JpZW50YXRpb24gIT09IHVuZGVmaW5lZCA/IGNlc2l1bVByb3BzLm9yaWVudGF0aW9uIDogZW50aXR5Lm9yaWVudGF0aW9uO1xyXG4gICAgZW50aXR5LnZpZXdGcm9tID0gY2VzaXVtUHJvcHMudmlld0Zyb20gIT09IHVuZGVmaW5lZCA/IGNlc2l1bVByb3BzLnZpZXdGcm9tIDogZW50aXR5LnZpZXdGcm9tO1xyXG4gICAgZW50aXR5LmF2YWlsYWJpbGl0eSA9IGNlc2l1bVByb3BzLmF2YWlsYWJpbGl0eSAhPT0gdW5kZWZpbmVkID8gY2VzaXVtUHJvcHMuYXZhaWxhYmlsaXR5IDogY2VzaXVtUHJvcHMuYXZhaWxhYmlsaXR5O1xyXG5cclxuICAgIGlmICh0aGlzLl9wcm9wc0Fzc2lnbmVyKSB7XHJcbiAgICAgIHRoaXMuX3Byb3BzQXNzaWduZXIoZW50aXR5W3RoaXMuZ3JhcGhpY3NUeXBlTmFtZV0sIGNlc2l1bVByb3BzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24oZW50aXR5W3RoaXMuZ3JhcGhpY3NUeXBlTmFtZV0sIGNlc2l1bVByb3BzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZShlbnRpdHk6IGFueSkge1xyXG4gICAgY29uc3Qgb3B0aW1pemVkRW50aXR5Q29sbGVjdGlvbiA9IHRoaXMuZW50aXR5Q29sbGVjdGlvbnMuZ2V0KGVudGl0eS5lbnRpdHlDb2xsZWN0aW9uKTtcclxuICAgIG9wdGltaXplZEVudGl0eUNvbGxlY3Rpb24ucmVtb3ZlKGVudGl0eSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVBbGwoKSB7XHJcbiAgICB0aGlzLmVudGl0eUNvbGxlY3Rpb25zLmZvckVhY2goZW50aXR5Q29sbGVjdGlvbiA9PiB7XHJcbiAgICAgIGVudGl0eUNvbGxlY3Rpb24ucmVtb3ZlQWxsKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFNob3coc2hvd1ZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmVudGl0eUNvbGxlY3Rpb25zLmZvckVhY2goZW50aXR5Q29sbGVjdGlvbiA9PiB7XHJcbiAgICAgIGVudGl0eUNvbGxlY3Rpb24uc2V0U2hvdyhzaG93VmFsdWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1c3BlbmRFbnRpdHlDb2xsZWN0aW9uKGVudGl0eTogYW55KSB7XHJcbiAgICBjb25zdCBpZCA9IGVudGl0eS5lbnRpdHlDb2xsZWN0aW9uO1xyXG4gICAgaWYgKCF0aGlzLmVudGl0eUNvbGxlY3Rpb25zLmhhcyhpZCkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBFbnRpdHlDb2xsZWN0aW9uIGZvciBlbnRpdHkuZW50aXR5Q29sbGVjdGlvbicpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVudGl0eUNvbGxlY3Rpb24gPSB0aGlzLmVudGl0eUNvbGxlY3Rpb25zLmdldChpZCk7XHJcbiAgICBlbnRpdHlDb2xsZWN0aW9uLnN1c3BlbmQoKTtcclxuICB9XHJcbn1cclxuXHJcbiJdfQ==