@hestia-earth/ui-components 0.24.0-6 → 0.24.0-8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common/maps-utils.d.ts +1 -0
- package/esm2022/common/maps-utils.mjs +1 -1
- package/esm2022/cycles/cycles-nodes/cycles-nodes.component.mjs +3 -3
- package/esm2022/impact-assessments/impact-assessments-products/impact-assessments-products.component.mjs +3 -3
- package/esm2022/node/node-store.service.mjs +13 -9
- package/esm2022/sites/sites-maps/sites-maps.component.mjs +20 -7
- package/esm2022/sites/sites-measurements/sites-measurements.component.mjs +3 -3
- package/fesm2022/hestia-earth-ui-components.mjs +34 -17
- package/fesm2022/hestia-earth-ui-components.mjs.map +1 -1
- package/node/node-store.service.d.ts +6 -0
- package/package.json +1 -1
- package/sites/sites-maps/sites-maps.component.d.ts +6 -3
|
@@ -5,7 +5,7 @@ import { NodeType } from '@hestia-earth/schema';
|
|
|
5
5
|
import { unique } from '@hestia-earth/utils';
|
|
6
6
|
import { DataState } from '@hestia-earth/api';
|
|
7
7
|
import { from } from 'rxjs';
|
|
8
|
-
import { map, mergeMap, shareReplay } from 'rxjs/operators';
|
|
8
|
+
import { map, mergeMap, shareReplay, toArray } from 'rxjs/operators';
|
|
9
9
|
import { termLocation, termLocationName } from '../../terms/terms.model';
|
|
10
10
|
import { HE_MAP_LOADED, createMarker, polygonsFromFeature, polygonBounds, strokeStyle, polygonToMap } from '../../common/maps-utils';
|
|
11
11
|
import { baseUrl } from '../../common/utils';
|
|
@@ -66,7 +66,7 @@ export class SitesMapsComponent {
|
|
|
66
66
|
this._sitePolygons = computed(() => this.nodes().flatMap(sitePolygon).filter(Boolean));
|
|
67
67
|
this.sitePolygons = computed(() => this._sitePolygons().map(polygon => polygonToMap(polygon)));
|
|
68
68
|
this._termPolygons = signal([]);
|
|
69
|
-
this.termPolygons =
|
|
69
|
+
this.termPolygons = signal([]);
|
|
70
70
|
this.showNoLocation = computed(() => this.markers().length === 0 && this.sitePolygons().length === 0 && this.termPolygons().length === 0);
|
|
71
71
|
this.mapCenter = computed(() => this.markers()?.[0]?.position || defaultCenter);
|
|
72
72
|
effect(() => {
|
|
@@ -76,8 +76,15 @@ export class SitesMapsComponent {
|
|
|
76
76
|
effect(() => {
|
|
77
77
|
if (this._mapReady() && this._loadPolygons()) {
|
|
78
78
|
from(regionIds(this.nodes()))
|
|
79
|
-
.pipe(mergeMap(id => this.loadTermId(id)
|
|
80
|
-
.subscribe(values =>
|
|
79
|
+
.pipe(mergeMap(id => this.loadTermId(id).pipe(map(feature => ({ id, polygons: polygonsFromFeature(feature) })))), toArray())
|
|
80
|
+
.subscribe(values => {
|
|
81
|
+
this._termPolygons.set(values.flatMap(({ polygons }) => polygons));
|
|
82
|
+
const polygons = values.flatMap(({ id, polygons }) => polygons.map((polygon, index) => ({
|
|
83
|
+
...polygonToMap(polygon),
|
|
84
|
+
id: [id, index].join('-')
|
|
85
|
+
})));
|
|
86
|
+
this.termPolygons.set(polygons);
|
|
87
|
+
});
|
|
81
88
|
}
|
|
82
89
|
}, { allowSignalWrites: true });
|
|
83
90
|
}
|
|
@@ -92,6 +99,12 @@ export class SitesMapsComponent {
|
|
|
92
99
|
.pipe(shareReplay({ bufferSize: 1, refCount: true }));
|
|
93
100
|
return this._loadPolygonsRequests[id];
|
|
94
101
|
}
|
|
102
|
+
trackByMarker(_index, { position, label: { text } }) {
|
|
103
|
+
return [text, position.lat, position.lng].join('-');
|
|
104
|
+
}
|
|
105
|
+
trackByPolygon(_index, { id }) {
|
|
106
|
+
return id;
|
|
107
|
+
}
|
|
95
108
|
mapLoaded() {
|
|
96
109
|
setTimeout(() => {
|
|
97
110
|
// loaded data as geojson
|
|
@@ -100,11 +113,11 @@ export class SitesMapsComponent {
|
|
|
100
113
|
});
|
|
101
114
|
}
|
|
102
115
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: SitesMapsComponent, deps: [{ token: HE_MAP_LOADED }, { token: i1.HeNodeService }, { token: i1.HeNodeStoreService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
103
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.8", type: SitesMapsComponent, selector: "he-sites-maps", inputs: { loadPolygons: "loadPolygons", sites: "sites", center: "center", zoom: "zoom", showNotice: "showNotice" }, viewQueries: [{ propertyName: "map", first: true, predicate: GoogleMap, descendants: true }], ngImport: i0, template: "<google-map\n *ngIf=\"mapLoaded$ | async\"\n (mapInitialized)=\"mapLoaded()\"\n height=\"100%\"\n width=\"100%\"\n [zoom]=\"zoom\"\n [center]=\"mapCenter()\">\n <map-marker
|
|
116
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.8", type: SitesMapsComponent, selector: "he-sites-maps", inputs: { loadPolygons: "loadPolygons", sites: "sites", center: "center", zoom: "zoom", showNotice: "showNotice" }, viewQueries: [{ propertyName: "map", first: true, predicate: GoogleMap, descendants: true }], ngImport: i0, template: "<google-map\n *ngIf=\"mapLoaded$ | async\"\n (mapInitialized)=\"mapLoaded()\"\n height=\"100%\"\n width=\"100%\"\n [zoom]=\"zoom\"\n [center]=\"mapCenter()\">\n <map-marker\n *ngFor=\"let marker of markers(); trackBy: trackByMarker\"\n [position]=\"marker.position\"\n [icon]=\"marker.icon\"></map-marker>\n <map-polygon\n *ngFor=\"let polygon of sitePolygons(); trackBy: trackByPolygon\"\n [paths]=\"polygon.paths\"\n [options]=\"polygon.options\" />\n <map-polygon\n *ngFor=\"let polygon of termPolygons(); trackBy: trackByPolygon\"\n [paths]=\"polygon.paths\"\n [options]=\"polygon.options\" />\n</google-map>\n\n<p *ngIf=\"showNotice\" class=\"mt-2 is-italic is-size-7\">The information provided might not be complete</p>\n\n<div class=\"no-location has-text-center has-text-light\" *ngIf=\"showNoLocation()\">\n <span>No precise location data</span>\n</div>\n", styles: [":host{display:block;height:100%;position:relative;width:100%}.no-location{background-color:#0000004d;left:0;height:100%;position:absolute;top:0;width:100%;z-index:9}.no-location>span{display:inline-block;margin-top:12%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.GoogleMap, selector: "google-map", inputs: ["height", "width", "mapTypeId", "center", "zoom", "options"], outputs: ["mapInitialized", "authFailure", "boundsChanged", "centerChanged", "mapClick", "mapDblclick", "mapDrag", "mapDragend", "mapDragstart", "headingChanged", "idle", "maptypeidChanged", "mapMousemove", "mapMouseout", "mapMouseover", "projectionChanged", "mapRightclick", "tilesloaded", "tiltChanged", "zoomChanged"], exportAs: ["googleMap"] }, { kind: "directive", type: i3.MapMarker, selector: "map-marker", inputs: ["title", "position", "label", "clickable", "options", "icon", "visible"], outputs: ["animationChanged", "mapClick", "clickableChanged", "cursorChanged", "mapDblclick", "mapDrag", "mapDragend", "draggableChanged", "mapDragstart", "flatChanged", "iconChanged", "mapMousedown", "mapMouseout", "mapMouseover", "mapMouseup", "positionChanged", "mapRightclick", "shapeChanged", "titleChanged", "visibleChanged", "zindexChanged"], exportAs: ["mapMarker"] }, { kind: "directive", type: i3.MapPolygon, selector: "map-polygon", inputs: ["options", "paths"], outputs: ["polygonClick", "polygonDblclick", "polygonDrag", "polygonDragend", "polygonDragstart", "polygonMousedown", "polygonMousemove", "polygonMouseout", "polygonMouseover", "polygonMouseup", "polygonRightclick"], exportAs: ["mapPolygon"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
104
117
|
}
|
|
105
118
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: SitesMapsComponent, decorators: [{
|
|
106
119
|
type: Component,
|
|
107
|
-
args: [{ selector: 'he-sites-maps', changeDetection: ChangeDetectionStrategy.OnPush, template: "<google-map\n *ngIf=\"mapLoaded$ | async\"\n (mapInitialized)=\"mapLoaded()\"\n height=\"100%\"\n width=\"100%\"\n [zoom]=\"zoom\"\n [center]=\"mapCenter()\">\n <map-marker
|
|
120
|
+
args: [{ selector: 'he-sites-maps', changeDetection: ChangeDetectionStrategy.OnPush, template: "<google-map\n *ngIf=\"mapLoaded$ | async\"\n (mapInitialized)=\"mapLoaded()\"\n height=\"100%\"\n width=\"100%\"\n [zoom]=\"zoom\"\n [center]=\"mapCenter()\">\n <map-marker\n *ngFor=\"let marker of markers(); trackBy: trackByMarker\"\n [position]=\"marker.position\"\n [icon]=\"marker.icon\"></map-marker>\n <map-polygon\n *ngFor=\"let polygon of sitePolygons(); trackBy: trackByPolygon\"\n [paths]=\"polygon.paths\"\n [options]=\"polygon.options\" />\n <map-polygon\n *ngFor=\"let polygon of termPolygons(); trackBy: trackByPolygon\"\n [paths]=\"polygon.paths\"\n [options]=\"polygon.options\" />\n</google-map>\n\n<p *ngIf=\"showNotice\" class=\"mt-2 is-italic is-size-7\">The information provided might not be complete</p>\n\n<div class=\"no-location has-text-center has-text-light\" *ngIf=\"showNoLocation()\">\n <span>No precise location data</span>\n</div>\n", styles: [":host{display:block;height:100%;position:relative;width:100%}.no-location{background-color:#0000004d;left:0;height:100%;position:absolute;top:0;width:100%;z-index:9}.no-location>span{display:inline-block;margin-top:12%}\n"] }]
|
|
108
121
|
}], ctorParameters: function () { return [{ type: i4.Observable, decorators: [{
|
|
109
122
|
type: Inject,
|
|
110
123
|
args: [HE_MAP_LOADED]
|
|
@@ -122,4 +135,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.8", ngImpor
|
|
|
122
135
|
}], showNotice: [{
|
|
123
136
|
type: Input
|
|
124
137
|
}] } });
|
|
125
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l0ZXMtbWFwcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2l0ZXMvc2l0ZXMtbWFwcy9zaXRlcy1tYXBzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9zaXRlcy9zaXRlcy1tYXBzL3NpdGVzLW1hcHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2SCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQXdELE1BQU0sc0JBQXNCLENBQUM7QUFDdEcsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RSxPQUFPLEVBQ0wsYUFBYSxFQUNiLFlBQVksRUFDWixtQkFBbUIsRUFDbkIsYUFBYSxFQUNiLFdBQVcsRUFFWCxZQUFZLEVBQ2IsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7OztBQVE3QyxNQUFNLFlBQVksR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBUSxF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QztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBL0ZVLGtCQUFrQixrQkFvRG5CLGFBQWE7a0dBcERaLGtCQUFrQiw4TUFJbEIsU0FBUyxnRENyRXRCLGd4QkFpQkE7OzJGRGdEYSxrQkFBa0I7a0JBTjlCLFNBQVM7K0JBQ0UsZUFBZSxtQkFHUix1QkFBdUIsQ0FBQyxNQUFNOzswQkFzRDVDLE1BQU07MkJBQUMsYUFBYTt5R0EvQ2YsR0FBRztzQkFEVixTQUFTO3VCQUFDLFNBQVM7Z0JBS2hCLFlBQVk7c0JBRGYsS0FBSztnQkFVRixLQUFLO3NCQURSLEtBQUs7Z0JBT0YsTUFBTTtzQkFEVCxLQUFLO2dCQU1JLElBQUk7c0JBRGIsS0FBSztnQkFHSSxVQUFVO3NCQURuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgVmlld0NoaWxkLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgSW5qZWN0LCBzaWduYWwsIGNvbXB1dGVkLCBlZmZlY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgR29vZ2xlTWFwIH0gZnJvbSAnQGFuZ3VsYXIvZ29vZ2xlLW1hcHMnO1xuaW1wb3J0IHsgTm9kZVR5cGUsIElTaXRlSlNPTkxELCBTaXRlLCBJT3JnYW5pc2F0aW9uSlNPTkxELCBPcmdhbmlzYXRpb24gfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcbmltcG9ydCB7IERhdGFTdGF0ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvYXBpJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgbWVyZ2VNYXAsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBIZU5vZGVTZXJ2aWNlLCBIZU5vZGVTdG9yZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9ub2RlJztcbmltcG9ydCB7IHRlcm1Mb2NhdGlvbiwgdGVybUxvY2F0aW9uTmFtZSB9IGZyb20gJy4uLy4uL3Rlcm1zL3Rlcm1zLm1vZGVsJztcbmltcG9ydCB7XG4gIEhFX01BUF9MT0FERUQsXG4gIGNyZWF0ZU1hcmtlcixcbiAgcG9seWdvbnNGcm9tRmVhdHVyZSxcbiAgcG9seWdvbkJvdW5kcyxcbiAgc3Ryb2tlU3R5bGUsXG4gIGZlYXR1cmUsXG4gIHBvbHlnb25Ub01hcFxufSBmcm9tICcuLi8uLi9jb21tb24vbWFwcy11dGlscyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWxzJztcblxuaW50ZXJmYWNlIElMb2FkaW5nUmVxdWVzdHMge1xuICBbaWQ6IHN0cmluZ106IE9ic2VydmFibGU8ZmVhdHVyZT47XG59XG5cbnR5cGUgc2l0ZSA9IElTaXRlSlNPTkxEIHwgU2l0ZSB8IElPcmdhbmlzYXRpb25KU09OTEQgfCBPcmdhbmlzYXRpb247XG5cbmNvbnN0IHNpdGVMb2NhdGlvbiA9ICh7IGxhdGl0dWRlLCBsb25naXR1ZGUgfTogc2l0ZSkgPT5cbiAgbGF0aXR1ZGUgJiYgbG9uZ2l0dWRlXG4gICAgPyB7XG4gICAgICAgIGxhdDogbGF0aXR1ZGUsXG4gICAgICAgIGxuZzogbG9uZ2l0dWRlXG4gICAgICB9XG4gICAgOiB1bmRlZmluZWQ7XG5cbmNvbnN0IHNpdGVEZWZhdWx0TG9jYXRpb24gPSAoeyByZWdpb24sIGNvdW50cnkgfTogc2l0ZSkgPT4ge1xuICBjb25zdCBtYXJrZXJzID0gW1xuICAgIHJlZ2lvbiA/IGNyZWF0ZU1hcmtlcih0ZXJtTG9jYXRpb24ocmVnaW9uKSwgdGVybUxvY2F0aW9uTmFtZShyZWdpb24pLm5hbWUsIHVuZGVmaW5lZCwgMjApIDogdW5kZWZpbmVkLFxuICAgIGNvdW50cnkgPyBjcmVhdGVNYXJrZXIodGVybUxvY2F0aW9uKGNvdW50cnkpLCB0ZXJtTG9jYXRpb25OYW1lKGNvdW50cnkpLm5hbWUsIHVuZGVmaW5lZCwgNDApIDogdW5kZWZpbmVkXG4gIF0uZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gbWFya2Vycz8uWzBdO1xufTtcblxuY29uc3Qgc2l0ZU1hcmtlciA9IChzaXRlOiBzaXRlKSA9PlxuICBjcmVhdGVNYXJrZXIoc2l0ZSA/IHNpdGVMb2NhdGlvbihzaXRlKSA6IHVuZGVmaW5lZCwgc2l0ZS5uYW1lKSB8fCBzaXRlRGVmYXVsdExvY2F0aW9uKHNpdGUpO1xuXG5jb25zdCBzaXRlUG9seWdvbiA9ICh7IGJvdW5kYXJ5IH06IHNpdGUpID0+XG4gIChib3VuZGFyeSA/IHBvbHlnb25zRnJvbUZlYXR1cmUoYm91bmRhcnkgYXMgYW55LCAnIzREOEVDQicpIDogdW5kZWZpbmVkKSBhcyBnb29nbGUubWFwcy5Qb2x5Z29uW107XG5cbmNvbnN0IHJlZ2lvbklkcyA9IChzaXRlczogc2l0ZVtdKTogc3RyaW5nW10gPT5cbiAgdW5pcXVlKFxuICAgIChzaXRlcyB8fCBbXSlcbiAgICAgIC5tYXAoKHsgY291bnRyeSwgcmVnaW9uIH0pID0+IChyZWdpb24gPyByZWdpb25bJ0BpZCddIDogY291bnRyeSA/IGNvdW50cnlbJ0BpZCddIDogbnVsbCkpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICk7XG5cbmNvbnN0IGRlZmF1bHRDZW50ZXI6IGdvb2dsZS5tYXBzLkxhdExuZ0xpdGVyYWwgPSB7IGxhdDogMCwgbG5nOiAwIH07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLXNpdGVzLW1hcHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2l0ZXMtbWFwcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NpdGVzLW1hcHMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgU2l0ZXNNYXBzQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBfbG9hZFBvbHlnb25zUmVxdWVzdHM6IElMb2FkaW5nUmVxdWVzdHMgPSB7fTtcbiAgcHJpdmF0ZSBfbWFwUmVhZHkgPSBzaWduYWwoZmFsc2UpO1xuXG4gIEBWaWV3Q2hpbGQoR29vZ2xlTWFwKVxuICBwcml2YXRlIG1hcD86IEdvb2dsZU1hcDtcblxuICBwcml2YXRlIF9sb2FkUG9seWdvbnMgPSBzaWduYWwodHJ1ZSk7XG4gIEBJbnB1dCgpXG4gIHNldCBsb2FkUG9seWdvbnModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9sb2FkUG9seWdvbnMuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IFNpdGUgZGlyZWN0bHkgd2l0aG91dCB1c2luZyB0aGUgbm9kZSBzdG9yZS5cbiAgICovXG4gIHByaXZhdGUgX3NpdGVzID0gc2lnbmFsKFtdIGFzIHNpdGVbXSk7XG4gIEBJbnB1dCgpXG4gIHNldCBzaXRlcyh2YWx1ZTogc2l0ZVtdKSB7XG4gICAgdGhpcy5fc2l0ZXMuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NlbnRlciA9IHNpZ25hbChkZWZhdWx0Q2VudGVyKTtcbiAgQElucHV0KClcbiAgc2V0IGNlbnRlcih2YWx1ZTogZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbCkge1xuICAgIHRoaXMuX2NlbnRlci5zZXQodmFsdWUpO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIHpvb20gPSAyO1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgc2hvd05vdGljZSA9IHRydWU7XG5cbiAgcHJvdGVjdGVkIG9wdGlvbnM6IGdvb2dsZS5tYXBzLk1hcE9wdGlvbnMgPSB7XG4gICAgc3R5bGVzOiBbXVxuICB9O1xuXG4gIHByaXZhdGUgb3JpZ2luYWxTaXRlcyA9IHRvU2lnbmFsKHRoaXMubm9kZVN0b3JlU2VydmljZS5maW5kQnlTdGF0ZSQ8SVNpdGVKU09OTEQ+KE5vZGVUeXBlLlNpdGUsIERhdGFTdGF0ZS5vcmlnaW5hbCkpO1xuICBwcml2YXRlIG5vZGVzID0gY29tcHV0ZWQoKCkgPT4gWy4uLih0aGlzLl9zaXRlcygpIHx8IFtdKSwgLi4uKHRoaXMub3JpZ2luYWxTaXRlcygpIHx8IFtdKV0pO1xuXG4gIHByb3RlY3RlZCBtYXJrZXJzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5ub2RlcygpLm1hcChzaXRlTWFya2VyKS5maWx0ZXIoQm9vbGVhbikpO1xuICBwcml2YXRlIF9zaXRlUG9seWdvbnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm5vZGVzKCkuZmxhdE1hcChzaXRlUG9seWdvbikuZmlsdGVyKEJvb2xlYW4pKTtcbiAgcHJvdGVjdGVkIHNpdGVQb2x5Z29ucyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX3NpdGVQb2x5Z29ucygpLm1hcChwb2x5Z29uID0+IHBvbHlnb25Ub01hcChwb2x5Z29uKSkpO1xuICBwcml2YXRlIF90ZXJtUG9seWdvbnMgPSBzaWduYWwoW10gYXMgZ29vZ2xlLm1hcHMuUG9seWdvbltdKTtcbiAgcHJvdGVjdGVkIHRlcm1Qb2x5Z29ucyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX3Rlcm1Qb2x5Z29ucygpLm1hcChwb2x5Z29uID0+IHBvbHlnb25Ub01hcChwb2x5Z29uKSkpO1xuXG4gIHByb3RlY3RlZCBzaG93Tm9Mb2NhdGlvbiA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMubWFya2VycygpLmxlbmd0aCA9PT0gMCAmJiB0aGlzLnNpdGVQb2x5Z29ucygpLmxlbmd0aCA9PT0gMCAmJiB0aGlzLnRlcm1Qb2x5Z29ucygpLmxlbmd0aCA9PT0gMFxuICApO1xuICBwcm90ZWN0ZWQgbWFwQ2VudGVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5tYXJrZXJzKCk/LlswXT8ucG9zaXRpb24gfHwgZGVmYXVsdENlbnRlcik7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChIRV9NQVBfTE9BREVEKSBwcm90ZWN0ZWQgbWFwTG9hZGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPixcbiAgICBwcml2YXRlIG5vZGVTZXJ2aWNlOiBIZU5vZGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm9kZVN0b3JlU2VydmljZTogSGVOb2RlU3RvcmVTZXJ2aWNlXG4gICkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBwb2x5Z29ucyA9IHRoaXMuX3NpdGVQb2x5Z29ucygpPy5sZW5ndGggPyB0aGlzLl9zaXRlUG9seWdvbnMoKSA6IHRoaXMuX3Rlcm1Qb2x5Z29ucygpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNlbnRlclBvbHlnb25zKHBvbHlnb25zKSwgMTAwMCk7XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9tYXBSZWFkeSgpICYmIHRoaXMuX2xvYWRQb2x5Z29ucygpKSB7XG4gICAgICAgICAgZnJvbShyZWdpb25JZHModGhpcy5ub2RlcygpKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICBtZXJnZU1hcChpZCA9PiB0aGlzLmxvYWRUZXJtSWQoaWQpKSxcbiAgICAgICAgICAgICAgbWFwKGZlYXR1cmUgPT4gcG9seWdvbnNGcm9tRmVhdHVyZShmZWF0dXJlKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodmFsdWVzID0+IHRoaXMuX3Rlcm1Qb2x5Z29ucy5zZXQodmFsdWVzKSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjZW50ZXJQb2x5Z29ucyhwb2x5Z29uczogZ29vZ2xlLm1hcHMuUG9seWdvbltdKSB7XG4gICAgcmV0dXJuIHBvbHlnb25zPy5sZW5ndGggPyB0aGlzLm1hcCEuZ29vZ2xlTWFwIS5maXRCb3VuZHMocG9seWdvbkJvdW5kcyhwb2x5Z29ucykpIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFRlcm1JZChpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fbG9hZFBvbHlnb25zUmVxdWVzdHNbaWRdID1cbiAgICAgIHRoaXMuX2xvYWRQb2x5Z29uc1JlcXVlc3RzW2lkXSB8fFxuICAgICAgdGhpcy5ub2RlU2VydmljZVxuICAgICAgICAuZG93bmxvYWRSYXckPGZlYXR1cmU+KGAke2Jhc2VVcmwoKX0vZ2FkbS8ke2lkfS5nZW9qc29uYClcbiAgICAgICAgLnBpcGUoc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSk7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRQb2x5Z29uc1JlcXVlc3RzW2lkXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXBMb2FkZWQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBsb2FkZWQgZGF0YSBhcyBnZW9qc29uXG4gICAgICB0aGlzLm1hcC5nb29nbGVNYXAuZGF0YS5zZXRTdHlsZSgoKSA9PiAoeyAuLi5zdHJva2VTdHlsZSwgc3Ryb2tlT3BhY2l0eTogMC4xIH0pKTtcbiAgICAgIHRoaXMuX21hcFJlYWR5LnNldCh0cnVlKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGdvb2dsZS1tYXBcbiAgKm5nSWY9XCJtYXBMb2FkZWQkIHwgYXN5bmNcIlxuICAobWFwSW5pdGlhbGl6ZWQpPVwibWFwTG9hZGVkKClcIlxuICBoZWlnaHQ9XCIxMDAlXCJcbiAgd2lkdGg9XCIxMDAlXCJcbiAgW3pvb21dPVwiem9vbVwiXG4gIFtjZW50ZXJdPVwibWFwQ2VudGVyKClcIj5cbiAgPG1hcC1tYXJrZXIgKm5nRm9yPVwibGV0IG1hcmtlciBvZiBtYXJrZXJzKClcIiBbcG9zaXRpb25dPVwibWFya2VyLnBvc2l0aW9uXCIgW2ljb25dPVwibWFya2VyLmljb25cIj48L21hcC1tYXJrZXI+XG4gIDxtYXAtcG9seWdvbiAqbmdGb3I9XCJsZXQgcG9seWdvbiBvZiBzaXRlUG9seWdvbnMoKVwiIFtwYXRoc109XCJwb2x5Z29uLnBhdGhzXCIgW29wdGlvbnNdPVwicG9seWdvbi5vcHRpb25zXCIgLz5cbiAgPG1hcC1wb2x5Z29uICpuZ0Zvcj1cImxldCBwb2x5Z29uIG9mIHRlcm1Qb2x5Z29ucygpXCIgW3BhdGhzXT1cInBvbHlnb24ucGF0aHNcIiBbb3B0aW9uc109XCJwb2x5Z29uLm9wdGlvbnNcIiAvPlxuPC9nb29nbGUtbWFwPlxuXG48cCAqbmdJZj1cInNob3dOb3RpY2VcIiBjbGFzcz1cIm10LTIgaXMtaXRhbGljIGlzLXNpemUtN1wiPlRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBtaWdodCBub3QgYmUgY29tcGxldGU8L3A+XG5cbjxkaXYgY2xhc3M9XCJuby1sb2NhdGlvbiBoYXMtdGV4dC1jZW50ZXIgaGFzLXRleHQtbGlnaHRcIiAqbmdJZj1cInNob3dOb0xvY2F0aW9uKClcIj5cbiAgPHNwYW4+Tm8gcHJlY2lzZSBsb2NhdGlvbiBkYXRhPC9zcGFuPlxuPC9kaXY+XG4iXX0=
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l0ZXMtbWFwcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2l0ZXMvc2l0ZXMtbWFwcy9zaXRlcy1tYXBzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9zaXRlcy9zaXRlcy1tYXBzL3NpdGVzLW1hcHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2SCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQXdELE1BQU0sc0JBQXNCLENBQUM7QUFDdEcsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekUsT0FBTyxFQUNMLGFBQWEsRUFDYixZQUFZLEVBQ1osbUJBQW1CLEVBQ25CLGFBQWEsRUFDYixXQUFXLEVBRVgsWUFBWSxFQUdiLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7QUFRN0MsTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxT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RFIsS0FBSztnQkFPRixNQUFNO3NCQURULEtBQUs7Z0JBTUksSUFBSTtzQkFEYixLQUFLO2dCQUdJLFVBQVU7c0JBRG5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBWaWV3Q2hpbGQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBJbmplY3QsIHNpZ25hbCwgY29tcHV0ZWQsIGVmZmVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBHb29nbGVNYXAgfSBmcm9tICdAYW5ndWxhci9nb29nbGUtbWFwcyc7XG5pbXBvcnQgeyBOb2RlVHlwZSwgSVNpdGVKU09OTEQsIFNpdGUsIElPcmdhbmlzYXRpb25KU09OTEQsIE9yZ2FuaXNhdGlvbiB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7IHVuaXF1ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMnO1xuaW1wb3J0IHsgRGF0YVN0YXRlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBtZXJnZU1hcCwgc2hhcmVSZXBsYXksIHRvQXJyYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEhlTm9kZVNlcnZpY2UsIEhlTm9kZVN0b3JlU2VydmljZSB9IGZyb20gJy4uLy4uL25vZGUnO1xuaW1wb3J0IHsgdGVybUxvY2F0aW9uLCB0ZXJtTG9jYXRpb25OYW1lIH0gZnJvbSAnLi4vLi4vdGVybXMvdGVybXMubW9kZWwnO1xuaW1wb3J0IHtcbiAgSEVfTUFQX0xPQURFRCxcbiAgY3JlYXRlTWFya2VyLFxuICBwb2x5Z29uc0Zyb21GZWF0dXJlLFxuICBwb2x5Z29uQm91bmRzLFxuICBzdHJva2VTdHlsZSxcbiAgZmVhdHVyZSxcbiAgcG9seWdvblRvTWFwLFxuICBJTWFya2VyLFxuICBJUG9seWdvbk1hcFxufSBmcm9tICcuLi8uLi9jb21tb24vbWFwcy11dGlscyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWxzJztcblxuaW50ZXJmYWNlIElMb2FkaW5nUmVxdWVzdHMge1xuICBbaWQ6IHN0cmluZ106IE9ic2VydmFibGU8ZmVhdHVyZT47XG59XG5cbnR5cGUgc2l0ZSA9IElTaXRlSlNPTkxEIHwgU2l0ZSB8IElPcmdhbmlzYXRpb25KU09OTEQgfCBPcmdhbmlzYXRpb247XG5cbmNvbnN0IHNpdGVMb2NhdGlvbiA9ICh7IGxhdGl0dWRlLCBsb25naXR1ZGUgfTogc2l0ZSkgPT5cbiAgbGF0aXR1ZGUgJiYgbG9uZ2l0dWRlXG4gICAgPyB7XG4gICAgICAgIGxhdDogbGF0aXR1ZGUsXG4gICAgICAgIGxuZzogbG9uZ2l0dWRlXG4gICAgICB9XG4gICAgOiB1bmRlZmluZWQ7XG5cbmNvbnN0IHNpdGVEZWZhdWx0TG9jYXRpb24gPSAoeyByZWdpb24sIGNvdW50cnkgfTogc2l0ZSkgPT4ge1xuICBjb25zdCBtYXJrZXJzID0gW1xuICAgIHJlZ2lvbiA/IGNyZWF0ZU1hcmtlcih0ZXJtTG9jYXRpb24ocmVnaW9uKSwgdGVybUxvY2F0aW9uTmFtZShyZWdpb24pLm5hbWUsIHVuZGVmaW5lZCwgMjApIDogdW5kZWZpbmVkLFxuICAgIGNvdW50cnkgPyBjcmVhdGVNYXJrZXIodGVybUxvY2F0aW9uKGNvdW50cnkpLCB0ZXJtTG9jYXRpb25OYW1lKGNvdW50cnkpLm5hbWUsIHVuZGVmaW5lZCwgNDApIDogdW5kZWZpbmVkXG4gIF0uZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gbWFya2Vycz8uWzBdO1xufTtcblxuY29uc3Qgc2l0ZU1hcmtlciA9IChzaXRlOiBzaXRlKSA9PlxuICBjcmVhdGVNYXJrZXIoc2l0ZSA/IHNpdGVMb2NhdGlvbihzaXRlKSA6IHVuZGVmaW5lZCwgc2l0ZS5uYW1lKSB8fCBzaXRlRGVmYXVsdExvY2F0aW9uKHNpdGUpO1xuXG5jb25zdCBzaXRlUG9seWdvbiA9ICh7IGJvdW5kYXJ5IH06IHNpdGUpID0+XG4gIChib3VuZGFyeSA/IHBvbHlnb25zRnJvbUZlYXR1cmUoYm91bmRhcnkgYXMgYW55LCAnIzREOEVDQicpIDogdW5kZWZpbmVkKSBhcyBnb29nbGUubWFwcy5Qb2x5Z29uW107XG5cbmNvbnN0IHJlZ2lvbklkcyA9IChzaXRlczogc2l0ZVtdKTogc3RyaW5nW10gPT5cbiAgdW5pcXVlKFxuICAgIChzaXRlcyB8fCBbXSlcbiAgICAgIC5tYXAoKHsgY291bnRyeSwgcmVnaW9uIH0pID0+IChyZWdpb24gPyByZWdpb25bJ0BpZCddIDogY291bnRyeSA/IGNvdW50cnlbJ0BpZCddIDogbnVsbCkpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICk7XG5cbmNvbnN0IGRlZmF1bHRDZW50ZXI6IGdvb2dsZS5tYXBzLkxhdExuZ0xpdGVyYWwgPSB7IGxhdDogMCwgbG5nOiAwIH07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLXNpdGVzLW1hcHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2l0ZXMtbWFwcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NpdGVzLW1hcHMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgU2l0ZXNNYXBzQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBfbG9hZFBvbHlnb25zUmVxdWVzdHM6IElMb2FkaW5nUmVxdWVzdHMgPSB7fTtcbiAgcHJpdmF0ZSBfbWFwUmVhZHkgPSBzaWduYWwoZmFsc2UpO1xuXG4gIEBWaWV3Q2hpbGQoR29vZ2xlTWFwKVxuICBwcml2YXRlIG1hcD86IEdvb2dsZU1hcDtcblxuICBwcml2YXRlIF9sb2FkUG9seWdvbnMgPSBzaWduYWwodHJ1ZSk7XG4gIEBJbnB1dCgpXG4gIHNldCBsb2FkUG9seWdvbnModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9sb2FkUG9seWdvbnMuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IFNpdGUgZGlyZWN0bHkgd2l0aG91dCB1c2luZyB0aGUgbm9kZSBzdG9yZS5cbiAgICovXG4gIHByaXZhdGUgX3NpdGVzID0gc2lnbmFsKFtdIGFzIHNpdGVbXSk7XG4gIEBJbnB1dCgpXG4gIHNldCBzaXRlcyh2YWx1ZTogc2l0ZVtdKSB7XG4gICAgdGhpcy5fc2l0ZXMuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NlbnRlciA9IHNpZ25hbChkZWZhdWx0Q2VudGVyKTtcbiAgQElucHV0KClcbiAgc2V0IGNlbnRlcih2YWx1ZTogZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbCkge1xuICAgIHRoaXMuX2NlbnRlci5zZXQodmFsdWUpO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIHpvb20gPSAyO1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgc2hvd05vdGljZSA9IHRydWU7XG5cbiAgcHJvdGVjdGVkIG9wdGlvbnM6IGdvb2dsZS5tYXBzLk1hcE9wdGlvbnMgPSB7XG4gICAgc3R5bGVzOiBbXVxuICB9O1xuXG4gIHByaXZhdGUgb3JpZ2luYWxTaXRlcyA9IHRvU2lnbmFsKHRoaXMubm9kZVN0b3JlU2VydmljZS5maW5kQnlTdGF0ZSQ8SVNpdGVKU09OTEQ+KE5vZGVUeXBlLlNpdGUsIERhdGFTdGF0ZS5vcmlnaW5hbCkpO1xuICBwcml2YXRlIG5vZGVzID0gY29tcHV0ZWQoKCkgPT4gWy4uLih0aGlzLl9zaXRlcygpIHx8IFtdKSwgLi4uKHRoaXMub3JpZ2luYWxTaXRlcygpIHx8IFtdKV0pO1xuXG4gIHByb3RlY3RlZCBtYXJrZXJzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5ub2RlcygpLm1hcChzaXRlTWFya2VyKS5maWx0ZXIoQm9vbGVhbikpO1xuICBwcml2YXRlIF9zaXRlUG9seWdvbnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm5vZGVzKCkuZmxhdE1hcChzaXRlUG9seWdvbikuZmlsdGVyKEJvb2xlYW4pKTtcbiAgcHJvdGVjdGVkIHNpdGVQb2x5Z29ucyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX3NpdGVQb2x5Z29ucygpLm1hcChwb2x5Z29uID0+IHBvbHlnb25Ub01hcChwb2x5Z29uKSkpO1xuICBwcml2YXRlIF90ZXJtUG9seWdvbnMgPSBzaWduYWwoW10gYXMgZ29vZ2xlLm1hcHMuUG9seWdvbltdKTtcbiAgcHJvdGVjdGVkIHRlcm1Qb2x5Z29ucyA9IHNpZ25hbChbXSBhcyBJUG9seWdvbk1hcFtdKTtcblxuICBwcm90ZWN0ZWQgc2hvd05vTG9jYXRpb24gPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLm1hcmtlcnMoKS5sZW5ndGggPT09IDAgJiYgdGhpcy5zaXRlUG9seWdvbnMoKS5sZW5ndGggPT09IDAgJiYgdGhpcy50ZXJtUG9seWdvbnMoKS5sZW5ndGggPT09IDBcbiAgKTtcbiAgcHJvdGVjdGVkIG1hcENlbnRlciA9IGNvbXB1dGVkKCgpID0+IHRoaXMubWFya2VycygpPy5bMF0/LnBvc2l0aW9uIHx8IGRlZmF1bHRDZW50ZXIpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoSEVfTUFQX0xPQURFRCkgcHJvdGVjdGVkIG1hcExvYWRlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4sXG4gICAgcHJpdmF0ZSBub2RlU2VydmljZTogSGVOb2RlU2VydmljZSxcbiAgICBwcml2YXRlIG5vZGVTdG9yZVNlcnZpY2U6IEhlTm9kZVN0b3JlU2VydmljZVxuICApIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgcG9seWdvbnMgPSB0aGlzLl9zaXRlUG9seWdvbnMoKT8ubGVuZ3RoID8gdGhpcy5fc2l0ZVBvbHlnb25zKCkgOiB0aGlzLl90ZXJtUG9seWdvbnMoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jZW50ZXJQb2x5Z29ucyhwb2x5Z29ucyksIDEwMDApO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fbWFwUmVhZHkoKSAmJiB0aGlzLl9sb2FkUG9seWdvbnMoKSkge1xuICAgICAgICAgIGZyb20ocmVnaW9uSWRzKHRoaXMubm9kZXMoKSkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgbWVyZ2VNYXAoaWQgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRUZXJtSWQoaWQpLnBpcGUobWFwKGZlYXR1cmUgPT4gKHsgaWQsIHBvbHlnb25zOiBwb2x5Z29uc0Zyb21GZWF0dXJlKGZlYXR1cmUpIH0pKSlcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgdG9BcnJheSgpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHZhbHVlcyA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX3Rlcm1Qb2x5Z29ucy5zZXQodmFsdWVzLmZsYXRNYXAoKHsgcG9seWdvbnMgfSkgPT4gcG9seWdvbnMpKTtcbiAgICAgICAgICAgICAgY29uc3QgcG9seWdvbnMgPSB2YWx1ZXMuZmxhdE1hcCgoeyBpZCwgcG9seWdvbnMgfSkgPT5cbiAgICAgICAgICAgICAgICBwb2x5Z29ucy5tYXAoKHBvbHlnb24sIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgLi4ucG9seWdvblRvTWFwKHBvbHlnb24pLFxuICAgICAgICAgICAgICAgICAgaWQ6IFtpZCwgaW5kZXhdLmpvaW4oJy0nKVxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB0aGlzLnRlcm1Qb2x5Z29ucy5zZXQocG9seWdvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjZW50ZXJQb2x5Z29ucyhwb2x5Z29uczogZ29vZ2xlLm1hcHMuUG9seWdvbltdKSB7XG4gICAgcmV0dXJuIHBvbHlnb25zPy5sZW5ndGggPyB0aGlzLm1hcCEuZ29vZ2xlTWFwIS5maXRCb3VuZHMocG9seWdvbkJvdW5kcyhwb2x5Z29ucykpIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFRlcm1JZChpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fbG9hZFBvbHlnb25zUmVxdWVzdHNbaWRdID1cbiAgICAgIHRoaXMuX2xvYWRQb2x5Z29uc1JlcXVlc3RzW2lkXSB8fFxuICAgICAgdGhpcy5ub2RlU2VydmljZVxuICAgICAgICAuZG93bmxvYWRSYXckPGZlYXR1cmU+KGAke2Jhc2VVcmwoKX0vZ2FkbS8ke2lkfS5nZW9qc29uYClcbiAgICAgICAgLnBpcGUoc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSk7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRQb2x5Z29uc1JlcXVlc3RzW2lkXTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0cmFja0J5TWFya2VyKF9pbmRleDogbnVtYmVyLCB7IHBvc2l0aW9uLCBsYWJlbDogeyB0ZXh0IH0gfTogSU1hcmtlcikge1xuICAgIHJldHVybiBbdGV4dCwgcG9zaXRpb24ubGF0LCBwb3NpdGlvbi5sbmddLmpvaW4oJy0nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0cmFja0J5UG9seWdvbihfaW5kZXg6IG51bWJlciwgeyBpZCB9OiBJUG9seWdvbk1hcCkge1xuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXBMb2FkZWQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBsb2FkZWQgZGF0YSBhcyBnZW9qc29uXG4gICAgICB0aGlzLm1hcC5nb29nbGVNYXAuZGF0YS5zZXRTdHlsZSgoKSA9PiAoeyAuLi5zdHJva2VTdHlsZSwgc3Ryb2tlT3BhY2l0eTogMC4xIH0pKTtcbiAgICAgIHRoaXMuX21hcFJlYWR5LnNldCh0cnVlKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGdvb2dsZS1tYXBcbiAgKm5nSWY9XCJtYXBMb2FkZWQkIHwgYXN5bmNcIlxuICAobWFwSW5pdGlhbGl6ZWQpPVwibWFwTG9hZGVkKClcIlxuICBoZWlnaHQ9XCIxMDAlXCJcbiAgd2lkdGg9XCIxMDAlXCJcbiAgW3pvb21dPVwiem9vbVwiXG4gIFtjZW50ZXJdPVwibWFwQ2VudGVyKClcIj5cbiAgPG1hcC1tYXJrZXJcbiAgICAqbmdGb3I9XCJsZXQgbWFya2VyIG9mIG1hcmtlcnMoKTsgdHJhY2tCeTogdHJhY2tCeU1hcmtlclwiXG4gICAgW3Bvc2l0aW9uXT1cIm1hcmtlci5wb3NpdGlvblwiXG4gICAgW2ljb25dPVwibWFya2VyLmljb25cIj48L21hcC1tYXJrZXI+XG4gIDxtYXAtcG9seWdvblxuICAgICpuZ0Zvcj1cImxldCBwb2x5Z29uIG9mIHNpdGVQb2x5Z29ucygpOyB0cmFja0J5OiB0cmFja0J5UG9seWdvblwiXG4gICAgW3BhdGhzXT1cInBvbHlnb24ucGF0aHNcIlxuICAgIFtvcHRpb25zXT1cInBvbHlnb24ub3B0aW9uc1wiIC8+XG4gIDxtYXAtcG9seWdvblxuICAgICpuZ0Zvcj1cImxldCBwb2x5Z29uIG9mIHRlcm1Qb2x5Z29ucygpOyB0cmFja0J5OiB0cmFja0J5UG9seWdvblwiXG4gICAgW3BhdGhzXT1cInBvbHlnb24ucGF0aHNcIlxuICAgIFtvcHRpb25zXT1cInBvbHlnb24ub3B0aW9uc1wiIC8+XG48L2dvb2dsZS1tYXA+XG5cbjxwICpuZ0lmPVwic2hvd05vdGljZVwiIGNsYXNzPVwibXQtMiBpcy1pdGFsaWMgaXMtc2l6ZS03XCI+VGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIG1pZ2h0IG5vdCBiZSBjb21wbGV0ZTwvcD5cblxuPGRpdiBjbGFzcz1cIm5vLWxvY2F0aW9uIGhhcy10ZXh0LWNlbnRlciBoYXMtdGV4dC1saWdodFwiICpuZ0lmPVwic2hvd05vTG9jYXRpb24oKVwiPlxuICA8c3Bhbj5ObyBwcmVjaXNlIGxvY2F0aW9uIGRhdGE8L3NwYW4+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -90,12 +90,12 @@ export class SitesMeasurementsComponent {
|
|
|
90
90
|
this.selectedIndex.set(+value);
|
|
91
91
|
}
|
|
92
92
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: SitesMeasurementsComponent, deps: [{ token: i1.HeNodeStoreService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
93
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.8", type: SitesMeasurementsComponent, selector: "he-sites-measurements", inputs: { dataState: "dataState" }, ngImport: i0, template: "<div class=\"columns is-variable is-align-items-center is-2 is-m-0\" *ngIf=\"hasData()\">\n <div class=\"column\">\n <ng-container *ngIf=\"selectedView === View.table\">\n <button\n class=\"button is-small is-ghost\"\n (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\"\n placement=\"bottom\">\n <fa-icon icon=\"download\" size=\"lg\"></fa-icon>\n </button>\n </ng-container>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"selectedView === View.table\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter measurements by name\"\n (search)=\"filterByTerm($event)\"></he-search-extend>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"!isOriginal()\">\n <div class=\"field has-addons\">\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.table\"\n (click)=\"selectedView = View.table\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"list\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Table view</span>\n </button>\n </div>\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.logs\"\n (click)=\"selectedView = View.logs\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"calculator\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Recalculations logs</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"px-3 pb-3\" [class.is-hidden]=\"selectedView !== View.table\">\n <ng-container *ngIf=\"hasData(); else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-fullwidth is-narrow is-striped\">\n <thead>\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th *ngFor=\"let measurement of measurements()\" [attr.title]=\"measurement.value.term.name\">\n <he-node-link [node]=\"measurement.value.term\">\n <span [innerHtml]=\"measurement.value.term.name | ellipsis: 30 | compound\"></span>\n </he-node-link>\n </th>\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th *ngFor=\"let measurement of measurements()\" [attr.title]=\"measurement.value.term.units\">\n <span [innerHtml]=\"measurement.value.term.units | compound\"></span>\n <he-terms-units-description\n class=\"is-inline-block is-ml-2\"\n [term]=\"measurement.value.term\"></he-terms-units-description>\n </th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let site of sites(); trackBy: trackById; let i = index\">\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(site)\">\n <he-node-link [node]=\"site\">\n <span>{{ i + 1 }}. {{ defaultLabel(site) }}</span>\n </he-node-link>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let measurement of measurements()\">\n <span\n *ngIf=\"measurement.value.values[site['@id']]\"\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n [autoClose]=\"'outside'\"\n popoverClass=\"is-narrow\"\n triggers=\"manual\"\n #p=\"ngbPopover\"\n placement=\"left\"\n container=\"body\"\n (click)=\"\n togglePopover(p, { data: measurement.value.values[site['@id']], site: site, key: 'measurements' })\n \">\n <span pointer>\n {{\n measurementValue(measurement.value.values[site['@id']], measurement.value.term['@id'])\n | precision: 3\n | default: '-'\n }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"_dataState()\"\n [node]=\"measurement.value.values[site['@id']].node\"\n key=\"value\"></he-blank-node-state>\n </span>\n <span *ngIf=\"!measurement.value.values[site['@id']]\">\n <span>-</span>\n <sup class=\"pl-1\" *ngIf=\"siteTooBig(site)\">(1)</sup>\n </span>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <he-blank-node-state-notice [dataState]=\"_dataState()\"></he-blank-node-state-notice>\n\n <p class=\"is-size-7 is-italic\" *ngIf=\"showAreaTooBig()\">\n (1) This region is >{{ maxAreaSize }}km2 and is too large to reliably gap fill Measurements.\n </p>\n </ng-container>\n</div>\n\n<ng-container *ngIf=\"selectedView === View.logs && !isOriginal()\">\n <div class=\"field has-addons pt-2 px-3\" *ngIf=\"sites().length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Site</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n <option *ngFor=\"let value of sites(); let i = index\" [value]=\"i\">\n {{ i + 1 }}. {{ defaultLabel(value) }}\n </option>\n </select>\n </div>\n </div>\n </div>\n\n <he-node-logs-models\n *ngIf=\"selectedNode()\"\n [node]=\"selectedNode()\"\n [nodeKey]=\"nodeKey\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [filterTermTypes]=\"[TermTermType.measurement]\"></he-node-logs-models>\n</ng-container>\n\n<he-node-csv-export-confirm\n *ngIf=\"showDownload\"\n [nodes]=\"sites()\"\n filename=\"site-measurements.csv\"\n [isUpload]=\"false\"\n [headerKeys]=\"['site.id', 'site.@id', 'site.measurements.']\"\n (closed)=\"showDownload = false\"></he-node-csv-export-confirm>\n\n<ng-template #emptyTable>\n <div class=\"has-text-centered\">\n <span>No data available</span>\n <span class=\"is-pl-1\" [class.is-hidden]=\"!filterTerm()\">matching your search criteria</span>\n <span>.</span>\n <span *ngIf=\"showSwitchToRecalculated()\">\n Switch to\n <code>recalculated</code>\n version.\n </span>\n </div>\n</ng-template>\n\n<ng-template #emptyValue>\n <span>-</span>\n</ng-template>\n\n<ng-template #details let-node=\"site\" let-data=\"data\" let-key=\"key\">\n <p>\n <b>{{ node.name }}</b>\n </p>\n <he-node-value-details\n [data]=\"data\"\n [dataState]=\"_dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"key\"></he-node-value-details>\n</ng-template>\n", styles: ["fa-icon{display:inline-block;width:10px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i4.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "ngbPopover", "popoverTitle", "placement", "popperOptions", "triggers", "positionTarget", "container", "disablePopover", "popoverClass", "popoverContext", "openDelay", "closeDelay"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { kind: "component", type: i5.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "component", type: i6.BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }, { kind: "component", type: i7.BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showAggregated", "showDeleted"] }, { kind: "component", type: i8.DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "component", type: i9.SearchExtendComponent, selector: "he-search-extend", inputs: ["value", "disabled", "placeholder", "class"], outputs: ["search"] }, { kind: "component", type: i10.NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink", "linkClass"] }, { kind: "component", type: i11.NodeCsvExportConfirmComponent, selector: "he-node-csv-export-confirm", inputs: ["nodes", "filename", "headerKeys", "extension", "isUpload"], outputs: ["closed"] }, { kind: "component", type: i12.NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["node", "nodeKey", "originalValues", "recalculatedValues", "terms", "filterTermTypes", "filterTermTypesLabel", "logsKey", "noDataMessage"] }, { kind: "component", type: i13.NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataKey", "dataState"] }, { kind: "component", type: i14.TermsUnitsDescriptionComponent, selector: "he-terms-units-description", inputs: ["term", "iconTemplate"] }, { kind: "pipe", type: i15.CompoundPipe, name: "compound" }, { kind: "pipe", type: i16.DefaultPipe, name: "default" }, { kind: "pipe", type: i17.EllipsisPipe, name: "ellipsis" }, { kind: "pipe", type: i18.PrecisionPipe, name: "precision" }] }); }
|
|
93
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.8", type: SitesMeasurementsComponent, selector: "he-sites-measurements", inputs: { dataState: "dataState" }, ngImport: i0, template: "<div class=\"columns is-variable is-align-items-center is-2 is-m-0\" *ngIf=\"hasData()\">\n <div class=\"column\">\n <ng-container *ngIf=\"selectedView === View.table\">\n <button\n class=\"button is-small is-ghost\"\n (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\"\n placement=\"bottom\">\n <fa-icon icon=\"download\" size=\"lg\"></fa-icon>\n </button>\n </ng-container>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"selectedView === View.table\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter measurements by name\"\n (search)=\"filterByTerm($event)\"></he-search-extend>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"!isOriginal()\">\n <div class=\"field has-addons\">\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.table\"\n (click)=\"selectedView = View.table\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"list\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Table view</span>\n </button>\n </div>\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.logs\"\n (click)=\"selectedView = View.logs\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"calculator\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Recalculations logs</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"px-3 pb-3\" [class.is-hidden]=\"selectedView !== View.table\">\n <ng-container *ngIf=\"hasData(); else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-fullwidth is-narrow is-striped\">\n <thead>\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th *ngFor=\"let measurement of measurements()\" [attr.title]=\"measurement.value.term.name\">\n <he-node-link [node]=\"measurement.value.term\">\n <span [innerHtml]=\"measurement.value.term.name | ellipsis: 30 | compound\"></span>\n </he-node-link>\n </th>\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th *ngFor=\"let measurement of measurements()\" [attr.title]=\"measurement.value.term.units\">\n <span [innerHtml]=\"measurement.value.term.units | compound\"></span>\n <he-terms-units-description\n class=\"is-inline-block is-ml-2\"\n [term]=\"measurement.value.term\"></he-terms-units-description>\n </th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let site of sites(); trackBy: trackById; let i = index\">\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(site)\">\n <he-node-link [node]=\"site\">\n <span>{{ i + 1 }}. {{ defaultLabel(site) }}</span>\n </he-node-link>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let measurement of measurements()\">\n <span\n *ngIf=\"measurement.value.values[site['@id']]\"\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n [autoClose]=\"'outside'\"\n popoverClass=\"is-narrow\"\n triggers=\"manual\"\n #p=\"ngbPopover\"\n placement=\"left\"\n container=\"body\"\n (click)=\"\n togglePopover(p, { data: measurement.value.values[site['@id']], site: site, key: 'measurements' })\n \">\n <span pointer>\n {{\n measurementValue(measurement.value.values[site['@id']], measurement.value.term['@id'])\n | precision: 3\n | default: '-'\n }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"_dataState()\"\n [node]=\"measurement.value.values[site['@id']].node\"\n key=\"value\"></he-blank-node-state>\n </span>\n <span *ngIf=\"!measurement.value.values[site['@id']]\">\n <span>-</span>\n <sup class=\"pl-1\" *ngIf=\"siteTooBig(site)\">(1)</sup>\n </span>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <he-blank-node-state-notice [dataState]=\"_dataState()\"></he-blank-node-state-notice>\n\n <p class=\"is-size-7 is-italic\" *ngIf=\"showAreaTooBig()\">\n (1) This region is >{{ maxAreaSize }}km2 and is too large to reliably gap fill Measurements.\n </p>\n </ng-container>\n</div>\n\n<ng-container *ngIf=\"selectedView === View.logs && !isOriginal()\">\n <div class=\"field has-addons pt-2 px-3\" *ngIf=\"sites().length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Site</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n <option *ngFor=\"let value of sites(); let i = index\" [value]=\"i\">\n {{ i + 1 }}. {{ defaultLabel(value) }}\n </option>\n </select>\n </div>\n </div>\n </div>\n\n <he-node-logs-models\n *ngIf=\"selectedNode()\"\n [node]=\"selectedNode()\"\n [nodeKey]=\"nodeKey\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [filterTermTypes]=\"[TermTermType.measurement]\"></he-node-logs-models>\n</ng-container>\n\n<he-node-csv-export-confirm\n *ngIf=\"showDownload\"\n [nodes]=\"sites()\"\n filename=\"site-measurements.csv\"\n [isUpload]=\"false\"\n [headerKeys]=\"['site.id', 'site.@id', 'site.measurements.']\"\n (closed)=\"showDownload = false\"></he-node-csv-export-confirm>\n\n<ng-template #emptyTable>\n <div class=\"is-pt-3 has-text-centered\">\n <span>No data available</span>\n <span class=\"is-pl-1\" [class.is-hidden]=\"!filterTerm()\">matching your search criteria</span>\n <span>.</span>\n <span *ngIf=\"showSwitchToRecalculated()\">\n Switch to\n <code>recalculated</code>\n version.\n </span>\n </div>\n</ng-template>\n\n<ng-template #emptyValue>\n <span>-</span>\n</ng-template>\n\n<ng-template #details let-node=\"site\" let-data=\"data\" let-key=\"key\">\n <p>\n <b>{{ node.name }}</b>\n </p>\n <he-node-value-details\n [data]=\"data\"\n [dataState]=\"_dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"key\"></he-node-value-details>\n</ng-template>\n", styles: ["fa-icon{display:inline-block;width:10px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i4.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "ngbPopover", "popoverTitle", "placement", "popperOptions", "triggers", "positionTarget", "container", "disablePopover", "popoverClass", "popoverContext", "openDelay", "closeDelay"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { kind: "component", type: i5.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "component", type: i6.BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }, { kind: "component", type: i7.BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showAggregated", "showDeleted"] }, { kind: "component", type: i8.DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "component", type: i9.SearchExtendComponent, selector: "he-search-extend", inputs: ["value", "disabled", "placeholder", "class"], outputs: ["search"] }, { kind: "component", type: i10.NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink", "linkClass"] }, { kind: "component", type: i11.NodeCsvExportConfirmComponent, selector: "he-node-csv-export-confirm", inputs: ["nodes", "filename", "headerKeys", "extension", "isUpload"], outputs: ["closed"] }, { kind: "component", type: i12.NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["node", "nodeKey", "originalValues", "recalculatedValues", "terms", "filterTermTypes", "filterTermTypesLabel", "logsKey", "noDataMessage"] }, { kind: "component", type: i13.NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataKey", "dataState"] }, { kind: "component", type: i14.TermsUnitsDescriptionComponent, selector: "he-terms-units-description", inputs: ["term", "iconTemplate"] }, { kind: "pipe", type: i15.CompoundPipe, name: "compound" }, { kind: "pipe", type: i16.DefaultPipe, name: "default" }, { kind: "pipe", type: i17.EllipsisPipe, name: "ellipsis" }, { kind: "pipe", type: i18.PrecisionPipe, name: "precision" }] }); }
|
|
94
94
|
}
|
|
95
95
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: SitesMeasurementsComponent, decorators: [{
|
|
96
96
|
type: Component,
|
|
97
|
-
args: [{ selector: 'he-sites-measurements', template: "<div class=\"columns is-variable is-align-items-center is-2 is-m-0\" *ngIf=\"hasData()\">\n <div class=\"column\">\n <ng-container *ngIf=\"selectedView === View.table\">\n <button\n class=\"button is-small is-ghost\"\n (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\"\n placement=\"bottom\">\n <fa-icon icon=\"download\" size=\"lg\"></fa-icon>\n </button>\n </ng-container>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"selectedView === View.table\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter measurements by name\"\n (search)=\"filterByTerm($event)\"></he-search-extend>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"!isOriginal()\">\n <div class=\"field has-addons\">\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.table\"\n (click)=\"selectedView = View.table\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"list\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Table view</span>\n </button>\n </div>\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.logs\"\n (click)=\"selectedView = View.logs\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"calculator\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Recalculations logs</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"px-3 pb-3\" [class.is-hidden]=\"selectedView !== View.table\">\n <ng-container *ngIf=\"hasData(); else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-fullwidth is-narrow is-striped\">\n <thead>\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th *ngFor=\"let measurement of measurements()\" [attr.title]=\"measurement.value.term.name\">\n <he-node-link [node]=\"measurement.value.term\">\n <span [innerHtml]=\"measurement.value.term.name | ellipsis: 30 | compound\"></span>\n </he-node-link>\n </th>\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th *ngFor=\"let measurement of measurements()\" [attr.title]=\"measurement.value.term.units\">\n <span [innerHtml]=\"measurement.value.term.units | compound\"></span>\n <he-terms-units-description\n class=\"is-inline-block is-ml-2\"\n [term]=\"measurement.value.term\"></he-terms-units-description>\n </th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let site of sites(); trackBy: trackById; let i = index\">\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(site)\">\n <he-node-link [node]=\"site\">\n <span>{{ i + 1 }}. {{ defaultLabel(site) }}</span>\n </he-node-link>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let measurement of measurements()\">\n <span\n *ngIf=\"measurement.value.values[site['@id']]\"\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n [autoClose]=\"'outside'\"\n popoverClass=\"is-narrow\"\n triggers=\"manual\"\n #p=\"ngbPopover\"\n placement=\"left\"\n container=\"body\"\n (click)=\"\n togglePopover(p, { data: measurement.value.values[site['@id']], site: site, key: 'measurements' })\n \">\n <span pointer>\n {{\n measurementValue(measurement.value.values[site['@id']], measurement.value.term['@id'])\n | precision: 3\n | default: '-'\n }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"_dataState()\"\n [node]=\"measurement.value.values[site['@id']].node\"\n key=\"value\"></he-blank-node-state>\n </span>\n <span *ngIf=\"!measurement.value.values[site['@id']]\">\n <span>-</span>\n <sup class=\"pl-1\" *ngIf=\"siteTooBig(site)\">(1)</sup>\n </span>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <he-blank-node-state-notice [dataState]=\"_dataState()\"></he-blank-node-state-notice>\n\n <p class=\"is-size-7 is-italic\" *ngIf=\"showAreaTooBig()\">\n (1) This region is >{{ maxAreaSize }}km2 and is too large to reliably gap fill Measurements.\n </p>\n </ng-container>\n</div>\n\n<ng-container *ngIf=\"selectedView === View.logs && !isOriginal()\">\n <div class=\"field has-addons pt-2 px-3\" *ngIf=\"sites().length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Site</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n <option *ngFor=\"let value of sites(); let i = index\" [value]=\"i\">\n {{ i + 1 }}. {{ defaultLabel(value) }}\n </option>\n </select>\n </div>\n </div>\n </div>\n\n <he-node-logs-models\n *ngIf=\"selectedNode()\"\n [node]=\"selectedNode()\"\n [nodeKey]=\"nodeKey\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [filterTermTypes]=\"[TermTermType.measurement]\"></he-node-logs-models>\n</ng-container>\n\n<he-node-csv-export-confirm\n *ngIf=\"showDownload\"\n [nodes]=\"sites()\"\n filename=\"site-measurements.csv\"\n [isUpload]=\"false\"\n [headerKeys]=\"['site.id', 'site.@id', 'site.measurements.']\"\n (closed)=\"showDownload = false\"></he-node-csv-export-confirm>\n\n<ng-template #emptyTable>\n <div class=\"has-text-centered\">\n <span>No data available</span>\n <span class=\"is-pl-1\" [class.is-hidden]=\"!filterTerm()\">matching your search criteria</span>\n <span>.</span>\n <span *ngIf=\"showSwitchToRecalculated()\">\n Switch to\n <code>recalculated</code>\n version.\n </span>\n </div>\n</ng-template>\n\n<ng-template #emptyValue>\n <span>-</span>\n</ng-template>\n\n<ng-template #details let-node=\"site\" let-data=\"data\" let-key=\"key\">\n <p>\n <b>{{ node.name }}</b>\n </p>\n <he-node-value-details\n [data]=\"data\"\n [dataState]=\"_dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"key\"></he-node-value-details>\n</ng-template>\n", styles: ["fa-icon{display:inline-block;width:10px}\n"] }]
|
|
97
|
+
args: [{ selector: 'he-sites-measurements', template: "<div class=\"columns is-variable is-align-items-center is-2 is-m-0\" *ngIf=\"hasData()\">\n <div class=\"column\">\n <ng-container *ngIf=\"selectedView === View.table\">\n <button\n class=\"button is-small is-ghost\"\n (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\"\n placement=\"bottom\">\n <fa-icon icon=\"download\" size=\"lg\"></fa-icon>\n </button>\n </ng-container>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"selectedView === View.table\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter measurements by name\"\n (search)=\"filterByTerm($event)\"></he-search-extend>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"!isOriginal()\">\n <div class=\"field has-addons\">\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.table\"\n (click)=\"selectedView = View.table\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"list\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Table view</span>\n </button>\n </div>\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.logs\"\n (click)=\"selectedView = View.logs\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"calculator\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Recalculations logs</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"px-3 pb-3\" [class.is-hidden]=\"selectedView !== View.table\">\n <ng-container *ngIf=\"hasData(); else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-fullwidth is-narrow is-striped\">\n <thead>\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th *ngFor=\"let measurement of measurements()\" [attr.title]=\"measurement.value.term.name\">\n <he-node-link [node]=\"measurement.value.term\">\n <span [innerHtml]=\"measurement.value.term.name | ellipsis: 30 | compound\"></span>\n </he-node-link>\n </th>\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th *ngFor=\"let measurement of measurements()\" [attr.title]=\"measurement.value.term.units\">\n <span [innerHtml]=\"measurement.value.term.units | compound\"></span>\n <he-terms-units-description\n class=\"is-inline-block is-ml-2\"\n [term]=\"measurement.value.term\"></he-terms-units-description>\n </th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let site of sites(); trackBy: trackById; let i = index\">\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(site)\">\n <he-node-link [node]=\"site\">\n <span>{{ i + 1 }}. {{ defaultLabel(site) }}</span>\n </he-node-link>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let measurement of measurements()\">\n <span\n *ngIf=\"measurement.value.values[site['@id']]\"\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n [autoClose]=\"'outside'\"\n popoverClass=\"is-narrow\"\n triggers=\"manual\"\n #p=\"ngbPopover\"\n placement=\"left\"\n container=\"body\"\n (click)=\"\n togglePopover(p, { data: measurement.value.values[site['@id']], site: site, key: 'measurements' })\n \">\n <span pointer>\n {{\n measurementValue(measurement.value.values[site['@id']], measurement.value.term['@id'])\n | precision: 3\n | default: '-'\n }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"_dataState()\"\n [node]=\"measurement.value.values[site['@id']].node\"\n key=\"value\"></he-blank-node-state>\n </span>\n <span *ngIf=\"!measurement.value.values[site['@id']]\">\n <span>-</span>\n <sup class=\"pl-1\" *ngIf=\"siteTooBig(site)\">(1)</sup>\n </span>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <he-blank-node-state-notice [dataState]=\"_dataState()\"></he-blank-node-state-notice>\n\n <p class=\"is-size-7 is-italic\" *ngIf=\"showAreaTooBig()\">\n (1) This region is >{{ maxAreaSize }}km2 and is too large to reliably gap fill Measurements.\n </p>\n </ng-container>\n</div>\n\n<ng-container *ngIf=\"selectedView === View.logs && !isOriginal()\">\n <div class=\"field has-addons pt-2 px-3\" *ngIf=\"sites().length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Site</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n <option *ngFor=\"let value of sites(); let i = index\" [value]=\"i\">\n {{ i + 1 }}. {{ defaultLabel(value) }}\n </option>\n </select>\n </div>\n </div>\n </div>\n\n <he-node-logs-models\n *ngIf=\"selectedNode()\"\n [node]=\"selectedNode()\"\n [nodeKey]=\"nodeKey\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [filterTermTypes]=\"[TermTermType.measurement]\"></he-node-logs-models>\n</ng-container>\n\n<he-node-csv-export-confirm\n *ngIf=\"showDownload\"\n [nodes]=\"sites()\"\n filename=\"site-measurements.csv\"\n [isUpload]=\"false\"\n [headerKeys]=\"['site.id', 'site.@id', 'site.measurements.']\"\n (closed)=\"showDownload = false\"></he-node-csv-export-confirm>\n\n<ng-template #emptyTable>\n <div class=\"is-pt-3 has-text-centered\">\n <span>No data available</span>\n <span class=\"is-pl-1\" [class.is-hidden]=\"!filterTerm()\">matching your search criteria</span>\n <span>.</span>\n <span *ngIf=\"showSwitchToRecalculated()\">\n Switch to\n <code>recalculated</code>\n version.\n </span>\n </div>\n</ng-template>\n\n<ng-template #emptyValue>\n <span>-</span>\n</ng-template>\n\n<ng-template #details let-node=\"site\" let-data=\"data\" let-key=\"key\">\n <p>\n <b>{{ node.name }}</b>\n </p>\n <he-node-value-details\n [data]=\"data\"\n [dataState]=\"_dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"key\"></he-node-value-details>\n</ng-template>\n", styles: ["fa-icon{display:inline-block;width:10px}\n"] }]
|
|
98
98
|
}], ctorParameters: function () { return [{ type: i1.HeNodeStoreService }]; }, propDecorators: { dataState: [{
|
|
99
99
|
type: Input
|
|
100
100
|
}] } });
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l0ZXMtbWVhc3VyZW1lbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zaXRlcy9zaXRlcy1tZWFzdXJlbWVudHMvc2l0ZXMtbWVhc3VyZW1lbnRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9zaXRlcy9zaXRlcy1tZWFzdXJlbWVudHMvc2l0ZXMtbWVhc3VyZW1lbnRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUE0QixRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEYsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQWdCLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXZILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVsRCxJQUFLLElBR0o7QUFIRCxXQUFLLElBQUk7SUFDUCx1QkFBZSxDQUFBO0lBQ2YscUJBQWEsQ0FBQTtBQUNmLENBQUMsRUFISSxJQUFJLEtBQUosSUFBSSxRQUdSO0FBT0QsTUFBTSxPQUFPLDBCQUEwQjtJQUdyQyxJQUNJLFNBQVMsQ0FBQyxLQUFnQjtRQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFL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LENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVTLFlBQVksQ0FBQyxJQUFZO1FBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFUyxXQUFXLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUN6QyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7OEdBOUVVLDBCQUEwQjtrR0FBMUIsMEJBQTBCLGlHQ3JCdkMsZ2xPQXVMQTs7MkZEbEthLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDRSx1QkFBdUI7eUdBUTdCLFNBQVM7c0JBRFosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIGNvbXB1dGVkLCBlZmZlY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBEYXRhU3RhdGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL2FwaSc7XG5pbXBvcnQgeyBJU2l0ZUpTT05MRCwgTWVhc3VyZW1lbnQsIE5vZGVUeXBlLCBUZXJtVGVybVR5cGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgb3JkZXJCeSBmcm9tICdsb2Rhc2gub3JkZXJieSc7XG5cbmltcG9ydCB7IEJsYW5rTm9kZXNLZXksIGZpbHRlckJsYW5rTm9kZSwgZ3JvdXBOb2Rlc0J5VGVybSwgSUdyb3VwZWRLZXlzLCBncm91cHBlZEtleXMgfSBmcm9tICcuLi8uLi9jb21tb24vbm9kZS11dGlscyc7XG5pbXBvcnQgeyBIZU5vZGVTdG9yZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9ub2RlL25vZGUtc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBtZWFzdXJlbWVudFZhbHVlLCBtYXhBcmVhU2l6ZSwgc2l0ZVRvb0JpZyB9IGZyb20gJy4uL3NpdGVzLm1vZGVsJztcbmltcG9ydCB7IGRlZmF1bHRMYWJlbCB9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlscyc7XG5cbmVudW0gVmlldyB7XG4gIHRhYmxlID0gJ3RhYmxlJyxcbiAgbG9ncyA9ICdsb2dzJ1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1zaXRlcy1tZWFzdXJlbWVudHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2l0ZXMtbWVhc3VyZW1lbnRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2l0ZXMtbWVhc3VyZW1lbnRzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU2l0ZXNNZWFzdXJlbWVudHNDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgX2RhdGFTdGF0ZSA9IHNpZ25hbChEYXRhU3RhdGUub3JpZ2luYWwpO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhU3RhdGUodmFsdWU6IERhdGFTdGF0ZSkge1xuICAgIHRoaXMuX2RhdGFTdGF0ZS5zZXQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIFRlcm1UZXJtVHlwZSA9IFRlcm1UZXJtVHlwZTtcbiAgcHVibGljIHNpdGVUb29CaWcgPSBzaXRlVG9vQmlnO1xuICBwdWJsaWMgZGVmYXVsdExhYmVsID0gZGVmYXVsdExhYmVsO1xuICBwdWJsaWMgbWVhc3VyZW1lbnRWYWx1ZSA9IG1lYXN1cmVtZW50VmFsdWU7XG4gIHB1YmxpYyBzaG93RG93bmxvYWQgPSBmYWxzZTtcbiAgcHVibGljIFZpZXcgPSBWaWV3O1xuICBwdWJsaWMgc2VsZWN0ZWRWaWV3ID0gVmlldy50YWJsZTtcbiAgcHVibGljIG5vZGVLZXkgPSBCbGFua05vZGVzS2V5Lm1lYXN1cmVtZW50cztcbiAgcHVibGljIG1heEFyZWFTaXplID0gbWF4QXJlYVNpemU7XG5cbiAgcHJpdmF0ZSBvcmlnaW5hbFNpdGVzID0gdG9TaWduYWwodGhpcy5ub2RlU3RvcmVTZXJ2aWNlLmZpbmRCeVN0YXRlJDxJU2l0ZUpTT05MRD4oTm9kZVR5cGUuU2l0ZSwgRGF0YVN0YXRlLm9yaWdpbmFsKSk7XG4gIHByaXZhdGUgX2FsbFNpdGVzID0gdG9TaWduYWwodGhpcy5ub2RlU3RvcmVTZXJ2aWNlLmZpbmQkPElTaXRlSlNPTkxEPihOb2RlVHlwZS5TaXRlKSk7XG4gIHByb3RlY3RlZCBzaXRlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX2FsbFNpdGVzKCk/Lm1hcChkYXRhID0+IGRhdGFbdGhpcy5fZGF0YVN0YXRlKCldKSB8fCBbXSk7XG5cbiAgcHJpdmF0ZSBzZWxlY3RlZEluZGV4ID0gc2lnbmFsKDApO1xuICBwcml2YXRlIG9naXJpbmFsU2VsZWN0ZWRTaXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcmlnaW5hbFNpdGVzKCk/Llt0aGlzLnNlbGVjdGVkSW5kZXgoKV0pO1xuICBwcml2YXRlIHNlbGVjdGVkU2l0ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2l0ZXMoKT8uW3RoaXMuc2VsZWN0ZWRJbmRleCgpXSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZE9yaWdpbmFsVmFsdWVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vZ2lyaW5hbFNlbGVjdGVkU2l0ZSgpPy5bdGhpcy5ub2RlS2V5XSB8fCBbXSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZFJlY2FsY3VsYXRlZFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRTaXRlKCk/Llt0aGlzLm5vZGVLZXldIHx8IFtdKTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkTm9kZSA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5zZWxlY3RlZFNpdGUoKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4udGhpcy5zZWxlY3RlZFNpdGUoKSxcbiAgICAgICAgICBkYXRhU3RhdGU6IERhdGFTdGF0ZS5yZWNhbGN1bGF0ZWRcbiAgICAgICAgfVxuICAgICAgOiBudWxsXG4gICk7XG5cbiAgcHJvdGVjdGVkIGlzT3JpZ2luYWwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9kYXRhU3RhdGUoKSA9PT0gRGF0YVN0YXRlLm9yaWdpbmFsKTtcbiAgcHJpdmF0ZSBvcmlnaW5hbFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmlzT3JpZ2luYWwoKSA/IG51bGwgOiB0aGlzLm9yaWdpbmFsU2l0ZXMoKSkgfHwgW10pO1xuXG4gIHByb3RlY3RlZCBzaG93U3dpdGNoVG9SZWNhbGN1bGF0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmlzT3JpZ2luYWwoKSAmJiB0aGlzLnNpdGVzKCkuc29tZShzaXRlID0+ICFzaXRlLmFnZ3JlZ2F0ZWQpKTtcbiAgcHJvdGVjdGVkIHNob3dBcmVhVG9vQmlnID0gY29tcHV0ZWQoKCkgPT4gIXRoaXMuaXNPcmlnaW5hbCgpICYmICh0aGlzLnNpdGVzKCkgfHwgW10pLnNvbWUoc2l0ZVRvb0JpZykpO1xuICBwcm90ZWN0ZWQgaGFzRGF0YSA9IGNvbXB1dGVkKCgpID0+IHRoaXMubWVhc3VyZW1lbnRzKCkubGVuZ3RoKTtcblxuICBwcm90ZWN0ZWQgZmlsdGVyVGVybSA9IHNpZ25hbCgnJyk7XG5cbiAgcHJvdGVjdGVkIG1lYXN1cmVtZW50cyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBtZWFzdXJlbWVudHNQZXJTaXRlID0gZ3JvdXBOb2Rlc0J5VGVybTxJU2l0ZUpTT05MRCwgTWVhc3VyZW1lbnQ+KFxuICAgICAgdGhpcy5zaXRlcygpLFxuICAgICAgJ21lYXN1cmVtZW50cycsXG4gICAgICB0aGlzLm9yaWdpbmFsVmFsdWVzKCksXG4gICAgICBmaWx0ZXJCbGFua05vZGUodGhpcy5maWx0ZXJUZXJtKCkpXG4gICAgKTtcbiAgICByZXR1cm4gb3JkZXJCeShncm91cHBlZEtleXMobWVhc3VyZW1lbnRzUGVyU2l0ZSksIFsna2V5J10sIFsnYXNjJ10pIGFzIElHcm91cGVkS2V5czxNZWFzdXJlbWVudD5bXTtcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBub2RlU3RvcmVTZXJ2aWNlOiBIZU5vZGVTdG9yZVNlcnZpY2UpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgLy8gbWFrZSBzdXJlIGxvZ3MgZG9lcyBub3QgcmVtYWluIGRpc3BsYXllZCB3aGVuIHN3aXRjaGluZyBiYWNrIHRvIG9yaWdpbmFsIHZpZXdcbiAgICAgIGlmICh0aGlzLmlzT3JpZ2luYWwoKSAmJiB0aGlzLnNlbGVjdGVkVmlldyA9PT0gVmlldy5sb2dzKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gVmlldy50YWJsZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0cmFja0J5SWQoX2luZGV4OiBudW1iZXIsIGl0ZW06IElTaXRlSlNPTkxEKSB7XG4gICAgcmV0dXJuIGl0ZW1bJ0BpZCddO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVBvcG92ZXIocG9wb3ZlcjogYW55LCBjb250ZXh0OiBhbnkpIHtcbiAgICByZXR1cm4gcG9wb3Zlci5pc09wZW4oKSA/IHBvcG92ZXIuY2xvc2UoKSA6IHBvcG92ZXIub3Blbihjb250ZXh0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBmaWx0ZXJCeVRlcm0odGVybTogc3RyaW5nKSB7XG4gICAgdGhpcy5maWx0ZXJUZXJtLnNldCh0ZXJtKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RJbmRleCh7IHRhcmdldDogeyB2YWx1ZSB9IH0pIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXguc2V0KCt2YWx1ZSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLXZhcmlhYmxlIGlzLWFsaWduLWl0ZW1zLWNlbnRlciBpcy0yIGlzLW0tMFwiICpuZ0lmPVwiaGFzRGF0YSgpXCI+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LnRhYmxlXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsIGlzLWdob3N0XCJcbiAgICAgICAgKGNsaWNrKT1cInNob3dEb3dubG9hZCA9IHRydWVcIlxuICAgICAgICBuZ2JUb29sdGlwPVwiRG93bmxvYWQgYXMgQ1NWXCJcbiAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCI+XG4gICAgICAgIDxmYS1pY29uIGljb249XCJkb3dubG9hZFwiIHNpemU9XCJsZ1wiPjwvZmEtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3dcIiAqbmdJZj1cInNlbGVjdGVkVmlldyA9PT0gVmlldy50YWJsZVwiPlxuICAgIDxoZS1zZWFyY2gtZXh0ZW5kXG4gICAgICBjbGFzcz1cImlzLXNlY29uZGFyeSBpcy1zbWFsbFwiXG4gICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciBtZWFzdXJlbWVudHMgYnkgbmFtZVwiXG4gICAgICAoc2VhcmNoKT1cImZpbHRlckJ5VGVybSgkZXZlbnQpXCI+PC9oZS1zZWFyY2gtZXh0ZW5kPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3dcIiAqbmdJZj1cIiFpc09yaWdpbmFsKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmllbGQgaGFzLWFkZG9uc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCJcbiAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LnRhYmxlXCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRWaWV3ID0gVmlldy50YWJsZVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImxpc3RcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2ZhLWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaGlkZGVuLW1vYmlsZVwiPlRhYmxlIHZpZXc8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24gaXMtc21hbGxcIlxuICAgICAgICAgIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcubG9nc1wiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkVmlldyA9IFZpZXcubG9nc1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImNhbGN1bGF0b3JcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2ZhLWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaGlkZGVuLW1vYmlsZVwiPlJlY2FsY3VsYXRpb25zIGxvZ3M8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJweC0zIHBiLTNcIiBbY2xhc3MuaXMtaGlkZGVuXT1cInNlbGVjdGVkVmlldyAhPT0gVmlldy50YWJsZVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzRGF0YSgpOyBlbHNlIGVtcHR5VGFibGVcIj5cbiAgICA8aGUtZGF0YS10YWJsZSBjbGFzcz1cIm1iLTEgaXMtc21hbGxcIiBbc21hbGxdPVwidHJ1ZVwiIG1heEhlaWdodD1cIjMyMFwiPlxuICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgaXMtZnVsbHdpZHRoIGlzLW5hcnJvdyBpcy1zdHJpcGVkXCI+XG4gICAgICAgIDx0aGVhZD5cbiAgICAgICAgICA8dHIgY2xhc3M9XCJoYXMtdGV4dC13ZWlnaHQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIndpZHRoLWF1dG8gaGFzLWJvcmRlci1yaWdodFwiPjwvdGg+XG4gICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IG1lYXN1cmVtZW50IG9mIG1lYXN1cmVtZW50cygpXCIgW2F0dHIudGl0bGVdPVwibWVhc3VyZW1lbnQudmFsdWUudGVybS5uYW1lXCI+XG4gICAgICAgICAgICAgIDxoZS1ub2RlLWxpbmsgW25vZGVdPVwibWVhc3VyZW1lbnQudmFsdWUudGVybVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckh0bWxdPVwibWVhc3VyZW1lbnQudmFsdWUudGVybS5uYW1lIHwgZWxsaXBzaXM6IDMwIHwgY29tcG91bmRcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0ciBjbGFzcz1cImlzLWl0YWxpYyBoYXMtdGV4dC13ZWlnaHQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIndpZHRoLWF1dG8gaGFzLWJvcmRlci1yaWdodFwiPjwvdGg+XG4gICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IG1lYXN1cmVtZW50IG9mIG1lYXN1cmVtZW50cygpXCIgW2F0dHIudGl0bGVdPVwibWVhc3VyZW1lbnQudmFsdWUudGVybS51bml0c1wiPlxuICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIdG1sXT1cIm1lYXN1cmVtZW50LnZhbHVlLnRlcm0udW5pdHMgfCBjb21wb3VuZFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPGhlLXRlcm1zLXVuaXRzLWRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2sgaXMtbWwtMlwiXG4gICAgICAgICAgICAgICAgW3Rlcm1dPVwibWVhc3VyZW1lbnQudmFsdWUudGVybVwiPjwvaGUtdGVybXMtdW5pdHMtZGVzY3JpcHRpb24+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzaXRlIG9mIHNpdGVzKCk7IHRyYWNrQnk6IHRyYWNrQnlJZDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ3aWR0aC1hdXRvIGhhcy1ib3JkZXItcmlnaHRcIiBbYXR0ci50aXRsZV09XCJkZWZhdWx0TGFiZWwoc2l0ZSlcIj5cbiAgICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIFtub2RlXT1cInNpdGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGkgKyAxIH19LiB7eyBkZWZhdWx0TGFiZWwoc2l0ZSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9oZS1ub2RlLWxpbms+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImlzLW5vd3JhcFwiICpuZ0Zvcj1cImxldCBtZWFzdXJlbWVudCBvZiBtZWFzdXJlbWVudHMoKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIm1lYXN1cmVtZW50LnZhbHVlLnZhbHVlc1tzaXRlWydAaWQnXV1cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0cmlnZ2VyLXBvcG92ZXJcIlxuICAgICAgICAgICAgICAgICAgW25nYlBvcG92ZXJdPVwiZGV0YWlsc1wiXG4gICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXG4gICAgICAgICAgICAgICAgICBwb3BvdmVyQ2xhc3M9XCJpcy1uYXJyb3dcIlxuICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIlxuICAgICAgICAgICAgICAgICAgI3A9XCJuZ2JQb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgIHRvZ2dsZVBvcG92ZXIocCwgeyBkYXRhOiBtZWFzdXJlbWVudC52YWx1ZS52YWx1ZXNbc2l0ZVsnQGlkJ11dLCBzaXRlOiBzaXRlLCBrZXk6ICdtZWFzdXJlbWVudHMnIH0pXG4gICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHBvaW50ZXI+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZW1lbnRWYWx1ZShtZWFzdXJlbWVudC52YWx1ZS52YWx1ZXNbc2l0ZVsnQGlkJ11dLCBtZWFzdXJlbWVudC52YWx1ZS50ZXJtWydAaWQnXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHwgcHJlY2lzaW9uOiAzXG4gICAgICAgICAgICAgICAgICAgICAgICB8IGRlZmF1bHQ6ICctJ1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGhlLWJsYW5rLW5vZGUtc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbC0xXCJcbiAgICAgICAgICAgICAgICAgICAgW2RhdGFTdGF0ZV09XCJfZGF0YVN0YXRlKClcIlxuICAgICAgICAgICAgICAgICAgICBbbm9kZV09XCJtZWFzdXJlbWVudC52YWx1ZS52YWx1ZXNbc2l0ZVsnQGlkJ11dLm5vZGVcIlxuICAgICAgICAgICAgICAgICAgICBrZXk9XCJ2YWx1ZVwiPjwvaGUtYmxhbmstbm9kZS1zdGF0ZT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbWVhc3VyZW1lbnQudmFsdWUudmFsdWVzW3NpdGVbJ0BpZCddXVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+LTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzdXAgY2xhc3M9XCJwbC0xXCIgKm5nSWY9XCJzaXRlVG9vQmlnKHNpdGUpXCI+KDEpPC9zdXA+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9oZS1kYXRhLXRhYmxlPlxuXG4gICAgPGhlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlIFtkYXRhU3RhdGVdPVwiX2RhdGFTdGF0ZSgpXCI+PC9oZS1ibGFuay1ub2RlLXN0YXRlLW5vdGljZT5cblxuICAgIDxwIGNsYXNzPVwiaXMtc2l6ZS03IGlzLWl0YWxpY1wiICpuZ0lmPVwic2hvd0FyZWFUb29CaWcoKVwiPlxuICAgICAgKDEpIFRoaXMgcmVnaW9uIGlzID57eyBtYXhBcmVhU2l6ZSB9fWttMiBhbmQgaXMgdG9vIGxhcmdlIHRvIHJlbGlhYmx5IGdhcCBmaWxsIE1lYXN1cmVtZW50cy5cbiAgICA8L3A+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcubG9ncyAmJiAhaXNPcmlnaW5hbCgpXCI+XG4gIDxkaXYgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zIHB0LTIgcHgtM1wiICpuZ0lmPVwic2l0ZXMoKS5sZW5ndGggPiAxXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsIGlzLXN0YXRpYyBpcy1zZWNvbmRhcnlcIj5TZWxlY3QgYSBTaXRlPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb250cm9sIGlzLWV4cGFuZGVkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsIGlzLWZ1bGx3aWR0aCBpcy1zZWNvbmRhcnlcIj5cbiAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cInNlbGVjdEluZGV4KCRldmVudClcIj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBzaXRlcygpOyBsZXQgaSA9IGluZGV4XCIgW3ZhbHVlXT1cImlcIj5cbiAgICAgICAgICAgIHt7IGkgKyAxIH19LiB7eyBkZWZhdWx0TGFiZWwodmFsdWUpIH19XG4gICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxoZS1ub2RlLWxvZ3MtbW9kZWxzXG4gICAgKm5nSWY9XCJzZWxlY3RlZE5vZGUoKVwiXG4gICAgW25vZGVdPVwic2VsZWN0ZWROb2RlKClcIlxuICAgIFtub2RlS2V5XT1cIm5vZGVLZXlcIlxuICAgIFtvcmlnaW5hbFZhbHVlc109XCJzZWxlY3RlZE9yaWdpbmFsVmFsdWVzKClcIlxuICAgIFtyZWNhbGN1bGF0ZWRWYWx1ZXNdPVwic2VsZWN0ZWRSZWNhbGN1bGF0ZWRWYWx1ZXMoKVwiXG4gICAgW2ZpbHRlclRlcm1UeXBlc109XCJbVGVybVRlcm1UeXBlLm1lYXN1cmVtZW50XVwiPjwvaGUtbm9kZS1sb2dzLW1vZGVscz5cbjwvbmctY29udGFpbmVyPlxuXG48aGUtbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm1cbiAgKm5nSWY9XCJzaG93RG93bmxvYWRcIlxuICBbbm9kZXNdPVwic2l0ZXMoKVwiXG4gIGZpbGVuYW1lPVwic2l0ZS1tZWFzdXJlbWVudHMuY3N2XCJcbiAgW2lzVXBsb2FkXT1cImZhbHNlXCJcbiAgW2hlYWRlcktleXNdPVwiWydzaXRlLmlkJywgJ3NpdGUuQGlkJywgJ3NpdGUubWVhc3VyZW1lbnRzLiddXCJcbiAgKGNsb3NlZCk9XCJzaG93RG93bmxvYWQgPSBmYWxzZVwiPjwvaGUtbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlUYWJsZT5cbiAgPGRpdiBjbGFzcz1cImhhcy10ZXh0LWNlbnRlcmVkXCI+XG4gICAgPHNwYW4+Tm8gZGF0YSBhdmFpbGFibGU8L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJpcy1wbC0xXCIgW2NsYXNzLmlzLWhpZGRlbl09XCIhZmlsdGVyVGVybSgpXCI+bWF0Y2hpbmcgeW91ciBzZWFyY2ggY3JpdGVyaWE8L3NwYW4+XG4gICAgPHNwYW4+Ljwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cInNob3dTd2l0Y2hUb1JlY2FsY3VsYXRlZCgpXCI+XG4gICAgICBTd2l0Y2ggdG9cbiAgICAgIDxjb2RlPnJlY2FsY3VsYXRlZDwvY29kZT5cbiAgICAgIHZlcnNpb24uXG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlWYWx1ZT5cbiAgPHNwYW4+LTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGV0YWlscyBsZXQtbm9kZT1cInNpdGVcIiBsZXQtZGF0YT1cImRhdGFcIiBsZXQta2V5PVwia2V5XCI+XG4gIDxwPlxuICAgIDxiPnt7IG5vZGUubmFtZSB9fTwvYj5cbiAgPC9wPlxuICA8aGUtbm9kZS12YWx1ZS1kZXRhaWxzXG4gICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgW2RhdGFTdGF0ZV09XCJfZGF0YVN0YXRlKClcIlxuICAgIFtub2RlVHlwZV09XCJub2RlWydAdHlwZSddXCJcbiAgICBbZGF0YUtleV09XCJrZXlcIj48L2hlLW5vZGUtdmFsdWUtZGV0YWlscz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l0ZXMtbWVhc3VyZW1lbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zaXRlcy9zaXRlcy1tZWFzdXJlbWVudHMvc2l0ZXMtbWVhc3VyZW1lbnRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9zaXRlcy9zaXRlcy1tZWFzdXJlbWVudHMvc2l0ZXMtbWVhc3VyZW1lbnRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUE0QixRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEYsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQWdCLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXZILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVsRCxJQUFLLElBR0o7QUFIRCxXQUFLLElBQUk7SUFDUCx1QkFBZSxDQUFBO0lBQ2YscUJBQWEsQ0FBQTtBQUNmLENBQUMsRUFISSxJQUFJLEtBQUosSUFBSSxRQUdSO0FBT0QsTUFBTSxPQUFPLDBCQUEwQjtJQUdyQyxJQUNJLFNBQVMsQ0FBQyxLQUFnQjtRQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFL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LENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVTLFlBQVksQ0FBQyxJQUFZO1FBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFUyxXQUFXLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUN6QyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7OEdBOUVVLDBCQUEwQjtrR0FBMUIsMEJBQTBCLGlHQ3JCdkMsd2xPQXVMQTs7MkZEbEthLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDRSx1QkFBdUI7eUdBUTdCLFNBQVM7c0JBRFosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIGNvbXB1dGVkLCBlZmZlY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBEYXRhU3RhdGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL2FwaSc7XG5pbXBvcnQgeyBJU2l0ZUpTT05MRCwgTWVhc3VyZW1lbnQsIE5vZGVUeXBlLCBUZXJtVGVybVR5cGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgb3JkZXJCeSBmcm9tICdsb2Rhc2gub3JkZXJieSc7XG5cbmltcG9ydCB7IEJsYW5rTm9kZXNLZXksIGZpbHRlckJsYW5rTm9kZSwgZ3JvdXBOb2Rlc0J5VGVybSwgSUdyb3VwZWRLZXlzLCBncm91cHBlZEtleXMgfSBmcm9tICcuLi8uLi9jb21tb24vbm9kZS11dGlscyc7XG5pbXBvcnQgeyBIZU5vZGVTdG9yZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9ub2RlL25vZGUtc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBtZWFzdXJlbWVudFZhbHVlLCBtYXhBcmVhU2l6ZSwgc2l0ZVRvb0JpZyB9IGZyb20gJy4uL3NpdGVzLm1vZGVsJztcbmltcG9ydCB7IGRlZmF1bHRMYWJlbCB9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlscyc7XG5cbmVudW0gVmlldyB7XG4gIHRhYmxlID0gJ3RhYmxlJyxcbiAgbG9ncyA9ICdsb2dzJ1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1zaXRlcy1tZWFzdXJlbWVudHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2l0ZXMtbWVhc3VyZW1lbnRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2l0ZXMtbWVhc3VyZW1lbnRzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU2l0ZXNNZWFzdXJlbWVudHNDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgX2RhdGFTdGF0ZSA9IHNpZ25hbChEYXRhU3RhdGUub3JpZ2luYWwpO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhU3RhdGUodmFsdWU6IERhdGFTdGF0ZSkge1xuICAgIHRoaXMuX2RhdGFTdGF0ZS5zZXQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIFRlcm1UZXJtVHlwZSA9IFRlcm1UZXJtVHlwZTtcbiAgcHVibGljIHNpdGVUb29CaWcgPSBzaXRlVG9vQmlnO1xuICBwdWJsaWMgZGVmYXVsdExhYmVsID0gZGVmYXVsdExhYmVsO1xuICBwdWJsaWMgbWVhc3VyZW1lbnRWYWx1ZSA9IG1lYXN1cmVtZW50VmFsdWU7XG4gIHB1YmxpYyBzaG93RG93bmxvYWQgPSBmYWxzZTtcbiAgcHVibGljIFZpZXcgPSBWaWV3O1xuICBwdWJsaWMgc2VsZWN0ZWRWaWV3ID0gVmlldy50YWJsZTtcbiAgcHVibGljIG5vZGVLZXkgPSBCbGFua05vZGVzS2V5Lm1lYXN1cmVtZW50cztcbiAgcHVibGljIG1heEFyZWFTaXplID0gbWF4QXJlYVNpemU7XG5cbiAgcHJpdmF0ZSBvcmlnaW5hbFNpdGVzID0gdG9TaWduYWwodGhpcy5ub2RlU3RvcmVTZXJ2aWNlLmZpbmRCeVN0YXRlJDxJU2l0ZUpTT05MRD4oTm9kZVR5cGUuU2l0ZSwgRGF0YVN0YXRlLm9yaWdpbmFsKSk7XG4gIHByaXZhdGUgX2FsbFNpdGVzID0gdG9TaWduYWwodGhpcy5ub2RlU3RvcmVTZXJ2aWNlLmZpbmQkPElTaXRlSlNPTkxEPihOb2RlVHlwZS5TaXRlKSk7XG4gIHByb3RlY3RlZCBzaXRlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX2FsbFNpdGVzKCk/Lm1hcChkYXRhID0+IGRhdGFbdGhpcy5fZGF0YVN0YXRlKCldKSB8fCBbXSk7XG5cbiAgcHJpdmF0ZSBzZWxlY3RlZEluZGV4ID0gc2lnbmFsKDApO1xuICBwcml2YXRlIG9naXJpbmFsU2VsZWN0ZWRTaXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcmlnaW5hbFNpdGVzKCk/Llt0aGlzLnNlbGVjdGVkSW5kZXgoKV0pO1xuICBwcml2YXRlIHNlbGVjdGVkU2l0ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2l0ZXMoKT8uW3RoaXMuc2VsZWN0ZWRJbmRleCgpXSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZE9yaWdpbmFsVmFsdWVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vZ2lyaW5hbFNlbGVjdGVkU2l0ZSgpPy5bdGhpcy5ub2RlS2V5XSB8fCBbXSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZFJlY2FsY3VsYXRlZFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRTaXRlKCk/Llt0aGlzLm5vZGVLZXldIHx8IFtdKTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkTm9kZSA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5zZWxlY3RlZFNpdGUoKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4udGhpcy5zZWxlY3RlZFNpdGUoKSxcbiAgICAgICAgICBkYXRhU3RhdGU6IERhdGFTdGF0ZS5yZWNhbGN1bGF0ZWRcbiAgICAgICAgfVxuICAgICAgOiBudWxsXG4gICk7XG5cbiAgcHJvdGVjdGVkIGlzT3JpZ2luYWwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9kYXRhU3RhdGUoKSA9PT0gRGF0YVN0YXRlLm9yaWdpbmFsKTtcbiAgcHJpdmF0ZSBvcmlnaW5hbFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmlzT3JpZ2luYWwoKSA/IG51bGwgOiB0aGlzLm9yaWdpbmFsU2l0ZXMoKSkgfHwgW10pO1xuXG4gIHByb3RlY3RlZCBzaG93U3dpdGNoVG9SZWNhbGN1bGF0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmlzT3JpZ2luYWwoKSAmJiB0aGlzLnNpdGVzKCkuc29tZShzaXRlID0+ICFzaXRlLmFnZ3JlZ2F0ZWQpKTtcbiAgcHJvdGVjdGVkIHNob3dBcmVhVG9vQmlnID0gY29tcHV0ZWQoKCkgPT4gIXRoaXMuaXNPcmlnaW5hbCgpICYmICh0aGlzLnNpdGVzKCkgfHwgW10pLnNvbWUoc2l0ZVRvb0JpZykpO1xuICBwcm90ZWN0ZWQgaGFzRGF0YSA9IGNvbXB1dGVkKCgpID0+IHRoaXMubWVhc3VyZW1lbnRzKCkubGVuZ3RoKTtcblxuICBwcm90ZWN0ZWQgZmlsdGVyVGVybSA9IHNpZ25hbCgnJyk7XG5cbiAgcHJvdGVjdGVkIG1lYXN1cmVtZW50cyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBtZWFzdXJlbWVudHNQZXJTaXRlID0gZ3JvdXBOb2Rlc0J5VGVybTxJU2l0ZUpTT05MRCwgTWVhc3VyZW1lbnQ+KFxuICAgICAgdGhpcy5zaXRlcygpLFxuICAgICAgJ21lYXN1cmVtZW50cycsXG4gICAgICB0aGlzLm9yaWdpbmFsVmFsdWVzKCksXG4gICAgICBmaWx0ZXJCbGFua05vZGUodGhpcy5maWx0ZXJUZXJtKCkpXG4gICAgKTtcbiAgICByZXR1cm4gb3JkZXJCeShncm91cHBlZEtleXMobWVhc3VyZW1lbnRzUGVyU2l0ZSksIFsna2V5J10sIFsnYXNjJ10pIGFzIElHcm91cGVkS2V5czxNZWFzdXJlbWVudD5bXTtcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBub2RlU3RvcmVTZXJ2aWNlOiBIZU5vZGVTdG9yZVNlcnZpY2UpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgLy8gbWFrZSBzdXJlIGxvZ3MgZG9lcyBub3QgcmVtYWluIGRpc3BsYXllZCB3aGVuIHN3aXRjaGluZyBiYWNrIHRvIG9yaWdpbmFsIHZpZXdcbiAgICAgIGlmICh0aGlzLmlzT3JpZ2luYWwoKSAmJiB0aGlzLnNlbGVjdGVkVmlldyA9PT0gVmlldy5sb2dzKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gVmlldy50YWJsZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0cmFja0J5SWQoX2luZGV4OiBudW1iZXIsIGl0ZW06IElTaXRlSlNPTkxEKSB7XG4gICAgcmV0dXJuIGl0ZW1bJ0BpZCddO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVBvcG92ZXIocG9wb3ZlcjogYW55LCBjb250ZXh0OiBhbnkpIHtcbiAgICByZXR1cm4gcG9wb3Zlci5pc09wZW4oKSA/IHBvcG92ZXIuY2xvc2UoKSA6IHBvcG92ZXIub3Blbihjb250ZXh0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBmaWx0ZXJCeVRlcm0odGVybTogc3RyaW5nKSB7XG4gICAgdGhpcy5maWx0ZXJUZXJtLnNldCh0ZXJtKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RJbmRleCh7IHRhcmdldDogeyB2YWx1ZSB9IH0pIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXguc2V0KCt2YWx1ZSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLXZhcmlhYmxlIGlzLWFsaWduLWl0ZW1zLWNlbnRlciBpcy0yIGlzLW0tMFwiICpuZ0lmPVwiaGFzRGF0YSgpXCI+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LnRhYmxlXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsIGlzLWdob3N0XCJcbiAgICAgICAgKGNsaWNrKT1cInNob3dEb3dubG9hZCA9IHRydWVcIlxuICAgICAgICBuZ2JUb29sdGlwPVwiRG93bmxvYWQgYXMgQ1NWXCJcbiAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCI+XG4gICAgICAgIDxmYS1pY29uIGljb249XCJkb3dubG9hZFwiIHNpemU9XCJsZ1wiPjwvZmEtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3dcIiAqbmdJZj1cInNlbGVjdGVkVmlldyA9PT0gVmlldy50YWJsZVwiPlxuICAgIDxoZS1zZWFyY2gtZXh0ZW5kXG4gICAgICBjbGFzcz1cImlzLXNlY29uZGFyeSBpcy1zbWFsbFwiXG4gICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciBtZWFzdXJlbWVudHMgYnkgbmFtZVwiXG4gICAgICAoc2VhcmNoKT1cImZpbHRlckJ5VGVybSgkZXZlbnQpXCI+PC9oZS1zZWFyY2gtZXh0ZW5kPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3dcIiAqbmdJZj1cIiFpc09yaWdpbmFsKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmllbGQgaGFzLWFkZG9uc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCJcbiAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LnRhYmxlXCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRWaWV3ID0gVmlldy50YWJsZVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImxpc3RcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2ZhLWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaGlkZGVuLW1vYmlsZVwiPlRhYmxlIHZpZXc8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24gaXMtc21hbGxcIlxuICAgICAgICAgIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcubG9nc1wiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkVmlldyA9IFZpZXcubG9nc1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImNhbGN1bGF0b3JcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2ZhLWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaGlkZGVuLW1vYmlsZVwiPlJlY2FsY3VsYXRpb25zIGxvZ3M8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJweC0zIHBiLTNcIiBbY2xhc3MuaXMtaGlkZGVuXT1cInNlbGVjdGVkVmlldyAhPT0gVmlldy50YWJsZVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzRGF0YSgpOyBlbHNlIGVtcHR5VGFibGVcIj5cbiAgICA8aGUtZGF0YS10YWJsZSBjbGFzcz1cIm1iLTEgaXMtc21hbGxcIiBbc21hbGxdPVwidHJ1ZVwiIG1heEhlaWdodD1cIjMyMFwiPlxuICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgaXMtZnVsbHdpZHRoIGlzLW5hcnJvdyBpcy1zdHJpcGVkXCI+XG4gICAgICAgIDx0aGVhZD5cbiAgICAgICAgICA8dHIgY2xhc3M9XCJoYXMtdGV4dC13ZWlnaHQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIndpZHRoLWF1dG8gaGFzLWJvcmRlci1yaWdodFwiPjwvdGg+XG4gICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IG1lYXN1cmVtZW50IG9mIG1lYXN1cmVtZW50cygpXCIgW2F0dHIudGl0bGVdPVwibWVhc3VyZW1lbnQudmFsdWUudGVybS5uYW1lXCI+XG4gICAgICAgICAgICAgIDxoZS1ub2RlLWxpbmsgW25vZGVdPVwibWVhc3VyZW1lbnQudmFsdWUudGVybVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckh0bWxdPVwibWVhc3VyZW1lbnQudmFsdWUudGVybS5uYW1lIHwgZWxsaXBzaXM6IDMwIHwgY29tcG91bmRcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0ciBjbGFzcz1cImlzLWl0YWxpYyBoYXMtdGV4dC13ZWlnaHQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIndpZHRoLWF1dG8gaGFzLWJvcmRlci1yaWdodFwiPjwvdGg+XG4gICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IG1lYXN1cmVtZW50IG9mIG1lYXN1cmVtZW50cygpXCIgW2F0dHIudGl0bGVdPVwibWVhc3VyZW1lbnQudmFsdWUudGVybS51bml0c1wiPlxuICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIdG1sXT1cIm1lYXN1cmVtZW50LnZhbHVlLnRlcm0udW5pdHMgfCBjb21wb3VuZFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPGhlLXRlcm1zLXVuaXRzLWRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2sgaXMtbWwtMlwiXG4gICAgICAgICAgICAgICAgW3Rlcm1dPVwibWVhc3VyZW1lbnQudmFsdWUudGVybVwiPjwvaGUtdGVybXMtdW5pdHMtZGVzY3JpcHRpb24+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzaXRlIG9mIHNpdGVzKCk7IHRyYWNrQnk6IHRyYWNrQnlJZDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ3aWR0aC1hdXRvIGhhcy1ib3JkZXItcmlnaHRcIiBbYXR0ci50aXRsZV09XCJkZWZhdWx0TGFiZWwoc2l0ZSlcIj5cbiAgICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIFtub2RlXT1cInNpdGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGkgKyAxIH19LiB7eyBkZWZhdWx0TGFiZWwoc2l0ZSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9oZS1ub2RlLWxpbms+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImlzLW5vd3JhcFwiICpuZ0Zvcj1cImxldCBtZWFzdXJlbWVudCBvZiBtZWFzdXJlbWVudHMoKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIm1lYXN1cmVtZW50LnZhbHVlLnZhbHVlc1tzaXRlWydAaWQnXV1cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0cmlnZ2VyLXBvcG92ZXJcIlxuICAgICAgICAgICAgICAgICAgW25nYlBvcG92ZXJdPVwiZGV0YWlsc1wiXG4gICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXG4gICAgICAgICAgICAgICAgICBwb3BvdmVyQ2xhc3M9XCJpcy1uYXJyb3dcIlxuICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIlxuICAgICAgICAgICAgICAgICAgI3A9XCJuZ2JQb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgIHRvZ2dsZVBvcG92ZXIocCwgeyBkYXRhOiBtZWFzdXJlbWVudC52YWx1ZS52YWx1ZXNbc2l0ZVsnQGlkJ11dLCBzaXRlOiBzaXRlLCBrZXk6ICdtZWFzdXJlbWVudHMnIH0pXG4gICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHBvaW50ZXI+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZW1lbnRWYWx1ZShtZWFzdXJlbWVudC52YWx1ZS52YWx1ZXNbc2l0ZVsnQGlkJ11dLCBtZWFzdXJlbWVudC52YWx1ZS50ZXJtWydAaWQnXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHwgcHJlY2lzaW9uOiAzXG4gICAgICAgICAgICAgICAgICAgICAgICB8IGRlZmF1bHQ6ICctJ1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGhlLWJsYW5rLW5vZGUtc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbC0xXCJcbiAgICAgICAgICAgICAgICAgICAgW2RhdGFTdGF0ZV09XCJfZGF0YVN0YXRlKClcIlxuICAgICAgICAgICAgICAgICAgICBbbm9kZV09XCJtZWFzdXJlbWVudC52YWx1ZS52YWx1ZXNbc2l0ZVsnQGlkJ11dLm5vZGVcIlxuICAgICAgICAgICAgICAgICAgICBrZXk9XCJ2YWx1ZVwiPjwvaGUtYmxhbmstbm9kZS1zdGF0ZT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbWVhc3VyZW1lbnQudmFsdWUudmFsdWVzW3NpdGVbJ0BpZCddXVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+LTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzdXAgY2xhc3M9XCJwbC0xXCIgKm5nSWY9XCJzaXRlVG9vQmlnKHNpdGUpXCI+KDEpPC9zdXA+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9oZS1kYXRhLXRhYmxlPlxuXG4gICAgPGhlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlIFtkYXRhU3RhdGVdPVwiX2RhdGFTdGF0ZSgpXCI+PC9oZS1ibGFuay1ub2RlLXN0YXRlLW5vdGljZT5cblxuICAgIDxwIGNsYXNzPVwiaXMtc2l6ZS03IGlzLWl0YWxpY1wiICpuZ0lmPVwic2hvd0FyZWFUb29CaWcoKVwiPlxuICAgICAgKDEpIFRoaXMgcmVnaW9uIGlzID57eyBtYXhBcmVhU2l6ZSB9fWttMiBhbmQgaXMgdG9vIGxhcmdlIHRvIHJlbGlhYmx5IGdhcCBmaWxsIE1lYXN1cmVtZW50cy5cbiAgICA8L3A+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcubG9ncyAmJiAhaXNPcmlnaW5hbCgpXCI+XG4gIDxkaXYgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zIHB0LTIgcHgtM1wiICpuZ0lmPVwic2l0ZXMoKS5sZW5ndGggPiAxXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsIGlzLXN0YXRpYyBpcy1zZWNvbmRhcnlcIj5TZWxlY3QgYSBTaXRlPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb250cm9sIGlzLWV4cGFuZGVkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsIGlzLWZ1bGx3aWR0aCBpcy1zZWNvbmRhcnlcIj5cbiAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cInNlbGVjdEluZGV4KCRldmVudClcIj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBzaXRlcygpOyBsZXQgaSA9IGluZGV4XCIgW3ZhbHVlXT1cImlcIj5cbiAgICAgICAgICAgIHt7IGkgKyAxIH19LiB7eyBkZWZhdWx0TGFiZWwodmFsdWUpIH19XG4gICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxoZS1ub2RlLWxvZ3MtbW9kZWxzXG4gICAgKm5nSWY9XCJzZWxlY3RlZE5vZGUoKVwiXG4gICAgW25vZGVdPVwic2VsZWN0ZWROb2RlKClcIlxuICAgIFtub2RlS2V5XT1cIm5vZGVLZXlcIlxuICAgIFtvcmlnaW5hbFZhbHVlc109XCJzZWxlY3RlZE9yaWdpbmFsVmFsdWVzKClcIlxuICAgIFtyZWNhbGN1bGF0ZWRWYWx1ZXNdPVwic2VsZWN0ZWRSZWNhbGN1bGF0ZWRWYWx1ZXMoKVwiXG4gICAgW2ZpbHRlclRlcm1UeXBlc109XCJbVGVybVRlcm1UeXBlLm1lYXN1cmVtZW50XVwiPjwvaGUtbm9kZS1sb2dzLW1vZGVscz5cbjwvbmctY29udGFpbmVyPlxuXG48aGUtbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm1cbiAgKm5nSWY9XCJzaG93RG93bmxvYWRcIlxuICBbbm9kZXNdPVwic2l0ZXMoKVwiXG4gIGZpbGVuYW1lPVwic2l0ZS1tZWFzdXJlbWVudHMuY3N2XCJcbiAgW2lzVXBsb2FkXT1cImZhbHNlXCJcbiAgW2hlYWRlcktleXNdPVwiWydzaXRlLmlkJywgJ3NpdGUuQGlkJywgJ3NpdGUubWVhc3VyZW1lbnRzLiddXCJcbiAgKGNsb3NlZCk9XCJzaG93RG93bmxvYWQgPSBmYWxzZVwiPjwvaGUtbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlUYWJsZT5cbiAgPGRpdiBjbGFzcz1cImlzLXB0LTMgaGFzLXRleHQtY2VudGVyZWRcIj5cbiAgICA8c3Bhbj5ObyBkYXRhIGF2YWlsYWJsZTwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cImlzLXBsLTFcIiBbY2xhc3MuaXMtaGlkZGVuXT1cIiFmaWx0ZXJUZXJtKClcIj5tYXRjaGluZyB5b3VyIHNlYXJjaCBjcml0ZXJpYTwvc3Bhbj5cbiAgICA8c3Bhbj4uPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwic2hvd1N3aXRjaFRvUmVjYWxjdWxhdGVkKClcIj5cbiAgICAgIFN3aXRjaCB0b1xuICAgICAgPGNvZGU+cmVjYWxjdWxhdGVkPC9jb2RlPlxuICAgICAgdmVyc2lvbi5cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVZhbHVlPlxuICA8c3Bhbj4tPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZXRhaWxzIGxldC1ub2RlPVwic2l0ZVwiIGxldC1kYXRhPVwiZGF0YVwiIGxldC1rZXk9XCJrZXlcIj5cbiAgPHA+XG4gICAgPGI+e3sgbm9kZS5uYW1lIH19PC9iPlxuICA8L3A+XG4gIDxoZS1ub2RlLXZhbHVlLWRldGFpbHNcbiAgICBbZGF0YV09XCJkYXRhXCJcbiAgICBbZGF0YVN0YXRlXT1cIl9kYXRhU3RhdGUoKVwiXG4gICAgW25vZGVUeXBlXT1cIm5vZGVbJ0B0eXBlJ11cIlxuICAgIFtkYXRhS2V5XT1cImtleVwiPjwvaGUtbm9kZS12YWx1ZS1kZXRhaWxzPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|