angular-three 2.0.0-beta.3 → 2.0.0-beta.5
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/esm2022/lib/canvas.mjs +6 -6
- package/esm2022/lib/di/ref.mjs +6 -6
- package/esm2022/lib/directives/args.mjs +3 -3
- package/esm2022/lib/directives/common.mjs +6 -5
- package/esm2022/lib/directives/parent.mjs +3 -3
- package/esm2022/lib/directives/repeat.mjs +3 -3
- package/esm2022/lib/loader.mjs +38 -42
- package/esm2022/lib/portal.mjs +32 -34
- package/esm2022/lib/renderer/renderer.mjs +10 -7
- package/esm2022/lib/renderer/store.mjs +7 -7
- package/esm2022/lib/renderer/utils.mjs +1 -1
- package/esm2022/lib/routed-scene.mjs +3 -3
- package/esm2022/lib/stores/signal.store.mjs +9 -11
- package/esm2022/lib/stores/store.mjs +5 -8
- package/esm2022/lib/utils/apply-props.mjs +13 -4
- package/fesm2022/angular-three.mjs +130 -131
- package/fesm2022/angular-three.mjs.map +1 -1
- package/lib/portal.d.ts +3 -4
- package/lib/renderer/renderer.d.ts +1 -1
- package/lib/renderer/store.d.ts +0 -2
- package/lib/renderer/utils.d.ts +1 -1
- package/lib/stores/signal.store.d.ts +1 -0
- package/lib/utils/is.d.ts +1 -1
- package/metadata.json +1 -1
- package/package.json +49 -49
- package/plugin/package.json +2 -3
- package/web-types.json +1 -1
package/esm2022/lib/portal.mjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { NgIf } from '@angular/common';
|
|
2
2
|
import { Component, ContentChild, DestroyRef, Directive, EventEmitter, Injector, Input, NgZone, Output, SkipSelf, TemplateRef, ViewChild, ViewContainerRef, effect, inject, } from '@angular/core';
|
|
3
3
|
import * as THREE from 'three';
|
|
4
|
+
import { injectBeforeRender } from './di/before-render';
|
|
4
5
|
import { injectNgtRef } from './di/ref';
|
|
5
6
|
import { SPECIAL_INTERNAL_ADD_COMMENT } from './renderer/utils';
|
|
6
7
|
import { NgtSignalStore } from './stores/signal.store';
|
|
@@ -8,6 +9,7 @@ import { NgtStore } from './stores/store';
|
|
|
8
9
|
import { getLocalState, prepare } from './utils/instance';
|
|
9
10
|
import { is } from './utils/is';
|
|
10
11
|
import { safeDetectChanges } from './utils/safe-detect-changes';
|
|
12
|
+
import { queueMicrotaskInInjectionContext } from './utils/timing';
|
|
11
13
|
import { updateCamera } from './utils/update';
|
|
12
14
|
import * as i0 from "@angular/core";
|
|
13
15
|
const privateKeys = [
|
|
@@ -25,39 +27,35 @@ const privateKeys = [
|
|
|
25
27
|
];
|
|
26
28
|
class NgtPortalBeforeRender {
|
|
27
29
|
#portalStore;
|
|
28
|
-
#subscription;
|
|
29
30
|
constructor() {
|
|
30
31
|
this.#portalStore = inject(NgtStore);
|
|
31
32
|
this.renderPriority = 1;
|
|
32
33
|
this.beforeRender = new EventEmitter();
|
|
33
|
-
inject(DestroyRef).onDestroy(() => {
|
|
34
|
-
this.#subscription?.();
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
ngOnInit() {
|
|
38
34
|
let oldClear;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
35
|
+
queueMicrotaskInInjectionContext(() => {
|
|
36
|
+
injectBeforeRender(({ delta, frame }) => {
|
|
37
|
+
this.beforeRender.emit({ ...this.#portalStore.get(), delta, frame });
|
|
38
|
+
const { gl, scene, camera } = this.#portalStore.get();
|
|
39
|
+
oldClear = gl.autoClear;
|
|
40
|
+
if (this.renderPriority === 1) {
|
|
41
|
+
// clear scene and render with default
|
|
42
|
+
gl.autoClear = true;
|
|
43
|
+
gl.render(this.parentScene, this.parentCamera);
|
|
44
|
+
}
|
|
45
|
+
// disable cleaning
|
|
46
|
+
gl.autoClear = false;
|
|
47
|
+
gl.clearDepth();
|
|
48
|
+
gl.render(scene, camera);
|
|
49
|
+
// restore
|
|
50
|
+
gl.autoClear = oldClear;
|
|
51
|
+
}, { priority: this.renderPriority });
|
|
52
|
+
});
|
|
55
53
|
}
|
|
56
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.
|
|
57
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.
|
|
54
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtPortalBeforeRender, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
55
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.2", type: NgtPortalBeforeRender, isStandalone: true, selector: "[ngtPortalBeforeRender]", inputs: { renderPriority: "renderPriority", parentScene: "parentScene", parentCamera: "parentCamera" }, outputs: { beforeRender: "beforeRender" }, ngImport: i0 }); }
|
|
58
56
|
}
|
|
59
57
|
export { NgtPortalBeforeRender };
|
|
60
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.
|
|
58
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtPortalBeforeRender, decorators: [{
|
|
61
59
|
type: Directive,
|
|
62
60
|
args: [{ selector: '[ngtPortalBeforeRender]', standalone: true }]
|
|
63
61
|
}], ctorParameters: function () { return []; }, propDecorators: { renderPriority: [{
|
|
@@ -79,11 +77,11 @@ class NgtPortalContent {
|
|
|
79
77
|
delete commentNode[SPECIAL_INTERNAL_ADD_COMMENT];
|
|
80
78
|
}
|
|
81
79
|
}
|
|
82
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.
|
|
83
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.
|
|
80
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtPortalContent, deps: [{ token: i0.ViewContainerRef }, { token: i0.ViewContainerRef, skipSelf: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
81
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.2", type: NgtPortalContent, isStandalone: true, selector: "ng-template[ngtPortalContent]", ngImport: i0 }); }
|
|
84
82
|
}
|
|
85
83
|
export { NgtPortalContent };
|
|
86
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.
|
|
84
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtPortalContent, decorators: [{
|
|
87
85
|
type: Directive,
|
|
88
86
|
args: [{ selector: 'ng-template[ngtPortalContent]', standalone: true }]
|
|
89
87
|
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ViewContainerRef, decorators: [{
|
|
@@ -93,7 +91,7 @@ class NgtPortal extends NgtSignalStore {
|
|
|
93
91
|
set container(container) {
|
|
94
92
|
this.set({ container });
|
|
95
93
|
}
|
|
96
|
-
set
|
|
94
|
+
set portalState(state) {
|
|
97
95
|
this.set({ state });
|
|
98
96
|
}
|
|
99
97
|
#parentStore;
|
|
@@ -198,8 +196,8 @@ class NgtPortal extends NgtSignalStore {
|
|
|
198
196
|
...restInputsState,
|
|
199
197
|
};
|
|
200
198
|
}
|
|
201
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.
|
|
202
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.
|
|
199
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtPortal, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
200
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: NgtPortal, isStandalone: true, selector: "ngt-portal", inputs: { container: "container", portalState: "portalState", autoRender: "autoRender", autoRenderPriority: "autoRenderPriority" }, outputs: { beforeRender: "beforeRender" }, providers: [NgtStore], queries: [{ propertyName: "portalContentTemplate", first: true, predicate: NgtPortalContent, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "portalContentAnchor", first: true, predicate: ["portalContentAnchor"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, ngImport: i0, template: `
|
|
203
201
|
<ng-container #portalContentAnchor>
|
|
204
202
|
<ng-container
|
|
205
203
|
*ngIf="autoRender && portalContentRendered"
|
|
@@ -213,7 +211,7 @@ class NgtPortal extends NgtSignalStore {
|
|
|
213
211
|
`, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgtPortalBeforeRender, selector: "[ngtPortalBeforeRender]", inputs: ["renderPriority", "parentScene", "parentCamera"], outputs: ["beforeRender"] }] }); }
|
|
214
212
|
}
|
|
215
213
|
export { NgtPortal };
|
|
216
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.
|
|
214
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtPortal, decorators: [{
|
|
217
215
|
type: Component,
|
|
218
216
|
args: [{
|
|
219
217
|
selector: 'ngt-portal',
|
|
@@ -235,7 +233,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImpor
|
|
|
235
233
|
}]
|
|
236
234
|
}], ctorParameters: function () { return []; }, propDecorators: { container: [{
|
|
237
235
|
type: Input
|
|
238
|
-
}],
|
|
236
|
+
}], portalState: [{
|
|
239
237
|
type: Input
|
|
240
238
|
}], autoRender: [{
|
|
241
239
|
type: Input
|
|
@@ -250,4 +248,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImpor
|
|
|
250
248
|
type: ViewChild,
|
|
251
249
|
args: ['portalContentAnchor', { read: ViewContainerRef, static: true }]
|
|
252
250
|
}] } });
|
|
253
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlL3NyYy9saWIvcG9ydGFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsU0FBUyxFQUNULFlBQVksRUFDWixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sUUFBUSxFQUNSLFdBQVcsRUFDWCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixNQUFNLEdBSVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRTlDLE1BQU0sV0FBVyxHQUFHO0lBQ2hCLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBUTtJQUNSLFNBQVM7SUFDVCxRQUFRO0lBQ1IsY0FBYztJQUNkLFFBQVE7SUFDUixZQUFZO0lBQ1osU0FBUztJQUNULE1BQU07SUFDTixVQUFVO0NBQ0osQ0FBQztBQWNY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b3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRGlyZWN0aXZlLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT3V0cHV0LFxuICAgIFNraXBTZWxmLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIGVmZmVjdCxcbiAgICBpbmplY3QsXG4gICAgdHlwZSBFbGVtZW50UmVmLFxuICAgIHR5cGUgRW1iZWRkZWRWaWV3UmVmLFxuICAgIHR5cGUgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IGluamVjdE5ndFJlZiB9IGZyb20gJy4vZGkvcmVmJztcbmltcG9ydCB7IFNQRUNJQUxfSU5URVJOQUxfQUREX0NPTU1FTlQgfSBmcm9tICcuL3JlbmRlcmVyL3V0aWxzJztcbmltcG9ydCB7IE5ndFNpZ25hbFN0b3JlIH0gZnJvbSAnLi9zdG9yZXMvc2lnbmFsLnN0b3JlJztcbmltcG9ydCB7IE5ndFN0b3JlIH0gZnJvbSAnLi9zdG9yZXMvc3RvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RFdmVudE1hbmFnZXIsIE5ndFJlbmRlclN0YXRlLCBOZ3RTaXplLCBOZ3RTdGF0ZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0TG9jYWxTdGF0ZSwgcHJlcGFyZSB9IGZyb20gJy4vdXRpbHMvaW5zdGFuY2UnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuL3V0aWxzL2lzJztcbmltcG9ydCB7IHNhZmVEZXRlY3RDaGFuZ2VzIH0gZnJvbSAnLi91dGlscy9zYWZlLWRldGVjdC1jaGFuZ2VzJztcbmltcG9ydCB7IHVwZGF0ZUNhbWVyYSB9IGZyb20gJy4vdXRpbHMvdXBkYXRlJztcblxuY29uc3QgcHJpdmF0ZUtleXMgPSBbXG4gICAgJ2dldCcsXG4gICAgJ3NldCcsXG4gICAgJ3NlbGVjdCcsXG4gICAgJ3NldFNpemUnLFxuICAgICdzZXREcHInLFxuICAgICdzZXRGcmFtZWxvb3AnLFxuICAgICdldmVudHMnLFxuICAgICdpbnZhbGlkYXRlJyxcbiAgICAnYWR2YW5jZScsXG4gICAgJ3NpemUnLFxuICAgICd2aWV3cG9ydCcsXG5dIGFzIGNvbnN0O1xudHlwZSBQcml2YXRlS2V5cyA9ICh0eXBlb2YgcHJpdmF0ZUtleXMpW251bWJlcl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0UG9ydGFsSW5wdXRzIHtcbiAgICBjb250YWluZXI6IEVsZW1lbnRSZWY8VEhSRUUuT2JqZWN0M0Q+IHwgVEhSRUUuT2JqZWN0M0Q7XG4gICAgY2FtZXJhOiBFbGVtZW50UmVmPFRIUkVFLkNhbWVyYT4gfCBUSFJFRS5DYW1lcmE7XG4gICAgc3RhdGU6IFBhcnRpYWw8XG4gICAgICAgIE9taXQ8Tmd0U3RhdGUsIFByaXZhdGVLZXlzPiAmIHtcbiAgICAgICAgICAgIGV2ZW50czogUGFydGlhbDxQaWNrPE5ndEV2ZW50TWFuYWdlcjxhbnk+LCAnZW5hYmxlZCcgfCAncHJpb3JpdHknIHwgJ2NvbXB1dGUnIHwgJ2Nvbm5lY3RlZCc+PjtcbiAgICAgICAgICAgIHNpemU6IE5ndFNpemU7XG4gICAgICAgIH1cbiAgICA+O1xufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbbmd0UG9ydGFsQmVmb3JlUmVuZGVyXScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBOZ3RQb3J0YWxCZWZvcmVSZW5kZXIgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHJlYWRvbmx5ICNwb3J0YWxTdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG5cbiAgICBASW5wdXQoKSByZW5kZXJQcmlvcml0eSA9IDE7XG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcGFyZW50U2NlbmUhOiBUSFJFRS5TY2VuZTtcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBwYXJlbnRDYW1lcmEhOiBUSFJFRS5DYW1lcmE7XG5cbiAgICBAT3V0cHV0KCkgYmVmb3JlUmVuZGVyID0gbmV3IEV2ZW50RW1pdHRlcjxOZ3RSZW5kZXJTdGF0ZT4oKTtcblxuICAgICNzdWJzY3JpcHRpb24/OiAoKSA9PiB2b2lkO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy4jc3Vic2NyaXB0aW9uPy4oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGxldCBvbGRDbGVhcjogYm9vbGVhbjtcbiAgICAgICAgdGhpcy4jc3Vic2NyaXB0aW9uID0gdGhpcy4jcG9ydGFsU3RvcmUuZ2V0KCdpbnRlcm5hbCcpLnN1YnNjcmliZShcbiAgICAgICAgICAgICh7IGRlbHRhLCBmcmFtZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iZWZvcmVSZW5kZXIuZW1pdCh7IC4uLnRoaXMuI3BvcnRhbFN0b3JlLmdldCgpLCBkZWx0YSwgZnJhbWUgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBnbCwgc2NlbmUsIGNhbWVyYSB9ID0gdGhpcy4jcG9ydGFsU3RvcmUuZ2V0KCk7XG4gICAgICAgICAgICAgICAgb2xkQ2xlYXIgPSBnbC5hdXRvQ2xlYXI7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVuZGVyUHJpb3JpdHkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2xlYXIgc2NlbmUgYW5kIHJlbmRlciB3aXRoIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgZ2wuYXV0b0NsZWFyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZ2wucmVuZGVyKHRoaXMucGFyZW50U2NlbmUsIHRoaXMucGFyZW50Q2FtZXJhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZGlzYWJsZSBjbGVhbmluZ1xuICAgICAgICAgICAgICAgIGdsLmF1dG9DbGVhciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGdsLmNsZWFyRGVwdGgoKTtcbiAgICAgICAgICAgICAgICBnbC5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XG4gICAgICAgICAgICAgICAgLy8gcmVzdG9yZVxuICAgICAgICAgICAgICAgIGdsLmF1dG9DbGVhciA9IG9sZENsZWFyO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMucmVuZGVyUHJpb3JpdHksXG4gICAgICAgICAgICB0aGlzLiNwb3J0YWxTdG9yZVxuICAgICAgICApO1xuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbbmd0UG9ydGFsQ29udGVudF0nLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTmd0UG9ydGFsQ29udGVudCB7XG4gICAgY29uc3RydWN0b3IodmNyOiBWaWV3Q29udGFpbmVyUmVmLCBAU2tpcFNlbGYoKSBwYXJlbnRWY3I6IFZpZXdDb250YWluZXJSZWYpIHtcbiAgICAgICAgY29uc3QgY29tbWVudE5vZGUgPSB2Y3IuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoY29tbWVudE5vZGVbU1BFQ0lBTF9JTlRFUk5BTF9BRERfQ09NTUVOVF0pIHtcbiAgICAgICAgICAgIGNvbW1lbnROb2RlW1NQRUNJQUxfSU5URVJOQUxfQUREX0NPTU1FTlRdKHBhcmVudFZjci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgZGVsZXRlIGNvbW1lbnROb2RlW1NQRUNJQUxfSU5URVJOQUxfQUREX0NPTU1FTlRdO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndC1wb3J0YWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLWNvbnRhaW5lciAjcG9ydGFsQ29udGVudEFuY2hvcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImF1dG9SZW5kZXIgJiYgcG9ydGFsQ29udGVudFJlbmRlcmVkXCJcbiAgICAgICAgICAgICAgICBuZ3RQb3J0YWxCZWZvcmVSZW5kZXJcbiAgICAgICAgICAgICAgICBbcmVuZGVyUHJpb3JpdHldPVwiYXV0b1JlbmRlclByaW9yaXR5XCJcbiAgICAgICAgICAgICAgICBbcGFyZW50U2NlbmVdPVwicGFyZW50U2NlbmVcIlxuICAgICAgICAgICAgICAgIFtwYXJlbnRDYW1lcmFdPVwicGFyZW50Q2FtZXJhXCJcbiAgICAgICAgICAgICAgICAoYmVmb3JlUmVuZGVyKT1cIm9uQmVmb3JlUmVuZGVyKCRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmdJZiwgTmd0UG9ydGFsQmVmb3JlUmVuZGVyXSxcbiAgICBwcm92aWRlcnM6IFtOZ3RTdG9yZV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndFBvcnRhbCBleHRlbmRzIE5ndFNpZ25hbFN0b3JlPE5ndFBvcnRhbElucHV0cz4gaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpIHNldCBjb250YWluZXIoY29udGFpbmVyOiBOZ3RQb3J0YWxJbnB1dHNbJ2NvbnRhaW5lciddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgY29udGFpbmVyIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzdGF0ZShzdGF0ZTogTmd0UG9ydGFsSW5wdXRzWydzdGF0ZSddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc3RhdGUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgYXV0b1JlbmRlciA9IHRydWU7XG4gICAgQElucHV0KCkgYXV0b1JlbmRlclByaW9yaXR5ID0gMTtcblxuICAgIEBPdXRwdXQoKSBiZWZvcmVSZW5kZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcm9vdDogTmd0UmVuZGVyU3RhdGU7IHBvcnRhbDogTmd0UmVuZGVyU3RhdGUgfT4oKTtcblxuICAgIEBDb250ZW50Q2hpbGQoTmd0UG9ydGFsQ29udGVudCwgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcmVhZG9ubHkgcG9ydGFsQ29udGVudFRlbXBsYXRlITogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgICBAVmlld0NoaWxkKCdwb3J0YWxDb250ZW50QW5jaG9yJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICByZWFkb25seSBwb3J0YWxDb250ZW50QW5jaG9yITogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIHJlYWRvbmx5ICNwYXJlbnRTdG9yZSA9IGluamVjdChOZ3RTdG9yZSwgeyBza2lwU2VsZjogdHJ1ZSB9KTtcbiAgICByZWFkb25seSBwYXJlbnRTY2VuZSA9IHRoaXMuI3BhcmVudFN0b3JlLmdldCgnc2NlbmUnKTtcbiAgICByZWFkb25seSBwYXJlbnRDYW1lcmEgPSB0aGlzLiNwYXJlbnRTdG9yZS5nZXQoJ2NhbWVyYScpO1xuXG4gICAgcmVhZG9ubHkgI3BvcnRhbFN0b3JlID0gaW5qZWN0KE5ndFN0b3JlLCB7IHNlbGY6IHRydWUgfSk7XG4gICAgcmVhZG9ubHkgI2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgICByZWFkb25seSAjem9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gICAgcmVhZG9ubHkgI3JheWNhc3RlciA9IG5ldyBUSFJFRS5SYXljYXN0ZXIoKTtcbiAgICByZWFkb25seSAjcG9pbnRlciA9IG5ldyBUSFJFRS5WZWN0b3IyKCk7XG5cbiAgICBwb3J0YWxDb250ZW50UmVuZGVyZWQgPSBmYWxzZTtcbiAgICAjcG9ydGFsQ29udGVudFZpZXc/OiBFbWJlZGRlZFZpZXdSZWY8dW5rbm93bj47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoeyBjb250YWluZXI6IGluamVjdE5ndFJlZjxUSFJFRS5TY2VuZT4ocHJlcGFyZShuZXcgVEhSRUUuU2NlbmUoKSkpIH0pO1xuICAgICAgICBpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNwb3J0YWxDb250ZW50VmlldyAmJiAhdGhpcy4jcG9ydGFsQ29udGVudFZpZXcuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jcG9ydGFsQ29udGVudFZpZXcuZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNTdGF0ZSA9IHRoaXMuI3BhcmVudFN0b3JlLmdldCgpO1xuICAgICAgICBjb25zdCBpbnB1dHNTdGF0ZSA9IHRoaXMuZ2V0KCk7XG5cbiAgICAgICAgaWYgKCFpbnB1dHNTdGF0ZS5zdGF0ZSAmJiB0aGlzLmF1dG9SZW5kZXIpIHtcbiAgICAgICAgICAgIGlucHV0c1N0YXRlLnN0YXRlID0geyBldmVudHM6IHsgcHJpb3JpdHk6IHRoaXMuYXV0b1JlbmRlclByaW9yaXR5ICsgMSB9IH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGV2ZW50cywgc2l6ZSwgLi4ucmVzdElucHV0c1N0YXRlIH0gPSBpbnB1dHNTdGF0ZS5zdGF0ZSB8fCB7fTtcblxuICAgICAgICBjb25zdCBjb250YWluZXJTdGF0ZSA9IGlucHV0c1N0YXRlLmNvbnRhaW5lcjtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gaXMucmVmKGNvbnRhaW5lclN0YXRlKSA/IGNvbnRhaW5lclN0YXRlLm5hdGl2ZUVsZW1lbnQgOiBjb250YWluZXJTdGF0ZTtcblxuICAgICAgICBjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShjb250YWluZXIpO1xuICAgICAgICBpZiAoIWxvY2FsU3RhdGUuc3RvcmUpIHtcbiAgICAgICAgICAgIGxvY2FsU3RhdGUuc3RvcmUgPSB0aGlzLiNwb3J0YWxTdG9yZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI3BvcnRhbFN0b3JlLnNldCh7XG4gICAgICAgICAgICAuLi5wcmV2aW91c1N0YXRlLFxuICAgICAgICAgICAgc2NlbmU6IGNvbnRhaW5lciBhcyBUSFJFRS5TY2VuZSxcbiAgICAgICAgICAgIHJheWNhc3RlcjogdGhpcy4jcmF5Y2FzdGVyLFxuICAgICAgICAgICAgcG9pbnRlcjogdGhpcy4jcG9pbnRlcixcbiAgICAgICAgICAgIHByZXZpb3VzU3RvcmU6IHRoaXMuI3BhcmVudFN0b3JlLFxuICAgICAgICAgICAgZXZlbnRzOiB7IC4uLnByZXZpb3VzU3RhdGUuZXZlbnRzLCAuLi4oZXZlbnRzIHx8IHt9KSB9LFxuICAgICAgICAgICAgc2l6ZTogeyAuLi5wcmV2aW91c1N0YXRlLnNpemUsIC4uLihzaXplIHx8IHt9KSB9LFxuICAgICAgICAgICAgLi4ucmVzdElucHV0c1N0YXRlLFxuICAgICAgICAgICAgZ2V0OiB0aGlzLiNwb3J0YWxTdG9yZS5nZXQuYmluZCh0aGlzLiNwb3J0YWxTdG9yZSksXG4gICAgICAgICAgICBzZXQ6IHRoaXMuI3BvcnRhbFN0b3JlLnNldC5iaW5kKHRoaXMuI3BvcnRhbFN0b3JlKSxcbiAgICAgICAgICAgIHNldEV2ZW50czogKGV2ZW50cykgPT5cbiAgICAgICAgICAgICAgICB0aGlzLiNwb3J0YWxTdG9yZS5zZXQoKHN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgZXZlbnRzOiB7IC4uLnN0YXRlLmV2ZW50cywgLi4uZXZlbnRzIH0gfSkpLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBwYXJlbnRTdGF0ZSA9IHRoaXMuI3BhcmVudFN0b3JlLnNlbGVjdCgpO1xuICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBwYXJlbnRTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNwb3J0YWxTdG9yZS5zZXQoKHN0YXRlKSA9PiB0aGlzLiNpbmplY3QocHJldmlvdXMsIHN0YXRlKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBpbmplY3RvcjogdGhpcy4jaW5qZWN0b3IsIGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICAgICAgKTtcblxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy4jcG9ydGFsU3RvcmUuc2V0KChpbmplY3RTdGF0ZSkgPT4gdGhpcy4jaW5qZWN0KHRoaXMuI3BhcmVudFN0b3JlLmdldCgpLCBpbmplY3RTdGF0ZSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy4jcG9ydGFsQ29udGVudFZpZXcgPSB0aGlzLnBvcnRhbENvbnRlbnRBbmNob3IuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMucG9ydGFsQ29udGVudFRlbXBsYXRlKTtcbiAgICAgICAgc2FmZURldGVjdENoYW5nZXModGhpcy4jcG9ydGFsQ29udGVudFZpZXcpO1xuICAgICAgICB0aGlzLnBvcnRhbENvbnRlbnRSZW5kZXJlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgb25CZWZvcmVSZW5kZXIocG9ydGFsOiBOZ3RSZW5kZXJTdGF0ZSkge1xuICAgICAgICB0aGlzLmJlZm9yZVJlbmRlci5lbWl0KHtcbiAgICAgICAgICAgIHJvb3Q6IHsgLi4udGhpcy4jcGFyZW50U3RvcmUuZ2V0KCksIGRlbHRhOiBwb3J0YWwuZGVsdGEsIGZyYW1lOiBwb3J0YWwuZnJhbWUgfSxcbiAgICAgICAgICAgIHBvcnRhbCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgI2luamVjdChyb290U3RhdGU6IE5ndFN0YXRlLCBpbmplY3RTdGF0ZTogTmd0U3RhdGUpIHtcbiAgICAgICAgY29uc3QgaW50ZXJzZWN0OiBQYXJ0aWFsPE5ndFN0YXRlPiA9IHsgLi4ucm9vdFN0YXRlIH07XG5cbiAgICAgICAgT2JqZWN0LmtleXMoaW50ZXJzZWN0KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBwcml2YXRlS2V5cy5pbmNsdWRlcyhrZXkgYXMgUHJpdmF0ZUtleXMpIHx8XG4gICAgICAgICAgICAgICAgcm9vdFN0YXRlW2tleSBhcyBrZXlvZiBOZ3RTdGF0ZV0gIT09IGluamVjdFN0YXRlW2tleSBhcyBrZXlvZiBOZ3RTdGF0ZV1cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBpbnRlcnNlY3Rba2V5IGFzIGtleW9mIE5ndFN0YXRlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgaW5wdXRzID0gdGhpcy5nZXQoKTtcbiAgICAgICAgY29uc3QgeyBzaXplLCBldmVudHMsIC4uLnJlc3RJbnB1dHNTdGF0ZSB9ID0gaW5wdXRzLnN0YXRlIHx8IHt9O1xuXG4gICAgICAgIGxldCB2aWV3cG9ydCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGluamVjdFN0YXRlICYmIHNpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbWVyYSA9IGluamVjdFN0YXRlLmNhbWVyYTtcbiAgICAgICAgICAgIHZpZXdwb3J0ID0gcm9vdFN0YXRlLnZpZXdwb3J0LmdldEN1cnJlbnRWaWV3cG9ydChjYW1lcmEsIG5ldyBUSFJFRS5WZWN0b3IzKCksIHNpemUpO1xuICAgICAgICAgICAgaWYgKGNhbWVyYSAhPT0gcm9vdFN0YXRlLmNhbWVyYSkgdXBkYXRlQ2FtZXJhKGNhbWVyYSwgc2l6ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uaW50ZXJzZWN0LFxuICAgICAgICAgICAgc2NlbmU6IGlzLnJlZihpbnB1dHMuY29udGFpbmVyKSA/IGlucHV0cy5jb250YWluZXIubmF0aXZlRWxlbWVudCA6IGlucHV0cy5jb250YWluZXIsXG4gICAgICAgICAgICByYXljYXN0ZXI6IHRoaXMuI3JheWNhc3RlcixcbiAgICAgICAgICAgIHBvaW50ZXI6IHRoaXMuI3BvaW50ZXIsXG4gICAgICAgICAgICBwcmV2aW91c1N0b3JlOiB0aGlzLiNwYXJlbnRTdG9yZSxcbiAgICAgICAgICAgIGV2ZW50czogeyAuLi5yb290U3RhdGUuZXZlbnRzLCAuLi4oaW5qZWN0U3RhdGU/LmV2ZW50cyB8fCB7fSksIC4uLmV2ZW50cyB9LFxuICAgICAgICAgICAgc2l6ZTogeyAuLi5yb290U3RhdGUuc2l6ZSwgLi4uc2l6ZSB9LFxuICAgICAgICAgICAgdmlld3BvcnQ6IHsgLi4ucm9vdFN0YXRlLnZpZXdwb3J0LCAuLi4odmlld3BvcnQgfHwge30pIH0sXG4gICAgICAgICAgICAuLi5yZXN0SW5wdXRzU3RhdGUsXG4gICAgICAgIH0gYXMgTmd0U3RhdGU7XG4gICAgfVxufVxuIl19
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlL3NyYy9saWIvcG9ydGFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsU0FBUyxFQUNULFlBQVksRUFDWixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sUUFBUSxFQUNSLFdBQVcsRUFDWCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixNQUFNLEdBSVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRTlDLE1BQU0sV0FBVyxHQUFHO0lBQ2hCLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBUTtJQUNSLFNBQVM7SUFDVCxRQUFRO0lBQ1IsY0FBYztJQUNkLFFBQVE7SUFDUixZQUFZO0lBQ1osU0FBUztJQUNULE1BQU07SUFDTixVQUFVO0NBQ0osQ0FBQztBQWNYLE1BQ2EscUJBQXFCO0lBQ3JCLFlBQVksQ0FBb0I7SUFRekM7UUFSUyxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVoQyxtQkFBYyxHQUFHLENBQUMsQ0FBQztRQUlsQixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBR3hELElBQUksUUFBaUIsQ0FBQztRQUN0QixnQ0FBZ0MsQ0FBQyxHQUFHLEVBQUU7WUFDbEMsa0JBQWtCLENBQ2QsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDckUsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDdEQsUUFBUSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0JBQ3hCLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxDQUFDLEVBQUU7b0JBQzNCLHNDQUFzQztvQkFDdEMsRUFBRSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQ3BCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQ2xEO2dCQUNELG1CQUFtQjtnQkFDbkIsRUFBRSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDaEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3pCLFVBQVU7Z0JBQ1YsRUFBRSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7WUFDNUIsQ0FBQyxFQUNELEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FDcEMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0FoQ1EscUJBQXFCO2tHQUFyQixxQkFBcUI7O1NBQXJCLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQURqQyxTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLHlCQUF5QixFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7MEVBSXZELGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ3FCLFdBQVc7c0JBQXJDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNFLFlBQVk7c0JBQXRDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUVmLFlBQVk7c0JBQXJCLE1BQU07O0FBNEJYLE1BQ2EsZ0JBQWdCO0lBQ3pCLFlBQVksR0FBcUIsRUFBYyxTQUEyQjtRQUN0RSxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUM5QyxJQUFJLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFO1lBQzNDLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDM0UsT0FBTyxXQUFXLENBQUMsNEJBQTRCLENBQUMsQ0FBQztTQUNwRDtJQUNMLENBQUM7OEdBUFEsZ0JBQWdCO2tHQUFoQixnQkFBZ0I7O1NBQWhCLGdCQUFnQjsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLCtCQUErQixFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7OzBCQUVsQyxRQUFROztBQVNoRCxNQWtCYSxTQUFVLFNBQVEsY0FBK0I7SUFDMUQsSUFBYSxTQUFTLENBQUMsU0FBdUM7UUFDMUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQWEsV0FBVyxDQUFDLEtBQStCO1FBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFhUSxZQUFZLENBQXdDO0lBSXBELFlBQVksQ0FBb0M7SUFDaEQsU0FBUyxDQUFvQjtJQUM3QixLQUFLLENBQWtCO0lBRXZCLFVBQVUsQ0FBeUI7SUFDbkMsUUFBUSxDQUF1QjtJQUd4QyxrQkFBa0IsQ0FBNEI7SUFFOUM7UUFDSSxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFjLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBMUJ2RSxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLHVCQUFrQixHQUFHLENBQUMsQ0FBQztRQUV0QixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFvRCxDQUFDO1FBUXJGLGlCQUFZLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELGdCQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0MsaUJBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUvQyxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNoRCxjQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLFVBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdkIsZUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25DLGFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV4QywwQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFLMUIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDOUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFO2dCQUMvRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDckM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxRQUFRO1FBQ0osTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM5QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN2QyxXQUFXLENBQUMsS0FBSyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO1NBQzdFO1FBRUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxlQUFlLEVBQUUsR0FBRyxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUVyRSxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDO1FBQzdDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztRQUV6RixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUU7WUFDbkIsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQ3hDO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUM7WUFDbEIsR0FBRyxhQUFhO1lBQ2hCLEtBQUssRUFBRSxTQUF3QjtZQUMvQixTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDMUIsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3RCLGFBQWEsRUFBRSxJQUFJLENBQUMsWUFBWTtZQUNoQyxNQUFNLEVBQUUsRUFBRSxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsRUFBRTtZQUN0RCxJQUFJLEVBQUUsRUFBRSxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRTtZQUNoRCxHQUFHLGVBQWU7WUFDbEIsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQ2xELEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUNsRCxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztTQUMvRixDQUFDLENBQUM7UUFFSCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQy9DLE1BQU0sQ0FDRixHQUFHLEVBQUU7WUFDRCxNQUFNLFFBQVEsR0FBRyxXQUFXLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLEVBQ0QsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FDeEQsQ0FBQztRQUVGLHFCQUFxQixDQUFDLEdBQUcsRUFBRTtZQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDL0YsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2xHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7SUFDdEMsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFzQjtRQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztZQUNuQixJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDOUUsTUFBTTtTQUNULENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxPQUFPLENBQUMsU0FBbUIsRUFBRSxXQUFxQjtRQUM5QyxNQUFNLFNBQVMsR0FBc0IsRUFBRSxHQUFHLFNBQVMsRUFBRSxDQUFDO1FBRXRELE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbkMsSUFDSSxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQWtCLENBQUM7Z0JBQ3hDLFNBQVMsQ0FBQyxHQUFxQixDQUFDLEtBQUssV0FBVyxDQUFDLEdBQXFCLENBQUMsRUFDekU7Z0JBQ0UsT0FBTyxTQUFTLENBQUMsR0FBcUIsQ0FBQyxDQUFDO2FBQzNDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDMUIsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxlQUFlLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUVoRSxJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFDekIsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFO1lBQ3JCLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDbEMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BGLElBQUksTUFBTSxLQUFLLFNBQVMsQ0FBQyxNQUFNO2dCQUFFLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDL0Q7UUFFRCxPQUFPO1lBQ0gsR0FBRyxTQUFTO1lBQ1osS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVM7WUFDbkYsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzFCLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN0QixhQUFhLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDaEMsTUFBTSxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxXQUFXLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFO1lBQzFFLElBQUksRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksRUFBRTtZQUNwQyxRQUFRLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsRUFBRTtZQUN4RCxHQUFHLGVBQWU7U0FDVCxDQUFDO0lBQ2xCLENBQUM7OEdBdklRLFNBQVM7a0dBQVQsU0FBUyx3T0FGUCxDQUFDLFFBQVEsQ0FBQyw2RUFnQlAsZ0JBQWdCLDJCQUFVLFdBQVcsa0pBR1QsZ0JBQWdCLGtFQWhDaEQ7Ozs7Ozs7Ozs7O0tBV1QsNERBQ1MsSUFBSSw2RkE3REwscUJBQXFCOztTQWdFckIsU0FBUzsyRkFBVCxTQUFTO2tCQWxCckIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7S0FXVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUscUJBQXFCLENBQUM7b0JBQ3RDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztpQkFDeEI7MEVBRWdCLFNBQVM7c0JBQXJCLEtBQUs7Z0JBSU8sV0FBVztzQkFBdkIsS0FBSztnQkFJRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFSSxZQUFZO3NCQUFyQixNQUFNO2dCQUdFLHFCQUFxQjtzQkFEN0IsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJMUQsbUJBQW1CO3NCQUQzQixTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBEZXN0cm95UmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE91dHB1dCxcbiAgICBTa2lwU2VsZixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBlZmZlY3QsXG4gICAgaW5qZWN0LFxuICAgIHR5cGUgRWxlbWVudFJlZixcbiAgICB0eXBlIEVtYmVkZGVkVmlld1JlZixcbiAgICB0eXBlIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBpbmplY3RCZWZvcmVSZW5kZXIgfSBmcm9tICcuL2RpL2JlZm9yZS1yZW5kZXInO1xuaW1wb3J0IHsgaW5qZWN0Tmd0UmVmIH0gZnJvbSAnLi9kaS9yZWYnO1xuaW1wb3J0IHsgU1BFQ0lBTF9JTlRFUk5BTF9BRERfQ09NTUVOVCB9IGZyb20gJy4vcmVuZGVyZXIvdXRpbHMnO1xuaW1wb3J0IHsgTmd0U2lnbmFsU3RvcmUgfSBmcm9tICcuL3N0b3Jlcy9zaWduYWwuc3RvcmUnO1xuaW1wb3J0IHsgTmd0U3RvcmUgfSBmcm9tICcuL3N0b3Jlcy9zdG9yZSc7XG5pbXBvcnQgdHlwZSB7IE5ndEV2ZW50TWFuYWdlciwgTmd0UmVuZGVyU3RhdGUsIE5ndFNpemUsIE5ndFN0YXRlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRMb2NhbFN0YXRlLCBwcmVwYXJlIH0gZnJvbSAnLi91dGlscy9pbnN0YW5jZSc7XG5pbXBvcnQgeyBpcyB9IGZyb20gJy4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgc2FmZURldGVjdENoYW5nZXMgfSBmcm9tICcuL3V0aWxzL3NhZmUtZGV0ZWN0LWNoYW5nZXMnO1xuaW1wb3J0IHsgcXVldWVNaWNyb3Rhc2tJbkluamVjdGlvbkNvbnRleHQgfSBmcm9tICcuL3V0aWxzL3RpbWluZyc7XG5pbXBvcnQgeyB1cGRhdGVDYW1lcmEgfSBmcm9tICcuL3V0aWxzL3VwZGF0ZSc7XG5cbmNvbnN0IHByaXZhdGVLZXlzID0gW1xuICAgICdnZXQnLFxuICAgICdzZXQnLFxuICAgICdzZWxlY3QnLFxuICAgICdzZXRTaXplJyxcbiAgICAnc2V0RHByJyxcbiAgICAnc2V0RnJhbWVsb29wJyxcbiAgICAnZXZlbnRzJyxcbiAgICAnaW52YWxpZGF0ZScsXG4gICAgJ2FkdmFuY2UnLFxuICAgICdzaXplJyxcbiAgICAndmlld3BvcnQnLFxuXSBhcyBjb25zdDtcbnR5cGUgUHJpdmF0ZUtleXMgPSAodHlwZW9mIHByaXZhdGVLZXlzKVtudW1iZXJdO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndFBvcnRhbElucHV0cyB7XG4gICAgY29udGFpbmVyOiBFbGVtZW50UmVmPFRIUkVFLk9iamVjdDNEPiB8IFRIUkVFLk9iamVjdDNEO1xuICAgIGNhbWVyYTogRWxlbWVudFJlZjxUSFJFRS5DYW1lcmE+IHwgVEhSRUUuQ2FtZXJhO1xuICAgIHN0YXRlOiBQYXJ0aWFsPFxuICAgICAgICBPbWl0PE5ndFN0YXRlLCBQcml2YXRlS2V5cz4gJiB7XG4gICAgICAgICAgICBldmVudHM6IFBhcnRpYWw8UGljazxOZ3RFdmVudE1hbmFnZXI8YW55PiwgJ2VuYWJsZWQnIHwgJ3ByaW9yaXR5JyB8ICdjb21wdXRlJyB8ICdjb25uZWN0ZWQnPj47XG4gICAgICAgICAgICBzaXplOiBOZ3RTaXplO1xuICAgICAgICB9XG4gICAgPjtcbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW25ndFBvcnRhbEJlZm9yZVJlbmRlcl0nLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTmd0UG9ydGFsQmVmb3JlUmVuZGVyIHtcbiAgICByZWFkb25seSAjcG9ydGFsU3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuXG4gICAgQElucHV0KCkgcmVuZGVyUHJpb3JpdHkgPSAxO1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHBhcmVudFNjZW5lITogVEhSRUUuU2NlbmU7XG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcGFyZW50Q2FtZXJhITogVEhSRUUuQ2FtZXJhO1xuXG4gICAgQE91dHB1dCgpIGJlZm9yZVJlbmRlciA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0UmVuZGVyU3RhdGU+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgbGV0IG9sZENsZWFyOiBib29sZWFuO1xuICAgICAgICBxdWV1ZU1pY3JvdGFza0luSW5qZWN0aW9uQ29udGV4dCgoKSA9PiB7XG4gICAgICAgICAgICBpbmplY3RCZWZvcmVSZW5kZXIoXG4gICAgICAgICAgICAgICAgKHsgZGVsdGEsIGZyYW1lIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWZvcmVSZW5kZXIuZW1pdCh7IC4uLnRoaXMuI3BvcnRhbFN0b3JlLmdldCgpLCBkZWx0YSwgZnJhbWUgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZ2wsIHNjZW5lLCBjYW1lcmEgfSA9IHRoaXMuI3BvcnRhbFN0b3JlLmdldCgpO1xuICAgICAgICAgICAgICAgICAgICBvbGRDbGVhciA9IGdsLmF1dG9DbGVhcjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVuZGVyUHJpb3JpdHkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsZWFyIHNjZW5lIGFuZCByZW5kZXIgd2l0aCBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC5hdXRvQ2xlYXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wucmVuZGVyKHRoaXMucGFyZW50U2NlbmUsIHRoaXMucGFyZW50Q2FtZXJhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBkaXNhYmxlIGNsZWFuaW5nXG4gICAgICAgICAgICAgICAgICAgIGdsLmF1dG9DbGVhciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBnbC5jbGVhckRlcHRoKCk7XG4gICAgICAgICAgICAgICAgICAgIGdsLnJlbmRlcihzY2VuZSwgY2FtZXJhKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVzdG9yZVxuICAgICAgICAgICAgICAgICAgICBnbC5hdXRvQ2xlYXIgPSBvbGRDbGVhcjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHsgcHJpb3JpdHk6IHRoaXMucmVuZGVyUHJpb3JpdHkgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtuZ3RQb3J0YWxDb250ZW50XScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBOZ3RQb3J0YWxDb250ZW50IHtcbiAgICBjb25zdHJ1Y3Rvcih2Y3I6IFZpZXdDb250YWluZXJSZWYsIEBTa2lwU2VsZigpIHBhcmVudFZjcjogVmlld0NvbnRhaW5lclJlZikge1xuICAgICAgICBjb25zdCBjb21tZW50Tm9kZSA9IHZjci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmIChjb21tZW50Tm9kZVtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXSkge1xuICAgICAgICAgICAgY29tbWVudE5vZGVbU1BFQ0lBTF9JTlRFUk5BTF9BRERfQ09NTUVOVF0ocGFyZW50VmNyLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICBkZWxldGUgY29tbWVudE5vZGVbU1BFQ0lBTF9JTlRFUk5BTF9BRERfQ09NTUVOVF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0LXBvcnRhbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGFpbmVyICNwb3J0YWxDb250ZW50QW5jaG9yPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYXV0b1JlbmRlciAmJiBwb3J0YWxDb250ZW50UmVuZGVyZWRcIlxuICAgICAgICAgICAgICAgIG5ndFBvcnRhbEJlZm9yZVJlbmRlclxuICAgICAgICAgICAgICAgIFtyZW5kZXJQcmlvcml0eV09XCJhdXRvUmVuZGVyUHJpb3JpdHlcIlxuICAgICAgICAgICAgICAgIFtwYXJlbnRTY2VuZV09XCJwYXJlbnRTY2VuZVwiXG4gICAgICAgICAgICAgICAgW3BhcmVudENhbWVyYV09XCJwYXJlbnRDYW1lcmFcIlxuICAgICAgICAgICAgICAgIChiZWZvcmVSZW5kZXIpPVwib25CZWZvcmVSZW5kZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBgLFxuICAgIGltcG9ydHM6IFtOZ0lmLCBOZ3RQb3J0YWxCZWZvcmVSZW5kZXJdLFxuICAgIHByb3ZpZGVyczogW05ndFN0b3JlXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0UG9ydGFsIGV4dGVuZHMgTmd0U2lnbmFsU3RvcmU8Tmd0UG9ydGFsSW5wdXRzPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KCkgc2V0IGNvbnRhaW5lcihjb250YWluZXI6IE5ndFBvcnRhbElucHV0c1snY29udGFpbmVyJ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBjb250YWluZXIgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHBvcnRhbFN0YXRlKHN0YXRlOiBOZ3RQb3J0YWxJbnB1dHNbJ3N0YXRlJ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBzdGF0ZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBhdXRvUmVuZGVyID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBhdXRvUmVuZGVyUHJpb3JpdHkgPSAxO1xuXG4gICAgQE91dHB1dCgpIGJlZm9yZVJlbmRlciA9IG5ldyBFdmVudEVtaXR0ZXI8eyByb290OiBOZ3RSZW5kZXJTdGF0ZTsgcG9ydGFsOiBOZ3RSZW5kZXJTdGF0ZSB9PigpO1xuXG4gICAgQENvbnRlbnRDaGlsZChOZ3RQb3J0YWxDb250ZW50LCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICByZWFkb25seSBwb3J0YWxDb250ZW50VGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgIEBWaWV3Q2hpbGQoJ3BvcnRhbENvbnRlbnRBbmNob3InLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHJlYWRvbmx5IHBvcnRhbENvbnRlbnRBbmNob3IhOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgcmVhZG9ubHkgI3BhcmVudFN0b3JlID0gaW5qZWN0KE5ndFN0b3JlLCB7IHNraXBTZWxmOiB0cnVlIH0pO1xuICAgIHJlYWRvbmx5IHBhcmVudFNjZW5lID0gdGhpcy4jcGFyZW50U3RvcmUuZ2V0KCdzY2VuZScpO1xuICAgIHJlYWRvbmx5IHBhcmVudENhbWVyYSA9IHRoaXMuI3BhcmVudFN0b3JlLmdldCgnY2FtZXJhJyk7XG5cbiAgICByZWFkb25seSAjcG9ydGFsU3RvcmUgPSBpbmplY3QoTmd0U3RvcmUsIHsgc2VsZjogdHJ1ZSB9KTtcbiAgICByZWFkb25seSAjaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICAgIHJlYWRvbmx5ICN6b25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgICByZWFkb25seSAjcmF5Y2FzdGVyID0gbmV3IFRIUkVFLlJheWNhc3RlcigpO1xuICAgIHJlYWRvbmx5ICNwb2ludGVyID0gbmV3IFRIUkVFLlZlY3RvcjIoKTtcblxuICAgIHBvcnRhbENvbnRlbnRSZW5kZXJlZCA9IGZhbHNlO1xuICAgICNwb3J0YWxDb250ZW50Vmlldz86IEVtYmVkZGVkVmlld1JlZjx1bmtub3duPjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcih7IGNvbnRhaW5lcjogaW5qZWN0Tmd0UmVmPFRIUkVFLlNjZW5lPihwcmVwYXJlKG5ldyBUSFJFRS5TY2VuZSgpKSkgfSk7XG4gICAgICAgIGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuI3BvcnRhbENvbnRlbnRWaWV3ICYmICF0aGlzLiNwb3J0YWxDb250ZW50Vmlldy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNwb3J0YWxDb250ZW50Vmlldy5kZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBjb25zdCBwcmV2aW91c1N0YXRlID0gdGhpcy4jcGFyZW50U3RvcmUuZ2V0KCk7XG4gICAgICAgIGNvbnN0IGlucHV0c1N0YXRlID0gdGhpcy5nZXQoKTtcblxuICAgICAgICBpZiAoIWlucHV0c1N0YXRlLnN0YXRlICYmIHRoaXMuYXV0b1JlbmRlcikge1xuICAgICAgICAgICAgaW5wdXRzU3RhdGUuc3RhdGUgPSB7IGV2ZW50czogeyBwcmlvcml0eTogdGhpcy5hdXRvUmVuZGVyUHJpb3JpdHkgKyAxIH0gfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgZXZlbnRzLCBzaXplLCAuLi5yZXN0SW5wdXRzU3RhdGUgfSA9IGlucHV0c1N0YXRlLnN0YXRlIHx8IHt9O1xuXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclN0YXRlID0gaW5wdXRzU3RhdGUuY29udGFpbmVyO1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBpcy5yZWYoY29udGFpbmVyU3RhdGUpID8gY29udGFpbmVyU3RhdGUubmF0aXZlRWxlbWVudCA6IGNvbnRhaW5lclN0YXRlO1xuXG4gICAgICAgIGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGNvbnRhaW5lcik7XG4gICAgICAgIGlmICghbG9jYWxTdGF0ZS5zdG9yZSkge1xuICAgICAgICAgICAgbG9jYWxTdGF0ZS5zdG9yZSA9IHRoaXMuI3BvcnRhbFN0b3JlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4jcG9ydGFsU3RvcmUuc2V0KHtcbiAgICAgICAgICAgIC4uLnByZXZpb3VzU3RhdGUsXG4gICAgICAgICAgICBzY2VuZTogY29udGFpbmVyIGFzIFRIUkVFLlNjZW5lLFxuICAgICAgICAgICAgcmF5Y2FzdGVyOiB0aGlzLiNyYXljYXN0ZXIsXG4gICAgICAgICAgICBwb2ludGVyOiB0aGlzLiNwb2ludGVyLFxuICAgICAgICAgICAgcHJldmlvdXNTdG9yZTogdGhpcy4jcGFyZW50U3RvcmUsXG4gICAgICAgICAgICBldmVudHM6IHsgLi4ucHJldmlvdXNTdGF0ZS5ldmVudHMsIC4uLihldmVudHMgfHwge30pIH0sXG4gICAgICAgICAgICBzaXplOiB7IC4uLnByZXZpb3VzU3RhdGUuc2l6ZSwgLi4uKHNpemUgfHwge30pIH0sXG4gICAgICAgICAgICAuLi5yZXN0SW5wdXRzU3RhdGUsXG4gICAgICAgICAgICBnZXQ6IHRoaXMuI3BvcnRhbFN0b3JlLmdldC5iaW5kKHRoaXMuI3BvcnRhbFN0b3JlKSxcbiAgICAgICAgICAgIHNldDogdGhpcy4jcG9ydGFsU3RvcmUuc2V0LmJpbmQodGhpcy4jcG9ydGFsU3RvcmUpLFxuICAgICAgICAgICAgc2V0RXZlbnRzOiAoZXZlbnRzKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuI3BvcnRhbFN0b3JlLnNldCgoc3RhdGUpID0+ICh7IC4uLnN0YXRlLCBldmVudHM6IHsgLi4uc3RhdGUuZXZlbnRzLCAuLi5ldmVudHMgfSB9KSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHBhcmVudFN0YXRlID0gdGhpcy4jcGFyZW50U3RvcmUuc2VsZWN0KCk7XG4gICAgICAgIGVmZmVjdChcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IHBhcmVudFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy4jem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3BvcnRhbFN0b3JlLnNldCgoc3RhdGUpID0+IHRoaXMuI2luamVjdChwcmV2aW91cywgc3RhdGUpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGluamVjdG9yOiB0aGlzLiNpbmplY3RvciwgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICAgICApO1xuXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLiNwb3J0YWxTdG9yZS5zZXQoKGluamVjdFN0YXRlKSA9PiB0aGlzLiNpbmplY3QodGhpcy4jcGFyZW50U3RvcmUuZ2V0KCksIGluamVjdFN0YXRlKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLiNwb3J0YWxDb250ZW50VmlldyA9IHRoaXMucG9ydGFsQ29udGVudEFuY2hvci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5wb3J0YWxDb250ZW50VGVtcGxhdGUpO1xuICAgICAgICBzYWZlRGV0ZWN0Q2hhbmdlcyh0aGlzLiNwb3J0YWxDb250ZW50Vmlldyk7XG4gICAgICAgIHRoaXMucG9ydGFsQ29udGVudFJlbmRlcmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBvbkJlZm9yZVJlbmRlcihwb3J0YWw6IE5ndFJlbmRlclN0YXRlKSB7XG4gICAgICAgIHRoaXMuYmVmb3JlUmVuZGVyLmVtaXQoe1xuICAgICAgICAgICAgcm9vdDogeyAuLi50aGlzLiNwYXJlbnRTdG9yZS5nZXQoKSwgZGVsdGE6IHBvcnRhbC5kZWx0YSwgZnJhbWU6IHBvcnRhbC5mcmFtZSB9LFxuICAgICAgICAgICAgcG9ydGFsLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAjaW5qZWN0KHJvb3RTdGF0ZTogTmd0U3RhdGUsIGluamVjdFN0YXRlOiBOZ3RTdGF0ZSkge1xuICAgICAgICBjb25zdCBpbnRlcnNlY3Q6IFBhcnRpYWw8Tmd0U3RhdGU+ID0geyAuLi5yb290U3RhdGUgfTtcblxuICAgICAgICBPYmplY3Qua2V5cyhpbnRlcnNlY3QpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHByaXZhdGVLZXlzLmluY2x1ZGVzKGtleSBhcyBQcml2YXRlS2V5cykgfHxcbiAgICAgICAgICAgICAgICByb290U3RhdGVba2V5IGFzIGtleW9mIE5ndFN0YXRlXSAhPT0gaW5qZWN0U3RhdGVba2V5IGFzIGtleW9mIE5ndFN0YXRlXVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGludGVyc2VjdFtrZXkgYXMga2V5b2YgTmd0U3RhdGVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBpbnB1dHMgPSB0aGlzLmdldCgpO1xuICAgICAgICBjb25zdCB7IHNpemUsIGV2ZW50cywgLi4ucmVzdElucHV0c1N0YXRlIH0gPSBpbnB1dHMuc3RhdGUgfHwge307XG5cbiAgICAgICAgbGV0IHZpZXdwb3J0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoaW5qZWN0U3RhdGUgJiYgc2l6ZSkge1xuICAgICAgICAgICAgY29uc3QgY2FtZXJhID0gaW5qZWN0U3RhdGUuY2FtZXJhO1xuICAgICAgICAgICAgdmlld3BvcnQgPSByb290U3RhdGUudmlld3BvcnQuZ2V0Q3VycmVudFZpZXdwb3J0KGNhbWVyYSwgbmV3IFRIUkVFLlZlY3RvcjMoKSwgc2l6ZSk7XG4gICAgICAgICAgICBpZiAoY2FtZXJhICE9PSByb290U3RhdGUuY2FtZXJhKSB1cGRhdGVDYW1lcmEoY2FtZXJhLCBzaXplKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5pbnRlcnNlY3QsXG4gICAgICAgICAgICBzY2VuZTogaXMucmVmKGlucHV0cy5jb250YWluZXIpID8gaW5wdXRzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50IDogaW5wdXRzLmNvbnRhaW5lcixcbiAgICAgICAgICAgIHJheWNhc3RlcjogdGhpcy4jcmF5Y2FzdGVyLFxuICAgICAgICAgICAgcG9pbnRlcjogdGhpcy4jcG9pbnRlcixcbiAgICAgICAgICAgIHByZXZpb3VzU3RvcmU6IHRoaXMuI3BhcmVudFN0b3JlLFxuICAgICAgICAgICAgZXZlbnRzOiB7IC4uLnJvb3RTdGF0ZS5ldmVudHMsIC4uLihpbmplY3RTdGF0ZT8uZXZlbnRzIHx8IHt9KSwgLi4uZXZlbnRzIH0sXG4gICAgICAgICAgICBzaXplOiB7IC4uLnJvb3RTdGF0ZS5zaXplLCAuLi5zaXplIH0sXG4gICAgICAgICAgICB2aWV3cG9ydDogeyAuLi5yb290U3RhdGUudmlld3BvcnQsIC4uLih2aWV3cG9ydCB8fCB7fSkgfSxcbiAgICAgICAgICAgIC4uLnJlc3RJbnB1dHNTdGF0ZSxcbiAgICAgICAgfSBhcyBOZ3RTdGF0ZTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -42,11 +42,11 @@ class NgtRendererFactory {
|
|
|
42
42
|
}
|
|
43
43
|
return renderer;
|
|
44
44
|
}
|
|
45
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.
|
|
46
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.
|
|
45
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtRendererFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
46
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtRendererFactory }); }
|
|
47
47
|
}
|
|
48
48
|
export { NgtRendererFactory };
|
|
49
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.
|
|
49
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtRendererFactory, decorators: [{
|
|
50
50
|
type: Injectable
|
|
51
51
|
}] });
|
|
52
52
|
/**
|
|
@@ -91,7 +91,10 @@ export class NgtRenderer {
|
|
|
91
91
|
}
|
|
92
92
|
// handle raw value
|
|
93
93
|
if (name === SPECIAL_DOM_TAG.NGT_VALUE) {
|
|
94
|
-
return this.store.createNode('three', Object.assign({ __ngt_renderer__: { rawValue: undefined } },
|
|
94
|
+
return this.store.createNode('three', Object.assign({ __ngt_renderer__: { rawValue: undefined } },
|
|
95
|
+
// NOTE: we assign this manually to a raw value node
|
|
96
|
+
// because we say it is a 'three' node but we're not using prepare()
|
|
97
|
+
{ __ngt__: { isRaw: true, parent: createSignal(null) } }));
|
|
95
98
|
}
|
|
96
99
|
const { injectedArgs, injectedParent, store } = this.store.getCreationState();
|
|
97
100
|
let parent = injectedParent;
|
|
@@ -107,8 +110,8 @@ export class NgtRenderer {
|
|
|
107
110
|
const object = injectedArgs[0];
|
|
108
111
|
let localState = getLocalState(object);
|
|
109
112
|
if (!Object.keys(localState).length) {
|
|
110
|
-
|
|
111
|
-
localState = getLocalState(object);
|
|
113
|
+
// NOTE: if an object isn't already "prepared", we prepare it
|
|
114
|
+
localState = getLocalState(prepare(object, { store, args: injectedArgs, primitive: true }));
|
|
112
115
|
}
|
|
113
116
|
if (!localState.store)
|
|
114
117
|
localState.store = store;
|
|
@@ -362,4 +365,4 @@ export class NgtRenderer {
|
|
|
362
365
|
return this.delegate.data;
|
|
363
366
|
}
|
|
364
367
|
}
|
|
365
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9yZW5kZXJlci9yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNILGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsUUFBUSxFQUNSLE1BQU0sRUFFTixnQkFBZ0IsRUFDaEIsTUFBTSxFQUNOLFlBQVksRUFDWixNQUFNLEVBQ04sU0FBUyxHQUVaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFN0MsT0FBTyxFQUFFLGdCQUFnQixFQUErQyxNQUFNLFNBQVMsQ0FBQztBQUN4RixPQUFPLEVBQ0gsWUFBWSxFQUNaLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixnQkFBZ0IsR0FDbkIsTUFBTSxTQUFTLENBQUM7O0FBRWpCLE1BQ2Esa0JBQWtCO0lBQ2xCLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLFVBQVUsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDbkMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENB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Q0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIEluamVjdGFibGUsXG4gICAgSW5qZWN0b3IsXG4gICAgTmdab25lLFxuICAgIFJlbmRlcmVyMixcbiAgICBSZW5kZXJlckZhY3RvcnkyLFxuICAgIGVmZmVjdCxcbiAgICBnZXREZWJ1Z05vZGUsXG4gICAgaW5qZWN0LFxuICAgIHVudHJhY2tlZCxcbiAgICB0eXBlIFJlbmRlcmVyVHlwZTIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdUX0NBVEFMT0dVRSB9IGZyb20gJy4uL2RpL2NhdGFsb2d1ZSc7XG5pbXBvcnQgdHlwZSB7IE5ndEluamVjdGVkUmVmIH0gZnJvbSAnLi4vZGkvcmVmJztcbmltcG9ydCB7IE5ndFN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL3N0b3JlJztcbmltcG9ydCB0eXBlIHsgTmd0QW55UmVjb3JkIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0TG9jYWxTdGF0ZSwgcHJlcGFyZSB9IGZyb20gJy4uL3V0aWxzL2luc3RhbmNlJztcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgY3JlYXRlU2lnbmFsIH0gZnJvbSAnLi4vdXRpbHMvc2lnbmFsJztcbmltcG9ydCB7IE5HVF9DT01QT1VORF9QUkVGSVhFUyB9IGZyb20gJy4vZGknO1xuaW1wb3J0IHsgTmd0UmVuZGVyZXJDbGFzc0lkIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBOZ3RSZW5kZXJlclN0b3JlLCB0eXBlIE5ndFJlbmRlcmVyTm9kZSwgdHlwZSBOZ3RSZW5kZXJlclN0YXRlIH0gZnJvbSAnLi9zdG9yZSc7XG5pbXBvcnQge1xuICAgIFJPVVRFRF9TQ0VORSxcbiAgICBTUEVDSUFMX0RPTV9UQUcsXG4gICAgYXR0YWNoVGhyZWVDaGlsZCxcbiAgICBrZWJhYlRvUGFzY2FsLFxuICAgIHByb2Nlc3NUaHJlZUV2ZW50LFxuICAgIHJlbW92ZVRocmVlQ2hpbGQsXG59IGZyb20gJy4vdXRpbHMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmd0UmVuZGVyZXJGYWN0b3J5IGltcGxlbWVudHMgUmVuZGVyZXJGYWN0b3J5MiB7XG4gICAgcmVhZG9ubHkgI2RlbGVnYXRlUmVuZGVyZXJGYWN0b3J5ID0gaW5qZWN0KFJlbmRlcmVyRmFjdG9yeTIsIHsgc2tpcFNlbGY6IHRydWUgfSk7XG4gICAgcmVhZG9ubHkgI2NhdGFsb2d1ZSA9IGluamVjdChOR1RfQ0FUQUxPR1VFKTtcbiAgICByZWFkb25seSAjem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICAgIHJlYWRvbmx5ICNjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gICAgcmVhZG9ubHkgI3JlbmRlcmVyTWFwID0gbmV3IE1hcDxzdHJpbmcsIFJlbmRlcmVyMj4oKTtcbiAgICByZWFkb25seSAjcm91dGVkU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAvLyBhbGwgUmVuZGVyZXIgaW5zdGFuY2VzIHNoYXJlIHRoZSBzYW1lIFN0b3JlXG4gICAgcmVhZG9ubHkgI3JlbmRlcmVyU3RvcmUgPSBuZXcgTmd0UmVuZGVyZXJTdG9yZSh7XG4gICAgICAgIHBvcnRhbHM6IFtdLFxuICAgICAgICBzdG9yZTogaW5qZWN0KE5ndFN0b3JlKSxcbiAgICAgICAgY29tcG91bmRQcmVmaXhlczogaW5qZWN0KE5HVF9DT01QT1VORF9QUkVGSVhFUyksXG4gICAgICAgIGRvY3VtZW50OiBpbmplY3QoRE9DVU1FTlQpLFxuICAgIH0pO1xuXG4gICAgY3JlYXRlUmVuZGVyZXIoaG9zdEVsZW1lbnQ6IGFueSwgdHlwZTogUmVuZGVyZXJUeXBlMiB8IG51bGwpOiBSZW5kZXJlcjIge1xuICAgICAgICBjb25zdCBkZWxlZ2F0ZVJlbmRlcmVyID0gdGhpcy4jZGVsZWdhdGVSZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIoaG9zdEVsZW1lbnQsIHR5cGUpO1xuICAgICAgICBpZiAoIXR5cGUpIHJldHVybiBkZWxlZ2F0ZVJlbmRlcmVyO1xuICAgICAgICAvLyBpZiAoKHR5cGUgYXMgTmd0QW55UmVjb3JkKVsndHlwZSddWydpc0h0bWwnXSkge1xuICAgICAgICAvLyByZXR1cm4gZGVsZWdhdGVSZW5kZXJlcjtcbiAgICAgICAgLy8gfVxuICAgICAgICBpZiAoKHR5cGUgYXMgTmd0QW55UmVjb3JkKVsndHlwZSddW1JPVVRFRF9TQ0VORV0pIHtcbiAgICAgICAgICAgIHRoaXMuI3JvdXRlZFNldC5hZGQodHlwZS5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlbmRlcmVyID0gdGhpcy4jcmVuZGVyZXJNYXAuZ2V0KHR5cGUuaWQpO1xuICAgICAgICBpZiAoIXJlbmRlcmVyKSB7XG4gICAgICAgICAgICByZW5kZXJlciA9IG5ldyBOZ3RSZW5kZXJlcihcbiAgICAgICAgICAgICAgICBkZWxlZ2F0ZVJlbmRlcmVyLFxuICAgICAgICAgICAgICAgIHRoaXMuI3JlbmRlcmVyU3RvcmUsXG4gICAgICAgICAgICAgICAgdGhpcy4jY2F0YWxvZ3VlLFxuICAgICAgICAgICAgICAgIHRoaXMuI3pvbmUsXG4gICAgICAgICAgICAgICAgdGhpcy4jY2RyLFxuICAgICAgICAgICAgICAgIC8vIHNldHRpbmcgcm9vdCBzY2VuZSBpZiB0aGVyZSdzIG5vIHJvdXRlZCBzY2VuZSBPUiB0aGlzIGNvbXBvbmVudCBpcyB0aGUgcm91dGVkIFNjZW5lXG4gICAgICAgICAgICAgICAgIWhvc3RFbGVtZW50ICYmICh0aGlzLiNyb3V0ZWRTZXQuc2l6ZSA9PT0gMCB8fCB0aGlzLiNyb3V0ZWRTZXQuaGFzKHR5cGUuaWQpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuI3JlbmRlcmVyTWFwLnNldCh0eXBlLmlkLCByZW5kZXJlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBbnl0aGluZyBhYmJyZXZpYXRlZCB3aXRoIHJTL1JTIHN0YW5kcyBmb3IgUmVuZGVyZXJTdGF0ZVxuICovXG5leHBvcnQgY2xhc3MgTmd0UmVuZGVyZXIgaW1wbGVtZW50cyBSZW5kZXJlcjIge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGRlbGVnYXRlOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmU6IE5ndFJlbmRlcmVyU3RvcmUsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY2F0YWxvZ3VlOiBSZWNvcmQ8c3RyaW5nLCBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk+LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHpvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHJvb3QgPSB0cnVlXG4gICAgKSB7fVxuXG4gICAgY3JlYXRlRWxlbWVudChuYW1lOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudChuYW1lLCBuYW1lc3BhY2UpO1xuXG4gICAgICAgIC8vIG9uIGZpcnN0IHBhc3MsIHdlIHJldHVybiB0aGUgUm9vdCBTY2VuZSBhcyB0aGUgcm9vdCBub2RlXG4gICAgICAgIGlmICh0aGlzLnJvb3QpIHtcbiAgICAgICAgICAgIHRoaXMucm9vdCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgndGhyZWUnLCB0aGlzLnN0b3JlLnJvb3RTY2VuZSk7XG4gICAgICAgICAgICBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0gPSAoKSA9PiBnZXREZWJ1Z05vZGUoZWxlbWVudCkhLmluamVjdG9yO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBoYW5kbGUgY29tcG91bmRcbiAgICAgICAgaWYgKHRoaXMuc3RvcmUuaXNDb21wb3VuZChuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgnY29tcG91bmQnLCBlbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZSBwb3J0YWxcbiAgICAgICAgaWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfUE9SVEFMKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCdwb3J0YWwnLCBlbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZSByYXcgdmFsdWVcbiAgICAgICAgaWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfVkFMVUUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmNyZWF0ZU5vZGUoXG4gICAgICAgICAgICAgICAgJ3RocmVlJyxcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICAgICAgICB7IF9fbmd0X3JlbmRlcmVyX186IHsgcmF3VmFsdWU6IHVuZGVmaW5lZCB9IH0sXG4gICAgICAgICAgICAgICAgICAgIHsgX19uZ3RfXzogeyBpc1JhdzogdHJ1ZSwgcGFyZW50OiBjcmVhdGVTaWduYWwobnVsbCkgfSB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgaW5qZWN0ZWRBcmdzLCBpbmplY3RlZFBhcmVudCwgc3RvcmUgfSA9IHRoaXMuc3RvcmUuZ2V0Q3JlYXRpb25TdGF0ZSgpO1xuXG4gICAgICAgIGxldCBwYXJlbnQgPSBpbmplY3RlZFBhcmVudCBhcyBOZ3RSZW5kZXJlclN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RlZFBhcmVudF07XG4gICAgICAgIGlmICh0eXBlb2YgaW5qZWN0ZWRQYXJlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBwYXJlbnQgPSBzdG9yZVxuICAgICAgICAgICAgICAgIC5nZXQoJ3NjZW5lJylcbiAgICAgICAgICAgICAgICAuZ2V0T2JqZWN0QnlOYW1lKGluamVjdGVkUGFyZW50KSBhcyB1bmtub3duIGFzIE5ndFJlbmRlcmVyU3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdGVkUGFyZW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZSBwcmltaXRpdmVcbiAgICAgICAgaWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfUFJJTUlUSVZFKSB7XG4gICAgICAgICAgICBpZiAoIWluamVjdGVkQXJnc1swXSkgdGhyb3cgbmV3IEVycm9yKGBbTkdUXSBuZ3QtcHJpbWl0aXZlIHdpdGhvdXQgYXJncyBpcyBpbnZhbGlkYCk7XG4gICAgICAgICAgICBjb25zdCBvYmplY3QgPSBpbmplY3RlZEFyZ3NbMF07XG4gICAgICAgICAgICBsZXQgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUob2JqZWN0KTtcbiAgICAgICAgICAgIGlmICghT2JqZWN0LmtleXMobG9jYWxTdGF0ZSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcHJlcGFyZShvYmplY3QsIHsgc3RvcmUsIGFyZ3M6IGluamVjdGVkQXJncywgcHJpbWl0aXZlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKG9iamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWxvY2FsU3RhdGUuc3RvcmUpIGxvY2FsU3RhdGUuc3RvcmUgPSBzdG9yZTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0b3JlLmNyZWF0ZU5vZGUoJ3RocmVlJywgb2JqZWN0KTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdGVkUGFyZW50XSA9IHBhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGhyZWVUYWcgPSBuYW1lLnN0YXJ0c1dpdGgoJ25ndCcpID8gbmFtZS5zbGljZSg0KSA6IG5hbWU7XG4gICAgICAgIGNvbnN0IHRocmVlTmFtZSA9IGtlYmFiVG9QYXNjYWwodGhyZWVUYWcpO1xuICAgICAgICBjb25zdCB0aHJlZVRhcmdldCA9IHRoaXMuY2F0YWxvZ3VlW3RocmVlTmFtZV07XG4gICAgICAgIC8vIHdlIGhhdmUgdGhlIFRIUkVFIGNvbnN0cnVjdG9yIGhlcmUsIGhhbmRsZSBpdFxuICAgICAgICBpZiAodGhyZWVUYXJnZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gcHJlcGFyZShuZXcgdGhyZWVUYXJnZXQoLi4uaW5qZWN0ZWRBcmdzKSwgeyBzdG9yZSwgYXJnczogaW5qZWN0ZWRBcmdzIH0pO1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgndGhyZWUnLCBpbnN0YW5jZSk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSk7XG5cbiAgICAgICAgICAgIC8vIGF1dG8tYXR0YWNoIGZvciBnZW9tZXRyeSBhbmQgbWF0ZXJpYWxcbiAgICAgICAgICAgIGlmIChpcy5nZW9tZXRyeShpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0YXRlLmF0dGFjaCA9IFsnZ2VvbWV0cnknXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXMubWF0ZXJpYWwoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdGF0ZS5hdHRhY2ggPSBbJ21hdGVyaWFsJ107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdGVkUGFyZW50XSA9IHBhcmVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCdkb20nLCBlbGVtZW50KTtcbiAgICB9XG5cbiAgICBjcmVhdGVDb21tZW50KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgnY29tbWVudCcsIHRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudCh2YWx1ZSkpO1xuICAgIH1cblxuICAgIGFwcGVuZENoaWxkKHBhcmVudDogTmd0UmVuZGVyZXJOb2RlLCBuZXdDaGlsZDogTmd0UmVuZGVyZXJOb2RlKTogdm9pZCB7XG4gICAgICAgIC8vIFRPRE86IGp1c3QgaWdub3JlIHRleHQgbm9kZSBmb3Igbm93XG4gICAgICAgIGlmIChuZXdDaGlsZCBpbnN0YW5jZW9mIFRleHQpIHJldHVybjtcbiAgICAgICAgY29uc3QgY1JTID0gbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfXztcbiAgICAgICAgY29uc3QgcFJTID0gcGFyZW50Ll9fbmd0X3JlbmRlcmVyX187XG5cbiAgICAgICAgaWYgKGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21tZW50Jykge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXRQYXJlbnQobmV3Q2hpbGQsIHBhcmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RlZFBhcmVudF0pIHtcbiAgICAgICAgICAgIGlmIChpcy5yZWYoY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RlZFBhcmVudF0pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0oKS5nZXQoSW5qZWN0b3IsIG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghaW5qZWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgYFtOR1RdIE5ndFJlbmRlcmVyIGlzIGF0dGVtcHRpbmcgdG8gc3RhcnQgYW4gZWZmZWN0IGZvciBpbmplY3RlZFBhcmVudCBidXQgbm8gSW5qZWN0b3IgaXMgZm91bmQuYFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHdhdGNoZXIgPSBlZmZlY3QoXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluamVjdGVkUGFyZW50ID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0ZWRQYXJlbnRdIGFzIE5ndEluamVjdGVkUmVmPE5ndFJlbmRlcmVyTm9kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICkubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmplY3RlZFBhcmVudCAmJiBpbmplY3RlZFBhcmVudCAhPT0gcGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChpbmplY3RlZFBhcmVudCwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgcnVuIHRoaXMgZWZmZWN0IG9uY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcyBzb29uIGFzIHdlIHJlLXJ1biBhcHBlbmRDaGlsZCB3aXRoIHRoZSBpbmplY3RlZFBhcmVudCwgd2Ugc3RvcCB0aGUgZWZmZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2F0Y2hlci5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgaW5qZWN0b3IsIG1hbnVhbENsZWFudXA6IHRydWUgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJlbnQgIT09IGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0ZWRQYXJlbnRdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdGVkUGFyZW50XSwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RvcmUuc2V0UGFyZW50KG5ld0NoaWxkLCBwYXJlbnQpO1xuICAgICAgICB0aGlzLnN0b3JlLmFkZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuXG4gICAgICAgIC8vIGlmIG5ldyBjaGlsZCBpcyBhIHBvcnRhbFxuICAgICAgICBpZiAoY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3BvcnRhbCcpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUucHJvY2Vzc1BvcnRhbENvbnRhaW5lcihuZXdDaGlsZCk7XG4gICAgICAgICAgICBpZiAoY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChwYXJlbnQsIGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBwYXJlbnQgaXMgYSBwb3J0YWxcbiAgICAgICAgaWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdwb3J0YWwnKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnByb2Nlc3NQb3J0YWxDb250YWluZXIocGFyZW50KTtcbiAgICAgICAgICAgIGlmIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgYm90aCBhcmUgdGhyZWUgaW5zdGFuY2VzLCBzdHJhaWdodGZvcndhcmQgY2FzZVxuICAgICAgICBpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJiBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG4gICAgICAgICAgICAvLyBpZiBjaGlsZCBhbHJlYWR5IGF0dGFjaGVkIHRvIGEgcGFyZW50LCBza2lwXG4gICAgICAgICAgICBpZiAoZ2V0TG9jYWxTdGF0ZShuZXdDaGlsZCkucGFyZW50ICYmIHVudHJhY2tlZChnZXRMb2NhbFN0YXRlKG5ld0NoaWxkKS5wYXJlbnQpKSByZXR1cm47XG4gICAgICAgICAgICAvLyBhdHRhY2ggVEhSRUUgY2hpbGRcbiAgICAgICAgICAgIGF0dGFjaFRocmVlQ2hpbGQocGFyZW50LCBuZXdDaGlsZCk7XG4gICAgICAgICAgICAvLyBoZXJlLCB3ZSBoYW5kbGUgdGhlIHNwZWNpYWwgY2FzZSBvZiBpZiB0aGUgcGFyZW50IGhhcyBhIGNvbXBvdW5kUGFyZW50LCB3aGljaCBtZWFucyB0aGlzIGNoaWxkIGlzIHBhcnQgb2YgYSBjb21wb3VuZCBwYXJlbnQgdGVtcGxhdGVcbiAgICAgICAgICAgIGlmICghY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0pIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGNsb3Nlc3RHcmFuZHBhcmVudFdpdGhDb21wb3VuZCA9IHRoaXMuc3RvcmUuZ2V0Q2xvc2VzdFBhcmVudFdpdGhDb21wb3VuZChwYXJlbnQpO1xuICAgICAgICAgICAgaWYgKCFjbG9zZXN0R3JhbmRwYXJlbnRXaXRoQ29tcG91bmQpIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoY2xvc2VzdEdyYW5kcGFyZW50V2l0aENvbXBvdW5kLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBvbmx5IHRoZSBwYXJlbnQgaXMgdGhlIFRIUkVFIGluc3RhbmNlXG4gICAgICAgIGlmIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlbmRlckNoaWxkIG9mIGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChwYXJlbnQsIHJlbmRlckNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHBhcmVudCBpcyBhIGNvbXBvdW5kXG4gICAgICAgIGlmIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnKSB7XG4gICAgICAgICAgICAvLyBpZiBjb21wb3VuZCBkb2Vzbid0IGhhdmUgYSBUSFJFRSBpbnN0YW5jZSBzZXQgeWV0XG4gICAgICAgICAgICBpZiAoIXBSU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0gJiYgY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuICAgICAgICAgICAgICAgIC8vIGlmIGNoaWxkIGlzIGluZGVlZCBhbiBuZ3RDb21wb3VuZFxuICAgICAgICAgICAgICAgIGlmIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXSkgdGhpcy5zdG9yZS5zZXRDb21wb3VuZChwYXJlbnQsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgICAgICAvLyBpZiBub3QsIHdlIHRyYWNrIHRoZSBwYXJlbnQgKHRoYXQgaXMgc3VwcG9zZWRseSB0aGUgY29tcG91bmQgY29tcG9uZW50KSBvbiB0aGlzIHRocmVlIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWNSU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdKSBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kUGFyZW50XSA9IHBhcmVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcmVzZXQgdGhlIGNvbXBvdW5kIGlmIGl0J3MgY2hhbmdlZFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0gJiZcbiAgICAgICAgICAgICAgICBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmXG4gICAgICAgICAgICAgICAgY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0gJiZcbiAgICAgICAgICAgICAgICBwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdICE9PSBuZXdDaGlsZFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXRDb21wb3VuZChwYXJlbnQsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNob3VsZEZpbmRHcmFuZHBhcmVudEluc3RhbmNlID1cbiAgICAgICAgICAgIC8vIGlmIGNoaWxkIGlzIHRocmVlIGJ1dCBoYXZlbid0IGJlZW4gYXR0YWNoZWQgdG8gYSBwYXJlbnQgeWV0XG4gICAgICAgICAgICAoY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJiAhdW50cmFja2VkKGdldExvY2FsU3RhdGUobmV3Q2hpbGQpLnBhcmVudCkpIHx8XG4gICAgICAgICAgICAvLyBvciBib3RoIHBhcmVudCBhbmQgY2hpbGQgYXJlIERPTSBlbGVtZW50c1xuICAgICAgICAgICAgLy8gb3IgdGhleSBhcmUgY29tcG91bmQgQU5EIGhhdmVuJ3QgaGFkIGEgVEhSRUUgaW5zdGFuY2UgeWV0XG4gICAgICAgICAgICAoKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nIHx8XG4gICAgICAgICAgICAgICAgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcgJiYgIXBSU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0pKSAmJlxuICAgICAgICAgICAgICAgIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnZG9tJyB8fFxuICAgICAgICAgICAgICAgICAgICAoY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJyAmJiAhY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSkpKTtcblxuICAgICAgICBpZiAoc2hvdWxkRmluZEdyYW5kcGFyZW50SW5zdGFuY2UpIHtcbiAgICAgICAgICAgIC8vIHdlJ2xsIHRyeSB0byBnZXQgdGhlIGdyYW5kcGFyZW50IGluc3RhbmNlIGhlcmUgc28gdGhhdCB3ZSBjYW4gcnVuIGFwcGVuZENoaWxkIHdpdGggYm90aCBpbnN0YW5jZXNcbiAgICAgICAgICAgIGNvbnN0IGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlID0gdGhpcy5zdG9yZS5nZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKHBhcmVudCk7XG4gICAgICAgICAgICBpZiAoY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UpIHRoaXMuYXBwZW5kQ2hpbGQoY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UsIG5ld0NoaWxkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluc2VydEJlZm9yZShcbiAgICAgICAgcGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsXG4gICAgICAgIG5ld0NoaWxkOiBOZ3RSZW5kZXJlck5vZGVcbiAgICAgICAgLy8gVE9ETzogd2UgbWlnaHQgbmVlZCB0aGVzZT9cbiAgICAgICAgLy8gcmVmQ2hpbGQ6IE5ndFJlbmRlcmVyTm9kZVxuICAgICAgICAvLyBpc01vdmU/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmIChwYXJlbnQgPT0gbnVsbCB8fCAhcGFyZW50Ll9fbmd0X3JlbmRlcmVyX18gfHwgcGFyZW50ID09PSBuZXdDaGlsZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHJlbW92ZUNoaWxkKHBhcmVudDogTmd0UmVuZGVyZXJOb2RlLCBvbGRDaGlsZDogTmd0UmVuZGVyZXJOb2RlLCBpc0hvc3RFbGVtZW50PzogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwUlMgPSBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfXztcbiAgICAgICAgY29uc3QgY1JTID0gb2xkQ2hpbGQuX19uZ3RfcmVuZGVyZXJfXztcbiAgICAgICAgaWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiYgY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuICAgICAgICAgICAgcmVtb3ZlVGhyZWVDaGlsZChwYXJlbnQsIG9sZENoaWxkLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGVzdHJveShvbGRDaGlsZCwgcGFyZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnICYmIHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF0sIG9sZENoaWxkLCBpc0hvc3RFbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRlc3Ryb3kob2xkQ2hpbGQsIHBhcmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSA9IHRoaXMuc3RvcmUuZ2V0Q2xvc2VzdFBhcmVudFdpdGhJbnN0YW5jZShwYXJlbnQpO1xuICAgICAgICBpZiAoY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UpIHRoaXMucmVtb3ZlQ2hpbGQoY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UsIG9sZENoaWxkLCBpc0hvc3RFbGVtZW50KTtcbiAgICAgICAgdGhpcy5zdG9yZS5kZXN0cm95KG9sZENoaWxkLCBjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSBhcyBOZ3RSZW5kZXJlck5vZGUpO1xuICAgIH1cblxuICAgIHBhcmVudE5vZGUobm9kZTogTmd0UmVuZGVyZXJOb2RlKSB7XG4gICAgICAgIGNvbnN0IHJTID0gbm9kZS5fX25ndF9yZW5kZXJlcl9fO1xuICAgICAgICBpZiAoclM/LltOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSkgcmV0dXJuIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKG5vZGUpO1xuICAgIH1cblxuICAgIHNldEF0dHJpYnV0ZShlbDogTmd0UmVuZGVyZXJOb2RlLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgclMgPSBlbC5fX25ndF9yZW5kZXJlcl9fO1xuICAgICAgICBpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnKSB7XG4gICAgICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIHRoZSBjb21wb3VuZCBpbnN0YW5jZSB5ZXRcbiAgICAgICAgICAgIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5hdHRyaWJ1dGVzXVtuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCFyU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLnF1ZXVlT3BlcmF0aW9uKGVsLCBbJ29wJywgKCkgPT4gdGhpcy5zZXRBdHRyaWJ1dGUoZWwsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2UpXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShyU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0sIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykgdGhpcy5zdG9yZS5hcHBseUF0dHJpYnV0ZShlbCwgbmFtZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHNldFByb3BlcnR5KGVsOiBOZ3RSZW5kZXJlck5vZGUsIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCByUyA9IGVsLl9fbmd0X3JlbmRlcmVyX187XG4gICAgICAgIGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcpIHtcbiAgICAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgdGhlIGNvbXBvdW5kIGluc3RhbmNlIHlldFxuICAgICAgICAgICAgclNbTmd0UmVuZGVyZXJDbGFzc0lkLnByb3BlcnRpZXNdW25hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAoIXJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUucXVldWVPcGVyYXRpb24oZWwsIFsnb3AnLCAoKSA9PiB0aGlzLnNldFByb3BlcnR5KGVsLCBuYW1lLCB2YWx1ZSldKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0uX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRdKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihyU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0uX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRdLCB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICAgICAgICAgICAgclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgW25hbWVdOiB2YWx1ZSB9XG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5KHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSwgbmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykgdGhpcy5zdG9yZS5hcHBseVByb3BlcnR5KGVsLCBuYW1lLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgbGlzdGVuKHRhcmdldDogTmd0UmVuZGVyZXJOb2RlLCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IChldmVudDogYW55KSA9PiBib29sZWFuIHwgdm9pZCk6ICgpID0+IHZvaWQge1xuICAgICAgICBjb25zdCByUyA9IHRhcmdldC5fX25ndF9yZW5kZXJlcl9fO1xuXG4gICAgICAgIC8vIGlmIHRoZSB0YXJnZXQgZG9lc24ndCBoYXZlIF9fbmd0X3JlbmRlcmVyX18sIHdlIGRlbGVnYXRlXG4gICAgICAgIC8vIGlmIHRhcmdldCBpcyBET00gbm9kZSwgdGhlbiB3ZSBwYXNzIHRoYXQgdG8gZGVsZWdhdGUgUmVuZGVyZXJcbiAgICAgICAgaWYgKCFyUyB8fCB0aGlzLnN0b3JlLmlzRE9NKHRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0YXJnZXQsIGV2ZW50TmFtZSwgY2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnIHx8XG4gICAgICAgICAgICAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnICYmIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSB8fCB0YXJnZXQ7XG4gICAgICAgICAgICBjb25zdCBwcmlvcml0eSA9IGdldExvY2FsU3RhdGUodGFyZ2V0KS5wcmlvcml0eTtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldENkciA9XG4gICAgICAgICAgICAgICAgclNbTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0/LigpLmdldChDaGFuZ2VEZXRlY3RvclJlZiwgbnVsbCkgfHxcbiAgICAgICAgICAgICAgICByU1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XT8uX19uZ3RfcmVuZGVyZXJfXz8uW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldPy4oKS5nZXQoXG4gICAgICAgICAgICAgICAgICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBwcm9jZXNzVGhyZWVFdmVudChpbnN0YW5jZSwgcHJpb3JpdHkgfHwgMCwgZXZlbnROYW1lLCBjYWxsYmFjaywgdGhpcy56b25lLCB0aGlzLmNkciwgdGFyZ2V0Q2RyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcgJiYgIXJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5xdWV1ZU9wZXJhdGlvbih0YXJnZXQsIFtcbiAgICAgICAgICAgICAgICAnb3AnLFxuICAgICAgICAgICAgICAgICgpID0+IHRoaXMuc3RvcmUucXVldWVPcGVyYXRpb24odGFyZ2V0LCBbJ2NsZWFuVXAnLCB0aGlzLmxpc3Rlbih0YXJnZXQsIGV2ZW50TmFtZSwgY2FsbGJhY2spXSksXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSB3ZSBrbm93IHRoYXQgdGFyZ2V0IGlzIG5vdCBET00gbm9kZVxuICAgICAgICBpZiAodGFyZ2V0ID09PSB0aGlzLnN0b3JlLnJvb3RTY2VuZSkge1xuICAgICAgICAgICAgbGV0IFtkb21UYXJnZXQsIGV2ZW50XSA9IGV2ZW50TmFtZS5zcGxpdCgnOicpO1xuICAgICAgICAgICAgaWYgKGV2ZW50ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBldmVudCA9IGRvbVRhcmdldDtcbiAgICAgICAgICAgICAgICBkb21UYXJnZXQgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGV2ZW50VGFyZ2V0ID1cbiAgICAgICAgICAgICAgICBkb21UYXJnZXQgPT09ICd3aW5kb3cnXG4gICAgICAgICAgICAgICAgICAgID8gKHRhcmdldCBhcyBOZ3RBbnlSZWNvcmQpWydvd25lckRvY3VtZW50J11bJ2RlZmF1bHRWaWV3J11cbiAgICAgICAgICAgICAgICAgICAgOiAodGFyZ2V0IGFzIE5ndEFueVJlY29yZClbJ293bmVyRG9jdW1lbnQnXTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3RlbihldmVudFRhcmdldCwgZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoKSA9PiB7fTtcbiAgICB9XG5cbiAgICBjcmVhdGVUZXh0ID0gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0LmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgZGVzdHJveSA9IHRoaXMuZGVsZWdhdGUuZGVzdHJveS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIGRlc3Ryb3lOb2RlOiAoKG5vZGU6IGFueSkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgICBzZWxlY3RSb290RWxlbWVudCA9IHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQuYmluZCh0aGlzLmRlbGVnYXRlKTtcbiAgICBuZXh0U2libGluZyA9IHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcuYmluZCh0aGlzLmRlbGVnYXRlKTtcbiAgICByZW1vdmVBdHRyaWJ1dGUgPSB0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIGFkZENsYXNzID0gdGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcy5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIHJlbW92ZUNsYXNzID0gdGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcy5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIHNldFN0eWxlID0gdGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIHJlbW92ZVN0eWxlID0gdGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIHNldFZhbHVlID0gdGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIGdldCBkYXRhKCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5kYXRhO1xuICAgIH1cbn1cbiJdfQ==
|
|
368
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9yZW5kZXJlci9yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNILGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsUUFBUSxFQUNSLE1BQU0sRUFDTixnQkFBZ0IsRUFDaEIsTUFBTSxFQUNOLFlBQVksRUFDWixNQUFNLEVBQ04sU0FBUyxHQUdaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFN0MsT0FBTyxFQUFFLGdCQUFnQixFQUErQyxNQUFNLFNBQVMsQ0FBQztBQUN4RixPQUFPLEVBQ0gsWUFBWSxFQUNaLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixnQkFBZ0IsR0FDbkIsTUFBTSxTQUFTLENBQUM7O0FBRWpCLE1BQ2Esa0JBQWtCO0lBQ2xCLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLFVBQVUsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDbkMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENB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SUFBSSxDQUFDO0lBQzlCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgSW5qZWN0YWJsZSxcbiAgICBJbmplY3RvcixcbiAgICBOZ1pvbmUsXG4gICAgUmVuZGVyZXJGYWN0b3J5MixcbiAgICBlZmZlY3QsXG4gICAgZ2V0RGVidWdOb2RlLFxuICAgIGluamVjdCxcbiAgICB1bnRyYWNrZWQsXG4gICAgdHlwZSBSZW5kZXJlcjIsXG4gICAgdHlwZSBSZW5kZXJlclR5cGUyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HVF9DQVRBTE9HVUUgfSBmcm9tICcuLi9kaS9jYXRhbG9ndWUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RJbmplY3RlZFJlZiB9IGZyb20gJy4uL2RpL3JlZic7XG5pbXBvcnQgeyBOZ3RTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9zdG9yZSc7XG5pbXBvcnQgdHlwZSB7IE5ndEFueVJlY29yZCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUsIHByZXBhcmUgfSBmcm9tICcuLi91dGlscy9pbnN0YW5jZSc7XG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uL3V0aWxzL2lzJztcbmltcG9ydCB7IGNyZWF0ZVNpZ25hbCB9IGZyb20gJy4uL3V0aWxzL3NpZ25hbCc7XG5pbXBvcnQgeyBOR1RfQ09NUE9VTkRfUFJFRklYRVMgfSBmcm9tICcuL2RpJztcbmltcG9ydCB7IE5ndFJlbmRlcmVyQ2xhc3NJZCB9IGZyb20gJy4vZW51bXMnO1xuaW1wb3J0IHsgTmd0UmVuZGVyZXJTdG9yZSwgdHlwZSBOZ3RSZW5kZXJlck5vZGUsIHR5cGUgTmd0UmVuZGVyZXJTdGF0ZSB9IGZyb20gJy4vc3RvcmUnO1xuaW1wb3J0IHtcbiAgICBST1VURURfU0NFTkUsXG4gICAgU1BFQ0lBTF9ET01fVEFHLFxuICAgIGF0dGFjaFRocmVlQ2hpbGQsXG4gICAga2ViYWJUb1Bhc2NhbCxcbiAgICBwcm9jZXNzVGhyZWVFdmVudCxcbiAgICByZW1vdmVUaHJlZUNoaWxkLFxufSBmcm9tICcuL3V0aWxzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5ndFJlbmRlcmVyRmFjdG9yeSBpbXBsZW1lbnRzIFJlbmRlcmVyRmFjdG9yeTIge1xuICAgIHJlYWRvbmx5ICNkZWxlZ2F0ZVJlbmRlcmVyRmFjdG9yeSA9IGluamVjdChSZW5kZXJlckZhY3RvcnkyLCB7IHNraXBTZWxmOiB0cnVlIH0pO1xuICAgIHJlYWRvbmx5ICNjYXRhbG9ndWUgPSBpbmplY3QoTkdUX0NBVEFMT0dVRSk7XG4gICAgcmVhZG9ubHkgI3pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgICByZWFkb25seSAjY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAgIHJlYWRvbmx5ICNyZW5kZXJlck1hcCA9IG5ldyBNYXA8c3RyaW5nLCBSZW5kZXJlcjI+KCk7XG4gICAgcmVhZG9ubHkgI3JvdXRlZFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgLy8gYWxsIFJlbmRlcmVyIGluc3RhbmNlcyBzaGFyZSB0aGUgc2FtZSBTdG9yZVxuICAgIHJlYWRvbmx5ICNyZW5kZXJlclN0b3JlID0gbmV3IE5ndFJlbmRlcmVyU3RvcmUoe1xuICAgICAgICBwb3J0YWxzOiBbXSxcbiAgICAgICAgc3RvcmU6IGluamVjdChOZ3RTdG9yZSksXG4gICAgICAgIGNvbXBvdW5kUHJlZml4ZXM6IGluamVjdChOR1RfQ09NUE9VTkRfUFJFRklYRVMpLFxuICAgICAgICBkb2N1bWVudDogaW5qZWN0KERPQ1VNRU5UKSxcbiAgICB9KTtcblxuICAgIGNyZWF0ZVJlbmRlcmVyKGhvc3RFbGVtZW50OiBhbnksIHR5cGU6IFJlbmRlcmVyVHlwZTIgfCBudWxsKTogUmVuZGVyZXIyIHtcbiAgICAgICAgY29uc3QgZGVsZWdhdGVSZW5kZXJlciA9IHRoaXMuI2RlbGVnYXRlUmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGhvc3RFbGVtZW50LCB0eXBlKTtcbiAgICAgICAgaWYgKCF0eXBlKSByZXR1cm4gZGVsZWdhdGVSZW5kZXJlcjtcbiAgICAgICAgLy8gaWYgKCh0eXBlIGFzIE5ndEFueVJlY29yZClbJ3R5cGUnXVsnaXNIdG1sJ10pIHtcbiAgICAgICAgLy8gcmV0dXJuIGRlbGVnYXRlUmVuZGVyZXI7XG4gICAgICAgIC8vIH1cbiAgICAgICAgaWYgKCh0eXBlIGFzIE5ndEFueVJlY29yZClbJ3R5cGUnXVtST1VURURfU0NFTkVdKSB7XG4gICAgICAgICAgICB0aGlzLiNyb3V0ZWRTZXQuYWRkKHR5cGUuaWQpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZW5kZXJlciA9IHRoaXMuI3JlbmRlcmVyTWFwLmdldCh0eXBlLmlkKTtcbiAgICAgICAgaWYgKCFyZW5kZXJlcikge1xuICAgICAgICAgICAgcmVuZGVyZXIgPSBuZXcgTmd0UmVuZGVyZXIoXG4gICAgICAgICAgICAgICAgZGVsZWdhdGVSZW5kZXJlcixcbiAgICAgICAgICAgICAgICB0aGlzLiNyZW5kZXJlclN0b3JlLFxuICAgICAgICAgICAgICAgIHRoaXMuI2NhdGFsb2d1ZSxcbiAgICAgICAgICAgICAgICB0aGlzLiN6b25lLFxuICAgICAgICAgICAgICAgIHRoaXMuI2NkcixcbiAgICAgICAgICAgICAgICAvLyBzZXR0aW5nIHJvb3Qgc2NlbmUgaWYgdGhlcmUncyBubyByb3V0ZWQgc2NlbmUgT1IgdGhpcyBjb21wb25lbnQgaXMgdGhlIHJvdXRlZCBTY2VuZVxuICAgICAgICAgICAgICAgICFob3N0RWxlbWVudCAmJiAodGhpcy4jcm91dGVkU2V0LnNpemUgPT09IDAgfHwgdGhpcy4jcm91dGVkU2V0Lmhhcyh0eXBlLmlkKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLiNyZW5kZXJlck1hcC5zZXQodHlwZS5pZCwgcmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZW5kZXJlcjtcbiAgICB9XG59XG5cbi8qKlxuICogQW55dGhpbmcgYWJicmV2aWF0ZWQgd2l0aCByUy9SUyBzdGFuZHMgZm9yIFJlbmRlcmVyU3RhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIE5ndFJlbmRlcmVyIGltcGxlbWVudHMgUmVuZGVyZXIyIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkZWxlZ2F0ZTogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlOiBOZ3RSZW5kZXJlclN0b3JlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNhdGFsb2d1ZTogUmVjb3JkPHN0cmluZywgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55PixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB6b25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByb290ID0gdHJ1ZVxuICAgICkge31cblxuICAgIGNyZWF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCBuYW1lc3BhY2U/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQobmFtZSwgbmFtZXNwYWNlKTtcblxuICAgICAgICAvLyBvbiBmaXJzdCBwYXNzLCB3ZSByZXR1cm4gdGhlIFJvb3QgU2NlbmUgYXMgdGhlIHJvb3Qgbm9kZVxuICAgICAgICBpZiAodGhpcy5yb290KSB7XG4gICAgICAgICAgICB0aGlzLnJvb3QgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0b3JlLmNyZWF0ZU5vZGUoJ3RocmVlJywgdGhpcy5zdG9yZS5yb290U2NlbmUpO1xuICAgICAgICAgICAgbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldID0gKCkgPT4gZ2V0RGVidWdOb2RlKGVsZW1lbnQpIS5pbmplY3RvcjtcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaGFuZGxlIGNvbXBvdW5kXG4gICAgICAgIGlmICh0aGlzLnN0b3JlLmlzQ29tcG91bmQobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmNyZWF0ZU5vZGUoJ2NvbXBvdW5kJywgZWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBoYW5kbGUgcG9ydGFsXG4gICAgICAgIGlmIChuYW1lID09PSBTUEVDSUFMX0RPTV9UQUcuTkdUX1BPUlRBTCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgncG9ydGFsJywgZWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBoYW5kbGUgcmF3IHZhbHVlXG4gICAgICAgIGlmIChuYW1lID09PSBTUEVDSUFMX0RPTV9UQUcuTkdUX1ZBTFVFKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKFxuICAgICAgICAgICAgICAgICd0aHJlZScsXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgICAgICAgICAgeyBfX25ndF9yZW5kZXJlcl9fOiB7IHJhd1ZhbHVlOiB1bmRlZmluZWQgfSB9LFxuICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiB3ZSBhc3NpZ24gdGhpcyBtYW51YWxseSB0byBhIHJhdyB2YWx1ZSBub2RlXG4gICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugd2Ugc2F5IGl0IGlzIGEgJ3RocmVlJyBub2RlIGJ1dCB3ZSdyZSBub3QgdXNpbmcgcHJlcGFyZSgpXG4gICAgICAgICAgICAgICAgICAgIHsgX19uZ3RfXzogeyBpc1JhdzogdHJ1ZSwgcGFyZW50OiBjcmVhdGVTaWduYWwobnVsbCkgfSB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgaW5qZWN0ZWRBcmdzLCBpbmplY3RlZFBhcmVudCwgc3RvcmUgfSA9IHRoaXMuc3RvcmUuZ2V0Q3JlYXRpb25TdGF0ZSgpO1xuXG4gICAgICAgIGxldCBwYXJlbnQgPSBpbmplY3RlZFBhcmVudCBhcyBOZ3RSZW5kZXJlclN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RlZFBhcmVudF07XG4gICAgICAgIGlmICh0eXBlb2YgaW5qZWN0ZWRQYXJlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBwYXJlbnQgPSBzdG9yZVxuICAgICAgICAgICAgICAgIC5nZXQoJ3NjZW5lJylcbiAgICAgICAgICAgICAgICAuZ2V0T2JqZWN0QnlOYW1lKGluamVjdGVkUGFyZW50KSBhcyB1bmtub3duIGFzIE5ndFJlbmRlcmVyU3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdGVkUGFyZW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZSBwcmltaXRpdmVcbiAgICAgICAgaWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfUFJJTUlUSVZFKSB7XG4gICAgICAgICAgICBpZiAoIWluamVjdGVkQXJnc1swXSkgdGhyb3cgbmV3IEVycm9yKGBbTkdUXSBuZ3QtcHJpbWl0aXZlIHdpdGhvdXQgYXJncyBpcyBpbnZhbGlkYCk7XG4gICAgICAgICAgICBjb25zdCBvYmplY3QgPSBpbmplY3RlZEFyZ3NbMF07XG4gICAgICAgICAgICBsZXQgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUob2JqZWN0KTtcbiAgICAgICAgICAgIGlmICghT2JqZWN0LmtleXMobG9jYWxTdGF0ZSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gTk9URTogaWYgYW4gb2JqZWN0IGlzbid0IGFscmVhZHkgXCJwcmVwYXJlZFwiLCB3ZSBwcmVwYXJlIGl0XG4gICAgICAgICAgICAgICAgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUocHJlcGFyZShvYmplY3QsIHsgc3RvcmUsIGFyZ3M6IGluamVjdGVkQXJncywgcHJpbWl0aXZlOiB0cnVlIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbG9jYWxTdGF0ZS5zdG9yZSkgbG9jYWxTdGF0ZS5zdG9yZSA9IHN0b3JlO1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgndGhyZWUnLCBvYmplY3QpO1xuICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0ZWRQYXJlbnRdID0gcGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aHJlZVRhZyA9IG5hbWUuc3RhcnRzV2l0aCgnbmd0JykgPyBuYW1lLnNsaWNlKDQpIDogbmFtZTtcbiAgICAgICAgY29uc3QgdGhyZWVOYW1lID0ga2ViYWJUb1Bhc2NhbCh0aHJlZVRhZyk7XG4gICAgICAgIGNvbnN0IHRocmVlVGFyZ2V0ID0gdGhpcy5jYXRhbG9ndWVbdGhyZWVOYW1lXTtcbiAgICAgICAgLy8gd2UgaGF2ZSB0aGUgVEhSRUUgY29uc3RydWN0b3IgaGVyZSwgaGFuZGxlIGl0XG4gICAgICAgIGlmICh0aHJlZVRhcmdldCkge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBwcmVwYXJlKG5ldyB0aHJlZVRhcmdldCguLi5pbmplY3RlZEFyZ3MpLCB7IHN0b3JlLCBhcmdzOiBpbmplY3RlZEFyZ3MgfSk7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCd0aHJlZScsIGluc3RhbmNlKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGluc3RhbmNlKTtcblxuICAgICAgICAgICAgLy8gYXV0by1hdHRhY2ggZm9yIGdlb21ldHJ5IGFuZCBtYXRlcmlhbFxuICAgICAgICAgICAgaWYgKGlzLmdlb21ldHJ5KGluc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RhdGUuYXR0YWNoID0gWydnZW9tZXRyeSddO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpcy5tYXRlcmlhbChpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0YXRlLmF0dGFjaCA9IFsnbWF0ZXJpYWwnXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0ZWRQYXJlbnRdID0gcGFyZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmNyZWF0ZU5vZGUoJ2RvbScsIGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGNyZWF0ZUNvbW1lbnQodmFsdWU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCdjb21tZW50JywgdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KHZhbHVlKSk7XG4gICAgfVxuXG4gICAgYXBwZW5kQ2hpbGQocGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsIG5ld0NoaWxkOiBOZ3RSZW5kZXJlck5vZGUpOiB2b2lkIHtcbiAgICAgICAgLy8gVE9ETzoganVzdCBpZ25vcmUgdGV4dCBub2RlIGZvciBub3dcbiAgICAgICAgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgVGV4dCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBjUlMgPSBuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fO1xuICAgICAgICBjb25zdCBwUlMgPSBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfXztcblxuICAgICAgICBpZiAoY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbW1lbnQnKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNldFBhcmVudChuZXdDaGlsZCwgcGFyZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdGVkUGFyZW50XSkge1xuICAgICAgICAgICAgaWYgKGlzLnJlZihjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdGVkUGFyZW50XSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmplY3RvciA9IGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSgpLmdldChJbmplY3RvciwgbnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpbmplY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgICBgW05HVF0gTmd0UmVuZGVyZXIgaXMgYXR0ZW1wdGluZyB0byBzdGFydCBhbiBlZmZlY3QgZm9yIGluamVjdGVkUGFyZW50IGJ1dCBubyBJbmplY3RvciBpcyBmb3VuZC5gXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgd2F0Y2hlciA9IGVmZmVjdChcbiAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5qZWN0ZWRQYXJlbnQgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RlZFBhcmVudF0gYXMgTmd0SW5qZWN0ZWRSZWY8Tmd0UmVuZGVyZXJOb2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgKS5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluamVjdGVkUGFyZW50ICYmIGluamVjdGVkUGFyZW50ICE9PSBwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKGluamVjdGVkUGFyZW50LCBuZXdDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25seSBydW4gdGhpcyBlZmZlY3Qgb25jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHNvb24gYXMgd2UgcmUtcnVuIGFwcGVuZENoaWxkIHdpdGggdGhlIGluamVjdGVkUGFyZW50LCB3ZSBzdG9wIHRoZSBlZmZlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXRjaGVyLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBpbmplY3RvciwgbWFudWFsQ2xlYW51cDogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmVudCAhPT0gY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RlZFBhcmVudF0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0ZWRQYXJlbnRdLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdG9yZS5zZXRQYXJlbnQobmV3Q2hpbGQsIHBhcmVudCk7XG4gICAgICAgIHRoaXMuc3RvcmUuYWRkQ2hpbGQocGFyZW50LCBuZXdDaGlsZCk7XG5cbiAgICAgICAgLy8gaWYgbmV3IGNoaWxkIGlzIGEgcG9ydGFsXG4gICAgICAgIGlmIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAncG9ydGFsJykge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5wcm9jZXNzUG9ydGFsQ29udGFpbmVyKG5ld0NoaWxkKTtcbiAgICAgICAgICAgIGlmIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHBhcmVudCwgY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHBhcmVudCBpcyBhIHBvcnRhbFxuICAgICAgICBpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3BvcnRhbCcpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUucHJvY2Vzc1BvcnRhbENvbnRhaW5lcihwYXJlbnQpO1xuICAgICAgICAgICAgaWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBib3RoIGFyZSB0aHJlZSBpbnN0YW5jZXMsIHN0cmFpZ2h0Zm9yd2FyZCBjYXNlXG4gICAgICAgIGlmIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmIGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcbiAgICAgICAgICAgIC8vIGlmIGNoaWxkIGFscmVhZHkgYXR0YWNoZWQgdG8gYSBwYXJlbnQsIHNraXBcbiAgICAgICAgICAgIGlmIChnZXRMb2NhbFN0YXRlKG5ld0NoaWxkKS5wYXJlbnQgJiYgdW50cmFja2VkKGdldExvY2FsU3RhdGUobmV3Q2hpbGQpLnBhcmVudCkpIHJldHVybjtcbiAgICAgICAgICAgIC8vIGF0dGFjaCBUSFJFRSBjaGlsZFxuICAgICAgICAgICAgYXR0YWNoVGhyZWVDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgIC8vIGhlcmUsIHdlIGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIGlmIHRoZSBwYXJlbnQgaGFzIGEgY29tcG91bmRQYXJlbnQsIHdoaWNoIG1lYW5zIHRoaXMgY2hpbGQgaXMgcGFydCBvZiBhIGNvbXBvdW5kIHBhcmVudCB0ZW1wbGF0ZVxuICAgICAgICAgICAgaWYgKCFjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXSkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgY2xvc2VzdEdyYW5kcGFyZW50V2l0aENvbXBvdW5kID0gdGhpcy5zdG9yZS5nZXRDbG9zZXN0UGFyZW50V2l0aENvbXBvdW5kKHBhcmVudCk7XG4gICAgICAgICAgICBpZiAoIWNsb3Nlc3RHcmFuZHBhcmVudFdpdGhDb21wb3VuZCkgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChjbG9zZXN0R3JhbmRwYXJlbnRXaXRoQ29tcG91bmQsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIG9ubHkgdGhlIHBhcmVudCBpcyB0aGUgVEhSRUUgaW5zdGFuY2VcbiAgICAgICAgaWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVuZGVyQ2hpbGQgb2YgY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHBhcmVudCwgcmVuZGVyQ2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgcGFyZW50IGlzIGEgY29tcG91bmRcbiAgICAgICAgaWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcpIHtcbiAgICAgICAgICAgIC8vIGlmIGNvbXBvdW5kIGRvZXNuJ3QgaGF2ZSBhIFRIUkVFIGluc3RhbmNlIHNldCB5ZXRcbiAgICAgICAgICAgIGlmICghcFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSAmJiBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgY2hpbGQgaXMgaW5kZWVkIGFuIG5ndENvbXBvdW5kXG4gICAgICAgICAgICAgICAgaWYgKGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRdKSB0aGlzLnN0b3JlLnNldENvbXBvdW5kKHBhcmVudCwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgICAgIC8vIGlmIG5vdCwgd2UgdHJhY2sgdGhlIHBhcmVudCAodGhhdCBpcyBzdXBwb3NlZGx5IHRoZSBjb21wb3VuZCBjb21wb25lbnQpIG9uIHRoaXMgdGhyZWUgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZFBhcmVudF0pIGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdID0gcGFyZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZXNldCB0aGUgY29tcG91bmQgaWYgaXQncyBjaGFuZ2VkXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSAmJlxuICAgICAgICAgICAgICAgIGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiZcbiAgICAgICAgICAgICAgICBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXSAmJlxuICAgICAgICAgICAgICAgIHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0gIT09IG5ld0NoaWxkXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLnNldENvbXBvdW5kKHBhcmVudCwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2hvdWxkRmluZEdyYW5kcGFyZW50SW5zdGFuY2UgPVxuICAgICAgICAgICAgLy8gaWYgY2hpbGQgaXMgdGhyZWUgYnV0IGhhdmVuJ3QgYmVlbiBhdHRhY2hlZCB0byBhIHBhcmVudCB5ZXRcbiAgICAgICAgICAgIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmICF1bnRyYWNrZWQoZ2V0TG9jYWxTdGF0ZShuZXdDaGlsZCkucGFyZW50KSkgfHxcbiAgICAgICAgICAgIC8vIG9yIGJvdGggcGFyZW50IGFuZCBjaGlsZCBhcmUgRE9NIGVsZW1lbnRzXG4gICAgICAgICAgICAvLyBvciB0aGV5IGFyZSBjb21wb3VuZCBBTkQgaGF2ZW4ndCBoYWQgYSBUSFJFRSBpbnN0YW5jZSB5ZXRcbiAgICAgICAgICAgICgocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2RvbScgfHxcbiAgICAgICAgICAgICAgICAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJyAmJiAhcFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSkpICYmXG4gICAgICAgICAgICAgICAgKGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nIHx8XG4gICAgICAgICAgICAgICAgICAgIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnICYmICFjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdKSkpO1xuXG4gICAgICAgIGlmIChzaG91bGRGaW5kR3JhbmRwYXJlbnRJbnN0YW5jZSkge1xuICAgICAgICAgICAgLy8gd2UnbGwgdHJ5IHRvIGdldCB0aGUgZ3JhbmRwYXJlbnQgaW5zdGFuY2UgaGVyZSBzbyB0aGF0IHdlIGNhbiBydW4gYXBwZW5kQ2hpbGQgd2l0aCBib3RoIGluc3RhbmNlc1xuICAgICAgICAgICAgY29uc3QgY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UgPSB0aGlzLnN0b3JlLmdldENsb3Nlc3RQYXJlbnRXaXRoSW5zdGFuY2UocGFyZW50KTtcbiAgICAgICAgICAgIGlmIChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSkgdGhpcy5hcHBlbmRDaGlsZChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSwgbmV3Q2hpbGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5zZXJ0QmVmb3JlKFxuICAgICAgICBwYXJlbnQ6IE5ndFJlbmRlcmVyTm9kZSxcbiAgICAgICAgbmV3Q2hpbGQ6IE5ndFJlbmRlcmVyTm9kZVxuICAgICAgICAvLyBUT0RPOiB3ZSBtaWdodCBuZWVkIHRoZXNlP1xuICAgICAgICAvLyByZWZDaGlsZDogTmd0UmVuZGVyZXJOb2RlXG4gICAgICAgIC8vIGlzTW92ZT86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgICApOiB2b2lkIHtcbiAgICAgICAgaWYgKHBhcmVudCA9PSBudWxsIHx8ICFwYXJlbnQuX19uZ3RfcmVuZGVyZXJfXyB8fCBwYXJlbnQgPT09IG5ld0NoaWxkKSByZXR1cm47XG4gICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQocGFyZW50LCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlQ2hpbGQocGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsIG9sZENoaWxkOiBOZ3RSZW5kZXJlck5vZGUsIGlzSG9zdEVsZW1lbnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBSUyA9IHBhcmVudC5fX25ndF9yZW5kZXJlcl9fO1xuICAgICAgICBjb25zdCBjUlMgPSBvbGRDaGlsZC5fX25ndF9yZW5kZXJlcl9fO1xuICAgICAgICBpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJiBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG4gICAgICAgICAgICByZW1vdmVUaHJlZUNoaWxkKHBhcmVudCwgb2xkQ2hpbGQsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kZXN0cm95KG9sZENoaWxkLCBwYXJlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcgJiYgcFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSwgb2xkQ2hpbGQsIGlzSG9zdEVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGVzdHJveShvbGRDaGlsZCwgcGFyZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlID0gdGhpcy5zdG9yZS5nZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKHBhcmVudCk7XG4gICAgICAgIGlmIChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSkgdGhpcy5yZW1vdmVDaGlsZChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSwgb2xkQ2hpbGQsIGlzSG9zdEVsZW1lbnQpO1xuICAgICAgICB0aGlzLnN0b3JlLmRlc3Ryb3kob2xkQ2hpbGQsIGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlIGFzIE5ndFJlbmRlcmVyTm9kZSk7XG4gICAgfVxuXG4gICAgcGFyZW50Tm9kZShub2RlOiBOZ3RSZW5kZXJlck5vZGUpIHtcbiAgICAgICAgY29uc3QgclMgPSBub2RlLl9fbmd0X3JlbmRlcmVyX187XG4gICAgICAgIGlmIChyUz8uW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdKSByZXR1cm4gclNbTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF07XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUobm9kZSk7XG4gICAgfVxuXG4gICAgc2V0QXR0cmlidXRlKGVsOiBOZ3RSZW5kZXJlck5vZGUsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgbmFtZXNwYWNlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICBjb25zdCByUyA9IGVsLl9fbmd0X3JlbmRlcmVyX187XG4gICAgICAgIGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcpIHtcbiAgICAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgdGhlIGNvbXBvdW5kIGluc3RhbmNlIHlldFxuICAgICAgICAgICAgclNbTmd0UmVuZGVyZXJDbGFzc0lkLmF0dHJpYnV0ZXNdW25hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAoIXJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUucXVldWVPcGVyYXRpb24oZWwsIFsnb3AnLCAoKSA9PiB0aGlzLnNldEF0dHJpYnV0ZShlbCwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZSldKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB0aGlzLnN0b3JlLmFwcGx5QXR0cmlidXRlKGVsLCBuYW1lLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgc2V0UHJvcGVydHkoZWw6IE5ndFJlbmRlcmVyTm9kZSwgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJTID0gZWwuX19uZ3RfcmVuZGVyZXJfXztcbiAgICAgICAgaWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJykge1xuICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0aGUgY29tcG91bmQgaW5zdGFuY2UgeWV0XG4gICAgICAgICAgICByU1tOZ3RSZW5kZXJlckNsYXNzSWQucHJvcGVydGllc11bbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmICghclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5xdWV1ZU9wZXJhdGlvbihlbCwgWydvcCcsICgpID0+IHRoaXMuc2V0UHJvcGVydHkoZWwsIG5hbWUsIHZhbHVlKV0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0pIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0sIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICAgICAgICAgICAgICByU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0uX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBbbmFtZV06IHZhbHVlIH1cbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHkoclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB0aGlzLnN0b3JlLmFwcGx5UHJvcGVydHkoZWwsIG5hbWUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBsaXN0ZW4odGFyZ2V0OiBOZ3RSZW5kZXJlck5vZGUsIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogKGV2ZW50OiBhbnkpID0+IGJvb2xlYW4gfCB2b2lkKTogKCkgPT4gdm9pZCB7XG4gICAgICAgIGNvbnN0IHJTID0gdGFyZ2V0Ll9fbmd0X3JlbmRlcmVyX187XG5cbiAgICAgICAgLy8gaWYgdGhlIHRhcmdldCBkb2Vzbid0IGhhdmUgX19uZ3RfcmVuZGVyZXJfXywgd2UgZGVsZWdhdGVcbiAgICAgICAgLy8gaWYgdGFyZ2V0IGlzIERPTSBub2RlLCB0aGVuIHdlIHBhc3MgdGhhdCB0byBkZWxlZ2F0ZSBSZW5kZXJlclxuICAgICAgICBpZiAoIXJTIHx8IHRoaXMuc3RvcmUuaXNET00odGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHRhcmdldCwgZXZlbnROYW1lLCBjYWxsYmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICByU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgfHxcbiAgICAgICAgICAgIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcgJiYgclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdIHx8IHRhcmdldDtcbiAgICAgICAgICAgIGNvbnN0IHByaW9yaXR5ID0gZ2V0TG9jYWxTdGF0ZSh0YXJnZXQpLnByaW9yaXR5O1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0Q2RyID1cbiAgICAgICAgICAgICAgICByU1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XT8uKCkuZ2V0KENoYW5nZURldGVjdG9yUmVmLCBudWxsKSB8fFxuICAgICAgICAgICAgICAgIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdPy5fX25ndF9yZW5kZXJlcl9fPy5bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0/LigpLmdldChcbiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NUaHJlZUV2ZW50KGluc3RhbmNlLCBwcmlvcml0eSB8fCAwLCBldmVudE5hbWUsIGNhbGxiYWNrLCB0aGlzLnpvbmUsIHRoaXMuY2RyLCB0YXJnZXRDZHIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJyAmJiAhclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnF1ZXVlT3BlcmF0aW9uKHRhcmdldCwgW1xuICAgICAgICAgICAgICAgICdvcCcsXG4gICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5zdG9yZS5xdWV1ZU9wZXJhdGlvbih0YXJnZXQsIFsnY2xlYW5VcCcsIHRoaXMubGlzdGVuKHRhcmdldCwgZXZlbnROYW1lLCBjYWxsYmFjayldKSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHdlIGtub3cgdGhhdCB0YXJnZXQgaXMgbm90IERPTSBub2RlXG4gICAgICAgIGlmICh0YXJnZXQgPT09IHRoaXMuc3RvcmUucm9vdFNjZW5lKSB7XG4gICAgICAgICAgICBsZXQgW2RvbVRhcmdldCwgZXZlbnRdID0gZXZlbnROYW1lLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICBpZiAoZXZlbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGV2ZW50ID0gZG9tVGFyZ2V0O1xuICAgICAgICAgICAgICAgIGRvbVRhcmdldCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXZlbnRUYXJnZXQgPVxuICAgICAgICAgICAgICAgIGRvbVRhcmdldCA9PT0gJ3dpbmRvdydcbiAgICAgICAgICAgICAgICAgICAgPyAodGFyZ2V0IGFzIE5ndEFueVJlY29yZClbJ293bmVyRG9jdW1lbnQnXVsnZGVmYXVsdFZpZXcnXVxuICAgICAgICAgICAgICAgICAgICA6ICh0YXJnZXQgYXMgTmd0QW55UmVjb3JkKVsnb3duZXJEb2N1bWVudCddO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGV2ZW50VGFyZ2V0LCBldmVudCwgY2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHt9O1xuICAgIH1cblxuICAgIGNyZWF0ZVRleHQgPSB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQuYmluZCh0aGlzLmRlbGVnYXRlKTtcbiAgICBkZXN0cm95ID0gdGhpcy5kZWxlZ2F0ZS5kZXN0cm95LmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgZGVzdHJveU5vZGU6ICgobm9kZTogYW55KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICAgIHNlbGVjdFJvb3RFbGVtZW50ID0gdGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudC5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIG5leHRTaWJsaW5nID0gdGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZy5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIHJlbW92ZUF0dHJpYnV0ZSA9IHRoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgYWRkQ2xhc3MgPSB0aGlzLmRlbGVnYXRlLmFkZENsYXNzLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgcmVtb3ZlQ2xhc3MgPSB0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgc2V0U3R5bGUgPSB0aGlzLmRlbGVnYXRlLnNldFN0eWxlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgcmVtb3ZlU3R5bGUgPSB0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgc2V0VmFsdWUgPSB0aGlzLmRlbGVnYXRlLnNldFZhbHVlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgZ2V0IGRhdGEoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmRhdGE7XG4gICAgfVxufVxuIl19
|