@ethlete/cdk 4.41.0 → 4.41.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.
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @ethlete/cdk
|
|
2
2
|
|
|
3
|
+
## 4.41.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`1c250cd`](https://github.com/ethlete-io/ethdk/commit/1c250cd0ca1c34dc0404dd3254b6a3f6434b1f49) Thanks [@TomTomB](https://github.com/TomTomB)! - Clear select value visually even if the selected option does not exist
|
|
8
|
+
|
|
3
9
|
## 4.41.0
|
|
4
10
|
|
|
5
11
|
### Minor Changes
|
|
@@ -65,52 +65,7 @@ export class OverlayService {
|
|
|
65
65
|
this.hasOpenOverlays = computed(() => this.openOverlays().length > 0);
|
|
66
66
|
this.positions = new OverlayPositionBuilder();
|
|
67
67
|
this.route = injectRoute();
|
|
68
|
-
|
|
69
|
-
let previousScrollPosition = { top: 0, left: 0 };
|
|
70
|
-
let isEnabled = false;
|
|
71
|
-
let lastRoute = null;
|
|
72
|
-
const root = document.documentElement;
|
|
73
|
-
toObservable(this.hasOpenOverlays)
|
|
74
|
-
.pipe(switchMap((hasOpenOverlays) => {
|
|
75
|
-
if (!hasOpenOverlays)
|
|
76
|
-
return of({ hasOpenOverlays, scrolled: false });
|
|
77
|
-
return fromEvent(window, 'resize').pipe(startWith({ hasOpenOverlays, scrolled: true }), map(() => ({ hasOpenOverlays, scrolled: true })));
|
|
78
|
-
}), tap(({ hasOpenOverlays }) => {
|
|
79
|
-
const hasBlockClass = root.classList.contains(BLOCK_CLASS);
|
|
80
|
-
if (hasOpenOverlays && (hasBlockClass || elementCanScroll(root))) {
|
|
81
|
-
if (isEnabled)
|
|
82
|
-
return;
|
|
83
|
-
previousScrollPosition = this.#viewportRuler.getViewportScrollPosition();
|
|
84
|
-
previousHTMLStyles.left = root.style.left || '';
|
|
85
|
-
previousHTMLStyles.top = root.style.top || '';
|
|
86
|
-
root.style.left = coerceCssPixelValue(-previousScrollPosition.left);
|
|
87
|
-
root.style.top = coerceCssPixelValue(-previousScrollPosition.top);
|
|
88
|
-
root.classList.add(BLOCK_CLASS, OVERSCROLL_CLASS);
|
|
89
|
-
isEnabled = true;
|
|
90
|
-
lastRoute = this.route();
|
|
91
|
-
}
|
|
92
|
-
else if (!hasOpenOverlays) {
|
|
93
|
-
if (!isEnabled)
|
|
94
|
-
return;
|
|
95
|
-
const htmlStyle = root.style;
|
|
96
|
-
const bodyStyle = document.body.style;
|
|
97
|
-
const previousHtmlScrollBehavior = htmlStyle.scrollBehavior || '';
|
|
98
|
-
const previousBodyScrollBehavior = bodyStyle.scrollBehavior || '';
|
|
99
|
-
const didNavigate = lastRoute !== this.route();
|
|
100
|
-
root.classList.remove(BLOCK_CLASS, OVERSCROLL_CLASS);
|
|
101
|
-
root.style.left = previousHTMLStyles.left;
|
|
102
|
-
root.style.top = previousHTMLStyles.top;
|
|
103
|
-
if (!didNavigate) {
|
|
104
|
-
htmlStyle.scrollBehavior = bodyStyle.scrollBehavior = 'auto';
|
|
105
|
-
window.scroll(previousScrollPosition.left, previousScrollPosition.top);
|
|
106
|
-
htmlStyle.scrollBehavior = previousHtmlScrollBehavior;
|
|
107
|
-
bodyStyle.scrollBehavior = previousBodyScrollBehavior;
|
|
108
|
-
}
|
|
109
|
-
isEnabled = false;
|
|
110
|
-
lastRoute = null;
|
|
111
|
-
}
|
|
112
|
-
}))
|
|
113
|
-
.subscribe();
|
|
68
|
+
this.#setupScrollBlocking();
|
|
114
69
|
}
|
|
115
70
|
open(componentOrTemplateRef, config) {
|
|
116
71
|
let overlayRef;
|
|
@@ -177,30 +132,32 @@ export class OverlayService {
|
|
|
177
132
|
setStyle(overlayPaneEl, 'max-height', currConfig.maxHeight);
|
|
178
133
|
};
|
|
179
134
|
if (origin) {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
? origin.getBoundingClientRect().left
|
|
183
|
-
: isTouchEvent(origin)
|
|
184
|
-
? origin.targetTouches[0].clientX
|
|
185
|
-
: isPointerEvent(origin)
|
|
186
|
-
? origin.clientX !== 0
|
|
187
|
-
? origin.clientX
|
|
188
|
-
: origin.target.getBoundingClientRect().left
|
|
189
|
-
: -1;
|
|
190
|
-
const originY = isHtmlElement(origin)
|
|
191
|
-
? origin.getBoundingClientRect().top
|
|
192
|
-
: isTouchEvent(origin)
|
|
193
|
-
? origin.targetTouches[0].clientY
|
|
194
|
-
: isPointerEvent(origin)
|
|
195
|
-
? origin.clientY !== 0
|
|
196
|
-
? origin.clientY
|
|
197
|
-
: origin.target.getBoundingClientRect().top
|
|
198
|
-
: -1;
|
|
199
|
-
if (originX !== -1 && originY !== -1 && currConfig.applyTransformOrigin) {
|
|
200
|
-
setStyle(containerEl, 'transform-origin', `${originX}px ${originY}px`);
|
|
135
|
+
if (!currConfig.applyTransformOrigin) {
|
|
136
|
+
setStyle(containerEl, 'transform-origin', null);
|
|
201
137
|
}
|
|
202
138
|
else {
|
|
203
|
-
|
|
139
|
+
// TODO: If getBoundingClientRect is used it should use the center of the element.
|
|
140
|
+
const originX = isHtmlElement(origin)
|
|
141
|
+
? origin.getBoundingClientRect().left
|
|
142
|
+
: isTouchEvent(origin)
|
|
143
|
+
? origin.targetTouches[0].clientX
|
|
144
|
+
: isPointerEvent(origin)
|
|
145
|
+
? origin.clientX !== 0
|
|
146
|
+
? origin.clientX
|
|
147
|
+
: origin.target.getBoundingClientRect().left
|
|
148
|
+
: -1;
|
|
149
|
+
const originY = isHtmlElement(origin)
|
|
150
|
+
? origin.getBoundingClientRect().top
|
|
151
|
+
: isTouchEvent(origin)
|
|
152
|
+
? origin.targetTouches[0].clientY
|
|
153
|
+
: isPointerEvent(origin)
|
|
154
|
+
? origin.clientY !== 0
|
|
155
|
+
? origin.clientY
|
|
156
|
+
: origin.target.getBoundingClientRect().top
|
|
157
|
+
: -1;
|
|
158
|
+
if (originX !== -1 && originY !== -1) {
|
|
159
|
+
setStyle(containerEl, 'transform-origin', `${originX}px ${originY}px`);
|
|
160
|
+
}
|
|
204
161
|
}
|
|
205
162
|
}
|
|
206
163
|
if (useDefaultAnimation && containerClass?.length) {
|
|
@@ -298,6 +255,54 @@ export class OverlayService {
|
|
|
298
255
|
overlays[i]?.close();
|
|
299
256
|
}
|
|
300
257
|
}
|
|
258
|
+
#setupScrollBlocking() {
|
|
259
|
+
const previousHTMLStyles = { top: '', left: '' };
|
|
260
|
+
let previousScrollPosition = { top: 0, left: 0 };
|
|
261
|
+
let isEnabled = false;
|
|
262
|
+
let lastRoute = null;
|
|
263
|
+
const root = document.documentElement;
|
|
264
|
+
toObservable(this.hasOpenOverlays)
|
|
265
|
+
.pipe(switchMap((hasOpenOverlays) => {
|
|
266
|
+
if (!hasOpenOverlays)
|
|
267
|
+
return of({ hasOpenOverlays, scrolled: false });
|
|
268
|
+
return fromEvent(window, 'resize').pipe(startWith({ hasOpenOverlays, scrolled: true }), map(() => ({ hasOpenOverlays, scrolled: true })));
|
|
269
|
+
}), tap(({ hasOpenOverlays }) => {
|
|
270
|
+
const hasBlockClass = root.classList.contains(BLOCK_CLASS);
|
|
271
|
+
if (hasOpenOverlays && (hasBlockClass || elementCanScroll(root))) {
|
|
272
|
+
if (isEnabled)
|
|
273
|
+
return;
|
|
274
|
+
previousScrollPosition = this.#viewportRuler.getViewportScrollPosition();
|
|
275
|
+
previousHTMLStyles.left = root.style.left || '';
|
|
276
|
+
previousHTMLStyles.top = root.style.top || '';
|
|
277
|
+
root.style.left = coerceCssPixelValue(-previousScrollPosition.left);
|
|
278
|
+
root.style.top = coerceCssPixelValue(-previousScrollPosition.top);
|
|
279
|
+
root.classList.add(BLOCK_CLASS, OVERSCROLL_CLASS);
|
|
280
|
+
isEnabled = true;
|
|
281
|
+
lastRoute = this.route();
|
|
282
|
+
}
|
|
283
|
+
else if (!hasOpenOverlays) {
|
|
284
|
+
if (!isEnabled)
|
|
285
|
+
return;
|
|
286
|
+
const htmlStyle = root.style;
|
|
287
|
+
const bodyStyle = document.body.style;
|
|
288
|
+
const previousHtmlScrollBehavior = htmlStyle.scrollBehavior || '';
|
|
289
|
+
const previousBodyScrollBehavior = bodyStyle.scrollBehavior || '';
|
|
290
|
+
const didNavigate = lastRoute !== this.route();
|
|
291
|
+
root.classList.remove(BLOCK_CLASS, OVERSCROLL_CLASS);
|
|
292
|
+
root.style.left = previousHTMLStyles.left;
|
|
293
|
+
root.style.top = previousHTMLStyles.top;
|
|
294
|
+
if (!didNavigate) {
|
|
295
|
+
htmlStyle.scrollBehavior = bodyStyle.scrollBehavior = 'auto';
|
|
296
|
+
window.scroll(previousScrollPosition.left, previousScrollPosition.top);
|
|
297
|
+
htmlStyle.scrollBehavior = previousHtmlScrollBehavior;
|
|
298
|
+
bodyStyle.scrollBehavior = previousBodyScrollBehavior;
|
|
299
|
+
}
|
|
300
|
+
isEnabled = false;
|
|
301
|
+
lastRoute = null;
|
|
302
|
+
}
|
|
303
|
+
}))
|
|
304
|
+
.subscribe();
|
|
305
|
+
}
|
|
301
306
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: OverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
302
307
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: OverlayService, providedIn: 'root' }); }
|
|
303
308
|
}
|
|
@@ -305,4 +310,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
|
|
|
305
310
|
type: Injectable,
|
|
306
311
|
args: [{ providedIn: 'root' }]
|
|
307
312
|
}], ctorParameters: () => [] });
|
|
308
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL292ZXJsYXkvY29tcG9uZW50cy9vdmVybGF5L3NlcnZpY2VzL292ZXJsYXkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsTUFBTSxJQUFJLFNBQVMsRUFBRSxZQUFZLElBQUksZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0YsT0FBTyxFQUFpQixrQkFBa0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RixPQUFPLEVBQWdCLFVBQVUsRUFBZSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixLQUFLLEVBQ0wsV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFckYsT0FBTyxFQUNMLDZCQUE2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QUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUMxRSxDQUFDO0lBRUQsY0FBYyxDQUFDLFFBQXNCO1FBQ25DLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFFeEIsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1gsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDOzhHQXhUVSxjQUFjO2tIQUFkLGNBQWMsY0FERCxNQUFNOzsyRkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VDc3NQaXhlbFZhbHVlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IERpYWxvZyBhcyBDZGtEaWFsb2csIERpYWxvZ0NvbmZpZyBhcyBDZGtEaWFsb2dDb25maWcgfSBmcm9tICdAYW5ndWxhci9jZGsvZGlhbG9nJztcbmltcG9ydCB7IENvbXBvbmVudFR5cGUsIE5vb3BTY3JvbGxTdHJhdGVneSwgVmlld3BvcnRSdWxlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFJlZiwgSW5qZWN0YWJsZSwgVGVtcGxhdGVSZWYsIGNvbXB1dGVkLCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtcbiAgUk9PVF9CT1VOREFSWV9UT0tFTixcbiAgUm9vdEJvdW5kYXJ5RGlyZWN0aXZlLFxuICBWaWV3cG9ydFNlcnZpY2UsXG4gIGVsZW1lbnRDYW5TY3JvbGwsXG4gIGVxdWFsLFxuICBpbmplY3RSb3V0ZSxcbn0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBQcm92aWRlVGhlbWVEaXJlY3RpdmUsIFRIRU1FX1BST1ZJREVSIH0gZnJvbSAnQGV0aGxldGUvdGhlbWluZyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIG1hcCwgb2YsIHBhaXJ3aXNlLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE92ZXJsYXlDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL292ZXJsYXktY29udGFpbmVyJztcbmltcG9ydCB7IE9WRVJMQVlfQ09ORklHLCBPVkVSTEFZX0RBVEEsIE9WRVJMQVlfREVGQVVMVF9PUFRJT05TIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE92ZXJsYXlDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge1xuICBFVF9PVkVSTEFZX0JPVFRPTV9TSEVFVF9DTEFTUyxcbiAgRVRfT1ZFUkxBWV9MRUZUX1NIRUVUX0NMQVNTLFxuICBFVF9PVkVSTEFZX1JJR0hUX1NIRUVUX0NMQVNTLFxuICBFVF9PVkVSTEFZX1RPUF9TSEVFVF9DTEFTUyxcbiAgT3ZlcmxheVBvc2l0aW9uQnVpbGRlcixcbiAgT3ZlcmxheVJlZixcbiAgY3JlYXRlT3ZlcmxheUNvbmZpZyxcbn0gZnJvbSAnLi4vdXRpbHMnO1xuXG5sZXQgdW5pcXVlSWQgPSAwO1xuY29uc3QgSURfUFJFRklYID0gJ2V0LW92ZXJsYXktJztcblxuY29uc3Qgc2V0U3R5bGUgPSAoZWw6IEhUTUxFbGVtZW50LCBzdHlsZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4ge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIGVsLnN0eWxlLnJlbW92ZVByb3BlcnR5KHN0eWxlKTtcbiAgfSBlbHNlIHtcbiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eShzdHlsZSwgY29lcmNlQ3NzUGl4ZWxWYWx1ZSh2YWx1ZSkpO1xuICB9XG59O1xuXG5jb25zdCBzZXRDbGFzcyA9IChlbDogSFRNTEVsZW1lbnQsIHByZXZDbGFzcz86IHN0cmluZyB8IHN0cmluZ1tdLCBjdXJyQ2xhc3M/OiBzdHJpbmcgfCBzdHJpbmdbXSkgPT4ge1xuICBpZiAoIWVxdWFsKHByZXZDbGFzcywgY3VyckNsYXNzKSkge1xuICAgIGlmIChwcmV2Q2xhc3MpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHByZXZDbGFzcykpIHtcbiAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZSguLi5wcmV2Q2xhc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShwcmV2Q2xhc3MpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjdXJyQ2xhc3MpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGN1cnJDbGFzcykpIHtcbiAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCguLi5jdXJyQ2xhc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWwuY2xhc3NMaXN0LmFkZChjdXJyQ2xhc3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuY29uc3QgaXNIdG1sRWxlbWVudCA9IChlbGVtZW50OiBIVE1MRWxlbWVudCB8IHVua25vd24pOiBlbGVtZW50IGlzIEhUTUxFbGVtZW50ID0+IHtcbiAgcmV0dXJuIGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDtcbn07XG5cbmNvbnN0IGlzVG91Y2hFdmVudCA9IChldmVudDogRXZlbnQpOiBldmVudCBpcyBUb3VjaEV2ZW50ID0+IHtcbiAgcmV0dXJuIGV2ZW50LnR5cGVbMF0gPT09ICd0Jztcbn07XG5cbmNvbnN0IGlzUG9pbnRlckV2ZW50ID0gKGV2ZW50OiBFdmVudCk6IGV2ZW50IGlzIFBvaW50ZXJFdmVudCA9PiB7XG4gIHJldHVybiBldmVudC50eXBlWzBdID09PSAnYyc7XG59O1xuXG5jb25zdCBCTE9DS19DTEFTUyA9ICdjZGstZ2xvYmFsLXNjcm9sbGJsb2NrJztcbmNvbnN0IE9WRVJTQ1JPTExfQ0xBU1MgPSAnZXQtZ2xvYmFsLW5vLW92ZXJzY3JvbGwnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE92ZXJsYXlTZXJ2aWNlIHtcbiAgI2RlZmF1bHRPcHRpb25zID0gaW5qZWN0KE9WRVJMQVlfREVGQVVMVF9PUFRJT05TLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAjZGlhbG9nID0gaW5qZWN0KENka0RpYWxvZyk7XG4gICN2aWV3cG9ydFNlcnZpY2UgPSBpbmplY3QoVmlld3BvcnRTZXJ2aWNlKTtcbiAgI3ZpZXdwb3J0UnVsZXIgPSBpbmplY3QoVmlld3BvcnRSdWxlcik7XG5cbiAgb3Blbk92ZXJsYXlzID0gc2lnbmFsPE92ZXJsYXlSZWZbXT4oW10pO1xuICBoYXNPcGVuT3ZlcmxheXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wZW5PdmVybGF5cygpLmxlbmd0aCA+IDApO1xuICBwb3NpdGlvbnMgPSBuZXcgT3ZlcmxheVBvc2l0aW9uQnVpbGRlcigpO1xuICByb3V0ZSA9IGluamVjdFJvdXRlKCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcHJldmlvdXNIVE1MU3R5bGVzID0geyB0b3A6ICcnLCBsZWZ0OiAnJyB9O1xuICAgIGxldCBwcmV2aW91c1Njcm9sbFBvc2l0aW9uOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfSA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG4gICAgbGV0IGlzRW5hYmxlZCA9IGZhbHNlO1xuICAgIGxldCBsYXN0Um91dGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICAgIHRvT2JzZXJ2YWJsZSh0aGlzLmhhc09wZW5PdmVybGF5cylcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGhhc09wZW5PdmVybGF5cykgPT4ge1xuICAgICAgICAgIGlmICghaGFzT3Blbk92ZXJsYXlzKSByZXR1cm4gb2YoeyBoYXNPcGVuT3ZlcmxheXMsIHNjcm9sbGVkOiBmYWxzZSB9KTtcblxuICAgICAgICAgIHJldHVybiBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykucGlwZShcbiAgICAgICAgICAgIHN0YXJ0V2l0aCh7IGhhc09wZW5PdmVybGF5cywgc2Nyb2xsZWQ6IHRydWUgfSksXG4gICAgICAgICAgICBtYXAoKCkgPT4gKHsgaGFzT3Blbk92ZXJsYXlzLCBzY3JvbGxlZDogdHJ1ZSB9KSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoeyBoYXNPcGVuT3ZlcmxheXMgfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGhhc0Jsb2NrQ2xhc3MgPSByb290LmNsYXNzTGlzdC5jb250YWlucyhCTE9DS19DTEFTUyk7XG5cbiAgICAgICAgICBpZiAoaGFzT3Blbk92ZXJsYXlzICYmIChoYXNCbG9ja0NsYXNzIHx8IGVsZW1lbnRDYW5TY3JvbGwocm9vdCkpKSB7XG4gICAgICAgICAgICBpZiAoaXNFbmFibGVkKSByZXR1cm47XG5cbiAgICAgICAgICAgIHByZXZpb3VzU2Nyb2xsUG9zaXRpb24gPSB0aGlzLiN2aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtcbiAgICAgICAgICAgIHByZXZpb3VzSFRNTFN0eWxlcy5sZWZ0ID0gcm9vdC5zdHlsZS5sZWZ0IHx8ICcnO1xuICAgICAgICAgICAgcHJldmlvdXNIVE1MU3R5bGVzLnRvcCA9IHJvb3Quc3R5bGUudG9wIHx8ICcnO1xuXG4gICAgICAgICAgICByb290LnN0eWxlLmxlZnQgPSBjb2VyY2VDc3NQaXhlbFZhbHVlKC1wcmV2aW91c1Njcm9sbFBvc2l0aW9uLmxlZnQpO1xuICAgICAgICAgICAgcm9vdC5zdHlsZS50b3AgPSBjb2VyY2VDc3NQaXhlbFZhbHVlKC1wcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCk7XG4gICAgICAgICAgICByb290LmNsYXNzTGlzdC5hZGQoQkxPQ0tfQ0xBU1MsIE9WRVJTQ1JPTExfQ0xBU1MpO1xuXG4gICAgICAgICAgICBpc0VuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgbGFzdFJvdXRlID0gdGhpcy5yb3V0ZSgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWhhc09wZW5PdmVybGF5cykge1xuICAgICAgICAgICAgaWYgKCFpc0VuYWJsZWQpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgaHRtbFN0eWxlID0gcm9vdC5zdHlsZTtcbiAgICAgICAgICAgIGNvbnN0IGJvZHlTdHlsZSA9IGRvY3VtZW50LmJvZHkuc3R5bGU7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c0h0bWxTY3JvbGxCZWhhdmlvciA9IGh0bWxTdHlsZS5zY3JvbGxCZWhhdmlvciB8fCAnJztcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQm9keVNjcm9sbEJlaGF2aW9yID0gYm9keVN0eWxlLnNjcm9sbEJlaGF2aW9yIHx8ICcnO1xuXG4gICAgICAgICAgICBjb25zdCBkaWROYXZpZ2F0ZSA9IGxhc3RSb3V0ZSAhPT0gdGhpcy5yb3V0ZSgpO1xuXG4gICAgICAgICAgICByb290LmNsYXNzTGlzdC5yZW1vdmUoQkxPQ0tfQ0xBU1MsIE9WRVJTQ1JPTExfQ0xBU1MpO1xuXG4gICAgICAgICAgICByb290LnN0eWxlLmxlZnQgPSBwcmV2aW91c0hUTUxTdHlsZXMubGVmdDtcbiAgICAgICAgICAgIHJvb3Quc3R5bGUudG9wID0gcHJldmlvdXNIVE1MU3R5bGVzLnRvcDtcblxuICAgICAgICAgICAgaWYgKCFkaWROYXZpZ2F0ZSkge1xuICAgICAgICAgICAgICBodG1sU3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSBib2R5U3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSAnYXV0byc7XG4gICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGwocHJldmlvdXNTY3JvbGxQb3NpdGlvbi5sZWZ0LCBwcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCk7XG4gICAgICAgICAgICAgIGh0bWxTdHlsZS5zY3JvbGxCZWhhdmlvciA9IHByZXZpb3VzSHRtbFNjcm9sbEJlaGF2aW9yO1xuICAgICAgICAgICAgICBib2R5U3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSBwcmV2aW91c0JvZHlTY3JvbGxCZWhhdmlvcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXNFbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICBsYXN0Um91dGUgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBvcGVuPFQsIEQgPSB1bmtub3duLCBSID0gdW5rbm93bj4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LCBjb25maWc6IE92ZXJsYXlDb25maWc8RD4pOiBPdmVybGF5UmVmPFQsIFI+O1xuICBvcGVuPFQsIEQgPSB1bmtub3duLCBSID0gdW5rbm93bj4odGVtcGxhdGU6IFRlbXBsYXRlUmVmPFQ+LCBjb25maWc6IE92ZXJsYXlDb25maWc8RD4pOiBPdmVybGF5UmVmPFQsIFI+O1xuICBvcGVuPFQsIEQgPSB1bmtub3duLCBSID0gdW5rbm93bj4oXG4gICAgdGVtcGxhdGU6IENvbXBvbmVudFR5cGU8VD4gfCBUZW1wbGF0ZVJlZjxUPixcbiAgICBjb25maWc6IE92ZXJsYXlDb25maWc8RD4sXG4gICk6IE92ZXJsYXlSZWY8VCwgUj47XG4gIG9wZW48VCwgRCA9IHVua25vd24sIFIgPSB1bmtub3duPihcbiAgICBjb21wb25lbnRPclRlbXBsYXRlUmVmOiBDb21wb25lbnRUeXBlPFQ+IHwgVGVtcGxhdGVSZWY8VD4sXG4gICAgY29uZmlnOiBPdmVybGF5Q29uZmlnPEQ+LFxuICApOiBPdmVybGF5UmVmPFQsIFI+IHtcbiAgICBsZXQgb3ZlcmxheVJlZjogT3ZlcmxheVJlZjxULCBSPjtcblxuICAgIGNvbnN0IGNvbXBvc2VkQ29uZmlnID0gY3JlYXRlT3ZlcmxheUNvbmZpZzxEPih0aGlzLiNkZWZhdWx0T3B0aW9ucyBhcyBPdmVybGF5Q29uZmlnPEQ+LCBjb25maWcpO1xuICAgIGNvbXBvc2VkQ29uZmlnLmlkID0gY29tcG9zZWRDb25maWcuaWQgfHwgYCR7SURfUFJFRklYfSR7dW5pcXVlSWQrK31gO1xuXG4gICAgY29uc3QgY2RrUmVmID0gdGhpcy4jZGlhbG9nLm9wZW48UiwgRCwgVD4oY29tcG9uZW50T3JUZW1wbGF0ZVJlZiwge1xuICAgICAgLi4uY29tcG9zZWRDb25maWcsXG4gICAgICBzY3JvbGxTdHJhdGVneTogbmV3IE5vb3BTY3JvbGxTdHJhdGVneSgpLFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgY2xvc2VPbkRlc3Ryb3k6IGZhbHNlLFxuICAgICAgcGFuZWxDbGFzczogJ2V0LW92ZXJsYXktcGFuZScsXG4gICAgICBjb250YWluZXI6IHtcbiAgICAgICAgdHlwZTogT3ZlcmxheUNvbnRhaW5lckNvbXBvbmVudCxcbiAgICAgICAgcHJvdmlkZXJzOiAoKSA9PiBbXG4gICAgICAgICAgeyBwcm92aWRlOiBPVkVSTEFZX0NPTkZJRywgdXNlVmFsdWU6IGNvbXBvc2VkQ29uZmlnIH0sXG4gICAgICAgICAgeyBwcm92aWRlOiBDZGtEaWFsb2dDb25maWcsIHVzZVZhbHVlOiBjb21wb3NlZENvbmZpZyB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHRlbXBsYXRlQ29udGV4dDogKCkgPT4gKHsgZGlhbG9nUmVmOiBvdmVybGF5UmVmIH0pLFxuICAgICAgcHJvdmlkZXJzOiAocmVmLCBjZGtDb25maWcsIG92ZXJsYXlDb250YWluZXIpID0+IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gb3ZlcmxheUNvbnRhaW5lciBhcyBPdmVybGF5Q29udGFpbmVyQ29tcG9uZW50O1xuICAgICAgICBvdmVybGF5UmVmID0gbmV3IE92ZXJsYXlSZWYocmVmLCBjb21wb3NlZENvbmZpZywgY29udGFpbmVyKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHsgcHJvdmlkZTogT3ZlcmxheUNvbnRhaW5lckNvbXBvbmVudCwgdXNlVmFsdWU6IG92ZXJsYXlDb250YWluZXIgfSxcbiAgICAgICAgICB7IHByb3ZpZGU6IFRIRU1FX1BST1ZJREVSLCB1c2VWYWx1ZTogY29udGFpbmVyLl90aGVtZVByb3ZpZGVyIH0sXG4gICAgICAgICAgeyBwcm92aWRlOiBQcm92aWRlVGhlbWVEaXJlY3RpdmUsIHVzZVZhbHVlOiBjb250YWluZXIuX3RoZW1lUHJvdmlkZXIgfSxcbiAgICAgICAgICB7IHByb3ZpZGU6IFJPT1RfQk9VTkRBUllfVE9LRU4sIHVzZVZhbHVlOiBjb250YWluZXIuX3Jvb3RCb3VuZGFyeSB9LFxuICAgICAgICAgIHsgcHJvdmlkZTogUm9vdEJvdW5kYXJ5RGlyZWN0aXZlLCB1c2VWYWx1ZTogY29udGFpbmVyLl9yb290Qm91bmRhcnkgfSxcbiAgICAgICAgICB7IHByb3ZpZGU6IE9WRVJMQVlfREFUQSwgdXNlVmFsdWU6IGNka0NvbmZpZy5kYXRhIH0sXG4gICAgICAgICAgeyBwcm92aWRlOiBPdmVybGF5UmVmLCB1c2VWYWx1ZTogb3ZlcmxheVJlZiB9LFxuICAgICAgICAgIC4uLihjb21wb3NlZENvbmZpZy5wcm92aWRlcnMgPz8gW10pLFxuICAgICAgICBdO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb24qL1xuICAgIChvdmVybGF5UmVmISBhcyB7IGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFQ+IH0pLmNvbXBvbmVudFJlZiA9IGNka1JlZi5jb21wb25lbnRSZWYhO1xuICAgIG92ZXJsYXlSZWYhLmNvbXBvbmVudEluc3RhbmNlID0gY2RrUmVmLmNvbXBvbmVudEluc3RhbmNlITtcblxuICAgIChjZGtSZWYuY29udGFpbmVySW5zdGFuY2UgYXMgT3ZlcmxheUNvbnRhaW5lckNvbXBvbmVudCkub3ZlcmxheVJlZiA9IG92ZXJsYXlSZWYhO1xuXG4gICAgY29uc3QgY29udGFpbmVyRWwgPSBvdmVybGF5UmVmIS5fY29udGFpbmVySW5zdGFuY2UuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IG92ZXJsYXlQYW5lRWwgPSBjZGtSZWYub3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudDtcbiAgICBjb25zdCBiYWNrZHJvcEVsID0gY2RrUmVmLm92ZXJsYXlSZWYuYmFja2Ryb3BFbGVtZW50O1xuICAgIGNvbnN0IG92ZXJsYXlXcmFwcGVyID0gY2RrUmVmLm92ZXJsYXlSZWYuaG9zdEVsZW1lbnQ7XG4gICAgY29uc3QgdXNlRGVmYXVsdEFuaW1hdGlvbiA9IGNvbXBvc2VkQ29uZmlnLmN1c3RvbUFuaW1hdGVkICE9PSB0cnVlO1xuICAgIGNvbnN0IG9yaWdpbiA9IGNvbXBvc2VkQ29uZmlnLm9yaWdpbjtcblxuICAgIGNvbWJpbmVMYXRlc3QoXG4gICAgICBjb21wb3NlZENvbmZpZy5wb3NpdGlvbnMubWFwKChicmVha3BvaW50KSA9PlxuICAgICAgICAoYnJlYWtwb2ludC5icmVha3BvaW50ID8gdGhpcy4jdmlld3BvcnRTZXJ2aWNlLm9ic2VydmUoeyBtaW46IGJyZWFrcG9pbnQuYnJlYWtwb2ludCB9KSA6IG9mKHRydWUpKS5waXBlKFxuICAgICAgICAgIG1hcCgoaXNBY3RpdmUpID0+ICh7XG4gICAgICAgICAgICBpc0FjdGl2ZSxcbiAgICAgICAgICAgIGNvbmZpZzogYnJlYWtwb2ludC5jb25maWcsXG4gICAgICAgICAgICBzaXplOlxuICAgICAgICAgICAgICB0eXBlb2YgYnJlYWtwb2ludC5icmVha3BvaW50ID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgID8gYnJlYWtwb2ludC5icmVha3BvaW50XG4gICAgICAgICAgICAgICAgOiBicmVha3BvaW50LmJyZWFrcG9pbnQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuI3ZpZXdwb3J0U2VydmljZS5nZXRCcmVha3BvaW50U2l6ZShicmVha3BvaW50LmJyZWFrcG9pbnQsICdtaW4nKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgICksXG4gICAgICApLFxuICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwob3ZlcmxheVJlZiEuYWZ0ZXJDbG9zZWQoKSksXG4gICAgICAgIG1hcCgoZW50cmllcykgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZUJyZWFrcG9pbnRzID0gZW50cmllcy5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5pc0FjdGl2ZSk7XG4gICAgICAgICAgY29uc3QgaGlnaGVzdEJyZWFrcG9pbnQgPSBhY3RpdmVCcmVha3BvaW50cy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IChwcmV2LnNpemUgPiBjdXJyLnNpemUgPyBwcmV2IDogY3VycikpO1xuXG4gICAgICAgICAgcmV0dXJuIGhpZ2hlc3RCcmVha3BvaW50LmNvbmZpZztcbiAgICAgICAgfSksXG4gICAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgICAgcGFpcndpc2UoKSxcbiAgICAgICAgdGFwKChbcHJldkNvbmZpZywgY3VyckNvbmZpZ10pID0+IHtcbiAgICAgICAgICBpZiAoIWN1cnJDb25maWcpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckNsYXNzID0gY3VyckNvbmZpZy5jb250YWluZXJDbGFzcztcblxuICAgICAgICAgIGNvbnN0IGFwcGx5RGVmYXVsdE1heFdpZHRocyA9ICgpID0+IHtcbiAgICAgICAgICAgIHNldFN0eWxlKG92ZXJsYXlQYW5lRWwsICdtYXgtd2lkdGgnLCBjdXJyQ29uZmlnLm1heFdpZHRoKTtcbiAgICAgICAgICAgIHNldFN0eWxlKG92ZXJsYXlQYW5lRWwsICdtYXgtaGVpZ2h0JywgY3VyckNvbmZpZy5tYXhIZWlnaHQpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAob3JpZ2luKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBJZiBnZXRCb3VuZGluZ0NsaWVudFJlY3QgaXMgdXNlZCBpdCBzaG91bGQgdXNlIHRoZSBjZW50ZXIgb2YgdGhlIGVsZW1lbnQuXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5YID0gaXNIdG1sRWxlbWVudChvcmlnaW4pXG4gICAgICAgICAgICAgID8gb3JpZ2luLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnRcbiAgICAgICAgICAgICAgOiBpc1RvdWNoRXZlbnQob3JpZ2luKVxuICAgICAgICAgICAgICAgID8gb3JpZ2luLnRhcmdldFRvdWNoZXNbMF0hLmNsaWVudFhcbiAgICAgICAgICAgICAgICA6IGlzUG9pbnRlckV2ZW50KG9yaWdpbilcbiAgICAgICAgICAgICAgICAgID8gb3JpZ2luLmNsaWVudFggIT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBvcmlnaW4uY2xpZW50WFxuICAgICAgICAgICAgICAgICAgICA6IChvcmlnaW4udGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0XG4gICAgICAgICAgICAgICAgICA6IC0xO1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luWSA9IGlzSHRtbEVsZW1lbnQob3JpZ2luKVxuICAgICAgICAgICAgICA/IG9yaWdpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3BcbiAgICAgICAgICAgICAgOiBpc1RvdWNoRXZlbnQob3JpZ2luKVxuICAgICAgICAgICAgICAgID8gb3JpZ2luLnRhcmdldFRvdWNoZXNbMF0hLmNsaWVudFlcbiAgICAgICAgICAgICAgICA6IGlzUG9pbnRlckV2ZW50KG9yaWdpbilcbiAgICAgICAgICAgICAgICAgID8gb3JpZ2luLmNsaWVudFkgIT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBvcmlnaW4uY2xpZW50WVxuICAgICAgICAgICAgICAgICAgICA6IChvcmlnaW4udGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3BcbiAgICAgICAgICAgICAgICAgIDogLTE7XG5cbiAgICAgICAgICAgIGlmIChvcmlnaW5YICE9PSAtMSAmJiBvcmlnaW5ZICE9PSAtMSAmJiBjdXJyQ29uZmlnLmFwcGx5VHJhbnNmb3JtT3JpZ2luKSB7XG4gICAgICAgICAgICAgIHNldFN0eWxlKGNvbnRhaW5lckVsLCAndHJhbnNmb3JtLW9yaWdpbicsIGAke29yaWdpblh9cHggJHtvcmlnaW5ZfXB4YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZXRTdHlsZShjb250YWluZXJFbCwgJ3RyYW5zZm9ybS1vcmlnaW4nLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXNlRGVmYXVsdEFuaW1hdGlvbiAmJiBjb250YWluZXJDbGFzcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGNvbnRhaW5lckNsYXNzPy5pbmNsdWRlcyhFVF9PVkVSTEFZX0xFRlRfU0hFRVRfQ0xBU1MpIHx8XG4gICAgICAgICAgICAgIGNvbnRhaW5lckNsYXNzPy5pbmNsdWRlcyhFVF9PVkVSTEFZX1JJR0hUX1NIRUVUX0NMQVNTKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHNldFN0eWxlKG92ZXJsYXlQYW5lRWwsICdtYXgtd2lkdGgnLCBjdXJyQ29uZmlnLm1heFdpZHRoKTtcbiAgICAgICAgICAgICAgc2V0U3R5bGUob3ZlcmxheVBhbmVFbCwgJ21heC1oZWlnaHQnLCBjdXJyQ29uZmlnLm1heEhlaWdodCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICBjb250YWluZXJDbGFzcz8uaW5jbHVkZXMoRVRfT1ZFUkxBWV9UT1BfU0hFRVRfQ0xBU1MpIHx8XG4gICAgICAgICAgICAgIGNvbnRhaW5lckNsYXNzPy5pbmNsdWRlcyhFVF9PVkVSTEFZX0JPVFRPTV9TSEVFVF9DTEFTUylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBzZXRTdHlsZShvdmVybGF5UGFuZUVsLCAnbWF4LWhlaWdodCcsIGN1cnJDb25maWcubWF4SGVpZ2h0KTtcblxuICAgICAgICAgICAgICBzZXRTdHlsZShvdmVybGF5UGFuZUVsLCAnbWF4LXdpZHRoJywgY3VyckNvbmZpZy5tYXhXaWR0aCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhcHBseURlZmF1bHRNYXhXaWR0aHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXBwbHlEZWZhdWx0TWF4V2lkdGhzKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2V0U3R5bGUob3ZlcmxheVBhbmVFbCwgJ21pbi13aWR0aCcsIGN1cnJDb25maWcubWluV2lkdGgpO1xuICAgICAgICAgIHNldFN0eWxlKG92ZXJsYXlQYW5lRWwsICdtaW4taGVpZ2h0JywgY3VyckNvbmZpZy5taW5IZWlnaHQpO1xuXG4gICAgICAgICAgc2V0U3R5bGUob3ZlcmxheVBhbmVFbCwgJ3dpZHRoJywgY3VyckNvbmZpZy53aWR0aCk7XG4gICAgICAgICAgc2V0U3R5bGUob3ZlcmxheVBhbmVFbCwgJ2hlaWdodCcsIGN1cnJDb25maWcuaGVpZ2h0KTtcblxuICAgICAgICAgIHNldENsYXNzKGNvbnRhaW5lckVsLCBwcmV2Q29uZmlnPy5jb250YWluZXJDbGFzcywgY3VyckNvbmZpZz8uY29udGFpbmVyQ2xhc3MpO1xuICAgICAgICAgIHNldENsYXNzKG92ZXJsYXlQYW5lRWwsIHByZXZDb25maWc/LnBhbmVDbGFzcywgY3VyckNvbmZpZz8ucGFuZUNsYXNzKTtcbiAgICAgICAgICBzZXRDbGFzcyhvdmVybGF5V3JhcHBlciwgcHJldkNvbmZpZz8ub3ZlcmxheUNsYXNzLCBjdXJyQ29uZmlnPy5vdmVybGF5Q2xhc3MpO1xuXG4gICAgICAgICAgLy8gRklYTUU6IFRoZXNlIGNsYXNzZXMgc2hvdWxkIG9ubHkgYmUgcmVtb3ZlZCBpZiBubyBvcGVuIG92ZXJsYXlzIHJlcXVpcmUgdGhlbSBpbnNpZGUgdGhlaXIgY29uZmlnLlxuICAgICAgICAgIHNldENsYXNzKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgcHJldkNvbmZpZz8uZG9jdW1lbnRDbGFzcywgY3VyckNvbmZpZz8uZG9jdW1lbnRDbGFzcyk7XG4gICAgICAgICAgc2V0Q2xhc3MoZG9jdW1lbnQuYm9keSwgcHJldkNvbmZpZz8uYm9keUNsYXNzLCBjdXJyQ29uZmlnPy5ib2R5Q2xhc3MpO1xuXG4gICAgICAgICAgaWYgKGJhY2tkcm9wRWwpIHtcbiAgICAgICAgICAgIHNldENsYXNzKGJhY2tkcm9wRWwsIHByZXZDb25maWc/LmJhY2tkcm9wQ2xhc3MsIGN1cnJDb25maWc/LmJhY2tkcm9wQ2xhc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZXF1YWwocHJldkNvbmZpZz8ucG9zaXRpb24sIGN1cnJDb25maWc/LnBvc2l0aW9uKSkge1xuICAgICAgICAgICAgb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbihjdXJyQ29uZmlnLnBvc2l0aW9uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY3VyckNvbmZpZy5wb3NpdGlvblN0cmF0ZWd5KSB7XG4gICAgICAgICAgICBjZGtSZWYub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvblN0cmF0ZWd5KGN1cnJDb25maWcucG9zaXRpb25TdHJhdGVneSgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2RrUmVmLm92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY3VyckNvbmZpZy5kcmFnVG9EaXNtaXNzKSB7XG4gICAgICAgICAgICBvdmVybGF5UmVmLl9jb250YWluZXJJbnN0YW5jZS5fZW5hYmxlRHJhZ1RvRGlzbWlzcyhjdXJyQ29uZmlnLmRyYWdUb0Rpc21pc3MpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdmVybGF5UmVmLl9jb250YWluZXJJbnN0YW5jZS5fZGlzYWJsZURyYWdUb0Rpc21pc3MoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5vcGVuT3ZlcmxheXMudXBkYXRlKChvdmVybGF5cykgPT4gWy4uLm92ZXJsYXlzLCBvdmVybGF5UmVmIV0pO1xuXG4gICAgb3ZlcmxheVJlZiEuYmVmb3JlQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIC8vIEZJWE1FOiBUaGVzZSBjbGFzc2VzIHNob3VsZCBvbmx5IGJlIHJlbW92ZWQgaWYgbm8gb3BlbiBvdmVybGF5cyByZXF1aXJlIHRoZW0gaW5zaWRlIHRoZWlyIGNvbmZpZy5cbiAgICAgIGNvbnN0IGRvY3VtZW50Q2xhc3NlcyA9IGNvbXBvc2VkQ29uZmlnLnBvc2l0aW9ucy5tYXAoKHBvc2l0aW9uKSA9PiBwb3NpdGlvbi5jb25maWcuZG9jdW1lbnRDbGFzcyk7XG5cbiAgICAgIGZvciAoY29uc3Qga2xhc3Mgb2YgZG9jdW1lbnRDbGFzc2VzKSB7XG4gICAgICAgIGlmICgha2xhc3MpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtsYXNzKSkge1xuICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLmtsYXNzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShrbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYm9keUNsYXNzZXMgPSBjb21wb3NlZENvbmZpZy5wb3NpdGlvbnMubWFwKChwb3NpdGlvbikgPT4gcG9zaXRpb24uY29uZmlnLmJvZHlDbGFzcyk7XG5cbiAgICAgIGZvciAoY29uc3Qga2xhc3Mgb2YgYm9keUNsYXNzZXMpIHtcbiAgICAgICAgaWYgKCFrbGFzcykgY29udGludWU7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2xhc3MpKSB7XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKC4uLmtsYXNzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoa2xhc3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBvdmVybGF5UmVmIS5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMub3Blbk92ZXJsYXlzKCkuaW5kZXhPZihvdmVybGF5UmVmKTtcblxuICAgICAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuO1xuXG4gICAgICB0aGlzLm9wZW5PdmVybGF5cy51cGRhdGUoKG92ZXJsYXlzKSA9PiBvdmVybGF5cy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb3ZlcmxheVJlZiE7XG5cbiAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb24qL1xuICB9XG5cbiAgY2xvc2VBbGwoKTogdm9pZCB7XG4gICAgdGhpcy4jY2xvc2VPdmVybGF5cyh0aGlzLm9wZW5PdmVybGF5cygpKTtcbiAgfVxuXG4gIGdldE92ZXJsYXlCeUlkKGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vcGVuT3ZlcmxheXMoKS5maW5kKChvdmVybGF5KSA9PiBvdmVybGF5LmlkID09PSBpZCkgPz8gbnVsbDtcbiAgfVxuXG4gICNjbG9zZU92ZXJsYXlzKG92ZXJsYXlzOiBPdmVybGF5UmVmW10pIHtcbiAgICBsZXQgaSA9IG92ZXJsYXlzLmxlbmd0aDtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIG92ZXJsYXlzW2ldPy5jbG9zZSgpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
313
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL292ZXJsYXkvY29tcG9uZW50cy9vdmVybGF5L3NlcnZpY2VzL292ZXJsYXkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsTUFBTSxJQUFJLFNBQVMsRUFBRSxZQUFZLElBQUksZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0YsT0FBTyxFQUFpQixrQkFBa0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RixPQUFPLEVBQWdCLFVBQVUsRUFBZSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixLQUFLLEVBQ0wsV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFckYsT0FBTyxFQUNMLDZCQUE2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RUFBRSxDQUFDO29CQUNqQixTQUFTLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDO29CQUM3RCxNQUFNLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDdkUsU0FBUyxDQUFDLGNBQWMsR0FBRywwQkFBMEIsQ0FBQztvQkFDdEQsU0FBUyxDQUFDLGNBQWMsR0FBRywwQkFBMEIsQ0FBQztnQkFDeEQsQ0FBQztnQkFFRCxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUNsQixTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7OEdBOVRVLGNBQWM7a0hBQWQsY0FBYyxjQURELE1BQU07OzJGQUNuQixjQUFjO2tCQUQxQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZUNzc1BpeGVsVmFsdWUgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgRGlhbG9nIGFzIENka0RpYWxvZywgRGlhbG9nQ29uZmlnIGFzIENka0RpYWxvZ0NvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kaWFsb2cnO1xuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSwgTm9vcFNjcm9sbFN0cmF0ZWd5LCBWaWV3cG9ydFJ1bGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBJbmplY3RhYmxlLCBUZW1wbGF0ZVJlZiwgY29tcHV0ZWQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1xuICBST09UX0JPVU5EQVJZX1RPS0VOLFxuICBSb290Qm91bmRhcnlEaXJlY3RpdmUsXG4gIFZpZXdwb3J0U2VydmljZSxcbiAgZWxlbWVudENhblNjcm9sbCxcbiAgZXF1YWwsXG4gIGluamVjdFJvdXRlLFxufSBmcm9tICdAZXRobGV0ZS9jb3JlJztcbmltcG9ydCB7IFByb3ZpZGVUaGVtZURpcmVjdGl2ZSwgVEhFTUVfUFJPVklERVIgfSBmcm9tICdAZXRobGV0ZS90aGVtaW5nJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGZyb21FdmVudCwgbWFwLCBvZiwgcGFpcndpc2UsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT3ZlcmxheUNvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvb3ZlcmxheS1jb250YWluZXInO1xuaW1wb3J0IHsgT1ZFUkxBWV9DT05GSUcsIE9WRVJMQVlfREFUQSwgT1ZFUkxBWV9ERUZBVUxUX09QVElPTlMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgT3ZlcmxheUNvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7XG4gIEVUX09WRVJMQVlfQk9UVE9NX1NIRUVUX0NMQVNTLFxuICBFVF9PVkVSTEFZX0xFRlRfU0hFRVRfQ0xBU1MsXG4gIEVUX09WRVJMQVlfUklHSFRfU0hFRVRfQ0xBU1MsXG4gIEVUX09WRVJMQVlfVE9QX1NIRUVUX0NMQVNTLFxuICBPdmVybGF5UG9zaXRpb25CdWlsZGVyLFxuICBPdmVybGF5UmVmLFxuICBjcmVhdGVPdmVybGF5Q29uZmlnLFxufSBmcm9tICcuLi91dGlscyc7XG5cbmxldCB1bmlxdWVJZCA9IDA7XG5jb25zdCBJRF9QUkVGSVggPSAnZXQtb3ZlcmxheS0nO1xuXG5jb25zdCBzZXRTdHlsZSA9IChlbDogSFRNTEVsZW1lbnQsIHN0eWxlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZWwuc3R5bGUucmVtb3ZlUHJvcGVydHkoc3R5bGUpO1xuICB9IGVsc2Uge1xuICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KHN0eWxlLCBjb2VyY2VDc3NQaXhlbFZhbHVlKHZhbHVlKSk7XG4gIH1cbn07XG5cbmNvbnN0IHNldENsYXNzID0gKGVsOiBIVE1MRWxlbWVudCwgcHJldkNsYXNzPzogc3RyaW5nIHwgc3RyaW5nW10sIGN1cnJDbGFzcz86IHN0cmluZyB8IHN0cmluZ1tdKSA9PiB7XG4gIGlmICghZXF1YWwocHJldkNsYXNzLCBjdXJyQ2xhc3MpKSB7XG4gICAgaWYgKHByZXZDbGFzcykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJldkNsYXNzKSkge1xuICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKC4uLnByZXZDbGFzcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKHByZXZDbGFzcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGN1cnJDbGFzcykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3VyckNsYXNzKSkge1xuICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKC4uLmN1cnJDbGFzcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKGN1cnJDbGFzcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBpc0h0bWxFbGVtZW50ID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgdW5rbm93bik6IGVsZW1lbnQgaXMgSFRNTEVsZW1lbnQgPT4ge1xuICByZXR1cm4gZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xufTtcblxuY29uc3QgaXNUb3VjaEV2ZW50ID0gKGV2ZW50OiBFdmVudCk6IGV2ZW50IGlzIFRvdWNoRXZlbnQgPT4ge1xuICByZXR1cm4gZXZlbnQudHlwZVswXSA9PT0gJ3QnO1xufTtcblxuY29uc3QgaXNQb2ludGVyRXZlbnQgPSAoZXZlbnQ6IEV2ZW50KTogZXZlbnQgaXMgUG9pbnRlckV2ZW50ID0+IHtcbiAgcmV0dXJuIGV2ZW50LnR5cGVbMF0gPT09ICdjJztcbn07XG5cbmNvbnN0IEJMT0NLX0NMQVNTID0gJ2Nkay1nbG9iYWwtc2Nyb2xsYmxvY2snO1xuY29uc3QgT1ZFUlNDUk9MTF9DTEFTUyA9ICdldC1nbG9iYWwtbm8tb3ZlcnNjcm9sbCc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgT3ZlcmxheVNlcnZpY2Uge1xuICAjZGVmYXVsdE9wdGlvbnMgPSBpbmplY3QoT1ZFUkxBWV9ERUZBVUxUX09QVElPTlMsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gICNkaWFsb2cgPSBpbmplY3QoQ2RrRGlhbG9nKTtcbiAgI3ZpZXdwb3J0U2VydmljZSA9IGluamVjdChWaWV3cG9ydFNlcnZpY2UpO1xuICAjdmlld3BvcnRSdWxlciA9IGluamVjdChWaWV3cG9ydFJ1bGVyKTtcblxuICBvcGVuT3ZlcmxheXMgPSBzaWduYWw8T3ZlcmxheVJlZltdPihbXSk7XG4gIGhhc09wZW5PdmVybGF5cyA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3Blbk92ZXJsYXlzKCkubGVuZ3RoID4gMCk7XG4gIHBvc2l0aW9ucyA9IG5ldyBPdmVybGF5UG9zaXRpb25CdWlsZGVyKCk7XG4gIHJvdXRlID0gaW5qZWN0Um91dGUoKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLiNzZXR1cFNjcm9sbEJsb2NraW5nKCk7XG4gIH1cblxuICBvcGVuPFQsIEQgPSB1bmtub3duLCBSID0gdW5rbm93bj4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LCBjb25maWc6IE92ZXJsYXlDb25maWc8RD4pOiBPdmVybGF5UmVmPFQsIFI+O1xuICBvcGVuPFQsIEQgPSB1bmtub3duLCBSID0gdW5rbm93bj4odGVtcGxhdGU6IFRlbXBsYXRlUmVmPFQ+LCBjb25maWc6IE92ZXJsYXlDb25maWc8RD4pOiBPdmVybGF5UmVmPFQsIFI+O1xuICBvcGVuPFQsIEQgPSB1bmtub3duLCBSID0gdW5rbm93bj4oXG4gICAgdGVtcGxhdGU6IENvbXBvbmVudFR5cGU8VD4gfCBUZW1wbGF0ZVJlZjxUPixcbiAgICBjb25maWc6IE92ZXJsYXlDb25maWc8RD4sXG4gICk6IE92ZXJsYXlSZWY8VCwgUj47XG4gIG9wZW48VCwgRCA9IHVua25vd24sIFIgPSB1bmtub3duPihcbiAgICBjb21wb25lbnRPclRlbXBsYXRlUmVmOiBDb21wb25lbnRUeXBlPFQ+IHwgVGVtcGxhdGVSZWY8VD4sXG4gICAgY29uZmlnOiBPdmVybGF5Q29uZmlnPEQ+LFxuICApOiBPdmVybGF5UmVmPFQsIFI+IHtcbiAgICBsZXQgb3ZlcmxheVJlZjogT3ZlcmxheVJlZjxULCBSPjtcblxuICAgIGNvbnN0IGNvbXBvc2VkQ29uZmlnID0gY3JlYXRlT3ZlcmxheUNvbmZpZzxEPih0aGlzLiNkZWZhdWx0T3B0aW9ucyBhcyBPdmVybGF5Q29uZmlnPEQ+LCBjb25maWcpO1xuICAgIGNvbXBvc2VkQ29uZmlnLmlkID0gY29tcG9zZWRDb25maWcuaWQgfHwgYCR7SURfUFJFRklYfSR7dW5pcXVlSWQrK31gO1xuXG4gICAgY29uc3QgY2RrUmVmID0gdGhpcy4jZGlhbG9nLm9wZW48UiwgRCwgVD4oY29tcG9uZW50T3JUZW1wbGF0ZVJlZiwge1xuICAgICAgLi4uY29tcG9zZWRDb25maWcsXG4gICAgICBzY3JvbGxTdHJhdGVneTogbmV3IE5vb3BTY3JvbGxTdHJhdGVneSgpLFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgY2xvc2VPbkRlc3Ryb3k6IGZhbHNlLFxuICAgICAgcGFuZWxDbGFzczogJ2V0LW92ZXJsYXktcGFuZScsXG4gICAgICBjb250YWluZXI6IHtcbiAgICAgICAgdHlwZTogT3ZlcmxheUNvbnRhaW5lckNvbXBvbmVudCxcbiAgICAgICAgcHJvdmlkZXJzOiAoKSA9PiBbXG4gICAgICAgICAgeyBwcm92aWRlOiBPVkVSTEFZX0NPTkZJRywgdXNlVmFsdWU6IGNvbXBvc2VkQ29uZmlnIH0sXG4gICAgICAgICAgeyBwcm92aWRlOiBDZGtEaWFsb2dDb25maWcsIHVzZVZhbHVlOiBjb21wb3NlZENvbmZpZyB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHRlbXBsYXRlQ29udGV4dDogKCkgPT4gKHsgZGlhbG9nUmVmOiBvdmVybGF5UmVmIH0pLFxuICAgICAgcHJvdmlkZXJzOiAocmVmLCBjZGtDb25maWcsIG92ZXJsYXlDb250YWluZXIpID0+IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gb3ZlcmxheUNvbnRhaW5lciBhcyBPdmVybGF5Q29udGFpbmVyQ29tcG9uZW50O1xuICAgICAgICBvdmVybGF5UmVmID0gbmV3IE92ZXJsYXlSZWYocmVmLCBjb21wb3NlZENvbmZpZywgY29udGFpbmVyKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHsgcHJvdmlkZTogT3ZlcmxheUNvbnRhaW5lckNvbXBvbmVudCwgdXNlVmFsdWU6IG92ZXJsYXlDb250YWluZXIgfSxcbiAgICAgICAgICB7IHByb3ZpZGU6IFRIRU1FX1BST1ZJREVSLCB1c2VWYWx1ZTogY29udGFpbmVyLl90aGVtZVByb3ZpZGVyIH0sXG4gICAgICAgICAgeyBwcm92aWRlOiBQcm92aWRlVGhlbWVEaXJlY3RpdmUsIHVzZVZhbHVlOiBjb250YWluZXIuX3RoZW1lUHJvdmlkZXIgfSxcbiAgICAgICAgICB7IHByb3ZpZGU6IFJPT1RfQk9VTkRBUllfVE9LRU4sIHVzZVZhbHVlOiBjb250YWluZXIuX3Jvb3RCb3VuZGFyeSB9LFxuICAgICAgICAgIHsgcHJvdmlkZTogUm9vdEJvdW5kYXJ5RGlyZWN0aXZlLCB1c2VWYWx1ZTogY29udGFpbmVyLl9yb290Qm91bmRhcnkgfSxcbiAgICAgICAgICB7IHByb3ZpZGU6IE9WRVJMQVlfREFUQSwgdXNlVmFsdWU6IGNka0NvbmZpZy5kYXRhIH0sXG4gICAgICAgICAgeyBwcm92aWRlOiBPdmVybGF5UmVmLCB1c2VWYWx1ZTogb3ZlcmxheVJlZiB9LFxuICAgICAgICAgIC4uLihjb21wb3NlZENvbmZpZy5wcm92aWRlcnMgPz8gW10pLFxuICAgICAgICBdO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb24qL1xuICAgIChvdmVybGF5UmVmISBhcyB7IGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFQ+IH0pLmNvbXBvbmVudFJlZiA9IGNka1JlZi5jb21wb25lbnRSZWYhO1xuICAgIG92ZXJsYXlSZWYhLmNvbXBvbmVudEluc3RhbmNlID0gY2RrUmVmLmNvbXBvbmVudEluc3RhbmNlITtcblxuICAgIChjZGtSZWYuY29udGFpbmVySW5zdGFuY2UgYXMgT3ZlcmxheUNvbnRhaW5lckNvbXBvbmVudCkub3ZlcmxheVJlZiA9IG92ZXJsYXlSZWYhO1xuXG4gICAgY29uc3QgY29udGFpbmVyRWwgPSBvdmVybGF5UmVmIS5fY29udGFpbmVySW5zdGFuY2UuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IG92ZXJsYXlQYW5lRWwgPSBjZGtSZWYub3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudDtcbiAgICBjb25zdCBiYWNrZHJvcEVsID0gY2RrUmVmLm92ZXJsYXlSZWYuYmFja2Ryb3BFbGVtZW50O1xuICAgIGNvbnN0IG92ZXJsYXlXcmFwcGVyID0gY2RrUmVmLm92ZXJsYXlSZWYuaG9zdEVsZW1lbnQ7XG4gICAgY29uc3QgdXNlRGVmYXVsdEFuaW1hdGlvbiA9IGNvbXBvc2VkQ29uZmlnLmN1c3RvbUFuaW1hdGVkICE9PSB0cnVlO1xuICAgIGNvbnN0IG9yaWdpbiA9IGNvbXBvc2VkQ29uZmlnLm9yaWdpbjtcblxuICAgIGNvbWJpbmVMYXRlc3QoXG4gICAgICBjb21wb3NlZENvbmZpZy5wb3NpdGlvbnMubWFwKChicmVha3BvaW50KSA9PlxuICAgICAgICAoYnJlYWtwb2ludC5icmVha3BvaW50ID8gdGhpcy4jdmlld3BvcnRTZXJ2aWNlLm9ic2VydmUoeyBtaW46IGJyZWFrcG9pbnQuYnJlYWtwb2ludCB9KSA6IG9mKHRydWUpKS5waXBlKFxuICAgICAgICAgIG1hcCgoaXNBY3RpdmUpID0+ICh7XG4gICAgICAgICAgICBpc0FjdGl2ZSxcbiAgICAgICAgICAgIGNvbmZpZzogYnJlYWtwb2ludC5jb25maWcsXG4gICAgICAgICAgICBzaXplOlxuICAgICAgICAgICAgICB0eXBlb2YgYnJlYWtwb2ludC5icmVha3BvaW50ID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgID8gYnJlYWtwb2ludC5icmVha3BvaW50XG4gICAgICAgICAgICAgICAgOiBicmVha3BvaW50LmJyZWFrcG9pbnQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuI3ZpZXdwb3J0U2VydmljZS5nZXRCcmVha3BvaW50U2l6ZShicmVha3BvaW50LmJyZWFrcG9pbnQsICdtaW4nKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgICksXG4gICAgICApLFxuICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwob3ZlcmxheVJlZiEuYWZ0ZXJDbG9zZWQoKSksXG4gICAgICAgIG1hcCgoZW50cmllcykgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZUJyZWFrcG9pbnRzID0gZW50cmllcy5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5pc0FjdGl2ZSk7XG4gICAgICAgICAgY29uc3QgaGlnaGVzdEJyZWFrcG9pbnQgPSBhY3RpdmVCcmVha3BvaW50cy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IChwcmV2LnNpemUgPiBjdXJyLnNpemUgPyBwcmV2IDogY3VycikpO1xuXG4gICAgICAgICAgcmV0dXJuIGhpZ2hlc3RCcmVha3BvaW50LmNvbmZpZztcbiAgICAgICAgfSksXG4gICAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgICAgcGFpcndpc2UoKSxcbiAgICAgICAgdGFwKChbcHJldkNvbmZpZywgY3VyckNvbmZpZ10pID0+IHtcbiAgICAgICAgICBpZiAoIWN1cnJDb25maWcpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckNsYXNzID0gY3VyckNvbmZpZy5jb250YWluZXJDbGFzcztcblxuICAgICAgICAgIGNvbnN0IGFwcGx5RGVmYXVsdE1heFdpZHRocyA9ICgpID0+IHtcbiAgICAgICAgICAgIHNldFN0eWxlKG92ZXJsYXlQYW5lRWwsICdtYXgtd2lkdGgnLCBjdXJyQ29uZmlnLm1heFdpZHRoKTtcbiAgICAgICAgICAgIHNldFN0eWxlKG92ZXJsYXlQYW5lRWwsICdtYXgtaGVpZ2h0JywgY3VyckNvbmZpZy5tYXhIZWlnaHQpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAob3JpZ2luKSB7XG4gICAgICAgICAgICBpZiAoIWN1cnJDb25maWcuYXBwbHlUcmFuc2Zvcm1PcmlnaW4pIHtcbiAgICAgICAgICAgICAgc2V0U3R5bGUoY29udGFpbmVyRWwsICd0cmFuc2Zvcm0tb3JpZ2luJywgbnVsbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBJZiBnZXRCb3VuZGluZ0NsaWVudFJlY3QgaXMgdXNlZCBpdCBzaG91bGQgdXNlIHRoZSBjZW50ZXIgb2YgdGhlIGVsZW1lbnQuXG4gICAgICAgICAgICAgIGNvbnN0IG9yaWdpblggPSBpc0h0bWxFbGVtZW50KG9yaWdpbilcbiAgICAgICAgICAgICAgICA/IG9yaWdpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0XG4gICAgICAgICAgICAgICAgOiBpc1RvdWNoRXZlbnQob3JpZ2luKVxuICAgICAgICAgICAgICAgICAgPyBvcmlnaW4udGFyZ2V0VG91Y2hlc1swXSEuY2xpZW50WFxuICAgICAgICAgICAgICAgICAgOiBpc1BvaW50ZXJFdmVudChvcmlnaW4pXG4gICAgICAgICAgICAgICAgICAgID8gb3JpZ2luLmNsaWVudFggIT09IDBcbiAgICAgICAgICAgICAgICAgICAgICA/IG9yaWdpbi5jbGllbnRYXG4gICAgICAgICAgICAgICAgICAgICAgOiAob3JpZ2luLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdFxuICAgICAgICAgICAgICAgICAgICA6IC0xO1xuICAgICAgICAgICAgICBjb25zdCBvcmlnaW5ZID0gaXNIdG1sRWxlbWVudChvcmlnaW4pXG4gICAgICAgICAgICAgICAgPyBvcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wXG4gICAgICAgICAgICAgICAgOiBpc1RvdWNoRXZlbnQob3JpZ2luKVxuICAgICAgICAgICAgICAgICAgPyBvcmlnaW4udGFyZ2V0VG91Y2hlc1swXSEuY2xpZW50WVxuICAgICAgICAgICAgICAgICAgOiBpc1BvaW50ZXJFdmVudChvcmlnaW4pXG4gICAgICAgICAgICAgICAgICAgID8gb3JpZ2luLmNsaWVudFkgIT09IDBcbiAgICAgICAgICAgICAgICAgICAgICA/IG9yaWdpbi5jbGllbnRZXG4gICAgICAgICAgICAgICAgICAgICAgOiAob3JpZ2luLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wXG4gICAgICAgICAgICAgICAgICAgIDogLTE7XG5cbiAgICAgICAgICAgICAgaWYgKG9yaWdpblggIT09IC0xICYmIG9yaWdpblkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgc2V0U3R5bGUoY29udGFpbmVyRWwsICd0cmFuc2Zvcm0tb3JpZ2luJywgYCR7b3JpZ2luWH1weCAke29yaWdpbll9cHhgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1c2VEZWZhdWx0QW5pbWF0aW9uICYmIGNvbnRhaW5lckNsYXNzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgY29udGFpbmVyQ2xhc3M/LmluY2x1ZGVzKEVUX09WRVJMQVlfTEVGVF9TSEVFVF9DTEFTUykgfHxcbiAgICAgICAgICAgICAgY29udGFpbmVyQ2xhc3M/LmluY2x1ZGVzKEVUX09WRVJMQVlfUklHSFRfU0hFRVRfQ0xBU1MpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgc2V0U3R5bGUob3ZlcmxheVBhbmVFbCwgJ21heC13aWR0aCcsIGN1cnJDb25maWcubWF4V2lkdGgpO1xuICAgICAgICAgICAgICBzZXRTdHlsZShvdmVybGF5UGFuZUVsLCAnbWF4LWhlaWdodCcsIGN1cnJDb25maWcubWF4SGVpZ2h0KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgIGNvbnRhaW5lckNsYXNzPy5pbmNsdWRlcyhFVF9PVkVSTEFZX1RPUF9TSEVFVF9DTEFTUykgfHxcbiAgICAgICAgICAgICAgY29udGFpbmVyQ2xhc3M/LmluY2x1ZGVzKEVUX09WRVJMQVlfQk9UVE9NX1NIRUVUX0NMQVNTKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHNldFN0eWxlKG92ZXJsYXlQYW5lRWwsICdtYXgtaGVpZ2h0JywgY3VyckNvbmZpZy5tYXhIZWlnaHQpO1xuXG4gICAgICAgICAgICAgIHNldFN0eWxlKG92ZXJsYXlQYW5lRWwsICdtYXgtd2lkdGgnLCBjdXJyQ29uZmlnLm1heFdpZHRoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFwcGx5RGVmYXVsdE1heFdpZHRocygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcHBseURlZmF1bHRNYXhXaWR0aHMoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzZXRTdHlsZShvdmVybGF5UGFuZUVsLCAnbWluLXdpZHRoJywgY3VyckNvbmZpZy5taW5XaWR0aCk7XG4gICAgICAgICAgc2V0U3R5bGUob3ZlcmxheVBhbmVFbCwgJ21pbi1oZWlnaHQnLCBjdXJyQ29uZmlnLm1pbkhlaWdodCk7XG5cbiAgICAgICAgICBzZXRTdHlsZShvdmVybGF5UGFuZUVsLCAnd2lkdGgnLCBjdXJyQ29uZmlnLndpZHRoKTtcbiAgICAgICAgICBzZXRTdHlsZShvdmVybGF5UGFuZUVsLCAnaGVpZ2h0JywgY3VyckNvbmZpZy5oZWlnaHQpO1xuXG4gICAgICAgICAgc2V0Q2xhc3MoY29udGFpbmVyRWwsIHByZXZDb25maWc/LmNvbnRhaW5lckNsYXNzLCBjdXJyQ29uZmlnPy5jb250YWluZXJDbGFzcyk7XG4gICAgICAgICAgc2V0Q2xhc3Mob3ZlcmxheVBhbmVFbCwgcHJldkNvbmZpZz8ucGFuZUNsYXNzLCBjdXJyQ29uZmlnPy5wYW5lQ2xhc3MpO1xuICAgICAgICAgIHNldENsYXNzKG92ZXJsYXlXcmFwcGVyLCBwcmV2Q29uZmlnPy5vdmVybGF5Q2xhc3MsIGN1cnJDb25maWc/Lm92ZXJsYXlDbGFzcyk7XG5cbiAgICAgICAgICAvLyBGSVhNRTogVGhlc2UgY2xhc3NlcyBzaG91bGQgb25seSBiZSByZW1vdmVkIGlmIG5vIG9wZW4gb3ZlcmxheXMgcmVxdWlyZSB0aGVtIGluc2lkZSB0aGVpciBjb25maWcuXG4gICAgICAgICAgc2V0Q2xhc3MoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBwcmV2Q29uZmlnPy5kb2N1bWVudENsYXNzLCBjdXJyQ29uZmlnPy5kb2N1bWVudENsYXNzKTtcbiAgICAgICAgICBzZXRDbGFzcyhkb2N1bWVudC5ib2R5LCBwcmV2Q29uZmlnPy5ib2R5Q2xhc3MsIGN1cnJDb25maWc/LmJvZHlDbGFzcyk7XG5cbiAgICAgICAgICBpZiAoYmFja2Ryb3BFbCkge1xuICAgICAgICAgICAgc2V0Q2xhc3MoYmFja2Ryb3BFbCwgcHJldkNvbmZpZz8uYmFja2Ryb3BDbGFzcywgY3VyckNvbmZpZz8uYmFja2Ryb3BDbGFzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFlcXVhbChwcmV2Q29uZmlnPy5wb3NpdGlvbiwgY3VyckNvbmZpZz8ucG9zaXRpb24pKSB7XG4gICAgICAgICAgICBvdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKGN1cnJDb25maWcucG9zaXRpb24pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjdXJyQ29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIGNka1JlZi5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3koY3VyckNvbmZpZy5wb3NpdGlvblN0cmF0ZWd5KCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjZGtSZWYub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjdXJyQ29uZmlnLmRyYWdUb0Rpc21pc3MpIHtcbiAgICAgICAgICAgIG92ZXJsYXlSZWYuX2NvbnRhaW5lckluc3RhbmNlLl9lbmFibGVEcmFnVG9EaXNtaXNzKGN1cnJDb25maWcuZHJhZ1RvRGlzbWlzcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG92ZXJsYXlSZWYuX2NvbnRhaW5lckluc3RhbmNlLl9kaXNhYmxlRHJhZ1RvRGlzbWlzcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLm9wZW5PdmVybGF5cy51cGRhdGUoKG92ZXJsYXlzKSA9PiBbLi4ub3ZlcmxheXMsIG92ZXJsYXlSZWYhXSk7XG5cbiAgICBvdmVybGF5UmVmIS5iZWZvcmVDbG9zZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgLy8gRklYTUU6IFRoZXNlIGNsYXNzZXMgc2hvdWxkIG9ubHkgYmUgcmVtb3ZlZCBpZiBubyBvcGVuIG92ZXJsYXlzIHJlcXVpcmUgdGhlbSBpbnNpZGUgdGhlaXIgY29uZmlnLlxuICAgICAgY29uc3QgZG9jdW1lbnRDbGFzc2VzID0gY29tcG9zZWRDb25maWcucG9zaXRpb25zLm1hcCgocG9zaXRpb24pID0+IHBvc2l0aW9uLmNvbmZpZy5kb2N1bWVudENsYXNzKTtcblxuICAgICAgZm9yIChjb25zdCBrbGFzcyBvZiBkb2N1bWVudENsYXNzZXMpIHtcbiAgICAgICAgaWYgKCFrbGFzcykgY29udGludWU7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2xhc3MpKSB7XG4gICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoLi4ua2xhc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGtsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBib2R5Q2xhc3NlcyA9IGNvbXBvc2VkQ29uZmlnLnBvc2l0aW9ucy5tYXAoKHBvc2l0aW9uKSA9PiBwb3NpdGlvbi5jb25maWcuYm9keUNsYXNzKTtcblxuICAgICAgZm9yIChjb25zdCBrbGFzcyBvZiBib2R5Q2xhc3Nlcykge1xuICAgICAgICBpZiAoIWtsYXNzKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrbGFzcykpIHtcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoLi4ua2xhc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShrbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIG92ZXJsYXlSZWYhLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5vcGVuT3ZlcmxheXMoKS5pbmRleE9mKG92ZXJsYXlSZWYpO1xuXG4gICAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm47XG5cbiAgICAgIHRoaXMub3Blbk92ZXJsYXlzLnVwZGF0ZSgob3ZlcmxheXMpID0+IG92ZXJsYXlzLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvdmVybGF5UmVmITtcblxuICAgIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvbiovXG4gIH1cblxuICBjbG9zZUFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLiNjbG9zZU92ZXJsYXlzKHRoaXMub3Blbk92ZXJsYXlzKCkpO1xuICB9XG5cbiAgZ2V0T3ZlcmxheUJ5SWQoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm9wZW5PdmVybGF5cygpLmZpbmQoKG92ZXJsYXkpID0+IG92ZXJsYXkuaWQgPT09IGlkKSA/PyBudWxsO1xuICB9XG5cbiAgI2Nsb3NlT3ZlcmxheXMob3ZlcmxheXM6IE92ZXJsYXlSZWZbXSkge1xuICAgIGxldCBpID0gb3ZlcmxheXMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgb3ZlcmxheXNbaV0/LmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgI3NldHVwU2Nyb2xsQmxvY2tpbmcoKSB7XG4gICAgY29uc3QgcHJldmlvdXNIVE1MU3R5bGVzID0geyB0b3A6ICcnLCBsZWZ0OiAnJyB9O1xuICAgIGxldCBwcmV2aW91c1Njcm9sbFBvc2l0aW9uOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfSA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG4gICAgbGV0IGlzRW5hYmxlZCA9IGZhbHNlO1xuICAgIGxldCBsYXN0Um91dGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICAgIHRvT2JzZXJ2YWJsZSh0aGlzLmhhc09wZW5PdmVybGF5cylcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGhhc09wZW5PdmVybGF5cykgPT4ge1xuICAgICAgICAgIGlmICghaGFzT3Blbk92ZXJsYXlzKSByZXR1cm4gb2YoeyBoYXNPcGVuT3ZlcmxheXMsIHNjcm9sbGVkOiBmYWxzZSB9KTtcblxuICAgICAgICAgIHJldHVybiBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykucGlwZShcbiAgICAgICAgICAgIHN0YXJ0V2l0aCh7IGhhc09wZW5PdmVybGF5cywgc2Nyb2xsZWQ6IHRydWUgfSksXG4gICAgICAgICAgICBtYXAoKCkgPT4gKHsgaGFzT3Blbk92ZXJsYXlzLCBzY3JvbGxlZDogdHJ1ZSB9KSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoeyBoYXNPcGVuT3ZlcmxheXMgfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGhhc0Jsb2NrQ2xhc3MgPSByb290LmNsYXNzTGlzdC5jb250YWlucyhCTE9DS19DTEFTUyk7XG5cbiAgICAgICAgICBpZiAoaGFzT3Blbk92ZXJsYXlzICYmIChoYXNCbG9ja0NsYXNzIHx8IGVsZW1lbnRDYW5TY3JvbGwocm9vdCkpKSB7XG4gICAgICAgICAgICBpZiAoaXNFbmFibGVkKSByZXR1cm47XG5cbiAgICAgICAgICAgIHByZXZpb3VzU2Nyb2xsUG9zaXRpb24gPSB0aGlzLiN2aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtcbiAgICAgICAgICAgIHByZXZpb3VzSFRNTFN0eWxlcy5sZWZ0ID0gcm9vdC5zdHlsZS5sZWZ0IHx8ICcnO1xuICAgICAgICAgICAgcHJldmlvdXNIVE1MU3R5bGVzLnRvcCA9IHJvb3Quc3R5bGUudG9wIHx8ICcnO1xuXG4gICAgICAgICAgICByb290LnN0eWxlLmxlZnQgPSBjb2VyY2VDc3NQaXhlbFZhbHVlKC1wcmV2aW91c1Njcm9sbFBvc2l0aW9uLmxlZnQpO1xuICAgICAgICAgICAgcm9vdC5zdHlsZS50b3AgPSBjb2VyY2VDc3NQaXhlbFZhbHVlKC1wcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCk7XG4gICAgICAgICAgICByb290LmNsYXNzTGlzdC5hZGQoQkxPQ0tfQ0xBU1MsIE9WRVJTQ1JPTExfQ0xBU1MpO1xuXG4gICAgICAgICAgICBpc0VuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgbGFzdFJvdXRlID0gdGhpcy5yb3V0ZSgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWhhc09wZW5PdmVybGF5cykge1xuICAgICAgICAgICAgaWYgKCFpc0VuYWJsZWQpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgaHRtbFN0eWxlID0gcm9vdC5zdHlsZTtcbiAgICAgICAgICAgIGNvbnN0IGJvZHlTdHlsZSA9IGRvY3VtZW50LmJvZHkuc3R5bGU7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c0h0bWxTY3JvbGxCZWhhdmlvciA9IGh0bWxTdHlsZS5zY3JvbGxCZWhhdmlvciB8fCAnJztcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQm9keVNjcm9sbEJlaGF2aW9yID0gYm9keVN0eWxlLnNjcm9sbEJlaGF2aW9yIHx8ICcnO1xuXG4gICAgICAgICAgICBjb25zdCBkaWROYXZpZ2F0ZSA9IGxhc3RSb3V0ZSAhPT0gdGhpcy5yb3V0ZSgpO1xuXG4gICAgICAgICAgICByb290LmNsYXNzTGlzdC5yZW1vdmUoQkxPQ0tfQ0xBU1MsIE9WRVJTQ1JPTExfQ0xBU1MpO1xuXG4gICAgICAgICAgICByb290LnN0eWxlLmxlZnQgPSBwcmV2aW91c0hUTUxTdHlsZXMubGVmdDtcbiAgICAgICAgICAgIHJvb3Quc3R5bGUudG9wID0gcHJldmlvdXNIVE1MU3R5bGVzLnRvcDtcblxuICAgICAgICAgICAgaWYgKCFkaWROYXZpZ2F0ZSkge1xuICAgICAgICAgICAgICBodG1sU3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSBib2R5U3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSAnYXV0byc7XG4gICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGwocHJldmlvdXNTY3JvbGxQb3NpdGlvbi5sZWZ0LCBwcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCk7XG4gICAgICAgICAgICAgIGh0bWxTdHlsZS5zY3JvbGxCZWhhdmlvciA9IHByZXZpb3VzSHRtbFNjcm9sbEJlaGF2aW9yO1xuICAgICAgICAgICAgICBib2R5U3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSBwcmV2aW91c0JvZHlTY3JvbGxCZWhhdmlvcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXNFbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICBsYXN0Um91dGUgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiJdfQ==
|
package/fesm2022/ethlete-cdk.mjs
CHANGED
|
@@ -12339,52 +12339,7 @@ class OverlayService {
|
|
|
12339
12339
|
this.hasOpenOverlays = computed(() => this.openOverlays().length > 0);
|
|
12340
12340
|
this.positions = new OverlayPositionBuilder();
|
|
12341
12341
|
this.route = injectRoute();
|
|
12342
|
-
|
|
12343
|
-
let previousScrollPosition = { top: 0, left: 0 };
|
|
12344
|
-
let isEnabled = false;
|
|
12345
|
-
let lastRoute = null;
|
|
12346
|
-
const root = document.documentElement;
|
|
12347
|
-
toObservable(this.hasOpenOverlays)
|
|
12348
|
-
.pipe(switchMap((hasOpenOverlays) => {
|
|
12349
|
-
if (!hasOpenOverlays)
|
|
12350
|
-
return of({ hasOpenOverlays, scrolled: false });
|
|
12351
|
-
return fromEvent(window, 'resize').pipe(startWith({ hasOpenOverlays, scrolled: true }), map(() => ({ hasOpenOverlays, scrolled: true })));
|
|
12352
|
-
}), tap(({ hasOpenOverlays }) => {
|
|
12353
|
-
const hasBlockClass = root.classList.contains(BLOCK_CLASS);
|
|
12354
|
-
if (hasOpenOverlays && (hasBlockClass || elementCanScroll(root))) {
|
|
12355
|
-
if (isEnabled)
|
|
12356
|
-
return;
|
|
12357
|
-
previousScrollPosition = this.#viewportRuler.getViewportScrollPosition();
|
|
12358
|
-
previousHTMLStyles.left = root.style.left || '';
|
|
12359
|
-
previousHTMLStyles.top = root.style.top || '';
|
|
12360
|
-
root.style.left = coerceCssPixelValue(-previousScrollPosition.left);
|
|
12361
|
-
root.style.top = coerceCssPixelValue(-previousScrollPosition.top);
|
|
12362
|
-
root.classList.add(BLOCK_CLASS, OVERSCROLL_CLASS);
|
|
12363
|
-
isEnabled = true;
|
|
12364
|
-
lastRoute = this.route();
|
|
12365
|
-
}
|
|
12366
|
-
else if (!hasOpenOverlays) {
|
|
12367
|
-
if (!isEnabled)
|
|
12368
|
-
return;
|
|
12369
|
-
const htmlStyle = root.style;
|
|
12370
|
-
const bodyStyle = document.body.style;
|
|
12371
|
-
const previousHtmlScrollBehavior = htmlStyle.scrollBehavior || '';
|
|
12372
|
-
const previousBodyScrollBehavior = bodyStyle.scrollBehavior || '';
|
|
12373
|
-
const didNavigate = lastRoute !== this.route();
|
|
12374
|
-
root.classList.remove(BLOCK_CLASS, OVERSCROLL_CLASS);
|
|
12375
|
-
root.style.left = previousHTMLStyles.left;
|
|
12376
|
-
root.style.top = previousHTMLStyles.top;
|
|
12377
|
-
if (!didNavigate) {
|
|
12378
|
-
htmlStyle.scrollBehavior = bodyStyle.scrollBehavior = 'auto';
|
|
12379
|
-
window.scroll(previousScrollPosition.left, previousScrollPosition.top);
|
|
12380
|
-
htmlStyle.scrollBehavior = previousHtmlScrollBehavior;
|
|
12381
|
-
bodyStyle.scrollBehavior = previousBodyScrollBehavior;
|
|
12382
|
-
}
|
|
12383
|
-
isEnabled = false;
|
|
12384
|
-
lastRoute = null;
|
|
12385
|
-
}
|
|
12386
|
-
}))
|
|
12387
|
-
.subscribe();
|
|
12342
|
+
this.#setupScrollBlocking();
|
|
12388
12343
|
}
|
|
12389
12344
|
open(componentOrTemplateRef, config) {
|
|
12390
12345
|
let overlayRef;
|
|
@@ -12451,30 +12406,32 @@ class OverlayService {
|
|
|
12451
12406
|
setStyle(overlayPaneEl, 'max-height', currConfig.maxHeight);
|
|
12452
12407
|
};
|
|
12453
12408
|
if (origin) {
|
|
12454
|
-
|
|
12455
|
-
|
|
12456
|
-
? origin.getBoundingClientRect().left
|
|
12457
|
-
: isTouchEvent(origin)
|
|
12458
|
-
? origin.targetTouches[0].clientX
|
|
12459
|
-
: isPointerEvent(origin)
|
|
12460
|
-
? origin.clientX !== 0
|
|
12461
|
-
? origin.clientX
|
|
12462
|
-
: origin.target.getBoundingClientRect().left
|
|
12463
|
-
: -1;
|
|
12464
|
-
const originY = isHtmlElement(origin)
|
|
12465
|
-
? origin.getBoundingClientRect().top
|
|
12466
|
-
: isTouchEvent(origin)
|
|
12467
|
-
? origin.targetTouches[0].clientY
|
|
12468
|
-
: isPointerEvent(origin)
|
|
12469
|
-
? origin.clientY !== 0
|
|
12470
|
-
? origin.clientY
|
|
12471
|
-
: origin.target.getBoundingClientRect().top
|
|
12472
|
-
: -1;
|
|
12473
|
-
if (originX !== -1 && originY !== -1 && currConfig.applyTransformOrigin) {
|
|
12474
|
-
setStyle(containerEl, 'transform-origin', `${originX}px ${originY}px`);
|
|
12409
|
+
if (!currConfig.applyTransformOrigin) {
|
|
12410
|
+
setStyle(containerEl, 'transform-origin', null);
|
|
12475
12411
|
}
|
|
12476
12412
|
else {
|
|
12477
|
-
|
|
12413
|
+
// TODO: If getBoundingClientRect is used it should use the center of the element.
|
|
12414
|
+
const originX = isHtmlElement(origin)
|
|
12415
|
+
? origin.getBoundingClientRect().left
|
|
12416
|
+
: isTouchEvent(origin)
|
|
12417
|
+
? origin.targetTouches[0].clientX
|
|
12418
|
+
: isPointerEvent(origin)
|
|
12419
|
+
? origin.clientX !== 0
|
|
12420
|
+
? origin.clientX
|
|
12421
|
+
: origin.target.getBoundingClientRect().left
|
|
12422
|
+
: -1;
|
|
12423
|
+
const originY = isHtmlElement(origin)
|
|
12424
|
+
? origin.getBoundingClientRect().top
|
|
12425
|
+
: isTouchEvent(origin)
|
|
12426
|
+
? origin.targetTouches[0].clientY
|
|
12427
|
+
: isPointerEvent(origin)
|
|
12428
|
+
? origin.clientY !== 0
|
|
12429
|
+
? origin.clientY
|
|
12430
|
+
: origin.target.getBoundingClientRect().top
|
|
12431
|
+
: -1;
|
|
12432
|
+
if (originX !== -1 && originY !== -1) {
|
|
12433
|
+
setStyle(containerEl, 'transform-origin', `${originX}px ${originY}px`);
|
|
12434
|
+
}
|
|
12478
12435
|
}
|
|
12479
12436
|
}
|
|
12480
12437
|
if (useDefaultAnimation && containerClass?.length) {
|
|
@@ -12572,6 +12529,54 @@ class OverlayService {
|
|
|
12572
12529
|
overlays[i]?.close();
|
|
12573
12530
|
}
|
|
12574
12531
|
}
|
|
12532
|
+
#setupScrollBlocking() {
|
|
12533
|
+
const previousHTMLStyles = { top: '', left: '' };
|
|
12534
|
+
let previousScrollPosition = { top: 0, left: 0 };
|
|
12535
|
+
let isEnabled = false;
|
|
12536
|
+
let lastRoute = null;
|
|
12537
|
+
const root = document.documentElement;
|
|
12538
|
+
toObservable(this.hasOpenOverlays)
|
|
12539
|
+
.pipe(switchMap((hasOpenOverlays) => {
|
|
12540
|
+
if (!hasOpenOverlays)
|
|
12541
|
+
return of({ hasOpenOverlays, scrolled: false });
|
|
12542
|
+
return fromEvent(window, 'resize').pipe(startWith({ hasOpenOverlays, scrolled: true }), map(() => ({ hasOpenOverlays, scrolled: true })));
|
|
12543
|
+
}), tap(({ hasOpenOverlays }) => {
|
|
12544
|
+
const hasBlockClass = root.classList.contains(BLOCK_CLASS);
|
|
12545
|
+
if (hasOpenOverlays && (hasBlockClass || elementCanScroll(root))) {
|
|
12546
|
+
if (isEnabled)
|
|
12547
|
+
return;
|
|
12548
|
+
previousScrollPosition = this.#viewportRuler.getViewportScrollPosition();
|
|
12549
|
+
previousHTMLStyles.left = root.style.left || '';
|
|
12550
|
+
previousHTMLStyles.top = root.style.top || '';
|
|
12551
|
+
root.style.left = coerceCssPixelValue(-previousScrollPosition.left);
|
|
12552
|
+
root.style.top = coerceCssPixelValue(-previousScrollPosition.top);
|
|
12553
|
+
root.classList.add(BLOCK_CLASS, OVERSCROLL_CLASS);
|
|
12554
|
+
isEnabled = true;
|
|
12555
|
+
lastRoute = this.route();
|
|
12556
|
+
}
|
|
12557
|
+
else if (!hasOpenOverlays) {
|
|
12558
|
+
if (!isEnabled)
|
|
12559
|
+
return;
|
|
12560
|
+
const htmlStyle = root.style;
|
|
12561
|
+
const bodyStyle = document.body.style;
|
|
12562
|
+
const previousHtmlScrollBehavior = htmlStyle.scrollBehavior || '';
|
|
12563
|
+
const previousBodyScrollBehavior = bodyStyle.scrollBehavior || '';
|
|
12564
|
+
const didNavigate = lastRoute !== this.route();
|
|
12565
|
+
root.classList.remove(BLOCK_CLASS, OVERSCROLL_CLASS);
|
|
12566
|
+
root.style.left = previousHTMLStyles.left;
|
|
12567
|
+
root.style.top = previousHTMLStyles.top;
|
|
12568
|
+
if (!didNavigate) {
|
|
12569
|
+
htmlStyle.scrollBehavior = bodyStyle.scrollBehavior = 'auto';
|
|
12570
|
+
window.scroll(previousScrollPosition.left, previousScrollPosition.top);
|
|
12571
|
+
htmlStyle.scrollBehavior = previousHtmlScrollBehavior;
|
|
12572
|
+
bodyStyle.scrollBehavior = previousBodyScrollBehavior;
|
|
12573
|
+
}
|
|
12574
|
+
isEnabled = false;
|
|
12575
|
+
lastRoute = null;
|
|
12576
|
+
}
|
|
12577
|
+
}))
|
|
12578
|
+
.subscribe();
|
|
12579
|
+
}
|
|
12575
12580
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: OverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
12576
12581
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: OverlayService, providedIn: 'root' }); }
|
|
12577
12582
|
}
|