@netgrif/components-core 6.4.0-beta.3 → 6.4.0-beta.4
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/esm2020/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.mjs +45 -1
- package/fesm2015/netgrif-components-core.mjs +460 -422
- package/fesm2015/netgrif-components-core.mjs.map +1 -1
- package/fesm2020/netgrif-components-core.mjs +462 -419
- package/fesm2020/netgrif-components-core.mjs.map +1 -1
- package/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.d.ts +12 -0
- package/package.json +1 -1
package/esm2020/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.mjs
CHANGED
|
@@ -2,6 +2,7 @@ import { Breakpoints } from '@angular/cdk/layout';
|
|
|
2
2
|
import { Component, Input } from '@angular/core';
|
|
3
3
|
import { of } from 'rxjs';
|
|
4
4
|
import { map } from 'rxjs/operators';
|
|
5
|
+
import { NAE_ROUTING_CONFIGURATION_PATH } from '../../routing/routing-builder/routing-builder.service';
|
|
5
6
|
import { LoadingEmitter } from '../../utility/loading-emitter';
|
|
6
7
|
import { GroupNavigationConstants } from "../model/group-navigation-constants";
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
@@ -78,6 +79,8 @@ export class AbstractNavigationDoubleDrawerComponent {
|
|
|
78
79
|
this.rightLoading$ = new LoadingEmitter();
|
|
79
80
|
this.nodeLoading$ = new LoadingEmitter();
|
|
80
81
|
this.itemsOrder = MenuOrder.Ascending;
|
|
82
|
+
this.hiddenCustomItems = [];
|
|
83
|
+
this._childCustomViews = {};
|
|
81
84
|
}
|
|
82
85
|
ngOnInit() {
|
|
83
86
|
this._breakpointSubscription = this._breakpoint.observe([Breakpoints.HandsetLandscape]).subscribe(() => {
|
|
@@ -95,6 +98,14 @@ export class AbstractNavigationDoubleDrawerComponent {
|
|
|
95
98
|
this._currentNodeSubscription = this._uriService.activeNode$.subscribe(node => {
|
|
96
99
|
this.currentNode = node;
|
|
97
100
|
});
|
|
101
|
+
const viewConfigurationPath = this._activatedRoute.snapshot.data[NAE_ROUTING_CONFIGURATION_PATH];
|
|
102
|
+
if (!!viewConfigurationPath) {
|
|
103
|
+
const viewConfiguration = this._config.getViewByPath(viewConfigurationPath);
|
|
104
|
+
Object.entries(viewConfiguration.children).forEach(([key, childView]) => {
|
|
105
|
+
this.resolveUriForChildViews(viewConfigurationPath + '/' + key, childView);
|
|
106
|
+
this.resolveHiddenMenuItemFromChildViews(viewConfigurationPath + '/' + key, childView);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
98
109
|
}
|
|
99
110
|
get currentNode() {
|
|
100
111
|
return this._currentNode;
|
|
@@ -280,17 +291,20 @@ export class AbstractNavigationDoubleDrawerComponent {
|
|
|
280
291
|
else {
|
|
281
292
|
this.rightItems = result.map(folder => this.resolveItemCaseToNavigationItem(folder)).filter(i => !!i);
|
|
282
293
|
}
|
|
294
|
+
this.resolveCustomViewsInRightSide();
|
|
283
295
|
this.rightLoading$.off();
|
|
284
296
|
}, error => {
|
|
285
297
|
this._log.error(error);
|
|
286
298
|
this.rightItems = [];
|
|
287
299
|
this.moreItems = [];
|
|
300
|
+
this.resolveCustomViewsInRightSide();
|
|
288
301
|
this.rightLoading$.off();
|
|
289
302
|
});
|
|
290
303
|
}, error => {
|
|
291
304
|
this._log.error(error);
|
|
292
305
|
this.rightItems = [];
|
|
293
306
|
this.moreItems = [];
|
|
307
|
+
this.resolveCustomViewsInRightSide();
|
|
294
308
|
this.rightLoading$.off();
|
|
295
309
|
});
|
|
296
310
|
}
|
|
@@ -316,6 +330,11 @@ export class AbstractNavigationDoubleDrawerComponent {
|
|
|
316
330
|
this.leftItems = this.leftItems.sort((a, b) => multiplier * a?.navigation?.title.localeCompare(b?.navigation?.title));
|
|
317
331
|
this.moreItems = this.moreItems.sort((a, b) => multiplier * a?.navigation?.title.localeCompare(b?.navigation?.title));
|
|
318
332
|
}
|
|
333
|
+
resolveCustomViewsInRightSide() {
|
|
334
|
+
if (!!this._childCustomViews[this._currentNode.uriPath]) {
|
|
335
|
+
this.rightItems.push(...Object.values(this._childCustomViews[this._currentNode.uriPath]));
|
|
336
|
+
}
|
|
337
|
+
}
|
|
319
338
|
resolveItemCaseToNavigationItem(itemCase) {
|
|
320
339
|
const item = {
|
|
321
340
|
access: {},
|
|
@@ -396,6 +415,31 @@ export class AbstractNavigationDoubleDrawerComponent {
|
|
|
396
415
|
// this.userPreferenceService._drawerWidthChanged$.next(this.width);
|
|
397
416
|
// this.contentWidth.next(this.width);
|
|
398
417
|
}
|
|
418
|
+
resolveUriForChildViews(configPath, childView) {
|
|
419
|
+
if (!childView.processUri)
|
|
420
|
+
return;
|
|
421
|
+
if (!this._accessService.canAccessView(childView, configPath))
|
|
422
|
+
return;
|
|
423
|
+
if (!this._childCustomViews[childView.processUri]) {
|
|
424
|
+
this._childCustomViews[childView.processUri] = {};
|
|
425
|
+
}
|
|
426
|
+
this._childCustomViews[childView.processUri][configPath] = {
|
|
427
|
+
id: configPath,
|
|
428
|
+
...childView,
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
resolveHiddenMenuItemFromChildViews(configPath, childView) {
|
|
432
|
+
if (!childView.navigation)
|
|
433
|
+
return;
|
|
434
|
+
if (!this._accessService.canAccessView(childView, configPath))
|
|
435
|
+
return;
|
|
436
|
+
if (!!(childView?.navigation?.hidden)) {
|
|
437
|
+
this.hiddenCustomItems.push({
|
|
438
|
+
id: configPath,
|
|
439
|
+
...childView,
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
}
|
|
399
443
|
}
|
|
400
444
|
AbstractNavigationDoubleDrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractNavigationDoubleDrawerComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.BreakpointObserver }, { token: i3.LanguageService }, { token: i4.TranslateService }, { token: i5.UserService }, { token: i6.AccessService }, { token: i7.LoggerService }, { token: i8.ConfigurationService }, { token: i9.UriService }, { token: i10.ImpersonationUserSelectService }, { token: i11.ImpersonationService }, { token: i12.DynamicNavigationRouteProviderService }], target: i0.ɵɵFactoryTarget.Component });
|
|
401
445
|
AbstractNavigationDoubleDrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: AbstractNavigationDoubleDrawerComponent, selector: "ncc-abstract-navigation-double-drawer", inputs: { portalLeftMenu: "portalLeftMenu", portalRightMenu: "portalRightMenu", imageRouterLink: "imageRouterLink", imageAlt: "imageAlt", image: "image", profileRouterLink: "profileRouterLink", includeUser: "includeUser", includeLanguage: "includeLanguage", includeMoreMenu: "includeMoreMenu", includeImpersonation: "includeImpersonation", allClosable: "allClosable", folderIcon: "folderIcon", openedFolderIcon: "openedFolderIcon", filterIcon: "filterIcon", foldersCategoryName: "foldersCategoryName", viewsCategoryName: "viewsCategoryName" }, ngImport: i0, template: '', isInline: true });
|
|
@@ -438,4 +482,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
438
482
|
}], viewsCategoryName: [{
|
|
439
483
|
type: Input
|
|
440
484
|
}] } });
|
|
441
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbmF2aWdhdGlvbi1kb3VibGUtZHJhd2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9uYXZpZ2F0aW9uL25hdmlnYXRpb24tZG91YmxlLWRyYXdlci9hYnN0cmFjdC1uYXZpZ2F0aW9uLWRvdWJsZS1kcmF3ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixXQUFXLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFJL0UsT0FBTyxFQUFhLEVBQUUsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFlbkMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBSzdELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQWM3RSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM1QixpQkFBaUI7Q0FDcEIsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLGVBQWUsQ0FBQztBQUV0RCxNQUFNLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztBQUNyQyxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQztBQUN2QyxNQUFNLDhCQUE4QixHQUFHLEdBQUcsQ0FBQztBQUMzQyxNQUFNLHNCQUFzQixHQUFHLEdBQUcsQ0FBQztBQUNuQyxNQUFNLHdCQUF3QixHQUFHLEVBQUUsQ0FBQTtBQUNuQyxNQUFNLHlCQUF5QixHQUFHLEVBQUUsQ0FBQTtBQUVwQyxJQUFLLFNBR0o7QUFIRCxXQUFLLFNBQVM7SUFDVixtREFBUyxDQUFBO0lBQ1QscURBQVUsQ0FBQTtBQUNkLENBQUMsRUFISSxTQUFTLEtBQVQsU0FBUyxRQUdiO0FBTUQsTUFBTSxPQUFnQix1Q0FBdUM7SUE4RHpELFlBQWdDLE9BQWUsRUFDZixlQUErQixFQUMvQixXQUErQixFQUMvQixnQkFBaUMsRUFDakMsaUJBQW1DLEVBQ25DLFlBQXlCLEVBQ3pCLGNBQTZCLEVBQzdCLElBQW1CLEVBQ25CLE9BQTZCLEVBQzdCLFdBQXVCLEVBQ3ZCLHdCQUF3RCxFQUN4RCxjQUFvQyxFQUNwQyxzQkFBNkQ7UUFaN0QsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUMvQixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDL0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUNqQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLFNBQUksR0FBSixJQUFJLENBQWU7UUFDbkIsWUFBTyxHQUFQLE9BQU8sQ0FBc0I7UUFDN0IsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUFnQztRQUN4RCxtQkFBYyxHQUFkLGNBQWMsQ0FBc0I7UUFDcEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF1QztRQXRFcEYsb0JBQWUsR0FBVyxHQUFHLENBQUM7UUFDOUIsYUFBUSxHQUFXLE1BQU0sQ0FBQztRQUUxQixzQkFBaUIsR0FBVyxVQUFVLENBQUM7UUFDdkMsZ0JBQVcsR0FBWSxJQUFJLENBQUM7UUFDNUIsb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFDaEMsb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFDaEMseUJBQW9CLEdBQVksSUFBSSxDQUFDO1FBQ3JDLGdCQUFXLEdBQVksSUFBSSxDQUFDO1FBQzVCLGVBQVUsR0FBVyxRQUFRLENBQUM7UUFDOUIscUJBQWdCLEdBQVcsYUFBYSxDQUFDO1FBQ3pDLGVBQVUsR0FBVyxZQUFZLENBQUM7UUFDbEMsd0JBQW1CLEdBQVcsc0JBQXNCLENBQUM7UUFDckQsc0JBQWlCLEdBQVcsb0JBQW9CLENBQUM7UUFnQ2hELG9CQUFlLEdBQXFCO1lBQzFDLElBQUksRUFBRSxNQUFNO1lBQ1osTUFBTSxFQUFFLElBQUk7WUFDWixZQUFZLEVBQUUsS0FBSztZQUNuQixLQUFLLEVBQUUseUJBQXlCO1NBQ25DLENBQUM7UUFDUSxxQkFBZ0IsR0FBcUI7WUFDM0MsSUFBSSxFQUFFLE1BQU07WUFDWixNQUFNLEVBQUUsSUFBSTtZQUNaLFlBQVksRUFBRSxLQUFLO1lBQ25CLEtBQUssRUFBRSwwQkFBMEI7U0FDcEMsQ0FBQztRQWVFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQWtCLENBQUM7UUFDN0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssRUFBa0IsQ0FBQztRQUM5QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7SUFDMUMsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbkcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFO2dCQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzdCO2lCQUFNO2dCQUNILElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDNUI7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztTQUMzQjtRQUNELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxJQUFxQjtRQUNqQyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU87UUFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQ2xCLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDL0IsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQzthQUN2QztpQkFBTTtnQkFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNuRixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUM1QixDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7b0JBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQzVCLENBQUMsQ0FBQyxDQUFDO2FBQ047U0FDSjtRQUVELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUU7WUFDM0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyx3QkFBd0IsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLEtBQUssS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDOUosSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3ZCO1FBQ0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLHVCQUF1QixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDZixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsVUFBVTtRQUNOLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3pCO0lBQ0wsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDO0lBQy9ELENBQUM7SUFFRCxlQUFlO1FBQ1gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7SUFDakUsQ0FBQztJQUVTLGFBQWEsQ0FBQyxhQUFzQjtRQUMxQyxJQUFJLENBQUMsZUFBZSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDbkMsSUFBSSxFQUFFLE1BQU07WUFDWixNQUFNLEVBQUUsSUFBSTtZQUNaLFlBQVksRUFBRSxJQUFJO1lBQ2xCLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUs7U0FDcEMsQ0FBQyxDQUFDLENBQUM7WUFDQSxJQUFJLEVBQUUsTUFBTTtZQUNaLE1BQU0sRUFBRSxLQUFLO1lBQ2IsWUFBWSxFQUFFLEtBQUs7WUFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSztTQUNwQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDcEMsSUFBSSxFQUFFLE1BQU07WUFDWixNQUFNLEVBQUUsSUFBSTtZQUNaLFlBQVksRUFBRSxJQUFJO1lBQ2xCLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSztTQUNyQyxDQUFDLENBQUMsQ0FBQztZQUNBLElBQUksRUFBRSxNQUFNO1lBQ1osTUFBTSxFQUFFLEtBQUs7WUFDYixZQUFZLEVBQUUsS0FBSztZQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUs7U0FDckMsQ0FBQztJQUNOLENBQUM7SUFFRCxPQUFPO1FBQ0gsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUN0QyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNwSCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO2dCQUNyRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxZQUFZLENBQUMsQ0FBQztnQkFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2FBQ3pDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFRCxpQkFBaUI7UUFDYixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNqQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7U0FHSztJQUNMLFdBQVc7UUFDUCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQzdDLENBQUM7SUFFRDs7Ozs7U0FLSztJQUNMLFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7WUFBRSxPQUFPO1FBQ3ZELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDaEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFvQjtRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ2hELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM1QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLHdCQUF3QixDQUFDLHVCQUF1QixDQUFDLEVBQUUsS0FBSyxDQUFBO1lBQzFILElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUE7WUFDM0IsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQW9CO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyx3QkFBd0IsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLEtBQUssQ0FBQTtJQUMzSCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBb0IsRUFBRSxJQUFxQjtRQUMxRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssd0JBQXdCLENBQUMsdUJBQXVCLENBQUMsRUFBRSxLQUFLLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUN6SSxDQUFDO0lBRVMsWUFBWTtRQUNsQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUM1QyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUNwQixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUYsSUFBSSxFQUFFLFVBQVUsRUFBRSxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FDOUosR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUN0QixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLHdCQUF3QixDQUFDLDBCQUEwQixDQUFDLEVBQUUsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBRSxDQUFDLEVBQUUsVUFBNkIsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFFLENBQUMsRUFBRSxVQUE2QixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ2hJLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDNUIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRVMsYUFBYTtRQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2RixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNqSCxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsYUFBYSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FDekosR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUN0QixDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNsQixNQUFNLEdBQUksTUFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDN0UsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLHlCQUF5QixFQUFFO29CQUMzQyxNQUFNLGFBQWEsR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO29CQUMxRSxJQUFJLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzdHLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDeEc7cUJBQU07b0JBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN6RztnQkFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzdCLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxhQUFhO1FBQ2hCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsd0JBQXdCLEVBQUU7WUFDbEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsd0JBQXdCLENBQUMsQ0FBQyxDQUFBO1NBQzlFO2FBQU07WUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUN2QyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQTtTQUN0QjtJQUNMLENBQUM7SUFFTSxXQUFXO1FBQ2QsT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQyxTQUFTLENBQUM7SUFDbkQsQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFBO1FBQ2xCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsVUFBVSxFQUFFO1lBQzFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQTtTQUNsQjtRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEdBQUksQ0FBQyxFQUFFLFVBQTZCLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBRSxDQUFDLEVBQUUsVUFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2hLLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEdBQUksQ0FBQyxFQUFFLFVBQTZCLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBRSxDQUFDLEVBQUUsVUFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzlKLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEdBQUksQ0FBQyxFQUFFLFVBQTZCLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBRSxDQUFDLEVBQUUsVUFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xLLENBQUM7SUFFUywrQkFBK0IsQ0FBQyxRQUFjO1FBQ3BELE1BQU0sSUFBSSxHQUFtQjtZQUN6QixNQUFNLEVBQUUsRUFBRTtZQUNWLFVBQVUsRUFBRTtnQkFDUixJQUFJLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLHdCQUF3QixDQUFDLHVCQUF1QixDQUFDLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVO2dCQUNqSSxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssd0JBQXdCLENBQUMsdUJBQXVCLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSzthQUN6SjtZQUNELE9BQU8sRUFBRTtnQkFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQzthQUMxQztZQUNELEVBQUUsRUFBRSxRQUFRLENBQUMsUUFBUTtZQUNyQixRQUFRLEVBQUUsUUFBUTtTQUNyQixDQUFDO1FBQ0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSx3QkFBd0IsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQzlHLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSx3QkFBd0IsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ25ILElBQUksQ0FBQyxDQUFDLGFBQWE7WUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLGFBQWEsQ0FBQztRQUN6RCxJQUFJLENBQUMsQ0FBQyxtQkFBbUI7WUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLG1CQUFtQixDQUFDO1FBQzNFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUFFLE9BQU87UUFDdkUsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxLQUFxQjtRQUN4QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxPQUFPLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO0lBQzFGLENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxNQUFZLEVBQUUsUUFBZ0I7UUFDdkQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxFQUFFLE9BQU8sQ0FBQztRQUN0RixJQUFJLENBQUMsWUFBWSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUM5RSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDekMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQyxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUNQLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUNuQixDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxRQUFjO1FBQ3ZDLE1BQU0sT0FBTyxHQUFHLHNCQUFzQixDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDckYsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQztRQUM5QyxPQUFPLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7O1NBR0s7SUFDTCxhQUFhO1FBQ1QsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzVFLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFhLEVBQUUsSUFBcUI7UUFDL0MsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYSxFQUFFLElBQW9CO1FBQzVDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWtCO1FBQzVCLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsc0JBQXNCLEVBQUU7WUFDaEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxzQkFBc0IsQ0FBQztTQUN4RDthQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsOEJBQThCLEVBQUU7WUFDL0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyw4QkFBOEIsQ0FBQztTQUNoRTthQUFNO1lBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztTQUN2RDtRQUNELHlEQUF5RDtRQUN6RCxvRUFBb0U7UUFDcEUsc0NBQXNDO0lBQzFDLENBQUM7O3FJQTFhaUIsdUNBQXVDO3lIQUF2Qyx1Q0FBdUMsNm1CQUYvQyxFQUFFOzRGQUVNLHVDQUF1QztrQkFKNUQsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsdUNBQXVDO29CQUNqRCxRQUFRLEVBQUUsRUFBRTtpQkFDZjs2ZUFHWSxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRzfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWF0RHJhd2VyTW9kZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1Jlc2l6ZUV2ZW50fSBmcm9tICdhbmd1bGFyLXJlc2l6YWJsZS1lbGVtZW50JztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtSb2xlQWNjZXNzLCBWaWV3fSBmcm9tICcuLi8uLi8uLi9jb21tb25zL3NjaGVtYSc7XG5pbXBvcnQge0FjY2Vzc1NlcnZpY2V9IGZyb20gJy4uLy4uL2F1dGhvcml6YXRpb24vcGVybWlzc2lvbi9hY2Nlc3Muc2VydmljZSc7XG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQge0ltcGVyc29uYXRpb25Vc2VyU2VsZWN0U2VydmljZX0gZnJvbSAnLi4vLi4vaW1wZXJzb25hdGlvbi9zZXJ2aWNlcy9pbXBlcnNvbmF0aW9uLXVzZXItc2VsZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHtJbXBlcnNvbmF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vaW1wZXJzb25hdGlvbi9zZXJ2aWNlcy9pbXBlcnNvbmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9sb2dnZXIvc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtDYXNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL2Nhc2UnO1xuaW1wb3J0IHtcbiAgICBEeW5hbWljTmF2aWdhdGlvblJvdXRlUHJvdmlkZXJTZXJ2aWNlLFxufSBmcm9tICcuLi8uLi9yb3V0aW5nL2R5bmFtaWMtbmF2aWdhdGlvbi1yb3V0ZS1wcm92aWRlci9keW5hbWljLW5hdmlnYXRpb24tcm91dGUtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQge05BRV9ST1VUSU5HX0NPTkZJR1VSQVRJT05fUEFUSH0gZnJvbSAnLi4vLi4vcm91dGluZy9yb3V0aW5nLWJ1aWxkZXIvcm91dGluZy1idWlsZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtMYW5ndWFnZVNlcnZpY2V9IGZyb20gJy4uLy4uL3RyYW5zbGF0ZS9sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7VXNlcn0gZnJvbSAnLi4vLi4vdXNlci9tb2RlbHMvdXNlcic7XG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi91c2VyL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XG5pbXBvcnQge0xvYWRpbmdFbWl0dGVyfSBmcm9tICcuLi8uLi91dGlsaXR5L2xvYWRpbmctZW1pdHRlcic7XG5pbXBvcnQge1VyaU5vZGVSZXNvdXJjZX0gZnJvbSAnLi4vbW9kZWwvdXJpLXJlc291cmNlJztcbmltcG9ydCB7VXJpU2VydmljZX0gZnJvbSAnLi4vc2VydmljZS91cmkuc2VydmljZSc7XG5pbXBvcnQge0kxOG5GaWVsZFZhbHVlfSBmcm9tIFwiLi4vLi4vZGF0YS1maWVsZHMvaTE4bi1maWVsZC9tb2RlbHMvaTE4bi1maWVsZC12YWx1ZVwiO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHtHcm91cE5hdmlnYXRpb25Db25zdGFudHN9IGZyb20gXCIuLi9tb2RlbC9ncm91cC1uYXZpZ2F0aW9uLWNvbnN0YW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ0RvdWJsZU1lbnUge1xuICAgIG1vZGU6IE1hdERyYXdlck1vZGU7XG4gICAgb3BlbmVkOiBib29sZWFuO1xuICAgIGRpc2FibGVDbG9zZTogYm9vbGVhbjtcbiAgICB3aWR0aDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5hdmlnYXRpb25JdGVtIGV4dGVuZHMgVmlldyB7XG4gICAgaWQ6IHN0cmluZztcbiAgICByZXNvdXJjZT86IENhc2U7XG59XG5cbmV4cG9ydCBjb25zdCBNRU5VX0lERU5USUZJRVJTID0gW1xuICAgICdwcmVmZXJlbmNlX2l0ZW0nLFxuXTtcbmV4cG9ydCBjb25zdCBTRVRUSU5HU19UUkFOU0lUSU9OX0lEID0gJ2l0ZW1fc2V0dGluZ3MnO1xuXG5jb25zdCBMRUZUX0RSQVdFUl9ERUZBVUxUX1dJRFRIID0gNjA7XG5jb25zdCBSSUdIVF9EUkFXRVJfREVGQVVMVF9XSURUSCA9IDI0MDtcbmNvbnN0IFJJR0hUX0RSQVdFUl9ERUZBVUxUX01JTl9XSURUSCA9IDE4MDtcbmNvbnN0IFJJR0hUX0RSQVdFUl9NQVhfV0lEVEggPSA0NjA7XG5jb25zdCBSSUdIVF9TSURFX05FV19QQUdFX1NJWkUgPSAxMFxuY29uc3QgUklHSFRfU0lERV9JTklUX1BBR0VfU0laRSA9IDIwXG5cbmVudW0gTWVudU9yZGVyIHtcbiAgICBBc2NlbmRpbmcsXG4gICAgRGVzY2VuZGluZ1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25jYy1hYnN0cmFjdC1uYXZpZ2F0aW9uLWRvdWJsZS1kcmF3ZXInLFxuICAgIHRlbXBsYXRlOiAnJyxcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3ROYXZpZ2F0aW9uRG91YmxlRHJhd2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KCkgcG9ydGFsTGVmdE1lbnU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgcG9ydGFsUmlnaHRNZW51OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBJbnB1dCgpIGltYWdlUm91dGVyTGluazogc3RyaW5nID0gJy8nO1xuICAgIEBJbnB1dCgpIGltYWdlQWx0OiBzdHJpbmcgPSAnTG9nbyc7XG4gICAgQElucHV0KCkgaW1hZ2U6IHN0cmluZztcbiAgICBASW5wdXQoKSBwcm9maWxlUm91dGVyTGluazogc3RyaW5nID0gJy9wcm9maWxlJztcbiAgICBASW5wdXQoKSBpbmNsdWRlVXNlcjogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgaW5jbHVkZUxhbmd1YWdlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBpbmNsdWRlTW9yZU1lbnU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIGluY2x1ZGVJbXBlcnNvbmF0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBhbGxDbG9zYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgZm9sZGVySWNvbjogc3RyaW5nID0gJ2ZvbGRlcic7XG4gICAgQElucHV0KCkgb3BlbmVkRm9sZGVySWNvbjogc3RyaW5nID0gJ2ZvbGRlcl9vcGVuJztcbiAgICBASW5wdXQoKSBmaWx0ZXJJY29uOiBzdHJpbmcgPSAnZmlsdGVyX2FsdCc7XG4gICAgQElucHV0KCkgZm9sZGVyc0NhdGVnb3J5TmFtZTogc3RyaW5nID0gJ3Rvb2xiYXIubWVudS5mb2xkZXJzJztcbiAgICBASW5wdXQoKSB2aWV3c0NhdGVnb3J5TmFtZTogc3RyaW5nID0gJ3Rvb2xiYXIubWVudS52aWV3cyc7XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGRpc3BsYXllZCBpdGVtcyBvbiB0aGUgbGVmdCBzaWRlXG4gICAgICogKi9cbiAgICBsZWZ0SXRlbXM6IEFycmF5PE5hdmlnYXRpb25JdGVtPlxuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBkaXNwbGF5ZWQgaXRlbXMgb24gdGhlIHJpZ2h0IHNpZGVcbiAgICAgKiAqL1xuICAgIHJpZ2h0SXRlbXM6IEFycmF5PE5hdmlnYXRpb25JdGVtPlxuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBoaWRkZW4gaXRlbXNcbiAgICAgKiAqL1xuICAgIG1vcmVJdGVtczogQXJyYXk8TmF2aWdhdGlvbkl0ZW0+O1xuXG4gICAgaXRlbXNPcmRlcjogTWVudU9yZGVyO1xuXG4gICAgcHJvdGVjdGVkIF9icmVha3BvaW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJvdGVjdGVkIF9jdXJyZW50Tm9kZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudGx5IGRpc3BsYXkgdXJpXG4gICAgICogU2libGluZ3Mgb2YgdGhlIG5vZGUgYXJlIG9uIHRoZSBsZWZ0LCBjaGlsZHJlbiBhcmUgb24gdGhlIHJpZ2h0XG4gICAgICovXG4gICAgcHJpdmF0ZSBfY3VycmVudE5vZGU6IFVyaU5vZGVSZXNvdXJjZTtcblxuICAgIGxlZnRMb2FkaW5nJDogTG9hZGluZ0VtaXR0ZXI7XG4gICAgcmlnaHRMb2FkaW5nJDogTG9hZGluZ0VtaXR0ZXI7XG4gICAgbm9kZUxvYWRpbmckOiBMb2FkaW5nRW1pdHRlcjtcblxuICAgIHByb3RlY3RlZCBfY29uZmlnTGVmdE1lbnU6IENvbmZpZ0RvdWJsZU1lbnUgPSB7XG4gICAgICAgIG1vZGU6ICdzaWRlJyxcbiAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICB3aWR0aDogTEVGVF9EUkFXRVJfREVGQVVMVF9XSURUSCxcbiAgICB9O1xuICAgIHByb3RlY3RlZCBfY29uZmlnUmlnaHRNZW51OiBDb25maWdEb3VibGVNZW51ID0ge1xuICAgICAgICBtb2RlOiAnc2lkZScsXG4gICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgd2lkdGg6IFJJR0hUX0RSQVdFUl9ERUZBVUxUX1dJRFRILFxuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocHJvdGVjdGVkIF9yb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfYnJlYWtwb2ludDogQnJlYWtwb2ludE9ic2VydmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2xhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2FjY2Vzc1NlcnZpY2U6IEFjY2Vzc1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbG9nOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2NvbmZpZzogQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfdXJpU2VydmljZTogVXJpU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9pbXBlcnNvbmF0aW9uVXNlclNlbGVjdDogSW1wZXJzb25hdGlvblVzZXJTZWxlY3RTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2ltcGVyc29uYXRpb246IEltcGVyc29uYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2R5bmFtaWNSb3V0aW5nU2VydmljZTogRHluYW1pY05hdmlnYXRpb25Sb3V0ZVByb3ZpZGVyU2VydmljZSkge1xuICAgICAgICB0aGlzLmxlZnRJdGVtcyA9IG5ldyBBcnJheTxOYXZpZ2F0aW9uSXRlbT4oKTtcbiAgICAgICAgdGhpcy5yaWdodEl0ZW1zID0gbmV3IEFycmF5PE5hdmlnYXRpb25JdGVtPigpO1xuICAgICAgICB0aGlzLmxlZnRMb2FkaW5nJCA9IG5ldyBMb2FkaW5nRW1pdHRlcigpO1xuICAgICAgICB0aGlzLnJpZ2h0TG9hZGluZyQgPSBuZXcgTG9hZGluZ0VtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5ub2RlTG9hZGluZyQgPSBuZXcgTG9hZGluZ0VtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5pdGVtc09yZGVyID0gTWVudU9yZGVyLkFzY2VuZGluZztcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYnJlYWtwb2ludFN1YnNjcmlwdGlvbiA9IHRoaXMuX2JyZWFrcG9pbnQub2JzZXJ2ZShbQnJlYWtwb2ludHMuSGFuZHNldExhbmRzY2FwZV0pLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludC5pc01hdGNoZWQoJyhtYXgtd2lkdGg6IDk1OS45OXB4KScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlTGF5b3V0KGZhbHNlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlTGF5b3V0KHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzLl9jdXJyZW50Tm9kZSkge1xuICAgICAgICAgICAgdGhpcy5sZWZ0TG9hZGluZyQub24oKTtcbiAgICAgICAgICAgIHRoaXMucmlnaHRMb2FkaW5nJC5vbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N1cnJlbnROb2RlU3Vic2NyaXB0aW9uID0gdGhpcy5fdXJpU2VydmljZS5hY3RpdmVOb2RlJC5zdWJzY3JpYmUobm9kZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnROb2RlID0gbm9kZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGN1cnJlbnROb2RlKCk6IFVyaU5vZGVSZXNvdXJjZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50Tm9kZTtcbiAgICB9XG5cbiAgICBzZXQgY3VycmVudE5vZGUobm9kZTogVXJpTm9kZVJlc291cmNlKSB7XG4gICAgICAgIGlmIChub2RlID09PSB0aGlzLl9jdXJyZW50Tm9kZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9jdXJyZW50Tm9kZSA9IG5vZGU7XG4gICAgICAgIGlmICghbm9kZSkgcmV0dXJuO1xuICAgICAgICBpZiAobm9kZS5wYXJlbnRJZCAmJiAhbm9kZS5wYXJlbnQpIHtcbiAgICAgICAgICAgIGlmIChub2RlLnBhcmVudElkID09PSB0aGlzLl91cmlTZXJ2aWNlLnJvb3QuaWQpIHtcbiAgICAgICAgICAgICAgICBub2RlLnBhcmVudCA9IHRoaXMuX3VyaVNlcnZpY2Uucm9vdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlTG9hZGluZyQub24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLl91cmlTZXJ2aWNlLmdldE5vZGVCeVBhdGgodGhpcy5fdXJpU2VydmljZS5yZXNvbHZlUGFyZW50UGF0aChub2RlKSkuc3Vic2NyaWJlKG4gPT4ge1xuICAgICAgICAgICAgICAgICAgICBub2RlLnBhcmVudCA9ICFuID8gdGhpcy5fdXJpU2VydmljZS5yb290IDogbjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2RlTG9hZGluZyQub2ZmKCk7XG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxlZnRMb2FkaW5nJC5pc0FjdGl2ZSB8fCB0aGlzLnJpZ2h0TG9hZGluZyQuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMubGVmdExvYWRpbmckLm9mZigpO1xuICAgICAgICAgICAgdGhpcy5yaWdodExvYWRpbmckLm9mZigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl91cmlTZXJ2aWNlLmlzUm9vdChub2RlKSkge1xuICAgICAgICAgICAgdGhpcy5sZWZ0SXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMubG9hZFJpZ2h0U2lkZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5sZWZ0SXRlbXMuZmluZChpdGVtID0+IGl0ZW0ucmVzb3VyY2UuaW1tZWRpYXRlRGF0YS5maW5kKGYgPT4gZi5zdHJpbmdJZCA9PT0gR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfTk9ERV9QQVRIKT8udmFsdWUgPT09IG5vZGUudXJpUGF0aCkpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZExlZnRTaWRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2FkUmlnaHRTaWRlKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnROb2RlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmxlZnRMb2FkaW5nJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLnJpZ2h0TG9hZGluZyQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5ub2RlTG9hZGluZyQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBnZXQgY29uZmlnTGVmdE1lbnUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWdMZWZ0TWVudTtcbiAgICB9XG5cbiAgICBnZXQgY29uZmlnUmlnaHRNZW51KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnUmlnaHRNZW51O1xuICAgIH1cblxuICAgIHRvZ2dsZU1lbnUoKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlUmlnaHRNZW51KCk7XG4gICAgICAgIGlmICh0aGlzLmFsbENsb3NhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUxlZnRNZW51KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b2dnbGVMZWZ0TWVudSgpIHtcbiAgICAgICAgdGhpcy5fY29uZmlnTGVmdE1lbnUub3BlbmVkID0gIXRoaXMuX2NvbmZpZ0xlZnRNZW51Lm9wZW5lZDtcbiAgICB9XG5cbiAgICB0b2dnbGVSaWdodE1lbnUoKSB7XG4gICAgICAgIHRoaXMuX2NvbmZpZ1JpZ2h0TWVudS5vcGVuZWQgPSAhdGhpcy5fY29uZmlnUmlnaHRNZW51Lm9wZW5lZDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZUxheW91dChpc0xhcmdlU2NyZWVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbmZpZ0xlZnRNZW51ID0gaXNMYXJnZVNjcmVlbiA/IHtcbiAgICAgICAgICAgIG1vZGU6ICdzaWRlJyxcbiAgICAgICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLl9jb25maWdMZWZ0TWVudS53aWR0aCxcbiAgICAgICAgfSA6IHtcbiAgICAgICAgICAgIG1vZGU6ICdvdmVyJyxcbiAgICAgICAgICAgIG9wZW5lZDogZmFsc2UsXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuX2NvbmZpZ0xlZnRNZW51LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9jb25maWdSaWdodE1lbnUgPSBpc0xhcmdlU2NyZWVuID8ge1xuICAgICAgICAgICAgbW9kZTogJ3NpZGUnLFxuICAgICAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuX2NvbmZpZ1JpZ2h0TWVudS53aWR0aCxcbiAgICAgICAgfSA6IHtcbiAgICAgICAgICAgIG1vZGU6ICdvdmVyJyxcbiAgICAgICAgICAgIG9wZW5lZDogZmFsc2UsXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuX2NvbmZpZ1JpZ2h0TWVudS53aWR0aCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRMYW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldExhbmd1YWdlKCk7XG4gICAgfVxuXG4gICAgbG9nb3V0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl91c2VyU2VydmljZS5sb2dvdXQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKCdVc2VyIGlzIGxvZ2dlZCBvdXQnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb25maWcuZ2V0KCkuc2VydmljZXMgJiYgdGhpcy5fY29uZmlnLmdldCgpLnNlcnZpY2VzLmF1dGggJiYgdGhpcy5fY29uZmlnLmdldCgpLnNlcnZpY2VzLmF1dGgubG9nb3V0UmVkaXJlY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWRpcmVjdFBhdGggPSB0aGlzLl9jb25maWcuZ2V0KCkuc2VydmljZXMuYXV0aC5sb2dvdXRSZWRpcmVjdDtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuaW5mbygnUmVkaXJlY3RpbmcgdG8gJyArIHJlZGlyZWN0UGF0aCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtyZWRpcmVjdFBhdGhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW1wZXJzb25hdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ltcGVyc29uYXRpb25Vc2VyU2VsZWN0LnNlbGVjdEltcGVyc29uYXRlKCk7XG4gICAgfVxuXG4gICAgc3RvcEltcGVyc29uYXRpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ltcGVyc29uYXRpb24uY2Vhc2UoKTtcbiAgICB9XG5cbiAgICBnZXQgdXNlcigpOiBVc2VyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTZXJ2aWNlLnVzZXI7XG4gICAgfVxuXG4gICAgZ2V0IGNhbkdvQmFja0xvYWRpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2RlTG9hZGluZyQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gaG9tZSBjbGljaywgdGhlIGN1cnJlbnQgbGV2ZWwgaXMgc2V0IHRvIDAsIGFuZCBjdXJyZW50IHBhcmVudCBpc1xuICAgICAqIHNldCB0byByb290IG5vZGUuXG4gICAgICogKi9cbiAgICBvbkhvbWVDbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Tm9kZSA9IHRoaXMuX3VyaVNlcnZpY2Uucm9vdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBiYWNrIGNsaWNrLCB0aGUgcGFyZW50IGlzIHNldCB0byBwYXJlbnQgb2YgbGVmdCBub2RlcywgdGhhdCB3aWxsIHNvbHZlXG4gICAgICogdGhlIHJpZ2h0IHNpZGUgbWVudSAoZWxlbWVudHMgdGhhdCB3ZXJlIGluIGxlZnQgc2lkZSwgYWZ0ZXIgYmFja3dhcmRcbiAgICAgKiBuYXZpZ2F0aW9uIHdpbGwgYmUgb24gdGhlIHJpZ2h0IHNpZGUpLlxuICAgICAqIEN1cnJlbnQgbGV2ZWwgaXMgc2V0IHRvIGEgbG93ZXIgbnVtYmVyIGluIG9yZGVyIHRvIHNldCB0aGUgbGVmdCBzaWRlIG1lbnUuXG4gICAgICogKi9cbiAgICBvbkJhY2tDbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3VyaVNlcnZpY2UuaXNSb290KHRoaXMuX2N1cnJlbnROb2RlKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmN1cnJlbnROb2RlID0gdGhpcy5fY3VycmVudE5vZGUucGFyZW50O1xuICAgIH1cblxuICAgIG9uSXRlbUNsaWNrKGl0ZW06IE5hdmlnYXRpb25JdGVtKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3VyaVNlcnZpY2UuYWN0aXZlTm9kZSA9IHRoaXMuX2N1cnJlbnROb2RlO1xuICAgICAgICBpZiAodGhpcy5oYXNJdGVtQ2hpbGRyZW4oaXRlbSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBpdGVtLnJlc291cmNlLmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09IEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX05PREVfUEFUSCk/LnZhbHVlXG4gICAgICAgICAgICB0aGlzLl91cmlTZXJ2aWNlLmdldE5vZGVCeVBhdGgocGF0aCkuc3Vic2NyaWJlKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE5vZGUgPSBub2RlXG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFzSXRlbUNoaWxkcmVuKGl0ZW06IE5hdmlnYXRpb25JdGVtKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBpdGVtLnJlc291cmNlLmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09IEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX0hBU19DSElMRFJFTik/LnZhbHVlXG4gICAgfVxuXG4gICAgaXNJdGVtQW5kTm9kZUVxdWFsKGl0ZW06IE5hdmlnYXRpb25JdGVtLCBub2RlOiBVcmlOb2RlUmVzb3VyY2UpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0ucmVzb3VyY2UuaW1tZWRpYXRlRGF0YS5maW5kKGYgPT4gZi5zdHJpbmdJZCA9PT0gR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfTk9ERV9QQVRIKT8udmFsdWUgPT09IG5vZGUudXJpUGF0aFxuICAgIH1cblxuICAgIHByb3RlY3RlZCBsb2FkTGVmdFNpZGUoKSB7XG4gICAgICAgIGlmICh0aGlzLl91cmlTZXJ2aWNlLmlzUm9vdCh0aGlzLl9jdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMubGVmdEl0ZW1zID0gW107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sZWZ0TG9hZGluZyQub24oKTtcbiAgICAgICAgdGhpcy5fdXJpU2VydmljZS5nZXRDYXNlc09mTm9kZSh0aGlzLmN1cnJlbnROb2RlLnBhcmVudCwgTUVOVV9JREVOVElGSUVSUywgMCwgMSkuc3Vic2NyaWJlKHBhZ2UgPT4ge1xuICAgICAgICAgICAgcGFnZT8ucGFnaW5hdGlvbj8udG90YWxFbGVtZW50cyA9PT0gMCA/IG9mKFtdKSA6IHRoaXMuX3VyaVNlcnZpY2UuZ2V0Q2FzZXNPZk5vZGUodGhpcy5jdXJyZW50Tm9kZS5wYXJlbnQsIE1FTlVfSURFTlRJRklFUlMsIDAsIHBhZ2UucGFnaW5hdGlvbi50b3RhbEVsZW1lbnRzKS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChwID0+IHAuY29udGVudCksXG4gICAgICAgICAgICApLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubGVmdEl0ZW1zID0gcmVzdWx0LmZpbHRlcihmb2xkZXIgPT4gZm9sZGVyLmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09IEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX0hBU19DSElMRFJFTik/LnZhbHVlID09PSB0cnVlKS5tYXAoZm9sZGVyID0+IHRoaXMucmVzb2x2ZUl0ZW1DYXNlVG9OYXZpZ2F0aW9uSXRlbShmb2xkZXIpKS5maWx0ZXIoaSA9PiAhIWkpO1xuICAgICAgICAgICAgICAgIHRoaXMubGVmdEl0ZW1zLnNvcnQoKGEsIGIpID0+IChhPy5uYXZpZ2F0aW9uIGFzIE5hdmlnYXRpb25JdGVtKT8udGl0bGUubG9jYWxlQ29tcGFyZSgoYj8ubmF2aWdhdGlvbiBhcyBOYXZpZ2F0aW9uSXRlbSk/LnRpdGxlKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0TG9hZGluZyQub2ZmKCk7XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRJdGVtcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMubGVmdExvYWRpbmckLm9mZigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0aGlzLmxlZnRJdGVtcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5sZWZ0TG9hZGluZyQub2ZmKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBsb2FkUmlnaHRTaWRlKCkge1xuICAgICAgICB0aGlzLnJpZ2h0TG9hZGluZyQub24oKTtcbiAgICAgICAgdGhpcy5tb3JlSXRlbXMgPSBbXTtcbiAgICAgICAgdGhpcy5fdXJpU2VydmljZS5nZXRDYXNlc09mTm9kZSh0aGlzLmN1cnJlbnROb2RlLCBNRU5VX0lERU5USUZJRVJTLCAwLCAxKS5zdWJzY3JpYmUocGFnZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoJ051bWJlciBvZiBpdGVtcyBmb3IgdXJpICcgKyB0aGlzLl9jdXJyZW50Tm9kZS51cmlQYXRoICsgJzogJyArIHBhZ2U/LnBhZ2luYXRpb24/LnRvdGFsRWxlbWVudHMpO1xuICAgICAgICAgICAgKHBhZ2U/LnBhZ2luYXRpb24/LnRvdGFsRWxlbWVudHMgPT09IDAgPyBvZihbXSkgOiB0aGlzLl91cmlTZXJ2aWNlLmdldENhc2VzT2ZOb2RlKHRoaXMuX2N1cnJlbnROb2RlLCBNRU5VX0lERU5USUZJRVJTLCAwLCBwYWdlLnBhZ2luYXRpb24udG90YWxFbGVtZW50cykucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocCA9PiBwLmNvbnRlbnQpLFxuICAgICAgICAgICAgKSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCBhcyBDYXNlW10pLnNvcnQoKGEsIGIpID0+IGE/LnRpdGxlLmxvY2FsZUNvbXBhcmUoYj8udGl0bGUpKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IFJJR0hUX1NJREVfSU5JVF9QQUdFX1NJWkUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmF3UmlnaHRJdGVtczogQ2FzZVtdID0gcmVzdWx0LnNwbGljZSgwLCBSSUdIVF9TSURFX0lOSVRfUEFHRV9TSVpFKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yaWdodEl0ZW1zID0gcmF3UmlnaHRJdGVtcy5tYXAoZm9sZGVyID0+IHRoaXMucmVzb2x2ZUl0ZW1DYXNlVG9OYXZpZ2F0aW9uSXRlbShmb2xkZXIpKS5maWx0ZXIoaSA9PiAhIWkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vcmVJdGVtcyA9IHJlc3VsdC5tYXAoZm9sZGVyID0+IHRoaXMucmVzb2x2ZUl0ZW1DYXNlVG9OYXZpZ2F0aW9uSXRlbShmb2xkZXIpKS5maWx0ZXIoaSA9PiAhIWkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmlnaHRJdGVtcyA9IHJlc3VsdC5tYXAoZm9sZGVyID0+IHRoaXMucmVzb2x2ZUl0ZW1DYXNlVG9OYXZpZ2F0aW9uSXRlbShmb2xkZXIpKS5maWx0ZXIoaSA9PiAhIWkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0TG9hZGluZyQub2ZmKCk7XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0SXRlbXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLm1vcmVJdGVtcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5yaWdodEl0ZW1zID0gW107XG4gICAgICAgICAgICB0aGlzLm1vcmVJdGVtcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5yaWdodExvYWRpbmckLm9mZigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9hZE1vcmVJdGVtcygpIHtcbiAgICAgICAgaWYgKHRoaXMubW9yZUl0ZW1zLmxlbmd0aCA+IFJJR0hUX1NJREVfTkVXX1BBR0VfU0laRSkge1xuICAgICAgICAgICAgdGhpcy5yaWdodEl0ZW1zLnB1c2goLi4udGhpcy5tb3JlSXRlbXMuc3BsaWNlKDAsIFJJR0hUX1NJREVfTkVXX1BBR0VfU0laRSkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJpZ2h0SXRlbXMucHVzaCguLi50aGlzLm1vcmVJdGVtcylcbiAgICAgICAgICAgIHRoaXMubW9yZUl0ZW1zID0gW11cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBpc0FzY2VuZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXNPcmRlciA9PT0gTWVudU9yZGVyLkFzY2VuZGluZztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3dpdGNoT3JkZXIoKSB7XG4gICAgICAgIHRoaXMuaXRlbXNPcmRlciA9ICh0aGlzLml0ZW1zT3JkZXIgKyAxKSAlIDI7XG4gICAgICAgIGxldCBtdWx0aXBsaWVyID0gMVxuICAgICAgICBpZiAodGhpcy5pdGVtc09yZGVyID09PSBNZW51T3JkZXIuRGVzY2VuZGluZykge1xuICAgICAgICAgICAgbXVsdGlwbGllciA9IC0xXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yaWdodEl0ZW1zID0gdGhpcy5yaWdodEl0ZW1zLnNvcnQoKGEsIGIpID0+IG11bHRpcGxpZXIgKiAoYT8ubmF2aWdhdGlvbiBhcyBOYXZpZ2F0aW9uSXRlbSk/LnRpdGxlLmxvY2FsZUNvbXBhcmUoKGI/Lm5hdmlnYXRpb24gYXMgTmF2aWdhdGlvbkl0ZW0pPy50aXRsZSkpO1xuICAgICAgICB0aGlzLmxlZnRJdGVtcyA9IHRoaXMubGVmdEl0ZW1zLnNvcnQoKGEsIGIpID0+IG11bHRpcGxpZXIgKiAoYT8ubmF2aWdhdGlvbiBhcyBOYXZpZ2F0aW9uSXRlbSk/LnRpdGxlLmxvY2FsZUNvbXBhcmUoKGI/Lm5hdmlnYXRpb24gYXMgTmF2aWdhdGlvbkl0ZW0pPy50aXRsZSkpO1xuICAgICAgICB0aGlzLm1vcmVJdGVtcyA9IHRoaXMubW9yZUl0ZW1zLnNvcnQoKGEsIGIpID0+IG11bHRpcGxpZXIgKiAoYT8ubmF2aWdhdGlvbiBhcyBOYXZpZ2F0aW9uSXRlbSk/LnRpdGxlLmxvY2FsZUNvbXBhcmUoKGI/Lm5hdmlnYXRpb24gYXMgTmF2aWdhdGlvbkl0ZW0pPy50aXRsZSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlSXRlbUNhc2VUb05hdmlnYXRpb25JdGVtKGl0ZW1DYXNlOiBDYXNlKTogTmF2aWdhdGlvbkl0ZW0gfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBpdGVtOiBOYXZpZ2F0aW9uSXRlbSA9IHtcbiAgICAgICAgICAgIGFjY2Vzczoge30sXG4gICAgICAgICAgICBuYXZpZ2F0aW9uOiB7XG4gICAgICAgICAgICAgICAgaWNvbjogaXRlbUNhc2UuaW1tZWRpYXRlRGF0YS5maW5kKGYgPT4gZi5zdHJpbmdJZCA9PT0gR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfTUVOVV9JQ09OKT8udmFsdWUgfHwgdGhpcy5maWx0ZXJJY29uLFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmdldFRyYW5zbGF0aW9uKGl0ZW1DYXNlLmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09IEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX01FTlVfTkFNRSk/LnZhbHVlKSB8fCBpdGVtQ2FzZS50aXRsZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByb3V0aW5nOiB7XG4gICAgICAgICAgICAgICAgcGF0aDogdGhpcy5nZXRJdGVtUm91dGluZ1BhdGgoaXRlbUNhc2UpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkOiBpdGVtQ2FzZS5zdHJpbmdJZCxcbiAgICAgICAgICAgIHJlc291cmNlOiBpdGVtQ2FzZSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRSb2xlcyA9IHRoaXMucmVzb2x2ZUFjY2Vzc1JvbGVzKGl0ZW1DYXNlLCBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuSVRFTV9GSUVMRF9JRF9BTExPV0VEX1JPTEVTKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRCYW5uZWRSb2xlcyA9IHRoaXMucmVzb2x2ZUFjY2Vzc1JvbGVzKGl0ZW1DYXNlLCBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuSVRFTV9GSUVMRF9JRF9CQU5ORURfUk9MRVMpO1xuICAgICAgICBpZiAoISFyZXNvbHZlZFJvbGVzKSBpdGVtLmFjY2Vzc1sncm9sZSddID0gcmVzb2x2ZWRSb2xlcztcbiAgICAgICAgaWYgKCEhcmVzb2x2ZWRCYW5uZWRSb2xlcykgaXRlbS5hY2Nlc3NbJ2Jhbm5lZFJvbGUnXSA9IHJlc29sdmVkQmFubmVkUm9sZXM7XG4gICAgICAgIGlmICghdGhpcy5fYWNjZXNzU2VydmljZS5jYW5BY2Nlc3NWaWV3KGl0ZW0sIGl0ZW0ucm91dGluZ1BhdGgpKSByZXR1cm47XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VHJhbnNsYXRpb24odmFsdWU6IEkxOG5GaWVsZFZhbHVlKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZy5zcGxpdCgnLScpWzBdO1xuICAgICAgICByZXR1cm4gbG9jYWxlIGluIHZhbHVlLnRyYW5zbGF0aW9ucyA/IHZhbHVlLnRyYW5zbGF0aW9uc1tsb2NhbGVdIDogdmFsdWUuZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlQWNjZXNzUm9sZXMoZmlsdGVyOiBDYXNlLCByb2xlVHlwZTogc3RyaW5nKTogQXJyYXk8Um9sZUFjY2Vzcz4gfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBhbGxvd2VkUm9sZXMgPSBmaWx0ZXIuaW1tZWRpYXRlRGF0YS5maW5kKGYgPT4gZi5zdHJpbmdJZCA9PT0gcm9sZVR5cGUpPy5vcHRpb25zO1xuICAgICAgICBpZiAoIWFsbG93ZWRSb2xlcyB8fCBPYmplY3Qua2V5cyhhbGxvd2VkUm9sZXMpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3Qgcm9sZXMgPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXMoYWxsb3dlZFJvbGVzKS5mb3JFYWNoKGNvbWJpbmVkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gY29tYmluZWQuc3BsaXQoJzonKTtcbiAgICAgICAgICAgIHJvbGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHByb2Nlc3NJZDogcGFydHNbMV0sXG4gICAgICAgICAgICAgICAgcm9sZUlkOiBwYXJ0c1swXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJvbGVzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRJdGVtUm91dGluZ1BhdGgoaXRlbUNhc2U6IENhc2UpIHtcbiAgICAgICAgY29uc3QgdHJhbnNJZCA9IFNFVFRJTkdTX1RSQU5TSVRJT05fSUQ7XG4gICAgICAgIGNvbnN0IHRhc2tJZCA9IGl0ZW1DYXNlLnRhc2tzLmZpbmQodGFza1BhaXIgPT4gdGFza1BhaXIudHJhbnNpdGlvbiA9PT0gdHJhbnNJZCkudGFzaztcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5fZHluYW1pY1JvdXRpbmdTZXJ2aWNlLnJvdXRlO1xuICAgICAgICByZXR1cm4gYC8ke3VybH0vJHt0YXNrSWR9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjaGVjayB3aGV0aGVyIHRoZSBiYWNrIGJ1dHRvbiBzaG91bGQgYmUgZGlzcGxheWVkXG4gICAgICogQHJldHVybnMgYm9vbGVhbiBpZiB0aGUgYmFjayBidXR0b24gc2hvdWxkIGJlIGRpc3BsYXllZFxuICAgICAqICovXG4gICAgaXNPblplcm9MZXZlbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fY3VycmVudE5vZGU/LmxldmVsID8gdGhpcy5fY3VycmVudE5vZGUubGV2ZWwgPT0gMCA6IHRydWU7XG4gICAgfVxuXG4gICAgaXNMZWZ0SXRlbXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGVmdEl0ZW1zID09PSB1bmRlZmluZWQgfHwgdGhpcy5sZWZ0SXRlbXMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIGlzUmlnaHRJdGVtc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yaWdodEl0ZW1zID09PSB1bmRlZmluZWQgfHwgdGhpcy5yaWdodEl0ZW1zLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICB1cmlOb2RlVHJhY2tCeShpbmRleDogbnVtYmVyLCBub2RlOiBVcmlOb2RlUmVzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUuaWQ7XG4gICAgfVxuXG4gICAgaXRlbXNUcmFja0J5KGluZGV4OiBudW1iZXIsIGl0ZW06IE5hdmlnYXRpb25JdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLmlkO1xuICAgIH1cblxuICAgIG9uUmVzaXplRXZlbnQoZXZlbnQ6IFJlc2l6ZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC5yZWN0YW5nbGUud2lkdGggPiBSSUdIVF9EUkFXRVJfTUFYX1dJRFRIKSB7XG4gICAgICAgICAgICB0aGlzLl9jb25maWdSaWdodE1lbnUud2lkdGggPSBSSUdIVF9EUkFXRVJfTUFYX1dJRFRIO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnJlY3RhbmdsZS53aWR0aCA8IFJJR0hUX0RSQVdFUl9ERUZBVUxUX01JTl9XSURUSCkge1xuICAgICAgICAgICAgdGhpcy5fY29uZmlnUmlnaHRNZW51LndpZHRoID0gUklHSFRfRFJBV0VSX0RFRkFVTFRfTUlOX1dJRFRIO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY29uZmlnUmlnaHRNZW51LndpZHRoID0gZXZlbnQucmVjdGFuZ2xlLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE8gaW1wbGVtZW50IHNhdmluZyBkcmF3ZXIgd2lkdGggdG8gdXNlciBwcmVmZXJlbmNlc1xuICAgICAgICAvLyB0aGlzLnVzZXJQcmVmZXJlbmNlU2VydmljZS5fZHJhd2VyV2lkdGhDaGFuZ2VkJC5uZXh0KHRoaXMud2lkdGgpO1xuICAgICAgICAvLyB0aGlzLmNvbnRlbnRXaWR0aC5uZXh0KHRoaXMud2lkdGgpO1xuICAgIH1cblxufVxuIl19
|
|
485
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbmF2aWdhdGlvbi1kb3VibGUtZHJhd2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9uYXZpZ2F0aW9uL25hdmlnYXRpb24tZG91YmxlLWRyYXdlci9hYnN0cmFjdC1uYXZpZ2F0aW9uLWRvdWJsZS1kcmF3ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixXQUFXLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFJL0UsT0FBTyxFQUFhLEVBQUUsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFXbkMsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sdURBQXVELENBQUM7QUFJckcsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBSzdELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQWM3RSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM1QixpQkFBaUI7Q0FDcEIsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLGVBQWUsQ0FBQztBQUV0RCxNQUFNLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztBQUNyQyxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQztBQUN2QyxNQUFNLDhCQUE4QixHQUFHLEdBQUcsQ0FBQztBQUMzQyxNQUFNLHNCQUFzQixHQUFHLEdBQUcsQ0FBQztBQUNuQyxNQUFNLHdCQUF3QixHQUFHLEVBQUUsQ0FBQTtBQUNuQyxNQUFNLHlCQUF5QixHQUFHLEVBQUUsQ0FBQTtBQUVwQyxJQUFLLFNBR0o7QUFIRCxXQUFLLFNBQVM7SUFD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aUI7c0JBQXpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludHN9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVGVtcGxhdGVSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNYXREcmF3ZXJNb2RlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7UmVzaXplRXZlbnR9IGZyb20gJ2FuZ3VsYXItcmVzaXphYmxlLWVsZW1lbnQnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1JvbGVBY2Nlc3MsIFZpZXd9IGZyb20gJy4uLy4uLy4uL2NvbW1vbnMvc2NoZW1hJztcbmltcG9ydCB7QWNjZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aG9yaXphdGlvbi9wZXJtaXNzaW9uL2FjY2Vzcy5zZXJ2aWNlJztcbmltcG9ydCB7Q29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uL2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7SW1wZXJzb25hdGlvblVzZXJTZWxlY3RTZXJ2aWNlfSBmcm9tICcuLi8uLi9pbXBlcnNvbmF0aW9uL3NlcnZpY2VzL2ltcGVyc29uYXRpb24tdXNlci1zZWxlY3Quc2VydmljZSc7XG5pbXBvcnQge0ltcGVyc29uYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9pbXBlcnNvbmF0aW9uL3NlcnZpY2VzL2ltcGVyc29uYXRpb24uc2VydmljZSc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge0Nhc2V9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvY2FzZSc7XG5pbXBvcnQge1xuICAgIER5bmFtaWNOYXZpZ2F0aW9uUm91dGVQcm92aWRlclNlcnZpY2UsXG59IGZyb20gJy4uLy4uL3JvdXRpbmcvZHluYW1pYy1uYXZpZ2F0aW9uLXJvdXRlLXByb3ZpZGVyL2R5bmFtaWMtbmF2aWdhdGlvbi1yb3V0ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7TkFFX1JPVVRJTkdfQ09ORklHVVJBVElPTl9QQVRIfSBmcm9tICcuLi8uLi9yb3V0aW5nL3JvdXRpbmctYnVpbGRlci9yb3V0aW5nLWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQge0xhbmd1YWdlU2VydmljZX0gZnJvbSAnLi4vLi4vdHJhbnNsYXRlL2xhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHtVc2VyfSBmcm9tICcuLi8uLi91c2VyL21vZGVscy91c2VyJztcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4uLy4uL3VzZXIvc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7TG9hZGluZ0VtaXR0ZXJ9IGZyb20gJy4uLy4uL3V0aWxpdHkvbG9hZGluZy1lbWl0dGVyJztcbmltcG9ydCB7VXJpTm9kZVJlc291cmNlfSBmcm9tICcuLi9tb2RlbC91cmktcmVzb3VyY2UnO1xuaW1wb3J0IHtVcmlTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL3VyaS5zZXJ2aWNlJztcbmltcG9ydCB7STE4bkZpZWxkVmFsdWV9IGZyb20gXCIuLi8uLi9kYXRhLWZpZWxkcy9pMThuLWZpZWxkL21vZGVscy9pMThuLWZpZWxkLXZhbHVlXCI7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQge0dyb3VwTmF2aWdhdGlvbkNvbnN0YW50c30gZnJvbSBcIi4uL21vZGVsL2dyb3VwLW5hdmlnYXRpb24tY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnRG91YmxlTWVudSB7XG4gICAgbW9kZTogTWF0RHJhd2VyTW9kZTtcbiAgICBvcGVuZWQ6IGJvb2xlYW47XG4gICAgZGlzYWJsZUNsb3NlOiBib29sZWFuO1xuICAgIHdpZHRoOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmF2aWdhdGlvbkl0ZW0gZXh0ZW5kcyBWaWV3IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHJlc291cmNlPzogQ2FzZTtcbn1cblxuZXhwb3J0IGNvbnN0IE1FTlVfSURFTlRJRklFUlMgPSBbXG4gICAgJ3ByZWZlcmVuY2VfaXRlbScsXG5dO1xuZXhwb3J0IGNvbnN0IFNFVFRJTkdTX1RSQU5TSVRJT05fSUQgPSAnaXRlbV9zZXR0aW5ncyc7XG5cbmNvbnN0IExFRlRfRFJBV0VSX0RFRkFVTFRfV0lEVEggPSA2MDtcbmNvbnN0IFJJR0hUX0RSQVdFUl9ERUZBVUxUX1dJRFRIID0gMjQwO1xuY29uc3QgUklHSFRfRFJBV0VSX0RFRkFVTFRfTUlOX1dJRFRIID0gMTgwO1xuY29uc3QgUklHSFRfRFJBV0VSX01BWF9XSURUSCA9IDQ2MDtcbmNvbnN0IFJJR0hUX1NJREVfTkVXX1BBR0VfU0laRSA9IDEwXG5jb25zdCBSSUdIVF9TSURFX0lOSVRfUEFHRV9TSVpFID0gMjBcblxuZW51bSBNZW51T3JkZXIge1xuICAgIEFzY2VuZGluZyxcbiAgICBEZXNjZW5kaW5nXG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmNjLWFic3RyYWN0LW5hdmlnYXRpb24tZG91YmxlLWRyYXdlcicsXG4gICAgdGVtcGxhdGU6ICcnLFxufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdE5hdmlnYXRpb25Eb3VibGVEcmF3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICBASW5wdXQoKSBwb3J0YWxMZWZ0TWVudTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBASW5wdXQoKSBwb3J0YWxSaWdodE1lbnU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgaW1hZ2VSb3V0ZXJMaW5rOiBzdHJpbmcgPSAnLyc7XG4gICAgQElucHV0KCkgaW1hZ2VBbHQ6IHN0cmluZyA9ICdMb2dvJztcbiAgICBASW5wdXQoKSBpbWFnZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHByb2ZpbGVSb3V0ZXJMaW5rOiBzdHJpbmcgPSAnL3Byb2ZpbGUnO1xuICAgIEBJbnB1dCgpIGluY2x1ZGVVc2VyOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBpbmNsdWRlTGFuZ3VhZ2U6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIGluY2x1ZGVNb3JlTWVudTogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgaW5jbHVkZUltcGVyc29uYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIGFsbENsb3NhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBmb2xkZXJJY29uOiBzdHJpbmcgPSAnZm9sZGVyJztcbiAgICBASW5wdXQoKSBvcGVuZWRGb2xkZXJJY29uOiBzdHJpbmcgPSAnZm9sZGVyX29wZW4nO1xuICAgIEBJbnB1dCgpIGZpbHRlckljb246IHN0cmluZyA9ICdmaWx0ZXJfYWx0JztcbiAgICBASW5wdXQoKSBmb2xkZXJzQ2F0ZWdvcnlOYW1lOiBzdHJpbmcgPSAndG9vbGJhci5tZW51LmZvbGRlcnMnO1xuICAgIEBJbnB1dCgpIHZpZXdzQ2F0ZWdvcnlOYW1lOiBzdHJpbmcgPSAndG9vbGJhci5tZW51LnZpZXdzJztcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgZGlzcGxheWVkIGl0ZW1zIG9uIHRoZSBsZWZ0IHNpZGVcbiAgICAgKiAqL1xuICAgIGxlZnRJdGVtczogQXJyYXk8TmF2aWdhdGlvbkl0ZW0+XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGRpc3BsYXllZCBpdGVtcyBvbiB0aGUgcmlnaHQgc2lkZVxuICAgICAqICovXG4gICAgcmlnaHRJdGVtczogQXJyYXk8TmF2aWdhdGlvbkl0ZW0+XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGhpZGRlbiBpdGVtc1xuICAgICAqICovXG4gICAgbW9yZUl0ZW1zOiBBcnJheTxOYXZpZ2F0aW9uSXRlbT47XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGN1c3RvbSBpdGVtcyBpbiBtb3JlIG1lbnVcbiAgICAgKiAqL1xuICAgIGhpZGRlbkN1c3RvbUl0ZW1zOiBBcnJheTxOYXZpZ2F0aW9uSXRlbT47XG5cbiAgICBpdGVtc09yZGVyOiBNZW51T3JkZXI7XG5cbiAgICBwcm90ZWN0ZWQgX2JyZWFrcG9pbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICBwcm90ZWN0ZWQgX2N1cnJlbnROb2RlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50bHkgZGlzcGxheSB1cmlcbiAgICAgKiBTaWJsaW5ncyBvZiB0aGUgbm9kZSBhcmUgb24gdGhlIGxlZnQsIGNoaWxkcmVuIGFyZSBvbiB0aGUgcmlnaHRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jdXJyZW50Tm9kZTogVXJpTm9kZVJlc291cmNlO1xuXG4gICAgbGVmdExvYWRpbmckOiBMb2FkaW5nRW1pdHRlcjtcbiAgICByaWdodExvYWRpbmckOiBMb2FkaW5nRW1pdHRlcjtcbiAgICBub2RlTG9hZGluZyQ6IExvYWRpbmdFbWl0dGVyO1xuXG4gICAgcHJvdGVjdGVkIF9jb25maWdMZWZ0TWVudTogQ29uZmlnRG91YmxlTWVudSA9IHtcbiAgICAgICAgbW9kZTogJ3NpZGUnLFxuICAgICAgICBvcGVuZWQ6IHRydWUsXG4gICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXG4gICAgICAgIHdpZHRoOiBMRUZUX0RSQVdFUl9ERUZBVUxUX1dJRFRILFxuICAgIH07XG4gICAgcHJvdGVjdGVkIF9jb25maWdSaWdodE1lbnU6IENvbmZpZ0RvdWJsZU1lbnUgPSB7XG4gICAgICAgIG1vZGU6ICdzaWRlJyxcbiAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICB3aWR0aDogUklHSFRfRFJBV0VSX0RFRkFVTFRfV0lEVEgsXG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBfY2hpbGRDdXN0b21WaWV3czogeyBbdXJpOiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IE5hdmlnYXRpb25JdGVtIH0gfTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3JvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9icmVha3BvaW50OiBCcmVha3BvaW50T2JzZXJ2ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfYWNjZXNzU2VydmljZTogQWNjZXNzU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9sb2c6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfY29uZmlnOiBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF91cmlTZXJ2aWNlOiBVcmlTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2ltcGVyc29uYXRpb25Vc2VyU2VsZWN0OiBJbXBlcnNvbmF0aW9uVXNlclNlbGVjdFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfaW1wZXJzb25hdGlvbjogSW1wZXJzb25hdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfZHluYW1pY1JvdXRpbmdTZXJ2aWNlOiBEeW5hbWljTmF2aWdhdGlvblJvdXRlUHJvdmlkZXJTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMubGVmdEl0ZW1zID0gbmV3IEFycmF5PE5hdmlnYXRpb25JdGVtPigpO1xuICAgICAgICB0aGlzLnJpZ2h0SXRlbXMgPSBuZXcgQXJyYXk8TmF2aWdhdGlvbkl0ZW0+KCk7XG4gICAgICAgIHRoaXMubGVmdExvYWRpbmckID0gbmV3IExvYWRpbmdFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMucmlnaHRMb2FkaW5nJCA9IG5ldyBMb2FkaW5nRW1pdHRlcigpO1xuICAgICAgICB0aGlzLm5vZGVMb2FkaW5nJCA9IG5ldyBMb2FkaW5nRW1pdHRlcigpO1xuICAgICAgICB0aGlzLml0ZW1zT3JkZXIgPSBNZW51T3JkZXIuQXNjZW5kaW5nO1xuICAgICAgICB0aGlzLmhpZGRlbkN1c3RvbUl0ZW1zID0gW107XG4gICAgICAgIHRoaXMuX2NoaWxkQ3VzdG9tVmlld3MgPSB7fTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYnJlYWtwb2ludFN1YnNjcmlwdGlvbiA9IHRoaXMuX2JyZWFrcG9pbnQub2JzZXJ2ZShbQnJlYWtwb2ludHMuSGFuZHNldExhbmRzY2FwZV0pLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludC5pc01hdGNoZWQoJyhtYXgtd2lkdGg6IDk1OS45OXB4KScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlTGF5b3V0KGZhbHNlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlTGF5b3V0KHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzLl9jdXJyZW50Tm9kZSkge1xuICAgICAgICAgICAgdGhpcy5sZWZ0TG9hZGluZyQub24oKTtcbiAgICAgICAgICAgIHRoaXMucmlnaHRMb2FkaW5nJC5vbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N1cnJlbnROb2RlU3Vic2NyaXB0aW9uID0gdGhpcy5fdXJpU2VydmljZS5hY3RpdmVOb2RlJC5zdWJzY3JpYmUobm9kZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnROb2RlID0gbm9kZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgdmlld0NvbmZpZ3VyYXRpb25QYXRoID0gdGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YVtOQUVfUk9VVElOR19DT05GSUdVUkFUSU9OX1BBVEhdO1xuICAgICAgICBpZiAoISF2aWV3Q29uZmlndXJhdGlvblBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdDb25maWd1cmF0aW9uID0gdGhpcy5fY29uZmlnLmdldFZpZXdCeVBhdGgodmlld0NvbmZpZ3VyYXRpb25QYXRoKTtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHZpZXdDb25maWd1cmF0aW9uLmNoaWxkcmVuKS5mb3JFYWNoKChba2V5LCBjaGlsZFZpZXddKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlVXJpRm9yQ2hpbGRWaWV3cyh2aWV3Q29uZmlndXJhdGlvblBhdGggKyAnLycgKyBrZXksIGNoaWxkVmlldyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlSGlkZGVuTWVudUl0ZW1Gcm9tQ2hpbGRWaWV3cyh2aWV3Q29uZmlndXJhdGlvblBhdGggKyAnLycgKyBrZXksIGNoaWxkVmlldyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBjdXJyZW50Tm9kZSgpOiBVcmlOb2RlUmVzb3VyY2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudE5vZGU7XG4gICAgfVxuXG4gICAgc2V0IGN1cnJlbnROb2RlKG5vZGU6IFVyaU5vZGVSZXNvdXJjZSkge1xuICAgICAgICBpZiAobm9kZSA9PT0gdGhpcy5fY3VycmVudE5vZGUpIHJldHVybjtcbiAgICAgICAgdGhpcy5fY3VycmVudE5vZGUgPSBub2RlO1xuICAgICAgICBpZiAoIW5vZGUpIHJldHVybjtcbiAgICAgICAgaWYgKG5vZGUucGFyZW50SWQgJiYgIW5vZGUucGFyZW50KSB7XG4gICAgICAgICAgICBpZiAobm9kZS5wYXJlbnRJZCA9PT0gdGhpcy5fdXJpU2VydmljZS5yb290LmlkKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSB0aGlzLl91cmlTZXJ2aWNlLnJvb3Q7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZUxvYWRpbmckLm9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXJpU2VydmljZS5nZXROb2RlQnlQYXRoKHRoaXMuX3VyaVNlcnZpY2UucmVzb2x2ZVBhcmVudFBhdGgobm9kZSkpLnN1YnNjcmliZShuID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSAhbiA/IHRoaXMuX3VyaVNlcnZpY2Uucm9vdCA6IG47XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZUxvYWRpbmckLm9mZigpO1xuICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2RlTG9hZGluZyQub2ZmKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sZWZ0TG9hZGluZyQuaXNBY3RpdmUgfHwgdGhpcy5yaWdodExvYWRpbmckLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmxlZnRMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgICAgIHRoaXMucmlnaHRMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fdXJpU2VydmljZS5pc1Jvb3Qobm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMubGVmdEl0ZW1zID0gW107XG4gICAgICAgICAgICB0aGlzLmxvYWRSaWdodFNpZGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubGVmdEl0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnJlc291cmNlLmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09IEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX05PREVfUEFUSCk/LnZhbHVlID09PSBub2RlLnVyaVBhdGgpKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRMZWZ0U2lkZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9hZFJpZ2h0U2lkZSgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9icmVha3BvaW50U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9jdXJyZW50Tm9kZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5sZWZ0TG9hZGluZyQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5yaWdodExvYWRpbmckLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMubm9kZUxvYWRpbmckLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgZ2V0IGNvbmZpZ0xlZnRNZW51KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnTGVmdE1lbnU7XG4gICAgfVxuXG4gICAgZ2V0IGNvbmZpZ1JpZ2h0TWVudSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZ1JpZ2h0TWVudTtcbiAgICB9XG5cbiAgICB0b2dnbGVNZW51KCkge1xuICAgICAgICB0aGlzLnRvZ2dsZVJpZ2h0TWVudSgpO1xuICAgICAgICBpZiAodGhpcy5hbGxDbG9zYWJsZSkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVMZWZ0TWVudSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG9nZ2xlTGVmdE1lbnUoKSB7XG4gICAgICAgIHRoaXMuX2NvbmZpZ0xlZnRNZW51Lm9wZW5lZCA9ICF0aGlzLl9jb25maWdMZWZ0TWVudS5vcGVuZWQ7XG4gICAgfVxuXG4gICAgdG9nZ2xlUmlnaHRNZW51KCkge1xuICAgICAgICB0aGlzLl9jb25maWdSaWdodE1lbnUub3BlbmVkID0gIXRoaXMuX2NvbmZpZ1JpZ2h0TWVudS5vcGVuZWQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVMYXlvdXQoaXNMYXJnZVNjcmVlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb25maWdMZWZ0TWVudSA9IGlzTGFyZ2VTY3JlZW4gPyB7XG4gICAgICAgICAgICBtb2RlOiAnc2lkZScsXG4gICAgICAgICAgICBvcGVuZWQ6IHRydWUsXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICAgICAgICB3aWR0aDogdGhpcy5fY29uZmlnTGVmdE1lbnUud2lkdGgsXG4gICAgICAgIH0gOiB7XG4gICAgICAgICAgICBtb2RlOiAnb3ZlcicsXG4gICAgICAgICAgICBvcGVuZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLl9jb25maWdMZWZ0TWVudS53aWR0aCxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fY29uZmlnUmlnaHRNZW51ID0gaXNMYXJnZVNjcmVlbiA/IHtcbiAgICAgICAgICAgIG1vZGU6ICdzaWRlJyxcbiAgICAgICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLl9jb25maWdSaWdodE1lbnUud2lkdGgsXG4gICAgICAgIH0gOiB7XG4gICAgICAgICAgICBtb2RlOiAnb3ZlcicsXG4gICAgICAgICAgICBvcGVuZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLl9jb25maWdSaWdodE1lbnUud2lkdGgsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0TGFuZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5nZXRMYW5ndWFnZSgpO1xuICAgIH1cblxuICAgIGxvZ291dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdXNlclNlcnZpY2UubG9nb3V0KCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5kZWJ1ZygnVXNlciBpcyBsb2dnZWQgb3V0Jyk7XG4gICAgICAgICAgICBpZiAodGhpcy5fY29uZmlnLmdldCgpLnNlcnZpY2VzICYmIHRoaXMuX2NvbmZpZy5nZXQoKS5zZXJ2aWNlcy5hdXRoICYmIHRoaXMuX2NvbmZpZy5nZXQoKS5zZXJ2aWNlcy5hdXRoLmxvZ291dFJlZGlyZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVkaXJlY3RQYXRoID0gdGhpcy5fY29uZmlnLmdldCgpLnNlcnZpY2VzLmF1dGgubG9nb3V0UmVkaXJlY3Q7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmluZm8oJ1JlZGlyZWN0aW5nIHRvICcgKyByZWRpcmVjdFBhdGgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbcmVkaXJlY3RQYXRoXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGltcGVyc29uYXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbXBlcnNvbmF0aW9uVXNlclNlbGVjdC5zZWxlY3RJbXBlcnNvbmF0ZSgpO1xuICAgIH1cblxuICAgIHN0b3BJbXBlcnNvbmF0aW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbXBlcnNvbmF0aW9uLmNlYXNlKCk7XG4gICAgfVxuXG4gICAgZ2V0IHVzZXIoKTogVXNlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyU2VydmljZS51c2VyO1xuICAgIH1cblxuICAgIGdldCBjYW5Hb0JhY2tMb2FkaW5nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZUxvYWRpbmckO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIGhvbWUgY2xpY2ssIHRoZSBjdXJyZW50IGxldmVsIGlzIHNldCB0byAwLCBhbmQgY3VycmVudCBwYXJlbnQgaXNcbiAgICAgKiBzZXQgdG8gcm9vdCBub2RlLlxuICAgICAqICovXG4gICAgb25Ib21lQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VycmVudE5vZGUgPSB0aGlzLl91cmlTZXJ2aWNlLnJvb3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gYmFjayBjbGljaywgdGhlIHBhcmVudCBpcyBzZXQgdG8gcGFyZW50IG9mIGxlZnQgbm9kZXMsIHRoYXQgd2lsbCBzb2x2ZVxuICAgICAqIHRoZSByaWdodCBzaWRlIG1lbnUgKGVsZW1lbnRzIHRoYXQgd2VyZSBpbiBsZWZ0IHNpZGUsIGFmdGVyIGJhY2t3YXJkXG4gICAgICogbmF2aWdhdGlvbiB3aWxsIGJlIG9uIHRoZSByaWdodCBzaWRlKS5cbiAgICAgKiBDdXJyZW50IGxldmVsIGlzIHNldCB0byBhIGxvd2VyIG51bWJlciBpbiBvcmRlciB0byBzZXQgdGhlIGxlZnQgc2lkZSBtZW51LlxuICAgICAqICovXG4gICAgb25CYWNrQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl91cmlTZXJ2aWNlLmlzUm9vdCh0aGlzLl9jdXJyZW50Tm9kZSkpIHJldHVybjtcbiAgICAgICAgdGhpcy5jdXJyZW50Tm9kZSA9IHRoaXMuX2N1cnJlbnROb2RlLnBhcmVudDtcbiAgICB9XG5cbiAgICBvbkl0ZW1DbGljayhpdGVtOiBOYXZpZ2F0aW9uSXRlbSk6IHZvaWQge1xuICAgICAgICB0aGlzLl91cmlTZXJ2aWNlLmFjdGl2ZU5vZGUgPSB0aGlzLl9jdXJyZW50Tm9kZTtcbiAgICAgICAgaWYgKHRoaXMuaGFzSXRlbUNoaWxkcmVuKGl0ZW0pKSB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gaXRlbS5yZXNvdXJjZS5pbW1lZGlhdGVEYXRhLmZpbmQoZiA9PiBmLnN0cmluZ0lkID09PSBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuSVRFTV9GSUVMRF9JRF9OT0RFX1BBVEgpPy52YWx1ZVxuICAgICAgICAgICAgdGhpcy5fdXJpU2VydmljZS5nZXROb2RlQnlQYXRoKHBhdGgpLnN1YnNjcmliZShub2RlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnROb2RlID0gbm9kZVxuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc0l0ZW1DaGlsZHJlbihpdGVtOiBOYXZpZ2F0aW9uSXRlbSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gaXRlbS5yZXNvdXJjZS5pbW1lZGlhdGVEYXRhLmZpbmQoZiA9PiBmLnN0cmluZ0lkID09PSBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuSVRFTV9GSUVMRF9JRF9IQVNfQ0hJTERSRU4pPy52YWx1ZVxuICAgIH1cblxuICAgIGlzSXRlbUFuZE5vZGVFcXVhbChpdGVtOiBOYXZpZ2F0aW9uSXRlbSwgbm9kZTogVXJpTm9kZVJlc291cmNlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBpdGVtLnJlc291cmNlLmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09IEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX05PREVfUEFUSCk/LnZhbHVlID09PSBub2RlLnVyaVBhdGhcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbG9hZExlZnRTaWRlKCkge1xuICAgICAgICBpZiAodGhpcy5fdXJpU2VydmljZS5pc1Jvb3QodGhpcy5fY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgICB0aGlzLmxlZnRJdGVtcyA9IFtdO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGVmdExvYWRpbmckLm9uKCk7XG4gICAgICAgIHRoaXMuX3VyaVNlcnZpY2UuZ2V0Q2FzZXNPZk5vZGUodGhpcy5jdXJyZW50Tm9kZS5wYXJlbnQsIE1FTlVfSURFTlRJRklFUlMsIDAsIDEpLnN1YnNjcmliZShwYWdlID0+IHtcbiAgICAgICAgICAgIHBhZ2U/LnBhZ2luYXRpb24/LnRvdGFsRWxlbWVudHMgPT09IDAgPyBvZihbXSkgOiB0aGlzLl91cmlTZXJ2aWNlLmdldENhc2VzT2ZOb2RlKHRoaXMuY3VycmVudE5vZGUucGFyZW50LCBNRU5VX0lERU5USUZJRVJTLCAwLCBwYWdlLnBhZ2luYXRpb24udG90YWxFbGVtZW50cykucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocCA9PiBwLmNvbnRlbnQpLFxuICAgICAgICAgICAgKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRJdGVtcyA9IHJlc3VsdC5maWx0ZXIoZm9sZGVyID0+IGZvbGRlci5pbW1lZGlhdGVEYXRhLmZpbmQoZiA9PiBmLnN0cmluZ0lkID09PSBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuSVRFTV9GSUVMRF9JRF9IQVNfQ0hJTERSRU4pPy52YWx1ZSA9PT0gdHJ1ZSkubWFwKGZvbGRlciA9PiB0aGlzLnJlc29sdmVJdGVtQ2FzZVRvTmF2aWdhdGlvbkl0ZW0oZm9sZGVyKSkuZmlsdGVyKGkgPT4gISFpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRJdGVtcy5zb3J0KChhLCBiKSA9PiAoYT8ubmF2aWdhdGlvbiBhcyBOYXZpZ2F0aW9uSXRlbSk/LnRpdGxlLmxvY2FsZUNvbXBhcmUoKGI/Lm5hdmlnYXRpb24gYXMgTmF2aWdhdGlvbkl0ZW0pPy50aXRsZSkpO1xuICAgICAgICAgICAgICAgIHRoaXMubGVmdExvYWRpbmckLm9mZigpO1xuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0SXRlbXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5sZWZ0SXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMubGVmdExvYWRpbmckLm9mZigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbG9hZFJpZ2h0U2lkZSgpIHtcbiAgICAgICAgdGhpcy5yaWdodExvYWRpbmckLm9uKCk7XG4gICAgICAgIHRoaXMubW9yZUl0ZW1zID0gW107XG4gICAgICAgIHRoaXMuX3VyaVNlcnZpY2UuZ2V0Q2FzZXNPZk5vZGUodGhpcy5jdXJyZW50Tm9kZSwgTUVOVV9JREVOVElGSUVSUywgMCwgMSkuc3Vic2NyaWJlKHBhZ2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKCdOdW1iZXIgb2YgaXRlbXMgZm9yIHVyaSAnICsgdGhpcy5fY3VycmVudE5vZGUudXJpUGF0aCArICc6ICcgKyBwYWdlPy5wYWdpbmF0aW9uPy50b3RhbEVsZW1lbnRzKTtcbiAgICAgICAgICAgIChwYWdlPy5wYWdpbmF0aW9uPy50b3RhbEVsZW1lbnRzID09PSAwID8gb2YoW10pIDogdGhpcy5fdXJpU2VydmljZS5nZXRDYXNlc09mTm9kZSh0aGlzLl9jdXJyZW50Tm9kZSwgTUVOVV9JREVOVElGSUVSUywgMCwgcGFnZS5wYWdpbmF0aW9uLnRvdGFsRWxlbWVudHMpLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHAgPT4gcC5jb250ZW50KSxcbiAgICAgICAgICAgICkpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IChyZXN1bHQgYXMgQ2FzZVtdKS5zb3J0KChhLCBiKSA9PiBhPy50aXRsZS5sb2NhbGVDb21wYXJlKGI/LnRpdGxlKSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiBSSUdIVF9TSURFX0lOSVRfUEFHRV9TSVpFKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhd1JpZ2h0SXRlbXM6IENhc2VbXSA9IHJlc3VsdC5zcGxpY2UoMCwgUklHSFRfU0lERV9JTklUX1BBR0VfU0laRSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmlnaHRJdGVtcyA9IHJhd1JpZ2h0SXRlbXMubWFwKGZvbGRlciA9PiB0aGlzLnJlc29sdmVJdGVtQ2FzZVRvTmF2aWdhdGlvbkl0ZW0oZm9sZGVyKSkuZmlsdGVyKGkgPT4gISFpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3JlSXRlbXMgPSByZXN1bHQubWFwKGZvbGRlciA9PiB0aGlzLnJlc29sdmVJdGVtQ2FzZVRvTmF2aWdhdGlvbkl0ZW0oZm9sZGVyKSkuZmlsdGVyKGkgPT4gISFpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0SXRlbXMgPSByZXN1bHQubWFwKGZvbGRlciA9PiB0aGlzLnJlc29sdmVJdGVtQ2FzZVRvTmF2aWdhdGlvbkl0ZW0oZm9sZGVyKSkuZmlsdGVyKGkgPT4gISFpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlQ3VzdG9tVmlld3NJblJpZ2h0U2lkZSgpXG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodExvYWRpbmckLm9mZigpO1xuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodEl0ZW1zID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5tb3JlSXRlbXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVDdXN0b21WaWV3c0luUmlnaHRTaWRlKClcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0TG9hZGluZyQub2ZmKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMucmlnaHRJdGVtcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5tb3JlSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZUN1c3RvbVZpZXdzSW5SaWdodFNpZGUoKVxuICAgICAgICAgICAgdGhpcy5yaWdodExvYWRpbmckLm9mZigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9hZE1vcmVJdGVtcygpIHtcbiAgICAgICAgaWYgKHRoaXMubW9yZUl0ZW1zLmxlbmd0aCA+IFJJR0hUX1NJREVfTkVXX1BBR0VfU0laRSkge1xuICAgICAgICAgICAgdGhpcy5yaWdodEl0ZW1zLnB1c2goLi4udGhpcy5tb3JlSXRlbXMuc3BsaWNlKDAsIFJJR0hUX1NJREVfTkVXX1BBR0VfU0laRSkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJpZ2h0SXRlbXMucHVzaCguLi50aGlzLm1vcmVJdGVtcylcbiAgICAgICAgICAgIHRoaXMubW9yZUl0ZW1zID0gW11cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBpc0FzY2VuZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXNPcmRlciA9PT0gTWVudU9yZGVyLkFzY2VuZGluZztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3dpdGNoT3JkZXIoKSB7XG4gICAgICAgIHRoaXMuaXRlbXNPcmRlciA9ICh0aGlzLml0ZW1zT3JkZXIgKyAxKSAlIDI7XG4gICAgICAgIGxldCBtdWx0aXBsaWVyID0gMVxuICAgICAgICBpZiAodGhpcy5pdGVtc09yZGVyID09PSBNZW51T3JkZXIuRGVzY2VuZGluZykge1xuICAgICAgICAgICAgbXVsdGlwbGllciA9IC0xXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yaWdodEl0ZW1zID0gdGhpcy5yaWdodEl0ZW1zLnNvcnQoKGEsIGIpID0+IG11bHRpcGxpZXIgKiAoYT8ubmF2aWdhdGlvbiBhcyBOYXZpZ2F0aW9uSXRlbSk/LnRpdGxlLmxvY2FsZUNvbXBhcmUoKGI/Lm5hdmlnYXRpb24gYXMgTmF2aWdhdGlvbkl0ZW0pPy50aXRsZSkpO1xuICAgICAgICB0aGlzLmxlZnRJdGVtcyA9IHRoaXMubGVmdEl0ZW1zLnNvcnQoKGEsIGIpID0+IG11bHRpcGxpZXIgKiAoYT8ubmF2aWdhdGlvbiBhcyBOYXZpZ2F0aW9uSXRlbSk/LnRpdGxlLmxvY2FsZUNvbXBhcmUoKGI/Lm5hdmlnYXRpb24gYXMgTmF2aWdhdGlvbkl0ZW0pPy50aXRsZSkpO1xuICAgICAgICB0aGlzLm1vcmVJdGVtcyA9IHRoaXMubW9yZUl0ZW1zLnNvcnQoKGEsIGIpID0+IG11bHRpcGxpZXIgKiAoYT8ubmF2aWdhdGlvbiBhcyBOYXZpZ2F0aW9uSXRlbSk/LnRpdGxlLmxvY2FsZUNvbXBhcmUoKGI/Lm5hdmlnYXRpb24gYXMgTmF2aWdhdGlvbkl0ZW0pPy50aXRsZSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlQ3VzdG9tVmlld3NJblJpZ2h0U2lkZSgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5fY2hpbGRDdXN0b21WaWV3c1t0aGlzLl9jdXJyZW50Tm9kZS51cmlQYXRoXSkge1xuICAgICAgICAgICAgdGhpcy5yaWdodEl0ZW1zLnB1c2goLi4uT2JqZWN0LnZhbHVlcyh0aGlzLl9jaGlsZEN1c3RvbVZpZXdzW3RoaXMuX2N1cnJlbnROb2RlLnVyaVBhdGhdKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZUl0ZW1DYXNlVG9OYXZpZ2F0aW9uSXRlbShpdGVtQ2FzZTogQ2FzZSk6IE5hdmlnYXRpb25JdGVtIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgaXRlbTogTmF2aWdhdGlvbkl0ZW0gPSB7XG4gICAgICAgICAgICBhY2Nlc3M6IHt9LFxuICAgICAgICAgICAgbmF2aWdhdGlvbjoge1xuICAgICAgICAgICAgICAgIGljb246IGl0ZW1DYXNlLmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09IEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX01FTlVfSUNPTik/LnZhbHVlIHx8IHRoaXMuZmlsdGVySWNvbixcbiAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRUcmFuc2xhdGlvbihpdGVtQ2FzZS5pbW1lZGlhdGVEYXRhLmZpbmQoZiA9PiBmLnN0cmluZ0lkID09PSBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuSVRFTV9GSUVMRF9JRF9NRU5VX05BTUUpPy52YWx1ZSkgfHwgaXRlbUNhc2UudGl0bGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcm91dGluZzoge1xuICAgICAgICAgICAgICAgIHBhdGg6IHRoaXMuZ2V0SXRlbVJvdXRpbmdQYXRoKGl0ZW1DYXNlKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZDogaXRlbUNhc2Uuc3RyaW5nSWQsXG4gICAgICAgICAgICByZXNvdXJjZTogaXRlbUNhc2UsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc29sdmVkUm9sZXMgPSB0aGlzLnJlc29sdmVBY2Nlc3NSb2xlcyhpdGVtQ2FzZSwgR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfQUxMT1dFRF9ST0xFUyk7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkQmFubmVkUm9sZXMgPSB0aGlzLnJlc29sdmVBY2Nlc3NSb2xlcyhpdGVtQ2FzZSwgR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfQkFOTkVEX1JPTEVTKTtcbiAgICAgICAgaWYgKCEhcmVzb2x2ZWRSb2xlcykgaXRlbS5hY2Nlc3NbJ3JvbGUnXSA9IHJlc29sdmVkUm9sZXM7XG4gICAgICAgIGlmICghIXJlc29sdmVkQmFubmVkUm9sZXMpIGl0ZW0uYWNjZXNzWydiYW5uZWRSb2xlJ10gPSByZXNvbHZlZEJhbm5lZFJvbGVzO1xuICAgICAgICBpZiAoIXRoaXMuX2FjY2Vzc1NlcnZpY2UuY2FuQWNjZXNzVmlldyhpdGVtLCBpdGVtLnJvdXRpbmdQYXRoKSkgcmV0dXJuO1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRyYW5zbGF0aW9uKHZhbHVlOiBJMThuRmllbGRWYWx1ZSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcuc3BsaXQoJy0nKVswXTtcbiAgICAgICAgcmV0dXJuIGxvY2FsZSBpbiB2YWx1ZS50cmFuc2xhdGlvbnMgPyB2YWx1ZS50cmFuc2xhdGlvbnNbbG9jYWxlXSA6IHZhbHVlLmRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZUFjY2Vzc1JvbGVzKGZpbHRlcjogQ2FzZSwgcm9sZVR5cGU6IHN0cmluZyk6IEFycmF5PFJvbGVBY2Nlc3M+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgYWxsb3dlZFJvbGVzID0gZmlsdGVyLmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09IHJvbGVUeXBlKT8ub3B0aW9ucztcbiAgICAgICAgaWYgKCFhbGxvd2VkUm9sZXMgfHwgT2JqZWN0LmtleXMoYWxsb3dlZFJvbGVzKS5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHJvbGVzID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKGFsbG93ZWRSb2xlcykuZm9yRWFjaChjb21iaW5lZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGNvbWJpbmVkLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICByb2xlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzSWQ6IHBhcnRzWzFdLFxuICAgICAgICAgICAgICAgIHJvbGVJZDogcGFydHNbMF0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByb2xlcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0SXRlbVJvdXRpbmdQYXRoKGl0ZW1DYXNlOiBDYXNlKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zSWQgPSBTRVRUSU5HU19UUkFOU0lUSU9OX0lEO1xuICAgICAgICBjb25zdCB0YXNrSWQgPSBpdGVtQ2FzZS50YXNrcy5maW5kKHRhc2tQYWlyID0+IHRhc2tQYWlyLnRyYW5zaXRpb24gPT09IHRyYW5zSWQpLnRhc2s7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuX2R5bmFtaWNSb3V0aW5nU2VydmljZS5yb3V0ZTtcbiAgICAgICAgcmV0dXJuIGAvJHt1cmx9LyR7dGFza0lkfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciB0aGUgYmFjayBidXR0b24gc2hvdWxkIGJlIGRpc3BsYXllZFxuICAgICAqIEByZXR1cm5zIGJvb2xlYW4gaWYgdGhlIGJhY2sgYnV0dG9uIHNob3VsZCBiZSBkaXNwbGF5ZWRcbiAgICAgKiAqL1xuICAgIGlzT25aZXJvTGV2ZWwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2N1cnJlbnROb2RlPy5sZXZlbCA/IHRoaXMuX2N1cnJlbnROb2RlLmxldmVsID09IDAgOiB0cnVlO1xuICAgIH1cblxuICAgIGlzTGVmdEl0ZW1zRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlZnRJdGVtcyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMubGVmdEl0ZW1zLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBpc1JpZ2h0SXRlbXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmlnaHRJdGVtcyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMucmlnaHRJdGVtcy5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgdXJpTm9kZVRyYWNrQnkoaW5kZXg6IG51bWJlciwgbm9kZTogVXJpTm9kZVJlc291cmNlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmlkO1xuICAgIH1cblxuICAgIGl0ZW1zVHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBOYXZpZ2F0aW9uSXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS5pZDtcbiAgICB9XG5cbiAgICBvblJlc2l6ZUV2ZW50KGV2ZW50OiBSZXNpemVFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQucmVjdGFuZ2xlLndpZHRoID4gUklHSFRfRFJBV0VSX01BWF9XSURUSCkge1xuICAgICAgICAgICAgdGhpcy5fY29uZmlnUmlnaHRNZW51LndpZHRoID0gUklHSFRfRFJBV0VSX01BWF9XSURUSDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5yZWN0YW5nbGUud2lkdGggPCBSSUdIVF9EUkFXRVJfREVGQVVMVF9NSU5fV0lEVEgpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbmZpZ1JpZ2h0TWVudS53aWR0aCA9IFJJR0hUX0RSQVdFUl9ERUZBVUxUX01JTl9XSURUSDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbmZpZ1JpZ2h0TWVudS53aWR0aCA9IGV2ZW50LnJlY3RhbmdsZS53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPIGltcGxlbWVudCBzYXZpbmcgZHJhd2VyIHdpZHRoIHRvIHVzZXIgcHJlZmVyZW5jZXNcbiAgICAgICAgLy8gdGhpcy51c2VyUHJlZmVyZW5jZVNlcnZpY2UuX2RyYXdlcldpZHRoQ2hhbmdlZCQubmV4dCh0aGlzLndpZHRoKTtcbiAgICAgICAgLy8gdGhpcy5jb250ZW50V2lkdGgubmV4dCh0aGlzLndpZHRoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZVVyaUZvckNoaWxkVmlld3MoY29uZmlnUGF0aDogc3RyaW5nLCBjaGlsZFZpZXc6IFZpZXcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFjaGlsZFZpZXcucHJvY2Vzc1VyaSkgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXMuX2FjY2Vzc1NlcnZpY2UuY2FuQWNjZXNzVmlldyhjaGlsZFZpZXcsIGNvbmZpZ1BhdGgpKSByZXR1cm47XG4gICAgICAgIGlmICghdGhpcy5fY2hpbGRDdXN0b21WaWV3c1tjaGlsZFZpZXcucHJvY2Vzc1VyaV0pIHtcbiAgICAgICAgICAgIHRoaXMuX2NoaWxkQ3VzdG9tVmlld3NbY2hpbGRWaWV3LnByb2Nlc3NVcmldID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2hpbGRDdXN0b21WaWV3c1tjaGlsZFZpZXcucHJvY2Vzc1VyaV1bY29uZmlnUGF0aF0gPSB7XG4gICAgICAgICAgICBpZDogY29uZmlnUGF0aCxcbiAgICAgICAgICAgIC4uLmNoaWxkVmlldyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZUhpZGRlbk1lbnVJdGVtRnJvbUNoaWxkVmlld3MoY29uZmlnUGF0aDogc3RyaW5nLCBjaGlsZFZpZXc6IFZpZXcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFjaGlsZFZpZXcubmF2aWdhdGlvbikgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXMuX2FjY2Vzc1NlcnZpY2UuY2FuQWNjZXNzVmlldyhjaGlsZFZpZXcsIGNvbmZpZ1BhdGgpKSByZXR1cm47XG4gICAgICAgIGlmICghISgoY2hpbGRWaWV3Py5uYXZpZ2F0aW9uIGFzIGFueSk/LmhpZGRlbikpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZGVuQ3VzdG9tSXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWQ6IGNvbmZpZ1BhdGgsXG4gICAgICAgICAgICAgICAgLi4uY2hpbGRWaWV3LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiJdfQ==
|