angular-three-rapier 2.2.0 → 2.3.0
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/colliders.mjs +45 -45
- package/esm2022/lib/debug.mjs +3 -3
- package/esm2022/lib/frame-stepper.mjs +28 -31
- package/esm2022/lib/instanced-rigid-bodies.mjs +6 -6
- package/esm2022/lib/mesh-collider.mjs +3 -3
- package/esm2022/lib/physics.mjs +53 -26
- package/esm2022/lib/rigid-body.mjs +26 -9
- package/fesm2022/angular-three-rapier.mjs +160 -119
- package/fesm2022/angular-three-rapier.mjs.map +1 -1
- package/lib/physics.d.ts +13 -2
- package/package.json +1 -1
package/esm2022/lib/physics.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, computed, contentChild, DestroyRef, Directive, effect, inject, input, signal, TemplateRef, untracked, } from '@angular/core';
|
|
2
3
|
import { EventQueue } from '@dimforge/rapier3d-compat';
|
|
3
4
|
import { injectStore, pick, vector3 } from 'angular-three';
|
|
4
5
|
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
@@ -26,8 +27,21 @@ const defaultOptions = {
|
|
|
26
27
|
timeStep: 1 / 60,
|
|
27
28
|
debug: false,
|
|
28
29
|
};
|
|
30
|
+
export class NgtrPhysicsFallback {
|
|
31
|
+
static ngTemplateContextGuard(_, ctx) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtrPhysicsFallback, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
35
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.4", type: NgtrPhysicsFallback, isStandalone: true, selector: "ng-template[rapierFallback]", ngImport: i0 });
|
|
36
|
+
}
|
|
37
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtrPhysicsFallback, decorators: [{
|
|
38
|
+
type: Directive,
|
|
39
|
+
args: [{ selector: 'ng-template[rapierFallback]', standalone: true }]
|
|
40
|
+
}] });
|
|
29
41
|
export class NgtrPhysics {
|
|
30
42
|
options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
43
|
+
content = contentChild.required(TemplateRef);
|
|
44
|
+
fallbackContent = contentChild(NgtrPhysicsFallback);
|
|
31
45
|
updatePriority = pick(this.options, 'updatePriority');
|
|
32
46
|
updateLoop = pick(this.options, 'updateLoop');
|
|
33
47
|
numSolverIterations = pick(this.options, 'numSolverIterations');
|
|
@@ -48,6 +62,7 @@ export class NgtrPhysics {
|
|
|
48
62
|
store = injectStore();
|
|
49
63
|
destroyRef = inject(DestroyRef);
|
|
50
64
|
rapierConstruct = signal(null);
|
|
65
|
+
rapierError = signal(null);
|
|
51
66
|
rapier = this.rapierConstruct.asReadonly();
|
|
52
67
|
ready = computed(() => !!this.rapier());
|
|
53
68
|
worldSingleton = computed(() => {
|
|
@@ -75,7 +90,7 @@ export class NgtrPhysics {
|
|
|
75
90
|
.then(this.rapierConstruct.set.bind(this.rapierConstruct))
|
|
76
91
|
.catch((err) => {
|
|
77
92
|
console.error(`[NGT] Failed to load rapier3d-compat`, err);
|
|
78
|
-
|
|
93
|
+
this.rapierError.set(err?.message ?? err.toString());
|
|
79
94
|
});
|
|
80
95
|
effect(() => {
|
|
81
96
|
this.updateWorldEffect();
|
|
@@ -324,39 +339,51 @@ export class NgtrPhysics {
|
|
|
324
339
|
},
|
|
325
340
|
};
|
|
326
341
|
}
|
|
327
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
328
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.
|
|
329
|
-
@if (
|
|
330
|
-
|
|
342
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtrPhysics, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
343
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.4", type: NgtrPhysics, isStandalone: true, selector: "ngtr-physics", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "content", first: true, predicate: TemplateRef, descendants: true, isSignal: true }, { propertyName: "fallbackContent", first: true, predicate: NgtrPhysicsFallback, descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
344
|
+
@if (rapierConstruct()) {
|
|
345
|
+
@if (debug()) {
|
|
346
|
+
<ngtr-debug [world]="worldSingleton()?.proxy" />
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
<ngtr-frame-stepper
|
|
350
|
+
[ready]="ready()"
|
|
351
|
+
[stepFn]="step.bind(this)"
|
|
352
|
+
[type]="updateLoop()"
|
|
353
|
+
[updatePriority]="updatePriority()"
|
|
354
|
+
/>
|
|
355
|
+
|
|
356
|
+
<ng-container [ngTemplateOutlet]="content()" />
|
|
357
|
+
} @else if (rapierError() && !!fallbackContent()) {
|
|
358
|
+
<ng-container [ngTemplateOutlet]="$any(fallbackContent())" [ngTemplateOutletContext]="{ error: rapierError() }" />
|
|
331
359
|
}
|
|
332
|
-
|
|
333
|
-
[ready]="ready()"
|
|
334
|
-
[stepFn]="step.bind(this)"
|
|
335
|
-
[type]="updateLoop()"
|
|
336
|
-
[updatePriority]="updatePriority()"
|
|
337
|
-
/>
|
|
338
|
-
<ng-content />
|
|
339
|
-
`, isInline: true, dependencies: [{ kind: "component", type: NgtrDebug, selector: "ngtr-debug", inputs: ["world"] }, { kind: "directive", type: NgtrFrameStepper, selector: "ngtr-frame-stepper", inputs: ["ready", "updatePriority", "stepFn", "type"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
360
|
+
`, isInline: true, dependencies: [{ kind: "component", type: NgtrDebug, selector: "ngtr-debug", inputs: ["world"] }, { kind: "directive", type: NgtrFrameStepper, selector: "ngtr-frame-stepper", inputs: ["ready", "updatePriority", "stepFn", "type"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
340
361
|
}
|
|
341
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
362
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtrPhysics, decorators: [{
|
|
342
363
|
type: Component,
|
|
343
364
|
args: [{
|
|
344
365
|
selector: 'ngtr-physics',
|
|
345
366
|
standalone: true,
|
|
346
367
|
template: `
|
|
347
|
-
@if (
|
|
348
|
-
|
|
368
|
+
@if (rapierConstruct()) {
|
|
369
|
+
@if (debug()) {
|
|
370
|
+
<ngtr-debug [world]="worldSingleton()?.proxy" />
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
<ngtr-frame-stepper
|
|
374
|
+
[ready]="ready()"
|
|
375
|
+
[stepFn]="step.bind(this)"
|
|
376
|
+
[type]="updateLoop()"
|
|
377
|
+
[updatePriority]="updatePriority()"
|
|
378
|
+
/>
|
|
379
|
+
|
|
380
|
+
<ng-container [ngTemplateOutlet]="content()" />
|
|
381
|
+
} @else if (rapierError() && !!fallbackContent()) {
|
|
382
|
+
<ng-container [ngTemplateOutlet]="$any(fallbackContent())" [ngTemplateOutletContext]="{ error: rapierError() }" />
|
|
349
383
|
}
|
|
350
|
-
<ngtr-frame-stepper
|
|
351
|
-
[ready]="ready()"
|
|
352
|
-
[stepFn]="step.bind(this)"
|
|
353
|
-
[type]="updateLoop()"
|
|
354
|
-
[updatePriority]="updatePriority()"
|
|
355
|
-
/>
|
|
356
|
-
<ng-content />
|
|
357
384
|
`,
|
|
358
385
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
359
|
-
imports: [NgtrDebug, NgtrFrameStepper],
|
|
386
|
+
imports: [NgtrDebug, NgtrFrameStepper, NgTemplateOutlet],
|
|
360
387
|
}]
|
|
361
388
|
}], ctorParameters: () => [] });
|
|
362
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGh5c2ljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvcmFwaWVyL3NyYy9saWIvcGh5c2ljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBZSxFQUFrQixVQUFVLEVBQTJCLE1BQU0sMkJBQTJCLENBQUM7QUFDeEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUF1QixNQUFNLE9BQU8sQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFVbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLDRCQUE0QixFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUU3RSxNQUFNLGNBQWMsR0FBdUI7SUFDMUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0QixrQkFBa0IsRUFBRSxLQUFLO0lBQ3pCLG1CQUFtQixFQUFFLENBQUM7SUFDdEIsK0JBQStCLEVBQUUsQ0FBQztJQUNsQyx3QkFBd0IsRUFBRSxDQUFDO0lBQzNCLGtCQUFrQixFQUFFLEtBQUs7SUFDekIsYUFBYSxFQUFFLEdBQUc7SUFDbEIsY0FBYyxFQUFFLENBQUM7SUFDakIs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RUFBRSxjQUFjO29CQUN4QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7OztFQVdUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUM7aUJBQ3RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdERlc3Ryb3lSZWYsXG5cdGVmZmVjdCxcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0c2lnbmFsLFxuXHR1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IFJBUElFUiwgeyBDb2xsaWRlckhhbmRsZSwgRXZlbnRRdWV1ZSwgUm90YXRpb24sIFZlY3RvciwgV29ybGQgfSBmcm9tICdAZGltZm9yZ2UvcmFwaWVyM2QtY29tcGF0JztcbmltcG9ydCB7IGluamVjdFN0b3JlLCBwaWNrLCB2ZWN0b3IzIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBNYXRoVXRpbHMsIFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBOZ3RyRGVidWcgfSBmcm9tICcuL2RlYnVnJztcbmltcG9ydCB7IE5ndHJGcmFtZVN0ZXBwZXIgfSBmcm9tICcuL2ZyYW1lLXN0ZXBwZXInO1xuaW1wb3J0IHsgX21hdHJpeDQsIF9wb3NpdGlvbiwgX3JvdGF0aW9uLCBfc2NhbGUgfSBmcm9tICcuL3NoYXJlZCc7XG5pbXBvcnQge1xuXHROZ3RyQ29sbGlkZXJTdGF0ZU1hcCxcblx0Tmd0ckNvbGxpc2lvblBheWxvYWQsXG5cdE5ndHJDb2xsaXNpb25Tb3VyY2UsXG5cdE5ndHJFdmVudE1hcCxcblx0Tmd0clBoeXNpY3NPcHRpb25zLFxuXHROZ3RyUmlnaWRCb2R5U3RhdGVNYXAsXG5cdE5ndHJXb3JsZFN0ZXBDYWxsYmFja1NldCxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVTaW5nbGV0b25Qcm94eSwgcmFwaWVyUXVhdGVybmlvblRvUXVhdGVybmlvbiB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0clBoeXNpY3NPcHRpb25zID0ge1xuXHRncmF2aXR5OiBbMCwgLTkuODEsIDBdLFxuXHRhbGxvd2VkTGluZWFyRXJyb3I6IDAuMDAxLFxuXHRudW1Tb2x2ZXJJdGVyYXRpb25zOiA0LFxuXHRudW1BZGRpdGlvbmFsRnJpY3Rpb25JdGVyYXRpb25zOiA0LFxuXHRudW1JbnRlcm5hbFBnc0l0ZXJhdGlvbnM6IDEsXG5cdHByZWRpY3Rpb25EaXN0YW5jZTogMC4wMDIsXG5cdG1pbklzbGFuZFNpemU6IDEyOCxcblx0bWF4Q2NkU3Vic3RlcHM6IDEsXG5cdGVycDogMC44LFxuXHRsZW5ndGhVbml0OiAxLFxuXHRjb2xsaWRlcnM6ICdjdWJvaWQnLFxuXHR1cGRhdGVMb29wOiAnZm9sbG93Jyxcblx0aW50ZXJwb2xhdGU6IHRydWUsXG5cdHBhdXNlZDogZmFsc2UsXG5cdHRpbWVTdGVwOiAxIC8gNjAsXG5cdGRlYnVnOiBmYWxzZSxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHItcGh5c2ljcycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0QGlmIChkZWJ1ZygpKSB7XG5cdFx0XHQ8bmd0ci1kZWJ1ZyBbd29ybGRdPVwid29ybGRTaW5nbGV0b24oKT8ucHJveHlcIiAvPlxuXHRcdH1cblx0XHQ8bmd0ci1mcmFtZS1zdGVwcGVyXG5cdFx0XHRbcmVhZHldPVwicmVhZHkoKVwiXG5cdFx0XHRbc3RlcEZuXT1cInN0ZXAuYmluZCh0aGlzKVwiXG5cdFx0XHRbdHlwZV09XCJ1cGRhdGVMb29wKClcIlxuXHRcdFx0W3VwZGF0ZVByaW9yaXR5XT1cInVwZGF0ZVByaW9yaXR5KClcIlxuXHRcdC8+XG5cdFx0PG5nLWNvbnRlbnQgLz5cblx0YCxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdGltcG9ydHM6IFtOZ3RyRGVidWcsIE5ndHJGcmFtZVN0ZXBwZXJdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RyUGh5c2ljcyB7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblxuXHRwcm90ZWN0ZWQgdXBkYXRlUHJpb3JpdHkgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3VwZGF0ZVByaW9yaXR5Jyk7XG5cdHByb3RlY3RlZCB1cGRhdGVMb29wID0gcGljayh0aGlzLm9wdGlvbnMsICd1cGRhdGVMb29wJyk7XG5cblx0cHJpdmF0ZSBudW1Tb2x2ZXJJdGVyYXRpb25zID0gcGljayh0aGlzLm9wdGlvbnMsICdudW1Tb2x2ZXJJdGVyYXRpb25zJyk7XG5cdHByaXZhdGUgbnVtQWRkaXRpb25hbEZyaWN0aW9uSXRlcmF0aW9ucyA9IHBpY2sodGhpcy5vcHRpb25zLCAnbnVtQWRkaXRpb25hbEZyaWN0aW9uSXRlcmF0aW9ucycpO1xuXHRwcml2YXRlIG51bUludGVybmFsUGdzSXRlcmF0aW9ucyA9IHBpY2sodGhpcy5vcHRpb25zLCAnbnVtSW50ZXJuYWxQZ3NJdGVyYXRpb25zJyk7XG5cdHByaXZhdGUgYWxsb3dlZExpbmVhckVycm9yID0gcGljayh0aGlzLm9wdGlvbnMsICdhbGxvd2VkTGluZWFyRXJyb3InKTtcblx0cHJpdmF0ZSBtaW5Jc2xhbmRTaXplID0gcGljayh0aGlzLm9wdGlvbnMsICdtaW5Jc2xhbmRTaXplJyk7XG5cdHByaXZhdGUgbWF4Q2NkU3Vic3RlcHMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ21heENjZFN1YnN0ZXBzJyk7XG5cdHByaXZhdGUgcHJlZGljdGlvbkRpc3RhbmNlID0gcGljayh0aGlzLm9wdGlvbnMsICdwcmVkaWN0aW9uRGlzdGFuY2UnKTtcblx0cHJpdmF0ZSBlcnAgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2VycCcpO1xuXHRwcml2YXRlIGxlbmd0aFVuaXQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2xlbmd0aFVuaXQnKTtcblx0cHJpdmF0ZSB0aW1lU3RlcCA9IHBpY2sodGhpcy5vcHRpb25zLCAndGltZVN0ZXAnKTtcblx0cHJpdmF0ZSBpbnRlcnBvbGF0ZSA9IHBpY2sodGhpcy5vcHRpb25zLCAnaW50ZXJwb2xhdGUnKTtcblxuXHRwYXVzZWQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3BhdXNlZCcpO1xuXHRkZWJ1ZyA9IHBpY2sodGhpcy5vcHRpb25zLCAnZGVidWcnKTtcblx0Y29sbGlkZXJzID0gcGljayh0aGlzLm9wdGlvbnMsICdjb2xsaWRlcnMnKTtcblx0Z3Jhdml0eSA9IHZlY3RvcjModGhpcy5vcHRpb25zLCAnZ3Jhdml0eScpO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRwcml2YXRlIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cblx0cHJpdmF0ZSByYXBpZXJDb25zdHJ1Y3QgPSBzaWduYWw8dHlwZW9mIFJBUElFUiB8IG51bGw+KG51bGwpO1xuXHRyYXBpZXIgPSB0aGlzLnJhcGllckNvbnN0cnVjdC5hc1JlYWRvbmx5KCk7XG5cblx0cmVhZHkgPSBjb21wdXRlZCgoKSA9PiAhIXRoaXMucmFwaWVyKCkpO1xuXHR3b3JsZFNpbmdsZXRvbiA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCByYXBpZXIgPSB0aGlzLnJhcGllcigpO1xuXHRcdGlmICghcmFwaWVyKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4gY3JlYXRlU2luZ2xldG9uUHJveHk8V29ybGQ+KCgpID0+IG5ldyByYXBpZXIuV29ybGQodW50cmFja2VkKHRoaXMuZ3Jhdml0eSkpKTtcblx0fSk7XG5cblx0cmlnaWRCb2R5U3RhdGVzOiBOZ3RyUmlnaWRCb2R5U3RhdGVNYXAgPSBuZXcgTWFwKCk7XG5cdGNvbGxpZGVyU3RhdGVzOiBOZ3RyQ29sbGlkZXJTdGF0ZU1hcCA9IG5ldyBNYXAoKTtcblx0cmlnaWRCb2R5RXZlbnRzOiBOZ3RyRXZlbnRNYXAgPSBuZXcgTWFwKCk7XG5cdGNvbGxpZGVyRXZlbnRzOiBOZ3RyRXZlbnRNYXAgPSBuZXcgTWFwKCk7XG5cdGJlZm9yZVN0ZXBDYWxsYmFja3M6IE5ndHJXb3JsZFN0ZXBDYWxsYmFja1NldCA9IG5ldyBTZXQoKTtcblx0YWZ0ZXJTdGVwQ2FsbGJhY2tzOiBOZ3RyV29ybGRTdGVwQ2FsbGJhY2tTZXQgPSBuZXcgU2V0KCk7XG5cblx0cHJpdmF0ZSBldmVudFF1ZXVlID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHJhcGllciA9IHRoaXMucmFwaWVyKCk7XG5cdFx0aWYgKCFyYXBpZXIpIHJldHVybiBudWxsO1xuXHRcdHJldHVybiBuZXcgRXZlbnRRdWV1ZShmYWxzZSk7XG5cdH0pO1xuXG5cdHByaXZhdGUgc3RlcHBpbmdTdGF0ZToge1xuXHRcdGFjY3VtdWxhdG9yOiBudW1iZXI7XG5cdFx0cHJldmlvdXNTdGF0ZTogUmVjb3JkPG51bWJlciwgeyBwb3NpdGlvbjogVmVjdG9yOyByb3RhdGlvbjogUm90YXRpb24gfT47XG5cdH0gPSB7IGFjY3VtdWxhdG9yOiAwLCBwcmV2aW91c1N0YXRlOiB7fSB9O1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGltcG9ydCgnQGRpbWZvcmdlL3JhcGllcjNkLWNvbXBhdCcpXG5cdFx0XHQudGhlbigocmFwaWVyKSA9PiByYXBpZXIuaW5pdCgpLnRoZW4oKCkgPT4gcmFwaWVyKSlcblx0XHRcdC50aGVuKHRoaXMucmFwaWVyQ29uc3RydWN0LnNldC5iaW5kKHRoaXMucmFwaWVyQ29uc3RydWN0KSlcblx0XHRcdC5jYXRjaCgoZXJyKSA9PiB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoYFtOR1RdIEZhaWxlZCB0byBsb2FkIHJhcGllcjNkLWNvbXBhdGAsIGVycik7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuXHRcdFx0fSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dGhpcy51cGRhdGVXb3JsZEVmZmVjdCgpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XG5cdFx0XHRjb25zdCB3b3JsZCA9IHRoaXMud29ybGRTaW5nbGV0b24oKTtcblx0XHRcdGlmICh3b3JsZCkge1xuXHRcdFx0XHR3b3JsZC5wcm94eS5mcmVlKCk7XG5cdFx0XHRcdHdvcmxkLnJlc2V0KCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRzdGVwKGRlbHRhOiBudW1iZXIpIHtcblx0XHRpZiAoIXRoaXMucGF1c2VkKCkpIHtcblx0XHRcdHRoaXMuaW50ZXJuYWxTdGVwKGRlbHRhKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZVdvcmxkRWZmZWN0KCkge1xuXHRcdGNvbnN0IHdvcmxkID0gdGhpcy53b3JsZFNpbmdsZXRvbigpO1xuXHRcdGlmICghd29ybGQpIHJldHVybjtcblxuXHRcdHdvcmxkLnByb3h5LmdyYXZpdHkgPSB0aGlzLmdyYXZpdHkoKTtcblx0XHR3b3JsZC5wcm94eS5pbnRlZ3JhdGlvblBhcmFtZXRlcnMubnVtU29sdmVySXRlcmF0aW9ucyA9IHRoaXMubnVtU29sdmVySXRlcmF0aW9ucygpO1xuXHRcdHdvcmxkLnByb3h5LmludGVncmF0aW9uUGFyYW1ldGVycy5udW1BZGRpdGlvbmFsRnJpY3Rpb25JdGVyYXRpb25zID0gdGhpcy5udW1BZGRpdGlvbmFsRnJpY3Rpb25JdGVyYXRpb25zKCk7XG5cdFx0d29ybGQucHJveHkuaW50ZWdyYXRpb25QYXJhbWV0ZXJzLm51bUludGVybmFsUGdzSXRlcmF0aW9ucyA9IHRoaXMubnVtSW50ZXJuYWxQZ3NJdGVyYXRpb25zKCk7XG5cdFx0d29ybGQucHJveHkuaW50ZWdyYXRpb25QYXJhbWV0ZXJzLm5vcm1hbGl6ZWRBbGxvd2VkTGluZWFyRXJyb3IgPSB0aGlzLmFsbG93ZWRMaW5lYXJFcnJvcigpO1xuXHRcdHdvcmxkLnByb3h5LmludGVncmF0aW9uUGFyYW1ldGVycy5taW5Jc2xhbmRTaXplID0gdGhpcy5taW5Jc2xhbmRTaXplKCk7XG5cdFx0d29ybGQucHJveHkuaW50ZWdyYXRpb25QYXJhbWV0ZXJzLm1heENjZFN1YnN0ZXBzID0gdGhpcy5tYXhDY2RTdWJzdGVwcygpO1xuXHRcdHdvcmxkLnByb3h5LmludGVncmF0aW9uUGFyYW1ldGVycy5ub3JtYWxpemVkUHJlZGljdGlvbkRpc3RhbmNlID0gdGhpcy5wcmVkaWN0aW9uRGlzdGFuY2UoKTtcblx0XHQvKipcblx0XHQgKiBOT1RFOiB3ZSBkb24ndCBrbm93IGlmIHRoaXMgaXMgdGhlIGNvcnJlY3Qgd2F5IHRvIHNldCBmb3IgY29udGFjdF9uYXR1cmFsX2ZyZXF1ZW5jeSBvciBub3QuXG5cdFx0ICogYnV0IGF0IGxlYXN0LCBpdCBnZXRzIHRoZSBgY29udGFjdF9lcnBgIHZhbHVlIHRvIGJlIHZlcnkgY2xvc2Ugd2l0aCBzZXR0aW5nIGBlcnBgXG5cdFx0ICovXG5cdFx0d29ybGQucHJveHkuaW50ZWdyYXRpb25QYXJhbWV0ZXJzLmNvbnRhY3RfbmF0dXJhbF9mcmVxdWVuY3kgPSB0aGlzLmVycCgpICogMV8wMDA7XG5cdFx0d29ybGQucHJveHkubGVuZ3RoVW5pdCA9IHRoaXMubGVuZ3RoVW5pdCgpO1xuXHR9XG5cblx0cHJpdmF0ZSBpbnRlcm5hbFN0ZXAoZGVsdGE6IG51bWJlcikge1xuXHRcdGNvbnN0IHdvcmxkU2luZ2xldG9uID0gdGhpcy53b3JsZFNpbmdsZXRvbigpO1xuXHRcdGlmICghd29ybGRTaW5nbGV0b24pIHJldHVybjtcblxuXHRcdGNvbnN0IGV2ZW50UXVldWUgPSB0aGlzLmV2ZW50UXVldWUoKTtcblx0XHRpZiAoIWV2ZW50UXVldWUpIHJldHVybjtcblxuXHRcdGNvbnN0IHdvcmxkID0gd29ybGRTaW5nbGV0b24ucHJveHk7XG5cdFx0Y29uc3QgW3RpbWVTdGVwLCBpbnRlcnBvbGF0ZSwgcGF1c2VkXSA9IFt0aGlzLnRpbWVTdGVwKCksIHRoaXMuaW50ZXJwb2xhdGUoKSwgdGhpcy5wYXVzZWQoKV07XG5cblx0XHQvKiBDaGVjayBpZiB0aGUgdGltZXN0ZXAgaXMgc3VwcG9zZWQgdG8gYmUgdmFyaWFibGUuIFdlJ2xsIGRvIHRoaXMgaGVyZVxuICAgICAgb25jZSBzbyB3ZSBkb24ndCBoYXZlIHRvIHN0cmluZy1jaGVjayBldmVyeSBmcmFtZS4gKi9cblx0XHRjb25zdCB0aW1lU3RlcFZhcmlhYmxlID0gdGltZVN0ZXAgPT09ICd2YXJ5JztcblxuXHRcdC8qKlxuXHRcdCAqIEZpeGVkIHRpbWVTdGVwIHNpbXVsYXRpb24gcHJvZ3Jlc3Npb25cblx0XHQgKiBAc2VlIGh0dHBzOi8vZ2FmZmVyb25nYW1lcy5jb20vcG9zdC9maXhfeW91cl90aW1lc3RlcC9cblx0XHQgKi9cblx0XHRjb25zdCBjbGFtcGVkRGVsdGEgPSBNYXRoVXRpbHMuY2xhbXAoZGVsdGEsIDAsIDAuNSk7XG5cblx0XHRjb25zdCBzdGVwV29ybGQgPSAoaW5uZXJEZWx0YTogbnVtYmVyKSA9PiB7XG5cdFx0XHQvLyBUcmlnZ2VyIGJlZm9yZVN0ZXAgY2FsbGJhY2tzXG5cdFx0XHR0aGlzLmJlZm9yZVN0ZXBDYWxsYmFja3MuZm9yRWFjaCgoY2FsbGJhY2spID0+IHtcblx0XHRcdFx0Y2FsbGJhY2sod29ybGQpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHdvcmxkLnRpbWVzdGVwID0gaW5uZXJEZWx0YTtcblx0XHRcdHdvcmxkLnN0ZXAoZXZlbnRRdWV1ZSk7XG5cblx0XHRcdC8vIFRyaWdnZXIgYWZ0ZXJTdGVwIGNhbGxiYWNrc1xuXHRcdFx0dGhpcy5hZnRlclN0ZXBDYWxsYmFja3MuZm9yRWFjaCgoY2FsbGJhY2spID0+IHtcblx0XHRcdFx0Y2FsbGJhY2sod29ybGQpO1xuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdGlmICh0aW1lU3RlcFZhcmlhYmxlKSB7XG5cdFx0XHRzdGVwV29ybGQoY2xhbXBlZERlbHRhKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gZG9uJ3Qgc3RlcCB0aW1lIGZvcndhcmRzIGlmIHBhdXNlZFxuXHRcdFx0Ly8gSW5jcmVhc2UgYWNjdW11bGF0b3Jcblx0XHRcdHRoaXMuc3RlcHBpbmdTdGF0ZS5hY2N1bXVsYXRvciArPSBjbGFtcGVkRGVsdGE7XG5cblx0XHRcdHdoaWxlICh0aGlzLnN0ZXBwaW5nU3RhdGUuYWNjdW11bGF0b3IgPj0gdGltZVN0ZXApIHtcblx0XHRcdFx0Ly8gU2V0IHVwIHByZXZpb3VzIHN0YXRlXG5cdFx0XHRcdC8vIG5lZWRlZCBmb3IgYWNjdXJhdGUgaW50ZXJwb2xhdGlvbnMgaWYgdGhlIHdvcmxkIHN0ZXBzIG1vcmUgdGhhbiBvbmNlXG5cdFx0XHRcdGlmIChpbnRlcnBvbGF0ZSkge1xuXHRcdFx0XHRcdHRoaXMuc3RlcHBpbmdTdGF0ZS5wcmV2aW91c1N0YXRlID0ge307XG5cdFx0XHRcdFx0d29ybGQuZm9yRWFjaFJpZ2lkQm9keSgoYm9keSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5zdGVwcGluZ1N0YXRlLnByZXZpb3VzU3RhdGVbYm9keS5oYW5kbGVdID0ge1xuXHRcdFx0XHRcdFx0XHRwb3NpdGlvbjogYm9keS50cmFuc2xhdGlvbigpLFxuXHRcdFx0XHRcdFx0XHRyb3RhdGlvbjogYm9keS5yb3RhdGlvbigpLFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHN0ZXBXb3JsZCh0aW1lU3RlcCk7XG5cdFx0XHRcdHRoaXMuc3RlcHBpbmdTdGF0ZS5hY2N1bXVsYXRvciAtPSB0aW1lU3RlcDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBpbnRlcnBvbGF0aW9uQWxwaGEgPVxuXHRcdFx0dGltZVN0ZXBWYXJpYWJsZSB8fCAhaW50ZXJwb2xhdGUgfHwgcGF1c2VkID8gMSA6IHRoaXMuc3RlcHBpbmdTdGF0ZS5hY2N1bXVsYXRvciAvIHRpbWVTdGVwO1xuXG5cdFx0Ly8gVXBkYXRlIG1lc2hlc1xuXHRcdHRoaXMucmlnaWRCb2R5U3RhdGVzLmZvckVhY2goKHN0YXRlLCBoYW5kbGUpID0+IHtcblx0XHRcdGNvbnN0IHJpZ2lkQm9keSA9IHdvcmxkLmdldFJpZ2lkQm9keShoYW5kbGUpO1xuXG5cdFx0XHRjb25zdCBldmVudHMgPSB0aGlzLnJpZ2lkQm9keUV2ZW50cy5nZXQoaGFuZGxlKTtcblx0XHRcdGlmIChldmVudHM/Lm9uU2xlZXAgfHwgZXZlbnRzPy5vbldha2UpIHtcblx0XHRcdFx0aWYgKHJpZ2lkQm9keS5pc1NsZWVwaW5nKCkgJiYgIXN0YXRlLmlzU2xlZXBpbmcpIGV2ZW50cz8ub25TbGVlcD8uKCk7XG5cdFx0XHRcdGlmICghcmlnaWRCb2R5LmlzU2xlZXBpbmcoKSAmJiBzdGF0ZS5pc1NsZWVwaW5nKSBldmVudHM/Lm9uV2FrZT8uKCk7XG5cdFx0XHRcdHN0YXRlLmlzU2xlZXBpbmcgPSByaWdpZEJvZHkuaXNTbGVlcGluZygpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXJpZ2lkQm9keSB8fCAocmlnaWRCb2R5LmlzU2xlZXBpbmcoKSAmJiAhKCdpc0luc3RhbmNlZE1lc2gnIGluIHN0YXRlLm9iamVjdCkpIHx8ICFzdGF0ZS5zZXRNYXRyaXgpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBOZXcgc3RhdGVzXG5cdFx0XHRsZXQgdCA9IHJpZ2lkQm9keS50cmFuc2xhdGlvbigpIGFzIFZlY3RvcjM7XG5cdFx0XHRsZXQgciA9IHJpZ2lkQm9keS5yb3RhdGlvbigpIGFzIFF1YXRlcm5pb247XG5cblx0XHRcdGxldCBwcmV2aW91c1N0YXRlID0gdGhpcy5zdGVwcGluZ1N0YXRlLnByZXZpb3VzU3RhdGVbaGFuZGxlXTtcblxuXHRcdFx0aWYgKHByZXZpb3VzU3RhdGUpIHtcblx0XHRcdFx0Ly8gR2V0IHByZXZpb3VzIHNpbXVsYXRlZCB3b3JsZCBwb3NpdGlvblxuXHRcdFx0XHRfbWF0cml4NFxuXHRcdFx0XHRcdC5jb21wb3NlKHByZXZpb3VzU3RhdGUucG9zaXRpb24gYXMgVmVjdG9yMywgcmFwaWVyUXVhdGVybmlvblRvUXVhdGVybmlvbihwcmV2aW91c1N0YXRlLnJvdGF0aW9uKSwgc3RhdGUuc2NhbGUpXG5cdFx0XHRcdFx0LnByZW11bHRpcGx5KHN0YXRlLmludmVydGVkV29ybGRNYXRyaXgpXG5cdFx0XHRcdFx0LmRlY29tcG9zZShfcG9zaXRpb24sIF9yb3RhdGlvbiwgX3NjYWxlKTtcblxuXHRcdFx0XHQvLyBBcHBseSBwcmV2aW91cyB0aWNrIHBvc2l0aW9uXG5cdFx0XHRcdGlmIChzdGF0ZS5tZXNoVHlwZSA9PSAnbWVzaCcpIHtcblx0XHRcdFx0XHRzdGF0ZS5vYmplY3QucG9zaXRpb24uY29weShfcG9zaXRpb24pO1xuXHRcdFx0XHRcdHN0YXRlLm9iamVjdC5xdWF0ZXJuaW9uLmNvcHkoX3JvdGF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBHZXQgbmV3IHBvc2l0aW9uXG5cdFx0XHRfbWF0cml4NFxuXHRcdFx0XHQuY29tcG9zZSh0LCByYXBpZXJRdWF0ZXJuaW9uVG9RdWF0ZXJuaW9uKHIpLCBzdGF0ZS5zY2FsZSlcblx0XHRcdFx0LnByZW11bHRpcGx5KHN0YXRlLmludmVydGVkV29ybGRNYXRyaXgpXG5cdFx0XHRcdC5kZWNvbXBvc2UoX3Bvc2l0aW9uLCBfcm90YXRpb24sIF9zY2FsZSk7XG5cblx0XHRcdGlmIChzdGF0ZS5tZXNoVHlwZSA9PSAnaW5zdGFuY2VkTWVzaCcpIHtcblx0XHRcdFx0c3RhdGUuc2V0TWF0cml4KF9tYXRyaXg0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEludGVycG9sYXRlIHRvIG5ldyBwb3NpdGlvblxuXHRcdFx0XHRzdGF0ZS5vYmplY3QucG9zaXRpb24ubGVycChfcG9zaXRpb24sIGludGVycG9sYXRpb25BbHBoYSk7XG5cdFx0XHRcdHN0YXRlLm9iamVjdC5xdWF0ZXJuaW9uLnNsZXJwKF9yb3RhdGlvbiwgaW50ZXJwb2xhdGlvbkFscGhhKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGV2ZW50UXVldWUuZHJhaW5Db2xsaXNpb25FdmVudHMoKGhhbmRsZTEsIGhhbmRsZTIsIHN0YXJ0ZWQpID0+IHtcblx0XHRcdGNvbnN0IHNvdXJjZTEgPSB0aGlzLmdldFNvdXJjZUZyb21Db2xsaWRlckhhbmRsZShoYW5kbGUxKTtcblx0XHRcdGNvbnN0IHNvdXJjZTIgPSB0aGlzLmdldFNvdXJjZUZyb21Db2xsaWRlckhhbmRsZShoYW5kbGUyKTtcblxuXHRcdFx0Ly8gQ29sbGlzaW9uIEV2ZW50c1xuXHRcdFx0aWYgKCFzb3VyY2UxPy5jb2xsaWRlci5vYmplY3QgfHwgIXNvdXJjZTI/LmNvbGxpZGVyLm9iamVjdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGNvbGxpc2lvblBheWxvYWQxID0gdGhpcy5nZXRDb2xsaXNpb25QYXlsb2FkRnJvbVNvdXJjZShzb3VyY2UxLCBzb3VyY2UyKTtcblx0XHRcdGNvbnN0IGNvbGxpc2lvblBheWxvYWQyID0gdGhpcy5nZXRDb2xsaXNpb25QYXlsb2FkRnJvbVNvdXJjZShzb3VyY2UyLCBzb3VyY2UxKTtcblxuXHRcdFx0aWYgKHN0YXJ0ZWQpIHtcblx0XHRcdFx0d29ybGQuY29udGFjdFBhaXIoc291cmNlMS5jb2xsaWRlci5vYmplY3QsIHNvdXJjZTIuY29sbGlkZXIub2JqZWN0LCAobWFuaWZvbGQsIGZsaXBwZWQpID0+IHtcblx0XHRcdFx0XHQvKiBSaWdpZEJvZHkgZXZlbnRzICovXG5cdFx0XHRcdFx0c291cmNlMS5yaWdpZEJvZHkuZXZlbnRzPy5vbkNvbGxpc2lvbkVudGVyPy4oeyAuLi5jb2xsaXNpb25QYXlsb2FkMSwgbWFuaWZvbGQsIGZsaXBwZWQgfSk7XG5cdFx0XHRcdFx0c291cmNlMi5yaWdpZEJvZHkuZXZlbnRzPy5vbkNvbGxpc2lvbkVudGVyPy4oeyAuLi5jb2xsaXNpb25QYXlsb2FkMiwgbWFuaWZvbGQsIGZsaXBwZWQgfSk7XG5cblx0XHRcdFx0XHQvKiBDb2xsaWRlciBldmVudHMgKi9cblx0XHRcdFx0XHRzb3VyY2UxLmNvbGxpZGVyLmV2ZW50cz8ub25Db2xsaXNpb25FbnRlcj8uKHsgLi4uY29sbGlzaW9uUGF5bG9hZDEsIG1hbmlmb2xkLCBmbGlwcGVkIH0pO1xuXHRcdFx0XHRcdHNvdXJjZTIuY29sbGlkZXIuZXZlbnRzPy5vbkNvbGxpc2lvbkVudGVyPy4oeyAuLi5jb2xsaXNpb25QYXlsb2FkMiwgbWFuaWZvbGQsIGZsaXBwZWQgfSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c291cmNlMS5yaWdpZEJvZHkuZXZlbnRzPy5vbkNvbGxpc2lvbkV4aXQ/Lihjb2xsaXNpb25QYXlsb2FkMSk7XG5cdFx0XHRcdHNvdXJjZTIucmlnaWRCb2R5LmV2ZW50cz8ub25Db2xsaXNpb25FeGl0Py4oY29sbGlzaW9uUGF5bG9hZDIpO1xuXHRcdFx0XHRzb3VyY2UxLmNvbGxpZGVyLmV2ZW50cz8ub25Db2xsaXNpb25FeGl0Py4oY29sbGlzaW9uUGF5bG9hZDEpO1xuXHRcdFx0XHRzb3VyY2UyLmNvbGxpZGVyLmV2ZW50cz8ub25Db2xsaXNpb25FeGl0Py4oY29sbGlzaW9uUGF5bG9hZDIpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZW5zb3IgSW50ZXJzZWN0aW9uc1xuXHRcdFx0aWYgKHN0YXJ0ZWQpIHtcblx0XHRcdFx0aWYgKHdvcmxkLmludGVyc2VjdGlvblBhaXIoc291cmNlMS5jb2xsaWRlci5vYmplY3QsIHNvdXJjZTIuY29sbGlkZXIub2JqZWN0KSkge1xuXHRcdFx0XHRcdHNvdXJjZTEucmlnaWRCb2R5LmV2ZW50cz8ub25JbnRlcnNlY3Rpb25FbnRlcj8uKGNvbGxpc2lvblBheWxvYWQxKTtcblx0XHRcdFx0XHRzb3VyY2UyLnJpZ2lkQm9keS5ldmVudHM/Lm9uSW50ZXJzZWN0aW9uRW50ZXI/Lihjb2xsaXNpb25QYXlsb2FkMik7XG5cdFx0XHRcdFx0c291cmNlMS5jb2xsaWRlci5ldmVudHM/Lm9uSW50ZXJzZWN0aW9uRW50ZXI/Lihjb2xsaXNpb25QYXlsb2FkMSk7XG5cdFx0XHRcdFx0c291cmNlMi5jb2xsaWRlci5ldmVudHM/Lm9uSW50ZXJzZWN0aW9uRW50ZXI/Lihjb2xsaXNpb25QYXlsb2FkMik7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNvdXJjZTEucmlnaWRCb2R5LmV2ZW50cz8ub25JbnRlcnNlY3Rpb25FeGl0Py4oY29sbGlzaW9uUGF5bG9hZDEpO1xuXHRcdFx0XHRzb3VyY2UyLnJpZ2lkQm9keS5ldmVudHM/Lm9uSW50ZXJzZWN0aW9uRXhpdD8uKGNvbGxpc2lvblBheWxvYWQyKTtcblx0XHRcdFx0c291cmNlMS5jb2xsaWRlci5ldmVudHM/Lm9uSW50ZXJzZWN0aW9uRXhpdD8uKGNvbGxpc2lvblBheWxvYWQxKTtcblx0XHRcdFx0c291cmNlMi5jb2xsaWRlci5ldmVudHM/Lm9uSW50ZXJzZWN0aW9uRXhpdD8uKGNvbGxpc2lvblBheWxvYWQyKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGV2ZW50UXVldWUuZHJhaW5Db250YWN0Rm9yY2VFdmVudHMoKGV2ZW50KSA9PiB7XG5cdFx0XHRjb25zdCBzb3VyY2UxID0gdGhpcy5nZXRTb3VyY2VGcm9tQ29sbGlkZXJIYW5kbGUoZXZlbnQuY29sbGlkZXIxKCkpO1xuXHRcdFx0Y29uc3Qgc291cmNlMiA9IHRoaXMuZ2V0U291cmNlRnJvbUNvbGxpZGVySGFuZGxlKGV2ZW50LmNvbGxpZGVyMigpKTtcblxuXHRcdFx0Ly8gQ29sbGlzaW9uIEV2ZW50c1xuXHRcdFx0aWYgKCFzb3VyY2UxPy5jb2xsaWRlci5vYmplY3QgfHwgIXNvdXJjZTI/LmNvbGxpZGVyLm9iamVjdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGNvbGxpc2lvblBheWxvYWQxID0gdGhpcy5nZXRDb2xsaXNpb25QYXlsb2FkRnJvbVNvdXJjZShzb3VyY2UxLCBzb3VyY2UyKTtcblx0XHRcdGNvbnN0IGNvbGxpc2lvblBheWxvYWQyID0gdGhpcy5nZXRDb2xsaXNpb25QYXlsb2FkRnJvbVNvdXJjZShzb3VyY2UyLCBzb3VyY2UxKTtcblxuXHRcdFx0c291cmNlMS5yaWdpZEJvZHkuZXZlbnRzPy5vbkNvbnRhY3RGb3JjZT8uKHtcblx0XHRcdFx0Li4uY29sbGlzaW9uUGF5bG9hZDEsXG5cdFx0XHRcdHRvdGFsRm9yY2U6IGV2ZW50LnRvdGFsRm9yY2UoKSxcblx0XHRcdFx0dG90YWxGb3JjZU1hZ25pdHVkZTogZXZlbnQudG90YWxGb3JjZU1hZ25pdHVkZSgpLFxuXHRcdFx0XHRtYXhGb3JjZURpcmVjdGlvbjogZXZlbnQubWF4Rm9yY2VEaXJlY3Rpb24oKSxcblx0XHRcdFx0bWF4Rm9yY2VNYWduaXR1ZGU6IGV2ZW50Lm1heEZvcmNlTWFnbml0dWRlKCksXG5cdFx0XHR9KTtcblxuXHRcdFx0c291cmNlMi5yaWdpZEJvZHkuZXZlbnRzPy5vbkNvbnRhY3RGb3JjZT8uKHtcblx0XHRcdFx0Li4uY29sbGlzaW9uUGF5bG9hZDIsXG5cdFx0XHRcdHRvdGFsRm9yY2U6IGV2ZW50LnRvdGFsRm9yY2UoKSxcblx0XHRcdFx0dG90YWxGb3JjZU1hZ25pdHVkZTogZXZlbnQudG90YWxGb3JjZU1hZ25pdHVkZSgpLFxuXHRcdFx0XHRtYXhGb3JjZURpcmVjdGlvbjogZXZlbnQubWF4Rm9yY2VEaXJlY3Rpb24oKSxcblx0XHRcdFx0bWF4Rm9yY2VNYWduaXR1ZGU6IGV2ZW50Lm1heEZvcmNlTWFnbml0dWRlKCksXG5cdFx0XHR9KTtcblxuXHRcdFx0c291cmNlMS5jb2xsaWRlci5ldmVudHM/Lm9uQ29udGFjdEZvcmNlPy4oe1xuXHRcdFx0XHQuLi5jb2xsaXNpb25QYXlsb2FkMSxcblx0XHRcdFx0dG90YWxGb3JjZTogZXZlbnQudG90YWxGb3JjZSgpLFxuXHRcdFx0XHR0b3RhbEZvcmNlTWFnbml0dWRlOiBldmVudC50b3RhbEZvcmNlTWFnbml0dWRlKCksXG5cdFx0XHRcdG1heEZvcmNlRGlyZWN0aW9uOiBldmVudC5tYXhGb3JjZURpcmVjdGlvbigpLFxuXHRcdFx0XHRtYXhGb3JjZU1hZ25pdHVkZTogZXZlbnQubWF4Rm9yY2VNYWduaXR1ZGUoKSxcblx0XHRcdH0pO1xuXG5cdFx0XHRzb3VyY2UyLmNvbGxpZGVyLmV2ZW50cz8ub25Db250YWN0Rm9yY2U/Lih7XG5cdFx0XHRcdC4uLmNvbGxpc2lvblBheWxvYWQyLFxuXHRcdFx0XHR0b3RhbEZvcmNlOiBldmVudC50b3RhbEZvcmNlKCksXG5cdFx0XHRcdHRvdGFsRm9yY2VNYWduaXR1ZGU6IGV2ZW50LnRvdGFsRm9yY2VNYWduaXR1ZGUoKSxcblx0XHRcdFx0bWF4Rm9yY2VEaXJlY3Rpb246IGV2ZW50Lm1heEZvcmNlRGlyZWN0aW9uKCksXG5cdFx0XHRcdG1heEZvcmNlTWFnbml0dWRlOiBldmVudC5tYXhGb3JjZU1hZ25pdHVkZSgpLFxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHR3b3JsZC5mb3JFYWNoQWN0aXZlUmlnaWRCb2R5KCgpID0+IHtcblx0XHRcdHRoaXMuc3RvcmUuc25hcHNob3QuaW52YWxpZGF0ZSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRTb3VyY2VGcm9tQ29sbGlkZXJIYW5kbGUoaGFuZGxlOiBDb2xsaWRlckhhbmRsZSkge1xuXHRcdGNvbnN0IHdvcmxkID0gdGhpcy53b3JsZFNpbmdsZXRvbigpO1xuXHRcdGlmICghd29ybGQpIHJldHVybjtcblxuXHRcdGNvbnN0IGNvbGxpZGVyID0gd29ybGQucHJveHkuZ2V0Q29sbGlkZXIoaGFuZGxlKTtcblx0XHRjb25zdCBjb2xFdmVudHMgPSB0aGlzLmNvbGxpZGVyRXZlbnRzLmdldChoYW5kbGUpO1xuXHRcdGNvbnN0IGNvbGxpZGVyU3RhdGUgPSB0aGlzLmNvbGxpZGVyU3RhdGVzLmdldChoYW5kbGUpO1xuXG5cdFx0Y29uc3QgcmlnaWRCb2R5SGFuZGxlID0gY29sbGlkZXIucGFyZW50KCk/LmhhbmRsZTtcblx0XHRjb25zdCByaWdpZEJvZHkgPSByaWdpZEJvZHlIYW5kbGUgIT09IHVuZGVmaW5lZCA/IHdvcmxkLnByb3h5LmdldFJpZ2lkQm9keShyaWdpZEJvZHlIYW5kbGUpIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHJpZ2lkQm9keUV2ZW50cyA9XG5cdFx0XHRyaWdpZEJvZHkgJiYgcmlnaWRCb2R5SGFuZGxlICE9PSB1bmRlZmluZWQgPyB0aGlzLnJpZ2lkQm9keUV2ZW50cy5nZXQocmlnaWRCb2R5SGFuZGxlKSA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCByaWdpZEJvZHlTdGF0ZSA9IHJpZ2lkQm9keUhhbmRsZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5yaWdpZEJvZHlTdGF0ZXMuZ2V0KHJpZ2lkQm9keUhhbmRsZSkgOiB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0Y29sbGlkZXI6IHsgb2JqZWN0OiBjb2xsaWRlciwgZXZlbnRzOiBjb2xFdmVudHMsIHN0YXRlOiBjb2xsaWRlclN0YXRlIH0sXG5cdFx0XHRyaWdpZEJvZHk6IHsgb2JqZWN0OiByaWdpZEJvZHksIGV2ZW50czogcmlnaWRCb2R5RXZlbnRzLCBzdGF0ZTogcmlnaWRCb2R5U3RhdGUgfSxcblx0XHR9IGFzIE5ndHJDb2xsaXNpb25Tb3VyY2U7XG5cdH1cblxuXHRwcml2YXRlIGdldENvbGxpc2lvblBheWxvYWRGcm9tU291cmNlKHRhcmdldDogTmd0ckNvbGxpc2lvblNvdXJjZSwgb3RoZXI6IE5ndHJDb2xsaXNpb25Tb3VyY2UpOiBOZ3RyQ29sbGlzaW9uUGF5bG9hZCB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRyaWdpZEJvZHk6IHRhcmdldC5yaWdpZEJvZHkub2JqZWN0LFxuXHRcdFx0XHRjb2xsaWRlcjogdGFyZ2V0LmNvbGxpZGVyLm9iamVjdCxcblx0XHRcdFx0Y29sbGlkZXJPYmplY3Q6IHRhcmdldC5jb2xsaWRlci5zdGF0ZT8ub2JqZWN0LFxuXHRcdFx0XHRyaWdpZEJvZHlPYmplY3Q6IHRhcmdldC5yaWdpZEJvZHkuc3RhdGU/Lm9iamVjdCxcblx0XHRcdH0sXG5cdFx0XHRvdGhlcjoge1xuXHRcdFx0XHRyaWdpZEJvZHk6IG90aGVyLnJpZ2lkQm9keS5vYmplY3QsXG5cdFx0XHRcdGNvbGxpZGVyOiBvdGhlci5jb2xsaWRlci5vYmplY3QsXG5cdFx0XHRcdGNvbGxpZGVyT2JqZWN0OiBvdGhlci5jb2xsaWRlci5zdGF0ZT8ub2JqZWN0LFxuXHRcdFx0XHRyaWdpZEJvZHlPYmplY3Q6IG90aGVyLnJpZ2lkQm9keS5zdGF0ZT8ub2JqZWN0LFxuXHRcdFx0fSxcblx0XHR9O1xuXHR9XG59XG4iXX0=
|
|
389
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGh5c2ljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvcmFwaWVyL3NyYy9saWIvcGh5c2ljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBZSxFQUFrQixVQUFVLEVBQTJCLE1BQU0sMkJBQTJCLENBQUM7QUFDeEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUF1QixNQUFNLE9BQU8sQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFVbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLDRCQUE0QixFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUU3RSxNQUFNLGNBQWMsR0FBdUI7SUFDMUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0QixrQkFBa0IsRUFBRSxLQUFLO0lBQ3pCLG1CQUFtQixFQUFFLENBQUM7SUFDdEIsK0JBQStCLEVBQUUsQ0FBQztJQUNsQyx3QkFBd0IsRUFBRSxD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QUMsTUFBTTtnQkFDaEMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE1BQU07Z0JBQzdDLGVBQWUsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNO2FBQy9DO1lBQ0QsS0FBSyxFQUFFO2dCQUNOLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07Z0JBQ2pDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07Z0JBQy9CLGNBQWMsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNO2dCQUM1QyxlQUFlLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTTthQUM5QztTQUNELENBQUM7SUFDSCxDQUFDO3VHQTdWVyxXQUFXOzJGQUFYLFdBQVcsdVBBR1MsV0FBVyxrR0FDWixtQkFBbUIsZ0VBekJ4Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQlQsNERBRVMsU0FBUywwRUFBRSxnQkFBZ0Isc0hBQUUsZ0JBQWdCOzsyRkFFM0MsV0FBVztrQkF4QnZCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUJUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUM7aUJBQ3hEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Y29udGVudENoaWxkLFxuXHREZXN0cm95UmVmLFxuXHREaXJlY3RpdmUsXG5cdGVmZmVjdCxcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0c2lnbmFsLFxuXHRUZW1wbGF0ZVJlZixcblx0dW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBSQVBJRVIsIHsgQ29sbGlkZXJIYW5kbGUsIEV2ZW50UXVldWUsIFJvdGF0aW9uLCBWZWN0b3IsIFdvcmxkIH0gZnJvbSAnQGRpbWZvcmdlL3JhcGllcjNkLWNvbXBhdCc7XG5pbXBvcnQgeyBpbmplY3RTdG9yZSwgcGljaywgdmVjdG9yMyB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgTWF0aFV0aWxzLCBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0ckRlYnVnIH0gZnJvbSAnLi9kZWJ1Zyc7XG5pbXBvcnQgeyBOZ3RyRnJhbWVTdGVwcGVyIH0gZnJvbSAnLi9mcmFtZS1zdGVwcGVyJztcbmltcG9ydCB7IF9tYXRyaXg0LCBfcG9zaXRpb24sIF9yb3RhdGlvbiwgX3NjYWxlIH0gZnJvbSAnLi9zaGFyZWQnO1xuaW1wb3J0IHtcblx0Tmd0ckNvbGxpZGVyU3RhdGVNYXAsXG5cdE5ndHJDb2xsaXNpb25QYXlsb2FkLFxuXHROZ3RyQ29sbGlzaW9uU291cmNlLFxuXHROZ3RyRXZlbnRNYXAsXG5cdE5ndHJQaHlzaWNzT3B0aW9ucyxcblx0Tmd0clJpZ2lkQm9keVN0YXRlTWFwLFxuXHROZ3RyV29ybGRTdGVwQ2FsbGJhY2tTZXQsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlU2luZ2xldG9uUHJveHksIHJhcGllclF1YXRlcm5pb25Ub1F1YXRlcm5pb24gfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5ndHJQaHlzaWNzT3B0aW9ucyA9IHtcblx0Z3Jhdml0eTogWzAsIC05LjgxLCAwXSxcblx0YWxsb3dlZExpbmVhckVycm9yOiAwLjAwMSxcblx0bnVtU29sdmVySXRlcmF0aW9uczogNCxcblx0bnVtQWRkaXRpb25hbEZyaWN0aW9uSXRlcmF0aW9uczogNCxcblx0bnVtSW50ZXJuYWxQZ3NJdGVyYXRpb25zOiAxLFxuXHRwcmVkaWN0aW9uRGlzdGFuY2U6IDAuMDAyLFxuXHRtaW5Jc2xhbmRTaXplOiAxMjgsXG5cdG1heENjZFN1YnN0ZXBzOiAxLFxuXHRlcnA6IDAuOCxcblx0bGVuZ3RoVW5pdDogMSxcblx0Y29sbGlkZXJzOiAnY3Vib2lkJyxcblx0dXBkYXRlTG9vcDogJ2ZvbGxvdycsXG5cdGludGVycG9sYXRlOiB0cnVlLFxuXHRwYXVzZWQ6IGZhbHNlLFxuXHR0aW1lU3RlcDogMSAvIDYwLFxuXHRkZWJ1ZzogZmFsc2UsXG59O1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtyYXBpZXJGYWxsYmFja10nLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTmd0clBoeXNpY3NGYWxsYmFjayB7XG5cdHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKF86IE5ndHJQaHlzaWNzRmFsbGJhY2ssIGN0eDogdW5rbm93bik6IGN0eCBpcyB7IGVycm9yOiBzdHJpbmcgfSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0ci1waHlzaWNzJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHRAaWYgKHJhcGllckNvbnN0cnVjdCgpKSB7XG5cdFx0XHRAaWYgKGRlYnVnKCkpIHtcblx0XHRcdFx0PG5ndHItZGVidWcgW3dvcmxkXT1cIndvcmxkU2luZ2xldG9uKCk/LnByb3h5XCIgLz5cblx0XHRcdH1cblxuXHRcdFx0PG5ndHItZnJhbWUtc3RlcHBlclxuXHRcdFx0XHRbcmVhZHldPVwicmVhZHkoKVwiXG5cdFx0XHRcdFtzdGVwRm5dPVwic3RlcC5iaW5kKHRoaXMpXCJcblx0XHRcdFx0W3R5cGVdPVwidXBkYXRlTG9vcCgpXCJcblx0XHRcdFx0W3VwZGF0ZVByaW9yaXR5XT1cInVwZGF0ZVByaW9yaXR5KClcIlxuXHRcdFx0Lz5cblxuXHRcdFx0PG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50KClcIiAvPlxuXHRcdH0gQGVsc2UgaWYgKHJhcGllckVycm9yKCkgJiYgISFmYWxsYmFja0NvbnRlbnQoKSkge1xuXHRcdFx0PG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCIkYW55KGZhbGxiYWNrQ29udGVudCgpKVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGVycm9yOiByYXBpZXJFcnJvcigpIH1cIiAvPlxuXHRcdH1cblx0YCxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdGltcG9ydHM6IFtOZ3RyRGVidWcsIE5ndHJGcmFtZVN0ZXBwZXIsIE5nVGVtcGxhdGVPdXRsZXRdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RyUGh5c2ljcyB7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblxuXHRjb250ZW50ID0gY29udGVudENoaWxkLnJlcXVpcmVkKFRlbXBsYXRlUmVmKTtcblx0ZmFsbGJhY2tDb250ZW50ID0gY29udGVudENoaWxkKE5ndHJQaHlzaWNzRmFsbGJhY2spO1xuXG5cdHByb3RlY3RlZCB1cGRhdGVQcmlvcml0eSA9IHBpY2sodGhpcy5vcHRpb25zLCAndXBkYXRlUHJpb3JpdHknKTtcblx0cHJvdGVjdGVkIHVwZGF0ZUxvb3AgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3VwZGF0ZUxvb3AnKTtcblxuXHRwcml2YXRlIG51bVNvbHZlckl0ZXJhdGlvbnMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ251bVNvbHZlckl0ZXJhdGlvbnMnKTtcblx0cHJpdmF0ZSBudW1BZGRpdGlvbmFsRnJpY3Rpb25JdGVyYXRpb25zID0gcGljayh0aGlzLm9wdGlvbnMsICdudW1BZGRpdGlvbmFsRnJpY3Rpb25JdGVyYXRpb25zJyk7XG5cdHByaXZhdGUgbnVtSW50ZXJuYWxQZ3NJdGVyYXRpb25zID0gcGljayh0aGlzLm9wdGlvbnMsICdudW1JbnRlcm5hbFBnc0l0ZXJhdGlvbnMnKTtcblx0cHJpdmF0ZSBhbGxvd2VkTGluZWFyRXJyb3IgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2FsbG93ZWRMaW5lYXJFcnJvcicpO1xuXHRwcml2YXRlIG1pbklzbGFuZFNpemUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ21pbklzbGFuZFNpemUnKTtcblx0cHJpdmF0ZSBtYXhDY2RTdWJzdGVwcyA9IHBpY2sodGhpcy5vcHRpb25zLCAnbWF4Q2NkU3Vic3RlcHMnKTtcblx0cHJpdmF0ZSBwcmVkaWN0aW9uRGlzdGFuY2UgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3ByZWRpY3Rpb25EaXN0YW5jZScpO1xuXHRwcml2YXRlIGVycCA9IHBpY2sodGhpcy5vcHRpb25zLCAnZXJwJyk7XG5cdHByaXZhdGUgbGVuZ3RoVW5pdCA9IHBpY2sodGhpcy5vcHRpb25zLCAnbGVuZ3RoVW5pdCcpO1xuXHRwcml2YXRlIHRpbWVTdGVwID0gcGljayh0aGlzLm9wdGlvbnMsICd0aW1lU3RlcCcpO1xuXHRwcml2YXRlIGludGVycG9sYXRlID0gcGljayh0aGlzLm9wdGlvbnMsICdpbnRlcnBvbGF0ZScpO1xuXG5cdHBhdXNlZCA9IHBpY2sodGhpcy5vcHRpb25zLCAncGF1c2VkJyk7XG5cdGRlYnVnID0gcGljayh0aGlzLm9wdGlvbnMsICdkZWJ1ZycpO1xuXHRjb2xsaWRlcnMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2NvbGxpZGVycycpO1xuXHRncmF2aXR5ID0gdmVjdG9yMyh0aGlzLm9wdGlvbnMsICdncmF2aXR5Jyk7XG5cblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cdHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuXHRwcm90ZWN0ZWQgcmFwaWVyQ29uc3RydWN0ID0gc2lnbmFsPHR5cGVvZiBSQVBJRVIgfCBudWxsPihudWxsKTtcblx0cHJvdGVjdGVkIHJhcGllckVycm9yID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXHRyYXBpZXIgPSB0aGlzLnJhcGllckNvbnN0cnVjdC5hc1JlYWRvbmx5KCk7XG5cblx0cmVhZHkgPSBjb21wdXRlZCgoKSA9PiAhIXRoaXMucmFwaWVyKCkpO1xuXHR3b3JsZFNpbmdsZXRvbiA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCByYXBpZXIgPSB0aGlzLnJhcGllcigpO1xuXHRcdGlmICghcmFwaWVyKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4gY3JlYXRlU2luZ2xldG9uUHJveHk8V29ybGQ+KCgpID0+IG5ldyByYXBpZXIuV29ybGQodW50cmFja2VkKHRoaXMuZ3Jhdml0eSkpKTtcblx0fSk7XG5cblx0cmlnaWRCb2R5U3RhdGVzOiBOZ3RyUmlnaWRCb2R5U3RhdGVNYXAgPSBuZXcgTWFwKCk7XG5cdGNvbGxpZGVyU3RhdGVzOiBOZ3RyQ29sbGlkZXJTdGF0ZU1hcCA9IG5ldyBNYXAoKTtcblx0cmlnaWRCb2R5RXZlbnRzOiBOZ3RyRXZlbnRNYXAgPSBuZXcgTWFwKCk7XG5cdGNvbGxpZGVyRXZlbnRzOiBOZ3RyRXZlbnRNYXAgPSBuZXcgTWFwKCk7XG5cdGJlZm9yZVN0ZXBDYWxsYmFja3M6IE5ndHJXb3JsZFN0ZXBDYWxsYmFja1NldCA9IG5ldyBTZXQoKTtcblx0YWZ0ZXJTdGVwQ2FsbGJhY2tzOiBOZ3RyV29ybGRTdGVwQ2FsbGJhY2tTZXQgPSBuZXcgU2V0KCk7XG5cblx0cHJpdmF0ZSBldmVudFF1ZXVlID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHJhcGllciA9IHRoaXMucmFwaWVyKCk7XG5cdFx0aWYgKCFyYXBpZXIpIHJldHVybiBudWxsO1xuXHRcdHJldHVybiBuZXcgRXZlbnRRdWV1ZShmYWxzZSk7XG5cdH0pO1xuXG5cdHByaXZhdGUgc3RlcHBpbmdTdGF0ZToge1xuXHRcdGFjY3VtdWxhdG9yOiBudW1iZXI7XG5cdFx0cHJldmlvdXNTdGF0ZTogUmVjb3JkPG51bWJlciwgeyBwb3NpdGlvbjogVmVjdG9yOyByb3RhdGlvbjogUm90YXRpb24gfT47XG5cdH0gPSB7IGFjY3VtdWxhdG9yOiAwLCBwcmV2aW91c1N0YXRlOiB7fSB9O1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGltcG9ydCgnQGRpbWZvcmdlL3JhcGllcjNkLWNvbXBhdCcpXG5cdFx0XHQudGhlbigocmFwaWVyKSA9PiByYXBpZXIuaW5pdCgpLnRoZW4oKCkgPT4gcmFwaWVyKSlcblx0XHRcdC50aGVuKHRoaXMucmFwaWVyQ29uc3RydWN0LnNldC5iaW5kKHRoaXMucmFwaWVyQ29uc3RydWN0KSlcblx0XHRcdC5jYXRjaCgoZXJyKSA9PiB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoYFtOR1RdIEZhaWxlZCB0byBsb2FkIHJhcGllcjNkLWNvbXBhdGAsIGVycik7XG5cdFx0XHRcdHRoaXMucmFwaWVyRXJyb3Iuc2V0KGVycj8ubWVzc2FnZSA/PyBlcnIudG9TdHJpbmcoKSk7XG5cdFx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR0aGlzLnVwZGF0ZVdvcmxkRWZmZWN0KCk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcblx0XHRcdGNvbnN0IHdvcmxkID0gdGhpcy53b3JsZFNpbmdsZXRvbigpO1xuXHRcdFx0aWYgKHdvcmxkKSB7XG5cdFx0XHRcdHdvcmxkLnByb3h5LmZyZWUoKTtcblx0XHRcdFx0d29ybGQucmVzZXQoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHN0ZXAoZGVsdGE6IG51bWJlcikge1xuXHRcdGlmICghdGhpcy5wYXVzZWQoKSkge1xuXHRcdFx0dGhpcy5pbnRlcm5hbFN0ZXAoZGVsdGEpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlV29ybGRFZmZlY3QoKSB7XG5cdFx0Y29uc3Qgd29ybGQgPSB0aGlzLndvcmxkU2luZ2xldG9uKCk7XG5cdFx0aWYgKCF3b3JsZCkgcmV0dXJuO1xuXG5cdFx0d29ybGQucHJveHkuZ3Jhdml0eSA9IHRoaXMuZ3Jhdml0eSgpO1xuXHRcdHdvcmxkLnByb3h5LmludGVncmF0aW9uUGFyYW1ldGVycy5udW1Tb2x2ZXJJdGVyYXRpb25zID0gdGhpcy5udW1Tb2x2ZXJJdGVyYXRpb25zKCk7XG5cdFx0d29ybGQucHJveHkuaW50ZWdyYXRpb25QYXJhbWV0ZXJzLm51bUFkZGl0aW9uYWxGcmljdGlvbkl0ZXJhdGlvbnMgPSB0aGlzLm51bUFkZGl0aW9uYWxGcmljdGlvbkl0ZXJhdGlvbnMoKTtcblx0XHR3b3JsZC5wcm94eS5pbnRlZ3JhdGlvblBhcmFtZXRlcnMubnVtSW50ZXJuYWxQZ3NJdGVyYXRpb25zID0gdGhpcy5udW1JbnRlcm5hbFBnc0l0ZXJhdGlvbnMoKTtcblx0XHR3b3JsZC5wcm94eS5pbnRlZ3JhdGlvblBhcmFtZXRlcnMubm9ybWFsaXplZEFsbG93ZWRMaW5lYXJFcnJvciA9IHRoaXMuYWxsb3dlZExpbmVhckVycm9yKCk7XG5cdFx0d29ybGQucHJveHkuaW50ZWdyYXRpb25QYXJhbWV0ZXJzLm1pbklzbGFuZFNpemUgPSB0aGlzLm1pbklzbGFuZFNpemUoKTtcblx0XHR3b3JsZC5wcm94eS5pbnRlZ3JhdGlvblBhcmFtZXRlcnMubWF4Q2NkU3Vic3RlcHMgPSB0aGlzLm1heENjZFN1YnN0ZXBzKCk7XG5cdFx0d29ybGQucHJveHkuaW50ZWdyYXRpb25QYXJhbWV0ZXJzLm5vcm1hbGl6ZWRQcmVkaWN0aW9uRGlzdGFuY2UgPSB0aGlzLnByZWRpY3Rpb25EaXN0YW5jZSgpO1xuXHRcdC8qKlxuXHRcdCAqIE5PVEU6IHdlIGRvbid0IGtub3cgaWYgdGhpcyBpcyB0aGUgY29ycmVjdCB3YXkgdG8gc2V0IGZvciBjb250YWN0X25hdHVyYWxfZnJlcXVlbmN5IG9yIG5vdC5cblx0XHQgKiBidXQgYXQgbGVhc3QsIGl0IGdldHMgdGhlIGBjb250YWN0X2VycGAgdmFsdWUgdG8gYmUgdmVyeSBjbG9zZSB3aXRoIHNldHRpbmcgYGVycGBcblx0XHQgKi9cblx0XHR3b3JsZC5wcm94eS5pbnRlZ3JhdGlvblBhcmFtZXRlcnMuY29udGFjdF9uYXR1cmFsX2ZyZXF1ZW5jeSA9IHRoaXMuZXJwKCkgKiAxXzAwMDtcblx0XHR3b3JsZC5wcm94eS5sZW5ndGhVbml0ID0gdGhpcy5sZW5ndGhVbml0KCk7XG5cdH1cblxuXHRwcml2YXRlIGludGVybmFsU3RlcChkZWx0YTogbnVtYmVyKSB7XG5cdFx0Y29uc3Qgd29ybGRTaW5nbGV0b24gPSB0aGlzLndvcmxkU2luZ2xldG9uKCk7XG5cdFx0aWYgKCF3b3JsZFNpbmdsZXRvbikgcmV0dXJuO1xuXG5cdFx0Y29uc3QgZXZlbnRRdWV1ZSA9IHRoaXMuZXZlbnRRdWV1ZSgpO1xuXHRcdGlmICghZXZlbnRRdWV1ZSkgcmV0dXJuO1xuXG5cdFx0Y29uc3Qgd29ybGQgPSB3b3JsZFNpbmdsZXRvbi5wcm94eTtcblx0XHRjb25zdCBbdGltZVN0ZXAsIGludGVycG9sYXRlLCBwYXVzZWRdID0gW3RoaXMudGltZVN0ZXAoKSwgdGhpcy5pbnRlcnBvbGF0ZSgpLCB0aGlzLnBhdXNlZCgpXTtcblxuXHRcdC8qIENoZWNrIGlmIHRoZSB0aW1lc3RlcCBpcyBzdXBwb3NlZCB0byBiZSB2YXJpYWJsZS4gV2UnbGwgZG8gdGhpcyBoZXJlXG4gICAgICBvbmNlIHNvIHdlIGRvbid0IGhhdmUgdG8gc3RyaW5nLWNoZWNrIGV2ZXJ5IGZyYW1lLiAqL1xuXHRcdGNvbnN0IHRpbWVTdGVwVmFyaWFibGUgPSB0aW1lU3RlcCA9PT0gJ3ZhcnknO1xuXG5cdFx0LyoqXG5cdFx0ICogRml4ZWQgdGltZVN0ZXAgc2ltdWxhdGlvbiBwcm9ncmVzc2lvblxuXHRcdCAqIEBzZWUgaHR0cHM6Ly9nYWZmZXJvbmdhbWVzLmNvbS9wb3N0L2ZpeF95b3VyX3RpbWVzdGVwL1xuXHRcdCAqL1xuXHRcdGNvbnN0IGNsYW1wZWREZWx0YSA9IE1hdGhVdGlscy5jbGFtcChkZWx0YSwgMCwgMC41KTtcblxuXHRcdGNvbnN0IHN0ZXBXb3JsZCA9IChpbm5lckRlbHRhOiBudW1iZXIpID0+IHtcblx0XHRcdC8vIFRyaWdnZXIgYmVmb3JlU3RlcCBjYWxsYmFja3Ncblx0XHRcdHRoaXMuYmVmb3JlU3RlcENhbGxiYWNrcy5mb3JFYWNoKChjYWxsYmFjaykgPT4ge1xuXHRcdFx0XHRjYWxsYmFjayh3b3JsZCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0d29ybGQudGltZXN0ZXAgPSBpbm5lckRlbHRhO1xuXHRcdFx0d29ybGQuc3RlcChldmVudFF1ZXVlKTtcblxuXHRcdFx0Ly8gVHJpZ2dlciBhZnRlclN0ZXAgY2FsbGJhY2tzXG5cdFx0XHR0aGlzLmFmdGVyU3RlcENhbGxiYWNrcy5mb3JFYWNoKChjYWxsYmFjaykgPT4ge1xuXHRcdFx0XHRjYWxsYmFjayh3b3JsZCk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0aWYgKHRpbWVTdGVwVmFyaWFibGUpIHtcblx0XHRcdHN0ZXBXb3JsZChjbGFtcGVkRGVsdGEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBkb24ndCBzdGVwIHRpbWUgZm9yd2FyZHMgaWYgcGF1c2VkXG5cdFx0XHQvLyBJbmNyZWFzZSBhY2N1bXVsYXRvclxuXHRcdFx0dGhpcy5zdGVwcGluZ1N0YXRlLmFjY3VtdWxhdG9yICs9IGNsYW1wZWREZWx0YTtcblxuXHRcdFx0d2hpbGUgKHRoaXMuc3RlcHBpbmdTdGF0ZS5hY2N1bXVsYXRvciA+PSB0aW1lU3RlcCkge1xuXHRcdFx0XHQvLyBTZXQgdXAgcHJldmlvdXMgc3RhdGVcblx0XHRcdFx0Ly8gbmVlZGVkIGZvciBhY2N1cmF0ZSBpbnRlcnBvbGF0aW9ucyBpZiB0aGUgd29ybGQgc3RlcHMgbW9yZSB0aGFuIG9uY2Vcblx0XHRcdFx0aWYgKGludGVycG9sYXRlKSB7XG5cdFx0XHRcdFx0dGhpcy5zdGVwcGluZ1N0YXRlLnByZXZpb3VzU3RhdGUgPSB7fTtcblx0XHRcdFx0XHR3b3JsZC5mb3JFYWNoUmlnaWRCb2R5KChib2R5KSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnN0ZXBwaW5nU3RhdGUucHJldmlvdXNTdGF0ZVtib2R5LmhhbmRsZV0gPSB7XG5cdFx0XHRcdFx0XHRcdHBvc2l0aW9uOiBib2R5LnRyYW5zbGF0aW9uKCksXG5cdFx0XHRcdFx0XHRcdHJvdGF0aW9uOiBib2R5LnJvdGF0aW9uKCksXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c3RlcFdvcmxkKHRpbWVTdGVwKTtcblx0XHRcdFx0dGhpcy5zdGVwcGluZ1N0YXRlLmFjY3VtdWxhdG9yIC09IHRpbWVTdGVwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGludGVycG9sYXRpb25BbHBoYSA9XG5cdFx0XHR0aW1lU3RlcFZhcmlhYmxlIHx8ICFpbnRlcnBvbGF0ZSB8fCBwYXVzZWQgPyAxIDogdGhpcy5zdGVwcGluZ1N0YXRlLmFjY3VtdWxhdG9yIC8gdGltZVN0ZXA7XG5cblx0XHQvLyBVcGRhdGUgbWVzaGVzXG5cdFx0dGhpcy5yaWdpZEJvZHlTdGF0ZXMuZm9yRWFjaCgoc3RhdGUsIGhhbmRsZSkgPT4ge1xuXHRcdFx0Y29uc3QgcmlnaWRCb2R5ID0gd29ybGQuZ2V0UmlnaWRCb2R5KGhhbmRsZSk7XG5cblx0XHRcdGNvbnN0IGV2ZW50cyA9IHRoaXMucmlnaWRCb2R5RXZlbnRzLmdldChoYW5kbGUpO1xuXHRcdFx0aWYgKGV2ZW50cz8ub25TbGVlcCB8fCBldmVudHM/Lm9uV2FrZSkge1xuXHRcdFx0XHRpZiAocmlnaWRCb2R5LmlzU2xlZXBpbmcoKSAmJiAhc3RhdGUuaXNTbGVlcGluZykgZXZlbnRzPy5vblNsZWVwPy4oKTtcblx0XHRcdFx0aWYgKCFyaWdpZEJvZHkuaXNTbGVlcGluZygpICYmIHN0YXRlLmlzU2xlZXBpbmcpIGV2ZW50cz8ub25XYWtlPy4oKTtcblx0XHRcdFx0c3RhdGUuaXNTbGVlcGluZyA9IHJpZ2lkQm9keS5pc1NsZWVwaW5nKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghcmlnaWRCb2R5IHx8IChyaWdpZEJvZHkuaXNTbGVlcGluZygpICYmICEoJ2lzSW5zdGFuY2VkTWVzaCcgaW4gc3RhdGUub2JqZWN0KSkgfHwgIXN0YXRlLnNldE1hdHJpeCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIE5ldyBzdGF0ZXNcblx0XHRcdGxldCB0ID0gcmlnaWRCb2R5LnRyYW5zbGF0aW9uKCkgYXMgVmVjdG9yMztcblx0XHRcdGxldCByID0gcmlnaWRCb2R5LnJvdGF0aW9uKCkgYXMgUXVhdGVybmlvbjtcblxuXHRcdFx0bGV0IHByZXZpb3VzU3RhdGUgPSB0aGlzLnN0ZXBwaW5nU3RhdGUucHJldmlvdXNTdGF0ZVtoYW5kbGVdO1xuXG5cdFx0XHRpZiAocHJldmlvdXNTdGF0ZSkge1xuXHRcdFx0XHQvLyBHZXQgcHJldmlvdXMgc2ltdWxhdGVkIHdvcmxkIHBvc2l0aW9uXG5cdFx0XHRcdF9tYXRyaXg0XG5cdFx0XHRcdFx0LmNvbXBvc2UocHJldmlvdXNTdGF0ZS5wb3NpdGlvbiBhcyBWZWN0b3IzLCByYXBpZXJRdWF0ZXJuaW9uVG9RdWF0ZXJuaW9uKHByZXZpb3VzU3RhdGUucm90YXRpb24pLCBzdGF0ZS5zY2FsZSlcblx0XHRcdFx0XHQucHJlbXVsdGlwbHkoc3RhdGUuaW52ZXJ0ZWRXb3JsZE1hdHJpeClcblx0XHRcdFx0XHQuZGVjb21wb3NlKF9wb3NpdGlvbiwgX3JvdGF0aW9uLCBfc2NhbGUpO1xuXG5cdFx0XHRcdC8vIEFwcGx5IHByZXZpb3VzIHRpY2sgcG9zaXRpb25cblx0XHRcdFx0aWYgKHN0YXRlLm1lc2hUeXBlID09ICdtZXNoJykge1xuXHRcdFx0XHRcdHN0YXRlLm9iamVjdC5wb3NpdGlvbi5jb3B5KF9wb3NpdGlvbik7XG5cdFx0XHRcdFx0c3RhdGUub2JqZWN0LnF1YXRlcm5pb24uY29weShfcm90YXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEdldCBuZXcgcG9zaXRpb25cblx0XHRcdF9tYXRyaXg0XG5cdFx0XHRcdC5jb21wb3NlKHQsIHJhcGllclF1YXRlcm5pb25Ub1F1YXRlcm5pb24ociksIHN0YXRlLnNjYWxlKVxuXHRcdFx0XHQucHJlbXVsdGlwbHkoc3RhdGUuaW52ZXJ0ZWRXb3JsZE1hdHJpeClcblx0XHRcdFx0LmRlY29tcG9zZShfcG9zaXRpb24sIF9yb3RhdGlvbiwgX3NjYWxlKTtcblxuXHRcdFx0aWYgKHN0YXRlLm1lc2hUeXBlID09ICdpbnN0YW5jZWRNZXNoJykge1xuXHRcdFx0XHRzdGF0ZS5zZXRNYXRyaXgoX21hdHJpeDQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSW50ZXJwb2xhdGUgdG8gbmV3IHBvc2l0aW9uXG5cdFx0XHRcdHN0YXRlLm9iamVjdC5wb3NpdGlvbi5sZXJwKF9wb3NpdGlvbiwgaW50ZXJwb2xhdGlvbkFscGhhKTtcblx0XHRcdFx0c3RhdGUub2JqZWN0LnF1YXRlcm5pb24uc2xlcnAoX3JvdGF0aW9uLCBpbnRlcnBvbGF0aW9uQWxwaGEpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0ZXZlbnRRdWV1ZS5kcmFpbkNvbGxpc2lvbkV2ZW50cygoaGFuZGxlMSwgaGFuZGxlMiwgc3RhcnRlZCkgPT4ge1xuXHRcdFx0Y29uc3Qgc291cmNlMSA9IHRoaXMuZ2V0U291cmNlRnJvbUNvbGxpZGVySGFuZGxlKGhhbmRsZTEpO1xuXHRcdFx0Y29uc3Qgc291cmNlMiA9IHRoaXMuZ2V0U291cmNlRnJvbUNvbGxpZGVySGFuZGxlKGhhbmRsZTIpO1xuXG5cdFx0XHQvLyBDb2xsaXNpb24gRXZlbnRzXG5cdFx0XHRpZiAoIXNvdXJjZTE/LmNvbGxpZGVyLm9iamVjdCB8fCAhc291cmNlMj8uY29sbGlkZXIub2JqZWN0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY29sbGlzaW9uUGF5bG9hZDEgPSB0aGlzLmdldENvbGxpc2lvblBheWxvYWRGcm9tU291cmNlKHNvdXJjZTEsIHNvdXJjZTIpO1xuXHRcdFx0Y29uc3QgY29sbGlzaW9uUGF5bG9hZDIgPSB0aGlzLmdldENvbGxpc2lvblBheWxvYWRGcm9tU291cmNlKHNvdXJjZTIsIHNvdXJjZTEpO1xuXG5cdFx0XHRpZiAoc3RhcnRlZCkge1xuXHRcdFx0XHR3b3JsZC5jb250YWN0UGFpcihzb3VyY2UxLmNvbGxpZGVyLm9iamVjdCwgc291cmNlMi5jb2xsaWRlci5vYmplY3QsIChtYW5pZm9sZCwgZmxpcHBlZCkgPT4ge1xuXHRcdFx0XHRcdC8qIFJpZ2lkQm9keSBldmVudHMgKi9cblx0XHRcdFx0XHRzb3VyY2UxLnJpZ2lkQm9keS5ldmVudHM/Lm9uQ29sbGlzaW9uRW50ZXI/Lih7IC4uLmNvbGxpc2lvblBheWxvYWQxLCBtYW5pZm9sZCwgZmxpcHBlZCB9KTtcblx0XHRcdFx0XHRzb3VyY2UyLnJpZ2lkQm9keS5ldmVudHM/Lm9uQ29sbGlzaW9uRW50ZXI/Lih7IC4uLmNvbGxpc2lvblBheWxvYWQyLCBtYW5pZm9sZCwgZmxpcHBlZCB9KTtcblxuXHRcdFx0XHRcdC8qIENvbGxpZGVyIGV2ZW50cyAqL1xuXHRcdFx0XHRcdHNvdXJjZTEuY29sbGlkZXIuZXZlbnRzPy5vbkNvbGxpc2lvbkVudGVyPy4oeyAuLi5jb2xsaXNpb25QYXlsb2FkMSwgbWFuaWZvbGQsIGZsaXBwZWQgfSk7XG5cdFx0XHRcdFx0c291cmNlMi5jb2xsaWRlci5ldmVudHM/Lm9uQ29sbGlzaW9uRW50ZXI/Lih7IC4uLmNvbGxpc2lvblBheWxvYWQyLCBtYW5pZm9sZCwgZmxpcHBlZCB9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzb3VyY2UxLnJpZ2lkQm9keS5ldmVudHM/Lm9uQ29sbGlzaW9uRXhpdD8uKGNvbGxpc2lvblBheWxvYWQxKTtcblx0XHRcdFx0c291cmNlMi5yaWdpZEJvZHkuZXZlbnRzPy5vbkNvbGxpc2lvbkV4aXQ/Lihjb2xsaXNpb25QYXlsb2FkMik7XG5cdFx0XHRcdHNvdXJjZTEuY29sbGlkZXIuZXZlbnRzPy5vbkNvbGxpc2lvbkV4aXQ/Lihjb2xsaXNpb25QYXlsb2FkMSk7XG5cdFx0XHRcdHNvdXJjZTIuY29sbGlkZXIuZXZlbnRzPy5vbkNvbGxpc2lvbkV4aXQ/Lihjb2xsaXNpb25QYXlsb2FkMik7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNlbnNvciBJbnRlcnNlY3Rpb25zXG5cdFx0XHRpZiAoc3RhcnRlZCkge1xuXHRcdFx0XHRpZiAod29ybGQuaW50ZXJzZWN0aW9uUGFpcihzb3VyY2UxLmNvbGxpZGVyLm9iamVjdCwgc291cmNlMi5jb2xsaWRlci5vYmplY3QpKSB7XG5cdFx0XHRcdFx0c291cmNlMS5yaWdpZEJvZHkuZXZlbnRzPy5vbkludGVyc2VjdGlvbkVudGVyPy4oY29sbGlzaW9uUGF5bG9hZDEpO1xuXHRcdFx0XHRcdHNvdXJjZTIucmlnaWRCb2R5LmV2ZW50cz8ub25JbnRlcnNlY3Rpb25FbnRlcj8uKGNvbGxpc2lvblBheWxvYWQyKTtcblx0XHRcdFx0XHRzb3VyY2UxLmNvbGxpZGVyLmV2ZW50cz8ub25JbnRlcnNlY3Rpb25FbnRlcj8uKGNvbGxpc2lvblBheWxvYWQxKTtcblx0XHRcdFx0XHRzb3VyY2UyLmNvbGxpZGVyLmV2ZW50cz8ub25JbnRlcnNlY3Rpb25FbnRlcj8uKGNvbGxpc2lvblBheWxvYWQyKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c291cmNlMS5yaWdpZEJvZHkuZXZlbnRzPy5vbkludGVyc2VjdGlvbkV4aXQ/Lihjb2xsaXNpb25QYXlsb2FkMSk7XG5cdFx0XHRcdHNvdXJjZTIucmlnaWRCb2R5LmV2ZW50cz8ub25JbnRlcnNlY3Rpb25FeGl0Py4oY29sbGlzaW9uUGF5bG9hZDIpO1xuXHRcdFx0XHRzb3VyY2UxLmNvbGxpZGVyLmV2ZW50cz8ub25JbnRlcnNlY3Rpb25FeGl0Py4oY29sbGlzaW9uUGF5bG9hZDEpO1xuXHRcdFx0XHRzb3VyY2UyLmNvbGxpZGVyLmV2ZW50cz8ub25JbnRlcnNlY3Rpb25FeGl0Py4oY29sbGlzaW9uUGF5bG9hZDIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0ZXZlbnRRdWV1ZS5kcmFpbkNvbnRhY3RGb3JjZUV2ZW50cygoZXZlbnQpID0+IHtcblx0XHRcdGNvbnN0IHNvdXJjZTEgPSB0aGlzLmdldFNvdXJjZUZyb21Db2xsaWRlckhhbmRsZShldmVudC5jb2xsaWRlcjEoKSk7XG5cdFx0XHRjb25zdCBzb3VyY2UyID0gdGhpcy5nZXRTb3VyY2VGcm9tQ29sbGlkZXJIYW5kbGUoZXZlbnQuY29sbGlkZXIyKCkpO1xuXG5cdFx0XHQvLyBDb2xsaXNpb24gRXZlbnRzXG5cdFx0XHRpZiAoIXNvdXJjZTE/LmNvbGxpZGVyLm9iamVjdCB8fCAhc291cmNlMj8uY29sbGlkZXIub2JqZWN0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY29sbGlzaW9uUGF5bG9hZDEgPSB0aGlzLmdldENvbGxpc2lvblBheWxvYWRGcm9tU291cmNlKHNvdXJjZTEsIHNvdXJjZTIpO1xuXHRcdFx0Y29uc3QgY29sbGlzaW9uUGF5bG9hZDIgPSB0aGlzLmdldENvbGxpc2lvblBheWxvYWRGcm9tU291cmNlKHNvdXJjZTIsIHNvdXJjZTEpO1xuXG5cdFx0XHRzb3VyY2UxLnJpZ2lkQm9keS5ldmVudHM/Lm9uQ29udGFjdEZvcmNlPy4oe1xuXHRcdFx0XHQuLi5jb2xsaXNpb25QYXlsb2FkMSxcblx0XHRcdFx0dG90YWxGb3JjZTogZXZlbnQudG90YWxGb3JjZSgpLFxuXHRcdFx0XHR0b3RhbEZvcmNlTWFnbml0dWRlOiBldmVudC50b3RhbEZvcmNlTWFnbml0dWRlKCksXG5cdFx0XHRcdG1heEZvcmNlRGlyZWN0aW9uOiBldmVudC5tYXhGb3JjZURpcmVjdGlvbigpLFxuXHRcdFx0XHRtYXhGb3JjZU1hZ25pdHVkZTogZXZlbnQubWF4Rm9yY2VNYWduaXR1ZGUoKSxcblx0XHRcdH0pO1xuXG5cdFx0XHRzb3VyY2UyLnJpZ2lkQm9keS5ldmVudHM/Lm9uQ29udGFjdEZvcmNlPy4oe1xuXHRcdFx0XHQuLi5jb2xsaXNpb25QYXlsb2FkMixcblx0XHRcdFx0dG90YWxGb3JjZTogZXZlbnQudG90YWxGb3JjZSgpLFxuXHRcdFx0XHR0b3RhbEZvcmNlTWFnbml0dWRlOiBldmVudC50b3RhbEZvcmNlTWFnbml0dWRlKCksXG5cdFx0XHRcdG1heEZvcmNlRGlyZWN0aW9uOiBldmVudC5tYXhGb3JjZURpcmVjdGlvbigpLFxuXHRcdFx0XHRtYXhGb3JjZU1hZ25pdHVkZTogZXZlbnQubWF4Rm9yY2VNYWduaXR1ZGUoKSxcblx0XHRcdH0pO1xuXG5cdFx0XHRzb3VyY2UxLmNvbGxpZGVyLmV2ZW50cz8ub25Db250YWN0Rm9yY2U/Lih7XG5cdFx0XHRcdC4uLmNvbGxpc2lvblBheWxvYWQxLFxuXHRcdFx0XHR0b3RhbEZvcmNlOiBldmVudC50b3RhbEZvcmNlKCksXG5cdFx0XHRcdHRvdGFsRm9yY2VNYWduaXR1ZGU6IGV2ZW50LnRvdGFsRm9yY2VNYWduaXR1ZGUoKSxcblx0XHRcdFx0bWF4Rm9yY2VEaXJlY3Rpb246IGV2ZW50Lm1heEZvcmNlRGlyZWN0aW9uKCksXG5cdFx0XHRcdG1heEZvcmNlTWFnbml0dWRlOiBldmVudC5tYXhGb3JjZU1hZ25pdHVkZSgpLFxuXHRcdFx0fSk7XG5cblx0XHRcdHNvdXJjZTIuY29sbGlkZXIuZXZlbnRzPy5vbkNvbnRhY3RGb3JjZT8uKHtcblx0XHRcdFx0Li4uY29sbGlzaW9uUGF5bG9hZDIsXG5cdFx0XHRcdHRvdGFsRm9yY2U6IGV2ZW50LnRvdGFsRm9yY2UoKSxcblx0XHRcdFx0dG90YWxGb3JjZU1hZ25pdHVkZTogZXZlbnQudG90YWxGb3JjZU1hZ25pdHVkZSgpLFxuXHRcdFx0XHRtYXhGb3JjZURpcmVjdGlvbjogZXZlbnQubWF4Rm9yY2VEaXJlY3Rpb24oKSxcblx0XHRcdFx0bWF4Rm9yY2VNYWduaXR1ZGU6IGV2ZW50Lm1heEZvcmNlTWFnbml0dWRlKCksXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHdvcmxkLmZvckVhY2hBY3RpdmVSaWdpZEJvZHkoKCkgPT4ge1xuXHRcdFx0dGhpcy5zdG9yZS5zbmFwc2hvdC5pbnZhbGlkYXRlKCk7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGdldFNvdXJjZUZyb21Db2xsaWRlckhhbmRsZShoYW5kbGU6IENvbGxpZGVySGFuZGxlKSB7XG5cdFx0Y29uc3Qgd29ybGQgPSB0aGlzLndvcmxkU2luZ2xldG9uKCk7XG5cdFx0aWYgKCF3b3JsZCkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgY29sbGlkZXIgPSB3b3JsZC5wcm94eS5nZXRDb2xsaWRlcihoYW5kbGUpO1xuXHRcdGNvbnN0IGNvbEV2ZW50cyA9IHRoaXMuY29sbGlkZXJFdmVudHMuZ2V0KGhhbmRsZSk7XG5cdFx0Y29uc3QgY29sbGlkZXJTdGF0ZSA9IHRoaXMuY29sbGlkZXJTdGF0ZXMuZ2V0KGhhbmRsZSk7XG5cblx0XHRjb25zdCByaWdpZEJvZHlIYW5kbGUgPSBjb2xsaWRlci5wYXJlbnQoKT8uaGFuZGxlO1xuXHRcdGNvbnN0IHJpZ2lkQm9keSA9IHJpZ2lkQm9keUhhbmRsZSAhPT0gdW5kZWZpbmVkID8gd29ybGQucHJveHkuZ2V0UmlnaWRCb2R5KHJpZ2lkQm9keUhhbmRsZSkgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgcmlnaWRCb2R5RXZlbnRzID1cblx0XHRcdHJpZ2lkQm9keSAmJiByaWdpZEJvZHlIYW5kbGUgIT09IHVuZGVmaW5lZCA/IHRoaXMucmlnaWRCb2R5RXZlbnRzLmdldChyaWdpZEJvZHlIYW5kbGUpIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHJpZ2lkQm9keVN0YXRlID0gcmlnaWRCb2R5SGFuZGxlICE9PSB1bmRlZmluZWQgPyB0aGlzLnJpZ2lkQm9keVN0YXRlcy5nZXQocmlnaWRCb2R5SGFuZGxlKSA6IHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRjb2xsaWRlcjogeyBvYmplY3Q6IGNvbGxpZGVyLCBldmVudHM6IGNvbEV2ZW50cywgc3RhdGU6IGNvbGxpZGVyU3RhdGUgfSxcblx0XHRcdHJpZ2lkQm9keTogeyBvYmplY3Q6IHJpZ2lkQm9keSwgZXZlbnRzOiByaWdpZEJvZHlFdmVudHMsIHN0YXRlOiByaWdpZEJvZHlTdGF0ZSB9LFxuXHRcdH0gYXMgTmd0ckNvbGxpc2lvblNvdXJjZTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0Q29sbGlzaW9uUGF5bG9hZEZyb21Tb3VyY2UodGFyZ2V0OiBOZ3RyQ29sbGlzaW9uU291cmNlLCBvdGhlcjogTmd0ckNvbGxpc2lvblNvdXJjZSk6IE5ndHJDb2xsaXNpb25QYXlsb2FkIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGFyZ2V0OiB7XG5cdFx0XHRcdHJpZ2lkQm9keTogdGFyZ2V0LnJpZ2lkQm9keS5vYmplY3QsXG5cdFx0XHRcdGNvbGxpZGVyOiB0YXJnZXQuY29sbGlkZXIub2JqZWN0LFxuXHRcdFx0XHRjb2xsaWRlck9iamVjdDogdGFyZ2V0LmNvbGxpZGVyLnN0YXRlPy5vYmplY3QsXG5cdFx0XHRcdHJpZ2lkQm9keU9iamVjdDogdGFyZ2V0LnJpZ2lkQm9keS5zdGF0ZT8ub2JqZWN0LFxuXHRcdFx0fSxcblx0XHRcdG90aGVyOiB7XG5cdFx0XHRcdHJpZ2lkQm9keTogb3RoZXIucmlnaWRCb2R5Lm9iamVjdCxcblx0XHRcdFx0Y29sbGlkZXI6IG90aGVyLmNvbGxpZGVyLm9iamVjdCxcblx0XHRcdFx0Y29sbGlkZXJPYmplY3Q6IG90aGVyLmNvbGxpZGVyLnN0YXRlPy5vYmplY3QsXG5cdFx0XHRcdHJpZ2lkQm9keU9iamVjdDogb3RoZXIucmlnaWRCb2R5LnN0YXRlPy5vYmplY3QsXG5cdFx0XHR9LFxuXHRcdH07XG5cdH1cbn1cbiJdfQ==
|