@ethlete/cdk 4.12.0 → 4.13.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.
@@ -1,20 +1,24 @@
1
- import { Injectable, InjectionToken, computed, inject, isSignal, signal } from '@angular/core';
2
- import { toObservable, toSignal } from '@angular/core/rxjs-interop';
3
- import { fromNextFrame } from '@ethlete/core';
4
- import { map, switchMap } from 'rxjs';
5
- import * as i0 from "@angular/core";
1
+ import { DestroyRef, InjectionToken, computed, inject, isSignal, signal } from '@angular/core';
2
+ import { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';
3
+ import { Router } from '@angular/router';
4
+ import { RouterStateService, createComponentId, fromNextFrame } from '@ethlete/core';
5
+ import { map, skip, switchMap, tap } from 'rxjs';
6
+ import { OverlayRef } from './overlay-ref';
6
7
  export const OVERLAY_ROUTER_CONFIG_TOKEN = new InjectionToken('OVERLAY_ROUTER_CONFIG_TOKEN');
7
8
  export class OverlayRouterService {
8
9
  constructor() {
9
- this.config = inject(OVERLAY_ROUTER_CONFIG_TOKEN);
10
- this.syncCurrentRoute = signal('/');
10
+ this._router = inject(Router);
11
+ this._routerStateService = inject(RouterStateService);
12
+ this._id = createComponentId('ovr');
13
+ this._overlayRef = inject(OverlayRef);
14
+ this._config = inject(OVERLAY_ROUTER_CONFIG_TOKEN);
15
+ this._syncCurrentRoute = signal(this._getInitialRoute());
16
+ this._nativeBrowserTempBackNavigationStack = signal([]);
11
17
  // The current route, but delayed by one frame to ensure that the needed animation classes are applied.
12
- this.currentRoute = toSignal(toObservable(this.syncCurrentRoute).pipe(switchMap((r) => fromNextFrame().pipe(map(() => r)))), { initialValue: '/' });
13
- this.routeHistory = signal([]);
14
- this.rootHistoryItem = signal(null);
18
+ this.currentRoute = toSignal(toObservable(this._syncCurrentRoute).pipe(switchMap((r) => fromNextFrame().pipe(map(() => r)))), { initialValue: this._getInitialRoute() });
15
19
  this.extraRoutes = signal([]);
16
20
  this.routes = computed(() => {
17
- const allRoutes = [...this.config.routes, ...this.extraRoutes()];
21
+ const allRoutes = [...this._config.routes, ...this.extraRoutes()];
18
22
  const allRoundsWithTransformedInputs = allRoutes.map((route) => {
19
23
  return {
20
24
  ...route,
@@ -32,7 +36,7 @@ export class OverlayRouterService {
32
36
  return allRoundsWithTransformedInputs;
33
37
  });
34
38
  this.currentPage = computed(() => {
35
- const currentRoute = this.syncCurrentRoute();
39
+ const currentRoute = this._syncCurrentRoute();
36
40
  for (const route of this.routes()) {
37
41
  if (route.path === currentRoute) {
38
42
  return route;
@@ -40,18 +44,50 @@ export class OverlayRouterService {
40
44
  }
41
45
  return null;
42
46
  });
43
- this.lastPage = computed(() => {
44
- const history = this.routeHistory();
45
- if (history.length) {
46
- return history[history.length - 1];
47
+ this.navigationDirection = signal('forward');
48
+ this._disableCloseOnNavigation();
49
+ this._updateBrowserUrl(this._syncCurrentRoute());
50
+ this._routerStateService
51
+ .selectQueryParam(this._id)
52
+ .pipe(takeUntilDestroyed(), skip(1), tap((route) => {
53
+ // The user navigated back or forward using the browser history
54
+ if (!route) {
55
+ // The route query param no longer exists - close the overlay
56
+ this._overlayRef.close();
47
57
  }
48
- return null;
49
- });
50
- this.canGoBack = computed(() => {
51
- return this.routeHistory().length;
58
+ else if (route !== this._syncCurrentRoute()) {
59
+ const navStack = this._nativeBrowserTempBackNavigationStack();
60
+ const currentRoute = this._syncCurrentRoute();
61
+ if (!navStack.length) {
62
+ // If the nav stack is empty the only way to navigate is back.
63
+ this.navigate(route, { navigationDirection: 'backward' });
64
+ this._nativeBrowserTempBackNavigationStack.set([currentRoute]);
65
+ }
66
+ else {
67
+ const lastItem = navStack[navStack.length - 1];
68
+ if (route === lastItem) {
69
+ // The new route matches the last item in the back nav stack.
70
+ // This means we are going forward again.
71
+ this.navigate(route, { navigationDirection: 'forward' });
72
+ this._nativeBrowserTempBackNavigationStack.set(navStack.slice(0, -1));
73
+ }
74
+ else {
75
+ // Else we are going back.
76
+ this.navigate(route, { navigationDirection: 'backward' });
77
+ this._nativeBrowserTempBackNavigationStack.set([...navStack, currentRoute]);
78
+ }
79
+ }
80
+ }
81
+ else {
82
+ // The navigation was triggered by ui interaction. Clear the back nav stack.
83
+ this._nativeBrowserTempBackNavigationStack.set([]);
84
+ }
85
+ }))
86
+ .subscribe();
87
+ inject(DestroyRef).onDestroy(() => {
88
+ // Remove the dialog route from the browser url
89
+ this._updateBrowserUrl(undefined);
52
90
  });
53
- this.navigationDirection = signal('forward');
54
- this._navigateToInitialRoute();
55
91
  }
56
92
  navigate(route, config) {
57
93
  const resolvedRoute = this.resolvePath(route);
@@ -66,14 +102,6 @@ export class OverlayRouterService {
66
102
  }
67
103
  this._updateCurrentRoute(resolvedRoute.route);
68
104
  }
69
- back() {
70
- const prevRoute = this.lastPage();
71
- if (!prevRoute)
72
- return;
73
- this.navigationDirection.set('backward');
74
- this.routeHistory.set(this.routeHistory().slice(0, -1));
75
- this._updateCurrentRoute(prevRoute, { updateHistory: false });
76
- }
77
105
  resolvePath(route) {
78
106
  if (Array.isArray(route)) {
79
107
  route = route.join('/');
@@ -85,7 +113,7 @@ export class OverlayRouterService {
85
113
  const isReplaceCurrent = route.startsWith('./');
86
114
  const isBack = route.startsWith('../');
87
115
  const isForward = !isAbsolute && !isReplaceCurrent && !isBack;
88
- const curr = this.syncCurrentRoute();
116
+ const curr = this._syncCurrentRoute();
89
117
  if (isForward) {
90
118
  route = `${curr}/${route}`;
91
119
  }
@@ -123,56 +151,33 @@ export class OverlayRouterService {
123
151
  removeRoute(path) {
124
152
  this.extraRoutes.set(this.extraRoutes().filter((r) => r.path !== path));
125
153
  }
126
- _updateCurrentRoute(route, config) {
127
- if (route === this.syncCurrentRoute())
154
+ _updateCurrentRoute(route) {
155
+ if (route === this._syncCurrentRoute())
128
156
  return;
129
157
  if (this.routes().findIndex((r) => r.path === route) === -1) {
130
- console.error(`The route "${route}" does not exist.`, this.config);
158
+ console.error(`The route "${route}" does not exist.`, this._config);
131
159
  return;
132
160
  }
133
- const lastRoute = this.syncCurrentRoute();
134
- if (config?.updateHistory === true || config?.updateHistory === undefined) {
135
- const history = this.routeHistory();
136
- if (history[history.length - 1] !== lastRoute) {
137
- const newHistory = [...history, lastRoute];
138
- // limit the history to 25 items
139
- if (newHistory.length > 25) {
140
- newHistory.shift();
141
- }
142
- const rootHistoryItem = this.rootHistoryItem();
143
- if (rootHistoryItem && newHistory[0] !== rootHistoryItem) {
144
- newHistory.unshift(rootHistoryItem);
145
- }
146
- this.routeHistory.set(newHistory);
147
- }
148
- }
149
- this.syncCurrentRoute.set(route);
161
+ this._syncCurrentRoute.set(route);
162
+ this._updateBrowserUrl(route);
150
163
  }
151
- _removeItemFromHistory(item) {
152
- const history = this.routeHistory();
153
- const cleanedHistory = history.filter((i) => i !== item);
154
- if (cleanedHistory.length === 1 && cleanedHistory[0] === this.syncCurrentRoute()) {
155
- this.routeHistory.set([]);
156
- }
157
- else {
158
- this.routeHistory.set(cleanedHistory);
159
- }
164
+ _getInitialRoute() {
165
+ return this._config.initialRoute ?? this._config.routes[0]?.path ?? '/';
160
166
  }
161
167
  _navigateToInitialRoute() {
162
- if (this.config.initialRoute) {
163
- this._updateCurrentRoute(this.config.initialRoute ?? '/', { updateHistory: false });
164
- }
165
- else {
166
- const first = this.config.routes[0]?.path;
167
- this._updateCurrentRoute(first ?? '/', { updateHistory: false });
168
- }
168
+ this._updateCurrentRoute(this._getInitialRoute());
169
+ }
170
+ _updateBrowserUrl(route) {
171
+ this._router.navigate([this._routerStateService.route], {
172
+ queryParams: { [this._id]: route },
173
+ queryParamsHandling: 'merge',
174
+ });
175
+ }
176
+ _disableCloseOnNavigation() {
177
+ // @ts-expect-error - private property
178
+ this._overlayRef._cdkRef.overlayRef._locationChanges?.unsubscribe?.();
169
179
  }
170
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: OverlayRouterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
171
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: OverlayRouterService }); }
172
180
  }
173
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: OverlayRouterService, decorators: [{
174
- type: Injectable
175
- }], ctorParameters: () => [] });
176
181
  export const provideOverlayRouterConfig = (config) => {
177
182
  return [
178
183
  {
@@ -182,4 +187,4 @@ export const provideOverlayRouterConfig = (config) => {
182
187
  OverlayRouterService,
183
188
  ];
184
189
  };
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS1yb3V0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvb3ZlcmxheS9jb21wb25lbnRzL292ZXJsYXkvdXRpbHMvb3ZlcmxheS1yb3V0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFFdEMsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxjQUFjLENBQXNCLDZCQUE2QixDQUFDLENBQUM7QUE0Q2xILE1BQU0sT0FBTyxvQkFBb0I7SUFtRS9CO1FBbEVBLFdBQU0sR0FBRyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUU3QyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFL0IsdUdBQXVHO1FBQ3ZHLGlCQUFZLEdBQUcsUUFBUSxDQUNyQixZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDOUYsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQ3RCLENBQUM7UUFFRixpQkFBWSxHQUFHLE1BQU0sQ0FBVyxFQUFFLENBQUMsQ0FB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IENvbXBvbmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBjb21wdXRlZCwgaW5qZWN0LCBpc1NpZ25hbCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgZnJvbU5leHRGcmFtZSB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNvbnN0IE9WRVJMQVlfUk9VVEVSX0NPTkZJR19UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxPdmVybGF5Um91dGVyQ29uZmlnPignT1ZFUkxBWV9ST1VURVJfQ09ORklHX1RPS0VOJyk7XG5cbmV4cG9ydCB0eXBlIE92ZXJsYXlSb3V0ZSA9IHtcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdG8gcmVuZGVyLlxuICAgKi9cbiAgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBUaGUgcm91dGUgb2YgdGhlIHBhZ2UuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIFwiL1wiIC8vIFRoZSByb290IHJvdXRlXG4gICAqIFwiL3R3b1wiIC8vIFRoZSByb3V0ZSBcInR3b1wiXG4gICAqL1xuICBwYXRoOiBgLyR7c3RyaW5nfWA7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dHMgdG8gcGFzcyB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgaW5wdXRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59O1xuXG5leHBvcnQgdHlwZSBPdmVybGF5Um91dGVyQ29uZmlnID0ge1xuICAvKipcbiAgICogVGhlIHJvdXRlcyB0byBiZSBhYmxlIHRvIG5hdmlnYXRlIHRvLlxuICAgKi9cbiAgcm91dGVzOiBPdmVybGF5Um91dGVbXTtcblxuICAvKipcbiAgICogVGhlIHJvdXRlIG9uIHdoaWNoIHRvIHN0YXJ0LlxuICAgKiBAZGVmYXVsdCBcIlwiIC8vIFRoZSByb290IHJvdXRlXG4gICAqIEBkZWZhdWx0IHJvdXRlc1swXS5wYXRoIC8vIFRoZSBmaXJzdCByb3V0ZSBpZiBubyByb290IHJvdXRlIGlzIGRlZmluZWRcbiAgICovXG4gIGluaXRpYWxSb3V0ZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIE92ZXJsYXlSb3V0ZXJOYXZpZ2F0aW9uRGlyZWN0aW9uID0gJ2ZvcndhcmQnIHwgJ2JhY2t3YXJkJztcblxuZXhwb3J0IHR5cGUgT3ZlcmxheVJvdXRlck5hdmlnYXRlQ29uZmlnID0ge1xuICBuYXZpZ2F0aW9uRGlyZWN0aW9uPzogT3ZlcmxheVJvdXRlck5hdmlnYXRpb25EaXJlY3Rpb247XG59O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT3ZlcmxheVJvdXRlclNlcnZpY2Uge1xuICBjb25maWcgPSBpbmplY3QoT1ZFUkxBWV9ST1VURVJfQ09ORklHX1RPS0VOKTtcblxuICBzeW5jQ3VycmVudFJvdXRlID0gc2lnbmFsKCcvJyk7XG5cbiAgLy8gVGhlIGN1cnJlbnQgcm91dGUsIGJ1dCBkZWxheWVkIGJ5IG9uZSBmcmFtZSB0byBlbnN1cmUgdGhhdCB0aGUgbmVlZGVkIGFuaW1hdGlvbiBjbGFzc2VzIGFyZSBhcHBsaWVkLlxuICBjdXJyZW50Um91dGUgPSB0b1NpZ25hbChcbiAgICB0b09ic2VydmFibGUodGhpcy5zeW5jQ3VycmVudFJvdXRlKS5waXBlKHN3aXRjaE1hcCgocikgPT4gZnJvbU5leHRGcmFtZSgpLnBpcGUobWFwKCgpID0+IHIpKSkpLFxuICAgIHsgaW5pdGlhbFZhbHVlOiAnLycgfSxcbiAgKTtcblxuICByb3V0ZUhpc3RvcnkgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcbiAgcm9vdEhpc3RvcnlJdGVtID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBleHRyYVJvdXRlcyA9IHNpZ25hbDxPdmVybGF5Um91dGVbXT4oW10pO1xuXG4gIHJvdXRlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBhbGxSb3V0ZXMgPSBbLi4udGhpcy5jb25maWcucm91dGVzLCAuLi50aGlzLmV4dHJhUm91dGVzKCldO1xuXG4gICAgY29uc3QgYWxsUm91bmRzV2l0aFRyYW5zZm9ybWVkSW5wdXRzID0gYWxsUm91dGVzLm1hcCgocm91dGUpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnJvdXRlLFxuICAgICAgICBpbnB1dHM6IE9iamVjdC5lbnRyaWVzKHJvdXRlLmlucHV0cyA/PyB7fSkucmVkdWNlKFxuICAgICAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzU2lnbmFsKHZhbHVlKSkge1xuICAgICAgICAgICAgICBhY2Nba2V5XSA9IHZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhY2Nba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sXG4gICAgICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFsbFJvdW5kc1dpdGhUcmFuc2Zvcm1lZElucHV0cztcbiAgfSk7XG5cbiAgY3VycmVudFBhZ2UgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY3VycmVudFJvdXRlID0gdGhpcy5zeW5jQ3VycmVudFJvdXRlKCk7XG5cbiAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHRoaXMucm91dGVzKCkpIHtcbiAgICAgIGlmIChyb3V0ZS5wYXRoID09PSBjdXJyZW50Um91dGUpIHtcbiAgICAgICAgcmV0dXJuIHJvdXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9KTtcblxuICBsYXN0UGFnZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBoaXN0b3J5ID0gdGhpcy5yb3V0ZUhpc3RvcnkoKTtcblxuICAgIGlmIChoaXN0b3J5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGhpc3RvcnlbaGlzdG9yeS5sZW5ndGggLSAxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSk7XG5cbiAgY2FuR29CYWNrID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnJvdXRlSGlzdG9yeSgpLmxlbmd0aDtcbiAgfSk7XG5cbiAgbmF2aWdhdGlvbkRpcmVjdGlvbiA9IHNpZ25hbDxPdmVybGF5Um91dGVyTmF2aWdhdGlvbkRpcmVjdGlvbj4oJ2ZvcndhcmQnKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9uYXZpZ2F0ZVRvSW5pdGlhbFJvdXRlKCk7XG4gIH1cblxuICBuYXZpZ2F0ZShyb3V0ZTogc3RyaW5nIHwgKHN0cmluZyB8IG51bWJlcilbXSwgY29uZmlnPzogT3ZlcmxheVJvdXRlck5hdmlnYXRlQ29uZmlnKSB7XG4gICAgY29uc3QgcmVzb2x2ZWRSb3V0ZSA9IHRoaXMucmVzb2x2ZVBhdGgocm91dGUpO1xuICAgIGlmIChjb25maWc/Lm5hdmlnYXRpb25EaXJlY3Rpb24pIHtcbiAgICAgIHRoaXMubmF2aWdhdGlvbkRpcmVjdGlvbi5zZXQoY29uZmlnLm5hdmlnYXRpb25EaXJlY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAocmVzb2x2ZWRSb3V0ZS50eXBlID09PSAnYmFjaycpIHtcbiAgICAgIHRoaXMubmF2aWdhdGlvbkRpcmVjdGlvbi5zZXQoJ2JhY2t3YXJkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubmF2aWdhdGlvbkRpcmVjdGlvbi5zZXQoJ2ZvcndhcmQnKTtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVDdXJyZW50Um91dGUocmVzb2x2ZWRSb3V0ZS5yb3V0ZSk7XG4gIH1cblxuICBiYWNrKCkge1xuICAgIGNvbnN0IHByZXZSb3V0ZSA9IHRoaXMubGFzdFBhZ2UoKTtcblxuICAgIGlmICghcHJldlJvdXRlKSByZXR1cm47XG5cbiAgICB0aGlzLm5hdmlnYXRpb25EaXJlY3Rpb24uc2V0KCdiYWNrd2FyZCcpO1xuXG4gICAgdGhpcy5yb3V0ZUhpc3Rvcnkuc2V0KHRoaXMucm91dGVIaXN0b3J5KCkuc2xpY2UoMCwgLTEpKTtcbiAgICB0aGlzLl91cGRhdGVDdXJyZW50Um91dGUocHJldlJvdXRlLCB7IHVwZGF0ZUhpc3Rvcnk6IGZhbHNlIH0pO1xuICB9XG5cbiAgcmVzb2x2ZVBhdGgocm91dGU6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyb3V0ZSkpIHtcbiAgICAgIHJvdXRlID0gcm91dGUuam9pbignLycpO1xuICAgIH1cblxuICAgIGlmIChyb3V0ZSA9PT0gJycpIHtcbiAgICAgIHJvdXRlID0gJy8nO1xuICAgIH1cblxuICAgIGNvbnN0IGlzQWJzb2x1dGUgPSByb3V0ZS5zdGFydHNXaXRoKCcvJyk7XG4gICAgY29uc3QgaXNSZXBsYWNlQ3VycmVudCA9IHJvdXRlLnN0YXJ0c1dpdGgoJy4vJyk7XG4gICAgY29uc3QgaXNCYWNrID0gcm91dGUuc3RhcnRzV2l0aCgnLi4vJyk7XG4gICAgY29uc3QgaXNGb3J3YXJkID0gIWlzQWJzb2x1dGUgJiYgIWlzUmVwbGFjZUN1cnJlbnQgJiYgIWlzQmFjaztcblxuICAgIGNvbnN0IGN1cnIgPSB0aGlzLnN5bmNDdXJyZW50Um91dGUoKTtcblxuICAgIGlmIChpc0ZvcndhcmQpIHtcbiAgICAgIHJvdXRlID0gYCR7Y3Vycn0vJHtyb3V0ZX1gO1xuICAgIH0gZWxzZSBpZiAoaXNSZXBsYWNlQ3VycmVudCkge1xuICAgICAgY29uc3QgY3VyclNlZ21lbnRzID0gY3Vyci5zcGxpdCgnLycpLmZpbHRlcigocykgPT4gcyAhPT0gJycpO1xuICAgICAgY3VyclNlZ21lbnRzLnBvcCgpO1xuXG4gICAgICBjb25zdCBuZXdTZWdtZW50cyA9IHJvdXRlLnNwbGl0KCcvJykuZmlsdGVyKChzKSA9PiBzICE9PSAnLicpO1xuXG4gICAgICByb3V0ZSA9IGAvJHtjdXJyU2VnbWVudHMuY29uY2F0KG5ld1NlZ21lbnRzKS5qb2luKCcvJyl9YDtcbiAgICB9IGVsc2UgaWYgKGlzQmFjaykge1xuICAgICAgY29uc3QgY3VyclNlZ21lbnRzID0gY3Vyci5zcGxpdCgnLycpLmZpbHRlcigocykgPT4gcyAhPT0gJycpO1xuICAgICAgY29uc3QgbmV3U2VnbWVudHMgPSByb3V0ZS5zcGxpdCgnLycpLmZpbHRlcigocykgPT4gcyAhPT0gJy4uJyk7XG4gICAgICBjb25zdCBzdGVwc0JhY2sgPSByb3V0ZS5zcGxpdCgnLycpLmZpbHRlcigocykgPT4gcyA9PT0gJy4uJykubGVuZ3RoO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ZXBzQmFjazsgaSsrKSB7XG4gICAgICAgIGN1cnJTZWdtZW50cy5wb3AoKTtcbiAgICAgIH1cblxuICAgICAgcm91dGUgPSBgLyR7Y3VyclNlZ21lbnRzLmNvbmNhdChuZXdTZWdtZW50cykuam9pbignLycpfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJvdXRlLFxuICAgICAgdHlwZTpcbiAgICAgICAgaXNCYWNrIHx8IHJvdXRlID09PSAnLydcbiAgICAgICAgICA/ICdiYWNrJ1xuICAgICAgICAgIDogaXNSZXBsYWNlQ3VycmVudFxuICAgICAgICAgICAgPyAncmVwbGFjZS1jdXJyZW50J1xuICAgICAgICAgICAgOiBpc0Fic29sdXRlXG4gICAgICAgICAgICAgID8gJ2Fic29sdXRlJ1xuICAgICAgICAgICAgICA6IGlzRm9yd2FyZFxuICAgICAgICAgICAgICAgID8gJ2ZvcndhcmQnXG4gICAgICAgICAgICAgICAgOiAndW5rbm93bicsXG4gICAgfSBhcyBjb25zdDtcbiAgfVxuXG4gIGFkZFJvdXRlKHJvdXRlOiBPdmVybGF5Um91dGUpIHtcbiAgICB0aGlzLmV4dHJhUm91dGVzLnNldChbLi4udGhpcy5leHRyYVJvdXRlcygpLCByb3V0ZV0pO1xuICB9XG5cbiAgcmVtb3ZlUm91dGUocGF0aDogc3RyaW5nKSB7XG4gICAgdGhpcy5leHRyYVJvdXRlcy5zZXQodGhpcy5leHRyYVJvdXRlcygpLmZpbHRlcigocikgPT4gci5wYXRoICE9PSBwYXRoKSk7XG4gIH1cblxuICBfdXBkYXRlQ3VycmVudFJvdXRlKHJvdXRlOiBzdHJpbmcsIGNvbmZpZz86IHsgdXBkYXRlSGlzdG9yeT86IGJvb2xlYW4gfSkge1xuICAgIGlmIChyb3V0ZSA9PT0gdGhpcy5zeW5jQ3VycmVudFJvdXRlKCkpIHJldHVybjtcblxuICAgIGlmICh0aGlzLnJvdXRlcygpLmZpbmRJbmRleCgocikgPT4gci5wYXRoID09PSByb3V0ZSkgPT09IC0xKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBUaGUgcm91dGUgXCIke3JvdXRlfVwiIGRvZXMgbm90IGV4aXN0LmAsIHRoaXMuY29uZmlnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsYXN0Um91dGUgPSB0aGlzLnN5bmNDdXJyZW50Um91dGUoKTtcblxuICAgIGlmIChjb25maWc/LnVwZGF0ZUhpc3RvcnkgPT09IHRydWUgfHwgY29uZmlnPy51cGRhdGVIaXN0b3J5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGhpc3RvcnkgPSB0aGlzLnJvdXRlSGlzdG9yeSgpO1xuXG4gICAgICBpZiAoaGlzdG9yeVtoaXN0b3J5Lmxlbmd0aCAtIDFdICE9PSBsYXN0Um91dGUpIHtcbiAgICAgICAgY29uc3QgbmV3SGlzdG9yeSA9IFsuLi5oaXN0b3J5LCBsYXN0Um91dGVdO1xuXG4gICAgICAgIC8vIGxpbWl0IHRoZSBoaXN0b3J5IHRvIDI1IGl0ZW1zXG4gICAgICAgIGlmIChuZXdIaXN0b3J5Lmxlbmd0aCA+IDI1KSB7XG4gICAgICAgICAgbmV3SGlzdG9yeS5zaGlmdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm9vdEhpc3RvcnlJdGVtID0gdGhpcy5yb290SGlzdG9yeUl0ZW0oKTtcbiAgICAgICAgaWYgKHJvb3RIaXN0b3J5SXRlbSAmJiBuZXdIaXN0b3J5WzBdICE9PSByb290SGlzdG9yeUl0ZW0pIHtcbiAgICAgICAgICBuZXdIaXN0b3J5LnVuc2hpZnQocm9vdEhpc3RvcnlJdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucm91dGVIaXN0b3J5LnNldChuZXdIaXN0b3J5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN5bmNDdXJyZW50Um91dGUuc2V0KHJvdXRlKTtcbiAgfVxuXG4gIF9yZW1vdmVJdGVtRnJvbUhpc3RvcnkoaXRlbTogc3RyaW5nKSB7XG4gICAgY29uc3QgaGlzdG9yeSA9IHRoaXMucm91dGVIaXN0b3J5KCk7XG4gICAgY29uc3QgY2xlYW5lZEhpc3RvcnkgPSBoaXN0b3J5LmZpbHRlcigoaSkgPT4gaSAhPT0gaXRlbSk7XG5cbiAgICBpZiAoY2xlYW5lZEhpc3RvcnkubGVuZ3RoID09PSAxICYmIGNsZWFuZWRIaXN0b3J5WzBdID09PSB0aGlzLnN5bmNDdXJyZW50Um91dGUoKSkge1xuICAgICAgdGhpcy5yb3V0ZUhpc3Rvcnkuc2V0KFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3V0ZUhpc3Rvcnkuc2V0KGNsZWFuZWRIaXN0b3J5KTtcbiAgICB9XG4gIH1cblxuICBfbmF2aWdhdGVUb0luaXRpYWxSb3V0ZSgpIHtcbiAgICBpZiAodGhpcy5jb25maWcuaW5pdGlhbFJvdXRlKSB7XG4gICAgICB0aGlzLl91cGRhdGVDdXJyZW50Um91dGUodGhpcy5jb25maWcuaW5pdGlhbFJvdXRlID8/ICcvJywgeyB1cGRhdGVIaXN0b3J5OiBmYWxzZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlyc3QgPSB0aGlzLmNvbmZpZy5yb3V0ZXNbMF0/LnBhdGg7XG4gICAgICB0aGlzLl91cGRhdGVDdXJyZW50Um91dGUoZmlyc3QgPz8gJy8nLCB7IHVwZGF0ZUhpc3Rvcnk6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcHJvdmlkZU92ZXJsYXlSb3V0ZXJDb25maWcgPSAoY29uZmlnOiBPdmVybGF5Um91dGVyQ29uZmlnKSA9PiB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogT1ZFUkxBWV9ST1VURVJfQ09ORklHX1RPS0VOLFxuICAgICAgdXNlVmFsdWU6IGNvbmZpZyxcbiAgICB9LFxuICAgIE92ZXJsYXlSb3V0ZXJTZXJ2aWNlLFxuICBdO1xufTtcbiJdfQ==
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS1yb3V0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvb3ZlcmxheS9jb21wb25lbnRzL292ZXJsYXkvdXRpbHMvb3ZlcmxheS1yb3V0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQVksUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckYsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLElBQUksY0FBYyxDQUFzQiw2QkFBNkIsQ0FBQyxDQUFDO0FBMkNsSCxNQUFNLE9BQU8sb0JBQW9CO0lBd0QvQjtRQXZEQSxZQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLHdCQUFtQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2pELFFBQUcsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxZQUFPLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFOUMsc0JBQWlC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Z0IsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDO0lBQ3hFLENBQUM7Q0FDRjtBQUVELE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLENBQUMsTUFBMkIsRUFBYyxFQUFFO0lBQ3BGLE9BQU87UUFDTDtZQUNFLE9BQU8sRUFBRSwyQkFBMkI7WUFDcEMsUUFBUSxFQUFFLE1BQU07U0FDakI7UUFDRCxvQkFBb0I7S0FDckIsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IERlc3Ryb3lSZWYsIEluamVjdGlvblRva2VuLCBQcm92aWRlciwgY29tcHV0ZWQsIGluamVjdCwgaXNTaWduYWwsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFJvdXRlclN0YXRlU2VydmljZSwgY3JlYXRlQ29tcG9uZW50SWQsIGZyb21OZXh0RnJhbWUgfSBmcm9tICdAZXRobGV0ZS9jb3JlJztcbmltcG9ydCB7IG1hcCwgc2tpcCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE92ZXJsYXlSZWYgfSBmcm9tICcuL292ZXJsYXktcmVmJztcblxuZXhwb3J0IGNvbnN0IE9WRVJMQVlfUk9VVEVSX0NPTkZJR19UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxPdmVybGF5Um91dGVyQ29uZmlnPignT1ZFUkxBWV9ST1VURVJfQ09ORklHX1RPS0VOJyk7XG5cbmV4cG9ydCB0eXBlIE92ZXJsYXlSb3V0ZSA9IHtcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdG8gcmVuZGVyLlxuICAgKi9cbiAgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBUaGUgcm91dGUgb2YgdGhlIHBhZ2UuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIFwiL1wiIC8vIFRoZSByb290IHJvdXRlXG4gICAqIFwiL3R3b1wiIC8vIFRoZSByb3V0ZSBcInR3b1wiXG4gICAqL1xuICBwYXRoOiBgLyR7c3RyaW5nfWA7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dHMgdG8gcGFzcyB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgaW5wdXRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59O1xuXG5leHBvcnQgdHlwZSBPdmVybGF5Um91dGVyQ29uZmlnID0ge1xuICAvKipcbiAgICogVGhlIHJvdXRlcyB0byBiZSBhYmxlIHRvIG5hdmlnYXRlIHRvLlxuICAgKi9cbiAgcm91dGVzOiBPdmVybGF5Um91dGVbXTtcblxuICAvKipcbiAgICogVGhlIHJvdXRlIG9uIHdoaWNoIHRvIHN0YXJ0LlxuICAgKiBAZGVmYXVsdCBcIlwiIC8vIFRoZSByb290IHJvdXRlXG4gICAqIEBkZWZhdWx0IHJvdXRlc1swXS5wYXRoIC8vIFRoZSBmaXJzdCByb3V0ZSBpZiBubyByb290IHJvdXRlIGlzIGRlZmluZWRcbiAgICovXG4gIGluaXRpYWxSb3V0ZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIE92ZXJsYXlSb3V0ZXJOYXZpZ2F0aW9uRGlyZWN0aW9uID0gJ2ZvcndhcmQnIHwgJ2JhY2t3YXJkJztcblxuZXhwb3J0IHR5cGUgT3ZlcmxheVJvdXRlck5hdmlnYXRlQ29uZmlnID0ge1xuICBuYXZpZ2F0aW9uRGlyZWN0aW9uPzogT3ZlcmxheVJvdXRlck5hdmlnYXRpb25EaXJlY3Rpb247XG59O1xuXG5leHBvcnQgY2xhc3MgT3ZlcmxheVJvdXRlclNlcnZpY2Uge1xuICBfcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIF9yb3V0ZXJTdGF0ZVNlcnZpY2UgPSBpbmplY3QoUm91dGVyU3RhdGVTZXJ2aWNlKTtcbiAgX2lkID0gY3JlYXRlQ29tcG9uZW50SWQoJ292cicpO1xuICBfb3ZlcmxheVJlZiA9IGluamVjdChPdmVybGF5UmVmKTtcbiAgX2NvbmZpZyA9IGluamVjdChPVkVSTEFZX1JPVVRFUl9DT05GSUdfVE9LRU4pO1xuXG4gIF9zeW5jQ3VycmVudFJvdXRlID0gc2lnbmFsKHRoaXMuX2dldEluaXRpYWxSb3V0ZSgpKTtcbiAgX25hdGl2ZUJyb3dzZXJUZW1wQmFja05hdmlnYXRpb25TdGFjayA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuXG4gIC8vIFRoZSBjdXJyZW50IHJvdXRlLCBidXQgZGVsYXllZCBieSBvbmUgZnJhbWUgdG8gZW5zdXJlIHRoYXQgdGhlIG5lZWRlZCBhbmltYXRpb24gY2xhc3NlcyBhcmUgYXBwbGllZC5cbiAgY3VycmVudFJvdXRlID0gdG9TaWduYWwoXG4gICAgdG9PYnNlcnZhYmxlKHRoaXMuX3N5bmNDdXJyZW50Um91dGUpLnBpcGUoc3dpdGNoTWFwKChyKSA9PiBmcm9tTmV4dEZyYW1lKCkucGlwZShtYXAoKCkgPT4gcikpKSksXG4gICAgeyBpbml0aWFsVmFsdWU6IHRoaXMuX2dldEluaXRpYWxSb3V0ZSgpIH0sXG4gICk7XG5cbiAgZXh0cmFSb3V0ZXMgPSBzaWduYWw8T3ZlcmxheVJvdXRlW10+KFtdKTtcblxuICByb3V0ZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYWxsUm91dGVzID0gWy4uLnRoaXMuX2NvbmZpZy5yb3V0ZXMsIC4uLnRoaXMuZXh0cmFSb3V0ZXMoKV07XG5cbiAgICBjb25zdCBhbGxSb3VuZHNXaXRoVHJhbnNmb3JtZWRJbnB1dHMgPSBhbGxSb3V0ZXMubWFwKChyb3V0ZSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucm91dGUsXG4gICAgICAgIGlucHV0czogT2JqZWN0LmVudHJpZXMocm91dGUuaW5wdXRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNTaWduYWwodmFsdWUpKSB7XG4gICAgICAgICAgICAgIGFjY1trZXldID0gdmFsdWUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFjY1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYWxsUm91bmRzV2l0aFRyYW5zZm9ybWVkSW5wdXRzO1xuICB9KTtcblxuICBjdXJyZW50UGFnZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50Um91dGUgPSB0aGlzLl9zeW5jQ3VycmVudFJvdXRlKCk7XG5cbiAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHRoaXMucm91dGVzKCkpIHtcbiAgICAgIGlmIChyb3V0ZS5wYXRoID09PSBjdXJyZW50Um91dGUpIHtcbiAgICAgICAgcmV0dXJuIHJvdXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9KTtcblxuICBuYXZpZ2F0aW9uRGlyZWN0aW9uID0gc2lnbmFsPE92ZXJsYXlSb3V0ZXJOYXZpZ2F0aW9uRGlyZWN0aW9uPignZm9yd2FyZCcpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2Rpc2FibGVDbG9zZU9uTmF2aWdhdGlvbigpO1xuICAgIHRoaXMuX3VwZGF0ZUJyb3dzZXJVcmwodGhpcy5fc3luY0N1cnJlbnRSb3V0ZSgpKTtcblxuICAgIHRoaXMuX3JvdXRlclN0YXRlU2VydmljZVxuICAgICAgLnNlbGVjdFF1ZXJ5UGFyYW0odGhpcy5faWQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICAgIHNraXAoMSksXG4gICAgICAgIHRhcCgocm91dGUpID0+IHtcbiAgICAgICAgICAvLyBUaGUgdXNlciBuYXZpZ2F0ZWQgYmFjayBvciBmb3J3YXJkIHVzaW5nIHRoZSBicm93c2VyIGhpc3RvcnlcbiAgICAgICAgICBpZiAoIXJvdXRlKSB7XG4gICAgICAgICAgICAvLyBUaGUgcm91dGUgcXVlcnkgcGFyYW0gbm8gbG9uZ2VyIGV4aXN0cyAtIGNsb3NlIHRoZSBvdmVybGF5XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5UmVmLmNsb3NlKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChyb3V0ZSAhPT0gdGhpcy5fc3luY0N1cnJlbnRSb3V0ZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBuYXZTdGFjayA9IHRoaXMuX25hdGl2ZUJyb3dzZXJUZW1wQmFja05hdmlnYXRpb25TdGFjaygpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFJvdXRlID0gdGhpcy5fc3luY0N1cnJlbnRSb3V0ZSgpO1xuXG4gICAgICAgICAgICBpZiAoIW5hdlN0YWNrLmxlbmd0aCkge1xuICAgICAgICAgICAgICAvLyBJZiB0aGUgbmF2IHN0YWNrIGlzIGVtcHR5IHRoZSBvbmx5IHdheSB0byBuYXZpZ2F0ZSBpcyBiYWNrLlxuICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlKHJvdXRlLCB7IG5hdmlnYXRpb25EaXJlY3Rpb246ICdiYWNrd2FyZCcgfSk7XG4gICAgICAgICAgICAgIHRoaXMuX25hdGl2ZUJyb3dzZXJUZW1wQmFja05hdmlnYXRpb25TdGFjay5zZXQoW2N1cnJlbnRSb3V0ZV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgbGFzdEl0ZW0gPSBuYXZTdGFja1tuYXZTdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgICBpZiAocm91dGUgPT09IGxhc3RJdGVtKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIG5ldyByb3V0ZSBtYXRjaGVzIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIGJhY2sgbmF2IHN0YWNrLlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2UgYXJlIGdvaW5nIGZvcndhcmQgYWdhaW4uXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZShyb3V0ZSwgeyBuYXZpZ2F0aW9uRGlyZWN0aW9uOiAnZm9yd2FyZCcgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbmF0aXZlQnJvd3NlclRlbXBCYWNrTmF2aWdhdGlvblN0YWNrLnNldChuYXZTdGFjay5zbGljZSgwLCAtMSkpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEVsc2Ugd2UgYXJlIGdvaW5nIGJhY2suXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZShyb3V0ZSwgeyBuYXZpZ2F0aW9uRGlyZWN0aW9uOiAnYmFja3dhcmQnIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX25hdGl2ZUJyb3dzZXJUZW1wQmFja05hdmlnYXRpb25TdGFjay5zZXQoWy4uLm5hdlN0YWNrLCBjdXJyZW50Um91dGVdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IHVpIGludGVyYWN0aW9uLiBDbGVhciB0aGUgYmFjayBuYXYgc3RhY2suXG4gICAgICAgICAgICB0aGlzLl9uYXRpdmVCcm93c2VyVGVtcEJhY2tOYXZpZ2F0aW9uU3RhY2suc2V0KFtdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgaW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICAvLyBSZW1vdmUgdGhlIGRpYWxvZyByb3V0ZSBmcm9tIHRoZSBicm93c2VyIHVybFxuICAgICAgdGhpcy5fdXBkYXRlQnJvd3NlclVybCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9XG5cbiAgbmF2aWdhdGUocm91dGU6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10sIGNvbmZpZz86IE92ZXJsYXlSb3V0ZXJOYXZpZ2F0ZUNvbmZpZykge1xuICAgIGNvbnN0IHJlc29sdmVkUm91dGUgPSB0aGlzLnJlc29sdmVQYXRoKHJvdXRlKTtcbiAgICBpZiAoY29uZmlnPy5uYXZpZ2F0aW9uRGlyZWN0aW9uKSB7XG4gICAgICB0aGlzLm5hdmlnYXRpb25EaXJlY3Rpb24uc2V0KGNvbmZpZy5uYXZpZ2F0aW9uRGlyZWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKHJlc29sdmVkUm91dGUudHlwZSA9PT0gJ2JhY2snKSB7XG4gICAgICB0aGlzLm5hdmlnYXRpb25EaXJlY3Rpb24uc2V0KCdiYWNrd2FyZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5hdmlnYXRpb25EaXJlY3Rpb24uc2V0KCdmb3J3YXJkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlQ3VycmVudFJvdXRlKHJlc29sdmVkUm91dGUucm91dGUpO1xuICB9XG5cbiAgcmVzb2x2ZVBhdGgocm91dGU6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyb3V0ZSkpIHtcbiAgICAgIHJvdXRlID0gcm91dGUuam9pbignLycpO1xuICAgIH1cblxuICAgIGlmIChyb3V0ZSA9PT0gJycpIHtcbiAgICAgIHJvdXRlID0gJy8nO1xuICAgIH1cblxuICAgIGNvbnN0IGlzQWJzb2x1dGUgPSByb3V0ZS5zdGFydHNXaXRoKCcvJyk7XG4gICAgY29uc3QgaXNSZXBsYWNlQ3VycmVudCA9IHJvdXRlLnN0YXJ0c1dpdGgoJy4vJyk7XG4gICAgY29uc3QgaXNCYWNrID0gcm91dGUuc3RhcnRzV2l0aCgnLi4vJyk7XG4gICAgY29uc3QgaXNGb3J3YXJkID0gIWlzQWJzb2x1dGUgJiYgIWlzUmVwbGFjZUN1cnJlbnQgJiYgIWlzQmFjaztcblxuICAgIGNvbnN0IGN1cnIgPSB0aGlzLl9zeW5jQ3VycmVudFJvdXRlKCk7XG5cbiAgICBpZiAoaXNGb3J3YXJkKSB7XG4gICAgICByb3V0ZSA9IGAke2N1cnJ9LyR7cm91dGV9YDtcbiAgICB9IGVsc2UgaWYgKGlzUmVwbGFjZUN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IGN1cnJTZWdtZW50cyA9IGN1cnIuc3BsaXQoJy8nKS5maWx0ZXIoKHMpID0+IHMgIT09ICcnKTtcbiAgICAgIGN1cnJTZWdtZW50cy5wb3AoKTtcblxuICAgICAgY29uc3QgbmV3U2VnbWVudHMgPSByb3V0ZS5zcGxpdCgnLycpLmZpbHRlcigocykgPT4gcyAhPT0gJy4nKTtcblxuICAgICAgcm91dGUgPSBgLyR7Y3VyclNlZ21lbnRzLmNvbmNhdChuZXdTZWdtZW50cykuam9pbignLycpfWA7XG4gICAgfSBlbHNlIGlmIChpc0JhY2spIHtcbiAgICAgIGNvbnN0IGN1cnJTZWdtZW50cyA9IGN1cnIuc3BsaXQoJy8nKS5maWx0ZXIoKHMpID0+IHMgIT09ICcnKTtcbiAgICAgIGNvbnN0IG5ld1NlZ21lbnRzID0gcm91dGUuc3BsaXQoJy8nKS5maWx0ZXIoKHMpID0+IHMgIT09ICcuLicpO1xuICAgICAgY29uc3Qgc3RlcHNCYWNrID0gcm91dGUuc3BsaXQoJy8nKS5maWx0ZXIoKHMpID0+IHMgPT09ICcuLicpLmxlbmd0aDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGVwc0JhY2s7IGkrKykge1xuICAgICAgICBjdXJyU2VnbWVudHMucG9wKCk7XG4gICAgICB9XG5cbiAgICAgIHJvdXRlID0gYC8ke2N1cnJTZWdtZW50cy5jb25jYXQobmV3U2VnbWVudHMpLmpvaW4oJy8nKX1gO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByb3V0ZSxcbiAgICAgIHR5cGU6XG4gICAgICAgIGlzQmFjayB8fCByb3V0ZSA9PT0gJy8nXG4gICAgICAgICAgPyAnYmFjaydcbiAgICAgICAgICA6IGlzUmVwbGFjZUN1cnJlbnRcbiAgICAgICAgICAgID8gJ3JlcGxhY2UtY3VycmVudCdcbiAgICAgICAgICAgIDogaXNBYnNvbHV0ZVxuICAgICAgICAgICAgICA/ICdhYnNvbHV0ZSdcbiAgICAgICAgICAgICAgOiBpc0ZvcndhcmRcbiAgICAgICAgICAgICAgICA/ICdmb3J3YXJkJ1xuICAgICAgICAgICAgICAgIDogJ3Vua25vd24nLFxuICAgIH0gYXMgY29uc3Q7XG4gIH1cblxuICBhZGRSb3V0ZShyb3V0ZTogT3ZlcmxheVJvdXRlKSB7XG4gICAgdGhpcy5leHRyYVJvdXRlcy5zZXQoWy4uLnRoaXMuZXh0cmFSb3V0ZXMoKSwgcm91dGVdKTtcbiAgfVxuXG4gIHJlbW92ZVJvdXRlKHBhdGg6IHN0cmluZykge1xuICAgIHRoaXMuZXh0cmFSb3V0ZXMuc2V0KHRoaXMuZXh0cmFSb3V0ZXMoKS5maWx0ZXIoKHIpID0+IHIucGF0aCAhPT0gcGF0aCkpO1xuICB9XG5cbiAgX3VwZGF0ZUN1cnJlbnRSb3V0ZShyb3V0ZTogc3RyaW5nKSB7XG4gICAgaWYgKHJvdXRlID09PSB0aGlzLl9zeW5jQ3VycmVudFJvdXRlKCkpIHJldHVybjtcblxuICAgIGlmICh0aGlzLnJvdXRlcygpLmZpbmRJbmRleCgocikgPT4gci5wYXRoID09PSByb3V0ZSkgPT09IC0xKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBUaGUgcm91dGUgXCIke3JvdXRlfVwiIGRvZXMgbm90IGV4aXN0LmAsIHRoaXMuX2NvbmZpZyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc3luY0N1cnJlbnRSb3V0ZS5zZXQocm91dGUpO1xuXG4gICAgdGhpcy5fdXBkYXRlQnJvd3NlclVybChyb3V0ZSk7XG4gIH1cblxuICBfZ2V0SW5pdGlhbFJvdXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcuaW5pdGlhbFJvdXRlID8/IHRoaXMuX2NvbmZpZy5yb3V0ZXNbMF0/LnBhdGggPz8gJy8nO1xuICB9XG5cbiAgX25hdmlnYXRlVG9Jbml0aWFsUm91dGUoKSB7XG4gICAgdGhpcy5fdXBkYXRlQ3VycmVudFJvdXRlKHRoaXMuX2dldEluaXRpYWxSb3V0ZSgpKTtcbiAgfVxuXG4gIF91cGRhdGVCcm93c2VyVXJsKHJvdXRlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW3RoaXMuX3JvdXRlclN0YXRlU2VydmljZS5yb3V0ZV0sIHtcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7IFt0aGlzLl9pZF06IHJvdXRlIH0sXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGlzYWJsZUNsb3NlT25OYXZpZ2F0aW9uKCkge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBwcml2YXRlIHByb3BlcnR5XG4gICAgdGhpcy5fb3ZlcmxheVJlZi5fY2RrUmVmLm92ZXJsYXlSZWYuX2xvY2F0aW9uQ2hhbmdlcz8udW5zdWJzY3JpYmU/LigpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBwcm92aWRlT3ZlcmxheVJvdXRlckNvbmZpZyA9IChjb25maWc6IE92ZXJsYXlSb3V0ZXJDb25maWcpOiBQcm92aWRlcltdID0+IHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBPVkVSTEFZX1JPVVRFUl9DT05GSUdfVE9LRU4sXG4gICAgICB1c2VWYWx1ZTogY29uZmlnLFxuICAgIH0sXG4gICAgT3ZlcmxheVJvdXRlclNlcnZpY2UsXG4gIF07XG59O1xuIl19
@@ -1,10 +1,9 @@
1
- import { Injectable, InjectionToken, inject, signal } from '@angular/core';
1
+ import { InjectionToken, inject, signal } from '@angular/core';
2
2
  import { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';
3
3
  import { ViewportService } from '@ethlete/core';
4
4
  import { distinctUntilChanged, tap } from 'rxjs';
5
5
  import { OverlaySidebarPageComponent } from '../partials/overlay-sidebar-page';
6
6
  import { OverlayRouterService } from './overlay-router';
7
- import * as i0 from "@angular/core";
8
7
  export const SIDEBAR_OVERLAY_CONFIG = new InjectionToken('SIDEBAR_OVERLAY_CONFIG');
9
8
  export class SidebarOverlayService {
10
9
  constructor() {
@@ -21,14 +20,10 @@ export class SidebarOverlayService {
21
20
  .pipe(distinctUntilChanged(), tap((renderSidebar) => {
22
21
  if (renderSidebar) {
23
22
  this.router.removeRoute(sidebarPageRoute);
24
- this.router.rootHistoryItem.set(null);
25
23
  // if the user is currently on the sidebar route, navigate to the initial route.
26
24
  if (this.router.currentRoute() === sidebarPageRoute) {
27
25
  this.router._navigateToInitialRoute();
28
26
  }
29
- // clean up all history entries that are the sidebar route.
30
- // we don't want to navigate to the sidebar route if the sidebar is already visible as a actual sidebar.
31
- this.router._removeItemFromHistory(sidebarPageRoute);
32
27
  }
33
28
  else {
34
29
  this.router.addRoute({
@@ -39,18 +34,11 @@ export class SidebarOverlayService {
39
34
  bodyTemplate: this.sidebarContentTemplate,
40
35
  },
41
36
  });
42
- // ensure that the sidebar route is always the last route in the history so it can be reached.
43
- this.router.rootHistoryItem.set(sidebarPageRoute);
44
37
  }
45
38
  }), takeUntilDestroyed())
46
39
  .subscribe();
47
40
  }
48
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: SidebarOverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
49
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: SidebarOverlayService }); }
50
41
  }
51
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: SidebarOverlayService, decorators: [{
52
- type: Injectable
53
- }], ctorParameters: () => [] });
54
42
  export const provideSidebarOverlayConfig = (config) => {
55
43
  return [
56
44
  {
@@ -60,4 +48,4 @@ export const provideSidebarOverlayConfig = (config) => {
60
48
  SidebarOverlayService,
61
49
  ];
62
50
  };
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci1vdmVybGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL292ZXJsYXkvY29tcG9uZW50cy9vdmVybGF5L3V0aWxzL3NpZGViYXItb3ZlcmxheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBZSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEYsT0FBTyxFQUFjLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWpELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQUV4RCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FBdUIsd0JBQXdCLENBQUMsQ0FBQztBQW1CekcsTUFBTSxPQUFPLHFCQUFxQjtJQVloQztRQVhBLFdBQU0sR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN4QyxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxQyxXQUFNLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFdEMsa0JBQWEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFO1lBQ3JHLFlBQVksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixJQUFJLElBQUksRUFBRSxDQUFDO1NBQzdGLENBQUMsQ0FBQztRQUVILDJCQUFzQixHQUFHLE1BQU0sQ0FBOEIsSUFBSSxDQUFDLENBQUM7UUFDbkUsMEJBQXFCLEdBQUcsTUFBTSxDQUF3QyxJQUFJLENBQUMsQ0FBQztRQUcxRSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksVUFBVSxDQUFDO1FBRXBFLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO2FBQzdCLElBQUksQ0FDSCxvQkFBb0IsRUFBRSxFQUN0QixHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUNwQixJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUUxQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRXRDLGdGQUFnRjtnQkFDaEYsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxLQUFLLGdCQUFnQixFQUFFLENBQUM7b0JBQ3BELElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDeEMsQ0FBQztnQkFFRCwyREFBMkQ7Z0JBQzNELHdHQUF3RztnQkFDeEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztvQkFDbkIsSUFBSSxFQUFFLGdCQUFnQjtvQkFDdEIsU0FBUyxFQUFFLDJCQUEyQjtvQkFDdEMsTUFBTSxFQUFFO3dCQUNOLGNBQWMsRUFBRSxJQUFJLENBQUMscUJBQXFCO3dCQUMxQyxZQUFZLEVBQUUsSUFBSSxDQUFDLHNCQUFzQjtxQkFDMUM7aUJBQ0YsQ0FBQyxDQUFDO2dCQUVILDhGQUE4RjtnQkFDOUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDcEQsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUNGLGtCQUFrQixFQUFFLENBQ3JCO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQzs4R0FqRFUscUJBQXFCO2tIQUFyQixxQkFBcUI7OzJGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVU7O0FBcURYLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQUMsTUFBNEIsRUFBRSxFQUFFO0lBQzFFLE9BQU87UUFDTDtZQUNFLE9BQU8sRUFBRSxzQkFBc0I7WUFDL0IsUUFBUSxFQUFFLE1BQU07U0FDakI7UUFDRCxxQkFBcUI7S0FDdEIsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBUZW1wbGF0ZVJlZiwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEJyZWFrcG9pbnQsIFZpZXdwb3J0U2VydmljZSB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT3ZlcmxheUhlYWRlclRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vcGFydGlhbHMvb3ZlcmxheS1oZWFkZXItdGVtcGxhdGUnO1xuaW1wb3J0IHsgT3ZlcmxheVNpZGViYXJQYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vcGFydGlhbHMvb3ZlcmxheS1zaWRlYmFyLXBhZ2UnO1xuaW1wb3J0IHsgT3ZlcmxheVJvdXRlclNlcnZpY2UgfSBmcm9tICcuL292ZXJsYXktcm91dGVyJztcblxuZXhwb3J0IGNvbnN0IFNJREVCQVJfT1ZFUkxBWV9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48U2lkZWJhck92ZXJsYXlDb25maWc+KCdTSURFQkFSX09WRVJMQVlfQ09ORklHJyk7XG5cbmV4cG9ydCB0eXBlIFNpZGViYXJPdmVybGF5Q29uZmlnID0ge1xuICAvKipcbiAgICogT24gbW9iaWxlIGRldmljZXMsIHRoZSBzaWRlYmFyIHdpbGwgYmUgc2hvd24gYXMgYSBzZXBhcmF0ZSBwYWdlIHRoYXQgY2FuIGJlIG5hdmlnYXRlZCB0by5cbiAgICogVGhpcyBpcyB0aGUgcm91dGUgdG8gdGhlIHNpZGViYXIgcGFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgXCIvc2lkZWJhclwiXG4gICAqL1xuICBzaWRlYmFyUGFnZVJvdXRlPzogYC8ke3N0cmluZ31gO1xuXG4gIC8qKlxuICAgKiBUaGUgYnJlYWtwb2ludCBmcm9tIHdoaWNoIHRvIHJlbmRlciB0aGUgc2lkZWJhci4gQ2FuIGJlIGEgYnJlYWtwb2ludCBvciBhIG51bWJlciByZXByZXNlbnRpbmcgdGhlIHBpeGVsIHdpZHRoLlxuICAgKiBAZGVmYXVsdCBcIm1kXCJcbiAgICovXG4gIHJlbmRlclNpZGViYXJGcm9tPzogQnJlYWtwb2ludCB8IG51bWJlcjtcbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTaWRlYmFyT3ZlcmxheVNlcnZpY2Uge1xuICBjb25maWcgPSBpbmplY3QoU0lERUJBUl9PVkVSTEFZX0NPTkZJRyk7XG4gIHZpZXdwb3J0U2VydmljZSA9IGluamVjdChWaWV3cG9ydFNlcnZpY2UpO1xuICByb3V0ZXIgPSBpbmplY3QoT3ZlcmxheVJvdXRlclNlcnZpY2UpO1xuXG4gIHJlbmRlclNpZGViYXIgPSB0b1NpZ25hbCh0aGlzLnZpZXdwb3J0U2VydmljZS5vYnNlcnZlKHsgbWluOiB0aGlzLmNvbmZpZy5yZW5kZXJTaWRlYmFyRnJvbSA/PyAnbWQnIH0pLCB7XG4gICAgaW5pdGlhbFZhbHVlOiB0aGlzLnZpZXdwb3J0U2VydmljZS5pc01hdGNoZWQoeyBtaW46IHRoaXMuY29uZmlnLnJlbmRlclNpZGViYXJGcm9tID8/ICdtZCcgfSksXG4gIH0pO1xuXG4gIHNpZGViYXJDb250ZW50VGVtcGxhdGUgPSBzaWduYWw8VGVtcGxhdGVSZWY8dW5rbm93bj4gfCBudWxsPihudWxsKTtcbiAgc2lkZWJhckhlYWRlclRlbXBsYXRlID0gc2lnbmFsPE92ZXJsYXlIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHNpZGViYXJQYWdlUm91dGUgPSB0aGlzLmNvbmZpZy5zaWRlYmFyUGFnZVJvdXRlID8/ICcvc2lkZWJhcic7XG5cbiAgICB0b09ic2VydmFibGUodGhpcy5yZW5kZXJTaWRlYmFyKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRhcCgocmVuZGVyU2lkZWJhcikgPT4ge1xuICAgICAgICAgIGlmIChyZW5kZXJTaWRlYmFyKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5yZW1vdmVSb3V0ZShzaWRlYmFyUGFnZVJvdXRlKTtcblxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIucm9vdEhpc3RvcnlJdGVtLnNldChudWxsKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhlIHVzZXIgaXMgY3VycmVudGx5IG9uIHRoZSBzaWRlYmFyIHJvdXRlLCBuYXZpZ2F0ZSB0byB0aGUgaW5pdGlhbCByb3V0ZS5cbiAgICAgICAgICAgIGlmICh0aGlzLnJvdXRlci5jdXJyZW50Um91dGUoKSA9PT0gc2lkZWJhclBhZ2VSb3V0ZSkge1xuICAgICAgICAgICAgICB0aGlzLnJvdXRlci5fbmF2aWdhdGVUb0luaXRpYWxSb3V0ZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjbGVhbiB1cCBhbGwgaGlzdG9yeSBlbnRyaWVzIHRoYXQgYXJlIHRoZSBzaWRlYmFyIHJvdXRlLlxuICAgICAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBuYXZpZ2F0ZSB0byB0aGUgc2lkZWJhciByb3V0ZSBpZiB0aGUgc2lkZWJhciBpcyBhbHJlYWR5IHZpc2libGUgYXMgYSBhY3R1YWwgc2lkZWJhci5cbiAgICAgICAgICAgIHRoaXMucm91dGVyLl9yZW1vdmVJdGVtRnJvbUhpc3Rvcnkoc2lkZWJhclBhZ2VSb3V0ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLmFkZFJvdXRlKHtcbiAgICAgICAgICAgICAgcGF0aDogc2lkZWJhclBhZ2VSb3V0ZSxcbiAgICAgICAgICAgICAgY29tcG9uZW50OiBPdmVybGF5U2lkZWJhclBhZ2VDb21wb25lbnQsXG4gICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgIGhlYWRlclRlbXBsYXRlOiB0aGlzLnNpZGViYXJIZWFkZXJUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICBib2R5VGVtcGxhdGU6IHRoaXMuc2lkZWJhckNvbnRlbnRUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgc2lkZWJhciByb3V0ZSBpcyBhbHdheXMgdGhlIGxhc3Qgcm91dGUgaW4gdGhlIGhpc3Rvcnkgc28gaXQgY2FuIGJlIHJlYWNoZWQuXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5yb290SGlzdG9yeUl0ZW0uc2V0KHNpZGViYXJQYWdlUm91dGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBwcm92aWRlU2lkZWJhck92ZXJsYXlDb25maWcgPSAoY29uZmlnOiBTaWRlYmFyT3ZlcmxheUNvbmZpZykgPT4ge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IFNJREVCQVJfT1ZFUkxBWV9DT05GSUcsXG4gICAgICB1c2VWYWx1ZTogY29uZmlnLFxuICAgIH0sXG4gICAgU2lkZWJhck92ZXJsYXlTZXJ2aWNlLFxuICBdO1xufTtcbiJdfQ==
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci1vdmVybGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL292ZXJsYXkvY29tcG9uZW50cy9vdmVybGF5L3V0aWxzL3NpZGViYXItb3ZlcmxheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUF5QixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEYsT0FBTyxFQUFjLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWpELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXhELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksY0FBYyxDQUF1Qix3QkFBd0IsQ0FBQyxDQUFDO0FBa0J6RyxNQUFNLE9BQU8scUJBQXFCO0lBWWhDO1FBWEEsV0FBTSxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3hDLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFDLFdBQU0sR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUV0QyxrQkFBYSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixJQUFJLElBQUksRUFBRSxDQUFDLEVBQUU7WUFDckcsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLElBQUksSUFBSSxFQUFFLENBQUM7U0FDN0YsQ0FBQyxDQUFDO1FBRUgsMkJBQXNCLEdBQUcsTUFBTSxDQUE4QixJQUFJLENBQUMsQ0FBQztRQUNuRSwwQkFBcUIsR0FBRyxNQUFNLENBQXdDLElBQUksQ0FBQyxDQUFDO1FBRzFFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxVQUFVLENBQUM7UUFFcEUsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7YUFDN0IsSUFBSSxDQUNILG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFO1lBQ3BCLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBRTFDLGdGQUFnRjtnQkFDaEYsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxLQUFLLGdCQUFnQixFQUFFLENBQUM7b0JBQ3BELElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDeEMsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztvQkFDbkIsSUFBSSxFQUFFLGdCQUFnQjtvQkFDdEIsU0FBUyxFQUFFLDJCQUEyQjtvQkFDdEMsTUFBTSxFQUFFO3dCQUNOLGNBQWMsRUFBRSxJQUFJLENBQUMscUJBQXFCO3dCQUMxQyxZQUFZLEVBQUUsSUFBSSxDQUFDLHNCQUFzQjtxQkFDMUM7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUNGLGtCQUFrQixFQUFFLENBQ3JCO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQztDQUNGO0FBRUQsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxNQUE0QixFQUFjLEVBQUU7SUFDdEYsT0FBTztRQUNMO1lBQ0UsT0FBTyxFQUFFLHNCQUFzQjtZQUMvQixRQUFRLEVBQUUsTUFBTTtTQUNqQjtRQUNELHFCQUFxQjtLQUN0QixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFByb3ZpZGVyLCBUZW1wbGF0ZVJlZiwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEJyZWFrcG9pbnQsIFZpZXdwb3J0U2VydmljZSB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT3ZlcmxheUhlYWRlclRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vcGFydGlhbHMvb3ZlcmxheS1oZWFkZXItdGVtcGxhdGUnO1xuaW1wb3J0IHsgT3ZlcmxheVNpZGViYXJQYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vcGFydGlhbHMvb3ZlcmxheS1zaWRlYmFyLXBhZ2UnO1xuaW1wb3J0IHsgT3ZlcmxheVJvdXRlclNlcnZpY2UgfSBmcm9tICcuL292ZXJsYXktcm91dGVyJztcblxuZXhwb3J0IGNvbnN0IFNJREVCQVJfT1ZFUkxBWV9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48U2lkZWJhck92ZXJsYXlDb25maWc+KCdTSURFQkFSX09WRVJMQVlfQ09ORklHJyk7XG5cbmV4cG9ydCB0eXBlIFNpZGViYXJPdmVybGF5Q29uZmlnID0ge1xuICAvKipcbiAgICogT24gbW9iaWxlIGRldmljZXMsIHRoZSBzaWRlYmFyIHdpbGwgYmUgc2hvd24gYXMgYSBzZXBhcmF0ZSBwYWdlIHRoYXQgY2FuIGJlIG5hdmlnYXRlZCB0by5cbiAgICogVGhpcyBpcyB0aGUgcm91dGUgdG8gdGhlIHNpZGViYXIgcGFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgXCIvc2lkZWJhclwiXG4gICAqL1xuICBzaWRlYmFyUGFnZVJvdXRlPzogYC8ke3N0cmluZ31gO1xuXG4gIC8qKlxuICAgKiBUaGUgYnJlYWtwb2ludCBmcm9tIHdoaWNoIHRvIHJlbmRlciB0aGUgc2lkZWJhci4gQ2FuIGJlIGEgYnJlYWtwb2ludCBvciBhIG51bWJlciByZXByZXNlbnRpbmcgdGhlIHBpeGVsIHdpZHRoLlxuICAgKiBAZGVmYXVsdCBcIm1kXCJcbiAgICovXG4gIHJlbmRlclNpZGViYXJGcm9tPzogQnJlYWtwb2ludCB8IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjbGFzcyBTaWRlYmFyT3ZlcmxheVNlcnZpY2Uge1xuICBjb25maWcgPSBpbmplY3QoU0lERUJBUl9PVkVSTEFZX0NPTkZJRyk7XG4gIHZpZXdwb3J0U2VydmljZSA9IGluamVjdChWaWV3cG9ydFNlcnZpY2UpO1xuICByb3V0ZXIgPSBpbmplY3QoT3ZlcmxheVJvdXRlclNlcnZpY2UpO1xuXG4gIHJlbmRlclNpZGViYXIgPSB0b1NpZ25hbCh0aGlzLnZpZXdwb3J0U2VydmljZS5vYnNlcnZlKHsgbWluOiB0aGlzLmNvbmZpZy5yZW5kZXJTaWRlYmFyRnJvbSA/PyAnbWQnIH0pLCB7XG4gICAgaW5pdGlhbFZhbHVlOiB0aGlzLnZpZXdwb3J0U2VydmljZS5pc01hdGNoZWQoeyBtaW46IHRoaXMuY29uZmlnLnJlbmRlclNpZGViYXJGcm9tID8/ICdtZCcgfSksXG4gIH0pO1xuXG4gIHNpZGViYXJDb250ZW50VGVtcGxhdGUgPSBzaWduYWw8VGVtcGxhdGVSZWY8dW5rbm93bj4gfCBudWxsPihudWxsKTtcbiAgc2lkZWJhckhlYWRlclRlbXBsYXRlID0gc2lnbmFsPE92ZXJsYXlIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHNpZGViYXJQYWdlUm91dGUgPSB0aGlzLmNvbmZpZy5zaWRlYmFyUGFnZVJvdXRlID8/ICcvc2lkZWJhcic7XG5cbiAgICB0b09ic2VydmFibGUodGhpcy5yZW5kZXJTaWRlYmFyKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRhcCgocmVuZGVyU2lkZWJhcikgPT4ge1xuICAgICAgICAgIGlmIChyZW5kZXJTaWRlYmFyKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5yZW1vdmVSb3V0ZShzaWRlYmFyUGFnZVJvdXRlKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhlIHVzZXIgaXMgY3VycmVudGx5IG9uIHRoZSBzaWRlYmFyIHJvdXRlLCBuYXZpZ2F0ZSB0byB0aGUgaW5pdGlhbCByb3V0ZS5cbiAgICAgICAgICAgIGlmICh0aGlzLnJvdXRlci5jdXJyZW50Um91dGUoKSA9PT0gc2lkZWJhclBhZ2VSb3V0ZSkge1xuICAgICAgICAgICAgICB0aGlzLnJvdXRlci5fbmF2aWdhdGVUb0luaXRpYWxSb3V0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5hZGRSb3V0ZSh7XG4gICAgICAgICAgICAgIHBhdGg6IHNpZGViYXJQYWdlUm91dGUsXG4gICAgICAgICAgICAgIGNvbXBvbmVudDogT3ZlcmxheVNpZGViYXJQYWdlQ29tcG9uZW50LFxuICAgICAgICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgICAgICBoZWFkZXJUZW1wbGF0ZTogdGhpcy5zaWRlYmFySGVhZGVyVGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgYm9keVRlbXBsYXRlOiB0aGlzLnNpZGViYXJDb250ZW50VGVtcGxhdGUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcHJvdmlkZVNpZGViYXJPdmVybGF5Q29uZmlnID0gKGNvbmZpZzogU2lkZWJhck92ZXJsYXlDb25maWcpOiBQcm92aWRlcltdID0+IHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBTSURFQkFSX09WRVJMQVlfQ09ORklHLFxuICAgICAgdXNlVmFsdWU6IGNvbmZpZyxcbiAgICB9LFxuICAgIFNpZGViYXJPdmVybGF5U2VydmljZSxcbiAgXTtcbn07XG4iXX0=