angular-cesium
Version:
Angular library for working with Cesium.
105 lines • 21.7 kB
JavaScript
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
import { CoordinateConverter } from '../../../angular-cesium/services/coordinate-converter/coordinate-converter.service';
import { EditActions } from '../../models/edit-actions.enum';
import { EditModes } from '../../models/edit-mode.enum';
import { PolylinesEditorService } from '../../services/entity-editors/polyline-editor/polylines-editor.service';
/**
*
* Range and bearing component that is used to draw range and bearing on the map.
* The inputs are used to customize the range and bearing style and behavior.
* Create component reference and use the `create()` function to start creating R&B on the map.
* The function receives an optional RangeAndBearingOptions object that defines the created range and bearing style and behavior
* (on top of the default and global definitions).
*
* Usage:
*
* my-component.ts:
*
* ```
* \@ViewChild('rangeAndBearing', {static: false}) private rangeAndBearing: RangeAndBearingComponent; // Get R&B reference
* // ...
* this.rangeAndBearing.create({style: { pointProps: { pixelSize: 12 } }, bearingLabelsStyle: { fillColor: Cesium.Color.GREEN } });
* ```
*
* my-component.html
* ```
* <range-and-bearing #rangeAndBearing></range-and-bearing> // Optional inputs defines global style and behavior.
* ```
*
*/
export class RangeAndBearingComponent {
constructor(polylineEditor, coordinateConverter) {
this.polylineEditor = polylineEditor;
this.coordinateConverter = coordinateConverter;
this.lineEditOptions = {};
this.labelsStyle = {};
this.distanceLabelsStyle = {};
this.bearingLabelsStyle = {};
}
create({ lineEditOptions = {}, labelsStyle = {}, distanceLabelsStyle = {}, bearingLabelsStyle = {}, bearingStringFn, distanceStringFn, labelsRenderFn, } = { lineEditOptions: {}, labelsStyle: {}, distanceLabelsStyle: {}, bearingLabelsStyle: {} }) {
const rnb = this.polylineEditor.create(Object.assign(Object.assign({ allowDrag: false, pointProps: {
showVirtual: false,
pixelSize: 8,
}, polylineProps: {
width: 2,
} }, this.lineEditOptions), lineEditOptions));
if (labelsRenderFn) {
rnb.setLabelsRenderFn(labelsRenderFn);
}
else if (this.labelsRenderFn) {
rnb.setLabelsRenderFn(this.labelsRenderFn);
}
else {
rnb.setLabelsRenderFn(update => {
const positions = update.positions;
let totalDistance = 0;
if (!positions || positions.length === 0) {
return [];
}
return (update.editMode === EditModes.CREATE && update.editAction !== EditActions.ADD_LAST_POINT
? [...positions, update.updatedPosition]
: positions).reduce((labels, position, index, array) => {
if (index !== 0) {
const previousPosition = array[index - 1];
const bearing = this.coordinateConverter.bearingToCartesian(previousPosition, position);
const distance = Cesium.Cartesian3.distance(previousPosition, position) / 1000;
labels.push(Object.assign(Object.assign(Object.assign(Object.assign({ text: (bearingStringFn && bearingStringFn(bearing)) ||
(this.bearingStringFn && this.bearingStringFn(bearing)) ||
`${bearing.toFixed(2)}°`, scale: 0.2, font: '80px Helvetica', pixelOffset: new Cesium.Cartesian2(-20, -8), position: new Cesium.Cartesian3((position.x + previousPosition.x) / 2, (position.y + previousPosition.y) / 2, (position.z + previousPosition.z) / 2), fillColor: Cesium.Color.WHITE, outlineColor: Cesium.Color.WHITE, showBackground: true }, this.labelsStyle), labelsStyle), this.bearingLabelsStyle), bearingLabelsStyle), Object.assign(Object.assign(Object.assign(Object.assign({ text: (distanceStringFn && distanceStringFn(totalDistance + distance)) ||
(this.distanceStringFn && this.distanceStringFn(totalDistance + distance)) ||
`${(totalDistance + distance).toFixed(2)} Km`, scale: 0.2, font: '80px Helvetica', pixelOffset: new Cesium.Cartesian2(-35, -8), position: position, fillColor: Cesium.Color.WHITE, outlineColor: Cesium.Color.WHITE, showBackground: true }, this.labelsStyle), labelsStyle), this.distanceLabelsStyle), distanceLabelsStyle));
totalDistance += distance;
}
return labels;
}, [
Object.assign(Object.assign(Object.assign(Object.assign({ text: (distanceStringFn && distanceStringFn(0)) || (this.distanceStringFn && this.distanceStringFn(0)) || `0 Km`, scale: 0.2, font: '80px Helvetica', pixelOffset: new Cesium.Cartesian2(-20, -8), position: positions[0], fillColor: Cesium.Color.WHITE, outlineColor: Cesium.Color.WHITE, showBackground: true }, this.labelsStyle), labelsStyle), this.distanceLabelsStyle), distanceLabelsStyle),
]);
});
}
return rnb;
}
}
RangeAndBearingComponent.decorators = [
{ type: Component, args: [{
selector: 'range-and-bearing',
template: `
<polylines-editor></polylines-editor>
`,
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [PolylinesEditorService]
},] }
];
RangeAndBearingComponent.ctorParameters = () => [
{ type: PolylinesEditorService },
{ type: CoordinateConverter }
];
RangeAndBearingComponent.propDecorators = {
lineEditOptions: [{ type: Input }],
labelsStyle: [{ type: Input }],
distanceLabelsStyle: [{ type: Input }],
bearingLabelsStyle: [{ type: Input }],
bearingStringFn: [{ type: Input }],
distanceStringFn: [{ type: Input }],
labelsRenderFn: [{ type: Input }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UtYW5kLWJlYXJpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jZXNpdW0vc3JjL2xpYi9hbmd1bGFyLWNlc2l1bS13aWRnZXRzL2NvbXBvbmVudHMvcmFuZ2UtYW5kLWJlYXJpbmcvcmFuZ2UtYW5kLWJlYXJpbmcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9GQUFvRixDQUFDO0FBQ3pILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUs3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0VBQXdFLENBQUM7QUFFaEg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBU0gsTUFBTSxPQUFPLHdCQUF3QjtJQVNuQyxZQUFvQixjQUFzQyxFQUFVLG1CQUF3QztRQUF4RixtQkFBYyxHQUFkLGNBQWMsQ0FBd0I7UUFBVSx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBUm5HLG9CQUFlLEdBQXlCLEVBQUUsQ0FBQztRQUMzQyxnQkFBVyxHQUFnQixFQUFFLENBQUM7UUFDOUIsd0JBQW1CLEdBQWdCLEVBQUUsQ0FBQztRQUN0Qyx1QkFBa0IsR0FBZ0IsRUFBRSxDQUFDO0lBTTlDLENBQUM7SUFFRCxNQUFNLENBQ0osRUFDRSxlQUFlLEdBQUcsRUFBRSxFQUNwQixXQUFXLEdBQUcsRUFBRSxFQUNoQixtQkFBbUIsR0FBRyxFQUFFLEVBQ3hCLGtCQUFrQixHQUFHLEVBQUUsRUFDdkIsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixjQUFjLE1BQ1ksRUFBQyxlQUFl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QyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUMzQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUN0QixTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQzdCLFlBQVksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFDaEMsY0FBYyxFQUFFLElBQUksSUFDaEIsSUFBSSxDQUFDLFdBQW1CLEdBQ3hCLFdBQW1CLEdBQ25CLElBQUksQ0FBQyxtQkFBMkIsR0FDaEMsbUJBQTJCO2lCQUVsQyxDQUNGLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDOzs7WUFuSUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLFFBQVEsRUFBRTs7R0FFVDtnQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDL0MsU0FBUyxFQUFFLENBQUMsc0JBQXNCLENBQUM7YUFDcEM7OztZQWpDUSxzQkFBc0I7WUFQdEIsbUJBQW1COzs7OEJBMEN6QixLQUFLOzBCQUNMLEtBQUs7a0NBQ0wsS0FBSztpQ0FDTCxLQUFLOzhCQUNMLEtBQUs7K0JBQ0wsS0FBSzs2QkFDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29vcmRpbmF0ZUNvbnZlcnRlciB9IGZyb20gJy4uLy4uLy4uL2FuZ3VsYXItY2VzaXVtL3NlcnZpY2VzL2Nvb3JkaW5hdGUtY29udmVydGVyL2Nvb3JkaW5hdGUtY29udmVydGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFZGl0QWN0aW9ucyB9IGZyb20gJy4uLy4uL21vZGVscy9lZGl0LWFjdGlvbnMuZW51bSc7XHJcbmltcG9ydCB7IFBvbHlsaW5lRWRpdG9yT2JzZXJ2YWJsZSB9IGZyb20gJy4uLy4uL21vZGVscy9wb2x5bGluZS1lZGl0b3Itb2JzZXJ2YWJsZSc7XHJcbmltcG9ydCB7IFBvbHlsaW5lRWRpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi9tb2RlbHMvcG9seWxpbmUtZWRpdC1vcHRpb25zJztcclxuaW1wb3J0IHsgTGFiZWxQcm9wcywgTGFiZWxTdHlsZSB9IGZyb20gJy4uLy4uL21vZGVscy9sYWJlbC1wcm9wcyc7XHJcbmltcG9ydCB7IFBvbHlsaW5lRWRpdFVwZGF0ZSB9IGZyb20gJy4uLy4uL21vZGVscy9wb2x5bGluZS1lZGl0LXVwZGF0ZSc7XHJcbmltcG9ydCB7IEVkaXRNb2RlcyB9IGZyb20gJy4uLy4uL21vZGVscy9lZGl0LW1vZGUuZW51bSc7XHJcbmltcG9ydCB7IFBvbHlsaW5lc0VkaXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRpdHktZWRpdG9ycy9wb2x5bGluZS1lZGl0b3IvcG9seWxpbmVzLWVkaXRvci5zZXJ2aWNlJztcclxuXHJcbi8qKlxyXG4gKlxyXG4gKiBSYW5nZSBhbmQgYmVhcmluZyBjb21wb25lbnQgdGhhdCBpcyB1c2VkIHRvIGRyYXcgcmFuZ2UgYW5kIGJlYXJpbmcgb24gdGhlIG1hcC5cclxuICogVGhlIGlucHV0cyBhcmUgdXNlZCB0byBjdXN0b21pemUgdGhlIHJhbmdlIGFuZCBiZWFyaW5nIHN0eWxlIGFuZCBiZWhhdmlvci5cclxuICogQ3JlYXRlIGNvbXBvbmVudCByZWZlcmVuY2UgYW5kIHVzZSB0aGUgYGNyZWF0ZSgpYCBmdW5jdGlvbiB0byBzdGFydCBjcmVhdGluZyBSJkIgb24gdGhlIG1hcC5cclxuICogVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIGFuIG9wdGlvbmFsIFJhbmdlQW5kQmVhcmluZ09wdGlvbnMgb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgY3JlYXRlZCByYW5nZSBhbmQgYmVhcmluZyBzdHlsZSBhbmQgYmVoYXZpb3JcclxuICogKG9uIHRvcCBvZiB0aGUgZGVmYXVsdCBhbmQgZ2xvYmFsIGRlZmluaXRpb25zKS5cclxuICpcclxuICogVXNhZ2U6XHJcbiAqXHJcbiAqIG15LWNvbXBvbmVudC50czpcclxuICpcclxuICogYGBgXHJcbiAqIFxcQFZpZXdDaGlsZCgncmFuZ2VBbmRCZWFyaW5nJywge3N0YXRpYzogZmFsc2V9KSBwcml2YXRlIHJhbmdlQW5kQmVhcmluZzogUmFuZ2VBbmRCZWFyaW5nQ29tcG9uZW50OyAvLyBHZXQgUiZCIHJlZmVyZW5jZVxyXG4gKiAgLy8gLi4uXHJcbiAqIHRoaXMucmFuZ2VBbmRCZWFyaW5nLmNyZWF0ZSh7c3R5bGU6IHsgcG9pbnRQcm9wczogeyBwaXhlbFNpemU6IDEyIH0gfSwgYmVhcmluZ0xhYmVsc1N0eWxlOiB7IGZpbGxDb2xvcjogQ2VzaXVtLkNvbG9yLkdSRUVOIH0gfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBteS1jb21wb25lbnQuaHRtbFxyXG4gKiBgYGBcclxuICogPHJhbmdlLWFuZC1iZWFyaW5nICNyYW5nZUFuZEJlYXJpbmc+PC9yYW5nZS1hbmQtYmVhcmluZz4gLy8gT3B0aW9uYWwgaW5wdXRzIGRlZmluZXMgZ2xvYmFsIHN0eWxlIGFuZCBiZWhhdmlvci5cclxuICogYGBgXHJcbiAqXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JhbmdlLWFuZC1iZWFyaW5nJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPHBvbHlsaW5lcy1lZGl0b3I+PC9wb2x5bGluZXMtZWRpdG9yPlxyXG4gIGAsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbUG9seWxpbmVzRWRpdG9yU2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSYW5nZUFuZEJlYXJpbmdDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIGxpbmVFZGl0T3B0aW9ucz86IFBvbHlsaW5lRWRpdE9wdGlvbnMgPSB7fTtcclxuICBASW5wdXQoKSBsYWJlbHNTdHlsZT86IExhYmVsU3R5bGUgPSB7fTtcclxuICBASW5wdXQoKSBkaXN0YW5jZUxhYmVsc1N0eWxlPzogTGFiZWxTdHlsZSA9IHt9O1xyXG4gIEBJbnB1dCgpIGJlYXJpbmdMYWJlbHNTdHlsZT86IExhYmVsU3R5bGUgPSB7fTtcclxuICBASW5wdXQoKSBiZWFyaW5nU3RyaW5nRm4/OiAodmFsdWU6IG51bWJlcikgPT4gc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRpc3RhbmNlU3RyaW5nRm4/OiAodmFsdWU6IG51bWJlcikgPT4gc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGxhYmVsc1JlbmRlckZuPzogKHVwZGF0ZTogUG9seWxpbmVFZGl0VXBkYXRlLCBsYWJlbHM6IExhYmVsUHJvcHNbXSkgPT4gTGFiZWxQcm9wc1tdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBvbHlsaW5lRWRpdG9yOiBQb2x5bGluZXNFZGl0b3JTZXJ2aWNlLCBwcml2YXRlIGNvb3JkaW5hdGVDb252ZXJ0ZXI6IENvb3JkaW5hdGVDb252ZXJ0ZXIpIHtcclxuICB9XHJcblxyXG4gIGNyZWF0ZShcclxuICAgIHtcclxuICAgICAgbGluZUVkaXRPcHRpb25zID0ge30sXHJcbiAgICAgIGxhYmVsc1N0eWxlID0ge30sXHJcbiAgICAgIGRpc3RhbmNlTGFiZWxzU3R5bGUgPSB7fSxcclxuICAgICAgYmVhcmluZ0xhYmVsc1N0eWxlID0ge30sXHJcbiAgICAgIGJlYXJpbmdTdHJpbmdGbixcclxuICAgICAgZGlzdGFuY2VTdHJpbmdGbixcclxuICAgICAgbGFiZWxzUmVuZGVyRm4sXHJcbiAgICB9OiBSYW5nZUFuZEJlYXJpbmdPcHRpb25zID0ge2xpbmVFZGl0T3B0aW9uczoge30sIGxhYmVsc1N0eWxlOiB7fSwgZGlzdGFuY2VMYWJlbHNTdHlsZToge30sIGJlYXJpbmdMYWJlbHNTdHlsZToge319LFxyXG4gICk6IFBvbHlsaW5lRWRpdG9yT2JzZXJ2YWJsZSB7XHJcbiAgICBjb25zdCBybmIgPSB0aGlzLnBvbHlsaW5lRWRpdG9yLmNyZWF0ZSh7XHJcbiAgICAgIGFsbG93RHJhZzogZmFsc2UsXHJcbiAgICAgIHBvaW50UHJvcHM6IHtcclxuICAgICAgICBzaG93VmlydHVhbDogZmFsc2UsXHJcbiAgICAgICAgcGl4ZWxTaXplOiA4LFxyXG4gICAgICB9LFxyXG4gICAgICBwb2x5bGluZVByb3BzOiB7XHJcbiAgICAgICAgd2lkdGg6IDIsXHJcbiAgICAgIH0sXHJcbiAgICAgIC4uLnRoaXMubGluZUVkaXRPcHRpb25zLFxyXG4gICAgICAuLi5saW5lRWRpdE9wdGlvbnMsXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAobGFiZWxzUmVuZGVyRm4pIHtcclxuICAgICAgcm5iLnNldExhYmVsc1JlbmRlckZuKGxhYmVsc1JlbmRlckZuKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5sYWJlbHNSZW5kZXJGbikge1xyXG4gICAgICBybmIuc2V0TGFiZWxzUmVuZGVyRm4odGhpcy5sYWJlbHNSZW5kZXJGbik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBybmIuc2V0TGFiZWxzUmVuZGVyRm4odXBkYXRlID0+IHtcclxuICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSB1cGRhdGUucG9zaXRpb25zO1xyXG4gICAgICAgIGxldCB0b3RhbERpc3RhbmNlID0gMDtcclxuICAgICAgICBpZiAoIXBvc2l0aW9ucyB8fCBwb3NpdGlvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAodXBkYXRlLmVkaXRNb2RlID09PSBFZGl0TW9kZXMuQ1JFQVRFICYmIHVwZGF0ZS5lZGl0QWN0aW9uICE9PSBFZGl0QWN0aW9ucy5BRERfTEFTVF9QT0lOVFxyXG4gICAgICAgICAgICA/IFsuLi5wb3NpdGlvbnMsIHVwZGF0ZS51cGRhdGVkUG9zaXRpb25dXHJcbiAgICAgICAgICAgIDogcG9zaXRpb25zXHJcbiAgICAgICAgKS5yZWR1Y2UoXHJcbiAgICAgICAgICAobGFiZWxzLCBwb3NpdGlvbiwgaW5kZXgsIGFycmF5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzUG9zaXRpb24gPSBhcnJheVtpbmRleCAtIDFdO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGJlYXJpbmcgPSB0aGlzLmNvb3JkaW5hdGVDb252ZXJ0ZXIuYmVhcmluZ1RvQ2FydGVzaWFuKHByZXZpb3VzUG9zaXRpb24sIHBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IENlc2l1bS5DYXJ0ZXNpYW4zLmRpc3RhbmNlKHByZXZpb3VzUG9zaXRpb24sIHBvc2l0aW9uKSAvIDEwMDA7XHJcbiAgICAgICAgICAgICAgbGFiZWxzLnB1c2goXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHRleHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgKGJlYXJpbmdTdHJpbmdGbiAmJiBiZWFyaW5nU3RyaW5nRm4oYmVhcmluZykpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuYmVhcmluZ1N0cmluZ0ZuICYmIHRoaXMuYmVhcmluZ1N0cmluZ0ZuKGJlYXJpbmcpKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGAke2JlYXJpbmcudG9GaXhlZCgyKX3CsGAsXHJcbiAgICAgICAgICAgICAgICAgIHNjYWxlOiAwLjIsXHJcbiAgICAgICAgICAgICAgICAgIGZvbnQ6ICc4MHB4IEhlbHZldGljYScsXHJcbiAgICAgICAgICAgICAgICAgIHBpeGVsT2Zmc2V0OiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoLTIwLCAtOCksXHJcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjMoXHJcbiAgICAgICAgICAgICAgICAgICAgKHBvc2l0aW9uLnggKyBwcmV2aW91c1Bvc2l0aW9uLngpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAocG9zaXRpb24ueSArIHByZXZpb3VzUG9zaXRpb24ueSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIChwb3NpdGlvbi56ICsgcHJldmlvdXNQb3NpdGlvbi56KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcjogQ2VzaXVtLkNvbG9yLldISVRFLFxyXG4gICAgICAgICAgICAgICAgICBvdXRsaW5lQ29sb3I6IENlc2l1bS5Db2xvci5XSElURSxcclxuICAgICAgICAgICAgICAgICAgc2hvd0JhY2tncm91bmQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIC4uLih0aGlzLmxhYmVsc1N0eWxlIGFzIGFueSksXHJcbiAgICAgICAgICAgICAgICAgIC4uLihsYWJlbHNTdHlsZSBhcyBhbnkpLFxyXG4gICAgICAgICAgICAgICAgICAuLi4odGhpcy5iZWFyaW5nTGFiZWxzU3R5bGUgYXMgYW55KSxcclxuICAgICAgICAgICAgICAgICAgLi4uKGJlYXJpbmdMYWJlbHNTdHlsZSBhcyBhbnkpLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgdGV4dDpcclxuICAgICAgICAgICAgICAgICAgICAoZGlzdGFuY2VTdHJpbmdGbiAmJiBkaXN0YW5jZVN0cmluZ0ZuKHRvdGFsRGlzdGFuY2UgKyBkaXN0YW5jZSkpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuZGlzdGFuY2VTdHJpbmdGbiAmJiB0aGlzLmRpc3RhbmNlU3RyaW5nRm4odG90YWxEaXN0YW5jZSArIGRpc3RhbmNlKSkgfHxcclxuICAgICAgICAgICAgICAgICAgICBgJHsodG90YWxEaXN0YW5jZSArIGRpc3RhbmNlKS50b0ZpeGVkKDIpfSBLbWAsXHJcbiAgICAgICAgICAgICAgICAgIHNjYWxlOiAwLjIsXHJcbiAgICAgICAgICAgICAgICAgIGZvbnQ6ICc4MHB4IEhlbHZldGljYScsXHJcbiAgICAgICAgICAgICAgICAgIHBpeGVsT2Zmc2V0OiBuZXcgQ2VzaXVtLkNhcnRlc2lhbjIoLTM1LCAtOCksXHJcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcclxuICAgICAgICAgICAgICAgICAgZmlsbENvbG9yOiBDZXNpdW0uQ29sb3IuV0hJVEUsXHJcbiAgICAgICAgICAgICAgICAgIG91dGxpbmVDb2xvcjogQ2VzaXVtLkNvbG9yLldISVRFLFxyXG4gICAgICAgICAgICAgICAgICBzaG93QmFja2dyb3VuZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgLi4uKHRoaXMubGFiZWxzU3R5bGUgYXMgYW55KSxcclxuICAgICAgICAgICAgICAgICAgLi4uKGxhYmVsc1N0eWxlIGFzIGFueSksXHJcbiAgICAgICAgICAgICAgICAgIC4uLih0aGlzLmRpc3RhbmNlTGFiZWxzU3R5bGUgYXMgYW55KSxcclxuICAgICAgICAgICAgICAgICAgLi4uKGRpc3RhbmNlTGFiZWxzU3R5bGUgYXMgYW55KSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgdG90YWxEaXN0YW5jZSArPSBkaXN0YW5jZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGxhYmVscztcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0ZXh0OiAoZGlzdGFuY2VTdHJpbmdGbiAmJiBkaXN0YW5jZVN0cmluZ0ZuKDApKSB8fCAodGhpcy5kaXN0YW5jZVN0cmluZ0ZuICYmIHRoaXMuZGlzdGFuY2VTdHJpbmdGbigwKSkgfHwgYDAgS21gLFxyXG4gICAgICAgICAgICAgIHNjYWxlOiAwLjIsXHJcbiAgICAgICAgICAgICAgZm9udDogJzgwcHggSGVsdmV0aWNhJyxcclxuICAgICAgICAgICAgICBwaXhlbE9mZnNldDogbmV3IENlc2l1bS5DYXJ0ZXNpYW4yKC0yMCwgLTgpLFxyXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbnNbMF0sXHJcbiAgICAgICAgICAgICAgZmlsbENvbG9yOiBDZXNpdW0uQ29sb3IuV0hJVEUsXHJcbiAgICAgICAgICAgICAgb3V0bGluZUNvbG9yOiBDZXNpdW0uQ29sb3IuV0hJVEUsXHJcbiAgICAgICAgICAgICAgc2hvd0JhY2tncm91bmQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgLi4uKHRoaXMubGFiZWxzU3R5bGUgYXMgYW55KSxcclxuICAgICAgICAgICAgICAuLi4obGFiZWxzU3R5bGUgYXMgYW55KSxcclxuICAgICAgICAgICAgICAuLi4odGhpcy5kaXN0YW5jZUxhYmVsc1N0eWxlIGFzIGFueSksXHJcbiAgICAgICAgICAgICAgLi4uKGRpc3RhbmNlTGFiZWxzU3R5bGUgYXMgYW55KSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJuYjtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmFuZ2VBbmRCZWFyaW5nT3B0aW9ucyB7XHJcbiAgbGluZUVkaXRPcHRpb25zPzogUG9seWxpbmVFZGl0T3B0aW9ucztcclxuICBsYWJlbHNTdHlsZT86IExhYmVsU3R5bGU7XHJcbiAgZGlzdGFuY2VMYWJlbHNTdHlsZT86IExhYmVsU3R5bGU7XHJcbiAgYmVhcmluZ0xhYmVsc1N0eWxlPzogTGFiZWxTdHlsZTtcclxuICBiZWFyaW5nU3RyaW5nRm4/OiAodmFsdWU6IG51bWJlcikgPT4gc3RyaW5nO1xyXG4gIGRpc3RhbmNlU3RyaW5nRm4/OiAodmFsdWU6IG51bWJlcikgPT4gc3RyaW5nO1xyXG4gIGxhYmVsc1JlbmRlckZuPzogKHVwZGF0ZTogUG9seWxpbmVFZGl0VXBkYXRlLCBsYWJlbHM6IExhYmVsUHJvcHNbXSkgPT4gTGFiZWxQcm9wc1tdO1xyXG59XHJcbiJdfQ==