@geoit/ui 0.0.8 → 0.1.1

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.
Files changed (50) hide show
  1. package/ai/AGENTS.md +4 -0
  2. package/ai/README.md +4 -1
  3. package/ai/catalog.json +202 -56
  4. package/ai/components/geo-accordion.md +92 -0
  5. package/ai/components/geo-detail-view.md +91 -0
  6. package/ai/components/geo-map-admin-filter.md +0 -1
  7. package/ai/components/geo-map-legend.md +0 -1
  8. package/ai/components/geo-map-shell.md +3 -7
  9. package/ai/components/geo-switch.md +76 -0
  10. package/ai/components/geo-tree.md +0 -2
  11. package/ai/mockup.html +2 -2
  12. package/esm2022/lib/figma/geo-accordion/geo-accordion.component.mjs +67 -0
  13. package/esm2022/lib/figma/geo-accordion/geo-accordion.types.mjs +2 -0
  14. package/esm2022/lib/figma/geo-chart/geo-chart.component.mjs +3 -14
  15. package/esm2022/lib/figma/geo-detail-view/geo-detail-view.component.mjs +47 -0
  16. package/esm2022/lib/figma/geo-detail-view/geo-detail-view.types.mjs +2 -0
  17. package/esm2022/lib/figma/geo-list-page/geo-list-page.component.mjs +3 -3
  18. package/esm2022/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.mjs +3 -5
  19. package/esm2022/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.mjs +3 -3
  20. package/esm2022/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.mjs +3 -3
  21. package/esm2022/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.mjs +3 -5
  22. package/esm2022/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.mjs +16 -39
  23. package/esm2022/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.util.mjs +38 -0
  24. package/esm2022/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.mjs +3 -3
  25. package/esm2022/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.mjs +2 -2
  26. package/esm2022/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.mjs +3 -3
  27. package/esm2022/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.mjs +23 -20
  28. package/esm2022/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.mjs +3 -3
  29. package/esm2022/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.mjs +3 -3
  30. package/esm2022/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.mjs +3 -3
  31. package/esm2022/lib/figma/geo-map/geo-map.constants.mjs +5 -5
  32. package/esm2022/lib/figma/geo-switch/geo-switch.component.mjs +44 -0
  33. package/esm2022/lib/figma/geo-tree/geo-tree.component.mjs +3 -17
  34. package/esm2022/lib/figma/index.mjs +6 -1
  35. package/fesm2022/geoit-ui.mjs +262 -130
  36. package/fesm2022/geoit-ui.mjs.map +1 -1
  37. package/lib/figma/geo-accordion/geo-accordion.component.d.ts +34 -0
  38. package/lib/figma/geo-accordion/geo-accordion.types.d.ts +7 -0
  39. package/lib/figma/geo-chart/geo-chart.component.d.ts +0 -9
  40. package/lib/figma/geo-detail-view/geo-detail-view.component.d.ts +30 -0
  41. package/lib/figma/geo-detail-view/geo-detail-view.types.d.ts +8 -0
  42. package/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.d.ts +1 -3
  43. package/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.d.ts +1 -3
  44. package/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.util.d.ts +16 -0
  45. package/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.d.ts +6 -14
  46. package/lib/figma/geo-map/geo-map.constants.d.ts +3 -3
  47. package/lib/figma/geo-switch/geo-switch.component.d.ts +25 -0
  48. package/lib/figma/geo-tree/geo-tree.component.d.ts +1 -5
  49. package/lib/figma/index.d.ts +5 -0
  50. package/package.json +1 -1
@@ -5,7 +5,6 @@ import { GeoMapBasemapSwitcherComponent } from '../geo-map-basemap-switcher/geo-
5
5
  import { GeoMapHelpComponent } from '../geo-map-help/geo-map-help.component';
6
6
  import { GeoMapLayersDrawerComponent } from '../geo-map-layers-drawer/geo-map-layers-drawer.component';
7
7
  import { GeoMapLegendComponent } from '../geo-map-legend/geo-map-legend.component';
8
- import { GeoMapLocateComponent } from '../geo-map-locate/geo-map-locate.component';
9
8
  import { GeoMapLocationChipComponent } from '../geo-map-location-chip/geo-map-location-chip.component';
10
9
  import { GeoMapMeasureComponent } from '../geo-map-measure/geo-map-measure.component';
11
10
  import { GeoMapParcelPopupComponent } from '../geo-map-parcel-popup/geo-map-parcel-popup.component';
@@ -15,6 +14,8 @@ import { GeoMapSwipeComponent } from '../geo-map-swipe/geo-map-swipe.component';
15
14
  import { GeoMapToolbarComponent } from '../geo-map-toolbar/geo-map-toolbar.component';
16
15
  import { GeoMapZoomComponent } from '../geo-map-zoom/geo-map-zoom.component';
17
16
  import { GeoMapComponent } from '../../geo-map.component';
17
+ import { GeoAlertComponent } from '../../../geo-alert/geo-alert.component';
18
+ import { runGeoMapLocate } from '../geo-map-locate/geo-map-locate.util';
18
19
  import * as i0 from "@angular/core";
19
20
  /**
20
21
  * Map viewport + portal chrome (toolbar, layers drawer, legend, help, swipe, …).
@@ -27,7 +28,6 @@ export class GeoMapShellComponent {
27
28
  destroyRef = inject(DestroyRef);
28
29
  snapshotRef = viewChild(GeoMapSnapshotComponent);
29
30
  zoomRef = viewChild(GeoMapZoomComponent);
30
- locateRef = viewChild(GeoMapLocateComponent);
31
31
  center = input([...GEO_MAP_DEFAULT_CENTER]);
32
32
  zoom = input(GEO_MAP_DEFAULT_ZOOM);
33
33
  height = input('560px');
@@ -37,19 +37,12 @@ export class GeoMapShellComponent {
37
37
  /** Extra overlays merged after demo thematic + traffic. */
38
38
  layers = input([]);
39
39
  legendItems = input(GEO_MAP_DEMO_LEGEND_ITEMS);
40
+ /** Host app sets true when the legend catalog (loại đất/ký hiệu/màu) failed to load. */
41
+ legendCatalogMissing = input(false);
40
42
  showNav = input(true);
41
43
  includeDemoLayers = input(true);
42
44
  adminNodes = input(GEO_MAP_DEMO_ADMIN_NODES);
43
- /** `single` — chọn đúng 1 xã/phường (BR-06-03); `multi` — checkbox nhiều cấp (mặc định). */
44
- adminSelectionMode = input('multi');
45
45
  locationLabel = input('Phường 1 — TP Đà Lạt, Lâm Đồng');
46
- /**
47
- * Ghi chú pháp lý hiển thị khi đang đo (BR-10-03). `null` ẩn ghi chú —
48
- * mặc định giữ nguyên câu chữ đã dùng ở `qh-map-shell`.
49
- */
50
- measureDisclaimer = input('Giá trị tham khảo trên bản đồ, không có giá trị pháp lý. Diện tích pháp lý của thửa đất lấy theo hồ sơ địa chính.');
51
- /** True khi danh mục chú giải không tải được (`ERR_MAP_LEGEND_CATALOG_MISSING`). */
52
- legendCatalogMissing = input(false);
53
46
  parcelAudience = input('citizen');
54
47
  provinceExtent = input(GEO_MAP_DEFAULT_PROVINCE_EXTENT_4326);
55
48
  /** When true, shell seeds mock search results (Storybook / demos). */
@@ -85,8 +78,6 @@ export class GeoMapShellComponent {
85
78
  resultSelect = output();
86
79
  parcelExport = output();
87
80
  adminApply = output();
88
- snapshotCaptured = output();
89
- snapshotError = output();
90
81
  controller = signal(null);
91
82
  /** Active map pointer tool (`none` = default arrow cursor). */
92
83
  toolMode = signal('none');
@@ -274,6 +265,9 @@ export class GeoMapShellComponent {
274
265
  case 'fit-province':
275
266
  this.zoomRef()?.fitProvince();
276
267
  break;
268
+ case 'locate':
269
+ this.triggerLocate();
270
+ break;
277
271
  case 'pan':
278
272
  if (this.toolMode() === 'pan') {
279
273
  this.exitToolMode();
@@ -353,9 +347,6 @@ export class GeoMapShellComponent {
353
347
  case 'snapshot':
354
348
  this.snapshotRef()?.capture();
355
349
  break;
356
- case 'locate':
357
- this.locateRef()?.locate();
358
- break;
359
350
  default:
360
351
  break;
361
352
  }
@@ -490,6 +481,18 @@ export class GeoMapShellComponent {
490
481
  }
491
482
  this.setMapCursor('grab');
492
483
  }
484
+ /** Backing action for the `locate` toolbar entry (`GEO_MAP_LOCATE_TOOLBAR_ACTION`). */
485
+ triggerLocate() {
486
+ const ctrl = this.controller();
487
+ if (!ctrl) {
488
+ return;
489
+ }
490
+ runGeoMapLocate(ctrl, {
491
+ onLocated: () => this.located.emit(),
492
+ onDenied: () => this.locateDenied.emit(),
493
+ onError: (error) => this.locateError.emit(error),
494
+ });
495
+ }
493
496
  setMapCursor(cursor) {
494
497
  const el = this.controller()?.getMap()?.getTargetElement();
495
498
  if (!el) {
@@ -568,7 +571,7 @@ export class GeoMapShellComponent {
568
571
  this.managedLayers.set(next);
569
572
  }
570
573
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoMapShellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
571
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoMapShellComponent, isStandalone: true, selector: "geo-map-shell", inputs: { center: { classPropertyName: "center", publicName: "center", isSignal: true, isRequired: false, transformFunction: null }, zoom: { classPropertyName: "zoom", publicName: "zoom", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, showMousePosition: { classPropertyName: "showMousePosition", publicName: "showMousePosition", isSignal: true, isRequired: false, transformFunction: null }, basemapOptions: { classPropertyName: "basemapOptions", publicName: "basemapOptions", isSignal: true, isRequired: false, transformFunction: null }, toolbarActions: { classPropertyName: "toolbarActions", publicName: "toolbarActions", isSignal: true, isRequired: false, transformFunction: null }, layers: { classPropertyName: "layers", publicName: "layers", isSignal: true, isRequired: false, transformFunction: null }, legendItems: { classPropertyName: "legendItems", publicName: "legendItems", isSignal: true, isRequired: false, transformFunction: null }, showNav: { classPropertyName: "showNav", publicName: "showNav", isSignal: true, isRequired: false, transformFunction: null }, includeDemoLayers: { classPropertyName: "includeDemoLayers", publicName: "includeDemoLayers", isSignal: true, isRequired: false, transformFunction: null }, adminNodes: { classPropertyName: "adminNodes", publicName: "adminNodes", isSignal: true, isRequired: false, transformFunction: null }, adminSelectionMode: { classPropertyName: "adminSelectionMode", publicName: "adminSelectionMode", isSignal: true, isRequired: false, transformFunction: null }, locationLabel: { classPropertyName: "locationLabel", publicName: "locationLabel", isSignal: true, isRequired: false, transformFunction: null }, measureDisclaimer: { classPropertyName: "measureDisclaimer", publicName: "measureDisclaimer", isSignal: true, isRequired: false, transformFunction: null }, legendCatalogMissing: { classPropertyName: "legendCatalogMissing", publicName: "legendCatalogMissing", isSignal: true, isRequired: false, transformFunction: null }, parcelAudience: { classPropertyName: "parcelAudience", publicName: "parcelAudience", isSignal: true, isRequired: false, transformFunction: null }, provinceExtent: { classPropertyName: "provinceExtent", publicName: "provinceExtent", isSignal: true, isRequired: false, transformFunction: null }, demoSearch: { classPropertyName: "demoSearch", publicName: "demoSearch", isSignal: true, isRequired: false, transformFunction: null }, homeMode: { classPropertyName: "homeMode", publicName: "homeMode", isSignal: true, isRequired: false, transformFunction: null }, basemapId: { classPropertyName: "basemapId", publicName: "basemapId", isSignal: true, isRequired: false, transformFunction: null }, measureMode: { classPropertyName: "measureMode", publicName: "measureMode", isSignal: true, isRequired: false, transformFunction: null }, checkedMap: { classPropertyName: "checkedMap", publicName: "checkedMap", isSignal: true, isRequired: false, transformFunction: null }, layersOpen: { classPropertyName: "layersOpen", publicName: "layersOpen", isSignal: true, isRequired: false, transformFunction: null }, legendOpen: { classPropertyName: "legendOpen", publicName: "legendOpen", isSignal: true, isRequired: false, transformFunction: null }, helpOpen: { classPropertyName: "helpOpen", publicName: "helpOpen", isSignal: true, isRequired: false, transformFunction: null }, swipeActive: { classPropertyName: "swipeActive", publicName: "swipeActive", isSignal: true, isRequired: false, transformFunction: null }, searchOpen: { classPropertyName: "searchOpen", publicName: "searchOpen", isSignal: true, isRequired: false, transformFunction: null }, adminFilterOpen: { classPropertyName: "adminFilterOpen", publicName: "adminFilterOpen", isSignal: true, isRequired: false, transformFunction: null }, parcelOpen: { classPropertyName: "parcelOpen", publicName: "parcelOpen", isSignal: true, isRequired: false, transformFunction: null }, managedLayers: { classPropertyName: "managedLayers", publicName: "managedLayers", isSignal: true, isRequired: false, transformFunction: null }, searchResults: { classPropertyName: "searchResults", publicName: "searchResults", isSignal: true, isRequired: false, transformFunction: null }, selectedParcel: { classPropertyName: "selectedParcel", publicName: "selectedParcel", isSignal: true, isRequired: false, transformFunction: null }, adminCheckedKeys: { classPropertyName: "adminCheckedKeys", publicName: "adminCheckedKeys", isSignal: true, isRequired: false, transformFunction: null }, adminExpandedKeys: { classPropertyName: "adminExpandedKeys", publicName: "adminExpandedKeys", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { basemapId: "basemapIdChange", measureMode: "measureModeChange", checkedMap: "checkedMapChange", layersOpen: "layersOpenChange", legendOpen: "legendOpenChange", helpOpen: "helpOpenChange", swipeActive: "swipeActiveChange", searchOpen: "searchOpenChange", adminFilterOpen: "adminFilterOpenChange", parcelOpen: "parcelOpenChange", managedLayers: "managedLayersChange", searchResults: "searchResultsChange", selectedParcel: "selectedParcelChange", adminCheckedKeys: "adminCheckedKeysChange", adminExpandedKeys: "adminExpandedKeysChange", mapReady: "mapReady", mapClick: "mapClick", located: "located", locateDenied: "locateDenied", locateError: "locateError", actionClick: "actionClick", search: "search", searchReset: "searchReset", resultSelect: "resultSelect", parcelExport: "parcelExport", adminApply: "adminApply", snapshotCaptured: "snapshotCaptured", snapshotError: "snapshotError" }, host: { properties: { "style.height": "height()" }, classAttribute: "geo-map-shell-host" }, viewQueries: [{ propertyName: "snapshotRef", first: true, predicate: GeoMapSnapshotComponent, descendants: true, isSignal: true }, { propertyName: "zoomRef", first: true, predicate: GeoMapZoomComponent, descendants: true, isSignal: true }, { propertyName: "locateRef", first: true, predicate: GeoMapLocateComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"geo-map-shell\">\n <geo-map\n class=\"geo-map-shell__map\"\n [center]=\"center()\"\n [zoom]=\"zoom()\"\n [height]=\"'100%'\"\n [basemap]=\"basemap()\"\n [layers]=\"resolvedLayers()\"\n [showMousePosition]=\"showMousePosition()\"\n [showZoomControl]=\"false\"\n (mapReady)=\"onMapReady($event)\"\n (mapClick)=\"onMapClick($event)\"\n />\n\n <div class=\"geo-map-shell__chrome-left\">\n <geo-map-toolbar\n class=\"geo-map-shell__toolbar\"\n [controller]=\"controller()\"\n [actions]=\"resolvedToolbarActions()\"\n [(checkedMap)]=\"checkedMap\"\n (actionClick)=\"onToolbarAction($event)\"\n (actionToggle)=\"onToolbarToggle($event)\"\n />\n\n <div class=\"geo-map-shell__panels\">\n <geo-map-search\n [(open)]=\"searchOpen\"\n [results]=\"searchResults()\"\n (search)=\"onSearch($event)\"\n (reset)=\"onSearchReset()\"\n (resultSelect)=\"onResultSelect($event)\"\n />\n <geo-map-admin-filter\n [(open)]=\"adminFilterOpen\"\n title=\"Chuy\u1EC3n v\u1ECB tr\u00ED\"\n [nodes]=\"adminNodes()\"\n [selectionMode]=\"adminSelectionMode()\"\n [(checkedKeys)]=\"adminCheckedKeys\"\n [(expandedKeys)]=\"adminExpandedKeys\"\n (apply)=\"onAdminApply($event)\"\n (reset)=\"adminCheckedKeys.set([])\"\n (fitProvince)=\"onFitProvince()\"\n (closed)=\"onAdminClosed()\"\n />\n <geo-map-parcel-popup\n [(open)]=\"parcelOpen\"\n [parcel]=\"selectedParcel()\"\n [audience]=\"parcelAudience()\"\n (exportClick)=\"parcelExport.emit($event)\"\n (back)=\"onParcelBack()\"\n (closed)=\"onParcelClosed()\"\n />\n <geo-map-layers-drawer\n [controller]=\"controller()\"\n [(open)]=\"layersOpen\"\n [(layers)]=\"managedLayers\"\n />\n <geo-map-legend\n [(open)]=\"legendOpen\"\n [items]=\"legendItems()\"\n [catalogMissing]=\"legendCatalogMissing()\"\n />\n </div>\n </div>\n\n <!-- Headless bridges: zoom/fullscreen + snapshot + locate (driven by toolbar actions). -->\n <geo-map-zoom\n class=\"geo-map-shell__zoom-bridge\"\n [controller]=\"controller()\"\n [showNav]=\"showNav()\"\n [provinceExtent]=\"provinceExtent()\"\n />\n <geo-map-snapshot\n class=\"geo-map-shell__snapshot-bridge\"\n [controller]=\"controller()\"\n (captured)=\"snapshotCaptured.emit()\"\n (captureError)=\"snapshotError.emit($event)\"\n />\n <geo-map-locate\n class=\"geo-map-shell__locate-bridge\"\n [controller]=\"controller()\"\n (located)=\"located.emit($event)\"\n (denied)=\"locateDenied.emit()\"\n (locateError)=\"locateError.emit($event)\"\n />\n\n <div class=\"geo-map-shell__top-right\">\n <ng-content select=\"[geoMapShellTopRight]\" />\n </div>\n\n <div class=\"geo-map-shell__bottom-right\">\n <geo-map-basemap-switcher\n [options]=\"basemapOptions()\"\n [(selectedId)]=\"basemapId\"\n (basemapChange)=\"onBasemapChange($event)\"\n />\n </div>\n\n <div class=\"geo-map-shell__status\">\n @if (locationLabel()) {\n <geo-map-location-chip [label]=\"locationLabel()\" />\n }\n <geo-map-measure\n [controller]=\"controller()\"\n [(mode)]=\"measureMode\"\n />\n @if (measureMode() !== 'none' && measureDisclaimer()) {\n <p class=\"geo-map-shell__measure-disclaimer\" role=\"note\">\n {{ measureDisclaimer() }}\n </p>\n }\n </div>\n\n <geo-map-swipe\n [controller]=\"controller()\"\n [(active)]=\"swipeActive\"\n />\n\n <geo-map-help [(open)]=\"helpOpen\" />\n</div>\n", styles: ["@charset \"UTF-8\";.geo-map-shell-host{display:block;min-height:360px}.geo-map-shell{position:relative;width:100%;height:100%;min-height:inherit;overflow:hidden;border:1px solid var(--geo-color-border-default);border-radius:var(--geo-radius-lg);background:var(--geo-color-neutral-100)}.geo-map-shell:fullscreen,.geo-map-shell:-webkit-full-screen{width:100%;height:100%;min-height:100%;border:0;border-radius:0;background:var(--geo-color-neutral-100)}.geo-map-shell:fullscreen>.cdk-overlay-container,.geo-map-shell:-webkit-full-screen>.cdk-overlay-container{z-index:1200}.geo-map-shell__map{display:block;width:100%;height:100%}.geo-map-shell__chrome-left{position:absolute;top:16px;left:16px;z-index:6;display:flex;flex-direction:column;align-items:flex-start;gap:8px;max-width:calc(100% - 32px);max-height:calc(100% - 172px);overflow:visible;pointer-events:none}.geo-map-shell__chrome-left>*{pointer-events:auto}.geo-map-shell__toolbar{flex-shrink:0}.geo-map-shell__panels{display:flex;flex-direction:column;align-items:flex-start;gap:8px;width:min(420px,100%);min-height:0;overflow:visible;pointer-events:none}.geo-map-shell__panels>*{pointer-events:auto}.geo-map-shell__panels .geo-map-search,.geo-map-shell__panels .geo-map-admin-filter,.geo-map-shell__panels .geo-map-parcel-popup,.geo-map-shell__panels .geo-map-layers-drawer,.geo-map-shell__panels .geo-map-legend{max-height:min(640px,100dvh - 100px);overflow:auto}.geo-map-shell__snapshot-bridge,.geo-map-shell__zoom-bridge,.geo-map-shell__locate-bridge{position:absolute;width:0;height:0;overflow:hidden;pointer-events:none;opacity:0}.geo-map-shell__bottom-left{position:absolute;left:16px;bottom:72px;z-index:5;display:flex;flex-direction:column;align-items:flex-start;gap:8px;max-width:min(300px,100% - 120px);pointer-events:none}.geo-map-shell__bottom-left>*{pointer-events:auto}.geo-map-shell__top-right{position:absolute;top:16px;right:16px;z-index:7;display:flex;align-items:center;justify-content:flex-end;height:48px;max-width:min(360px,100% - 32px);pointer-events:none}.geo-map-shell__top-right>*{pointer-events:auto}.geo-map-shell__bottom-right{position:absolute;right:16px;bottom:24px;z-index:5;display:flex;flex-direction:column;align-items:flex-end;gap:8px;pointer-events:none}.geo-map-shell__bottom-right>*{pointer-events:auto}.geo-map-shell__status{position:absolute;left:50%;bottom:24px;z-index:5;display:flex;flex-direction:column;align-items:center;gap:8px;max-width:min(480px,100% - 32px);transform:translate(-50%);pointer-events:none}.geo-map-shell__status>*{pointer-events:auto}.geo-map-shell__measure-disclaimer{margin:0;padding:6px 12px;border-radius:var(--geo-radius);background:var(--geo-color-neutral-white);border:1px solid var(--geo-color-border-default);font-size:var(--geo-font-size-caption);color:var(--geo-color-neutral-700);text-align:center}.geo-map-shell .geo-map__mouse-position,.geo-map-shell .ol-scale-line{display:none!important}.geo-map-shell .ol-attribution{display:none}\n"], dependencies: [{ kind: "component", type: GeoMapComponent, selector: "geo-map", inputs: ["center", "zoom", "minZoom", "maxZoom", "viewProjection", "basemap", "layers", "height", "registerProjections", "projections", "showMousePosition", "mousePositionProjection", "showZoomControl"], outputs: ["mapReady", "mapClick", "viewChange", "initError"] }, { kind: "component", type: GeoMapToolbarComponent, selector: "geo-map-toolbar", inputs: ["controller", "actions", "compact", "checkedMap"], outputs: ["checkedMapChange", "actionClick", "actionToggle"] }, { kind: "component", type: GeoMapZoomComponent, selector: "geo-map-zoom", inputs: ["controller", "showNav", "showFitProvince", "provinceExtent", "fullscreenTarget"] }, { kind: "component", type: GeoMapSnapshotComponent, selector: "geo-map-snapshot", inputs: ["controller", "label", "filename"], outputs: ["captured", "captureError"] }, { kind: "component", type: GeoMapMeasureComponent, selector: "geo-map-measure", inputs: ["controller", "mode", "showResult"], outputs: ["modeChange", "measureChange"] }, { kind: "component", type: GeoMapLayersDrawerComponent, selector: "geo-map-layers-drawer", inputs: ["controller", "open", "title", "legendItems", "showOpacity", "showLegend", "layers"], outputs: ["openChange", "layersChange", "closed"] }, { kind: "component", type: GeoMapLegendComponent, selector: "geo-map-legend", inputs: ["title", "items", "catalogMissing", "open"], outputs: ["openChange", "closed"] }, { kind: "component", type: GeoMapHelpComponent, selector: "geo-map-help", inputs: ["open", "title", "sections"], outputs: ["openChange"] }, { kind: "component", type: GeoMapSwipeComponent, selector: "geo-map-swipe", inputs: ["controller", "active", "position", "layerId"], outputs: ["activeChange", "positionChange"] }, { kind: "component", type: GeoMapSearchComponent, selector: "geo-map-search", inputs: ["open", "title", "mode", "results", "loading", "pageIndex", "pageSize", "total", "emptyText"], outputs: ["openChange", "modeChange", "pageIndexChange", "pageSizeChange", "search", "reset", "resultSelect", "closed"] }, { kind: "component", type: GeoMapAdminFilterComponent, selector: "geo-map-admin-filter", inputs: ["open", "title", "nodes", "selectionMode", "checkedKeys", "expandedKeys"], outputs: ["openChange", "checkedKeysChange", "expandedKeysChange", "apply", "reset", "fitProvince", "closed", "selectionChange"] }, { kind: "component", type: GeoMapParcelPopupComponent, selector: "geo-map-parcel-popup", inputs: ["open", "title", "parcel", "audience", "showExport"], outputs: ["openChange", "closed", "back", "exportClick", "diagramClick"] }, { kind: "component", type: GeoMapLocationChipComponent, selector: "geo-map-location-chip", inputs: ["label", "icon"] }, { kind: "component", type: GeoMapBasemapSwitcherComponent, selector: "geo-map-basemap-switcher", inputs: ["options", "selectedId", "label", "tooltip"], outputs: ["selectedIdChange", "basemapChange"] }, { kind: "component", type: GeoMapLocateComponent, selector: "geo-map-locate", inputs: ["controller", "label"], outputs: ["located", "denied", "locateError"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
574
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoMapShellComponent, isStandalone: true, selector: "geo-map-shell", inputs: { center: { classPropertyName: "center", publicName: "center", isSignal: true, isRequired: false, transformFunction: null }, zoom: { classPropertyName: "zoom", publicName: "zoom", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, showMousePosition: { classPropertyName: "showMousePosition", publicName: "showMousePosition", isSignal: true, isRequired: false, transformFunction: null }, basemapOptions: { classPropertyName: "basemapOptions", publicName: "basemapOptions", isSignal: true, isRequired: false, transformFunction: null }, toolbarActions: { classPropertyName: "toolbarActions", publicName: "toolbarActions", isSignal: true, isRequired: false, transformFunction: null }, layers: { classPropertyName: "layers", publicName: "layers", isSignal: true, isRequired: false, transformFunction: null }, legendItems: { classPropertyName: "legendItems", publicName: "legendItems", isSignal: true, isRequired: false, transformFunction: null }, legendCatalogMissing: { classPropertyName: "legendCatalogMissing", publicName: "legendCatalogMissing", isSignal: true, isRequired: false, transformFunction: null }, showNav: { classPropertyName: "showNav", publicName: "showNav", isSignal: true, isRequired: false, transformFunction: null }, includeDemoLayers: { classPropertyName: "includeDemoLayers", publicName: "includeDemoLayers", isSignal: true, isRequired: false, transformFunction: null }, adminNodes: { classPropertyName: "adminNodes", publicName: "adminNodes", isSignal: true, isRequired: false, transformFunction: null }, locationLabel: { classPropertyName: "locationLabel", publicName: "locationLabel", isSignal: true, isRequired: false, transformFunction: null }, parcelAudience: { classPropertyName: "parcelAudience", publicName: "parcelAudience", isSignal: true, isRequired: false, transformFunction: null }, provinceExtent: { classPropertyName: "provinceExtent", publicName: "provinceExtent", isSignal: true, isRequired: false, transformFunction: null }, demoSearch: { classPropertyName: "demoSearch", publicName: "demoSearch", isSignal: true, isRequired: false, transformFunction: null }, homeMode: { classPropertyName: "homeMode", publicName: "homeMode", isSignal: true, isRequired: false, transformFunction: null }, basemapId: { classPropertyName: "basemapId", publicName: "basemapId", isSignal: true, isRequired: false, transformFunction: null }, measureMode: { classPropertyName: "measureMode", publicName: "measureMode", isSignal: true, isRequired: false, transformFunction: null }, checkedMap: { classPropertyName: "checkedMap", publicName: "checkedMap", isSignal: true, isRequired: false, transformFunction: null }, layersOpen: { classPropertyName: "layersOpen", publicName: "layersOpen", isSignal: true, isRequired: false, transformFunction: null }, legendOpen: { classPropertyName: "legendOpen", publicName: "legendOpen", isSignal: true, isRequired: false, transformFunction: null }, helpOpen: { classPropertyName: "helpOpen", publicName: "helpOpen", isSignal: true, isRequired: false, transformFunction: null }, swipeActive: { classPropertyName: "swipeActive", publicName: "swipeActive", isSignal: true, isRequired: false, transformFunction: null }, searchOpen: { classPropertyName: "searchOpen", publicName: "searchOpen", isSignal: true, isRequired: false, transformFunction: null }, adminFilterOpen: { classPropertyName: "adminFilterOpen", publicName: "adminFilterOpen", isSignal: true, isRequired: false, transformFunction: null }, parcelOpen: { classPropertyName: "parcelOpen", publicName: "parcelOpen", isSignal: true, isRequired: false, transformFunction: null }, managedLayers: { classPropertyName: "managedLayers", publicName: "managedLayers", isSignal: true, isRequired: false, transformFunction: null }, searchResults: { classPropertyName: "searchResults", publicName: "searchResults", isSignal: true, isRequired: false, transformFunction: null }, selectedParcel: { classPropertyName: "selectedParcel", publicName: "selectedParcel", isSignal: true, isRequired: false, transformFunction: null }, adminCheckedKeys: { classPropertyName: "adminCheckedKeys", publicName: "adminCheckedKeys", isSignal: true, isRequired: false, transformFunction: null }, adminExpandedKeys: { classPropertyName: "adminExpandedKeys", publicName: "adminExpandedKeys", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { basemapId: "basemapIdChange", measureMode: "measureModeChange", checkedMap: "checkedMapChange", layersOpen: "layersOpenChange", legendOpen: "legendOpenChange", helpOpen: "helpOpenChange", swipeActive: "swipeActiveChange", searchOpen: "searchOpenChange", adminFilterOpen: "adminFilterOpenChange", parcelOpen: "parcelOpenChange", managedLayers: "managedLayersChange", searchResults: "searchResultsChange", selectedParcel: "selectedParcelChange", adminCheckedKeys: "adminCheckedKeysChange", adminExpandedKeys: "adminExpandedKeysChange", mapReady: "mapReady", mapClick: "mapClick", located: "located", locateDenied: "locateDenied", locateError: "locateError", actionClick: "actionClick", search: "search", searchReset: "searchReset", resultSelect: "resultSelect", parcelExport: "parcelExport", adminApply: "adminApply" }, host: { properties: { "style.height": "height()" }, classAttribute: "geo-map-shell-host" }, viewQueries: [{ propertyName: "snapshotRef", first: true, predicate: GeoMapSnapshotComponent, descendants: true, isSignal: true }, { propertyName: "zoomRef", first: true, predicate: GeoMapZoomComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"geo-map-shell\">\n <geo-map\n class=\"geo-map-shell__map\"\n [center]=\"center()\"\n [zoom]=\"zoom()\"\n [height]=\"'100%'\"\n [basemap]=\"basemap()\"\n [layers]=\"resolvedLayers()\"\n [showMousePosition]=\"showMousePosition()\"\n [showZoomControl]=\"false\"\n (mapReady)=\"onMapReady($event)\"\n (mapClick)=\"onMapClick($event)\"\n />\n\n @if (legendCatalogMissing()) {\n <div class=\"geo-map-shell__notice\">\n <geo-alert\n type=\"warning\"\n [showIcon]=\"true\"\n title=\"Ch\u01B0a c\u00F3 danh m\u1EE5c ch\u00FA gi\u1EA3i\"\n message=\"Danh m\u1EE5c lo\u1EA1i \u0111\u1EA5t v\u00E0 k\u00FD hi\u1EC7u/m\u00E0u c\u1EE7a t\u1EC9nh ch\u01B0a \u0111\u01B0\u1EE3c n\u1EA1p v\u00E0o h\u1EC7 th\u1ED1ng. B\u1EA3n \u0111\u1ED3 v\u1EABn hi\u1EC3n th\u1ECB b\u00ECnh th\u01B0\u1EDDng.\"\n />\n </div>\n }\n\n <div class=\"geo-map-shell__chrome-left\">\n <geo-map-toolbar\n class=\"geo-map-shell__toolbar\"\n [controller]=\"controller()\"\n [actions]=\"resolvedToolbarActions()\"\n [(checkedMap)]=\"checkedMap\"\n (actionClick)=\"onToolbarAction($event)\"\n (actionToggle)=\"onToolbarToggle($event)\"\n />\n\n <div class=\"geo-map-shell__panels\">\n <geo-map-search\n [(open)]=\"searchOpen\"\n [results]=\"searchResults()\"\n (search)=\"onSearch($event)\"\n (reset)=\"onSearchReset()\"\n (resultSelect)=\"onResultSelect($event)\"\n />\n <geo-map-admin-filter\n [(open)]=\"adminFilterOpen\"\n title=\"Chuy\u1EC3n v\u1ECB tr\u00ED\"\n [nodes]=\"adminNodes()\"\n [(checkedKeys)]=\"adminCheckedKeys\"\n [(expandedKeys)]=\"adminExpandedKeys\"\n (apply)=\"onAdminApply($event)\"\n (reset)=\"adminCheckedKeys.set([])\"\n (fitProvince)=\"onFitProvince()\"\n (closed)=\"onAdminClosed()\"\n />\n <geo-map-parcel-popup\n [(open)]=\"parcelOpen\"\n [parcel]=\"selectedParcel()\"\n [audience]=\"parcelAudience()\"\n (exportClick)=\"parcelExport.emit($event)\"\n (back)=\"onParcelBack()\"\n (closed)=\"onParcelClosed()\"\n />\n <geo-map-layers-drawer\n [controller]=\"controller()\"\n [(open)]=\"layersOpen\"\n [(layers)]=\"managedLayers\"\n />\n <geo-map-legend\n [(open)]=\"legendOpen\"\n [items]=\"legendItems()\"\n />\n </div>\n </div>\n\n <!-- Headless bridges: zoom/fullscreen + snapshot (driven by toolbar actions). -->\n <geo-map-zoom\n class=\"geo-map-shell__zoom-bridge\"\n [controller]=\"controller()\"\n [showNav]=\"showNav()\"\n [provinceExtent]=\"provinceExtent()\"\n />\n <geo-map-snapshot\n class=\"geo-map-shell__snapshot-bridge\"\n [controller]=\"controller()\"\n />\n\n <div class=\"geo-map-shell__top-right\">\n <ng-content select=\"[geoMapShellTopRight]\" />\n </div>\n\n <div class=\"geo-map-shell__bottom-right\">\n <geo-map-basemap-switcher\n [options]=\"basemapOptions()\"\n [(selectedId)]=\"basemapId\"\n (basemapChange)=\"onBasemapChange($event)\"\n />\n </div>\n\n <div class=\"geo-map-shell__status\">\n @if (locationLabel()) {\n <geo-map-location-chip [label]=\"locationLabel()\" />\n }\n <geo-map-measure\n [controller]=\"controller()\"\n [(mode)]=\"measureMode\"\n />\n </div>\n\n <geo-map-swipe\n [controller]=\"controller()\"\n [(active)]=\"swipeActive\"\n />\n\n <geo-map-help [(open)]=\"helpOpen\" />\n</div>\n", styles: [".geo-map-shell-host{display:block;min-height:360px}.geo-map-shell{position:relative;width:100%;height:100%;min-height:inherit;overflow:hidden;border:1px solid var(--geo-color-border-default);border-radius:var(--geo-radius-lg);background:var(--geo-color-neutral-100)}.geo-map-shell:fullscreen,.geo-map-shell:-webkit-full-screen{width:100%;height:100%;min-height:100%;border:0;border-radius:0;background:var(--geo-color-neutral-100)}.geo-map-shell:fullscreen>.cdk-overlay-container,.geo-map-shell:-webkit-full-screen>.cdk-overlay-container{z-index:1200}.geo-map-shell__map{display:block;width:100%;height:100%}.geo-map-shell__chrome-left{position:absolute;top:16px;left:16px;z-index:6;display:flex;flex-direction:column;align-items:flex-start;gap:8px;max-width:calc(100% - 32px);max-height:calc(100% - 172px);overflow:visible;pointer-events:none}.geo-map-shell__chrome-left>*{pointer-events:auto}.geo-map-shell__toolbar{flex-shrink:0}.geo-map-shell__panels{display:flex;flex-direction:column;align-items:flex-start;gap:8px;width:min(420px,100%);min-height:0;overflow:visible;pointer-events:none}.geo-map-shell__panels>*{pointer-events:auto}.geo-map-shell__panels .geo-map-search,.geo-map-shell__panels .geo-map-admin-filter,.geo-map-shell__panels .geo-map-parcel-popup,.geo-map-shell__panels .geo-map-layers-drawer,.geo-map-shell__panels .geo-map-legend{max-height:min(640px,100dvh - 100px);overflow:auto}.geo-map-shell__snapshot-bridge,.geo-map-shell__zoom-bridge{position:absolute;width:0;height:0;overflow:hidden;pointer-events:none;opacity:0}.geo-map-shell__bottom-left{position:absolute;left:16px;bottom:72px;z-index:5;display:flex;flex-direction:column;align-items:flex-start;gap:8px;max-width:min(300px,100% - 120px);pointer-events:none}.geo-map-shell__bottom-left>*{pointer-events:auto}.geo-map-shell__notice{position:absolute;top:16px;left:50%;z-index:8;transform:translate(-50%);width:min(480px,100% - 32px);pointer-events:none}.geo-map-shell__notice>*{pointer-events:auto}.geo-map-shell__top-right{position:absolute;top:16px;right:16px;z-index:7;display:flex;align-items:center;justify-content:flex-end;height:64px;max-width:min(360px,100% - 32px);pointer-events:none}.geo-map-shell__top-right>*{pointer-events:auto}.geo-map-shell__bottom-right{position:absolute;right:16px;bottom:24px;z-index:5;display:flex;flex-direction:column;align-items:flex-end;gap:8px;pointer-events:none}.geo-map-shell__bottom-right>*{pointer-events:auto}.geo-map-shell__status{position:absolute;left:50%;bottom:24px;z-index:5;display:flex;flex-direction:column;align-items:center;gap:8px;max-width:min(480px,100% - 32px);transform:translate(-50%);pointer-events:none}.geo-map-shell__status>*{pointer-events:auto}.geo-map-shell .geo-map__mouse-position,.geo-map-shell .ol-scale-line{display:none!important}.geo-map-shell .ol-attribution{display:none}\n"], dependencies: [{ kind: "component", type: GeoMapComponent, selector: "geo-map", inputs: ["center", "zoom", "minZoom", "maxZoom", "viewProjection", "basemap", "layers", "height", "registerProjections", "projections", "showMousePosition", "mousePositionProjection", "showZoomControl"], outputs: ["mapReady", "mapClick", "viewChange", "initError"] }, { kind: "component", type: GeoMapToolbarComponent, selector: "geo-map-toolbar", inputs: ["controller", "actions", "compact", "checkedMap"], outputs: ["checkedMapChange", "actionClick", "actionToggle"] }, { kind: "component", type: GeoMapZoomComponent, selector: "geo-map-zoom", inputs: ["controller", "showNav", "showFitProvince", "provinceExtent", "fullscreenTarget"] }, { kind: "component", type: GeoMapSnapshotComponent, selector: "geo-map-snapshot", inputs: ["controller", "label", "filename"], outputs: ["captured", "captureError"] }, { kind: "component", type: GeoMapMeasureComponent, selector: "geo-map-measure", inputs: ["controller", "mode", "showResult"], outputs: ["modeChange", "measureChange"] }, { kind: "component", type: GeoMapLayersDrawerComponent, selector: "geo-map-layers-drawer", inputs: ["controller", "open", "title", "legendItems", "showOpacity", "showLegend", "layers"], outputs: ["openChange", "layersChange", "closed"] }, { kind: "component", type: GeoMapLegendComponent, selector: "geo-map-legend", inputs: ["title", "items", "open"], outputs: ["openChange", "closed"] }, { kind: "component", type: GeoMapHelpComponent, selector: "geo-map-help", inputs: ["open", "title", "sections"], outputs: ["openChange"] }, { kind: "component", type: GeoMapSwipeComponent, selector: "geo-map-swipe", inputs: ["controller", "active", "position", "layerId"], outputs: ["activeChange", "positionChange"] }, { kind: "component", type: GeoMapSearchComponent, selector: "geo-map-search", inputs: ["open", "title", "mode", "results", "loading", "pageIndex", "pageSize", "total", "emptyText"], outputs: ["openChange", "modeChange", "pageIndexChange", "pageSizeChange", "search", "reset", "resultSelect", "closed"] }, { kind: "component", type: GeoMapAdminFilterComponent, selector: "geo-map-admin-filter", inputs: ["open", "title", "nodes", "checkedKeys", "expandedKeys"], outputs: ["openChange", "checkedKeysChange", "expandedKeysChange", "apply", "reset", "fitProvince", "closed", "selectionChange"] }, { kind: "component", type: GeoMapParcelPopupComponent, selector: "geo-map-parcel-popup", inputs: ["open", "title", "parcel", "audience", "showExport"], outputs: ["openChange", "closed", "back", "exportClick", "diagramClick"] }, { kind: "component", type: GeoMapLocationChipComponent, selector: "geo-map-location-chip", inputs: ["label", "icon"] }, { kind: "component", type: GeoMapBasemapSwitcherComponent, selector: "geo-map-basemap-switcher", inputs: ["options", "selectedId", "label", "tooltip"], outputs: ["selectedIdChange", "basemapChange"] }, { kind: "component", type: GeoAlertComponent, selector: "geo-alert", inputs: ["type", "title", "message", "closable", "visible", "showIcon"], outputs: ["visibleChange", "closed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
572
575
  }
573
576
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoMapShellComponent, decorators: [{
574
577
  type: Component,
@@ -587,10 +590,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
587
590
  GeoMapParcelPopupComponent,
588
591
  GeoMapLocationChipComponent,
589
592
  GeoMapBasemapSwitcherComponent,
590
- GeoMapLocateComponent,
593
+ GeoAlertComponent,
591
594
  ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
592
595
  class: 'geo-map-shell-host',
593
596
  '[style.height]': 'height()',
594
- }, template: "<div class=\"geo-map-shell\">\n <geo-map\n class=\"geo-map-shell__map\"\n [center]=\"center()\"\n [zoom]=\"zoom()\"\n [height]=\"'100%'\"\n [basemap]=\"basemap()\"\n [layers]=\"resolvedLayers()\"\n [showMousePosition]=\"showMousePosition()\"\n [showZoomControl]=\"false\"\n (mapReady)=\"onMapReady($event)\"\n (mapClick)=\"onMapClick($event)\"\n />\n\n <div class=\"geo-map-shell__chrome-left\">\n <geo-map-toolbar\n class=\"geo-map-shell__toolbar\"\n [controller]=\"controller()\"\n [actions]=\"resolvedToolbarActions()\"\n [(checkedMap)]=\"checkedMap\"\n (actionClick)=\"onToolbarAction($event)\"\n (actionToggle)=\"onToolbarToggle($event)\"\n />\n\n <div class=\"geo-map-shell__panels\">\n <geo-map-search\n [(open)]=\"searchOpen\"\n [results]=\"searchResults()\"\n (search)=\"onSearch($event)\"\n (reset)=\"onSearchReset()\"\n (resultSelect)=\"onResultSelect($event)\"\n />\n <geo-map-admin-filter\n [(open)]=\"adminFilterOpen\"\n title=\"Chuy\u1EC3n v\u1ECB tr\u00ED\"\n [nodes]=\"adminNodes()\"\n [selectionMode]=\"adminSelectionMode()\"\n [(checkedKeys)]=\"adminCheckedKeys\"\n [(expandedKeys)]=\"adminExpandedKeys\"\n (apply)=\"onAdminApply($event)\"\n (reset)=\"adminCheckedKeys.set([])\"\n (fitProvince)=\"onFitProvince()\"\n (closed)=\"onAdminClosed()\"\n />\n <geo-map-parcel-popup\n [(open)]=\"parcelOpen\"\n [parcel]=\"selectedParcel()\"\n [audience]=\"parcelAudience()\"\n (exportClick)=\"parcelExport.emit($event)\"\n (back)=\"onParcelBack()\"\n (closed)=\"onParcelClosed()\"\n />\n <geo-map-layers-drawer\n [controller]=\"controller()\"\n [(open)]=\"layersOpen\"\n [(layers)]=\"managedLayers\"\n />\n <geo-map-legend\n [(open)]=\"legendOpen\"\n [items]=\"legendItems()\"\n [catalogMissing]=\"legendCatalogMissing()\"\n />\n </div>\n </div>\n\n <!-- Headless bridges: zoom/fullscreen + snapshot + locate (driven by toolbar actions). -->\n <geo-map-zoom\n class=\"geo-map-shell__zoom-bridge\"\n [controller]=\"controller()\"\n [showNav]=\"showNav()\"\n [provinceExtent]=\"provinceExtent()\"\n />\n <geo-map-snapshot\n class=\"geo-map-shell__snapshot-bridge\"\n [controller]=\"controller()\"\n (captured)=\"snapshotCaptured.emit()\"\n (captureError)=\"snapshotError.emit($event)\"\n />\n <geo-map-locate\n class=\"geo-map-shell__locate-bridge\"\n [controller]=\"controller()\"\n (located)=\"located.emit($event)\"\n (denied)=\"locateDenied.emit()\"\n (locateError)=\"locateError.emit($event)\"\n />\n\n <div class=\"geo-map-shell__top-right\">\n <ng-content select=\"[geoMapShellTopRight]\" />\n </div>\n\n <div class=\"geo-map-shell__bottom-right\">\n <geo-map-basemap-switcher\n [options]=\"basemapOptions()\"\n [(selectedId)]=\"basemapId\"\n (basemapChange)=\"onBasemapChange($event)\"\n />\n </div>\n\n <div class=\"geo-map-shell__status\">\n @if (locationLabel()) {\n <geo-map-location-chip [label]=\"locationLabel()\" />\n }\n <geo-map-measure\n [controller]=\"controller()\"\n [(mode)]=\"measureMode\"\n />\n @if (measureMode() !== 'none' && measureDisclaimer()) {\n <p class=\"geo-map-shell__measure-disclaimer\" role=\"note\">\n {{ measureDisclaimer() }}\n </p>\n }\n </div>\n\n <geo-map-swipe\n [controller]=\"controller()\"\n [(active)]=\"swipeActive\"\n />\n\n <geo-map-help [(open)]=\"helpOpen\" />\n</div>\n", styles: ["@charset \"UTF-8\";.geo-map-shell-host{display:block;min-height:360px}.geo-map-shell{position:relative;width:100%;height:100%;min-height:inherit;overflow:hidden;border:1px solid var(--geo-color-border-default);border-radius:var(--geo-radius-lg);background:var(--geo-color-neutral-100)}.geo-map-shell:fullscreen,.geo-map-shell:-webkit-full-screen{width:100%;height:100%;min-height:100%;border:0;border-radius:0;background:var(--geo-color-neutral-100)}.geo-map-shell:fullscreen>.cdk-overlay-container,.geo-map-shell:-webkit-full-screen>.cdk-overlay-container{z-index:1200}.geo-map-shell__map{display:block;width:100%;height:100%}.geo-map-shell__chrome-left{position:absolute;top:16px;left:16px;z-index:6;display:flex;flex-direction:column;align-items:flex-start;gap:8px;max-width:calc(100% - 32px);max-height:calc(100% - 172px);overflow:visible;pointer-events:none}.geo-map-shell__chrome-left>*{pointer-events:auto}.geo-map-shell__toolbar{flex-shrink:0}.geo-map-shell__panels{display:flex;flex-direction:column;align-items:flex-start;gap:8px;width:min(420px,100%);min-height:0;overflow:visible;pointer-events:none}.geo-map-shell__panels>*{pointer-events:auto}.geo-map-shell__panels .geo-map-search,.geo-map-shell__panels .geo-map-admin-filter,.geo-map-shell__panels .geo-map-parcel-popup,.geo-map-shell__panels .geo-map-layers-drawer,.geo-map-shell__panels .geo-map-legend{max-height:min(640px,100dvh - 100px);overflow:auto}.geo-map-shell__snapshot-bridge,.geo-map-shell__zoom-bridge,.geo-map-shell__locate-bridge{position:absolute;width:0;height:0;overflow:hidden;pointer-events:none;opacity:0}.geo-map-shell__bottom-left{position:absolute;left:16px;bottom:72px;z-index:5;display:flex;flex-direction:column;align-items:flex-start;gap:8px;max-width:min(300px,100% - 120px);pointer-events:none}.geo-map-shell__bottom-left>*{pointer-events:auto}.geo-map-shell__top-right{position:absolute;top:16px;right:16px;z-index:7;display:flex;align-items:center;justify-content:flex-end;height:48px;max-width:min(360px,100% - 32px);pointer-events:none}.geo-map-shell__top-right>*{pointer-events:auto}.geo-map-shell__bottom-right{position:absolute;right:16px;bottom:24px;z-index:5;display:flex;flex-direction:column;align-items:flex-end;gap:8px;pointer-events:none}.geo-map-shell__bottom-right>*{pointer-events:auto}.geo-map-shell__status{position:absolute;left:50%;bottom:24px;z-index:5;display:flex;flex-direction:column;align-items:center;gap:8px;max-width:min(480px,100% - 32px);transform:translate(-50%);pointer-events:none}.geo-map-shell__status>*{pointer-events:auto}.geo-map-shell__measure-disclaimer{margin:0;padding:6px 12px;border-radius:var(--geo-radius);background:var(--geo-color-neutral-white);border:1px solid var(--geo-color-border-default);font-size:var(--geo-font-size-caption);color:var(--geo-color-neutral-700);text-align:center}.geo-map-shell .geo-map__mouse-position,.geo-map-shell .ol-scale-line{display:none!important}.geo-map-shell .ol-attribution{display:none}\n"] }]
597
+ }, template: "<div class=\"geo-map-shell\">\n <geo-map\n class=\"geo-map-shell__map\"\n [center]=\"center()\"\n [zoom]=\"zoom()\"\n [height]=\"'100%'\"\n [basemap]=\"basemap()\"\n [layers]=\"resolvedLayers()\"\n [showMousePosition]=\"showMousePosition()\"\n [showZoomControl]=\"false\"\n (mapReady)=\"onMapReady($event)\"\n (mapClick)=\"onMapClick($event)\"\n />\n\n @if (legendCatalogMissing()) {\n <div class=\"geo-map-shell__notice\">\n <geo-alert\n type=\"warning\"\n [showIcon]=\"true\"\n title=\"Ch\u01B0a c\u00F3 danh m\u1EE5c ch\u00FA gi\u1EA3i\"\n message=\"Danh m\u1EE5c lo\u1EA1i \u0111\u1EA5t v\u00E0 k\u00FD hi\u1EC7u/m\u00E0u c\u1EE7a t\u1EC9nh ch\u01B0a \u0111\u01B0\u1EE3c n\u1EA1p v\u00E0o h\u1EC7 th\u1ED1ng. B\u1EA3n \u0111\u1ED3 v\u1EABn hi\u1EC3n th\u1ECB b\u00ECnh th\u01B0\u1EDDng.\"\n />\n </div>\n }\n\n <div class=\"geo-map-shell__chrome-left\">\n <geo-map-toolbar\n class=\"geo-map-shell__toolbar\"\n [controller]=\"controller()\"\n [actions]=\"resolvedToolbarActions()\"\n [(checkedMap)]=\"checkedMap\"\n (actionClick)=\"onToolbarAction($event)\"\n (actionToggle)=\"onToolbarToggle($event)\"\n />\n\n <div class=\"geo-map-shell__panels\">\n <geo-map-search\n [(open)]=\"searchOpen\"\n [results]=\"searchResults()\"\n (search)=\"onSearch($event)\"\n (reset)=\"onSearchReset()\"\n (resultSelect)=\"onResultSelect($event)\"\n />\n <geo-map-admin-filter\n [(open)]=\"adminFilterOpen\"\n title=\"Chuy\u1EC3n v\u1ECB tr\u00ED\"\n [nodes]=\"adminNodes()\"\n [(checkedKeys)]=\"adminCheckedKeys\"\n [(expandedKeys)]=\"adminExpandedKeys\"\n (apply)=\"onAdminApply($event)\"\n (reset)=\"adminCheckedKeys.set([])\"\n (fitProvince)=\"onFitProvince()\"\n (closed)=\"onAdminClosed()\"\n />\n <geo-map-parcel-popup\n [(open)]=\"parcelOpen\"\n [parcel]=\"selectedParcel()\"\n [audience]=\"parcelAudience()\"\n (exportClick)=\"parcelExport.emit($event)\"\n (back)=\"onParcelBack()\"\n (closed)=\"onParcelClosed()\"\n />\n <geo-map-layers-drawer\n [controller]=\"controller()\"\n [(open)]=\"layersOpen\"\n [(layers)]=\"managedLayers\"\n />\n <geo-map-legend\n [(open)]=\"legendOpen\"\n [items]=\"legendItems()\"\n />\n </div>\n </div>\n\n <!-- Headless bridges: zoom/fullscreen + snapshot (driven by toolbar actions). -->\n <geo-map-zoom\n class=\"geo-map-shell__zoom-bridge\"\n [controller]=\"controller()\"\n [showNav]=\"showNav()\"\n [provinceExtent]=\"provinceExtent()\"\n />\n <geo-map-snapshot\n class=\"geo-map-shell__snapshot-bridge\"\n [controller]=\"controller()\"\n />\n\n <div class=\"geo-map-shell__top-right\">\n <ng-content select=\"[geoMapShellTopRight]\" />\n </div>\n\n <div class=\"geo-map-shell__bottom-right\">\n <geo-map-basemap-switcher\n [options]=\"basemapOptions()\"\n [(selectedId)]=\"basemapId\"\n (basemapChange)=\"onBasemapChange($event)\"\n />\n </div>\n\n <div class=\"geo-map-shell__status\">\n @if (locationLabel()) {\n <geo-map-location-chip [label]=\"locationLabel()\" />\n }\n <geo-map-measure\n [controller]=\"controller()\"\n [(mode)]=\"measureMode\"\n />\n </div>\n\n <geo-map-swipe\n [controller]=\"controller()\"\n [(active)]=\"swipeActive\"\n />\n\n <geo-map-help [(open)]=\"helpOpen\" />\n</div>\n", styles: [".geo-map-shell-host{display:block;min-height:360px}.geo-map-shell{position:relative;width:100%;height:100%;min-height:inherit;overflow:hidden;border:1px solid var(--geo-color-border-default);border-radius:var(--geo-radius-lg);background:var(--geo-color-neutral-100)}.geo-map-shell:fullscreen,.geo-map-shell:-webkit-full-screen{width:100%;height:100%;min-height:100%;border:0;border-radius:0;background:var(--geo-color-neutral-100)}.geo-map-shell:fullscreen>.cdk-overlay-container,.geo-map-shell:-webkit-full-screen>.cdk-overlay-container{z-index:1200}.geo-map-shell__map{display:block;width:100%;height:100%}.geo-map-shell__chrome-left{position:absolute;top:16px;left:16px;z-index:6;display:flex;flex-direction:column;align-items:flex-start;gap:8px;max-width:calc(100% - 32px);max-height:calc(100% - 172px);overflow:visible;pointer-events:none}.geo-map-shell__chrome-left>*{pointer-events:auto}.geo-map-shell__toolbar{flex-shrink:0}.geo-map-shell__panels{display:flex;flex-direction:column;align-items:flex-start;gap:8px;width:min(420px,100%);min-height:0;overflow:visible;pointer-events:none}.geo-map-shell__panels>*{pointer-events:auto}.geo-map-shell__panels .geo-map-search,.geo-map-shell__panels .geo-map-admin-filter,.geo-map-shell__panels .geo-map-parcel-popup,.geo-map-shell__panels .geo-map-layers-drawer,.geo-map-shell__panels .geo-map-legend{max-height:min(640px,100dvh - 100px);overflow:auto}.geo-map-shell__snapshot-bridge,.geo-map-shell__zoom-bridge{position:absolute;width:0;height:0;overflow:hidden;pointer-events:none;opacity:0}.geo-map-shell__bottom-left{position:absolute;left:16px;bottom:72px;z-index:5;display:flex;flex-direction:column;align-items:flex-start;gap:8px;max-width:min(300px,100% - 120px);pointer-events:none}.geo-map-shell__bottom-left>*{pointer-events:auto}.geo-map-shell__notice{position:absolute;top:16px;left:50%;z-index:8;transform:translate(-50%);width:min(480px,100% - 32px);pointer-events:none}.geo-map-shell__notice>*{pointer-events:auto}.geo-map-shell__top-right{position:absolute;top:16px;right:16px;z-index:7;display:flex;align-items:center;justify-content:flex-end;height:64px;max-width:min(360px,100% - 32px);pointer-events:none}.geo-map-shell__top-right>*{pointer-events:auto}.geo-map-shell__bottom-right{position:absolute;right:16px;bottom:24px;z-index:5;display:flex;flex-direction:column;align-items:flex-end;gap:8px;pointer-events:none}.geo-map-shell__bottom-right>*{pointer-events:auto}.geo-map-shell__status{position:absolute;left:50%;bottom:24px;z-index:5;display:flex;flex-direction:column;align-items:center;gap:8px;max-width:min(480px,100% - 32px);transform:translate(-50%);pointer-events:none}.geo-map-shell__status>*{pointer-events:auto}.geo-map-shell .geo-map__mouse-position,.geo-map-shell .ol-scale-line{display:none!important}.geo-map-shell .ol-attribution{display:none}\n"] }]
595
598
  }], ctorParameters: () => [] });
596
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLW1hcC1zaGVsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nZW8tdWkvc3JjL2xpYi9maWdtYS9nZW8tbWFwL2Nocm9tZS9nZW8tbWFwLXNoZWxsL2dlby1tYXAtc2hlbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLW1hcC9jaHJvbWUvZ2VvLW1hcC1zaGVsbC9nZW8tbWFwLXNoZWxsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLCtCQUErQixFQUMvQixzQkFBc0IsRUFDdEIsb0NBQW9DLEVBQ3BDLCtCQUErQixFQUMvQixvQkFBb0IsRUFDcEIsd0JBQXdCLEVBQ3hCLHlCQUF5QixFQUN6QiwwQkFBMEIsRUFDMUIsNEJBQTRCLEVBQzVCLHdCQUF3QixFQUN4Qix1QkFBdUIsR0FDeEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNwRyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUNoSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUN2RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNuRixP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QUF1Qjt3QkFDdkIsc0JBQXNCO3dCQUN0QiwyQkFBMkI7d0JBQzNCLHFCQUFxQjt3QkFDckIsbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLHFCQUFxQjt3QkFDckIsMEJBQTBCO3dCQUMxQiwwQkFBMEI7d0JBQzFCLDJCQUEyQjt3QkFDM0IsOEJBQThCO3dCQUM5QixxQkFBcUI7cUJBQ3RCLG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNKLEtBQUssRUFBRSxvQkFBb0I7d0JBQzNCLGdCQUFnQixFQUFFLFVBQVU7cUJBQzdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIERlc3Ryb3lSZWYsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgbW9kZWwsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICB1bnRyYWNrZWQsXG4gIHZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgR0VPX01BUF9ERUZBVUxUX0JBU0VNQVBfT1BUSU9OUyxcbiAgR0VPX01BUF9ERUZBVUxUX0NFTlRFUixcbiAgR0VPX01BUF9ERUZBVUxUX1BST1ZJTkNFX0VYVEVOVF80MzI2LFxuICBHRU9fTUFQX0RFRkFVTFRfVE9PTEJBUl9BQ1RJT05TLFxuICBHRU9fTUFQX0RFRkFVTFRfWk9PTSxcbiAgR0VPX01BUF9ERU1PX0FETUlOX05PREVTLFxuICBHRU9fTUFQX0RFTU9fTEVHRU5EX0lURU1TLFxuICBHRU9fTUFQX0RFTU9fUEFSQ0VMX0RFVEFJTCxcbiAgR0VPX01BUF9ERU1PX1RIRU1BVElDX0xBWUVSUyxcbiAgR0VPX01BUF9UUkFGRklDX0xBWUVSX0lELFxuICBHRU9fTUFQX1RSQUZGSUNfT1ZFUkxBWSxcbn0gZnJvbSAnLi4vLi4vZ2VvLW1hcC5jb25zdGFudHMnO1xuaW1wb3J0IHsgR2VvTWFwQWRtaW5GaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9nZW8tbWFwLWFkbWluLWZpbHRlci9nZW8tbWFwLWFkbWluLWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2VvTWFwQmFzZW1hcFN3aXRjaGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZ2VvLW1hcC1iYXNlbWFwLXN3aXRjaGVyL2dlby1tYXAtYmFzZW1hcC1zd2l0Y2hlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2VvTWFwSGVscENvbXBvbmVudCB9IGZyb20gJy4uL2dlby1tYXAtaGVscC9nZW8tbWFwLWhlbHAuY29tcG9uZW50JztcbmltcG9ydCB7IEdlb01hcExheWVyc0RyYXdlckNvbXBvbmVudCB9IGZyb20gJy4uL2dlby1tYXAtbGF5ZXJzLWRyYXdlci9nZW8tbWFwLWxheWVycy1kcmF3ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEdlb01hcExlZ2VuZENvbXBvbmVudCB9IGZyb20gJy4uL2dlby1tYXAtbGVnZW5kL2dlby1tYXAtbGVnZW5kLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHZW9NYXBMb2NhdGVDb21wb25lbnQgfSBmcm9tICcuLi9nZW8tbWFwLWxvY2F0ZS9nZW8tbWFwLWxvY2F0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2VvTWFwTG9jYXRpb25DaGlwQ29tcG9uZW50IH0gZnJvbSAnLi4vZ2VvLW1hcC1sb2NhdGlvbi1jaGlwL2dlby1tYXAtbG9jYXRpb24tY2hpcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2VvTWFwTWVhc3VyZUNvbXBvbmVudCB9IGZyb20gJy4uL2dlby1tYXAtbWVhc3VyZS9nZW8tbWFwLW1lYXN1cmUuY29tcG9uZW50JztcbmltcG9ydCB7IEdlb01hcFBhcmNlbFBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi4vZ2VvLW1hcC1wYXJjZWwtcG9wdXAvZ2VvLW1hcC1wYXJjZWwtcG9wdXAuY29tcG9uZW50JztcbmltcG9ydCB7IEdlb01hcFNlYXJjaENvbXBvbmVudCB9IGZyb20gJy4uL2dlby1tYXAtc2VhcmNoL2dlby1tYXAtc2VhcmNoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHZW9NYXBTbmFwc2hvdENvbXBvbmVudCB9IGZyb20gJy4uL2dlby1tYXAtc25hcHNob3QvZ2VvLW1hcC1zbmFwc2hvdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2VvTWFwU3dpcGVDb21wb25lbnQgfSBmcm9tICcuLi9nZW8tbWFwLXN3aXBlL2dlby1tYXAtc3dpcGUuY29tcG9uZW50JztcbmltcG9ydCB7IEdlb01hcFRvb2xiYXJDb21wb25lbnQgfSBmcm9tICcuLi9nZW8tbWFwLXRvb2xiYXIvZ2VvLW1hcC10b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHZW9NYXBab29tQ29tcG9uZW50IH0gZnJvbSAnLi4vZ2VvLW1hcC16b29tL2dlby1tYXAtem9vbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2VvTWFwQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZ2VvLW1hcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2VvTWFwQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL2dlby1tYXAuY29udHJvbGxlcic7XG5pbXBvcnQgdHlwZSB7IEdlb1RyZWVOb2RlIH0gZnJvbSAnLi4vLi4vLi4vZ2VvLXRyZWUvZ2VvLXRyZWUudHlwZXMnO1xuaW1wb3J0IHR5cGUge1xuICBHZW9NYXBCYXNlbWFwLFxuICBHZW9NYXBCYXNlbWFwT3B0aW9uLFxuICBHZW9NYXBDbGlja0V2ZW50LFxuICBHZW9NYXBMYXllckNvbmZpZyxcbiAgR2VvTWFwTGVnZW5kSXRlbSxcbiAgR2VvTWFwTG9jYXRlRXJyb3JSZWFzb24sXG4gIEdlb01hcE1lYXN1cmVNb2RlLFxuICBHZW9NYXBQYXJjZWxBdWRpZW5jZSxcbiAgR2VvTWFwUGFyY2VsRGV0YWlsLFxuICBHZW9NYXBTZWFyY2hRdWVyeSxcbiAgR2VvTWFwU2VhcmNoUmVzdWx0SXRlbSxcbiAgR2VvTWFwVG9vbGJhckFjdGlvbixcbn0gZnJvbSAnLi4vLi4vZ2VvLW1hcC50eXBlcyc7XG5cbi8qKlxuICogTWFwIHZpZXdwb3J0ICsgcG9ydGFsIGNocm9tZSAodG9vbGJhciwgbGF5ZXJzIGRyYXdlciwgbGVnZW5kLCBoZWxwLCBzd2lwZSwg4oCmKS5cbiAqXG4gKiBAc3VtbWFyeSBDb21wb3NlZCBtYXAgc2hlbGwgd2l0aCBjaHJvbWUgdG9vbHMgZm9yIFN0b3J5Ym9vayAvIHBvcnRhbC5cbiAqIEB3aGVuVG9Vc2UgUHVibGljIG1hcCBwYWdlIGNocm9tZSAoY+G7lW5nIGPDtG5nIGtoYWkpLlxuICogQGRvTm90VXNlV2hlbiBOZWVkIG9ubHkgdGhlIHJhdyBPTCBob3N0IOKAlCB1c2UgZ2VvLW1hcC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ2VvLW1hcC1zaGVsbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBHZW9NYXBDb21wb25lbnQsXG4gICAgR2VvTWFwVG9vbGJhckNvbXBvbmVudCxcbiAgICBHZW9NYXBab29tQ29tcG9uZW50LFxuICAgIEdlb01hcFNuYXBzaG90Q29tcG9uZW50LFxuICAgIEdlb01hcE1lYXN1cmVDb21wb25lbnQsXG4gICAgR2VvTWFwTGF5ZXJzRHJhd2VyQ29tcG9uZW50LFxuICAgIEdlb01hcExlZ2VuZENvbXBvbmVudCxcbiAgICBHZW9NYXBIZWxwQ29tcG9uZW50LFxuICAgIEdlb01hcFN3aXBlQ29tcG9uZW50LFxuICAgIEdlb01hcFNlYXJjaENvbXBvbmVudCxcbiAgICBHZW9NYXBBZG1pbkZpbHRlckNvbXBvbmVudCxcbiAgICBHZW9NYXBQYXJjZWxQb3B1cENvbXBvbmVudCxcbiAgICBHZW9NYXBMb2NhdGlvbkNoaXBDb21wb25lbnQsXG4gICAgR2VvTWFwQmFzZW1hcFN3aXRjaGVyQ29tcG9uZW50LFxuICAgIEdlb01hcExvY2F0ZUNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlby1tYXAtc2hlbGwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZ2VvLW1hcC1zaGVsbC5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdnZW8tbWFwLXNoZWxsLWhvc3QnLFxuICAgICdbc3R5bGUuaGVpZ2h0XSc6ICdoZWlnaHQoKScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIEdlb01hcFNoZWxsQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNuYXBzaG90UmVmID0gdmlld0NoaWxkKEdlb01hcFNuYXBzaG90Q29tcG9uZW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSB6b29tUmVmID0gdmlld0NoaWxkKEdlb01hcFpvb21Db21wb25lbnQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxvY2F0ZVJlZiA9IHZpZXdDaGlsZChHZW9NYXBMb2NhdGVDb21wb25lbnQpO1xuXG4gIHJlYWRvbmx5IGNlbnRlciA9IGlucHV0PG51bWJlcltdPihbLi4uR0VPX01BUF9ERUZBVUxUX0NFTlRFUl0pO1xuICByZWFkb25seSB6b29tID0gaW5wdXQoR0VPX01BUF9ERUZBVUxUX1pPT00pO1xuICByZWFkb25seSBoZWlnaHQgPSBpbnB1dCgnNTYwcHgnKTtcbiAgcmVhZG9ubHkgc2hvd01vdXNlUG9zaXRpb24gPSBpbnB1dChmYWxzZSk7XG4gIHJlYWRvbmx5IGJhc2VtYXBPcHRpb25zID0gaW5wdXQ8R2VvTWFwQmFzZW1hcE9wdGlvbltdPihcbiAgICBHRU9fTUFQX0RFRkFVTFRfQkFTRU1BUF9PUFRJT05TLFxuICApO1xuICByZWFkb25seSB0b29sYmFyQWN0aW9ucyA9IGlucHV0PEdlb01hcFRvb2xiYXJBY3Rpb25bXT4oXG4gICAgR0VPX01BUF9ERUZBVUxUX1RPT0xCQVJfQUNUSU9OUyxcbiAgKTtcbiAgLyoqIEV4dHJhIG92ZXJsYXlzIG1lcmdlZCBhZnRlciBkZW1vIHRoZW1hdGljICsgdHJhZmZpYy4gKi9cbiAgcmVhZG9ubHkgbGF5ZXJzID0gaW5wdXQ8R2VvTWFwTGF5ZXJDb25maWdbXT4oW10pO1xuICByZWFkb25seSBsZWdlbmRJdGVtcyA9IGlucHV0PEdlb01hcExlZ2VuZEl0ZW1bXT4oR0VPX01BUF9ERU1PX0xFR0VORF9JVEVNUyk7XG4gIHJlYWRvbmx5IHNob3dOYXYgPSBpbnB1dCh0cnVlKTtcbiAgcmVhZG9ubHkgaW5jbHVkZURlbW9MYXllcnMgPSBpbnB1dCh0cnVlKTtcbiAgcmVhZG9ubHkgYWRtaW5Ob2RlcyA9IGlucHV0PEdlb1RyZWVOb2RlW10+KEdFT19NQVBfREVNT19BRE1JTl9OT0RFUyk7XG4gIC8qKiBgc2luZ2xlYCDigJQgY2jhu41uIMSRw7puZyAxIHjDoy9waMaw4budbmcgKEJSLTA2LTAzKTsgYG11bHRpYCDigJQgY2hlY2tib3ggbmhp4buBdSBj4bqlcCAobeG6t2MgxJHhu4tuaCkuICovXG4gIHJlYWRvbmx5IGFkbWluU2VsZWN0aW9uTW9kZSA9IGlucHV0PCdzaW5nbGUnIHwgJ211bHRpJz4oJ211bHRpJyk7XG4gIHJlYWRvbmx5IGxvY2F0aW9uTGFiZWwgPSBpbnB1dCgnUGjGsOG7nW5nIDEg4oCUIFRQIMSQw6AgTOG6oXQsIEzDom0gxJDhu5NuZycpO1xuICAvKipcbiAgICogR2hpIGNow7ogcGjDoXAgbMO9IGhp4buDbiB0aOG7iyBraGkgxJFhbmcgxJFvIChCUi0xMC0wMykuIGBudWxsYCDhuqluIGdoaSBjaMO6IOKAlFxuICAgKiBt4bq3YyDEkeG7i25oIGdp4buvIG5ndXnDqm4gY8OidSBjaOG7ryDEkcOjIGTDuW5nIOG7nyBgcWgtbWFwLXNoZWxsYC5cbiAgICovXG4gIHJlYWRvbmx5IG1lYXN1cmVEaXNjbGFpbWVyID0gaW5wdXQ8c3RyaW5nIHwgbnVsbD4oXG4gICAgJ0dpw6EgdHLhu4sgdGhhbSBraOG6o28gdHLDqm4gYuG6o24gxJHhu5MsIGtow7RuZyBjw7MgZ2nDoSB0cuG7iyBwaMOhcCBsw70uIERp4buHbiB0w61jaCBwaMOhcCBsw70gY+G7p2EgdGjhu61hIMSR4bqldCBs4bqleSB0aGVvIGjhu5Mgc8ahIMSR4buLYSBjaMOtbmguJyxcbiAgKTtcbiAgLyoqIFRydWUga2hpIGRhbmggbeG7pWMgY2jDuiBnaeG6o2kga2jDtG5nIHThuqNpIMSRxrDhu6NjIChgRVJSX01BUF9MRUdFTkRfQ0FUQUxPR19NSVNTSU5HYCkuICovXG4gIHJlYWRvbmx5IGxlZ2VuZENhdGFsb2dNaXNzaW5nID0gaW5wdXQoZmFsc2UpO1xuICByZWFkb25seSBwYXJjZWxBdWRpZW5jZSA9IGlucHV0PEdlb01hcFBhcmNlbEF1ZGllbmNlPignY2l0aXplbicpO1xuICByZWFkb25seSBwcm92aW5jZUV4dGVudCA9IGlucHV0PHJlYWRvbmx5IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdPihcbiAgICBHRU9fTUFQX0RFRkFVTFRfUFJPVklOQ0VfRVhURU5UXzQzMjYsXG4gICk7XG4gIC8qKiBXaGVuIHRydWUsIHNoZWxsIHNlZWRzIG1vY2sgc2VhcmNoIHJlc3VsdHMgKFN0b3J5Ym9vayAvIGRlbW9zKS4gKi9cbiAgcmVhZG9ubHkgZGVtb1NlYXJjaCA9IGlucHV0KHRydWUpO1xuICAvKipcbiAgICogYGxvY2F0aW9uYCDigJQgSG9tZSBvcGVucyDEkFZIQyBmaWx0ZXIgKGRlZmF1bHQpLlxuICAgKiBgZW1pdGAg4oCUIEhvbWUgb25seSBlbWl0cyBgYWN0aW9uQ2xpY2tgIChlLmcuIHBvcnRhbCBuYXZpZ2F0ZXMgdG8gbG9naW4vZGFzaGJvYXJkKS5cbiAgICovXG4gIHJlYWRvbmx5IGhvbWVNb2RlID0gaW5wdXQ8J2xvY2F0aW9uJyB8ICdlbWl0Jz4oJ2xvY2F0aW9uJyk7XG5cbiAgcmVhZG9ubHkgYmFzZW1hcElkID0gbW9kZWwoJ29zbScpO1xuICByZWFkb25seSBtZWFzdXJlTW9kZSA9IG1vZGVsPEdlb01hcE1lYXN1cmVNb2RlPignbm9uZScpO1xuICByZWFkb25seSBjaGVja2VkTWFwID0gbW9kZWw8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHsgdHJhZmZpYzogZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGxheWVyc09wZW4gPSBtb2RlbChmYWxzZSk7XG4gIHJlYWRvbmx5IGxlZ2VuZE9wZW4gPSBtb2RlbChmYWxzZSk7XG4gIHJlYWRvbmx5IGhlbHBPcGVuID0gbW9kZWwoZmFsc2UpO1xuICByZWFkb25seSBzd2lwZUFjdGl2ZSA9IG1vZGVsKGZhbHNlKTtcbiAgcmVhZG9ubHkgc2VhcmNoT3BlbiA9IG1vZGVsKGZhbHNlKTtcbiAgcmVhZG9ubHkgYWRtaW5GaWx0ZXJPcGVuID0gbW9kZWwoZmFsc2UpO1xuICByZWFkb25seSBwYXJjZWxPcGVuID0gbW9kZWwoZmFsc2UpO1xuICByZWFkb25seSBtYW5hZ2VkTGF5ZXJzID0gbW9kZWw8R2VvTWFwTGF5ZXJDb25maWdbXT4oW10pO1xuICByZWFkb25seSBzZWFyY2hSZXN1bHRzID0gbW9kZWw8R2VvTWFwU2VhcmNoUmVzdWx0SXRlbVtdPihbXSk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkUGFyY2VsID0gbW9kZWw8R2VvTWFwUGFyY2VsRGV0YWlsIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IGFkbWluQ2hlY2tlZEtleXMgPSBtb2RlbDxBcnJheTxzdHJpbmcgfCBudW1iZXI+PihbXSk7XG4gIHJlYWRvbmx5IGFkbWluRXhwYW5kZWRLZXlzID0gbW9kZWw8QXJyYXk8c3RyaW5nIHwgbnVtYmVyPj4oWydsYW0tZG9uZyddKTtcblxuICByZWFkb25seSBtYXBSZWFkeSA9IG91dHB1dDxHZW9NYXBDb250cm9sbGVyPigpO1xuICByZWFkb25seSBtYXBDbGljayA9IG91dHB1dDxHZW9NYXBDbGlja0V2ZW50PigpO1xuICByZWFkb25seSBsb2NhdGVkID0gb3V0cHV0PFtudW1iZXIsIG51bWJlcl0+KCk7XG4gIHJlYWRvbmx5IGxvY2F0ZURlbmllZCA9IG91dHB1dDx2b2lkPigpO1xuICByZWFkb25seSBsb2NhdGVFcnJvciA9IG91dHB1dDx7IHJlYXNvbjogR2VvTWFwTG9jYXRlRXJyb3JSZWFzb247IG1lc3NhZ2U/OiBzdHJpbmcgfT4oKTtcbiAgcmVhZG9ubHkgYWN0aW9uQ2xpY2sgPSBvdXRwdXQ8R2VvTWFwVG9vbGJhckFjdGlvbj4oKTtcbiAgcmVhZG9ubHkgc2VhcmNoID0gb3V0cHV0PEdlb01hcFNlYXJjaFF1ZXJ5PigpO1xuICByZWFkb25seSBzZWFyY2hSZXNldCA9IG91dHB1dDx2b2lkPigpO1xuICByZWFkb25seSByZXN1bHRTZWxlY3QgPSBvdXRwdXQ8R2VvTWFwU2VhcmNoUmVzdWx0SXRlbT4oKTtcbiAgcmVhZG9ubHkgcGFyY2VsRXhwb3J0ID0gb3V0cHV0PEdlb01hcFBhcmNlbERldGFpbD4oKTtcbiAgcmVhZG9ubHkgYWRtaW5BcHBseSA9IG91dHB1dDxBcnJheTxzdHJpbmcgfCBudW1iZXI+PigpO1xuICByZWFkb25seSBzbmFwc2hvdENhcHR1cmVkID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IHNuYXBzaG90RXJyb3IgPSBvdXRwdXQ8dW5rbm93bj4oKTtcblxuICByZWFkb25seSBjb250cm9sbGVyID0gc2lnbmFsPEdlb01hcENvbnRyb2xsZXIgfCBudWxsPihudWxsKTtcbiAgLyoqIEFjdGl2ZSBtYXAgcG9pbnRlciB0b29sIChgbm9uZWAgPSBkZWZhdWx0IGFycm93IGN1cnNvcikuICovXG4gIHJlYWRvbmx5IHRvb2xNb2RlID0gc2lnbmFsPCdub25lJyB8ICdwYW4nIHwgJ2Rpc3RhbmNlJyB8ICdhcmVhJz4oJ25vbmUnKTtcbiAgLyoqIFdoZW4gdHJ1ZSwgcGFyY2VsIEJhY2sgcmV0dXJucyB0byBzZWFyY2ggcG9wb3Zlci4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBwYXJjZWxGcm9tU2VhcmNoID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSBwYW5DdXJzb3JCb3VuZCA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IG9uUGFuUG9pbnRlckRvd24gPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMudG9vbE1vZGUoKSA9PT0gJ3BhbicpIHtcbiAgICAgIHRoaXMuc2V0TWFwQ3Vyc29yKCdncmFiYmluZycpO1xuICAgIH1cbiAgfTtcbiAgcHJpdmF0ZSByZWFkb25seSBvblBhblBvaW50ZXJVcCA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAodGhpcy50b29sTW9kZSgpID09PSAncGFuJykge1xuICAgICAgdGhpcy5zZXRNYXBDdXJzb3IoJ2dyYWInKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gRW5mb3JjZSBhIHNpbmdsZSBsZWZ0IGNocm9tZSBwb3BvdmVyIChzZWFyY2ggLyDEkFZIQyAvIHBhcmNlbCAvIGxheWVycyAvIGxlZ2VuZCkuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaCA9IHRoaXMuc2VhcmNoT3BlbigpO1xuICAgICAgY29uc3QgYWRtaW4gPSB0aGlzLmFkbWluRmlsdGVyT3BlbigpO1xuICAgICAgY29uc3QgcGFyY2VsID0gdGhpcy5wYXJjZWxPcGVuKCk7XG4gICAgICBjb25zdCBsYXllcnMgPSB0aGlzLmxheWVyc09wZW4oKTtcbiAgICAgIGNvbnN0IGxlZ2VuZCA9IHRoaXMubGVnZW5kT3BlbigpO1xuICAgICAgY29uc3Qgb3BlbkNvdW50ID1cbiAgICAgICAgTnVtYmVyKHNlYXJjaCkgK1xuICAgICAgICBOdW1iZXIoYWRtaW4pICtcbiAgICAgICAgTnVtYmVyKHBhcmNlbCkgK1xuICAgICAgICBOdW1iZXIobGF5ZXJzKSArXG4gICAgICAgIE51bWJlcihsZWdlbmQpO1xuICAgICAgaWYgKG9wZW5Db3VudCA8PSAxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGlmIChwYXJjZWwpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlUGFuZWxzRXhjZXB0KCdwYXJjZWwnKTtcbiAgICAgICAgfSBlbHNlIGlmIChsYXllcnMpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlUGFuZWxzRXhjZXB0KCdsYXllcnMnKTtcbiAgICAgICAgfSBlbHNlIGlmIChsZWdlbmQpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlUGFuZWxzRXhjZXB0KCdsZWdlbmQnKTtcbiAgICAgICAgfSBlbHNlIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlUGFuZWxzRXhjZXB0KCdzZWFyY2gnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNsb3NlUGFuZWxzRXhjZXB0KCdhZG1pbicpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuXG4gICAgLy8gV2hlbiBtZWFzdXJlIGZpbmlzaGVzIC8gY2FuY2VscywgcmV0dXJuIHRvIGlkbGUgKyBkZWZhdWx0IGN1cnNvci5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgbW9kZSA9IHRoaXMubWVhc3VyZU1vZGUoKTtcbiAgICAgIGlmIChtb2RlICE9PSAnbm9uZScpIHtcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnRvb2xNb2RlLnNldChtb2RlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRvb2wgPSB0aGlzLnRvb2xNb2RlKCk7XG4gICAgICAgIGlmICh0b29sID09PSAnZGlzdGFuY2UnIHx8IHRvb2wgPT09ICdhcmVhJykge1xuICAgICAgICAgIHRoaXMudG9vbE1vZGUuc2V0KCdub25lJyk7XG4gICAgICAgICAgdGhpcy5zZXRNYXBDdXJzb3IobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG5cbiAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHRoaXMudW5iaW5kUGFuQ3Vyc29yKCkpO1xuICB9XG5cbiAgcmVhZG9ubHkgYmFzZW1hcCA9IGNvbXB1dGVkPEdlb01hcEJhc2VtYXA+KCgpID0+IHtcbiAgICBjb25zdCBpZCA9IHRoaXMuYmFzZW1hcElkKCk7XG4gICAgY29uc3Qgb3B0aW9uID0gdGhpcy5iYXNlbWFwT3B0aW9ucygpLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGlkKTtcbiAgICByZXR1cm4gb3B0aW9uPy5iYXNlbWFwID8/ICdvc20nO1xuICB9KTtcblxuICByZWFkb25seSByZXNvbHZlZFRvb2xiYXJBY3Rpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG1vZGUgPSB0aGlzLm1lYXN1cmVNb2RlKCk7XG4gICAgY29uc3QgdG9vbCA9IHRoaXMudG9vbE1vZGUoKTtcbiAgICBjb25zdCBzd2lwZSA9IHRoaXMuc3dpcGVBY3RpdmUoKTtcbiAgICBjb25zdCBsYXllcnNPcGVuID0gdGhpcy5sYXllcnNPcGVuKCk7XG4gICAgY29uc3QgbGVnZW5kT3BlbiA9IHRoaXMubGVnZW5kT3BlbigpO1xuICAgIGNvbnN0IHNlYXJjaE9wZW4gPSB0aGlzLnNlYXJjaE9wZW4oKTtcbiAgICBjb25zdCBhZG1pbk9wZW4gPSB0aGlzLmFkbWluRmlsdGVyT3BlbigpO1xuICAgIGNvbnN0IGZ1bGxzY3JlZW4gPSB0aGlzLnpvb21SZWYoKT8uaXNGdWxsc2NyZWVuKCkgPz8gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMudG9vbGJhckFjdGlvbnMoKS5tYXAoKGFjdGlvbikgPT4ge1xuICAgICAgaWYgKGFjdGlvbi5pZCA9PT0gJ2hvbWUnICYmIHRoaXMuaG9tZU1vZGUoKSA9PT0gJ2VtaXQnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYWN0aW9uLFxuICAgICAgICAgIGxhYmVsOiAnVHJhbmcgY2jhu6cnLFxuICAgICAgICAgIHRvb2x0aXA6ICdW4buBIHRyYW5nIGNo4bunIC8gxJHEg25nIG5o4bqtcCcsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uLmlkID09PSAncGFuJykge1xuICAgICAgICByZXR1cm4geyAuLi5hY3Rpb24sIGFjdGl2ZTogdG9vbCA9PT0gJ3BhbicgJiYgbW9kZSA9PT0gJ25vbmUnIH07XG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uLmlkID09PSAnbWVhc3VyZS1kaXN0YW5jZScpIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uYWN0aW9uLCBhY3RpdmU6IG1vZGUgPT09ICdkaXN0YW5jZScgfTtcbiAgICAgIH1cbiAgICAgIGlmIChhY3Rpb24uaWQgPT09ICdtZWFzdXJlLWFyZWEnKSB7XG4gICAgICAgIHJldHVybiB7IC4uLmFjdGlvbiwgYWN0aXZlOiBtb2RlID09PSAnYXJlYScgfTtcbiAgICAgIH1cbiAgICAgIGlmIChhY3Rpb24uaWQgPT09ICdzd2lwZScpIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uYWN0aW9uLCBhY3RpdmU6IHN3aXBlIH07XG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uLmlkID09PSAnbGF5ZXJzJykge1xuICAgICAgICByZXR1cm4geyAuLi5hY3Rpb24sIGFjdGl2ZTogbGF5ZXJzT3BlbiB9O1xuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbi5pZCA9PT0gJ2xlZ2VuZCcpIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uYWN0aW9uLCBhY3RpdmU6IGxlZ2VuZE9wZW4gfTtcbiAgICAgIH1cbiAgICAgIGlmIChhY3Rpb24uaWQgPT09ICdzZWFyY2gnKSB7XG4gICAgICAgIHJldHVybiB7IC4uLmFjdGlvbiwgYWN0aXZlOiBzZWFyY2hPcGVuIH07XG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uLmlkID09PSAnYWRtaW4tZmlsdGVyJykge1xuICAgICAgICByZXR1cm4geyAuLi5hY3Rpb24sIGFjdGl2ZTogYWRtaW5PcGVuIH07XG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uLmlkID09PSAnZnVsbHNjcmVlbicpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5hY3Rpb24sXG4gICAgICAgICAgYWN0aXZlOiBmdWxsc2NyZWVuLFxuICAgICAgICAgIGljb246IGZ1bGxzY3JlZW4gPyAnZnVsbHNjcmVlbi1leGl0JyA6ICdmdWxsc2NyZWVuJyxcbiAgICAgICAgICBpY29uU3JjOiBmdWxsc2NyZWVuID8gdW5kZWZpbmVkIDogYWN0aW9uLmljb25TcmMsXG4gICAgICAgICAgdG9vbHRpcDogZnVsbHNjcmVlbiA/ICdUaG/DoXQgdG/DoG4gbcOgbiBow6xuaCcgOiAnWGVtIHRvw6BuIGLhuqNuIMSR4buTJyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY3Rpb247XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJlc29sdmVkTGF5ZXJzID0gY29tcHV0ZWQ8R2VvTWFwTGF5ZXJDb25maWdbXT4oKCkgPT4ge1xuICAgIGNvbnN0IHRyYWZmaWNPbiA9ICEhdGhpcy5jaGVja2VkTWFwKClbJ3RyYWZmaWMnXTtcbiAgICBjb25zdCB0cmFmZmljOiBHZW9NYXBMYXllckNvbmZpZyA9IHtcbiAgICAgIC4uLkdFT19NQVBfVFJBRkZJQ19PVkVSTEFZLFxuICAgICAgdmlzaWJsZTogdHJhZmZpY09uLFxuICAgIH07XG4gICAgY29uc3QgbWFuYWdlZCA9IHRoaXMubWFuYWdlZExheWVycygpO1xuICAgIGlmIChtYW5hZ2VkLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIFsuLi5tYW5hZ2VkLCB0cmFmZmljXTtcbiAgICB9XG4gICAgY29uc3QgZGVtbyA9IHRoaXMuaW5jbHVkZURlbW9MYXllcnMoKSA/IEdFT19NQVBfREVNT19USEVNQVRJQ19MQVlFUlMgOiBbXTtcbiAgICByZXR1cm4gWy4uLmRlbW8sIHRyYWZmaWMsIC4uLnRoaXMubGF5ZXJzKCldO1xuICB9KTtcblxuICBvbk1hcFJlYWR5KGN0cmw6IEdlb01hcENvbnRyb2xsZXIpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuc2V0KGN0cmwpO1xuICAgIGlmICghdGhpcy5tYW5hZ2VkTGF5ZXJzKCkubGVuZ3RoKSB7XG4gICAgICBjb25zdCBzZWVkID0gdGhpcy5pbmNsdWRlRGVtb0xheWVycygpXG4gICAgICAgID8gR0VPX01BUF9ERU1PX1RIRU1BVElDX0xBWUVSUy5tYXAoKGxheWVyKSA9PiAoeyAuLi5sYXllciB9KSlcbiAgICAgICAgOiB0aGlzLmxheWVycygpLm1hcCgobGF5ZXIpID0+ICh7IC4uLmxheWVyIH0pKTtcbiAgICAgIHRoaXMubWFuYWdlZExheWVycy5zZXQoc2VlZCk7XG4gICAgfVxuICAgIHRoaXMuYmluZFBhbkN1cnNvcihjdHJsKTtcbiAgICBpZiAodGhpcy50b29sTW9kZSgpID09PSAncGFuJykge1xuICAgICAgdGhpcy5hcHBseVBhbkN1cnNvcigpO1xuICAgIH1cbiAgICB0aGlzLm1hcFJlYWR5LmVtaXQoY3RybCk7XG4gIH1cblxuICBvbk1hcENsaWNrKGV2ZW50OiBHZW9NYXBDbGlja0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5wYXJjZWxGcm9tU2VhcmNoLnNldChmYWxzZSk7XG4gICAgdGhpcy5tYXBDbGljay5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uQmFzZW1hcENoYW5nZShiYXNlbWFwOiBHZW9NYXBCYXNlbWFwKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sbGVyKCk/LnNldEJhc2VtYXAoYmFzZW1hcCk7XG4gIH1cblxuICBvblRvb2xiYXJBY3Rpb24oYWN0aW9uOiBHZW9NYXBUb29sYmFyQWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5hY3Rpb25DbGljay5lbWl0KGFjdGlvbik7XG4gICAgc3dpdGNoIChhY3Rpb24uaWQpIHtcbiAgICAgIGNhc2UgJ2hvbWUnOlxuICAgICAgICBpZiAodGhpcy5ob21lTW9kZSgpID09PSAnbG9jYXRpb24nKSB7XG4gICAgICAgICAgaWYgKHRoaXMuYWRtaW5GaWx0ZXJPcGVuKCkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRtaW5GaWx0ZXJPcGVuLnNldChmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnpvb21SZWYoKT8uZml0UHJvdmluY2UoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcGVuUGFuZWwoJ2FkbWluJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYWRtaW4tZmlsdGVyJzpcbiAgICAgICAgaWYgKHRoaXMuYWRtaW5GaWx0ZXJPcGVuKCkpIHtcbiAgICAgICAgICB0aGlzLmFkbWluRmlsdGVyT3Blbi5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuem9vbVJlZigpPy5maXRQcm92aW5jZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub3BlblBhbmVsKCdhZG1pbicpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZml0LXByb3ZpbmNlJzpcbiAgICAgICAgdGhpcy56b29tUmVmKCk/LmZpdFByb3ZpbmNlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncGFuJzpcbiAgICAgICAgaWYgKHRoaXMudG9vbE1vZGUoKSA9PT0gJ3BhbicpIHtcbiAgICAgICAgICB0aGlzLmV4aXRUb29sTW9kZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZW50ZXJQYW5Nb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd6b29tLWluJzpcbiAgICAgICAgdGhpcy56b29tUmVmKCk/Lnpvb21JbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3pvb20tb3V0JzpcbiAgICAgICAgdGhpcy56b29tUmVmKCk/Lnpvb21PdXQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdmdWxsc2NyZWVuJzpcbiAgICAgICAgdGhpcy56b29tUmVmKCk/LnRvZ2dsZUZ1bGxzY3JlZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzZWFyY2gnOlxuICAgICAgICBpZiAodGhpcy5zZWFyY2hPcGVuKCkpIHtcbiAgICAgICAgICB0aGlzLnNlYXJjaE9wZW4uc2V0KGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9wZW5QYW5lbCgnc2VhcmNoJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsYXllcnMnOlxuICAgICAgICBpZiAodGhpcy5sYXllcnNPcGVuKCkpIHtcbiAgICAgICAgICB0aGlzLmxheWVyc09wZW4uc2V0KGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9wZW5QYW5lbCgnbGF5ZXJzJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsZWdlbmQnOlxuICAgICAgICBpZiAodGhpcy5sZWdlbmRPcGVuKCkpIHtcbiAgICAgICAgICB0aGlzLmxlZ2VuZE9wZW4uc2V0KGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9wZW5QYW5lbCgnbGVnZW5kJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdoZWxwJzpcbiAgICAgICAgdGhpcy5oZWxwT3Blbi5zZXQodHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3dpcGUnOlxuICAgICAgICB0aGlzLm1lYXN1cmVNb2RlLnNldCgnbm9uZScpO1xuICAgICAgICB0aGlzLnRvb2xNb2RlLnNldCgnbm9uZScpO1xuICAgICAgICB0aGlzLnpvb21SZWYoKT8ucmVzZXRJbnRlcmFjdGlvbk1vZGUoKTtcbiAgICAgICAgdGhpcy5zZXRNYXBDdXJzb3IobnVsbCk7XG4gICAgICAgIHRoaXMuc3dpcGVBY3RpdmUudXBkYXRlKCh2KSA9PiAhdik7XG4gICAgICAgIGlmICh0aGlzLnN3aXBlQWN0aXZlKCkpIHtcbiAgICAgICAgICB0aGlzLmVuc3VyZVN3aXBlT3ZlcmxheVZpc2libGUoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21lYXN1cmUtZGlzdGFuY2UnOlxuICAgICAgICB0aGlzLnN3aXBlQWN0aXZlLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMuem9vbVJlZigpPy5yZXNldEludGVyYWN0aW9uTW9kZSgpO1xuICAgICAgICBpZiAodGhpcy5tZWFzdXJlTW9kZSgpID09PSAnZGlzdGFuY2UnKSB7XG4gICAgICAgICAgdGhpcy5leGl0VG9vbE1vZGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnRvb2xNb2RlLnNldCgnZGlzdGFuY2UnKTtcbiAgICAgICAgICB0aGlzLm1lYXN1cmVNb2RlLnNldCgnZGlzdGFuY2UnKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21lYXN1cmUtYXJlYSc6XG4gICAgICAgIHRoaXMuc3dpcGVBY3RpdmUuc2V0KGZhbHNlKTtcbiAgICAgICAgdGhpcy56b29tUmVmKCk/LnJlc2V0SW50ZXJhY3Rpb25Nb2RlKCk7XG4gICAgICAgIGlmICh0aGlzLm1lYXN1cmVNb2RlKCkgPT09ICdhcmVhJykge1xuICAgICAgICAgIHRoaXMuZXhpdFRvb2xNb2RlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50b29sTW9kZS5zZXQoJ2FyZWEnKTtcbiAgICAgICAgICB0aGlzLm1lYXN1cmVNb2RlLnNldCgnYXJlYScpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc25hcHNob3QnOlxuICAgICAgICB0aGlzLnNuYXBzaG90UmVmKCk/LmNhcHR1cmUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsb2NhdGUnOlxuICAgICAgICB0aGlzLmxvY2F0ZVJlZigpPy5sb2NhdGUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvblRvb2xiYXJUb2dnbGUoZXZlbnQ6IHtcbiAgICBhY3Rpb246IEdlb01hcFRvb2xiYXJBY3Rpb247XG4gICAgY2hlY2tlZDogYm9vbGVhbjtcbiAgfSk6IHZvaWQge1xuICAgIGlmIChldmVudC5hY3Rpb24uaWQgPT09ICd0cmFmZmljJykge1xuICAgICAgdGhpcy5jb250cm9sbGVyKCk/LnNldExheWVyVmlzaWJpbGl0eShcbiAgICAgICAgR0VPX01BUF9UUkFGRklDX0xBWUVSX0lELFxuICAgICAgICBldmVudC5jaGVja2VkLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBvblNlYXJjaChxdWVyeTogR2VvTWFwU2VhcmNoUXVlcnkpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaC5lbWl0KHF1ZXJ5KTtcbiAgICBpZiAoIXRoaXMuZGVtb1NlYXJjaCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRlbW8gPSB0aGlzLmJ1aWxkRGVtb1NlYXJjaFJlc3VsdHMocXVlcnkpO1xuICAgIHRoaXMuc2VhcmNoUmVzdWx0cy5zZXQoZGVtbyk7XG4gICAgY29uc3QgZ2VvanNvbkNvbGxlY3Rpb24gPSB7XG4gICAgICB0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgZmVhdHVyZXM6IGRlbW9cbiAgICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS5nZW9qc29uKVxuICAgICAgICAuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBvYmplY3QgPT4gISFpdGVtKSxcbiAgICB9O1xuICAgIGlmIChnZW9qc29uQ29sbGVjdGlvbi5mZWF0dXJlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY29udHJvbGxlcigpPy5zZXRIaWdobGlnaHRGcm9tR2VvSnNvbihnZW9qc29uQ29sbGVjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgb25TZWFyY2hSZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFJlc3VsdHMuc2V0KFtdKTtcbiAgICB0aGlzLnNlbGVjdGVkUGFyY2VsLnNldChudWxsKTtcbiAgICB0aGlzLnBhcmNlbE9wZW4uc2V0KGZhbHNlKTtcbiAgICB0aGlzLmNvbnRyb2xsZXIoKT8uY2xlYXJIaWdobGlnaHQoKTtcbiAgICB0aGlzLnNlYXJjaFJlc2V0LmVtaXQoKTtcbiAgfVxuXG4gIG9uUGFyY2VsQ2xvc2VkKCk6IHZvaWQge1xuICAgIHRoaXMucGFyY2VsRnJvbVNlYXJjaC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuc2VsZWN0ZWRQYXJjZWwuc2V0KG51bGwpO1xuICAgIHRoaXMuY29udHJvbGxlcigpPy5jbGVhckhpZ2hsaWdodCgpO1xuICB9XG5cbiAgb25QYXJjZWxCYWNrKCk6IHZvaWQge1xuICAgIGNvbnN0IGZyb21TZWFyY2ggPSB0aGlzLnBhcmNlbEZyb21TZWFyY2goKTtcbiAgICB0aGlzLnBhcmNlbE9wZW4uc2V0KGZhbHNlKTtcbiAgICBpZiAoZnJvbVNlYXJjaCkge1xuICAgICAgdGhpcy5wYXJjZWxGcm9tU2VhcmNoLnNldChmYWxzZSk7XG4gICAgICB0aGlzLm9wZW5QYW5lbCgnc2VhcmNoJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRQYXJjZWwuc2V0KG51bGwpO1xuICAgIHRoaXMuY29udHJvbGxlcigpPy5jbGVhckhpZ2hsaWdodCgpO1xuICB9XG5cbiAgb25SZXN1bHRTZWxlY3QoaXRlbTogR2VvTWFwU2VhcmNoUmVzdWx0SXRlbSk6IHZvaWQge1xuICAgIHRoaXMucmVzdWx0U2VsZWN0LmVtaXQoaXRlbSk7XG4gICAgaWYgKGl0ZW0uZ2VvanNvbikge1xuICAgICAgdGhpcy5jb250cm9sbGVyKCk/LnNldEhpZ2hsaWdodEZyb21HZW9Kc29uKGl0ZW0uZ2VvanNvbik7XG4gICAgfSBlbHNlIGlmIChpdGVtLmV4dGVudDQzMjYpIHtcbiAgICAgIHRoaXMuY29udHJvbGxlcigpPy5maXRMb25MYXRFeHRlbnQoaXRlbS5leHRlbnQ0MzI2KTtcbiAgICB9XG4gICAgaWYgKGl0ZW0ucGFyY2VsKSB7XG4gICAgICB0aGlzLnBhcmNlbEZyb21TZWFyY2guc2V0KHRydWUpO1xuICAgICAgdGhpcy5zZWxlY3RlZFBhcmNlbC5zZXQoaXRlbS5wYXJjZWwpO1xuICAgICAgdGhpcy5vcGVuUGFuZWwoJ3BhcmNlbCcpO1xuICAgIH1cbiAgfVxuXG4gIG9uQWRtaW5BcHBseShrZXlzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+KTogdm9pZCB7XG4gICAgdGhpcy5hZG1pbkFwcGx5LmVtaXQoa2V5cyk7XG4gICAgLy8gRGVtbzogZml0IGEgc2FtcGxlIHdhcmQgYmJveCB3aGVuIGEgbGVhZiBpcyBzZWxlY3RlZC5cbiAgICBpZiAodGhpcy5kZW1vU2VhcmNoKCkgJiYga2V5cy5zb21lKChrZXkpID0+IFN0cmluZyhrZXkpLnN0YXJ0c1dpdGgoJ3hhLScpKSkge1xuICAgICAgdGhpcy5jb250cm9sbGVyKCk/LmZpdExvbkxhdEV4dGVudChbMTA4LjQyLCAxMS45MiwgMTA4LjUsIDExLjk4XSwge1xuICAgICAgICBtYXhab29tOiAxNCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uRml0UHJvdmluY2UoKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sbGVyKCk/LmZpdFByb3ZpbmNlKHRoaXMucHJvdmluY2VFeHRlbnQoKSk7XG4gIH1cblxuICBvbkFkbWluQ2xvc2VkKCk6IHZvaWQge1xuICAgIHRoaXMuem9vbVJlZigpPy5maXRQcm92aW5jZSgpO1xuICB9XG5cbiAgLyoqIE9wZW4gb25lIGxlZnQgY2hyb21lIHBvcG92ZXI7IGNsb3NlIHRoZSBvdGhlcnMgdG8gYXZvaWQgc3RhY2tlZCBzY3JvbGwuICovXG4gIHByaXZhdGUgb3BlblBhbmVsKFxuICAgIHBhbmVsOiAnc2VhcmNoJyB8ICdhZG1pbicgfCAncGFyY2VsJyB8ICdsYXllcnMnIHwgJ2xlZ2VuZCcsXG4gICk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VQYW5lbHNFeGNlcHQocGFuZWwpO1xuICAgIGlmIChwYW5lbCA9PT0gJ3NlYXJjaCcpIHtcbiAgICAgIHRoaXMuc2VhcmNoT3Blbi5zZXQodHJ1ZSk7XG4gICAgfSBlbHNlIGlmIChwYW5lbCA9PT0gJ2FkbWluJykge1xuICAgICAgdGhpcy5hZG1pbkZpbHRlck9wZW4uc2V0KHRydWUpO1xuICAgIH0gZWxzZSBpZiAocGFuZWwgPT09ICdwYXJjZWwnKSB7XG4gICAgICB0aGlzLnBhcmNlbE9wZW4uc2V0KHRydWUpO1xuICAgIH0gZWxzZSBpZiAocGFuZWwgPT09ICdsYXllcnMnKSB7XG4gICAgICB0aGlzLmxheWVyc09wZW4uc2V0KHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxlZ2VuZE9wZW4uc2V0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VQYW5lbHNFeGNlcHQoXG4gICAga2VlcDogJ3NlYXJjaCcgfCAnYWRtaW4nIHwgJ3BhcmNlbCcgfCAnbGF5ZXJzJyB8ICdsZWdlbmQnLFxuICApOiB2b2lkIHtcbiAgICBpZiAoa2VlcCAhPT0gJ3NlYXJjaCcgJiYgdGhpcy5zZWFyY2hPcGVuKCkpIHtcbiAgICAgIHRoaXMuc2VhcmNoT3Blbi5zZXQoZmFsc2UpO1xuICAgIH1cbiAgICBpZiAoa2VlcCAhPT0gJ2FkbWluJyAmJiB0aGlzLmFkbWluRmlsdGVyT3BlbigpKSB7XG4gICAgICB0aGlzLmFkbWluRmlsdGVyT3Blbi5zZXQoZmFsc2UpO1xuICAgIH1cbiAgICBpZiAoa2VlcCAhPT0gJ3BhcmNlbCcgJiYgdGhpcy5wYXJjZWxPcGVuKCkpIHtcbiAgICAgIHRoaXMucGFyY2VsT3Blbi5zZXQoZmFsc2UpO1xuICAgIH1cbiAgICBpZiAoa2VlcCAhPT0gJ2xheWVycycgJiYgdGhpcy5sYXllcnNPcGVuKCkpIHtcbiAgICAgIHRoaXMubGF5ZXJzT3Blbi5zZXQoZmFsc2UpO1xuICAgIH1cbiAgICBpZiAoa2VlcCAhPT0gJ2xlZ2VuZCcgJiYgdGhpcy5sZWdlbmRPcGVuKCkpIHtcbiAgICAgIHRoaXMubGVnZW5kT3Blbi5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW50ZXJQYW5Nb2RlKCk6IHZvaWQge1xuICAgIHRoaXMudG9vbE1vZGUuc2V0KCdwYW4nKTtcbiAgICB0aGlzLm1lYXN1cmVNb2RlLnNldCgnbm9uZScpO1xuICAgIHRoaXMuc3dpcGVBY3RpdmUuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnpvb21SZWYoKT8ucmVzZXRJbnRlcmFjdGlvbk1vZGUoKTtcbiAgICB0aGlzLmFwcGx5UGFuQ3Vyc29yKCk7XG4gIH1cblxuICBwcml2YXRlIGV4aXRUb29sTW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvb2xNb2RlLnNldCgnbm9uZScpO1xuICAgIHRoaXMubWVhc3VyZU1vZGUuc2V0KCdub25lJyk7XG4gICAgdGhpcy5zd2lwZUFjdGl2ZS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuem9vbVJlZigpPy5yZXNldEludGVyYWN0aW9uTW9kZSgpO1xuICAgIHRoaXMuc2V0TWFwQ3Vyc29yKG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVBhbkN1cnNvcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50b29sTW9kZSgpICE9PSAncGFuJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldE1hcEN1cnNvcignZ3JhYicpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRNYXBDdXJzb3IoY3Vyc29yOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgZWwgPSB0aGlzLmNvbnRyb2xsZXIoKT8uZ2V0TWFwKCk/LmdldFRhcmdldEVsZW1lbnQoKTtcbiAgICBpZiAoIWVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsLnN0eWxlLmN1cnNvciA9IGN1cnNvciA/PyAnJztcbiAgfVxuXG4gIHByaXZhdGUgYmluZFBhbkN1cnNvcihjdHJsOiBHZW9NYXBDb250cm9sbGVyKTogdm9pZCB7XG4gICAgY29uc3QgZWwgPSBjdHJsLmdldE1hcCgpPy5nZXRUYXJnZXRFbGVtZW50KCk7XG4gICAgaWYgKCFlbCB8fCB0aGlzLnBhbkN1cnNvckJvdW5kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5vblBhblBvaW50ZXJEb3duKTtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCB0aGlzLm9uUGFuUG9pbnRlclVwKTtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybGVhdmUnLCB0aGlzLm9uUGFuUG9pbnRlclVwKTtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJywgdGhpcy5vblBhblBvaW50ZXJVcCk7XG4gICAgdGhpcy5wYW5DdXJzb3JCb3VuZCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIHVuYmluZFBhbkN1cnNvcigpOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IHRoaXMuY29udHJvbGxlcigpPy5nZXRNYXAoKT8uZ2V0VGFyZ2V0RWxlbWVudCgpO1xuICAgIGlmICghZWwgfHwgIXRoaXMucGFuQ3Vyc29yQm91bmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLm9uUGFuUG9pbnRlckRvd24pO1xuICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMub25QYW5Qb2ludGVyVXApO1xuICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJsZWF2ZScsIHRoaXMub25QYW5Qb2ludGVyVXApO1xuICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCB0aGlzLm9uUGFuUG9pbnRlclVwKTtcbiAgICB0aGlzLnBhbkN1cnNvckJvdW5kID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRGVtb1NlYXJjaFJlc3VsdHMoXG4gICAgcXVlcnk6IEdlb01hcFNlYXJjaFF1ZXJ5LFxuICApOiBHZW9NYXBTZWFyY2hSZXN1bHRJdGVtW10ge1xuICAgIGNvbnN0IHBhcmNlbExheWVyID0gR0VPX01BUF9ERU1PX1RIRU1BVElDX0xBWUVSUy5maW5kKFxuICAgICAgKGxheWVyKSA9PiBsYXllci5pZCA9PT0gJ2RlbW8tcGFyY2VsJyAmJiBsYXllci50eXBlID09PSAnZ2VvanNvbicsXG4gICAgKTtcbiAgICBjb25zdCBmZWF0dXJlID1cbiAgICAgIHBhcmNlbExheWVyICYmIHBhcmNlbExheWVyLnR5cGUgPT09ICdnZW9qc29uJ1xuICAgICAgICA/IChwYXJjZWxMYXllci5kYXRhIGFzIHsgZmVhdHVyZXM/OiBvYmplY3RbXSB9KS5mZWF0dXJlcz8uWzBdXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGtleXdvcmQgPSBPYmplY3QudmFsdWVzKHF1ZXJ5LnZhbHVlcylcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5qb2luKCcgJylcbiAgICAgIC50cmltKCk7XG4gICAgY29uc3QgbGFiZWwgPSBrZXl3b3JkIHx8ICdUaOG7rWEgMTIg4oCUIFThu50gNDUnO1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnZGVtby1wYXJjZWwtMTInLFxuICAgICAgICB0aXRsZTogYFRo4butYSAxMiAvIFThu50gNDVgLFxuICAgICAgICBzdWJ0aXRsZTogbGFiZWwsXG4gICAgICAgIGV4dGVudDQzMjY6IFsxMDguNDUsIDExLjk0LCAxMDguNDY1LCAxMS45NTJdLFxuICAgICAgICBnZW9qc29uOiBmZWF0dXJlID8/IHtcbiAgICAgICAgICB0eXBlOiAnRmVhdHVyZScsXG4gICAgICAgICAgcHJvcGVydGllczogeyBwYXJjZWw6ICcxMicsIHNoZWV0OiAnNDUnIH0sXG4gICAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICAgIHR5cGU6ICdQb2x5Z29uJyxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBbXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMTA4LjQ1LCAxMS45NF0sXG4gICAgICAgICAgICAgICAgWzEwOC40NjUsIDExLjk0XSxcbiAgICAgICAgICAgICAgICBbMTA4LjQ2NSwgMTEuOTUyXSxcbiAgICAgICAgICAgICAgICBbMTA4LjQ1LCAxMS45NTJdLFxuICAgICAgICAgICAgICAgIFsxMDguNDUsIDExLjk0XSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcGFyY2VsOiB7IC4uLkdFT19NQVBfREVNT19QQVJDRUxfREVUQUlMIH0sXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZVN3aXBlT3ZlcmxheVZpc2libGUoKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMubWFuYWdlZExheWVycygpO1xuICAgIGlmICghbGlzdC5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYW55VmlzaWJsZSA9IGxpc3Quc29tZSgobGF5ZXIpID0+IGxheWVyLnZpc2libGUgIT09IGZhbHNlKTtcbiAgICBpZiAoYW55VmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXh0ID0gbGlzdC5tYXAoKGxheWVyLCBpbmRleCkgPT5cbiAgICAgIGluZGV4ID09PSAwID8geyAuLi5sYXllciwgdmlzaWJsZTogdHJ1ZSB9IDogbGF5ZXIsXG4gICAgKTtcbiAgICB0aGlzLm1hbmFnZWRMYXllcnMuc2V0KG5leHQpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZ2VvLW1hcC1zaGVsbFwiPlxuICA8Z2VvLW1hcFxuICAgIGNsYXNzPVwiZ2VvLW1hcC1zaGVsbF9fbWFwXCJcbiAgICBbY2VudGVyXT1cImNlbnRlcigpXCJcbiAgICBbem9vbV09XCJ6b29tKClcIlxuICAgIFtoZWlnaHRdPVwiJzEwMCUnXCJcbiAgICBbYmFzZW1hcF09XCJiYXNlbWFwKClcIlxuICAgIFtsYXllcnNdPVwicmVzb2x2ZWRMYXllcnMoKVwiXG4gICAgW3Nob3dNb3VzZVBvc2l0aW9uXT1cInNob3dNb3VzZVBvc2l0aW9uKClcIlxuICAgIFtzaG93Wm9vbUNvbnRyb2xdPVwiZmFsc2VcIlxuICAgIChtYXBSZWFkeSk9XCJvbk1hcFJlYWR5KCRldmVudClcIlxuICAgIChtYXBDbGljayk9XCJvbk1hcENsaWNrKCRldmVudClcIlxuICAvPlxuXG4gIDxkaXYgY2xhc3M9XCJnZW8tbWFwLXNoZWxsX19jaHJvbWUtbGVmdFwiPlxuICAgIDxnZW8tbWFwLXRvb2xiYXJcbiAgICAgIGNsYXNzPVwiZ2VvLW1hcC1zaGVsbF9fdG9vbGJhclwiXG4gICAgICBbY29udHJvbGxlcl09XCJjb250cm9sbGVyKClcIlxuICAgICAgW2FjdGlvbnNdPVwicmVzb2x2ZWRUb29sYmFyQWN0aW9ucygpXCJcbiAgICAgIFsoY2hlY2tlZE1hcCldPVwiY2hlY2tlZE1hcFwiXG4gICAgICAoYWN0aW9uQ2xpY2spPVwib25Ub29sYmFyQWN0aW9uKCRldmVudClcIlxuICAgICAgKGFjdGlvblRvZ2dsZSk9XCJvblRvb2xiYXJUb2dnbGUoJGV2ZW50KVwiXG4gICAgLz5cblxuICAgIDxkaXYgY2xhc3M9XCJnZW8tbWFwLXNoZWxsX19wYW5lbHNcIj5cbiAgICAgIDxnZW8tbWFwLXNlYXJjaFxuICAgICAgICBbKG9wZW4pXT1cInNlYXJjaE9wZW5cIlxuICAgICAgICBbcmVzdWx0c109XCJzZWFyY2hSZXN1bHRzKClcIlxuICAgICAgICAoc2VhcmNoKT1cIm9uU2VhcmNoKCRldmVudClcIlxuICAgICAgICAocmVzZXQpPVwib25TZWFyY2hSZXNldCgpXCJcbiAgICAgICAgKHJlc3VsdFNlbGVjdCk9XCJvblJlc3VsdFNlbGVjdCgkZXZlbnQpXCJcbiAgICAgIC8+XG4gICAgICA8Z2VvLW1hcC1hZG1pbi1maWx0ZXJcbiAgICAgICAgWyhvcGVuKV09XCJhZG1pbkZpbHRlck9wZW5cIlxuICAgICAgICB0aXRsZT1cIkNodXnhu4NuIHbhu4sgdHLDrVwiXG4gICAgICAgIFtub2Rlc109XCJhZG1pbk5vZGVzKClcIlxuICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCJhZG1pblNlbGVjdGlvbk1vZGUoKVwiXG4gICAgICAgIFsoY2hlY2tlZEtleXMpXT1cImFkbWluQ2hlY2tlZEtleXNcIlxuICAgICAgICBbKGV4cGFuZGVkS2V5cyldPVwiYWRtaW5FeHBhbmRlZEtleXNcIlxuICAgICAgICAoYXBwbHkpPVwib25BZG1pbkFwcGx5KCRldmVudClcIlxuICAgICAgICAocmVzZXQpPVwiYWRtaW5DaGVja2VkS2V5cy5zZXQoW10pXCJcbiAgICAgICAgKGZpdFByb3ZpbmNlKT1cIm9uRml0UHJvdmluY2UoKVwiXG4gICAgICAgIChjbG9zZWQpPVwib25BZG1pbkNsb3NlZCgpXCJcbiAgICAgIC8+XG4gICAgICA8Z2VvLW1hcC1wYXJjZWwtcG9wdXBcbiAgICAgICAgWyhvcGVuKV09XCJwYXJjZWxPcGVuXCJcbiAgICAgICAgW3BhcmNlbF09XCJzZWxlY3RlZFBhcmNlbCgpXCJcbiAgICAgICAgW2F1ZGllbmNlXT1cInBhcmNlbEF1ZGllbmNlKClcIlxuICAgICAgICAoZXhwb3J0Q2xpY2spPVwicGFyY2VsRXhwb3J0LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChiYWNrKT1cIm9uUGFyY2VsQmFjaygpXCJcbiAgICAgICAgKGNsb3NlZCk9XCJvblBhcmNlbENsb3NlZCgpXCJcbiAgICAgIC8+XG4gICAgICA8Z2VvLW1hcC1sYXllcnMtZHJhd2VyXG4gICAgICAgIFtjb250cm9sbGVyXT1cImNvbnRyb2xsZXIoKVwiXG4gICAgICAgIFsob3BlbildPVwibGF5ZXJzT3BlblwiXG4gICAgICAgIFsobGF5ZXJzKV09XCJtYW5hZ2VkTGF5ZXJzXCJcbiAgICAgIC8+XG4gICAgICA8Z2VvLW1hcC1sZWdlbmRcbiAgICAgICAgWyhvcGVuKV09XCJsZWdlbmRPcGVuXCJcbiAgICAgICAgW2l0ZW1zXT1cImxlZ2VuZEl0ZW1zKClcIlxuICAgICAgICBbY2F0YWxvZ01pc3NpbmddPVwibGVnZW5kQ2F0YWxvZ01pc3NpbmcoKVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEhlYWRsZXNzIGJyaWRnZXM6IHpvb20vZnVsbHNjcmVlbiArIHNuYXBzaG90ICsgbG9jYXRlIChkcml2ZW4gYnkgdG9vbGJhciBhY3Rpb25zKS4gLS0+XG4gIDxnZW8tbWFwLXpvb21cbiAgICBjbGFzcz1cImdlby1tYXAtc2hlbGxfX3pvb20tYnJpZGdlXCJcbiAgICBbY29udHJvbGxlcl09XCJjb250cm9sbGVyKClcIlxuICAgIFtzaG93TmF2XT1cInNob3dOYXYoKVwiXG4gICAgW3Byb3ZpbmNlRXh0ZW50XT1cInByb3ZpbmNlRXh0ZW50KClcIlxuICAvPlxuICA8Z2VvLW1hcC1zbmFwc2hvdFxuICAgIGNsYXNzPVwiZ2VvLW1hcC1zaGVsbF9fc25hcHNob3QtYnJpZGdlXCJcbiAgICBbY29udHJvbGxlcl09XCJjb250cm9sbGVyKClcIlxuICAgIChjYXB0dXJlZCk9XCJzbmFwc2hvdENhcHR1cmVkLmVtaXQoKVwiXG4gICAgKGNhcHR1cmVFcnJvcik9XCJzbmFwc2hvdEVycm9yLmVtaXQoJGV2ZW50KVwiXG4gIC8+XG4gIDxnZW8tbWFwLWxvY2F0ZVxuICAgIGNsYXNzPVwiZ2VvLW1hcC1zaGVsbF9fbG9jYXRlLWJyaWRnZVwiXG4gICAgW2NvbnRyb2xsZXJdPVwiY29udHJvbGxlcigpXCJcbiAgICAobG9jYXRlZCk9XCJsb2NhdGVkLmVtaXQoJGV2ZW50KVwiXG4gICAgKGRlbmllZCk9XCJsb2NhdGVEZW5pZWQuZW1pdCgpXCJcbiAgICAobG9jYXRlRXJyb3IpPVwibG9jYXRlRXJyb3IuZW1pdCgkZXZlbnQpXCJcbiAgLz5cblxuICA8ZGl2IGNsYXNzPVwiZ2VvLW1hcC1zaGVsbF9fdG9wLXJpZ2h0XCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2dlb01hcFNoZWxsVG9wUmlnaHRdXCIgLz5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImdlby1tYXAtc2hlbGxfX2JvdHRvbS1yaWdodFwiPlxuICAgIDxnZW8tbWFwLWJhc2VtYXAtc3dpdGNoZXJcbiAgICAgIFtvcHRpb25zXT1cImJhc2VtYXBPcHRpb25zKClcIlxuICAgICAgWyhzZWxlY3RlZElkKV09XCJiYXNlbWFwSWRcIlxuICAgICAgKGJhc2VtYXBDaGFuZ2UpPVwib25CYXNlbWFwQ2hhbmdlKCRldmVudClcIlxuICAgIC8+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJnZW8tbWFwLXNoZWxsX19zdGF0dXNcIj5cbiAgICBAaWYgKGxvY2F0aW9uTGFiZWwoKSkge1xuICAgICAgPGdlby1tYXAtbG9jYXRpb24tY2hpcCBbbGFiZWxdPVwibG9jYXRpb25MYWJlbCgpXCIgLz5cbiAgICB9XG4gICAgPGdlby1tYXAtbWVhc3VyZVxuICAgICAgW2NvbnRyb2xsZXJdPVwiY29udHJvbGxlcigpXCJcbiAgICAgIFsobW9kZSldPVwibWVhc3VyZU1vZGVcIlxuICAgIC8+XG4gICAgQGlmIChtZWFzdXJlTW9kZSgpICE9PSAnbm9uZScgJiYgbWVhc3VyZURpc2NsYWltZXIoKSkge1xuICAgICAgPHAgY2xhc3M9XCJnZW8tbWFwLXNoZWxsX19tZWFzdXJlLWRpc2NsYWltZXJcIiByb2xlPVwibm90ZVwiPlxuICAgICAgICB7eyBtZWFzdXJlRGlzY2xhaW1lcigpIH19XG4gICAgICA8L3A+XG4gICAgfVxuICA8L2Rpdj5cblxuICA8Z2VvLW1hcC1zd2lwZVxuICAgIFtjb250cm9sbGVyXT1cImNvbnRyb2xsZXIoKVwiXG4gICAgWyhhY3RpdmUpXT1cInN3aXBlQWN0aXZlXCJcbiAgLz5cblxuICA8Z2VvLW1hcC1oZWxwIFsob3BlbildPVwiaGVscE9wZW5cIiAvPlxuPC9kaXY+XG4iXX0=
599
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLW1hcC1zaGVsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nZW8tdWkvc3JjL2xpYi9maWdtYS9nZW8tbWFwL2Nocm9tZS9nZW8tbWFwLXNoZWxsL2dlby1tYXAtc2hlbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLW1hcC9jaHJvbWUvZ2VvLW1hcC1zaGVsbC9nZW8tbWFwLXNoZWxsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLCtCQUErQixFQUMvQixzQkFBc0IsRUFDdEIsb0NBQW9DLEVBQ3BDLCtCQUErQixFQUMvQixvQkFBb0IsRUFDcEIsd0JBQXdCLEVBQ3hCLHlCQUF5QixFQUN6QiwwQkFBMEIsRUFDMUIsNEJBQTRCLEVBQzVCLHdCQUF3QixFQUN4Qix1QkFBdUIsR0FDeEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNwRyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUNoSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUN2RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNuRixP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LDBCQUEwQixzUUFDMUIsMEJBQTBCLDBNQUMxQiwyQkFBMkIsNkZBQzNCLDhCQUE4Qiw0S0FDOUIsaUJBQWlCOzs0RkFXUixvQkFBb0I7a0JBN0JoQyxTQUFTOytCQUNFLGVBQWUsY0FDYixJQUFJLFdBQ1A7d0JBQ1AsZUFBZTt3QkFDZixzQkFBc0I7d0JBQ3RCLG1CQUFtQjt3QkFDbkIsdUJBQXVCO3dCQUN2QixzQkFBc0I7d0JBQ3RCLDJCQUEyQjt3QkFDM0IscUJBQXFCO3dCQUNyQixtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIscUJBQXFCO3dCQUNyQiwwQkFBMEI7d0JBQzFCLDBCQUEwQjt3QkFDMUIsMkJBQTJCO3dCQUMzQiw4QkFBOEI7d0JBQzlCLGlCQUFpQjtxQkFDbEIsbUJBR2dCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksUUFDL0I7d0JBQ0osS0FBSyxFQUFFLG9CQUFvQjt3QkFDM0IsZ0JBQWdCLEVBQUUsVUFBVTtxQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgRGVzdHJveVJlZixcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBtb2RlbCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIHVudHJhY2tlZCxcbiAgdmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBHRU9fTUFQX0RFRkFVTFRfQkFTRU1BUF9PUFRJT05TLFxuICBHRU9fTUFQX0RFRkFVTFRfQ0VOVEVSLFxuICBHRU9fTUFQX0RFRkFVTFRfUFJPVklOQ0VfRVhURU5UXzQzMjYsXG4gIEdFT19NQVBfREVGQVVMVF9UT09MQkFSX0FDVElPTlMsXG4gIEdFT19NQVBfREVGQVVMVF9aT09NLFxuICBHRU9fTUFQX0RFTU9fQURNSU5fTk9ERVMsXG4gIEdFT19NQVBfREVNT19MRUdFTkRfSVRFTVMsXG4gIEdFT19NQVBfREVNT19QQVJDRUxfREVUQUlMLFxuICBHRU9fTUFQX0RFTU9fVEhFTUFUSUNfTEFZRVJTLFxuICBHRU9fTUFQX1RSQUZGSUNfTEFZRVJfSUQsXG4gIEdFT19NQVBfVFJBRkZJQ19PVkVSTEFZLFxufSBmcm9tICcuLi8uLi9nZW8tbWFwLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBHZW9NYXBBZG1pbkZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4uL2dlby1tYXAtYWRtaW4tZmlsdGVyL2dlby1tYXAtYWRtaW4tZmlsdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHZW9NYXBCYXNlbWFwU3dpdGNoZXJDb21wb25lbnQgfSBmcm9tICcuLi9nZW8tbWFwLWJhc2VtYXAtc3dpdGNoZXIvZ2VvLW1hcC1iYXNlbWFwLXN3aXRjaGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHZW9NYXBIZWxwQ29tcG9uZW50IH0gZnJvbSAnLi4vZ2VvLW1hcC1oZWxwL2dlby1tYXAtaGVscC5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2VvTWFwTGF5ZXJzRHJhd2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vZ2VvLW1hcC1sYXllcnMtZHJhd2VyL2dlby1tYXAtbGF5ZXJzLWRyYXdlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2VvTWFwTGVnZW5kQ29tcG9uZW50IH0gZnJvbSAnLi4vZ2VvLW1hcC1sZWdlbmQvZ2VvLW1hcC1sZWdlbmQuY29tcG9uZW50JztcbmltcG9ydCB7IEdlb01hcExvY2F0aW9uQ2hpcENvbXBvbmVudCB9IGZyb20gJy4uL2dlby1tYXAtbG9jYXRpb24tY2hpcC9nZW8tbWFwLWxvY2F0aW9uLWNoaXAuY29tcG9uZW50JztcbmltcG9ydCB7IEdlb01hcE1lYXN1cmVDb21wb25lbnQgfSBmcm9tICcuLi9nZW8tbWFwLW1lYXN1cmUvZ2VvLW1hcC1tZWFzdXJlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHZW9NYXBQYXJjZWxQb3B1cENvbXBvbmVudCB9IGZyb20gJy4uL2dlby1tYXAtcGFyY2VsLXBvcHVwL2dlby1tYXAtcGFyY2VsLXBvcHVwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHZW9NYXBTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuLi9nZW8tbWFwLXNlYXJjaC9nZW8tbWFwLXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2VvTWFwU25hcHNob3RDb21wb25lbnQgfSBmcm9tICcuLi9nZW8tbWFwLXNuYXBzaG90L2dlby1tYXAtc25hcHNob3QuY29tcG9uZW50JztcbmltcG9ydCB7IEdlb01hcFN3aXBlQ29tcG9uZW50IH0gZnJvbSAnLi4vZ2VvLW1hcC1zd2lwZS9nZW8tbWFwLXN3aXBlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHZW9NYXBUb29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vZ2VvLW1hcC10b29sYmFyL2dlby1tYXAtdG9vbGJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2VvTWFwWm9vbUNvbXBvbmVudCB9IGZyb20gJy4uL2dlby1tYXAtem9vbS9nZW8tbWFwLXpvb20uY29tcG9uZW50JztcbmltcG9ydCB7IEdlb01hcENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2dlby1tYXAuY29tcG9uZW50JztcbmltcG9ydCB7IEdlb01hcENvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9nZW8tbWFwLmNvbnRyb2xsZXInO1xuaW1wb3J0IHsgR2VvQWxlcnRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9nZW8tYWxlcnQvZ2VvLWFsZXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgdHlwZSB7IEdlb1RyZWVOb2RlIH0gZnJvbSAnLi4vLi4vLi4vZ2VvLXRyZWUvZ2VvLXRyZWUudHlwZXMnO1xuaW1wb3J0IHsgcnVuR2VvTWFwTG9jYXRlIH0gZnJvbSAnLi4vZ2VvLW1hcC1sb2NhdGUvZ2VvLW1hcC1sb2NhdGUudXRpbCc7XG5pbXBvcnQgdHlwZSB7XG4gIEdlb01hcEJhc2VtYXAsXG4gIEdlb01hcEJhc2VtYXBPcHRpb24sXG4gIEdlb01hcENsaWNrRXZlbnQsXG4gIEdlb01hcExheWVyQ29uZmlnLFxuICBHZW9NYXBMZWdlbmRJdGVtLFxuICBHZW9NYXBMb2NhdGVFcnJvclJlYXNvbixcbiAgR2VvTWFwTWVhc3VyZU1vZGUsXG4gIEdlb01hcFBhcmNlbEF1ZGllbmNlLFxuICBHZW9NYXBQYXJjZWxEZXRhaWwsXG4gIEdlb01hcFNlYXJjaFF1ZXJ5LFxuICBHZW9NYXBTZWFyY2hSZXN1bHRJdGVtLFxuICBHZW9NYXBUb29sYmFyQWN0aW9uLFxufSBmcm9tICcuLi8uLi9nZW8tbWFwLnR5cGVzJztcblxuLyoqXG4gKiBNYXAgdmlld3BvcnQgKyBwb3J0YWwgY2hyb21lICh0b29sYmFyLCBsYXllcnMgZHJhd2VyLCBsZWdlbmQsIGhlbHAsIHN3aXBlLCDigKYpLlxuICpcbiAqIEBzdW1tYXJ5IENvbXBvc2VkIG1hcCBzaGVsbCB3aXRoIGNocm9tZSB0b29scyBmb3IgU3Rvcnlib29rIC8gcG9ydGFsLlxuICogQHdoZW5Ub1VzZSBQdWJsaWMgbWFwIHBhZ2UgY2hyb21lIChj4buVbmcgY8O0bmcga2hhaSkuXG4gKiBAZG9Ob3RVc2VXaGVuIE5lZWQgb25seSB0aGUgcmF3IE9MIGhvc3Qg4oCUIHVzZSBnZW8tbWFwLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnZW8tbWFwLXNoZWxsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEdlb01hcENvbXBvbmVudCxcbiAgICBHZW9NYXBUb29sYmFyQ29tcG9uZW50LFxuICAgIEdlb01hcFpvb21Db21wb25lbnQsXG4gICAgR2VvTWFwU25hcHNob3RDb21wb25lbnQsXG4gICAgR2VvTWFwTWVhc3VyZUNvbXBvbmVudCxcbiAgICBHZW9NYXBMYXllcnNEcmF3ZXJDb21wb25lbnQsXG4gICAgR2VvTWFwTGVnZW5kQ29tcG9uZW50LFxuICAgIEdlb01hcEhlbHBDb21wb25lbnQsXG4gICAgR2VvTWFwU3dpcGVDb21wb25lbnQsXG4gICAgR2VvTWFwU2VhcmNoQ29tcG9uZW50LFxuICAgIEdlb01hcEFkbWluRmlsdGVyQ29tcG9uZW50LFxuICAgIEdlb01hcFBhcmNlbFBvcHVwQ29tcG9uZW50LFxuICAgIEdlb01hcExvY2F0aW9uQ2hpcENvbXBvbmVudCxcbiAgICBHZW9NYXBCYXNlbWFwU3dpdGNoZXJDb21wb25lbnQsXG4gICAgR2VvQWxlcnRDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW8tbWFwLXNoZWxsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2dlby1tYXAtc2hlbGwuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZ2VvLW1hcC1zaGVsbC1ob3N0JyxcbiAgICAnW3N0eWxlLmhlaWdodF0nOiAnaGVpZ2h0KCknLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBHZW9NYXBTaGVsbENvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzbmFwc2hvdFJlZiA9IHZpZXdDaGlsZChHZW9NYXBTbmFwc2hvdENvbXBvbmVudCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgem9vbVJlZiA9IHZpZXdDaGlsZChHZW9NYXBab29tQ29tcG9uZW50KTtcblxuICByZWFkb25seSBjZW50ZXIgPSBpbnB1dDxudW1iZXJbXT4oWy4uLkdFT19NQVBfREVGQVVMVF9DRU5URVJdKTtcbiAgcmVhZG9ubHkgem9vbSA9IGlucHV0KEdFT19NQVBfREVGQVVMVF9aT09NKTtcbiAgcmVhZG9ubHkgaGVpZ2h0ID0gaW5wdXQoJzU2MHB4Jyk7XG4gIHJlYWRvbmx5IHNob3dNb3VzZVBvc2l0aW9uID0gaW5wdXQoZmFsc2UpO1xuICByZWFkb25seSBiYXNlbWFwT3B0aW9ucyA9IGlucHV0PEdlb01hcEJhc2VtYXBPcHRpb25bXT4oXG4gICAgR0VPX01BUF9ERUZBVUxUX0JBU0VNQVBfT1BUSU9OUyxcbiAgKTtcbiAgcmVhZG9ubHkgdG9vbGJhckFjdGlvbnMgPSBpbnB1dDxHZW9NYXBUb29sYmFyQWN0aW9uW10+KFxuICAgIEdFT19NQVBfREVGQVVMVF9UT09MQkFSX0FDVElPTlMsXG4gICk7XG4gIC8qKiBFeHRyYSBvdmVybGF5cyBtZXJnZWQgYWZ0ZXIgZGVtbyB0aGVtYXRpYyArIHRyYWZmaWMuICovXG4gIHJlYWRvbmx5IGxheWVycyA9IGlucHV0PEdlb01hcExheWVyQ29uZmlnW10+KFtdKTtcbiAgcmVhZG9ubHkgbGVnZW5kSXRlbXMgPSBpbnB1dDxHZW9NYXBMZWdlbmRJdGVtW10+KEdFT19NQVBfREVNT19MRUdFTkRfSVRFTVMpO1xuICAvKiogSG9zdCBhcHAgc2V0cyB0cnVlIHdoZW4gdGhlIGxlZ2VuZCBjYXRhbG9nIChsb+G6oWkgxJHhuqV0L2vDvSBoaeG7h3UvbcOgdSkgZmFpbGVkIHRvIGxvYWQuICovXG4gIHJlYWRvbmx5IGxlZ2VuZENhdGFsb2dNaXNzaW5nID0gaW5wdXQoZmFsc2UpO1xuICByZWFkb25seSBzaG93TmF2ID0gaW5wdXQodHJ1ZSk7XG4gIHJlYWRvbmx5IGluY2x1ZGVEZW1vTGF5ZXJzID0gaW5wdXQodHJ1ZSk7XG4gIHJlYWRvbmx5IGFkbWluTm9kZXMgPSBpbnB1dDxHZW9UcmVlTm9kZVtdPihHRU9fTUFQX0RFTU9fQURNSU5fTk9ERVMpO1xuICByZWFkb25seSBsb2NhdGlvbkxhYmVsID0gaW5wdXQoJ1BoxrDhu51uZyAxIOKAlCBUUCDEkMOgIEzhuqF0LCBMw6JtIMSQ4buTbmcnKTtcbiAgcmVhZG9ubHkgcGFyY2VsQXVkaWVuY2UgPSBpbnB1dDxHZW9NYXBQYXJjZWxBdWRpZW5jZT4oJ2NpdGl6ZW4nKTtcbiAgcmVhZG9ubHkgcHJvdmluY2VFeHRlbnQgPSBpbnB1dDxyZWFkb25seSBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXT4oXG4gICAgR0VPX01BUF9ERUZBVUxUX1BST1ZJTkNFX0VYVEVOVF80MzI2LFxuICApO1xuICAvKiogV2hlbiB0cnVlLCBzaGVsbCBzZWVkcyBtb2NrIHNlYXJjaCByZXN1bHRzIChTdG9yeWJvb2sgLyBkZW1vcykuICovXG4gIHJlYWRvbmx5IGRlbW9TZWFyY2ggPSBpbnB1dCh0cnVlKTtcbiAgLyoqXG4gICAqIGBsb2NhdGlvbmAg4oCUIEhvbWUgb3BlbnMgxJBWSEMgZmlsdGVyIChkZWZhdWx0KS5cbiAgICogYGVtaXRgIOKAlCBIb21lIG9ubHkgZW1pdHMgYGFjdGlvbkNsaWNrYCAoZS5nLiBwb3J0YWwgbmF2aWdhdGVzIHRvIGxvZ2luL2Rhc2hib2FyZCkuXG4gICAqL1xuICByZWFkb25seSBob21lTW9kZSA9IGlucHV0PCdsb2NhdGlvbicgfCAnZW1pdCc+KCdsb2NhdGlvbicpO1xuXG4gIHJlYWRvbmx5IGJhc2VtYXBJZCA9IG1vZGVsKCdvc20nKTtcbiAgcmVhZG9ubHkgbWVhc3VyZU1vZGUgPSBtb2RlbDxHZW9NYXBNZWFzdXJlTW9kZT4oJ25vbmUnKTtcbiAgcmVhZG9ubHkgY2hlY2tlZE1hcCA9IG1vZGVsPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+Pih7IHRyYWZmaWM6IGZhbHNlIH0pO1xuICByZWFkb25seSBsYXllcnNPcGVuID0gbW9kZWwoZmFsc2UpO1xuICByZWFkb25seSBsZWdlbmRPcGVuID0gbW9kZWwoZmFsc2UpO1xuICByZWFkb25seSBoZWxwT3BlbiA9IG1vZGVsKGZhbHNlKTtcbiAgcmVhZG9ubHkgc3dpcGVBY3RpdmUgPSBtb2RlbChmYWxzZSk7XG4gIHJlYWRvbmx5IHNlYXJjaE9wZW4gPSBtb2RlbChmYWxzZSk7XG4gIHJlYWRvbmx5IGFkbWluRmlsdGVyT3BlbiA9IG1vZGVsKGZhbHNlKTtcbiAgcmVhZG9ubHkgcGFyY2VsT3BlbiA9IG1vZGVsKGZhbHNlKTtcbiAgcmVhZG9ubHkgbWFuYWdlZExheWVycyA9IG1vZGVsPEdlb01hcExheWVyQ29uZmlnW10+KFtdKTtcbiAgcmVhZG9ubHkgc2VhcmNoUmVzdWx0cyA9IG1vZGVsPEdlb01hcFNlYXJjaFJlc3VsdEl0ZW1bXT4oW10pO1xuICByZWFkb25seSBzZWxlY3RlZFBhcmNlbCA9IG1vZGVsPEdlb01hcFBhcmNlbERldGFpbCB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBhZG1pbkNoZWNrZWRLZXlzID0gbW9kZWw8QXJyYXk8c3RyaW5nIHwgbnVtYmVyPj4oW10pO1xuICByZWFkb25seSBhZG1pbkV4cGFuZGVkS2V5cyA9IG1vZGVsPEFycmF5PHN0cmluZyB8IG51bWJlcj4+KFsnbGFtLWRvbmcnXSk7XG5cbiAgcmVhZG9ubHkgbWFwUmVhZHkgPSBvdXRwdXQ8R2VvTWFwQ29udHJvbGxlcj4oKTtcbiAgcmVhZG9ubHkgbWFwQ2xpY2sgPSBvdXRwdXQ8R2VvTWFwQ2xpY2tFdmVudD4oKTtcbiAgcmVhZG9ubHkgbG9jYXRlZCA9IG91dHB1dDx2b2lkPigpO1xuICByZWFkb25seSBsb2NhdGVEZW5pZWQgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgbG9jYXRlRXJyb3IgPSBvdXRwdXQ8e1xuICAgIHJlYXNvbjogR2VvTWFwTG9jYXRlRXJyb3JSZWFzb247XG4gICAgbWVzc2FnZT86IHN0cmluZztcbiAgfT4oKTtcbiAgcmVhZG9ubHkgYWN0aW9uQ2xpY2sgPSBvdXRwdXQ8R2VvTWFwVG9vbGJhckFjdGlvbj4oKTtcbiAgcmVhZG9ubHkgc2VhcmNoID0gb3V0cHV0PEdlb01hcFNlYXJjaFF1ZXJ5PigpO1xuICByZWFkb25seSBzZWFyY2hSZXNldCA9IG91dHB1dDx2b2lkPigpO1xuICByZWFkb25seSByZXN1bHRTZWxlY3QgPSBvdXRwdXQ8R2VvTWFwU2VhcmNoUmVzdWx0SXRlbT4oKTtcbiAgcmVhZG9ubHkgcGFyY2VsRXhwb3J0ID0gb3V0cHV0PEdlb01hcFBhcmNlbERldGFpbD4oKTtcbiAgcmVhZG9ubHkgYWRtaW5BcHBseSA9IG91dHB1dDxBcnJheTxzdHJpbmcgfCBudW1iZXI+PigpO1xuXG4gIHJlYWRvbmx5IGNvbnRyb2xsZXIgPSBzaWduYWw8R2VvTWFwQ29udHJvbGxlciB8IG51bGw+KG51bGwpO1xuICAvKiogQWN0aXZlIG1hcCBwb2ludGVyIHRvb2wgKGBub25lYCA9IGRlZmF1bHQgYXJyb3cgY3Vyc29yKS4gKi9cbiAgcmVhZG9ubHkgdG9vbE1vZGUgPSBzaWduYWw8J25vbmUnIHwgJ3BhbicgfCAnZGlzdGFuY2UnIHwgJ2FyZWEnPignbm9uZScpO1xuICAvKiogV2hlbiB0cnVlLCBwYXJjZWwgQmFjayByZXR1cm5zIHRvIHNlYXJjaCBwb3BvdmVyLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcmNlbEZyb21TZWFyY2ggPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIHBhbkN1cnNvckJvdW5kID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25QYW5Qb2ludGVyRG93biA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAodGhpcy50b29sTW9kZSgpID09PSAncGFuJykge1xuICAgICAgdGhpcy5zZXRNYXBDdXJzb3IoJ2dyYWJiaW5nJyk7XG4gICAgfVxuICB9O1xuICBwcml2YXRlIHJlYWRvbmx5IG9uUGFuUG9pbnRlclVwID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLnRvb2xNb2RlKCkgPT09ICdwYW4nKSB7XG4gICAgICB0aGlzLnNldE1hcEN1cnNvcignZ3JhYicpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBFbmZvcmNlIGEgc2luZ2xlIGxlZnQgY2hyb21lIHBvcG92ZXIgKHNlYXJjaCAvIMSQVkhDIC8gcGFyY2VsIC8gbGF5ZXJzIC8gbGVnZW5kKS5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoID0gdGhpcy5zZWFyY2hPcGVuKCk7XG4gICAgICBjb25zdCBhZG1pbiA9IHRoaXMuYWRtaW5GaWx0ZXJPcGVuKCk7XG4gICAgICBjb25zdCBwYXJjZWwgPSB0aGlzLnBhcmNlbE9wZW4oKTtcbiAgICAgIGNvbnN0IGxheWVycyA9IHRoaXMubGF5ZXJzT3BlbigpO1xuICAgICAgY29uc3QgbGVnZW5kID0gdGhpcy5sZWdlbmRPcGVuKCk7XG4gICAgICBjb25zdCBvcGVuQ291bnQgPVxuICAgICAgICBOdW1iZXIoc2VhcmNoKSArXG4gICAgICAgIE51bWJlcihhZG1pbikgK1xuICAgICAgICBOdW1iZXIocGFyY2VsKSArXG4gICAgICAgIE51bWJlcihsYXllcnMpICtcbiAgICAgICAgTnVtYmVyKGxlZ2VuZCk7XG4gICAgICBpZiAob3BlbkNvdW50IDw9IDEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgaWYgKHBhcmNlbCkge1xuICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbHNFeGNlcHQoJ3BhcmNlbCcpO1xuICAgICAgICB9IGVsc2UgaWYgKGxheWVycykge1xuICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbHNFeGNlcHQoJ2xheWVycycpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlZ2VuZCkge1xuICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbHNFeGNlcHQoJ2xlZ2VuZCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHNlYXJjaCkge1xuICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbHNFeGNlcHQoJ3NlYXJjaCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbHNFeGNlcHQoJ2FkbWluJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG5cbiAgICAvLyBXaGVuIG1lYXN1cmUgZmluaXNoZXMgLyBjYW5jZWxzLCByZXR1cm4gdG8gaWRsZSArIGRlZmF1bHQgY3Vyc29yLlxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBtb2RlID0gdGhpcy5tZWFzdXJlTW9kZSgpO1xuICAgICAgaWYgKG1vZGUgIT09ICdub25lJykge1xuICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudG9vbE1vZGUuc2V0KG1vZGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgY29uc3QgdG9vbCA9IHRoaXMudG9vbE1vZGUoKTtcbiAgICAgICAgaWYgKHRvb2wgPT09ICdkaXN0YW5jZScgfHwgdG9vbCA9PT0gJ2FyZWEnKSB7XG4gICAgICAgICAgdGhpcy50b29sTW9kZS5zZXQoJ25vbmUnKTtcbiAgICAgICAgICB0aGlzLnNldE1hcEN1cnNvcihudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcblxuICAgIHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gdGhpcy51bmJpbmRQYW5DdXJzb3IoKSk7XG4gIH1cblxuICByZWFkb25seSBiYXNlbWFwID0gY29tcHV0ZWQ8R2VvTWFwQmFzZW1hcD4oKCkgPT4ge1xuICAgIGNvbnN0IGlkID0gdGhpcy5iYXNlbWFwSWQoKTtcbiAgICBjb25zdCBvcHRpb24gPSB0aGlzLmJhc2VtYXBPcHRpb25zKCkuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gaWQpO1xuICAgIHJldHVybiBvcHRpb24/LmJhc2VtYXAgPz8gJ29zbSc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJlc29sdmVkVG9vbGJhckFjdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbW9kZSA9IHRoaXMubWVhc3VyZU1vZGUoKTtcbiAgICBjb25zdCB0b29sID0gdGhpcy50b29sTW9kZSgpO1xuICAgIGNvbnN0IHN3aXBlID0gdGhpcy5zd2lwZUFjdGl2ZSgpO1xuICAgIGNvbnN0IGxheWVyc09wZW4gPSB0aGlzLmxheWVyc09wZW4oKTtcbiAgICBjb25zdCBsZWdlbmRPcGVuID0gdGhpcy5sZWdlbmRPcGVuKCk7XG4gICAgY29uc3Qgc2VhcmNoT3BlbiA9IHRoaXMuc2VhcmNoT3BlbigpO1xuICAgIGNvbnN0IGFkbWluT3BlbiA9IHRoaXMuYWRtaW5GaWx0ZXJPcGVuKCk7XG4gICAgY29uc3QgZnVsbHNjcmVlbiA9IHRoaXMuem9vbVJlZigpPy5pc0Z1bGxzY3JlZW4oKSA/PyBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy50b29sYmFyQWN0aW9ucygpLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICBpZiAoYWN0aW9uLmlkID09PSAnaG9tZScgJiYgdGhpcy5ob21lTW9kZSgpID09PSAnZW1pdCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5hY3Rpb24sXG4gICAgICAgICAgbGFiZWw6ICdUcmFuZyBjaOG7pycsXG4gICAgICAgICAgdG9vbHRpcDogJ1bhu4EgdHJhbmcgY2jhu6cgLyDEkcSDbmcgbmjhuq1wJyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChhY3Rpb24uaWQgPT09ICdwYW4nKSB7XG4gICAgICAgIHJldHVybiB7IC4uLmFjdGlvbiwgYWN0aXZlOiB0b29sID09PSAncGFuJyAmJiBtb2RlID09PSAnbm9uZScgfTtcbiAgICAgIH1cbiAgICAgIGlmIChhY3Rpb24uaWQgPT09ICdtZWFzdXJlLWRpc3RhbmNlJykge1xuICAgICAgICByZXR1cm4geyAuLi5hY3Rpb24sIGFjdGl2ZTogbW9kZSA9PT0gJ2Rpc3RhbmNlJyB9O1xuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbi5pZCA9PT0gJ21lYXN1cmUtYXJlYScpIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uYWN0aW9uLCBhY3RpdmU6IG1vZGUgPT09ICdhcmVhJyB9O1xuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbi5pZCA9PT0gJ3N3aXBlJykge1xuICAgICAgICByZXR1cm4geyAuLi5hY3Rpb24sIGFjdGl2ZTogc3dpcGUgfTtcbiAgICAgIH1cbiAgICAgIGlmIChhY3Rpb24uaWQgPT09ICdsYXllcnMnKSB7XG4gICAgICAgIHJldHVybiB7IC4uLmFjdGlvbiwgYWN0aXZlOiBsYXllcnNPcGVuIH07XG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uLmlkID09PSAnbGVnZW5kJykge1xuICAgICAgICByZXR1cm4geyAuLi5hY3Rpb24sIGFjdGl2ZTogbGVnZW5kT3BlbiB9O1xuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbi5pZCA9PT0gJ3NlYXJjaCcpIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uYWN0aW9uLCBhY3RpdmU6IHNlYXJjaE9wZW4gfTtcbiAgICAgIH1cbiAgICAgIGlmIChhY3Rpb24uaWQgPT09ICdhZG1pbi1maWx0ZXInKSB7XG4gICAgICAgIHJldHVybiB7IC4uLmFjdGlvbiwgYWN0aXZlOiBhZG1pbk9wZW4gfTtcbiAgICAgIH1cbiAgICAgIGlmIChhY3Rpb24uaWQgPT09ICdmdWxsc2NyZWVuJykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmFjdGlvbixcbiAgICAgICAgICBhY3RpdmU6IGZ1bGxzY3JlZW4sXG4gICAgICAgICAgaWNvbjogZnVsbHNjcmVlbiA/ICdmdWxsc2NyZWVuLWV4aXQnIDogJ2Z1bGxzY3JlZW4nLFxuICAgICAgICAgIGljb25TcmM6IGZ1bGxzY3JlZW4gPyB1bmRlZmluZWQgOiBhY3Rpb24uaWNvblNyYyxcbiAgICAgICAgICB0b29sdGlwOiBmdWxsc2NyZWVuID8gJ1Rob8OhdCB0b8OgbiBtw6BuIGjDrG5oJyA6ICdYZW0gdG/DoG4gYuG6o24gxJHhu5MnLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcmVzb2x2ZWRMYXllcnMgPSBjb21wdXRlZDxHZW9NYXBMYXllckNvbmZpZ1tdPigoKSA9PiB7XG4gICAgY29uc3QgdHJhZmZpY09uID0gISF0aGlzLmNoZWNrZWRNYXAoKVsndHJhZmZpYyddO1xuICAgIGNvbnN0IHRyYWZmaWM6IEdlb01hcExheWVyQ29uZmlnID0ge1xuICAgICAgLi4uR0VPX01BUF9UUkFGRklDX09WRVJMQVksXG4gICAgICB2aXNpYmxlOiB0cmFmZmljT24sXG4gICAgfTtcbiAgICBjb25zdCBtYW5hZ2VkID0gdGhpcy5tYW5hZ2VkTGF5ZXJzKCk7XG4gICAgaWYgKG1hbmFnZWQubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gWy4uLm1hbmFnZWQsIHRyYWZmaWNdO1xuICAgIH1cbiAgICBjb25zdCBkZW1vID0gdGhpcy5pbmNsdWRlRGVtb0xheWVycygpID8gR0VPX01BUF9ERU1PX1RIRU1BVElDX0xBWUVSUyA6IFtdO1xuICAgIHJldHVybiBbLi4uZGVtbywgdHJhZmZpYywgLi4udGhpcy5sYXllcnMoKV07XG4gIH0pO1xuXG4gIG9uTWFwUmVhZHkoY3RybDogR2VvTWFwQ29udHJvbGxlcik6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZXQoY3RybCk7XG4gICAgaWYgKCF0aGlzLm1hbmFnZWRMYXllcnMoKS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHNlZWQgPSB0aGlzLmluY2x1ZGVEZW1vTGF5ZXJzKClcbiAgICAgICAgPyBHRU9fTUFQX0RFTU9fVEhFTUFUSUNfTEFZRVJTLm1hcCgobGF5ZXIpID0+ICh7IC4uLmxheWVyIH0pKVxuICAgICAgICA6IHRoaXMubGF5ZXJzKCkubWFwKChsYXllcikgPT4gKHsgLi4ubGF5ZXIgfSkpO1xuICAgICAgdGhpcy5tYW5hZ2VkTGF5ZXJzLnNldChzZWVkKTtcbiAgICB9XG4gICAgdGhpcy5iaW5kUGFuQ3Vyc29yKGN0cmwpO1xuICAgIGlmICh0aGlzLnRvb2xNb2RlKCkgPT09ICdwYW4nKSB7XG4gICAgICB0aGlzLmFwcGx5UGFuQ3Vyc29yKCk7XG4gICAgfVxuICAgIHRoaXMubWFwUmVhZHkuZW1pdChjdHJsKTtcbiAgfVxuXG4gIG9uTWFwQ2xpY2soZXZlbnQ6IEdlb01hcENsaWNrRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnBhcmNlbEZyb21TZWFyY2guc2V0KGZhbHNlKTtcbiAgICB0aGlzLm1hcENsaWNrLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25CYXNlbWFwQ2hhbmdlKGJhc2VtYXA6IEdlb01hcEJhc2VtYXApOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIoKT8uc2V0QmFzZW1hcChiYXNlbWFwKTtcbiAgfVxuXG4gIG9uVG9vbGJhckFjdGlvbihhY3Rpb246IEdlb01hcFRvb2xiYXJBY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLmFjdGlvbkNsaWNrLmVtaXQoYWN0aW9uKTtcbiAgICBzd2l0Y2ggKGFjdGlvbi5pZCkge1xuICAgICAgY2FzZSAnaG9tZSc6XG4gICAgICAgIGlmICh0aGlzLmhvbWVNb2RlKCkgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgICAgICBpZiAodGhpcy5hZG1pbkZpbHRlck9wZW4oKSkge1xuICAgICAgICAgICAgdGhpcy5hZG1pbkZpbHRlck9wZW4uc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuem9vbVJlZigpPy5maXRQcm92aW5jZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5QYW5lbCgnYWRtaW4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhZG1pbi1maWx0ZXInOlxuICAgICAgICBpZiAodGhpcy5hZG1pbkZpbHRlck9wZW4oKSkge1xuICAgICAgICAgIHRoaXMuYWRtaW5GaWx0ZXJPcGVuLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy56b29tUmVmKCk/LmZpdFByb3ZpbmNlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vcGVuUGFuZWwoJ2FkbWluJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdmaXQtcHJvdmluY2UnOlxuICAgICAgICB0aGlzLnpvb21SZWYoKT8uZml0UHJvdmluY2UoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsb2NhdGUnOlxuICAgICAgICB0aGlzLnRyaWdnZXJMb2NhdGUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwYW4nOlxuICAgICAgICBpZiAodGhpcy50b29sTW9kZSgpID09PSAncGFuJykge1xuICAgICAgICAgIHRoaXMuZXhpdFRvb2xNb2RlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lbnRlclBhbk1vZGUoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3pvb20taW4nOlxuICAgICAgICB0aGlzLnpvb21SZWYoKT8uem9vbUluKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnem9vbS1vdXQnOlxuICAgICAgICB0aGlzLnpvb21SZWYoKT8uem9vbU91dCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Z1bGxzY3JlZW4nOlxuICAgICAgICB0aGlzLnpvb21SZWYoKT8udG9nZ2xlRnVsbHNjcmVlbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NlYXJjaCc6XG4gICAgICAgIGlmICh0aGlzLnNlYXJjaE9wZW4oKSkge1xuICAgICAgICAgIHRoaXMuc2VhcmNoT3Blbi5zZXQoZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub3BlblBhbmVsKCdzZWFyY2gnKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xheWVycyc6XG4gICAgICAgIGlmICh0aGlzLmxheWVyc09wZW4oKSkge1xuICAgICAgICAgIHRoaXMubGF5ZXJzT3Blbi5zZXQoZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub3BlblBhbmVsKCdsYXllcnMnKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xlZ2VuZCc6XG4gICAgICAgIGlmICh0aGlzLmxlZ2VuZE9wZW4oKSkge1xuICAgICAgICAgIHRoaXMubGVnZW5kT3Blbi5zZXQoZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub3BlblBhbmVsKCdsZWdlbmQnKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2hlbHAnOlxuICAgICAgICB0aGlzLmhlbHBPcGVuLnNldCh0cnVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzd2lwZSc6XG4gICAgICAgIHRoaXMubWVhc3VyZU1vZGUuc2V0KCdub25lJyk7XG4gICAgICAgIHRoaXMudG9vbE1vZGUuc2V0KCdub25lJyk7XG4gICAgICAgIHRoaXMuem9vbVJlZigpPy5yZXNldEludGVyYWN0aW9uTW9kZSgpO1xuICAgICAgICB0aGlzLnNldE1hcEN1cnNvcihudWxsKTtcbiAgICAgICAgdGhpcy5zd2lwZUFjdGl2ZS51cGRhdGUoKHYpID0+ICF2KTtcbiAgICAgICAgaWYgKHRoaXMuc3dpcGVBY3RpdmUoKSkge1xuICAgICAgICAgIHRoaXMuZW5zdXJlU3dpcGVPdmVybGF5VmlzaWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWVhc3VyZS1kaXN0YW5jZSc6XG4gICAgICAgIHRoaXMuc3dpcGVBY3RpdmUuc2V0KGZhbHNlKTtcbiAgICAgICAgdGhpcy56b29tUmVmKCk/LnJlc2V0SW50ZXJhY3Rpb25Nb2RlKCk7XG4gICAgICAgIGlmICh0aGlzLm1lYXN1cmVNb2RlKCkgPT09ICdkaXN0YW5jZScpIHtcbiAgICAgICAgICB0aGlzLmV4aXRUb29sTW9kZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudG9vbE1vZGUuc2V0KCdkaXN0YW5jZScpO1xuICAgICAgICAgIHRoaXMubWVhc3VyZU1vZGUuc2V0KCdkaXN0YW5jZScpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWVhc3VyZS1hcmVhJzpcbiAgICAgICAgdGhpcy5zd2lwZUFjdGl2ZS5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLnpvb21SZWYoKT8ucmVzZXRJbnRlcmFjdGlvbk1vZGUoKTtcbiAgICAgICAgaWYgKHRoaXMubWVhc3VyZU1vZGUoKSA9PT0gJ2FyZWEnKSB7XG4gICAgICAgICAgdGhpcy5leGl0VG9vbE1vZGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnRvb2xNb2RlLnNldCgnYXJlYScpO1xuICAgICAgICAgIHRoaXMubWVhc3VyZU1vZGUuc2V0KCdhcmVhJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzbmFwc2hvdCc6XG4gICAgICAgIHRoaXMuc25hcHNob3RSZWYoKT8uY2FwdHVyZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uVG9vbGJhclRvZ2dsZShldmVudDoge1xuICAgIGFjdGlvbjogR2VvTWFwVG9vbGJhckFjdGlvbjtcbiAgICBjaGVja2VkOiBib29sZWFuO1xuICB9KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmFjdGlvbi5pZCA9PT0gJ3RyYWZmaWMnKSB7XG4gICAgICB0aGlzLmNvbnRyb2xsZXIoKT8uc2V0TGF5ZXJWaXNpYmlsaXR5KFxuICAgICAgICBHRU9fTUFQX1RSQUZGSUNfTEFZRVJfSUQsXG4gICAgICAgIGV2ZW50LmNoZWNrZWQsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VhcmNoKHF1ZXJ5OiBHZW9NYXBTZWFyY2hRdWVyeSk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoLmVtaXQocXVlcnkpO1xuICAgIGlmICghdGhpcy5kZW1vU2VhcmNoKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGVtbyA9IHRoaXMuYnVpbGREZW1vU2VhcmNoUmVzdWx0cyhxdWVyeSk7XG4gICAgdGhpcy5zZWFyY2hSZXN1bHRzLnNldChkZW1vKTtcbiAgICBjb25zdCBnZW9qc29uQ29sbGVjdGlvbiA9IHtcbiAgICAgIHR5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbicsXG4gICAgICBmZWF0dXJlczogZGVtb1xuICAgICAgICAubWFwKChpdGVtKSA9PiBpdGVtLmdlb2pzb24pXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIG9iamVjdCA9PiAhIWl0ZW0pLFxuICAgIH07XG4gICAgaWYgKGdlb2pzb25Db2xsZWN0aW9uLmZlYXR1cmVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5jb250cm9sbGVyKCk/LnNldEhpZ2hsaWdodEZyb21HZW9Kc29uKGdlb2pzb25Db2xsZWN0aW9uKTtcbiAgICB9XG4gIH1cblxuICBvblNlYXJjaFJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoUmVzdWx0cy5zZXQoW10pO1xuICAgIHRoaXMuc2VsZWN0ZWRQYXJjZWwuc2V0KG51bGwpO1xuICAgIHRoaXMucGFyY2VsT3Blbi5zZXQoZmFsc2UpO1xuICAgIHRoaXMuY29udHJvbGxlcigpPy5jbGVhckhpZ2hsaWdodCgpO1xuICAgIHRoaXMuc2VhcmNoUmVzZXQuZW1pdCgpO1xuICB9XG5cbiAgb25QYXJjZWxDbG9zZWQoKTogdm9pZCB7XG4gICAgdGhpcy5wYXJjZWxGcm9tU2VhcmNoLnNldChmYWxzZSk7XG4gICAgdGhpcy5zZWxlY3RlZFBhcmNlbC5zZXQobnVsbCk7XG4gICAgdGhpcy5jb250cm9sbGVyKCk/LmNsZWFySGlnaGxpZ2h0KCk7XG4gIH1cblxuICBvblBhcmNlbEJhY2soKTogdm9pZCB7XG4gICAgY29uc3QgZnJvbVNlYXJjaCA9IHRoaXMucGFyY2VsRnJvbVNlYXJjaCgpO1xuICAgIHRoaXMucGFyY2VsT3Blbi5zZXQoZmFsc2UpO1xuICAgIGlmIChmcm9tU2VhcmNoKSB7XG4gICAgICB0aGlzLnBhcmNlbEZyb21TZWFyY2guc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMub3BlblBhbmVsKCdzZWFyY2gnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFBhcmNlbC5zZXQobnVsbCk7XG4gICAgdGhpcy5jb250cm9sbGVyKCk/LmNsZWFySGlnaGxpZ2h0KCk7XG4gIH1cblxuICBvblJlc3VsdFNlbGVjdChpdGVtOiBHZW9NYXBTZWFyY2hSZXN1bHRJdGVtKTogdm9pZCB7XG4gICAgdGhpcy5yZXN1bHRTZWxlY3QuZW1pdChpdGVtKTtcbiAgICBpZiAoaXRlbS5nZW9qc29uKSB7XG4gICAgICB0aGlzLmNvbnRyb2xsZXIoKT8uc2V0SGlnaGxpZ2h0RnJvbUdlb0pzb24oaXRlbS5nZW9qc29uKTtcbiAgICB9IGVsc2UgaWYgKGl0ZW0uZXh0ZW50NDMyNikge1xuICAgICAgdGhpcy5jb250cm9sbGVyKCk/LmZpdExvbkxhdEV4dGVudChpdGVtLmV4dGVudDQzMjYpO1xuICAgIH1cbiAgICBpZiAoaXRlbS5wYXJjZWwpIHtcbiAgICAgIHRoaXMucGFyY2VsRnJvbVNlYXJjaC5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLnNlbGVjdGVkUGFyY2VsLnNldChpdGVtLnBhcmNlbCk7XG4gICAgICB0aGlzLm9wZW5QYW5lbCgncGFyY2VsJyk7XG4gICAgfVxuICB9XG5cbiAgb25BZG1pbkFwcGx5KGtleXM6IEFycmF5PHN0cmluZyB8IG51bWJlcj4pOiB2b2lkIHtcbiAgICB0aGlzLmFkbWluQXBwbHkuZW1pdChrZXlzKTtcbiAgICAvLyBEZW1vOiBmaXQgYSBzYW1wbGUgd2FyZCBiYm94IHdoZW4gYSBsZWFmIGlzIHNlbGVjdGVkLlxuICAgIGlmICh0aGlzLmRlbW9TZWFyY2goKSAmJiBrZXlzLnNvbWUoKGtleSkgPT4gU3RyaW5nKGtleSkuc3RhcnRzV2l0aCgneGEtJykpKSB7XG4gICAgICB0aGlzLmNvbnRyb2xsZXIoKT8uZml0TG9uTGF0RXh0ZW50KFsxMDguNDIsIDExLjkyLCAxMDguNSwgMTEuOThdLCB7XG4gICAgICAgIG1heFpvb206IDE0LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25GaXRQcm92aW5jZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIoKT8uZml0UHJvdmluY2UodGhpcy5wcm92aW5jZUV4dGVudCgpKTtcbiAgfVxuXG4gIG9uQWRtaW5DbG9zZWQoKTogdm9pZCB7XG4gICAgdGhpcy56b29tUmVmKCk/LmZpdFByb3ZpbmNlKCk7XG4gIH1cblxuICAvKiogT3BlbiBvbmUgbGVmdCBjaHJvbWUgcG9wb3ZlcjsgY2xvc2UgdGhlIG90aGVycyB0byBhdm9pZCBzdGFja2VkIHNjcm9sbC4gKi9cbiAgcHJpdmF0ZSBvcGVuUGFuZWwoXG4gICAgcGFuZWw6ICdzZWFyY2gnIHwgJ2FkbWluJyB8ICdwYXJjZWwnIHwgJ2xheWVycycgfCAnbGVnZW5kJyxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZVBhbmVsc0V4Y2VwdChwYW5lbCk7XG4gICAgaWYgKHBhbmVsID09PSAnc2VhcmNoJykge1xuICAgICAgdGhpcy5zZWFyY2hPcGVuLnNldCh0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHBhbmVsID09PSAnYWRtaW4nKSB7XG4gICAgICB0aGlzLmFkbWluRmlsdGVyT3Blbi5zZXQodHJ1ZSk7XG4gICAgfSBlbHNlIGlmIChwYW5lbCA9PT0gJ3BhcmNlbCcpIHtcbiAgICAgIHRoaXMucGFyY2VsT3Blbi5zZXQodHJ1ZSk7XG4gICAgfSBlbHNlIGlmIChwYW5lbCA9PT0gJ2xheWVycycpIHtcbiAgICAgIHRoaXMubGF5ZXJzT3Blbi5zZXQodHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVnZW5kT3Blbi5zZXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZVBhbmVsc0V4Y2VwdChcbiAgICBrZWVwOiAnc2VhcmNoJyB8ICdhZG1pbicgfCAncGFyY2VsJyB8ICdsYXllcnMnIHwgJ2xlZ2VuZCcsXG4gICk6IHZvaWQge1xuICAgIGlmIChrZWVwICE9PSAnc2VhcmNoJyAmJiB0aGlzLnNlYXJjaE9wZW4oKSkge1xuICAgICAgdGhpcy5zZWFyY2hPcGVuLnNldChmYWxzZSk7XG4gICAgfVxuICAgIGlmIChrZWVwICE9PSAnYWRtaW4nICYmIHRoaXMuYWRtaW5GaWx0ZXJPcGVuKCkpIHtcbiAgICAgIHRoaXMuYWRtaW5GaWx0ZXJPcGVuLnNldChmYWxzZSk7XG4gICAgfVxuICAgIGlmIChrZWVwICE9PSAncGFyY2VsJyAmJiB0aGlzLnBhcmNlbE9wZW4oKSkge1xuICAgICAgdGhpcy5wYXJjZWxPcGVuLnNldChmYWxzZSk7XG4gICAgfVxuICAgIGlmIChrZWVwICE9PSAnbGF5ZXJzJyAmJiB0aGlzLmxheWVyc09wZW4oKSkge1xuICAgICAgdGhpcy5sYXllcnNPcGVuLnNldChmYWxzZSk7XG4gICAgfVxuICAgIGlmIChrZWVwICE9PSAnbGVnZW5kJyAmJiB0aGlzLmxlZ2VuZE9wZW4oKSkge1xuICAgICAgdGhpcy5sZWdlbmRPcGVuLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbnRlclBhbk1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy50b29sTW9kZS5zZXQoJ3BhbicpO1xuICAgIHRoaXMubWVhc3VyZU1vZGUuc2V0KCdub25lJyk7XG4gICAgdGhpcy5zd2lwZUFjdGl2ZS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuem9vbVJlZigpPy5yZXNldEludGVyYWN0aW9uTW9kZSgpO1xuICAgIHRoaXMuYXBwbHlQYW5DdXJzb3IoKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhpdFRvb2xNb2RlKCk6IHZvaWQge1xuICAgIHRoaXMudG9vbE1vZGUuc2V0KCdub25lJyk7XG4gICAgdGhpcy5tZWFzdXJlTW9kZS5zZXQoJ25vbmUnKTtcbiAgICB0aGlzLnN3aXBlQWN0aXZlLnNldChmYWxzZSk7XG4gICAgdGhpcy56b29tUmVmKCk/LnJlc2V0SW50ZXJhY3Rpb25Nb2RlKCk7XG4gICAgdGhpcy5zZXRNYXBDdXJzb3IobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5UGFuQ3Vyc29yKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRvb2xNb2RlKCkgIT09ICdwYW4nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0TWFwQ3Vyc29yKCdncmFiJyk7XG4gIH1cblxuICAvKiogQmFja2luZyBhY3Rpb24gZm9yIHRoZSBgbG9jYXRlYCB0b29sYmFyIGVudHJ5IChgR0VPX01BUF9MT0NBVEVfVE9PTEJBUl9BQ1RJT05gKS4gKi9cbiAgcHJpdmF0ZSB0cmlnZ2VyTG9jYXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IGN0cmwgPSB0aGlzLmNvbnRyb2xsZXIoKTtcbiAgICBpZiAoIWN0cmwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcnVuR2VvTWFwTG9jYXRlKGN0cmwsIHtcbiAgICAgIG9uTG9jYXRlZDogKCkgPT4gdGhpcy5sb2NhdGVkLmVtaXQoKSxcbiAgICAgIG9uRGVuaWVkOiAoKSA9PiB0aGlzLmxvY2F0ZURlbmllZC5lbWl0KCksXG4gICAgICBvbkVycm9yOiAoZXJyb3IpID0+IHRoaXMubG9jYXRlRXJyb3IuZW1pdChlcnJvciksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldE1hcEN1cnNvcihjdXJzb3I6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IHRoaXMuY29udHJvbGxlcigpPy5nZXRNYXAoKT8uZ2V0VGFyZ2V0RWxlbWVudCgpO1xuICAgIGlmICghZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWwuc3R5bGUuY3Vyc29yID0gY3Vyc29yID8/ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBiaW5kUGFuQ3Vyc29yKGN0cmw6IEdlb01hcENvbnRyb2xsZXIpOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IGN0cmwuZ2V0TWFwKCk/LmdldFRhcmdldEVsZW1lbnQoKTtcbiAgICBpZiAoIWVsIHx8IHRoaXMucGFuQ3Vyc29yQm91bmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLm9uUGFuUG9pbnRlckRvd24pO1xuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMub25QYW5Qb2ludGVyVXApO1xuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJsZWF2ZScsIHRoaXMub25QYW5Qb2ludGVyVXApO1xuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCB0aGlzLm9uUGFuUG9pbnRlclVwKTtcbiAgICB0aGlzLnBhbkN1cnNvckJvdW5kID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgdW5iaW5kUGFuQ3Vyc29yKCk6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gdGhpcy5jb250cm9sbGVyKCk/LmdldE1hcCgpPy5nZXRUYXJnZXRFbGVtZW50KCk7XG4gICAgaWYgKCFlbCB8fCAhdGhpcy5wYW5DdXJzb3JCb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMub25QYW5Qb2ludGVyRG93bik7XG4gICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5vblBhblBvaW50ZXJVcCk7XG4gICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmxlYXZlJywgdGhpcy5vblBhblBvaW50ZXJVcCk7XG4gICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmNhbmNlbCcsIHRoaXMub25QYW5Qb2ludGVyVXApO1xuICAgIHRoaXMucGFuQ3Vyc29yQm91bmQgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGREZW1vU2VhcmNoUmVzdWx0cyhcbiAgICBxdWVyeTogR2VvTWFwU2VhcmNoUXVlcnksXG4gICk6IEdlb01hcFNlYXJjaFJlc3VsdEl0ZW1bXSB7XG4gICAgY29uc3QgcGFyY2VsTGF5ZXIgPSBHRU9fTUFQX0RFTU9fVEhFTUFUSUNfTEFZRVJTLmZpbmQoXG4gICAgICAobGF5ZXIpID0+IGxheWVyLmlkID09PSAnZGVtby1wYXJjZWwnICYmIGxheWVyLnR5cGUgPT09ICdnZW9qc29uJyxcbiAgICApO1xuICAgIGNvbnN0IGZlYXR1cmUgPVxuICAgICAgcGFyY2VsTGF5ZXIgJiYgcGFyY2VsTGF5ZXIudHlwZSA9PT0gJ2dlb2pzb24nXG4gICAgICAgID8gKHBhcmNlbExheWVyLmRhdGEgYXMgeyBmZWF0dXJlcz86IG9iamVjdFtdIH0pLmZlYXR1cmVzPy5bMF1cbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qga2V5d29yZCA9IE9iamVjdC52YWx1ZXMocXVlcnkudmFsdWVzKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLmpvaW4oJyAnKVxuICAgICAgLnRyaW0oKTtcbiAgICBjb25zdCBsYWJlbCA9IGtleXdvcmQgfHwgJ1Ro4butYSAxMiDigJQgVOG7nSA0NSc7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdkZW1vLXBhcmNlbC0xMicsXG4gICAgICAgIHRpdGxlOiBgVGjhu61hIDEyIC8gVOG7nSA0NWAsXG4gICAgICAgIHN1YnRpdGxlOiBsYWJlbCxcbiAgICAgICAgZXh0ZW50NDMyNjogWzEwOC40NSwgMTEuOTQsIDEwOC40NjUsIDExLjk1Ml0sXG4gICAgICAgIGdlb2pzb246IGZlYXR1cmUgPz8ge1xuICAgICAgICAgIHR5cGU6ICdGZWF0dXJlJyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7IHBhcmNlbDogJzEyJywgc2hlZXQ6ICc0NScgfSxcbiAgICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgICAgdHlwZTogJ1BvbHlnb24nLFxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IFtcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsxMDguNDUsIDExLjk0XSxcbiAgICAgICAgICAgICAgICBbMTA4LjQ2NSwgMTEuOTRdLFxuICAgICAgICAgICAgICAgIFsxMDguNDY1LCAxMS45NTJdLFxuICAgICAgICAgICAgICAgIFsxMDguNDUsIDExLjk1Ml0sXG4gICAgICAgICAgICAgICAgWzEwOC40NSwgMTEuOTRdLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBwYXJjZWw6IHsgLi4uR0VPX01BUF9ERU1PX1BBUkNFTF9ERVRBSUwgfSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlU3dpcGVPdmVybGF5VmlzaWJsZSgpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5tYW5hZ2VkTGF5ZXJzKCk7XG4gICAgaWYgKCFsaXN0Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhbnlWaXNpYmxlID0gbGlzdC5zb21lKChsYXllcikgPT4gbGF5ZXIudmlzaWJsZSAhPT0gZmFsc2UpO1xuICAgIGlmIChhbnlWaXNpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5leHQgPSBsaXN0Lm1hcCgobGF5ZXIsIGluZGV4KSA9PlxuICAgICAgaW5kZXggPT09IDAgPyB7IC4uLmxheWVyLCB2aXNpYmxlOiB0cnVlIH0gOiBsYXllcixcbiAgICApO1xuICAgIHRoaXMubWFuYWdlZExheWVycy5zZXQobmV4dCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJnZW8tbWFwLXNoZWxsXCI+XG4gIDxnZW8tbWFwXG4gICAgY2xhc3M9XCJnZW8tbWFwLXNoZWxsX19tYXBcIlxuICAgIFtjZW50ZXJdPVwiY2VudGVyKClcIlxuICAgIFt6b29tXT1cInpvb20oKVwiXG4gICAgW2hlaWdodF09XCInMTAwJSdcIlxuICAgIFtiYXNlbWFwXT1cImJhc2VtYXAoKVwiXG4gICAgW2xheWVyc109XCJyZXNvbHZlZExheWVycygpXCJcbiAgICBbc2hvd01vdXNlUG9zaXRpb25dPVwic2hvd01vdXNlUG9zaXRpb24oKVwiXG4gICAgW3Nob3dab29tQ29udHJvbF09XCJmYWxzZVwiXG4gICAgKG1hcFJlYWR5KT1cIm9uTWFwUmVhZHkoJGV2ZW50KVwiXG4gICAgKG1hcENsaWNrKT1cIm9uTWFwQ2xpY2soJGV2ZW50KVwiXG4gIC8+XG5cbiAgQGlmIChsZWdlbmRDYXRhbG9nTWlzc2luZygpKSB7XG4gICAgPGRpdiBjbGFzcz1cImdlby1tYXAtc2hlbGxfX25vdGljZVwiPlxuICAgICAgPGdlby1hbGVydFxuICAgICAgICB0eXBlPVwid2FybmluZ1wiXG4gICAgICAgIFtzaG93SWNvbl09XCJ0cnVlXCJcbiAgICAgICAgdGl0bGU9XCJDaMawYSBjw7MgZGFuaCBt4bulYyBjaMO6IGdp4bqjaVwiXG4gICAgICAgIG1lc3NhZ2U9XCJEYW5oIG3hu6VjIGxv4bqhaSDEkeG6pXQgdsOgIGvDvSBoaeG7h3UvbcOgdSBj4bunYSB04buJbmggY2jGsGEgxJHGsOG7o2MgbuG6oXAgdsOgbyBo4buHIHRo4buRbmcuIELhuqNuIMSR4buTIHbhuqtuIGhp4buDbiB0aOG7iyBiw6xuaCB0aMaw4budbmcuXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIH1cblxuICA8ZGl2IGNsYXNzPVwiZ2VvLW1hcC1zaGVsbF9fY2hyb21lLWxlZnRcIj5cbiAgICA8Z2VvLW1hcC10b29sYmFyXG4gICAgICBjbGFzcz1cImdlby1tYXAtc2hlbGxfX3Rvb2xiYXJcIlxuICAgICAgW2NvbnRyb2xsZXJdPVwiY29udHJvbGxlcigpXCJcbiAgICAgIFthY3Rpb25zXT1cInJlc29sdmVkVG9vbGJhckFjdGlvbnMoKVwiXG4gICAgICBbKGNoZWNrZWRNYXApXT1cImNoZWNrZWRNYXBcIlxuICAgICAgKGFjdGlvbkNsaWNrKT1cIm9uVG9vbGJhckFjdGlvbigkZXZlbnQpXCJcbiAgICAgIChhY3Rpb25Ub2dnbGUpPVwib25Ub29sYmFyVG9nZ2xlKCRldmVudClcIlxuICAgIC8+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZ2VvLW1hcC1zaGVsbF9fcGFuZWxzXCI+XG4gICAgICA8Z2VvLW1hcC1zZWFyY2hcbiAgICAgICAgWyhvcGVuKV09XCJzZWFyY2hPcGVuXCJcbiAgICAgICAgW3Jlc3VsdHNdPVwic2VhcmNoUmVzdWx0cygpXCJcbiAgICAgICAgKHNlYXJjaCk9XCJvblNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgKHJlc2V0KT1cIm9uU2VhcmNoUmVzZXQoKVwiXG4gICAgICAgIChyZXN1bHRTZWxlY3QpPVwib25SZXN1bHRTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAvPlxuICAgICAgPGdlby1tYXAtYWRtaW4tZmlsdGVyXG4gICAgICAgIFsob3BlbildPVwiYWRtaW5GaWx0ZXJPcGVuXCJcbiAgICAgICAgdGl0bGU9XCJDaHV54buDbiB24buLIHRyw61cIlxuICAgICAgICBbbm9kZXNdPVwiYWRtaW5Ob2RlcygpXCJcbiAgICAgICAgWyhjaGVja2VkS2V5cyldPVwiYWRtaW5DaGVja2VkS2V5c1wiXG4gICAgICAgIFsoZXhwYW5kZWRLZXlzKV09XCJhZG1pbkV4cGFuZGVkS2V5c1wiXG4gICAgICAgIChhcHBseSk9XCJvbkFkbWluQXBwbHkoJGV2ZW50KVwiXG4gICAgICAgIChyZXNldCk9XCJhZG1pbkNoZWNrZWRLZXlzLnNldChbXSlcIlxuICAgICAgICAoZml0UHJvdmluY2UpPVwib25GaXRQcm92aW5jZSgpXCJcbiAgICAgICAgKGNsb3NlZCk9XCJvbkFkbWluQ2xvc2VkKClcIlxuICAgICAgLz5cbiAgICAgIDxnZW8tbWFwLXBhcmNlbC1wb3B1cFxuICAgICAgICBbKG9wZW4pXT1cInBhcmNlbE9wZW5cIlxuICAgICAgICBbcGFyY2VsXT1cInNlbGVjdGVkUGFyY2VsKClcIlxuICAgICAgICBbYXVkaWVuY2VdPVwicGFyY2VsQXVkaWVuY2UoKVwiXG4gICAgICAgIChleHBvcnRDbGljayk9XCJwYXJjZWxFeHBvcnQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKGJhY2spPVwib25QYXJjZWxCYWNrKClcIlxuICAgICAgICAoY2xvc2VkKT1cIm9uUGFyY2VsQ2xvc2VkKClcIlxuICAgICAgLz5cbiAgICAgIDxnZW8tbWFwLWxheWVycy1kcmF3ZXJcbiAgICAgICAgW2NvbnRyb2xsZXJdPVwiY29udHJvbGxlcigpXCJcbiAgICAgICAgWyhvcGVuKV09XCJsYXllcnNPcGVuXCJcbiAgICAgICAgWyhsYXllcnMpXT1cIm1hbmFnZWRMYXllcnNcIlxuICAgICAgLz5cbiAgICAgIDxnZW8tbWFwLWxlZ2VuZFxuICAgICAgICBbKG9wZW4pXT1cImxlZ2VuZE9wZW5cIlxuICAgICAgICBbaXRlbXNdPVwibGVnZW5kSXRlbXMoKVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEhlYWRsZXNzIGJyaWRnZXM6IHpvb20vZnVsbHNjcmVlbiArIHNuYXBzaG90IChkcml2ZW4gYnkgdG9vbGJhciBhY3Rpb25zKS4gLS0+XG4gIDxnZW8tbWFwLXpvb21cbiAgICBjbGFzcz1cImdlby1tYXAtc2hlbGxfX3pvb20tYnJpZGdlXCJcbiAgICBbY29udHJvbGxlcl09XCJjb250cm9sbGVyKClcIlxuICAgIFtzaG93TmF2XT1cInNob3dOYXYoKVwiXG4gICAgW3Byb3ZpbmNlRXh0ZW50XT1cInByb3ZpbmNlRXh0ZW50KClcIlxuICAvPlxuICA8Z2VvLW1hcC1zbmFwc2hvdFxuICAgIGNsYXNzPVwiZ2VvLW1hcC1zaGVsbF9fc25hcHNob3QtYnJpZGdlXCJcbiAgICBbY29udHJvbGxlcl09XCJjb250cm9sbGVyKClcIlxuICAvPlxuXG4gIDxkaXYgY2xhc3M9XCJnZW8tbWFwLXNoZWxsX190b3AtcmlnaHRcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZ2VvTWFwU2hlbGxUb3BSaWdodF1cIiAvPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiZ2VvLW1hcC1zaGVsbF9fYm90dG9tLXJpZ2h0XCI+XG4gICAgPGdlby1tYXAtYmFzZW1hcC1zd2l0Y2hlclxuICAgICAgW29wdGlvbnNdPVwiYmFzZW1hcE9wdGlvbnMoKVwiXG4gICAgICBbKHNlbGVjdGVkSWQpXT1cImJhc2VtYXBJZFwiXG4gICAgICAoYmFzZW1hcENoYW5nZSk9XCJvbkJhc2VtYXBDaGFuZ2UoJGV2ZW50KVwiXG4gICAgLz5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImdlby1tYXAtc2hlbGxfX3N0YXR1c1wiPlxuICAgIEBpZiAobG9jYXRpb25MYWJlbCgpKSB7XG4gICAgICA8Z2VvLW1hcC1sb2NhdGlvbi1jaGlwIFtsYWJlbF09XCJsb2NhdGlvbkxhYmVsKClcIiAvPlxuICAgIH1cbiAgICA8Z2VvLW1hcC1tZWFzdXJlXG4gICAgICBbY29udHJvbGxlcl09XCJjb250cm9sbGVyKClcIlxuICAgICAgWyhtb2RlKV09XCJtZWFzdXJlTW9kZVwiXG4gICAgLz5cbiAgPC9kaXY+XG5cbiAgPGdlby1tYXAtc3dpcGVcbiAgICBbY29udHJvbGxlcl09XCJjb250cm9sbGVyKClcIlxuICAgIFsoYWN0aXZlKV09XCJzd2lwZUFjdGl2ZVwiXG4gIC8+XG5cbiAgPGdlby1tYXAtaGVscCBbKG9wZW4pXT1cImhlbHBPcGVuXCIgLz5cbjwvZGl2PlxuIl19
@@ -84,10 +84,10 @@ export class GeoMapSnapshotComponent {
84
84
  map.renderSync();
85
85
  }
86
86
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoMapSnapshotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
87
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: GeoMapSnapshotComponent, isStandalone: true, selector: "geo-map-snapshot", inputs: { controller: { classPropertyName: "controller", publicName: "controller", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, filename: { classPropertyName: "filename", publicName: "filename", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { captured: "captured", captureError: "captureError" }, host: { classAttribute: "geo-map-snapshot-host" }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"geo-map-snapshot__btn\"\n [nz-tooltip]=\"label()\"\n nzTooltipPlacement=\"left\"\n [attr.aria-label]=\"label()\"\n [disabled]=\"!controller() || busy()\"\n (click)=\"capture()\"\n>\n <geo-icon type=\"camera\" size=\"sm\" />\n</button>\n", styles: ["@charset \"UTF-8\";.geo-map-snapshot-host{display:block}.geo-map-snapshot__btn{border:1px solid var(--geo-color-border-default);border-radius:var(--geo-radius-lg);background:var(--geo-color-surface-elevated);box-shadow:var(--geo-shadow-sm);display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:32px;border:0;border-radius:var(--geo-radius);background:transparent;color:var(--geo-color-neutral-700);font:inherit;font-size:var(--geo-font-size-body-small);font-weight:var(--geo-font-weight-medium);line-height:1;cursor:pointer;transition:background-color .15s ease,color .15s ease,transform .1s ease;width:32px;min-height:32px;padding:0}.geo-map-snapshot__btn:hover:not(:disabled){background:var(--geo-color-primary-soft-hover);color:var(--geo-color-primary-default)}.geo-map-snapshot__btn:active:not(:disabled){transform:scale(.98)}.geo-map-snapshot__btn:disabled{opacity:.45;cursor:not-allowed}.geo-map-snapshot__btn--active,.geo-map-snapshot__btn--checked{background:var(--geo-color-primary-soft-active);color:var(--geo-color-primary-default)}.geo-map-snapshot__btn--icon-only{width:32px;padding:0}\n"], dependencies: [{ kind: "component", type: GeoIconComponent, selector: "geo-icon", inputs: ["type", "theme", "spin", "size", "color"] }, { kind: "ngmodule", type: NzToolTipModule }, { kind: "directive", type: i1.NzTooltipDirective, selector: "[nz-tooltip]", inputs: ["nzTooltipTitle", "nzTooltipTitleContext", "nz-tooltip", "nzTooltipTrigger", "nzTooltipPlacement", "nzTooltipOrigin", "nzTooltipVisible", "nzTooltipMouseEnterDelay", "nzTooltipMouseLeaveDelay", "nzTooltipOverlayClassName", "nzTooltipOverlayStyle", "nzTooltipArrowPointAtCenter", "cdkConnectedOverlayPush", "nzTooltipColor"], outputs: ["nzTooltipVisibleChange"], exportAs: ["nzTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
87
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: GeoMapSnapshotComponent, isStandalone: true, selector: "geo-map-snapshot", inputs: { controller: { classPropertyName: "controller", publicName: "controller", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, filename: { classPropertyName: "filename", publicName: "filename", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { captured: "captured", captureError: "captureError" }, host: { classAttribute: "geo-map-snapshot-host" }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"geo-map-snapshot__btn\"\n [nz-tooltip]=\"label()\"\n nzTooltipPlacement=\"left\"\n [attr.aria-label]=\"label()\"\n [disabled]=\"!controller() || busy()\"\n (click)=\"capture()\"\n>\n <geo-icon type=\"camera\" size=\"md\" />\n</button>\n", styles: ["@charset \"UTF-8\";.geo-map-snapshot-host{display:block}.geo-map-snapshot__btn{border:1px solid var(--geo-color-border-default);border-radius:var(--geo-radius-lg);background:var(--geo-color-surface-elevated);box-shadow:var(--geo-shadow-sm);display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:40px;min-height:40px;border:0;border-radius:var(--geo-radius);background:transparent;color:var(--geo-color-neutral-700);font:inherit;font-size:var(--geo-font-size-body-small);font-weight:var(--geo-font-weight-medium);line-height:1;cursor:pointer;transition:background-color .15s ease,color .15s ease,transform .1s ease;width:48px;min-height:48px;padding:0}.geo-map-snapshot__btn:hover:not(:disabled){background:var(--geo-color-primary-soft-hover);color:var(--geo-color-primary-default)}.geo-map-snapshot__btn:active:not(:disabled){transform:scale(.98)}.geo-map-snapshot__btn:disabled{opacity:.45;cursor:not-allowed}.geo-map-snapshot__btn--active,.geo-map-snapshot__btn--checked{background:var(--geo-color-primary-soft-active);color:var(--geo-color-primary-default)}.geo-map-snapshot__btn--icon-only{width:40px;padding:0}\n"], dependencies: [{ kind: "component", type: GeoIconComponent, selector: "geo-icon", inputs: ["type", "theme", "spin", "size", "color"] }, { kind: "ngmodule", type: NzToolTipModule }, { kind: "directive", type: i1.NzTooltipDirective, selector: "[nz-tooltip]", inputs: ["nzTooltipTitle", "nzTooltipTitleContext", "nz-tooltip", "nzTooltipTrigger", "nzTooltipPlacement", "nzTooltipOrigin", "nzTooltipVisible", "nzTooltipMouseEnterDelay", "nzTooltipMouseLeaveDelay", "nzTooltipOverlayClassName", "nzTooltipOverlayStyle", "nzTooltipArrowPointAtCenter", "cdkConnectedOverlayPush", "nzTooltipColor"], outputs: ["nzTooltipVisibleChange"], exportAs: ["nzTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
88
88
  }
89
89
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoMapSnapshotComponent, decorators: [{
90
90
  type: Component,
91
- args: [{ selector: 'geo-map-snapshot', standalone: true, imports: [GeoIconComponent, NzToolTipModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'geo-map-snapshot-host' }, template: "<button\n type=\"button\"\n class=\"geo-map-snapshot__btn\"\n [nz-tooltip]=\"label()\"\n nzTooltipPlacement=\"left\"\n [attr.aria-label]=\"label()\"\n [disabled]=\"!controller() || busy()\"\n (click)=\"capture()\"\n>\n <geo-icon type=\"camera\" size=\"sm\" />\n</button>\n", styles: ["@charset \"UTF-8\";.geo-map-snapshot-host{display:block}.geo-map-snapshot__btn{border:1px solid var(--geo-color-border-default);border-radius:var(--geo-radius-lg);background:var(--geo-color-surface-elevated);box-shadow:var(--geo-shadow-sm);display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:32px;border:0;border-radius:var(--geo-radius);background:transparent;color:var(--geo-color-neutral-700);font:inherit;font-size:var(--geo-font-size-body-small);font-weight:var(--geo-font-weight-medium);line-height:1;cursor:pointer;transition:background-color .15s ease,color .15s ease,transform .1s ease;width:32px;min-height:32px;padding:0}.geo-map-snapshot__btn:hover:not(:disabled){background:var(--geo-color-primary-soft-hover);color:var(--geo-color-primary-default)}.geo-map-snapshot__btn:active:not(:disabled){transform:scale(.98)}.geo-map-snapshot__btn:disabled{opacity:.45;cursor:not-allowed}.geo-map-snapshot__btn--active,.geo-map-snapshot__btn--checked{background:var(--geo-color-primary-soft-active);color:var(--geo-color-primary-default)}.geo-map-snapshot__btn--icon-only{width:32px;padding:0}\n"] }]
91
+ args: [{ selector: 'geo-map-snapshot', standalone: true, imports: [GeoIconComponent, NzToolTipModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'geo-map-snapshot-host' }, template: "<button\n type=\"button\"\n class=\"geo-map-snapshot__btn\"\n [nz-tooltip]=\"label()\"\n nzTooltipPlacement=\"left\"\n [attr.aria-label]=\"label()\"\n [disabled]=\"!controller() || busy()\"\n (click)=\"capture()\"\n>\n <geo-icon type=\"camera\" size=\"md\" />\n</button>\n", styles: ["@charset \"UTF-8\";.geo-map-snapshot-host{display:block}.geo-map-snapshot__btn{border:1px solid var(--geo-color-border-default);border-radius:var(--geo-radius-lg);background:var(--geo-color-surface-elevated);box-shadow:var(--geo-shadow-sm);display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:40px;min-height:40px;border:0;border-radius:var(--geo-radius);background:transparent;color:var(--geo-color-neutral-700);font:inherit;font-size:var(--geo-font-size-body-small);font-weight:var(--geo-font-weight-medium);line-height:1;cursor:pointer;transition:background-color .15s ease,color .15s ease,transform .1s ease;width:48px;min-height:48px;padding:0}.geo-map-snapshot__btn:hover:not(:disabled){background:var(--geo-color-primary-soft-hover);color:var(--geo-color-primary-default)}.geo-map-snapshot__btn:active:not(:disabled){transform:scale(.98)}.geo-map-snapshot__btn:disabled{opacity:.45;cursor:not-allowed}.geo-map-snapshot__btn--active,.geo-map-snapshot__btn--checked{background:var(--geo-color-primary-soft-active);color:var(--geo-color-primary-default)}.geo-map-snapshot__btn--icon-only{width:40px;padding:0}\n"] }]
92
92
  }] });
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLW1hcC1zbmFwc2hvdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nZW8tdWkvc3JjL2xpYi9maWdtYS9nZW8tbWFwL2Nocm9tZS9nZW8tbWFwLXNuYXBzaG90L2dlby1tYXAtc25hcHNob3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLW1hcC9jaHJvbWUvZ2VvLW1hcC1zbmFwc2hvdC9nZW8tbWFwLXNuYXBzaG90LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7OztBQUd4RTs7Ozs7O0dBTUc7QUFXSCxNQUFNLE9BQU8sdUJBQXVCO0lBQ3pCLFVBQVUsR0FBRyxLQUFLLENBQTBCLElBQUksQ0FBQyxDQUFDO0lBQ2xELEtBQUssR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNqQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRS9CLFFBQVEsR0FBRyxNQUFNLEVBQVEsQ0FBQztJQUMxQixZQUFZLEdBQUcsTUFBTSxFQUFXLENBQUM7SUFFakMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU5Qiw0RUFBNEU7SUFDNUUsT0FBTztRQUNMLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsR0FBRyxJ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QUUsZUFBZSxDQUFDLG1CQUczQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOelRvb2xUaXBNb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL3Rvb2x0aXAnO1xuaW1wb3J0IHsgR2VvSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2dlby1pY29uL2dlby1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHZW9NYXBDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vZ2VvLW1hcC5jb250cm9sbGVyJztcblxuLyoqXG4gKiBFeHBvcnQgY3VycmVudCBtYXAgdmlldyBhcyBQTkcgZG93bmxvYWQuXG4gKlxuICogQHN1bW1hcnkgRXhwb3J0IGN1cnJlbnQgbWFwIHZpZXcgYXMgUE5HIGRvd25sb2FkLlxuICogQHdoZW5Ub1VzZSBDaOG7pXAg4bqjbmggYuG6o24gxJHhu5MuXG4gKiBAZG9Ob3RVc2VXaGVuIFNlcnZlci1zaWRlIHByaW50L1BERiBwaXBlbGluZXMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dlby1tYXAtc25hcHNob3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbR2VvSWNvbkNvbXBvbmVudCwgTnpUb29sVGlwTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlby1tYXAtc25hcHNob3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZ2VvLW1hcC1zbmFwc2hvdC5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7IGNsYXNzOiAnZ2VvLW1hcC1zbmFwc2hvdC1ob3N0JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBHZW9NYXBTbmFwc2hvdENvbXBvbmVudCB7XG4gIHJlYWRvbmx5IGNvbnRyb2xsZXIgPSBpbnB1dDxHZW9NYXBDb250cm9sbGVyIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IGxhYmVsID0gaW5wdXQoJ0No4bulcCDhuqNuaCBi4bqjbiDEkeG7kycpO1xuICByZWFkb25seSBmaWxlbmFtZSA9IGlucHV0KCdiYW4tZG8ucG5nJyk7XG5cbiAgcmVhZG9ubHkgY2FwdHVyZWQgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgY2FwdHVyZUVycm9yID0gb3V0cHV0PHVua25vd24+KCk7XG5cbiAgcmVhZG9ubHkgYnVzeSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgLyoqIFB1YmxpYyBzbyBzaGVsbC90b29sYmFyIGNhbiB0cmlnZ2VyIGNhcHR1cmUgd2l0aG91dCBhIHZpc2libGUgYnV0dG9uLiAqL1xuICBjYXB0dXJlKCk6IHZvaWQge1xuICAgIGNvbnN0IG1hcCA9IHRoaXMuY29udHJvbGxlcigpPy5nZXRNYXAoKTtcbiAgICBpZiAoIW1hcCB8fCB0aGlzLmJ1c3koKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYnVzeS5zZXQodHJ1ZSk7XG4gICAgbWFwLm9uY2UoJ3JlbmRlcmNvbXBsZXRlJywgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbWFwQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIGNvbnN0IHNpemUgPSBtYXAuZ2V0U2l6ZSgpO1xuICAgICAgICBpZiAoIXNpemUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hcCBzaXplIHVuYXZhaWxhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgbWFwQ2FudmFzLndpZHRoID0gc2l6ZVswXTtcbiAgICAgICAgbWFwQ2FudmFzLmhlaWdodCA9IHNpemVbMV07XG4gICAgICAgIGNvbnN0IGN0eCA9IG1hcENhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBpZiAoIWN0eCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FudmFzIDJEIHVuYXZhaWxhYmxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXllcnMgPSBtYXBcbiAgICAgICAgICAuZ2V0Vmlld3BvcnQoKVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKCcub2wtbGF5ZXIgY2FudmFzLCBjYW52YXMub2wtbGF5ZXInKTtcbiAgICAgICAgbGF5ZXJzLmZvckVhY2goKGNhbnZhcykgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsID0gY2FudmFzIGFzIEhUTUxDYW52YXNFbGVtZW50O1xuICAgICAgICAgIGlmIChlbC53aWR0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG9wYWNpdHkgPSBOdW1iZXIoZWwucGFyZW50RWxlbWVudD8uc3R5bGUub3BhY2l0eSB8fCAnMScpO1xuICAgICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gTnVtYmVyLmlzRmluaXRlKG9wYWNpdHkpID8gb3BhY2l0eSA6IDE7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBlbC5zdHlsZS50cmFuc2Zvcm07XG4gICAgICAgICAgICBjb25zdCBtYXRyaXggPSB0cmFuc2Zvcm1cbiAgICAgICAgICAgICAgLm1hdGNoKC9ebWF0cml4XFwoKFteKV0qKVxcKSQvKT8uWzFdXG4gICAgICAgICAgICAgID8uc3BsaXQoJywnKVxuICAgICAgICAgICAgICAubWFwKE51bWJlcik7XG4gICAgICAgICAgICBpZiAobWF0cml4ICYmIG1hdHJpeC5sZW5ndGggPT09IDYpIHtcbiAgICAgICAgICAgICAgY3R4LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICBtYXRyaXhbMF0sXG4gICAgICAgICAgICAgICAgbWF0cml4WzFdLFxuICAgICAgICAgICAgICAgIG1hdHJpeFsyXSxcbiAgICAgICAgICAgICAgICBtYXRyaXhbM10sXG4gICAgICAgICAgICAgICAgbWF0cml4WzRdLFxuICAgICAgICAgICAgICAgIG1hdHJpeFs1XSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGN0eC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHguZHJhd0ltYWdlKGVsLCAwLCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjdHguc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgICAgIG1hcENhbnZhcy50b0Jsb2IoKGJsb2IpID0+IHtcbiAgICAgICAgICB0aGlzLmJ1c3kuc2V0KGZhbHNlKTtcbiAgICAgICAgICBpZiAoIWJsb2IpIHtcbiAgICAgICAgICAgIHRoaXMuY2FwdHVyZUVycm9yLmVtaXQobmV3IEVycm9yKCdLaMO0bmcgdOG6oW8gxJHGsOG7o2Mg4bqjbmggUE5HLicpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICBjb25zdCBhbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgICAgYW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgICAgICAgYW5jaG9yLmRvd25sb2FkID0gdGhpcy5maWxlbmFtZSgpO1xuICAgICAgICAgIGFuY2hvci5jbGljaygpO1xuICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgICAgICAgICB0aGlzLmNhcHR1cmVkLmVtaXQoKTtcbiAgICAgICAgfSwgJ2ltYWdlL3BuZycpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuYnVzeS5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLmNhcHR1cmVFcnJvci5lbWl0KGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbWFwLnJlbmRlclN5bmMoKTtcbiAgfVxufVxuIiwiPGJ1dHRvblxuICB0eXBlPVwiYnV0dG9uXCJcbiAgY2xhc3M9XCJnZW8tbWFwLXNuYXBzaG90X19idG5cIlxuICBbbnotdG9vbHRpcF09XCJsYWJlbCgpXCJcbiAgbnpUb29sdGlwUGxhY2VtZW50PVwibGVmdFwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwibGFiZWwoKVwiXG4gIFtkaXNhYmxlZF09XCIhY29udHJvbGxlcigpIHx8IGJ1c3koKVwiXG4gIChjbGljayk9XCJjYXB0dXJlKClcIlxuPlxuICA8Z2VvLWljb24gdHlwZT1cImNhbWVyYVwiIHNpemU9XCJzbVwiIC8+XG48L2J1dHRvbj5cbiJdfQ==
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLW1hcC1zbmFwc2hvdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nZW8tdWkvc3JjL2xpYi9maWdtYS9nZW8tbWFwL2Nocm9tZS9nZW8tbWFwLXNuYXBzaG90L2dlby1tYXAtc25hcHNob3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLW1hcC9jaHJvbWUvZ2VvLW1hcC1zbmFwc2hvdC9nZW8tbWFwLXNuYXBzaG90LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7OztBQUd4RTs7Ozs7O0dBTUc7QUFXSCxNQUFNLE9BQU8sdUJBQXVCO0lBQ3pCLFVBQVUsR0FBRyxLQUFLLENBQTBCLElBQUksQ0FBQyxDQUFDO0lBQ2xELEtBQUssR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNqQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRS9CLFFBQVEsR0FBRyxNQUFNLEVBQVEsQ0FBQztJQUMxQixZQUFZLEdBQUcsTUFBTSxFQUFXLENBQUM7SUFFakMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU5Qiw0RUFBNEU7SUFDNUUsT0FBTztRQUNMLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsR0FBRyxJ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QUUsZUFBZSxDQUFDLG1CQUczQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOelRvb2xUaXBNb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL3Rvb2x0aXAnO1xuaW1wb3J0IHsgR2VvSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2dlby1pY29uL2dlby1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHZW9NYXBDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vZ2VvLW1hcC5jb250cm9sbGVyJztcblxuLyoqXG4gKiBFeHBvcnQgY3VycmVudCBtYXAgdmlldyBhcyBQTkcgZG93bmxvYWQuXG4gKlxuICogQHN1bW1hcnkgRXhwb3J0IGN1cnJlbnQgbWFwIHZpZXcgYXMgUE5HIGRvd25sb2FkLlxuICogQHdoZW5Ub1VzZSBDaOG7pXAg4bqjbmggYuG6o24gxJHhu5MuXG4gKiBAZG9Ob3RVc2VXaGVuIFNlcnZlci1zaWRlIHByaW50L1BERiBwaXBlbGluZXMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dlby1tYXAtc25hcHNob3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbR2VvSWNvbkNvbXBvbmVudCwgTnpUb29sVGlwTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlby1tYXAtc25hcHNob3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZ2VvLW1hcC1zbmFwc2hvdC5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7IGNsYXNzOiAnZ2VvLW1hcC1zbmFwc2hvdC1ob3N0JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBHZW9NYXBTbmFwc2hvdENvbXBvbmVudCB7XG4gIHJlYWRvbmx5IGNvbnRyb2xsZXIgPSBpbnB1dDxHZW9NYXBDb250cm9sbGVyIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IGxhYmVsID0gaW5wdXQoJ0No4bulcCDhuqNuaCBi4bqjbiDEkeG7kycpO1xuICByZWFkb25seSBmaWxlbmFtZSA9IGlucHV0KCdiYW4tZG8ucG5nJyk7XG5cbiAgcmVhZG9ubHkgY2FwdHVyZWQgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgY2FwdHVyZUVycm9yID0gb3V0cHV0PHVua25vd24+KCk7XG5cbiAgcmVhZG9ubHkgYnVzeSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgLyoqIFB1YmxpYyBzbyBzaGVsbC90b29sYmFyIGNhbiB0cmlnZ2VyIGNhcHR1cmUgd2l0aG91dCBhIHZpc2libGUgYnV0dG9uLiAqL1xuICBjYXB0dXJlKCk6IHZvaWQge1xuICAgIGNvbnN0IG1hcCA9IHRoaXMuY29udHJvbGxlcigpPy5nZXRNYXAoKTtcbiAgICBpZiAoIW1hcCB8fCB0aGlzLmJ1c3koKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYnVzeS5zZXQodHJ1ZSk7XG4gICAgbWFwLm9uY2UoJ3JlbmRlcmNvbXBsZXRlJywgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbWFwQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIGNvbnN0IHNpemUgPSBtYXAuZ2V0U2l6ZSgpO1xuICAgICAgICBpZiAoIXNpemUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hcCBzaXplIHVuYXZhaWxhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgbWFwQ2FudmFzLndpZHRoID0gc2l6ZVswXTtcbiAgICAgICAgbWFwQ2FudmFzLmhlaWdodCA9IHNpemVbMV07XG4gICAgICAgIGNvbnN0IGN0eCA9IG1hcENhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBpZiAoIWN0eCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FudmFzIDJEIHVuYXZhaWxhYmxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXllcnMgPSBtYXBcbiAgICAgICAgICAuZ2V0Vmlld3BvcnQoKVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKCcub2wtbGF5ZXIgY2FudmFzLCBjYW52YXMub2wtbGF5ZXInKTtcbiAgICAgICAgbGF5ZXJzLmZvckVhY2goKGNhbnZhcykgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsID0gY2FudmFzIGFzIEhUTUxDYW52YXNFbGVtZW50O1xuICAgICAgICAgIGlmIChlbC53aWR0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG9wYWNpdHkgPSBOdW1iZXIoZWwucGFyZW50RWxlbWVudD8uc3R5bGUub3BhY2l0eSB8fCAnMScpO1xuICAgICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gTnVtYmVyLmlzRmluaXRlKG9wYWNpdHkpID8gb3BhY2l0eSA6IDE7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBlbC5zdHlsZS50cmFuc2Zvcm07XG4gICAgICAgICAgICBjb25zdCBtYXRyaXggPSB0cmFuc2Zvcm1cbiAgICAgICAgICAgICAgLm1hdGNoKC9ebWF0cml4XFwoKFteKV0qKVxcKSQvKT8uWzFdXG4gICAgICAgICAgICAgID8uc3BsaXQoJywnKVxuICAgICAgICAgICAgICAubWFwKE51bWJlcik7XG4gICAgICAgICAgICBpZiAobWF0cml4ICYmIG1hdHJpeC5sZW5ndGggPT09IDYpIHtcbiAgICAgICAgICAgICAgY3R4LnNldFRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICBtYXRyaXhbMF0sXG4gICAgICAgICAgICAgICAgbWF0cml4WzFdLFxuICAgICAgICAgICAgICAgIG1hdHJpeFsyXSxcbiAgICAgICAgICAgICAgICBtYXRyaXhbM10sXG4gICAgICAgICAgICAgICAgbWF0cml4WzRdLFxuICAgICAgICAgICAgICAgIG1hdHJpeFs1XSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGN0eC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHguZHJhd0ltYWdlKGVsLCAwLCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjdHguc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSAxO1xuXG4gICAgICAgIG1hcENhbnZhcy50b0Jsb2IoKGJsb2IpID0+IHtcbiAgICAgICAgICB0aGlzLmJ1c3kuc2V0KGZhbHNlKTtcbiAgICAgICAgICBpZiAoIWJsb2IpIHtcbiAgICAgICAgICAgIHRoaXMuY2FwdHVyZUVycm9yLmVtaXQobmV3IEVycm9yKCdLaMO0bmcgdOG6oW8gxJHGsOG7o2Mg4bqjbmggUE5HLicpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICBjb25zdCBhbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgICAgYW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgICAgICAgYW5jaG9yLmRvd25sb2FkID0gdGhpcy5maWxlbmFtZSgpO1xuICAgICAgICAgIGFuY2hvci5jbGljaygpO1xuICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgICAgICAgICB0aGlzLmNhcHR1cmVkLmVtaXQoKTtcbiAgICAgICAgfSwgJ2ltYWdlL3BuZycpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuYnVzeS5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLmNhcHR1cmVFcnJvci5lbWl0KGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbWFwLnJlbmRlclN5bmMoKTtcbiAgfVxufVxuIiwiPGJ1dHRvblxuICB0eXBlPVwiYnV0dG9uXCJcbiAgY2xhc3M9XCJnZW8tbWFwLXNuYXBzaG90X19idG5cIlxuICBbbnotdG9vbHRpcF09XCJsYWJlbCgpXCJcbiAgbnpUb29sdGlwUGxhY2VtZW50PVwibGVmdFwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwibGFiZWwoKVwiXG4gIFtkaXNhYmxlZF09XCIhY29udHJvbGxlcigpIHx8IGJ1c3koKVwiXG4gIChjbGljayk9XCJjYXB0dXJlKClcIlxuPlxuICA8Z2VvLWljb24gdHlwZT1cImNhbWVyYVwiIHNpemU9XCJtZFwiIC8+XG48L2J1dHRvbj5cbiJdfQ==