@colijnit/homedecorator 255.1.4 → 255.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/core/enum/message-type.enum.d.ts +3 -1
- package/app/core/interface/message-with-payload.interface.d.ts +6 -0
- package/app/core/service/homedecorator-app-event.service.d.ts +1 -0
- package/app/core/service/homedecorator-connector-adapter.service.d.ts +2 -0
- package/app/core/service/homedecorator-connector.service.d.ts +5 -4
- package/app/core/service/presets.service.d.ts +3 -1
- package/app/homedecorator.component.d.ts +3 -1
- package/app/plugins/core3d/service/floor.service.d.ts +3 -1
- package/app/plugins/core3d/service/post-processing.service.d.ts +16 -4
- package/app/plugins/core3d/service/ssr.service.d.ts +0 -1
- package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +10 -2
- package/app/plugins/model-uploader/model-previewer/model-preview.component.scss +180 -15
- package/app/plugins/model-uploader/model-uploader.module.d.ts +5 -1
- package/app/plugins/render/render-dialog/render-dialog.component.d.ts +4 -1
- package/app/plugins/room-planner/components/floorplanner/floorplanner.component.d.ts +3 -1
- package/app/plugins/room-planner/components/floorplanner/service/room.service.d.ts +1 -0
- package/app/plugins/room-planner/components/texture-editor/texture-editor.component.d.ts +4 -1
- package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +0 -3
- package/app/plugins/toolbar/draw-dialog/draw-dialog.component.d.ts +2 -0
- package/app/plugins/toolbar/draw-dialog/draw-dialog.component.scss +1 -1
- package/app/plugins/toolbar/toolbar/toolbar.component.d.ts +2 -0
- package/assets/icons/dash-button.svg +7 -0
- package/assets/icons/pen-ruler.svg +1 -0
- package/assets/icons/retry-button.svg +7 -0
- package/bundles/colijnit-homedecorator.umd.js +514 -423
- package/bundles/colijnit-homedecorator.umd.js.map +1 -1
- package/esm2015/app/app.version.js +3 -3
- package/esm2015/app/core/enum/message-type.enum.js +3 -1
- package/esm2015/app/core/interface/message-with-payload.interface.js +1 -1
- package/esm2015/app/core/service/3dm-api.js +4 -4
- package/esm2015/app/core/service/homedecorator-app-event.service.js +2 -1
- package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +25 -2
- package/esm2015/app/core/service/homedecorator-connector.service.js +25 -22
- package/esm2015/app/core/service/presets.service.js +13 -5
- package/esm2015/app/core/utils/material.utils.js +3 -3
- package/esm2015/app/homedecorator.component.js +25 -19
- package/esm2015/app/plugins/core3d/core3d/components/scenecontrol/scene-control.component.js +2 -2
- package/esm2015/app/plugins/core3d/items/custom-cylinder-floor-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/custom-cylinder-wall-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/custom-shape-floor-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/custom-shape-wall-item.js +2 -2
- package/esm2015/app/plugins/core3d/service/ar.service.js +2 -1
- package/esm2015/app/plugins/core3d/service/floor-tile-intersection.service.js +2 -2
- package/esm2015/app/plugins/core3d/service/floor.service.js +9 -4
- package/esm2015/app/plugins/core3d/service/post-processing.service.js +96 -35
- package/esm2015/app/plugins/core3d/service/scene.service.js +17 -11
- package/esm2015/app/plugins/core3d/service/ssr.service.js +1 -52
- package/esm2015/app/plugins/lite-selector/lite-selector/lite-selector.component.js +2 -2
- package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +264 -168
- package/esm2015/app/plugins/model-uploader/model-uploader.module.js +22 -3
- package/esm2015/app/plugins/render/render-dialog/render-dialog.component.js +19 -14
- package/esm2015/app/plugins/room-planner/components/custom-cylinder-creator/custom-cylinder-creator.component.js +4 -2
- package/esm2015/app/plugins/room-planner/components/custome-shape-creator/custom-shape-creator.component.js +2 -2
- package/esm2015/app/plugins/room-planner/components/floorplanner/floorplanner.component.js +24 -12
- package/esm2015/app/plugins/room-planner/components/floorplanner/service/room.service.js +5 -2
- package/esm2015/app/plugins/room-planner/components/texture-editor/texture-editor.component.js +31 -15
- package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +4 -15
- package/esm2015/app/plugins/toolbar/draw-dialog/draw-dialog.component.js +26 -20
- package/esm2015/app/plugins/toolbar/save-dialog/save-dialog.component.js +2 -2
- package/esm2015/app/plugins/toolbar/toolbar/toolbar.component.js +15 -8
- package/esm2015/app/shared/model-dialog/model-dialog-furniture-list.component.js +3 -3
- package/fesm2015/colijnit-homedecorator.js +682 -483
- package/fesm2015/colijnit-homedecorator.js.map +1 -1
- package/package.json +1 -1
|
@@ -29,19 +29,21 @@ import * as i2 from "../../../../core/service/message-bus.service";
|
|
|
29
29
|
import * as i3 from "../../../../core/service/configuration.service";
|
|
30
30
|
import * as i4 from "../../../../core/service/dimensioning.service";
|
|
31
31
|
import * as i5 from "../../../../core/service/view-mode.service";
|
|
32
|
-
import * as i6 from "
|
|
33
|
-
import * as i7 from "
|
|
34
|
-
import * as i8 from "@angular/material/
|
|
35
|
-
import * as i9 from "@angular/material/
|
|
36
|
-
import * as i10 from "@angular/
|
|
37
|
-
import * as i11 from "
|
|
32
|
+
import * as i6 from "./service/room.service";
|
|
33
|
+
import * as i7 from "../wall-length-input/wall-length-input.component";
|
|
34
|
+
import * as i8 from "@angular/material/button-toggle";
|
|
35
|
+
import * as i9 from "@angular/material/icon";
|
|
36
|
+
import * as i10 from "@angular/material/tooltip";
|
|
37
|
+
import * as i11 from "@angular/common";
|
|
38
|
+
import * as i12 from "../../../../core/pipe/localize.pipe";
|
|
38
39
|
export class FloorplannerComponent {
|
|
39
|
-
constructor(_floorplanService, _messageBusService, _configurationService, _dimensionService, _viewModeService) {
|
|
40
|
+
constructor(_floorplanService, _messageBusService, _configurationService, _dimensionService, _viewModeService, _roomService) {
|
|
40
41
|
this._floorplanService = _floorplanService;
|
|
41
42
|
this._messageBusService = _messageBusService;
|
|
42
43
|
this._configurationService = _configurationService;
|
|
43
44
|
this._dimensionService = _dimensionService;
|
|
44
45
|
this._viewModeService = _viewModeService;
|
|
46
|
+
this._roomService = _roomService;
|
|
45
47
|
this.selectedWallChange = new Subject();
|
|
46
48
|
this._viewScaleMin = 50;
|
|
47
49
|
this._viewScaleMax = 300;
|
|
@@ -155,7 +157,11 @@ export class FloorplannerComponent {
|
|
|
155
157
|
}
|
|
156
158
|
}
|
|
157
159
|
showStartMessage() {
|
|
158
|
-
this._diagramBackground
|
|
160
|
+
if (this._diagramBackground) {
|
|
161
|
+
this._diagramBackground.src = '';
|
|
162
|
+
}
|
|
163
|
+
this._floorplanService.reset();
|
|
164
|
+
this._draw();
|
|
159
165
|
this.showStartingMessages = true;
|
|
160
166
|
}
|
|
161
167
|
setMode(mode) {
|
|
@@ -629,7 +635,13 @@ export class FloorplannerComponent {
|
|
|
629
635
|
this.setSelectedMode(value);
|
|
630
636
|
}
|
|
631
637
|
setDiagramSettings(input) {
|
|
638
|
+
this.reset();
|
|
639
|
+
this._resetOrigin();
|
|
640
|
+
this._viewScale = 100;
|
|
641
|
+
this._updateCmPerPixel();
|
|
642
|
+
this._draw();
|
|
632
643
|
this._floorplanService.reset();
|
|
644
|
+
this._roomService.resetAllRooms();
|
|
633
645
|
this._diagramBackground = input.background;
|
|
634
646
|
this._diagramBackgroundHeight = input.backgroundHeight;
|
|
635
647
|
this._diagramBackgroundWidth = input.backgroundWidth;
|
|
@@ -1281,8 +1293,8 @@ export class FloorplannerComponent {
|
|
|
1281
1293
|
this._wallLength = null;
|
|
1282
1294
|
}
|
|
1283
1295
|
}
|
|
1284
|
-
FloorplannerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FloorplannerComponent, deps: [{ token: i1.FloorplanService }, { token: i2.MessageBusService }, { token: i3.ConfigurationService }, { token: i4.DimensioningService }, { token: i5.ViewModeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1285
|
-
FloorplannerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FloorplannerComponent, selector: "floor-planner", outputs: { selectedWallChange: "selectedWallChange" }, host: { listeners: { "document:keydown": "handleDocKeyDown($event)", "document:keyup": "handleDocKeyUp($event)", "window:resize": "resizeGrid()" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["floorplannerCanvas"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<canvas #floorplannerCanvas\r\n (contextmenu)=\"handleContextMenu($event)\"\r\n (mousedown)=\"handleMouseDown($event)\"\r\n (mousemove)=\"handleMouseMove($event)\"\r\n (mouseup)=\"handleMouseUp($event)\"\r\n (mouseleave)=\"handleMouseLeave($event)\"\r\n (wheel)=\"handleMouseWheel($event)\"\r\n (touchstart)=\"handleTouchStart($event)\"\r\n (touchmove)=\"handleTouchMove($event)\"\r\n (touchend)=\"handleTouchUp($event)\"\r\n (touchcancel)=\"handleTouchEnd($event)\"\r\n></canvas>\r\n\r\n<wall-length-input></wall-length-input>\r\n\r\n<div class=\"controls-top\">\r\n <mat-button-toggle-group class=\"mode-toggle\"\r\n (change)=\"changeFloorplannerMode($event.value)\"\r\n [value]=\"selectedMode\"\r\n >\r\n <mat-button-toggle [value]=\"floorplannerMode.Draw\" [matTooltip]=\"'DRAW_WALLS' | localize\">\r\n <mat-icon class=\"homedecorator-material-icons\">edit</mat-icon>\r\n </mat-button-toggle>\r\n <mat-button-toggle [value]=\"floorplannerMode.Move\" [matTooltip]=\"'SELECT_AND_MOVE_WALLS' | localize\">\r\n <mat-icon class=\"homedecorator-material-icons\" svgIcon=\"hand-pointer\"></mat-icon>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n</div>\r\n\r\n<div class=\"hint\" *ngIf=\"mode === floorplannerMode.Drawing\" (click)=\"changeFloorplannerMode(floorplannerMode.Draw)\">\r\n {{ 'CLICK_HERE_TO_EXIT_DRAWING_MODE_OR_PRESS_THE_ESC_KEY' | localize }}\r\n</div>\r\n\r\n<div class=\"hint\" *ngIf=\"mode === floorplannerMode.Draw && this.showStartingMessages\">\r\n {{ 'TAB_ANYWHERE_TO_START' | localize }}\r\n</div>\r\n", styles: [":host{display:flex;height:100%;width:100%;background:#fff}:host.hidden{visibility:hidden}canvas{width:inherit;height:inherit}.controls-top{pointer-events:none;position:absolute;top:80px;width:100%;display:flex;align-items:center;justify-content:center}.controls-top>*{pointer-events:all;background:#fff;margin:0 3px}.hint{position:absolute;bottom:20px;left:50%;margin-left:-200px;padding:10px 20px;background:#74B77F;border:1px solid #cccccc;border-radius:3px;text-align:center}.mode-toggle>.mat-button-toggle-checked{color:#fff;background-color:#3760a1}\n"], components: [{ type:
|
|
1296
|
+
FloorplannerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FloorplannerComponent, deps: [{ token: i1.FloorplanService }, { token: i2.MessageBusService }, { token: i3.ConfigurationService }, { token: i4.DimensioningService }, { token: i5.ViewModeService }, { token: i6.RoomService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1297
|
+
FloorplannerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FloorplannerComponent, selector: "floor-planner", outputs: { selectedWallChange: "selectedWallChange" }, host: { listeners: { "document:keydown": "handleDocKeyDown($event)", "document:keyup": "handleDocKeyUp($event)", "window:resize": "resizeGrid()" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["floorplannerCanvas"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<canvas #floorplannerCanvas\r\n (contextmenu)=\"handleContextMenu($event)\"\r\n (mousedown)=\"handleMouseDown($event)\"\r\n (mousemove)=\"handleMouseMove($event)\"\r\n (mouseup)=\"handleMouseUp($event)\"\r\n (mouseleave)=\"handleMouseLeave($event)\"\r\n (wheel)=\"handleMouseWheel($event)\"\r\n (touchstart)=\"handleTouchStart($event)\"\r\n (touchmove)=\"handleTouchMove($event)\"\r\n (touchend)=\"handleTouchUp($event)\"\r\n (touchcancel)=\"handleTouchEnd($event)\"\r\n></canvas>\r\n\r\n<wall-length-input></wall-length-input>\r\n\r\n<div class=\"controls-top\">\r\n <mat-button-toggle-group class=\"mode-toggle\"\r\n (change)=\"changeFloorplannerMode($event.value)\"\r\n [value]=\"selectedMode\"\r\n >\r\n <mat-button-toggle [value]=\"floorplannerMode.Draw\" [matTooltip]=\"'DRAW_WALLS' | localize\">\r\n <mat-icon class=\"homedecorator-material-icons\">edit</mat-icon>\r\n </mat-button-toggle>\r\n <mat-button-toggle [value]=\"floorplannerMode.Move\" [matTooltip]=\"'SELECT_AND_MOVE_WALLS' | localize\">\r\n <mat-icon class=\"homedecorator-material-icons\" svgIcon=\"hand-pointer\"></mat-icon>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n</div>\r\n\r\n<div class=\"hint\" *ngIf=\"mode === floorplannerMode.Drawing\" (click)=\"changeFloorplannerMode(floorplannerMode.Draw)\">\r\n {{ 'CLICK_HERE_TO_EXIT_DRAWING_MODE_OR_PRESS_THE_ESC_KEY' | localize }}\r\n</div>\r\n\r\n<div class=\"hint\" *ngIf=\"mode === floorplannerMode.Draw && this.showStartingMessages\">\r\n {{ 'TAB_ANYWHERE_TO_START' | localize }}\r\n</div>\r\n", styles: [":host{display:flex;height:100%;width:100%;background:#fff}:host.hidden{visibility:hidden}canvas{width:inherit;height:inherit}.controls-top{pointer-events:none;position:absolute;top:80px;width:100%;display:flex;align-items:center;justify-content:center}.controls-top>*{pointer-events:all;background:#fff;margin:0 3px}.hint{position:absolute;bottom:20px;left:50%;margin-left:-200px;padding:10px 20px;background:#74B77F;border:1px solid #cccccc;border-radius:3px;text-align:center}.mode-toggle>.mat-button-toggle-checked{color:#fff;background-color:#3760a1}\n"], components: [{ type: i7.WallLengthInputComponent, selector: "wall-length-input" }, { type: i8.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-labelledby", "tabIndex", "appearance", "checked", "disabled", "id", "name", "aria-label", "value"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i8.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "localize": i12.LocalizePipe } });
|
|
1286
1298
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FloorplannerComponent, decorators: [{
|
|
1287
1299
|
type: Component,
|
|
1288
1300
|
args: [{
|
|
@@ -1290,7 +1302,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
1290
1302
|
templateUrl: './floorplanner.component.html',
|
|
1291
1303
|
styleUrls: ['./floorplanner.component.scss']
|
|
1292
1304
|
}]
|
|
1293
|
-
}], ctorParameters: function () { return [{ type: i1.FloorplanService }, { type: i2.MessageBusService }, { type: i3.ConfigurationService }, { type: i4.DimensioningService }, { type: i5.ViewModeService }]; }, propDecorators: { canvasElement: [{
|
|
1305
|
+
}], ctorParameters: function () { return [{ type: i1.FloorplanService }, { type: i2.MessageBusService }, { type: i3.ConfigurationService }, { type: i4.DimensioningService }, { type: i5.ViewModeService }, { type: i6.RoomService }]; }, propDecorators: { canvasElement: [{
|
|
1294
1306
|
type: ViewChild,
|
|
1295
1307
|
args: ['floorplannerCanvas', { read: ElementRef, static: true }]
|
|
1296
1308
|
}], selectedWallChange: [{
|
|
@@ -1305,4 +1317,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
1305
1317
|
type: HostListener,
|
|
1306
1318
|
args: ['window:resize']
|
|
1307
1319
|
}] } });
|
|
1308
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvb3JwbGFubmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvcm9vbS1wbGFubmVyL2NvbXBvbmVudHMvZmxvb3JwbGFubmVyL2Zsb29ycGxhbm5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3Jvb20tcGxhbm5lci9jb21wb25lbnRzL2Zsb29ycGxhbm5lci9mbG9vcnBsYW5uZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFnQixTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBYSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBQyxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFFM0MsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUNMLCtCQUErQixFQUMvQixrQkFBa0IsRUFDbEIsU0FBUyxFQUNULFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUNsQixTQUFTLEVBQ1QsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxTQUFTLEVBQ1QsZUFBZSxFQUNmLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IsU0FBUyxFQUNULGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLG9CQUFv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O29CQUM1QyxTQUFTLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztpQkFDN0M7ME9BR1EsYUFBYTtzQkFEbkIsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBQztnQkFHMUQsa0JBQWtCO3NCQUR4QixNQUFNO2dCQW9HQSxnQkFBZ0I7c0JBRHRCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTXJDLGNBQWM7c0JBRHBCLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTW5DLFVBQVU7c0JBRGhCLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIE9uRGVzdHJveSwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1N1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7U2VsZWN0ZWRXYWxsRXZlbnR9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvaW50ZXJmYWNlL3NlbGVjdGVkLXdhbGwtZXZlbnQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtGbG9vcnBsYW5uZXJNb2RlfSBmcm9tICcuL2Zsb29ycGxhbm5lci1tb2RlJztcclxuaW1wb3J0IHtcclxuICBhbmdsZUxhYmVsRGlzdGFuY2VTY2FsZVRyZXNob2xkLFxyXG4gIGNsaWNrTWlzc1RvbGVyYW5jZSxcclxuICBjbVBlckZvb3QsXHJcbiAgY29ybmVyQ29sb3IsXHJcbiAgY29ybmVyQ29sb3JIb3ZlcixcclxuICBjb3JuZXJDb2xvclNlbGVjdGVkLFxyXG4gIGRlZmF1bHRXYWxsV2lkdGgsXHJcbiAgZGVmYXVsdFdhbGxXaWR0aEhvdmVyLFxyXG4gIGRpbWVuc2lvbkxpbmVEaXN0YW5jZSxcclxuICBkaW1lbnNpb25MaW5lV2lkdGgsXHJcbiAgZG9vckNvbG9yLFxyXG4gIGRvb3JDb2xvckhvdmVyLFxyXG4gIGRvdWJsZUNsaWNrRHVyYXRpb25NcyxcclxuICBkcmF3TW9kZUN1cnNvckhlaWdodCxcclxuICBkcmF3TW9kZUN1cnNvckltYWdlVXJsLFxyXG4gIGVkZ2VXaWR0aCxcclxuICBncmlkQ29sb3IsXHJcbiAgZ3JpZFNwYWNpbmcsXHJcbiAgZ3JpZFdpZHRoLFxyXG4gIGxhYmVsU2l6ZSxcclxuICBtYXhDb3JuZXJSYWRpdXMsXHJcbiAgbWluQ29ybmVyUmFkaXVzLFxyXG4gIG1pbk1vdXNlTW92ZURpc3RhbmNlLFxyXG4gIHBpeGVsc1BlckZvb3QsXHJcbiAgcm9vbUNvbG9yLFxyXG4gIHNlbGVjdGVkUm9vbUNvbG9yLFxyXG4gIHNuYXBJbmRpY2F0b3JDb2xvcixcclxuICBzbmFwSW5kaWNhdG9yUmFkaXVzLFxyXG4gIHNuYXBUb2xlcmFuY2UsXHJcbiAgd2FsbENvbG9yLFxyXG4gIHdhbGxDb2xvckhvdmVyLFxyXG4gIHdhbGxDb2xvclNlbGVjdGVkLFxyXG4gIHdhbGxTdHJva2VDb2xvcixcclxuICB3YWxsU3Ryb2tlQ29sb3JIb3ZlcixcclxuICB3YWxsU3Ryb2tlQ29sb3JTZWxlY3RlZCxcclxuICB3YWxsVGhpY2tuZXNzTXVsdGlwbGllcixcclxuICB3aW5kb3dDb2xvcixcclxuICB3aW5kb3dDb2xvckhvdmVyXHJcbn0gZnJvbSAnLi9jb25zdC9kZWZhdWx0cyc7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbktleX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9lbnVtL2NvbmZpZ3VyYXRpb24ta2V5LmVudW0nO1xyXG5pbXBvcnQge0RvdWJsZVNpZGUsIFZlY3RvcjIsIFZlY3RvcjN9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtTbmFwSW5kaWNhdG9yTW9kZX0gZnJvbSAnLi9zbmFwLWluZGljYXRvci1tb2RlJztcclxuaW1wb3J0IHtGbG9vcnBsYW5TZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2UvZmxvb3JwbGFuLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VCdXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvbWVzc2FnZS1idXMuc2VydmljZSc7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge0RpbWVuc2lvbmluZ1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS9kaW1lbnNpb25pbmcuc2VydmljZSc7XHJcbmltcG9ydCB7Vmlld01vZGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2Uvdmlldy1tb2RlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25EYXRhfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9jb25maWd1cmF0aW9uLWRhdGEuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtNZXNzYWdlVHlwZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9lbnVtL21lc3NhZ2UtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtGaWxlVXRpbHN9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvdXRpbHMvZmlsZS51dGlscyc7XHJcbmltcG9ydCB7UmVsYXRpdmVQb3NpdGlvblV0aWxzfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3V0aWxzL3JlbGF0aXZlLXBvc2l0aW9uLnV0aWxzJztcclxuaW1wb3J0IHtLZXl9IGZyb20gJy4uLy4uL2NvbnN0L2tleSc7XHJcbmltcG9ydCB7VXRpbHN9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9jb3JlL3V0aWxzJztcclxuaW1wb3J0IHtDb250ZXh0VXRpbHN9IGZyb20gJy4vdXRpbHMvY29udGV4dC51dGlscyc7XHJcbmltcG9ydCB7Q29ybmVyLCBIYWxmRWRnZSwgSW5XYWxsSXRlbSwgUm9vbSwgV2FsbCwgV2FsbEl0ZW19IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9pdGVtcy93YWxsLW9iamVjdHMnO1xyXG5pbXBvcnQge0l0ZW19IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9pdGVtcy9pdGVtJztcclxuaW1wb3J0IHtJbldhbGxGbG9vckl0ZW19IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9pdGVtcy9pbi13YWxsLWZsb29yLWl0ZW0nO1xyXG5pbXBvcnQge0FuZ2xlc30gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2NvcmUvYW5nbGVzJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Zsb29yLXBsYW5uZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mbG9vcnBsYW5uZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Zsb29ycGxhbm5lci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGbG9vcnBsYW5uZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoJ2Zsb29ycGxhbm5lckNhbnZhcycsIHtyZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWV9KVxyXG4gIHB1YmxpYyBjYW52YXNFbGVtZW50OiBFbGVtZW50UmVmO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBzZWxlY3RlZFdhbGxDaGFuZ2U6IFN1YmplY3Q8U2VsZWN0ZWRXYWxsRXZlbnQ+ID0gbmV3IFN1YmplY3Q8U2VsZWN0ZWRXYWxsRXZlbnQ+KCk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdTY2FsZU1pbiA9IDUwO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdTY2FsZU1heCA9IDMwMDtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9jdXJzb3JzID0ge1xyXG4gICAgW0Zsb29ycGxhbm5lck1vZGUuRHJhd106IGB1cmwoJHtkcmF3TW9kZUN1cnNvckltYWdlVXJsfSkgMCAke2RyYXdNb2RlQ3Vyc29ySGVpZ2h0fSwgYXV0b2AsXHJcbiAgICBbRmxvb3JwbGFubmVyTW9kZS5EcmF3aW5nXTogYHVybCgke2RyYXdNb2RlQ3Vyc29ySW1hZ2VVcmx9KSAwICR7ZHJhd01vZGVDdXJzb3JIZWlnaHR9LCBhdXRvYCxcclxuICAgIFtGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmVdOiAnZ3JhYicsXHJcbiAgICBbRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZpbmddOiAnZ3JhYmJpbmcnLFxyXG4gICAgW0Zsb29ycGxhbm5lck1vZGUuTW92ZV06ICdncmFiJyxcclxuICAgIFtGbG9vcnBsYW5uZXJNb2RlLk1vdmluZ106ICdncmFiYmluZydcclxuICB9O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbmZpZ1RvU3luYyA9IHtcclxuICAgIFtDb25maWd1cmF0aW9uS2V5LlNob3dEZXRhaWxlZFdhbGxNZWFzdXJlbWVudHNdOiAnZGV0YWlsZWRXYWxsTWVhc3VyZW1lbnRzTW9kZScsXHJcbiAgICBbQ29uZmlndXJhdGlvbktleS5TaG93V2FsbEl0ZW1NZWFzdXJlbWVudHNdOiAnc2hvd1dhbGxJdGVtTWVhc3VyZW1lbnRzJyxcclxuICAgIFtDb25maWd1cmF0aW9uS2V5LkNvcm5lclNuYXBwaW5nXTogJ3NuYXBDb3JuZXJzJyxcclxuICB9O1xyXG5cclxuICBwdWJsaWMgc2hvd1N0YXJ0aW5nTWVzc2FnZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdG91Y2hNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX2NhbnZhczogYW55O1xyXG4gIHByaXZhdGUgX2NvbnRleHQ6IGFueTtcclxuICBwcml2YXRlIF9vcmlnaW5YOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX29yaWdpblk6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfdmlld1NjYWxlOiBudW1iZXIgPSAxMDA7XHJcbiAgcHJpdmF0ZSBfYWN0aXZlRmxvb3IgPSBudWxsO1xyXG4gIHByaXZhdGUgX2FjdGl2ZUl0ZW07XHJcbiAgcHJpdmF0ZSBfYWN0aXZlV2FsbDtcclxuICBwcml2YXRlIF9zZWxlY3RlZFdhbGw7XHJcbiAgcHJpdmF0ZSBfYWN0aXZlQ29ybmVyO1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkQ29ybmVyO1xyXG4gIHByaXZhdGUgX29mZnNldFg6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfb2Zmc2V0WTogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9tb3VzZVg6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfbW91c2VZOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX3Jhd01vdXNlOiBWZWN0b3IyID0gbmV3IFZlY3RvcjIoMCwgMCk7XHJcbiAgcHJpdmF0ZSBfbW91c2VEb3duOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfbW91c2VEb3duUG9zaXRpb246IFZlY3RvcjIgPSBuZXcgVmVjdG9yMigpO1xyXG4gIHByaXZhdGUgX3N0YXJ0RHJhZ01vdXNlOiBWZWN0b3IyID0gbmV3IFZlY3RvcjIoKTtcclxuICBwcml2YXRlIF9zdGFydERyYWdDb3JuZXI6IFZlY3RvcjIgPSBuZXcgVmVjdG9yMigpO1xyXG4gIHByaXZhdGUgX2xhc3RNb3VzZVVwVGltZXN0YW1wOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfbW92aW5nU3RhdGVDaGFuZ2VzOiB7IFtpbmRleDogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XHJcbiAgcHJpdmF0ZSBfbGFzdFg6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfbGFzdFk6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfdGFyZ2V0WDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF90YXJnZXRZOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX3NuYXBJbmRpY2F0b3JNb2RlOiBTbmFwSW5kaWNhdG9yTW9kZTtcclxuICBwcml2YXRlIF9zbmFwUG9pbnQgPSBudWxsO1xyXG4gIHByaXZhdGUgX2xhc3ROb2RlID0gbnVsbDtcclxuICBwcml2YXRlIF93YWxsTGVuZ3RoOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIF9tb2RlOiBGbG9vcnBsYW5uZXJNb2RlID0gRmxvb3JwbGFubmVyTW9kZS5EcmF3O1xyXG4gIHByaXZhdGUgX2NtUGVyUGl4ZWw6IG51bWJlcjtcclxuICBwcml2YXRlIF9waXhlbHNQZXJDbTogbnVtYmVyO1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkRmxvb3IgPSBudWxsO1xyXG4gIHByaXZhdGUgX21vZGVCZWZvcmVSaWdodE1vdXNlTW92ZTtcclxuXHJcbiAgcHJpdmF0ZSBfZGlhZ3JhbUJhY2tncm91bmQ6IEhUTUxJbWFnZUVsZW1lbnQ7XHJcbiAgcHJpdmF0ZSBfZGlhZ3JhbUJhY2tncm91bmRTY2FsZTogbnVtYmVyID0gMTtcclxuICBwcml2YXRlIF9kaWFncmFtQmFja2dyb3VuZEN1cnJlbnRTY2FsZTogbnVtYmVyID0gMTAwO1xyXG4gIHByaXZhdGUgX2RpYWdyYW1CYWNrZ3JvdW5kSGVpZ2h0OiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfZGlhZ3JhbUJhY2tncm91bmRXaWR0aDogbnVtYmVyO1xyXG4gIHByaXZhdGUgX2RpYWdyYW1CYWNrZ3JvdW5kQWN0aXZlWm9vbTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9kaWFncmFtU2NhbGU6IG51bWJlcjtcclxuICBwcml2YXRlIF9jYW1lcmFab29tOiBudW1iZXI7XHJcblxyXG4gIHByaXZhdGUgX2xhc3RUb3VjaFBvaW50OiBWZWN0b3IyO1xyXG4gIHByaXZhdGUgX3JlYWR5VG9EcmF3OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHJlYWRvbmx5IGZsb29ycGxhbm5lck1vZGU6IHR5cGVvZiBGbG9vcnBsYW5uZXJNb2RlID0gRmxvb3JwbGFubmVyTW9kZTtcclxuICBwdWJsaWMgcmVhZG9ubHkgaW5pdGlhbFZpZXdTY2FsZSA9IDEwMDtcclxuICBwdWJsaWMgcmVhZG9ubHkgc2NhbGluZ0ZhY3RvciA9IDEuMjtcclxuXHJcbiAgcHVibGljIGRldGFpbGVkV2FsbE1lYXN1cmVtZW50c01vZGU6IGJvb2xlYW47XHJcbiAgcHVibGljIHNob3dXYWxsSXRlbU1lYXN1cmVtZW50czogYm9vbGVhbjtcclxuICBwdWJsaWMgc25hcENvcm5lcnM6IGJvb2xlYW47XHJcbiAgcHVibGljIHNlbGVjdGVkTW9kZTogRmxvb3JwbGFubmVyTW9kZSA9IEZsb29ycGxhbm5lck1vZGUuRHJhdztcclxuXHJcbiAgcHVibGljIHNldCBtb2RlKHZhbHVlOiBGbG9vcnBsYW5uZXJNb2RlKSB7XHJcbiAgICB0aGlzLl9tb2RlID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5fY2FudmFzKSB7XHJcbiAgICAgIHRoaXMuX2NhbnZhcy5zdHlsZS5jdXJzb3IgPSB0aGlzLl9jdXJzb3JzW3RoaXMubW9kZV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG1vZGUoKTogRmxvb3JwbGFubmVyTW9kZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FudFpvb21JbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl92aWV3U2NhbGUgPiB0aGlzLl92aWV3U2NhbGVNYXg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNhbnRab29tT3V0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdTY2FsZSA8IHRoaXMuX3ZpZXdTY2FsZU1pbjtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyBoYW5kbGVEb2NLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZUtleURvd24oZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5dXAnLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyBoYW5kbGVEb2NLZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5oYW5kbGVLZXlVcChldmVudCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcclxuICBwdWJsaWMgcmVzaXplR3JpZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2hhbmRsZVdpbmRvd1Jlc2l6ZSgpO1xyXG4gICAgdGhpcy5yZXNldCgpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9mbG9vcnBsYW5TZXJ2aWNlOiBGbG9vcnBsYW5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZUJ1c1NlcnZpY2U6IE1lc3NhZ2VCdXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlndXJhdGlvblNlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZGltZW5zaW9uU2VydmljZTogRGltZW5zaW9uaW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgX3ZpZXdNb2RlU2VydmljZTogVmlld01vZGVTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLl91cGRhdGVDbVBlclBpeGVsKCk7XHJcblxyXG4gICAgT2JqZWN0LmtleXModGhpcy5fY29uZmlnVG9TeW5jKS5mb3JFYWNoKChrZXk6IENvbmZpZ3VyYXRpb25LZXkpID0+IHtcclxuICAgICAgY29uc3QgcHJvcE5hbWUgPSB0aGlzLl9jb25maWdUb1N5bmNba2V5XTtcclxuICAgICAgdGhpc1twcm9wTmFtZV0gPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShrZXkpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgIHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLm9uQ2hhbmdlLnN1YnNjcmliZSgoY2hhbmdlZDogQ29uZmlndXJhdGlvbkRhdGEpID0+IHtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLl9jb25maWdUb1N5bmMpLmZvckVhY2goKGtleTogQ29uZmlndXJhdGlvbktleSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGtleSBpbiBjaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3BOYW1lID0gdGhpcy5fY29uZmlnVG9TeW5jW2tleV07XHJcbiAgICAgICAgICAgIHRoaXNbcHJvcE5hbWVdID0gY2hhbmdlZFtrZXldO1xyXG4gICAgICAgICAgICB0aGlzLl9kcmF3KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLnJvb21zVXBkYXRlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fZHJhdygpKSxcclxuICAgICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5yZWRyYXcuc3Vic2NyaWJlKHIgPT4gdGhpcy5fZHJhdygpKSxcclxuICAgICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5yb29tTG9hZGVkLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlc2V0KCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuV2FsbExlbmd0aElucHV0VmFsdWVDaGFuZ2VkLCAobGVuZ3RoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fd2FsbExlbmd0aCA9IGxlbmd0aCAvIDEwMDtcclxuICAgICAgICB0aGlzLl91cGRhdGVXYWxsUG9zaXRpb24oKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXNTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5UYWtlU2NyZWVuc2hvdCwgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl92aWV3TW9kZVNlcnZpY2UuaXMyZFZpZXdBY3RpdmUoKSkge1xyXG4gICAgICAgICAgY29uc3QgZGF0YVVybCA9IHRoaXMuX2NhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnKTtcclxuICAgICAgICAgIEZpbGVVdGlscy5Eb3dubG9hZEZyb21EYXRhVXJpKGRhdGFVcmwsIGBNeVJvb21wbGFuJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9LmpwZWdgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuU3RhcnRXaXRoRW1wdHlSb29tLCAoKSA9PiB0aGlzLnNob3dTdGFydE1lc3NhZ2UoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXNTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5Mb2FkU2NhbGVkRGlhZ3JhbSwgKGlucHV0KSA9PiB0aGlzLnNldERpYWdyYW1TZXR0aW5ncyhpbnB1dCkpXHJcbiAgICApO1xyXG4gICAgdGhpcy50b3VjaE1vZGUgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LkVuYWJsZVRvdWNoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vicy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICAgIHRoaXMuY2FudmFzRWxlbWVudCA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNhbnZhc0VsZW1lbnQgJiYgdGhpcy5jYW52YXNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5fY2FudmFzID0gdGhpcy5jYW52YXNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIHRoaXMuX2NvbnRleHQgPSB0aGlzLmNhbnZhc0VsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICB0aGlzLl9vZmZzZXRYID0gdGhpcy5fY2FudmFzLmNsaWVudExlZnQ7XHJcbiAgICAgIHRoaXMuX29mZnNldFkgPSB0aGlzLl9jYW52YXMuY2xpZW50VG9wO1xyXG4gICAgICB0aGlzLl9oYW5kbGVXaW5kb3dSZXNpemUoKTtcclxuICAgICAgdGhpcy5fcmVhZHlUb0RyYXcgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dTdGFydE1lc3NhZ2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kaWFncmFtQmFja2dyb3VuZC5zcmMgPSAnJztcclxuICAgIHRoaXMuc2hvd1N0YXJ0aW5nTWVzc2FnZXMgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldE1vZGUobW9kZTogRmxvb3JwbGFubmVyTW9kZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2xlYW5XYWxsTGVuZ3RoKCk7XHJcbiAgICB0aGlzLl9sYXN0Tm9kZSA9IG51bGw7XHJcbiAgICB0aGlzLm1vZGUgPSBtb2RlO1xyXG4gICAgdGhpcy5fdXBkYXRlVGFyZ2V0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzaXplVmlldygpIHtcclxuICAgIHRoaXMuX2hhbmRsZVdpbmRvd1Jlc2l6ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fdmlld1NjYWxlID0gdGhpcy5fZ2V0SW5pdGlhbFZpZXdTY2FsZSgpO1xyXG4gICAgdGhpcy5yZXNpemVWaWV3KCk7XHJcbiAgICB0aGlzLnNldERlZmF1bHRNb2RlKCk7XHJcbiAgICB0aGlzLl9yZXNldE9yaWdpbigpO1xyXG4gICAgdGhpcy5fZHJhdygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHpvb21JbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNhbnRab29tSW4pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY2xlYXIoKTtcclxuICAgIHRoaXMuX3ZpZXdTY2FsZSAqPSB0aGlzLnNjYWxpbmdGYWN0b3I7XHJcbiAgICB0aGlzLl9kaWFncmFtQmFja2dyb3VuZFNjYWxlID0gdGhpcy5fZGlhZ3JhbUJhY2tncm91bmRTY2FsZSAqIHRoaXMuc2NhbGluZ0ZhY3RvcjtcclxuICAgIHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kQWN0aXZlWm9vbSA9IHRydWU7XHJcbiAgICB0aGlzLl9zY2FsZSh0aGlzLnNjYWxpbmdGYWN0b3IsIHRoaXMuc2NhbGluZ0ZhY3Rvcik7XHJcbiAgICB0aGlzLl9zY2FsZU9yaWdpbigpO1xyXG4gICAgdGhpcy5yZXNpemVWaWV3KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgem9vbU91dCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNhbnRab29tT3V0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2NsZWFyKCk7XHJcbiAgICB0aGlzLl92aWV3U2NhbGUgLz0gdGhpcy5zY2FsaW5nRmFjdG9yO1xyXG4gICAgdGhpcy5fZGlhZ3JhbUJhY2tncm91bmRTY2FsZSA9IHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kU2NhbGUgKiAoMSAvIHRoaXMuc2NhbGluZ0ZhY3Rvcik7XHJcbiAgICB0aGlzLl9kaWFncmFtQmFja2dyb3VuZEFjdGl2ZVpvb20gPSB0cnVlO1xyXG4gICAgdGhpcy5fc2NhbGUoMSAvIHRoaXMuc2NhbGluZ0ZhY3RvciwgMSAvIHRoaXMuc2NhbGluZ0ZhY3Rvcik7XHJcbiAgICB0aGlzLl9zY2FsZU9yaWdpbigpO1xyXG4gICAgdGhpcy5yZXNpemVWaWV3KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgem9vbVJlc2V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2xlYXIoKTtcclxuICAgIHRoaXMuX3NjYWxlKDEgLyB0aGlzLl92aWV3U2NhbGUsIDEgLyB0aGlzLl92aWV3U2NhbGUpO1xyXG4gICAgdGhpcy5yZXNldCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdENvcm5lcihjb3JuZXIpIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkQ29ybmVyID0gY29ybmVyO1xyXG4gICAgdGhpcy5fZHJhdygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFNlbGVjdGVkTW9kZShtb2RlOiBGbG9vcnBsYW5uZXJNb2RlKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkTW9kZSA9IG1vZGU7XHJcbiAgICB0aGlzLnNldE1vZGUobW9kZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGVmYXVsdE1vZGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zbmFwUG9pbnQgPSBudWxsO1xyXG4gICAgdGhpcy5zZXRNb2RlKHRoaXMuc2VsZWN0ZWRNb2RlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVDb250ZXh0TWVudShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5fbGFzdFggPSB0aGlzLl9yYXdNb3VzZS54O1xyXG4gICAgdGhpcy5fbGFzdFkgPSB0aGlzLl9yYXdNb3VzZS55O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZU1vdXNlRG93bihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5fbGFzdFggPSB0aGlzLl9yYXdNb3VzZS54O1xyXG4gICAgdGhpcy5fbGFzdFkgPSB0aGlzLl9yYXdNb3VzZS55O1xyXG4gICAgaWYgKGV2ZW50LmJ1dHRvbiA9PT0gMikgeyAvLyByaWdodCBtb3VzZSBidXR0b24gbW92ZXMgdGhlIGNhbWVyYSBieSBkZWZhdWx0XHJcbiAgICAgIHRoaXMuX21vZGVCZWZvcmVSaWdodE1vdXNlTW92ZSA9IHRoaXMubW9kZTtcclxuICAgICAgdGhpcy5zZXRNb2RlKEZsb29ycGxhbm5lck1vZGUuQ2FtZXJhTW92aW5nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX21vdXNlRG93biA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuQ2FtZXJhTW92ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0TW9kZShGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmluZyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX21vdXNlRG93blBvc2l0aW9uLmNvcHkoUmVsYXRpdmVQb3NpdGlvblV0aWxzLkdldENsaWVudE1vdXNlUG9zaXRpb24oZXZlbnQpKTtcclxuICAgIGNvbnN0IGhhc0FjdGl2ZSA9IHRoaXMuX2FjdGl2ZVdhbGwgfHwgdGhpcy5fYWN0aXZlQ29ybmVyIHx8IHRoaXMuX2FjdGl2ZUl0ZW07XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLk1vdmUgJiYgaGFzQWN0aXZlKSB7XHJcbiAgICAgIHRoaXMuc2V0TW9kZShGbG9vcnBsYW5uZXJNb2RlLk1vdmluZyk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5Nb3ZlICYmICFoYXNBY3RpdmUpIHtcclxuICAgICAgdGhpcy5zZXRNb2RlKEZsb29ycGxhbm5lck1vZGUuQ2FtZXJhTW92aW5nKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkRyYXcpIHtcclxuICAgICAgdGhpcy5zZXRNb2RlKEZsb29ycGxhbm5lck1vZGUuRHJhd2luZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlVG91Y2hTdGFydChldmVudDogVG91Y2hFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudG91Y2hNb2RlKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB0aGlzLl9sYXN0WCA9IHRoaXMuX3Jhd01vdXNlLng7XHJcbiAgICAgIHRoaXMuX2xhc3RZID0gdGhpcy5fcmF3TW91c2UueTtcclxuICAgICAgdGhpcy5fbW91c2VEb3duUG9zaXRpb24uY29weShSZWxhdGl2ZVBvc2l0aW9uVXRpbHMuR2V0Q2xpZW50VG91Y2hQb3NpdGlvbihldmVudCwgdGhpcy5fY2FudmFzKSk7XHJcbiAgICAgIHRoaXMuX2xhc3RUb3VjaFBvaW50ID0gdGhpcy5fbW91c2VEb3duUG9zaXRpb247XHJcbiAgICAgIGNvbnN0IGhhc0FjdGl2ZSA9IHRoaXMuX2FjdGl2ZVdhbGwgfHwgdGhpcy5fYWN0aXZlQ29ybmVyIHx8IHRoaXMuX2FjdGl2ZUl0ZW07XHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuTW92ZSAmJiBoYXNBY3RpdmUpIHtcclxuICAgICAgICB0aGlzLnNldE1vZGUoRmxvb3JwbGFubmVyTW9kZS5Nb3ZpbmcpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5Nb3ZlICYmICFoYXNBY3RpdmUpIHtcclxuICAgICAgICB0aGlzLnNldE1vZGUoRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZpbmcpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5EcmF3KSB7XHJcbiAgICAgICAgdGhpcy5zZXRNb2RlKEZsb29ycGxhbm5lck1vZGUuRHJhd2luZyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVNb3VzZVVwKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLl9tb3VzZURvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuX2ZsdXNoTW92aW5nU3RhdGVDaGFuZ2VzKCk7XHJcblxyXG4gICAgLy8gZGV0ZWN0IG1vdXNlQ2xpY2tcclxuICAgIGlmICghdGhpcy5faGFzTW91c2VNb3ZlZChldmVudCkpIHtcclxuICAgICAgaWYgKHRoaXMuX21vdXNlQ2xpY2tIYW5kbGVkKGV2ZW50KSkge1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdE1vZGUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIG1vdmluZ1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5Nb3ZpbmcpIHtcclxuICAgICAgdGhpcy5zZXREZWZhdWx0TW9kZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRyYXdpbmdcclxuICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuRHJhd2luZykge1xyXG4gICAgICB0aGlzLl9pZk5vdERvdWJsZUNsaWNrKCgpID0+IHRoaXMuX2hhbmRsZURyYXdpbmdNb3VzZVVwKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVuZCBwYW5uaW5nXHJcbiAgICBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmUgfHxcclxuICAgICAgdGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmluZykge1xyXG4gICAgICBpZiAoZXZlbnQuYnV0dG9uID09PSAyKSB7IC8vIHJpZ2h0IG1vdXNlIGJ1dHRvbiBkb3duLCBqdXN0IHN0b3AgbW92aW5nIGNhbWVyYVxyXG4gICAgICAgIHRoaXMuc2V0TW9kZSh0aGlzLl9tb2RlQmVmb3JlUmlnaHRNb3VzZU1vdmUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdE1vZGUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZVRvdWNoVXAoZXZlbnQ6IFRvdWNoRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnRvdWNoTW9kZSkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgdGhpcy5fbW91c2VEb3duID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuX2ZsdXNoTW92aW5nU3RhdGVDaGFuZ2VzKCk7XHJcblxyXG5cclxuICAgICAgLy8gaWYgKHRoaXMuX3RvdWNoRXZlbnRIYW5kbGVkKGV2ZW50KSkge1xyXG4gICAgICAvLyAgIHRoaXMuc2V0RGVmYXVsdE1vZGUoKTtcclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgLy8gbW92aW5nXHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuTW92aW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0TW9kZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGRyYXdpbmdcclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5EcmF3aW5nKSB7XHJcbiAgICAgICAgLy8gdGhpcy5faWZOb3REb3VibGVDbGljaygoKSA9PiB0aGlzLl9oYW5kbGVEcmF3aW5nTW91c2VVcCgpKTtcclxuICAgICAgICB0aGlzLl9oYW5kbGVEcmF3aW5nTW91c2VVcCgpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGVuZCBwYW5uaW5nXHJcbiAgICAgIC8vIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuQ2FtZXJhTW92ZSB8fFxyXG4gICAgICAvLyAgIHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZpbmcpIHtcclxuICAgICAgLy8gICBpZiAoZXZlbnQuYnV0dG9uID09PSAyKSB7IC8vIHJpZ2h0IG1vdXNlIGJ1dHRvbiBkb3duLCBqdXN0IHN0b3AgbW92aW5nIGNhbWVyYVxyXG4gICAgICAvLyAgICAgdGhpcy5zZXRNb2RlKHRoaXMuX21vZGVCZWZvcmVSaWdodE1vdXNlTW92ZSk7XHJcbiAgICAgIC8vICAgfSBlbHNlIHtcclxuICAgICAgLy8gICAgIHRoaXMuc2V0RGVmYXVsdE1vZGUoKTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVNb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGlmICghdGhpcy5faGFzTW91c2VNb3ZlZChldmVudCkpIHtcclxuXHJcbiAgICB9XHJcbiAgICBjb25zdCBtb3VzZVBvc2l0aW9uID0gUmVsYXRpdmVQb3NpdGlvblV0aWxzLkdldENsaWVudE1vdXNlUG9zaXRpb24oZXZlbnQpO1xyXG4gICAgLy8gdXBkYXRlIG1vdXNlXHJcbiAgICB0aGlzLl9yYXdNb3VzZS5jb3B5KG1vdXNlUG9zaXRpb24pO1xyXG4gICAgdGhpcy5fbW91c2VYID0gKHRoaXMuX3Jhd01vdXNlLnggLSB0aGlzLl9vZmZzZXRYKSAqIHRoaXMuX2NtUGVyUGl4ZWwgKyB0aGlzLl9vcmlnaW5YICogdGhpcy5fY21QZXJQaXhlbDtcclxuICAgIHRoaXMuX21vdXNlWSA9ICh0aGlzLl9yYXdNb3VzZS55IC0gdGhpcy5fb2Zmc2V0WSkgKiB0aGlzLl9jbVBlclBpeGVsICsgdGhpcy5fb3JpZ2luWSAqIHRoaXMuX2NtUGVyUGl4ZWw7XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmUgJiYgdGhpcy5fbW91c2VEb3duKSB7XHJcbiAgICAgIHRoaXMuc2V0TW9kZShGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmluZyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkRyYXcgfHwgdGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkRyYXdpbmcpIHtcclxuICAgICAgdGhpcy5fdXBkYXRlV2FsbFBvc2l0aW9uKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLk1vdmUpIHtcclxuICAgICAgY29uc3QgaG92ZXJDb3JuZXIgPSB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLm92ZXJsYXBwZWRDb3JuZXIodGhpcy5fbW91c2VYLCB0aGlzLl9tb3VzZVkpO1xyXG4gICAgICBjb25zdCBob3ZlcldhbGwgPSB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLm92ZXJsYXBwZWRXYWxsKHRoaXMuX21vdXNlWCwgdGhpcy5fbW91c2VZKTtcclxuICAgICAgY29uc3QgaG92ZXJGbG9vciA9IHRoaXMuX2Zsb29ycGxhblNlcnZpY2Uub3ZlcmxhcHBlZEZsb29yKHRoaXMuX21vdXNlWCwgdGhpcy5fbW91c2VZKTtcclxuICAgICAgY29uc3QgaG92ZXJJdGVtID0gdGhpcy5fZmxvb3JwbGFuU2VydmljZS5vdmVybGFwcGVkSXRlbSh0aGlzLl9tb3VzZVgsIHRoaXMuX21vdXNlWSk7XHJcbiAgICAgIGxldCBkcmF3ID0gZmFsc2U7XHJcbiAgICAgIGlmIChob3ZlckNvcm5lciAhPT0gdGhpcy5fYWN0aXZlQ29ybmVyKSB7XHJcbiAgICAgICAgdGhpcy5fYWN0aXZlQ29ybmVyID0gaG92ZXJDb3JuZXI7XHJcbiAgICAgICAgZHJhdyA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgLy8gY29ybmVyIHRha2VzIHByZWNlbmRlbmNlXHJcbiAgICAgIGlmICh0aGlzLl9hY3RpdmVDb3JuZXIgPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChob3Zlckl0ZW0gIT09IHRoaXMuX2FjdGl2ZUl0ZW0pIHtcclxuICAgICAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0gPSBob3Zlckl0ZW07XHJcbiAgICAgICAgICB0aGlzLl9hY3RpdmVXYWxsID0gbnVsbDtcclxuICAgICAgICAgIGRyYXcgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fYWN0aXZlSXRlbSA9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLl9hY3RpdmVXYWxsID0gaG92ZXJXYWxsO1xyXG4gICAgICAgICAgdGhpcy5fc3RhcnREcmFnTW91c2UuY29weSh0aGlzLl9yYXdNb3VzZSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5fYWN0aXZlV2FsbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydERyYWdDb3JuZXIuc2V0KHRoaXMuX2FjdGl2ZVdhbGwuc3RhcnQueCwgdGhpcy5fYWN0aXZlV2FsbC5zdGFydC55KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRyYXcgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaG92ZXJGbG9vciAhPT0gdGhpcy5fYWN0aXZlRmxvb3IpIHtcclxuICAgICAgICAgIHRoaXMuX2FjdGl2ZUZsb29yID0gaG92ZXJGbG9vcjtcclxuICAgICAgICAgIGRyYXcgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9hY3RpdmVXYWxsID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9hY3RpdmVJdGVtID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZHJhdykge1xyXG4gICAgICAgIHRoaXMuX2RyYXcoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHBhbm5pbmdcclxuICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuQ2FtZXJhTW92aW5nICYmXHJcbiAgICAgICF0aGlzLl9hY3RpdmVDb3JuZXIgJiYgIXRoaXMuX2FjdGl2ZVdhbGwgJiYgIXRoaXMuX2FjdGl2ZUl0ZW0pIHtcclxuICAgICAgdGhpcy5fb3JpZ2luWCArPSAodGhpcy5fbGFzdFggLSB0aGlzLl9yYXdNb3VzZS54KTtcclxuICAgICAgdGhpcy5fb3JpZ2luWSArPSAodGhpcy5fbGFzdFkgLSB0aGlzLl9yYXdNb3VzZS55KTtcclxuICAgICAgdGhpcy5fbGFzdFggPSB0aGlzLl9yYXdNb3VzZS54O1xyXG4gICAgICB0aGlzLl9sYXN0WSA9IHRoaXMuX3Jhd01vdXNlLnk7XHJcbiAgICAgIHRoaXMuX2RyYXcoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkcmFnZ2luZ1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5Nb3ZpbmcpIHtcclxuICAgICAgaWYgKHRoaXMuX2FjdGl2ZUNvcm5lcikge1xyXG4gICAgICAgIHRoaXMuX2FjdGl2ZUNvcm5lci5tb3ZlKHRoaXMuX21vdXNlWCwgdGhpcy5fbW91c2VZKTtcclxuICAgICAgICB0aGlzLl9ub3RpY2VTdGF0ZSgnY29ybmVyIG1vdmVkJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYWN0aXZlV2FsbCkge1xyXG4gICAgICAgIGNvbnN0IHtzdGFydCwgZW5kfSA9IHRoaXMuX2FjdGl2ZVdhbGw7XHJcbiAgICAgICAgY29uc3QgbW91c2VEcmFnRGlmZiA9IG5ldyBWZWN0b3IyKCkuY29weSh0aGlzLl9yYXdNb3VzZSkuc3ViKHRoaXMuX3N0YXJ0RHJhZ01vdXNlKS5tdWx0aXBseVNjYWxhcih0aGlzLl9jbVBlclBpeGVsKTtcclxuICAgICAgICBjb25zdCBzdGFydEVuZENvcm5lckRpZmYgPSBuZXcgVmVjdG9yMihlbmQueCAtIHN0YXJ0LngsIGVuZC55IC0gc3RhcnQueSk7XHJcbiAgICAgICAgY29uc3QgbmV3U3RhcnQgPSBuZXcgVmVjdG9yMigpLmNvcHkodGhpcy5fc3RhcnREcmFnQ29ybmVyKS5hZGQobW91c2VEcmFnRGlmZik7XHJcbiAgICAgICAgY29uc3QgbmV3RW5kID0gbmV3IFZlY3RvcjIoKS5jb3B5KG5ld1N0YXJ0KS5hZGQoc3RhcnRFbmRDb3JuZXJEaWZmKTtcclxuICAgICAgICBjb25zdCB0b2xlcmFuY2UgPSAzMCAqIHRoaXMuX2NtUGVyUGl4ZWw7XHJcbiAgICAgICAgbGV0IHNuYXBwZWQgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5XYWxsU25hcHBpbmcpKSB7XHJcbiAgICAgICAgICBbW3N0YXJ0LCBuZXdTdGFydF0sIFtlbmQsIG5ld0VuZF1dLmZvckVhY2goKFtjb3JuZXIsIG5ld0Nvcm5lclBvc10pID0+IHtcclxuICAgICAgICAgICAgaWYgKHNuYXBwZWQpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgIC4uLmNvcm5lci53YWxsRW5kcy5tYXAodyA9PiB3LnN0YXJ0KSxcclxuICAgICAgICAgICAgICAuLi5jb3JuZXIud2FsbFN0YXJ0cy5tYXAodyA9PiB3LmVuZClcclxuICAgICAgICAgICAgXS5mb3JFYWNoKG90aGVyQ29ybmVyID0+IHtcclxuICAgICAgICAgICAgICBpZiAoc25hcHBlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAob3RoZXJDb3JuZXIgPT09IHN0YXJ0IHx8IG90aGVyQ29ybmVyID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKG90aGVyQ29ybmVyLnkgLSBuZXdDb3JuZXJQb3MueSkgPCB0b2xlcmFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHNuYXBwZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgbmV3U3RhcnQueSArPSBvdGhlckNvcm5lci55IC0gbmV3Q29ybmVyUG9zLnk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChNYXRoLmFicyhvdGhlckNvcm5lci54IC0gbmV3Q29ybmVyUG9zLngpIDwgdG9sZXJhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICBzbmFwcGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIG5ld1N0YXJ0LnggKz0gb3RoZXJDb3JuZXIueCAtIG5ld0Nvcm5lclBvcy54O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fYWN0aXZlV2FsbC5tb3ZlKG5ld1N0YXJ0LngsIG5ld1N0YXJ0LnkpO1xyXG4gICAgICAgIHRoaXMuX2xhc3RYID0gdGhpcy5fcmF3TW91c2UueDtcclxuICAgICAgICB0aGlzLl9sYXN0WSA9IHRoaXMuX3Jhd01vdXNlLnk7XHJcbiAgICAgICAgdGhpcy5fbm90aWNlU3RhdGUoJ3dhbGwgbW92ZWQnKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9hY3RpdmVJdGVtKSB7XHJcbiAgICAgICAgY29uc3QgY2xvc2VzdEhhbGZFZGdlID0gdGhpcy5fZmluZENsb3Nlc3RIYWxmRWRnZSh0aGlzLl9tb3VzZVgsIHRoaXMuX21vdXNlWSk7XHJcbiAgICAgICAgdGhpcy5fYWN0aXZlSXRlbS5tb3ZlVG8yZFBvc2l0aW9uKHRoaXMuX21vdXNlWCwgdGhpcy5fbW91c2VZLCBjbG9zZXN0SGFsZkVkZ2UpO1xyXG4gICAgICAgIHRoaXMuX2xhc3RYID0gdGhpcy5fcmF3TW91c2UueDtcclxuICAgICAgICB0aGlzLl9sYXN0WSA9IHRoaXMuX3Jhd01vdXNlLnk7XHJcbiAgICAgICAgdGhpcy5fbm90aWNlU3RhdGUoJ2l0ZW0gbW92ZWQnKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9kcmF3KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIGhhbmRsZVRvdWNoTW92ZShldmVudDogVG91Y2hFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudG91Y2hNb2RlKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICBpZiAoIXRoaXMuX2hhc01vdXNlTW92ZWQoZXZlbnQpKSB7XHJcblxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG1vdXNlUG9zaXRpb24gPSBSZWxhdGl2ZVBvc2l0aW9uVXRpbHMuR2V0Q2xpZW50VG91Y2hQb3NpdGlvbihldmVudCwgdGhpcy5fY2FudmFzKTtcclxuICAgICAgLy8gdXBkYXRlIG1vdXNlXHJcbiAgICAgIHRoaXMuX3Jhd01vdXNlLmNvcHkobW91c2VQb3NpdGlvbik7XHJcblxyXG4gICAgICB0aGlzLl9tb3VzZVggPSAodGhpcy5fcmF3TW91c2UueCAtIHRoaXMuX29mZnNldFgpICogdGhpcy5fY21QZXJQaXhlbCArIHRoaXMuX29yaWdpblggKiB0aGlzLl9jbVBlclBpeGVsO1xyXG4gICAgICB0aGlzLl9tb3VzZVkgPSAodGhpcy5fcmF3TW91c2UueSAtIHRoaXMuX29mZnNldFkpICogdGhpcy5fY21QZXJQaXhlbCArIHRoaXMuX29yaWdpblkgKiB0aGlzLl9jbVBlclBpeGVsO1xyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZlICYmIHRoaXMuX21vdXNlRG93bikge1xyXG4gICAgICAgIHRoaXMuc2V0TW9kZShGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmluZyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5EcmF3IHx8IHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5EcmF3aW5nKSB7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlV2FsbFBvc2l0aW9uKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuTW92ZSkge1xyXG4gICAgICAgIGNvbnN0IGhvdmVyQ29ybmVyID0gdGhpcy5fZmxvb3JwbGFuU2VydmljZS5vdmVybGFwcGVkQ29ybmVyKHRoaXMuX21vdXNlWCwgdGhpcy5fbW91c2VZKTtcclxuICAgICAgICBjb25zdCBob3ZlcldhbGwgPSB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLm92ZXJsYXBwZWRXYWxsKHRoaXMuX21vdXNlWCwgdGhpcy5fbW91c2VZKTtcclxuICAgICAgICBjb25zdCBob3ZlckZsb29yID0gdGhpcy5fZmxvb3JwbGFuU2VydmljZS5vdmVybGFwcGVkRmxvb3IodGhpcy5fbW91c2VYLCB0aGlzLl9tb3VzZVkpO1xyXG4gICAgICAgIGNvbnN0IGhvdmVySXRlbSA9IHRoaXMuX2Zsb29ycGxhblNlcnZpY2Uub3ZlcmxhcHBlZEl0ZW0odGhpcy5fbW91c2VYLCB0aGlzLl9tb3VzZVkpO1xyXG4gICAgICAgIGxldCBkcmF3ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGhvdmVyQ29ybmVyICE9PSB0aGlzLl9hY3RpdmVDb3JuZXIpIHtcclxuICAgICAgICAgIHRoaXMuX2FjdGl2ZUNvcm5lciA9IGhvdmVyQ29ybmVyO1xyXG4gICAgICAgICAgZHJhdyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvcm5lciB0YWtlcyBwcmVjZW5kZW5jZVxyXG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmVDb3JuZXIgPT0gbnVsbCkge1xyXG4gICAgICAgICAgaWYgKGhvdmVySXRlbSAhPT0gdGhpcy5fYWN0aXZlSXRlbSkge1xyXG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVJdGVtID0gaG92ZXJJdGVtO1xyXG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVXYWxsID0gbnVsbDtcclxuICAgICAgICAgICAgZHJhdyA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5fYWN0aXZlSXRlbSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVdhbGwgPSBob3ZlcldhbGw7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0RHJhZ01vdXNlLmNvcHkodGhpcy5fcmF3TW91c2UpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fYWN0aXZlV2FsbCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3N0YXJ0RHJhZ0Nvcm5lci5zZXQodGhpcy5fYWN0aXZlV2FsbC5zdGFydC54LCB0aGlzLl9hY3RpdmVXYWxsLnN0YXJ0LnkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRyYXcgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGhvdmVyRmxvb3IgIT09IHRoaXMuX2FjdGl2ZUZsb29yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUZsb29yID0gaG92ZXJGbG9vcjtcclxuICAgICAgICAgICAgZHJhdyA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2FjdGl2ZVdhbGwgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5fYWN0aXZlSXRlbSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkcmF3KSB7XHJcbiAgICAgICAgICB0aGlzLl9kcmF3KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBwYW5uaW5nXHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuQ2FtZXJhTW92aW5nICYmXHJcbiAgICAgICAgIXRoaXMuX2FjdGl2ZUNvcm5lciAmJiAhdGhpcy5fYWN0aXZlV2FsbCAmJiAhdGhpcy5fYWN0aXZlSXRlbSkge1xyXG4gICAgICAgIHRoaXMuX29yaWdpblggKz0gKHRoaXMuX2xhc3RYIC0gdGhpcy5fcmF3TW91c2UueCk7XHJcbiAgICAgICAgdGhpcy5fb3JpZ2luWSArPSAodGhpcy5fbGFzdFkgLSB0aGlzLl9yYXdNb3VzZS55KTtcclxuICAgICAgICB0aGlzLl9sYXN0WCA9IHRoaXMuX3Jhd01vdXNlLng7XHJcbiAgICAgICAgdGhpcy5fbGFzdFkgPSB0aGlzLl9yYXdNb3VzZS55O1xyXG4gICAgICAgIHRoaXMuX2RyYXcoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gZHJhZ2dpbmdcclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5Nb3ZpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5fYWN0aXZlQ29ybmVyKSB7XHJcbiAgICAgICAgICB0aGlzLl9hY3RpdmVDb3JuZXIubW92ZSh0aGlzLl9tb3VzZVgsIHRoaXMuX21vdXNlWSk7XHJcbiAgICAgICAgICB0aGlzLl9ub3RpY2VTdGF0ZSgnY29ybmVyIG1vdmVkJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9hY3RpdmVXYWxsKSB7XHJcbiAgICAgICAgICBjb25zdCB7c3RhcnQsIGVuZH0gPSB0aGlzLl9hY3RpdmVXYWxsO1xyXG4gICAgICAgICAgY29uc3QgbW91c2VEcmFnRGlmZiA9IG5ldyBWZWN0b3IyKCkuY29weSh0aGlzLl9yYXdNb3VzZSkuc3ViKHRoaXMuX3N0YXJ0RHJhZ01vdXNlKS5tdWx0aXBseVNjYWxhcih0aGlzLl9jbVBlclBpeGVsKTtcclxuICAgICAgICAgIGNvbnN0IHN0YXJ0RW5kQ29ybmVyRGlmZiA9IG5ldyBWZWN0b3IyKGVuZC54IC0gc3RhcnQueCwgZW5kLnkgLSBzdGFydC55KTtcclxuICAgICAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gbmV3IFZlY3RvcjIoKS5jb3B5KHRoaXMuX3N0YXJ0RHJhZ0Nvcm5lcikuYWRkKG1vdXNlRHJhZ0RpZmYpO1xyXG4gICAgICAgICAgY29uc3QgbmV3RW5kID0gbmV3IFZlY3RvcjIoKS5jb3B5KG5ld1N0YXJ0KS5hZGQoc3RhcnRFbmRDb3JuZXJEaWZmKTtcclxuICAgICAgICAgIGNvbnN0IHRvbGVyYW5jZSA9IDMwICogdGhpcy5fY21QZXJQaXhlbDtcclxuICAgICAgICAgIGxldCBzbmFwcGVkID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAodGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5XYWxsU25hcHBpbmcpKSB7XHJcbiAgICAgICAgICAgIFtbc3RhcnQsIG5ld1N0YXJ0XSwgW2VuZCwgbmV3RW5kXV0uZm9yRWFjaCgoW2Nvcm5lciwgbmV3Q29ybmVyUG9zXSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChzbmFwcGVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgIC4uLmNvcm5lci53YWxsRW5kcy5tYXAodyA9PiB3LnN0YXJ0KSxcclxuICAgICAgICAgICAgICAgIC4uLmNvcm5lci53YWxsU3RhcnRzLm1hcCh3ID0+IHcuZW5kKVxyXG4gICAgICAgICAgICAgIF0uZm9yRWFjaChvdGhlckNvcm5lciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc25hcHBlZCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAob3RoZXJDb3JuZXIgPT09IHN0YXJ0IHx8IG90aGVyQ29ybmVyID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKG90aGVyQ29ybmVyLnkgLSBuZXdDb3JuZXJQb3MueSkgPCB0b2xlcmFuY2UpIHtcclxuICAgICAgICAgICAgICAgICAgc25hcHBlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIG5ld1N0YXJ0LnkgKz0gb3RoZXJDb3JuZXIueSAtIG5ld0Nvcm5lclBvcy55O1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMob3RoZXJDb3JuZXIueCAtIG5ld0Nvcm5lclBvcy54KSA8IHRvbGVyYW5jZSkge1xyXG4gICAgICAgICAgICAgICAgICBzbmFwcGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgbmV3U3RhcnQueCArPSBvdGhlckNvcm5lci54IC0gbmV3Q29ybmVyUG9zLng7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fYWN0aXZlV2FsbC5tb3ZlKG5ld1N0YXJ0LngsIG5ld1N0YXJ0LnkpO1xyXG4gICAgICAgICAgdGhpcy5fbGFzdFggPSB0aGlzLl9yYXdNb3VzZS54O1xyXG4gICAgICAgICAgdGhpcy5fbGFzdFkgPSB0aGlzLl9yYXdNb3VzZS55O1xyXG4gICAgICAgICAgdGhpcy5fbm90aWNlU3RhdGUoJ3dhbGwgbW92ZWQnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2FjdGl2ZUl0ZW0pIHtcclxuICAgICAgICAgIGNvbnN0IGNsb3Nlc3RIYWxmRWRnZSA9IHRoaXMuX2ZpbmRDbG9zZXN0SGFsZkVkZ2UodGhpcy5fbW91c2VYLCB0aGlzLl9tb3VzZVkpO1xyXG4gICAgICAgICAgdGhpcy5fYWN0aXZlSXRlbS5tb3ZlVG8yZFBvc2l0aW9uKHRoaXMuX21vdXNlWCwgdGhpcy5fbW91c2VZLCBjbG9zZXN0SGFsZkVkZ2UpO1xyXG4gICAgICAgICAgdGhpcy5fbGFzdFggPSB0aGlzLl9yYXdNb3VzZS54O1xyXG4gICAgICAgICAgdGhpcy5fbGFzdFkgPSB0aGlzLl9yYXdNb3VzZS55O1xyXG4gICAgICAgICAgdGhpcy5fbm90aWNlU3RhdGUoJ2l0ZW0gbW92ZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZHJhdygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlTW91c2VMZWF2ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5fbW91c2VEb3duID0gZmFsc2U7XHJcbiAgICAvLyBlbmQgcGFubmluZ1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZlIHx8XHJcbiAgICAgIHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZpbmcpIHtcclxuICAgICAgdGhpcy5zZXREZWZhdWx0TW9kZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZVRvdWNoRW5kKGV2ZW50OiBUb3VjaEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50b3VjaE1vZGUpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIHRoaXMuX21vdXNlRG93biA9IGZhbHNlO1xyXG4gICAgICAvLyBlbmQgcGFubmluZ1xyXG4gICAgICBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmUgfHxcclxuICAgICAgICB0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuQ2FtZXJhTW92aW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0TW9kZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlTW91c2VXaGVlbChldmVudDogV2hlZWxFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgaWYgKGV2ZW50LmRlbHRhWSA+IDApIHtcclxuICAgICAgdGhpcy56b29tT3V0KCk7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmRlbHRhWSA8IDApIHtcclxuICAgICAgdGhpcy56b29tSW4oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcclxuICAgICAgY2FzZSBLZXkuU3BhY2U6XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZSAhPT0gRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZpbmcpIHtcclxuICAgICAgICAgIHRoaXMuc2V0TW9kZShGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBLZXkuRDpcclxuICAgICAgICBpZiAodGhpcy5tb2RlICE9PSBGbG9vcnBsYW5uZXJNb2RlLkRyYXcpIHtcclxuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRNb2RlKEZsb29ycGxhbm5lck1vZGUuRHJhdyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEtleS5TOlxyXG4gICAgICAgIGlmICh0aGlzLm1vZGUgIT09IEZsb29ycGxhbm5lck1vZGUuTW92ZSkge1xyXG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZE1vZGUoRmxvb3JwbGFubmVyTW9kZS5Nb3ZlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlS2V5VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xyXG4gICAgICBjYXNlIEtleS5Fc2M6XHJcbiAgICAgIGNhc2UgS2V5LlNwYWNlOlxyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdE1vZGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGFuZ2VGbG9vcnBsYW5uZXJNb2RlKHZhbHVlOiBGbG9vcnBsYW5uZXJNb2RlKSB7XHJcbiAgICB0aGlzLnNldFNlbGVjdGVkTW9kZSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGlhZ3JhbVNldHRpbmdzKGlucHV0OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UucmVzZXQoKTtcclxuICAgIHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kID0gaW5wdXQuYmFja2dyb3VuZDtcclxuICAgIHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kSGVpZ2h0ID0gaW5wdXQuYmFja2dyb3VuZEhlaWdodDtcclxuICAgIHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kV2lkdGggPSBpbnB1dC5iYWNrZ3JvdW5kV2lkdGg7XHJcbiAgICB0aGlzLl9kaWFncmFtU2NhbGUgPSBpbnB1dC5zY2FsZTtcclxuICAgIHRoaXMuX2NhbWVyYVpvb20gPSBpbnB1dC5jYW1lcmFab29tO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhd0JhY2tncm91bmQoKTogYW55IHtcclxuICAgIGlmICh0aGlzLl9kaWFncmFtQmFja2dyb3VuZEFjdGl2ZVpvb20pIHtcclxuICAgICAgaWYgKHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kQ3VycmVudFNjYWxlIDw9IHRoaXMuX3ZpZXdTY2FsZSkge1xyXG4gICAgICAgIHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kV2lkdGggPSB0aGlzLl9kaWFncmFtQmFja2dyb3VuZFdpZHRoICogdGhpcy5zY2FsaW5nRmFjdG9yO1xyXG4gICAgICAgIHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kSGVpZ2h0ID0gdGhpcy5fZGlhZ3JhbUJhY2tncm91bmRIZWlnaHQgKiB0aGlzLnNjYWxpbmdGYWN0b3I7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZGlhZ3JhbUJhY2tncm91bmRXaWR0aCA9IHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kV2lkdGggKiAoMSAvIHRoaXMuc2NhbGluZ0ZhY3Rvcik7XHJcbiAgICAgICAgdGhpcy5fZGlhZ3JhbUJhY2tncm91bmRIZWlnaHQgPSB0aGlzLl9kaWFncmFtQmFja2dyb3VuZEhlaWdodCAqICgxIC8gdGhpcy5zY2FsaW5nRmFjdG9yKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9kaWFncmFtQmFja2dyb3VuZEFjdGl2ZVpvb20gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kQ3VycmVudFNjYWxlID0gdGhpcy5fdmlld1NjYWxlO1xyXG5cclxuICAgIHRoaXMuX2NvbnRleHQuZHJhd0ltYWdlKFxyXG4gICAgICB0aGlzLl9kaWFncmFtQmFja2dyb3VuZCxcclxuICAgICAgTWF0aC5hYnModGhpcy5fb3JpZ2luWCkgLSAodGhpcy5fZGlhZ3JhbUJhY2tncm91bmRXaWR0aCAqIHRoaXMuX2RpYWdyYW1TY2FsZSAvIDIpLFxyXG4gICAgICBNYXRoLmFicyh0aGlzLl9vcmlnaW5ZKSAtICh0aGlzLl9kaWFncmFtQmFja2dyb3VuZEhlaWdodCAqIHRoaXMuX2RpYWdyYW1TY2FsZSAvIDIpLFxyXG4gICAgICB0aGlzLl9kaWFncmFtQmFja2dyb3VuZFdpZHRoICogdGhpcy5fZGlhZ3JhbVNjYWxlLFxyXG4gICAgICB0aGlzLl9kaWFncmFtQmFja2dyb3VuZEhlaWdodCAqIHRoaXMuX2RpYWdyYW1TY2FsZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZVdpbmRvd1Jlc2l6ZSgpIHtcclxuICAgIGlmICh0aGlzLl9jYW52YXMpIHtcclxuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5fY2FudmFzLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgIHRoaXMuX2NhbnZhcy5oZWlnaHQgPSBwYXJlbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgICB0aGlzLl9jYW52YXMud2lkdGggPSBwYXJlbnQuY2xpZW50V2lkdGg7XHJcbiAgICAgIHRoaXMuX2RyYXcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NsZWFyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2NvbnRleHQgJiYgdGhpcy5fY2FudmFzKSB7XHJcbiAgICAgIHRoaXMuX2NvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuX2NhbnZhcy53aWR0aCwgdGhpcy5fY2FudmFzLmhlaWdodCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVXYWxsUG9zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5fd2FsbExlbmd0aCkge1xyXG4gICAgICBjb25zdCBzdGFydFBvaW50ID0gdGhpcy5fbGFzdE5vZGU7XHJcbiAgICAgIGNvbnN0IGVuZFBvaW50ID0gVXRpbHMuUHJvbG9uZ1N0cmFpZ2h0TGluZShzdGFydFBvaW50LngsIHN0YXJ0UG9pbnQueSwgdGhpcy5fbW91c2VYLCB0aGlzLl9tb3VzZVksIHRoaXMuX3dhbGxMZW5ndGgpO1xyXG4gICAgICB0aGlzLl9tb3VzZVggPSBlbmRQb2ludC54O1xyXG4gICAgICB0aGlzLl9tb3VzZVkgPSBlbmRQb2ludC55O1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5fdXBkYXRlU25hcEluZGljYXRvcih0aGlzLl9tb3VzZVgsIHRoaXMuX21vdXNlWSk7XHJcbiAgICAvLyB1cGRhdGVUYXJnZXQgYWx3YXlzIGV4ZWMgdXBkYXRlU25hcEluZGljYXRvci4uLlxyXG4gICAgdGhpcy5fdXBkYXRlVGFyZ2V0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zY2FsZSh4OiBudW1iZXIsIHk6IG51bWJlcikge1xyXG4gICAgdGhpcy5fY29udGV4dC5zY2FsZSh4LCB5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RyYXcoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuX3JlYWR5VG9EcmF3KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2NsZWFyKCk7XHJcblxyXG4gICAgdGhpcy5fZHJhd0dyaWQoKTtcclxuICAgIGlmICh0aGlzLl9kaWFncmFtQmFja2dyb3VuZCkge1xyXG4gICAgICB0aGlzLl9kcmF3QmFja2dyb3VuZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UuZ2V0Um9vbXMoKS5mb3JFYWNoKHJvb20gPT4ge1xyXG4gICAgICB0aGlzLl9kcmF3Um9vbShyb29tKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UuZ2V0V2FsbHMoKS5mb3JFYWNoKCh3YWxsKSA9PiB7XHJcbiAgICAgIHRoaXMuX2RyYXdXYWxsKHdhbGwpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5nZXRDb3JuZXJzKCkuZm9yRWFjaChjb3JuZXIgPT4ge1xyXG4gICAgICB0aGlzLl9kcmF3Q29ybmVyKGNvcm5lcik7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLmdldFJvb21zKCkuZm9yRWFjaChyb29tID0+IHtcclxuICAgICAgdGhpcy5fZHJhd1Jvb21BbmdsZXMocm9vbS5jb3JuZXJzKTtcclxuICAgICAgdGhpcy5fZHJhd1Jvb21BcmVhKHJvb20pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5nZXRJdGVtcygpLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIHRoaXMuX2RyYXdJdGVtKGl0ZW0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd1dhbGxJdGVtTWVhc3VyZW1lbnRzICYmIHRoaXMuX2FjdGl2ZUl0ZW0pIHtcclxuICAgICAgdGhpcy5fZHJhd0l0ZW1NZWFzdXJlbWVudHModGhpcy5fYWN0aXZlSXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd1dhbGxJdGVtTWVhc3VyZW1lbnRzICYmIHRoaXMuX2FjdGl2ZVdhbGwgJiYgdGhpcy5tb2RlICE9PSBGbG9vcnBsYW5uZXJNb2RlLk1vdmluZykge1xyXG4gICAgICB0aGlzLl9hY3RpdmVXYWxsLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgdGhpcy5fZHJhd0l0ZW1NZWFzdXJlbWVudHMoaXRlbSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRyYXdNb2RlID0gdGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkRyYXcgfHwgdGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkRyYXdpbmc7XHJcbiAgICBpZiAoZHJhd01vZGUpIHtcclxuICAgICAgdGhpcy5fZHJhd1RhcmdldChcclxuICAgICAgICB0aGlzLl90YXJnZXRYLFxyXG4gICAgICAgIHRoaXMuX3RhcmdldFksIHtcclxuICAgICAgICAgIGxhc3ROb2RlOiB0aGlzLl9sYXN0Tm9kZSxcclxuICAgICAgICAgIHNuYXBQb2ludDogdGhpcy5fc25hcFBvaW50XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UuZ2V0V2FsbHMoKS5mb3JFYWNoKCh3YWxsKSA9PiB7XHJcbiAgICAgIHRoaXMuX2RyYXdFZGdlc0xhYmVscyh3YWxsKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhd0dyaWQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fY2FudmFzKSB7XHJcbiAgICAgIHRoaXMuX2NvbnRleHQuZmlsbFN0eWxlID0gJ3doaXRlJztcclxuICAgICAgdGhpcy5fY29udGV4dC5maWxsUmVjdCgwLCAwLCB0aGlzLl9jYW52YXMud2lkdGgsIHRoaXMuX2NhbnZhcy5oZWlnaHQpO1xyXG5cclxuICAgICAgY29uc3Qgb2Zmc2V0WCA9IHRoaXMuX2NhbGN1bGF0ZUdyaWRPZmZzZXQoLXRoaXMuX29yaWdpblgpO1xyXG4gICAgICBjb25zdCBvZmZzZXRZID0gdGhpcy5fY2FsY3VsYXRlR3JpZE9mZnNldCgtdGhpcy5fb3JpZ2luWSk7XHJcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5fY2FudmFzLndpZHRoO1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLl9jYW52YXMuaGVpZ2h0O1xyXG5cclxuICAgICAgZm9yIChsZXQgeCA9IDA7IHggPD0gKHdpZHRoIC8gZ3JpZFNwYWNpbmcpOyB4KyspIHtcclxuICAgICAgICBDb250ZXh0VXRpbHMuRHJhd0xpbmUodGhpcy5fY29udGV4dCwgZ3JpZFNwYWNpbmcgKiB4ICsgb2Zmc2V0WCwgMCwgZ3JpZFNwYWNpbmcgKiB4ICsgb2Zmc2V0WCwgaGVpZ2h0LCBncmlkV2lkdGgsIGdyaWRDb2xvcik7XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPD0gKGhlaWdodCAvIGdyaWRTcGFjaW5nKTsgeSsrKSB7XHJcbiAgICAgICAgQ29udGV4dFV0aWxzLkRyYXdMaW5lKHRoaXMuX2NvbnRleHQsIDAsIGdyaWRTcGFjaW5nICogeSArIG9mZnNldFksIHdpZHRoLCBncmlkU3BhY2luZyAqIHkgKyBvZmZzZXRZLCBncmlkV2lkdGgsIGdyaWRDb2xvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RyYXdSb29tKHJvb206IFJvb20pIHtcclxuICAgIGxldCB1c2VJbmZpbGw6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kICYmIHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kLnNyYyAhPT0gJycpIHtcclxuICAgICAgdXNlSW5maWxsID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IChyb29tID09PSB0aGlzLl9zZWxlY3RlZEZsb29yKTtcclxuICAgIENvbnRleHRVdGlscy5EcmF3UG9seWdvbih0aGlzLl9jb250ZXh0LFxyXG4gICAgICBVdGlscy5tYXAocm9vbS5jb3JuZXJzLCAoY29ybmVyOiBDb3JuZXIpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydFgoY29ybmVyLngpO1xyXG4gICAgICB9KSxcclxuICAgICAgVXRpbHMubWFwKHJvb20uY29ybmVycywgKGNvcm5lcjogQ29ybmVyKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRZKGNvcm5lci55KTtcclxuICAgICAgfSksXHJcbiAgICAgIHVzZUluZmlsbCxcclxuICAgICAgc2VsZWN0ZWQgPyBzZWxlY3RlZFJvb21Db2xvciA6IHJvb21Db2xvclxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RyYXdXYWxsKHdhbGw6IFdhbGwpIHtcclxuICAgIGNvbnN0IG1vdmVNb2RlID0gdGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLk1vdmUgfHwgdGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLk1vdmluZztcclxuICAgIGNvbnN0IGhvdmVyID0gbW92ZU1vZGUgJiYgd2FsbCA9PT0gdGhpcy5fYWN0aXZlV2FsbDtcclxuICAgIGNvbnN0IHNlbGVjdGVkID0gbW92ZU1vZGUgJiYgd2FsbCA9PT0gdGhpcy5fc2VsZWN0ZWRXYWxsO1xyXG5cclxuICAgIGxldCBmaWxsQ29sb3IgPSB3YWxsQ29sb3I7XHJcbiAgICBsZXQgc3Ryb2tlQ29sb3IgPSB3YWxsU3Ryb2tlQ29sb3I7XHJcblxyXG4gICAgaWYgKGhvdmVyKSB7XHJcbiAgICAgIGZpbGxDb2xvciA9IHdhbGxDb2xvckhvdmVyO1xyXG4gICAgICBzdHJva2VDb2xvciA9IHdhbGxTdHJva2VDb2xvckhvdmVyO1xyXG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICBmaWxsQ29sb3IgPSB3YWxsQ29sb3JTZWxlY3RlZDtcclxuICAgICAgc3Ryb2tlQ29sb3IgPSB3YWxsU3Ryb2tlQ29sb3JTZWxlY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2FsbC5mcm9udEVkZ2UpIHtcclxuICAgICAgdGhpcy5fZHJhd0VkZ2Uod2FsbC5mcm9udEVkZ2UsIGZpbGxDb2xvciwgc3Ryb2tlQ29sb3IpO1xyXG4gICAgfVxyXG4gICAgaWYgKHdhbGwuYmFja0VkZ2UpIHtcclxuICAgICAgdGhpcy5fZHJhd0VkZ2Uod2FsbC5iYWNrRWRnZSwgZmlsbENvbG9yLCBzdHJva2VDb2xvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kcmF3Q29ybmVyKGNvcm5lcjogQ29ybmVyKSB7XHJcbiAgICBjb25zdCBob3ZlciA9IChjb3JuZXIgPT09IHRoaXMuX2FjdGl2ZUNvcm5lcik7XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IChjb3JuZXIgPT09IHRoaXMuX3NlbGVjdGVkQ29ybmVyKTtcclxuICAgIGxldCBjb2xvciA9IGNvcm5lckNvbG9yO1xyXG4gICAgaWYgKGhvdmVyKSB7XHJcbiAgICAgIGNvbG9yID0gY29ybmVyQ29sb3JIb3ZlcjtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgY29sb3IgPSBjb3JuZXJDb2xvclNlbGVjdGVkO1xyXG4gICAgfVxyXG4gICAgQ29udGV4dFV0aWxzLkRyYXdDaXJjbGUoXHJcbiAgICAgIHRoaXMudG91Y2hNb2RlLFxyXG4gICAgICB0aGlzLl9jb250ZXh0LFxyXG4gICAgICB0aGlzLl9jb252ZXJ0WChjb3JuZXIueCksXHJcbiAgICAgIHRoaXMuX2NvbnZlcnRZKGNvcm5lci55KSxcclxuICAgICAgKGhvdmVyIHx8IHNlbGVjdGVkKSA/IHRoaXMuX2NvbXB1dGVDb3JuZXJSYWRpdXMoY29ybmVyKSA6IDAsXHJcbiAgICAgIGNvbG9yXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhd1Jvb21BbmdsZXMoY29ybmVyczogQ29ybmVyW10pIHtcclxuICAgIGNvcm5lcnMuZm9yRWFjaCgoY29ybmVyLCBpLCB2KSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpcnN0Q29ybmVyID0gKGkgLSAxID49IDApID8gdltpIC0gMV0gOiB2W3YubGVuZ3RoIC0gMV07XHJcbiAgICAgIGNvbnN0IHNlY29uZENvcm5lciA9IHZbKGkgKyAxKSAlIHYubGVuZ3RoXTtcclxuICAgICAgdGhpcy5fZHJhd1Jvb21BbmdsZUxhYmVsKFxyXG4gICAgICAgIGNvcm5lci54LCBjb3JuZXIueSxcclxuICAgICAgICBmaXJzdENvcm5lci54LCBmaXJzdENvcm5lci55LFxyXG4gICAgICAgIHNlY29uZENvcm5lci54LCBzZWNvbmRDb3JuZXIueSxcclxuICAgICAgICBjb3JuZXJzKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhd1Jvb21BcmVhKHJvb206IFJvb20pIHtcclxuICAgIGNvbnN0IHBvczogVmVjdG9yMiA9IG5ldyBWZWN0b3IyKHJvb20uY2VudGVyLngsIHJvb20uY2VudGVyLnkpO1xyXG4gICAgdGhpcy5fZHJhd0FyZWFMYWJlbChwb3MueCwgcG9zLnksIHJvb20uYXJlYSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kcmF3SXRlbShpdGVtOiBJdGVtKSB7XHJcbiAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIEluV2FsbEZsb29ySXRlbSkge1xyXG4gICAgICB0aGlzLl9kcmF3RG9vcihpdGVtKTtcclxuICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIEluV2FsbEl0ZW0pIHtcclxuICAgICAgdGhpcy5fZHJhd1dpbmRvdyhpdGVtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RyYXdJdGVtTWVhc3VyZW1lbnRzKGl0ZW06IEl0ZW0pIHtcclxuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgSW5XYWxsRmxvb3JJdGVtKSB7XHJcbiAgICAgIHRoaXMuX2RyYXdJdGVtU2l6ZUxhYmVsKGl0ZW0sIGRvb3JDb2xvcik7XHJcbiAgICAgIHRoaXMuX2RyYXdJdGVtVG9OZWlnaGJvdXJzRGlzdGFuY2VMYWJlbHMoaXRlbSk7XHJcbiAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBJbldhbGxJdGVtKSB7XHJcbiAgICAgIHRoaXMuX2RyYXdJdGVtU2l6ZUxhYmVsKGl0ZW0sIHdpbmRvd0NvbG9yKTtcclxuICAgICAgdGhpcy5fZHJhd0l0ZW1Ub05laWdoYm91cnNEaXN0YW5jZUxhYmVscyhpdGVtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RyYXdFZGdlc0xhYmVscyh3YWxsOiBXYWxsLCBvcHRpb25zOiB7IGZyb250PzogYm9vbGVhbiwgYmFjaz86IGJvb2xlYW4gfSA9IHt9IGFzIGFueSkge1xyXG4gICAgbGV0IGVkZ2U6IEhhbGZFZGdlO1xyXG4gICAgaWYgKHdhbGwuZnJvbnRFZGdlKSB7XHJcbiAgICAgIGVkZ2UgPSB3YWxsLmZyb250RWRnZTtcclxuICAgIH0gZWxzZSBpZiAod2FsbC5iYWNrRWRnZSkge1xyXG4gICAgICBlZGdlID0gd2FsbC5iYWNrRWRnZTtcclxuICAgIH1cclxuICAgIGlmICghZWRnZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBwb3MgPSBlZGdlLmludGVyaW9yQ2VudGVyKCk7XHJcbiAgICBjb25zdCBsZW5ndGhzID0gdGhpcy5kZXRhaWxlZFdhbGxNZWFzdXJlbWVudHNNb2RlID8gd2FsbC5lZGdlc0xlbmd0aHMgOiBbd2FsbC5sZW5ndGhdO1xyXG4gICAgLy8gY29uc3QgbGVuOiBudW1iZXIgPSBsZW5ndGhzLmxlbmd0aDtcclxuICAgIC8vIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgLy8gICAgIGxlbmd0aHNbaV0gPSBsZW5ndGhzW2ldICogMTAwO1xyXG4gICAgLy8gfVxyXG4gICAgdGhpcy5fZHJhd0xhYmVscyhwb3MsIGxlbmd0aHMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhd1RhcmdldCh4OiBudW1iZXIsIHk6IG51bWJlciwge1xyXG4gICAgbGFzdE5vZGUgPSBudWxsLFxyXG4gICAgc25hcFBvaW50ID0gbnVsbFxyXG4gIH0pIHtcclxuICAgIGlmIChsYXN0Tm9kZSkge1xyXG4gICAgICBDb250ZXh0VXRpbHMuRHJhd0xpbmUodGhpcy5fY29udGV4dCxcclxuICAgICAgICB0aGlzLl9jb252ZXJ0WChsYXN0Tm9kZS54KSxcclxuICAgICAgICB0aGlzLl9jb252ZXJ0WShsYXN0Tm9kZS55KSxcclxuICAgICAgICB0aGlzLl9jb252ZXJ0WCh4KSxcclxuICAgICAgICB0aGlzLl9jb252ZXJ0WSh5KSxcclxuICAgICAgICBkZWZhdWx0V2FsbFdpZHRoSG92ZXIsXHJcbiAgICAgICAgd2FsbENvbG9ySG92ZXJcclxuICAgICAgKTtcclxuICAgICAgY29uc3Qgd2FsbCA9IGxhc3ROb2RlLndhbGxFbmRzWzBdO1xyXG4gICAgICBpZiAod2FsbCkge1xyXG4gICAgICAgIHRoaXMuX2RyYXdUYXJnZXRBbmdsZUxhYmVsKGxhc3ROb2RlLngsIGxhc3ROb2RlLnksIHgsIHksIHdhbGwuc3RhcnQueCwgd2FsbC5zdGFydC55KTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBsZW5ndGggPSBVdGlscy5kaXN0YW5jZShsYXN0Tm9kZS54LCBsYXN0Tm9kZS55LCB4LCB5KTtcclxuICAgICAgY29uc3QgcG9zID0ge3g6IChsYXN0Tm9kZS54ICsgeCkgLyAyLjAsIHk6IChsYXN0Tm9kZS55ICsgeSkgLyAyLjB9O1xyXG4gICAgICB0aGlzLl9kcmF3TGFiZWxzKHBvcywgW2xlbmd0aF0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHNuYXBQb2ludCkge1xyXG4gICAgICB0aGlzLl9kcmF3U25hcEluZGljYXRvcihzbmFwUG9pbnQueCwgc25hcFBvaW50LnkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbW91c2VDbGlja0hhbmRsZWQoZXZlbnQ6IE1vdXNlRXZlbnQpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuTW92aW5nKSB7XHJcbiAgICAgIC8vIHdhbGwgb24gY2xpY2sgc2VsZWN0aW9uXHJcbiAgICAgIGlmICh0aGlzLl9hY3RpdmVXYWxsKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0V2FsbChldmVudCwgdGhpcy5fYWN0aXZlV2FsbCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYWN0aXZlQ29ybmVyKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0V2FsbChldmVudCwgbnVsbCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX2FjdGl2ZUl0ZW0pIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RXYWxsKGV2ZW50LCB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLm92ZXJsYXBwZWRXYWxsKHRoaXMuX21vdXNlWCwgdGhpcy5fbW91c2VZLCBjbGlja01pc3NUb2xlcmFuY2UpKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuTW92ZSkge1xyXG4gICAgICAvLyBmbG9vciBvbiBjbGljayBzZWxlY3Rpb25cclxuICAgICAgaWYgKHRoaXMuX2FjdGl2ZUZsb29yKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0Rmxvb3IoZXZlbnQsIHRoaXMuX2FjdGl2ZUZsb29yKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9hY3RpdmVDb3JuZXIpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RGbG9vcihldmVudCwgbnVsbCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0Rmxvb3IoZXZlbnQsIHRoaXMuX2Zsb29ycGxhblNlcnZpY2Uub3ZlcmxhcHBlZEZsb29yKHRoaXMuX21vdXNlWCwgdGhpcy5fbW91c2VZKSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXREZWZhdWx0TW9kZSgpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZsdXNoTW92aW5nU3RhdGVDaGFuZ2VzKCkge1xyXG4gICAgY29uc3QgY2hhbmdlcyA9IE9iamVjdC5rZXlzKHRoaXMuX21vdmluZ1N0YXRlQ2hhbmdlcyk7XHJcbiAgICBpZiAoY2hhbmdlcy5sZW5ndGgpIHtcclxuICAgICAgY29uc3Qgc3RhdGVEZXNjcmlwdGlvbiA9IGNoYW5nZXMuam9pbignOycpO1xyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNhdmVTdGF0ZSwge2FjdGlvbjogYGZsb29ycGxhbm5lciAke3N0YXRlRGVzY3JpcHRpb259YH0pO1xyXG4gICAgICBpZiAodGhpcy5fYWN0aXZlQ29ybmVyKSB7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlRmxvb3JwbGFuKFt0aGlzLl9hY3RpdmVDb3JuZXJdKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9hY3RpdmVXYWxsKSB7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlRmxvb3JwbGFuKFt0aGlzLl9hY3RpdmVXYWxsLmdldEVuZCgpLCB0aGlzLl9hY3RpdmVXYWxsLmdldFN0YXJ0KCldKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9tb3ZpbmdTdGF0ZUNoYW5nZXMgPSB7fTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NlbGVjdFdhbGwoZXZlbnQ6IE1vdXNlRXZlbnQsIHdhbGw6IFdhbGwsIGVkZ2U/OiBIYWxmRWRnZSkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRXYWxsID0gd2FsbDtcclxuICAgIHRoaXMuc2VsZWN0ZWRXYWxsQ2hhbmdlLm5leHQoe2V2ZW50OiBldmVudCwgd2FsbDogdGhpcy5fc2VsZWN0ZWRXYWxsLCBlZGdlOiBlZGdlfSk7XHJcbiAgICB0aGlzLl9kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZWxlY3RGbG9vcihyb29tLCBldmVudCkge1xyXG4gICAgaWYgKHRoaXMuX2FjdGl2ZVdhbGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc2VsZWN0ZWRGbG9vciA9IHJvb207XHJcbiAgICAvLyB0aGlzLnNlbGVjdGVkRmxvb3JDaGFuZ2UodGhpcy5zZWxlY3RlZEZsb29yLCBldmVudCk7XHJcbiAgICB0aGlzLl9kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91bnNlbGVjdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkV2FsbCA9IG51bGw7XHJcbiAgICB0aGlzLl9zZWxlY3RlZEZsb29yID0gbnVsbDtcclxuICAgIHRoaXMuX3NlbGVjdGVkQ29ybmVyID0gbnVsbDtcclxuICAgIHRoaXMuX2RyYXcoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lmTm90RG91YmxlQ2xpY2soaGFuZGxlU2luZ2xlQ2xpY2spIHtcclxuICAgIGNvbnN0IGN1cnJlbnRUaW1lc3RhbXAgPSBEYXRlLm5vdygpO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9sYXN0TW91c2VVcFRpbWVzdGFtcCAmJlxyXG4gICAgICBjdXJyZW50VGltZXN0YW1wIDwgdGhpcy5fbGFzdE1vdXNlVXBUaW1lc3RhbXAgKyBkb3VibGVDbGlja0R1cmF0aW9uTXNcclxuICAgICkge1xyXG4gICAgICB0aGlzLl9sYXN0TW91c2VVcFRpbWVzdGFtcCA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2V0RGVmYXVsdE1vZGUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2xhc3RNb3VzZVVwVGltZXN0YW1wID0gY3VycmVudFRpbWVzdGFtcDtcclxuICAgICAgaGFuZGxlU2luZ2xlQ2xpY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZURyYXdpbmdNb3VzZVVwKCkge1xyXG4gICAgY29uc3QgcHJldk51bVJvb21zID0gdGhpcy5fZmxvb3JwbGFuU2VydmljZS5nZXRSb29tcygpLmxlbmd0aDtcclxuICAgIGNvbnN0IGNvcm5lciA9IHRoaXMuX3NuYXBQb2ludFxyXG4gICAgICA/IHRoaXMuX2Zsb29ycGxhblNlcnZpY2UubmV3Q29ybmVyKHRoaXMuX3NuYXBQb2ludC54LCB0aGlzLl9zbmFwUG9pbnQueSlcclxuICAgICAgOiB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLm5ld0Nvcm5lcih0aGlzLl90YXJnZXRYLCB0aGlzLl90YXJnZXRZKTtcclxuXHJcbiAgICBpZiAodGhpcy5fbGFzdE5vZGUgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLm5ld1dhbGwodGhpcy5fbGFzdE5vZGUsIGNvcm5lcik7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXNTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2F2ZVN0YXRlLCB7YWN0aW9uOiAnbmV3V2FsbCd9KTtcclxuICAgIH1cclxuICAgIHRoaXMuX3VwZGF0ZUZsb29ycGxhbihbY29ybmVyXSk7XHJcbiAgICBjb25zdCBuZXdOdW1Sb29tcyA9IHRoaXMuX2Zsb29ycGxhblNlcnZpY2UuZ2V0Um9vbXMoKS5sZW5ndGg7XHJcbiAgICBpZiAobmV3TnVtUm9vbXMgPiBwcmV2TnVtUm9vbXMpIHtcclxuICAgICAgdGhpcy5zZXREZWZhdWx0TW9kZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbGFzdE5vZGUgPSBjb3JuZXI7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXNTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuV2FsbExlbmd0aElucHV0U2hvd0NoYW5nZWQsIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlRmxvb3JwbGFuKGNvcm5lcnM6IENvcm5lcltdKTogdm9pZCB7XHJcbiAgICBmb3IgKGNvbnN0IGNvcm5lciBvZiBjb3JuZXJzKSB7XHJcbiAgICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UubWVyZ2VXaXRoSW50ZXJzZWN0ZWQoY29ybmVyKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UuYWRkQ29ybmVyc0ZvckludGVyc2VjdGlvbnMoKTtcclxuICAgIC8vIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UucmVtb3ZlT3JwaGFuQ29ybmVycygpO1xyXG4gICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhc01vdXNlTW92ZWQoZXZlbnQpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG5ld1BvcyA9IFJlbGF0aXZlUG9zaXRpb25VdGlscy5HZXRDbGllbnRNb3VzZVBvc2l0aW9uKGV2ZW50KTtcclxuICAgIHJldHVybiB0aGlzLl9kZXRlY3RNb3VzZU1vdmVtZW50KHRoaXMuX21vdXNlRG93blBvc2l0aW9uLCBuZXdQb3MpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFzVG91Y2hNb3ZlZChldmVudDogVG91Y2hFdmVudCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgbmV3UG9zID0gUmVsYXRpdmVQb3NpdGlvblV0aWxzLkdldENsaWVudFRvdWNoUG9zaXRpb24oZXZlbnQsIHRoaXMuX2NhbnZhcyk7XHJcbiAgICByZXR1cm4gdGhpcy5fZGV0ZWN0TW91c2VNb3ZlbWVudCh0aGlzLl9sYXN0VG91Y2hQb2ludCwgbmV3UG9zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RldGVjdE1vdXNlTW92ZW1lbnQob2xkUG9zOiBWZWN0b3IyLCBuZXdQb3M6IFZlY3RvcjIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBvbGRQb3MuZGlzdGFuY2VUbyhuZXdQb3MpID4gbWluTW91c2VNb3ZlRGlzdGFuY2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9ub3RpY2VTdGF0ZShhY3Rpb246IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fbW92aW5nU3RhdGVDaGFuZ2VzW2FjdGlvbl0gPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlVGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5EcmF3aW5nICYmIHRoaXMuX2xhc3ROb2RlKSB7XHJcbiAgICAgIGlmICh0aGlzLnNuYXBDb3JuZXJzICYmIE1hdGguYWJzKHRoaXMuX21vdXNlWCAtIHRoaXMuX2xhc3ROb2RlLngpIDwgc25hcFRvbGVyYW5jZSkge1xyXG4gICAgICAgIHRoaXMuX3RhcmdldFggPSB0aGlzLl9sYXN0Tm9kZS54O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX3RhcmdldFggPSB0aGlzLl9tb3VzZVg7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc25hcENvcm5lcnMgJiYgTWF0aC5hYnModGhpcy5fbW91c2VZIC0gdGhpcy5fbGFzdE5vZGUueSkgPCBzbmFwVG9sZXJhbmNlKSB7XHJcbiAgICAgICAgdGhpcy5fdGFyZ2V0WSA9IHRoaXMuX2xhc3ROb2RlLnk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fdGFyZ2V0WSA9IHRoaXMuX21vdXNlWTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5yZW1vdmVPcnBoYW5Db3JuZXJzKCk7XHJcbiAgICAgIHRoaXMuX3RhcmdldFggPSB0aGlzLl9tb3VzZVg7XHJcbiAgICAgIHRoaXMuX3RhcmdldFkgPSB0aGlzLl9tb3VzZVk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl91cGRhdGVTbmFwSW5kaWNhdG9yKHRoaXMuX3RhcmdldFgsIHRoaXMuX3RhcmdldFkpO1xyXG4gICAgdGhpcy5fZHJhdygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlU25hcEluZGljYXRvcih4OiBudW1iZXIsIHk6IG51bWJlcikge1xyXG4gICAgY29uc3QgZXhjbHVkZUNvcm5lcnMgPSB0aGlzLl9sYXN0Tm9kZSA/IFt0aGlzLl9sYXN0Tm9kZV0gOiBbXTtcclxuICAgIHRoaXMuX3NuYXBQb2ludCA9IHRoaXMuX2Zsb29ycGxhblNlcnZpY2UuY29ybmVySW5TbmFwRGlzdGFuY2UoXHJcbiAgICAgIHgsIHksIHRoaXMuc25hcENvcm5lcnMsIGV4Y2x1ZGVDb3JuZXJzXHJcbiAgICApO1xyXG4gICAgaWYgKCF0aGlzLl9zbmFwUG9pbnQpIHtcclxuICAgICAgdGhpcy5fc25hcFBvaW50ID0gdGhpcy5fZmxvb3JwbGFuU2VydmljZS53YWxsSW5TbmFwRGlzdGFuY2UoeCwgeSwgdGhpcy5zbmFwQ29ybmVycywgdGhpcy5fbGFzdE5vZGUpO1xyXG4gICAgICBpZiAodGhpcy5zbmFwQ29ybmVycykge1xyXG4gICAgICAgIHRoaXMuX3NuYXBJbmRpY2F0b3JNb2RlID0gU25hcEluZGljYXRvck1vZGUuV2FsbDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuc25hcENvcm5lcnMpIHtcclxuICAgICAgICB0aGlzLl9zbmFwSW5kaWNhdG9yTW9kZSA9IFNuYXBJbmRpY2F0b3JNb2RlLkNvcm5lcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhd0xhYmVscyhwb3M6IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfSwgbGVuZ3RoczogbnVtYmVyW10pOiB2b2lkIHtcclxuICAgIGNvbnN0IHRleHQgPSBsZW5ndGhzXHJcbiAgICAgIC5maWx0ZXIobCA9PiBsID49IDAuNikgIC8vIG9ubHkgZWRnZXMgYXQgbGVhc3QgdGhpcyBsb25nXHJcbiAgICAgIC5maWx0ZXIoVXRpbHMudW5pcUZuKVxyXG4gICAgICAubWFwKGwgPT4gdGhpcy5fZGltZW5zaW9uU2VydmljZS5jbVRvTWVhc3VyZShsICogMTAwKSlcclxuICAgICAgLmpvaW4oJy8nKTtcclxuICAgIHRoaXMuX2RyYXdMYWJlbFRleHQoXHJcbiAgICAgIHRoaXMuX2NvbnZlcnRYKHBvcy54KSxcclxuICAgICAgdGhpcy5fY29udmVydFkocG9zLnkpLFxyXG4gICAgICB0ZXh0XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhd1NuYXBJbmRpY2F0b3IoeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuRHJhdyB8fCB0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuRHJhd2luZykge1xyXG4gICAgICBDb250ZXh0VXRpbHMuRHJhd0NpcmNsZSh0aGlzLnRvdWNoTW9kZSwgdGhpcy5fY29udGV4dCxcclxuICAgICAgICB0aGlzLl9jb252ZXJ0WCh4KSxcclxuICAgICAgICB0aGlzLl9jb252ZXJ0WSh5KSxcclxuICAgICAgICBzbmFwSW5kaWNhdG9yUmFkaXVzW3RoaXMuX3NuYXBJbmRpY2F0b3JNb2RlXSxcclxuICAgICAgICBzbmFwSW5kaWNhdG9yQ29sb3JbdGhpcy5fc25hcEluZGljYXRvck1vZGVdXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kcmF3VGFyZ2V0QW5nbGVMYWJlbCh4OiBudW1iZXIsIHk6IG51bWJlciwgeFRhcmdldDogbnVtYmVyLCB5VGFyZ2V0OiBudW1iZXIsIHgwOiBudW1iZXIsIHkwOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGFuZ2xlID0gVXRpbHMuYW5nbGUoeFRhcmdldCAtIHgsIHlUYXJnZXQgLSB5LCB4MCAtIHgsIHkwIC0geSk7XHJcbiAgICBjb25zdCBsZW5ndGggPSBVdGlscy5kaXN0YW5jZSh4LCB5LCB4VGFyZ2V0LCB5VGFyZ2V0KTtcclxuICAgIGlmIChsZW5ndGggPCAwLjYpIHtcclxuICAgICAgLy8gZG9uJ3QgZHJhdyBhbmdsZXMgZm9yIHdhbGxzIHRoaXMgc2hvcnRcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qge3g6IHhkLCB5OiB5ZH0gPSBVdGlscy5wb2ludE9uQW5nbGVBeGlzKFxyXG4gICAgICB0aGlzLl9nZXRTY2FsZWRBbmdsZUxhYmVsRGlzdGFuY2UodGhpcy5fdmlld1NjYWxlLCBhbmdsZUxhYmVsRGlzdGFuY2VTY2FsZVRyZXNob2xkKSxcclxuICAgICAgYW5nbGUsXHJcbiAgICAgIHgwIC0geCxcclxuICAgICAgeTAgLSB5XHJcbiAgICApO1xyXG4gICAgY29uc3QgayA9IHgwID4geCA/IDEgOiAtMTtcclxuICAgIHRoaXMuX2RyYXdMYWJlbFRleHQoXHJcbiAgICAgIHRoaXMuX2NvbnZlcnRYKHggKyBrICogeGQpLFxyXG4gICAgICB0aGlzLl9jb252ZXJ0WSh5ICsgayAqIHlkKSxcclxuICAgICAgQW5nbGVzLmFuZ2xlVG9NZWFzdXJlKE1hdGguYWJzKGFuZ2xlKSwgdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5BbmdsZVVuaXQpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RyYXdEb29yKGRvb3I6IEluV2FsbEZsb29ySXRlbSkge1xyXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLl9nZXRUaGlja25lc3NPZkNvbnRhaW5pbmdXYWxsKGRvb3IpIHx8IGRlZmF1bHRXYWxsV2lkdGg7XHJcbiAgICBjb25zdCBjb2xvciA9IHRoaXMuX2FjdGl2ZUl0ZW0gPT09IGRvb3IgPyBkb29yQ29sb3JIb3ZlciA6IGRvb3JDb2xvcjtcclxuICAgIENvbnRleHRVdGlscy5EcmF3TGluZSh0aGlzLl9jb250ZXh0LFxyXG4gICAgICB0aGlzLl9jb252ZXJ0WChkb29yLmdldFN0YXJ0WCgpKSxcclxuICAgICAgdGhpcy5fY29udmVydFkoZG9vci5nZXRTdGFydFkoKSksXHJcbiAgICAgIHRoaXMuX2NvbnZlcnRYKGRvb3IuZ2V0RW5kWCgpKSxcclxuICAgICAgdGhpcy5fY29udmVydFkoZG9vci5nZXRFbmRZKCkpLFxyXG4gICAgICB3aWR0aCAqICh0aGlzLl92aWV3U2NhbGUgLyAyKSxcclxuICAgICAgY29sb3JcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKiogKi9cclxuICBwcml2YXRlIF9kcmF3V2luZG93KHdpbmRvdzogSW5XYWxsSXRlbSkge1xyXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLl9nZXRUaGlja25lc3NPZkNvbnRhaW5pbmdXYWxsKHdpbmRvdykgfHwgZGVmYXVsdFdhbGxXaWR0aDtcclxuICAgIGNvbnN0IGNvbG9yID0gdGhpcy5fYWN0aXZlSXRlbSA9PT0gd2luZG93ID8gd2luZG93Q29sb3JIb3ZlciA6IHdpbmRvd0NvbG9yO1xyXG4gICAgQ29udGV4dFV0aWxzLkRyYXdMaW5lKHRoaXMuX2NvbnRleHQsXHJcbiAgICAgIHRoaXMuX2NvbnZlcnRYKHdpbmRvdy5nZXRTdGFydFgoKSksXHJcbiAgICAgIHRoaXMuX2NvbnZlcnRZKHdpbmRvdy5nZXRTdGFydFkoKSksXHJcbiAgICAgIHRoaXMuX2NvbnZlcnRYKHdpbmRvdy5nZXRFbmRYKCkpLFxyXG4gICAgICB0aGlzLl9jb252ZXJ0WSh3aW5kb3cuZ2V0RW5kWSgpKSxcclxuICAgICAgd2lkdGggKiAodGhpcy5fdmlld1NjYWxlIC8gMiksXHJcbiAgICAgIGNvbG9yXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0VGhpY2tuZXNzT2ZDb250YWluaW5nV2FsbChpdGVtOiBXYWxsSXRlbSk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gaXRlbSAmJlxyXG4gICAgICBpdGVtLmN1cnJlbnRXYWxsRWRnZSAmJlxyXG4gICAgICBpdGVtLmN1cnJlbnRXYWxsRWRnZS53YWxsICYmXHJcbiAgICAgIGl0ZW0uY3VycmVudFdhbGxFZGdlLndhbGwudGhpY2tuZXNzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhd1Jvb21BbmdsZUxhYmVsKHg6IG51bWJlciwgeTogbnVtYmVyLCB4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyLCBwb2x5Z29uQ29ybmVycykge1xyXG4gICAgY29uc3QgbGVuZ3RoID0gVXRpbHMuZGlzdGFuY2UoeCwgeSwgeDEsIHkxKTtcclxuICAgIGlmIChsZW5ndGggPCAwLjYpIHtcclxuICAgICAgLy8gZG9uJ3QgZHJhdyBhbmdsZXMgZm9yIHdhbGxzIHRoaXMgc2hvcnRcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYW5nbGUgPSBVdGlscy5hbmdsZSh4MSAtIHgsIHkxIC0geSwgeDIgLSB4LCB5MiAtIHkpO1xyXG4gICAgY29uc3QgcG9zID0gVXRpbHMuc2VsZWN0UG9pbnRJbnNpZGVQb2x5Z29uKFxyXG4gICAgICB7eCwgeX0sXHJcbiAgICAgIFV0aWxzLnBvaW50T25BbmdsZUF4aXMoXHJcbiAgICAgICAgdGhpcy5fZ2V0U2NhbGVkQW5nbGVMYWJlbERpc3RhbmNlKHRoaXMuX3ZpZXdTY2FsZSwgYW5nbGVMYWJlbERpc3RhbmNlU2NhbGVUcmVzaG9sZCksXHJcbiAgICAgICAgYW5nbGUsXHJcbiAgICAgICAgeDIgLSB4LFxyXG4gICAgICAgIHkyIC0geVxyXG4gICAgICApLFxyXG4gICAgICBwb2x5Z29uQ29ybmVyc1xyXG4gICAgKTtcclxuICAgIHRoaXMuX2RyYXdMYWJlbFRleHQoXHJcbiAgICAgIHRoaXMuX2NvbnZlcnRYKHBvcy54KSxcclxuICAgICAgdGhpcy5fY29udmVydFkocG9zLnkpLFxyXG4gICAgICBBbmdsZXMuYW5nbGVUb01lYXN1cmUoVXRpbHMuYW5nbGUycGkoeDEgLSB4LCB5MSAtIHksIHgyIC0geCwgeTIgLSB5KSwgdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5BbmdsZVVuaXQpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RyYXdFZGdlKGVkZ2U6IEhhbGZFZGdlLCBmaWxsQ29sb3I6IHN0cmluZywgc3Ryb2tlQ29sb3I/OiBzdHJpbmcpIHtcclxuICAgIENvbnRleHRVdGlscy5EcmF3UG9seWdvbih0aGlzLl9jb250ZXh0LFxyXG4gICAgICBVdGlscy5tYXAoZWRnZS5jb3JuZXJzKCksIChjb3JuZXIpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydFgoY29ybmVyLngpO1xyXG4gICAgICB9KSxcclxuICAgICAgVXRpbHMubWFwKGVkZ2UuY29ybmVycygpLCAoY29ybmVyKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRZKGNvcm5lci55KTtcclxuICAgICAgfSksXHJcbiAgICAgIHRydWUsXHJcbiAgICAgIGZpbGxDb2xvcixcclxuICAgICAgdHJ1ZSxcclxuICAgICAgc3Ryb2tlQ29sb3IgfHwgZmlsbENvbG9yLFxyXG4gICAgICBlZGdlV2lkdGhcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kcmF3QXJlYUxhYmVsKHg6IG51bWJlciwgeTogbnVtYmVyLCBhcmVhOiBudW1iZXIpIHtcclxuICAgIGlmIChhcmVhIDwgMC4wNSkge1xyXG4gICAgICAvLyBkb24ndCBkcmF3IGFyZWEgZm9yIHJvb21zIHRoaXMgc21hbGxcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY29udGV4dC5mb250ID0gYG5vcm1hbCAke2xhYmVsU2l6ZX0gQXJpYWxgO1xyXG4gICAgdGhpcy5fY29udGV4dC5maWxsU3R5bGUgPSAnIzAwMDAwMCc7XHJcbiAgICB0aGlzLl9jb250ZXh0LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xyXG4gICAgdGhpcy5fY29udGV4dC50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuICAgIHRoaXMuX2NvbnRleHQuc3Ryb2tlU3R5bGUgPSAnI2ZmZmZmZic7XHJcbiAgICB0aGlzLl9jb250ZXh0LmxpbmVXaWR0aCA9IDQ7XHJcblxyXG4gICAgY29uc3QgdGV4dCA9IHRoaXMuX2RpbWVuc2lvblNlcnZpY2Uuc21Ub01lYXN1cmUoYXJlYSk7XHJcbiAgICB0aGlzLl9jb250ZXh0LnN0cm9rZVRleHQodGV4dCxcclxuICAgICAgdGhpcy5fY29udmVydFgoeCksXHJcbiAgICAgIHRoaXMuX2NvbnZlcnRZKHkpKTtcclxuICAgIHRoaXMuX2NvbnRleHQuZmlsbFRleHQodGV4dCxcclxuICAgICAgdGhpcy5fY29udmVydFgoeCksXHJcbiAgICAgIHRoaXMuX2NvbnZlcnRZKHkpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RyYXdMYWJlbFRleHQoXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICB0ZXh0OiBzdHJpbmcsXHJcbiAgICBjb2xvck9wdGlvbnM6IHsgZmlsbENvbG9yPzogc3RyaW5nLCBzdHJva2VDb2xvcj86IHN0cmluZyB9ID0ge31cclxuICApIHtcclxuICAgIHRoaXMuX2NvbnRleHQuZm9udCA9IGBub3JtYWwgJHtsYWJlbFNpemV9IEFyaWFsYDtcclxuICAgIHRoaXMuX2NvbnRleHQuZmlsbFN0eWxlID0gY29sb3JPcHRpb25zLmZpbGxDb2xvciB8fCAnIzAwMDAwMCc7XHJcbiAgICB0aGlzLl9jb250ZXh0LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xyXG4gICAgdGhpcy5fY29udGV4dC50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuICAgIHRoaXMuX2NvbnRleHQuc3Ryb2tlU3R5bGUgPSBjb2xvck9wdGlvbnMuc3Ryb2tlQ29sb3IgfHwgJyNmZmZmZmYnO1xyXG4gICAgdGhpcy5fY29udGV4dC5saW5lV2lkdGggPSA0O1xyXG4gICAgdGhpcy5fY29udGV4dC5zdHJva2VUZXh0KHRleHQsIHgsIHkpO1xyXG4gICAgdGhpcy5fY29udGV4dC5maWxsVGV4dCh0ZXh0LCB4LCB5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RyYXdJdGVtU2l6ZUxhYmVsKGl0ZW06IFdhbGxJdGVtLCBjb2xvcjogc3RyaW5nID0gJyMwMDAwMDAnKSB7XHJcbiAgICBjb25zdCByZXZlcnNlTGFiZWxTaWRlXHJcbiAgICAgID0gaXRlbS5jdXJyZW50V2FsbEVkZ2UgPT09IGl0ZW0uY3VycmVudFdhbGwuYmFja0VkZ2U7XHJcblxyXG4gICAgY29uc3Qgc2NhbGVkRGltZW5zaW9uTGluZURpc3RhbmNlXHJcbiAgICAgID0gKHJldmVyc2VMYWJlbFNpZGUgPyAtMSA6IDEpICogZGltZW5zaW9uTGluZURpc3RhbmNlICogKHRoaXMuX3ZpZXdTY2FsZSAvIDIpO1xyXG5cclxuICAgIGNvbnN0IGFuZ2xlXHJcbiAgICAgID0gVXRpbHMubGluZVRvWEF4aXNBbmdsZShpdGVtLmdldFN0YXJ0WCgpLCBpdGVtLmdldFN0YXJ0WSgpLCBpdGVtLmdldEVuZFgoKSwgaXRlbS5nZXRFbmRZKCkpO1xyXG5cclxuICAgIGNvbnN0IGxhYmVsTGluZSA9IFV0aWxzLmdldFRyYW5zbGF0ZWRMaW5lKFxyXG4gICAgICBuZXcgVmVjdG9yMih0aGlzLl9jb252ZXJ0WChpdGVtLmdldFN0YXJ0WCgpKSwgdGhpcy5fY29udmVydFkoaXRlbS5nZXRTdGFydFkoKSkpLFxyXG4gICAgICBuZXcgVmVjdG9yMih0aGlzLl9jb252ZXJ0WChpdGVtLmdldEVuZFgoKSksIHRoaXMuX2NvbnZlcnRZKGl0ZW0uZ2V0RW5kWSgpKSksXHJcbiAgICAgIGFuZ2xlLFxyXG4gICAgICBzY2FsZWREaW1lbnNpb25MaW5lRGlzdGFuY2VcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5fZHJhd1BvaW50VG9Qb2ludERpbWVuc2lvbkxhYmVsKFxyXG4gICAgICBsYWJlbExpbmUuc3RhcnQsXHJcbiAgICAgIGxhYmVsTGluZS5lbmQsXHJcbiAgICAgIE1hdGgucm91bmQoKGl0ZW0uZ2V0SGFsZlNpemUoKS54ICogMjAwKSksIC8vIGZhY3RvciAxMDAgdGltZXMgMlxyXG4gICAgICBjb2xvclxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RyYXdJdGVtVG9OZWlnaGJvdXJzRGlzdGFuY2VMYWJlbHMoaXRlbTogV2FsbEl0ZW0sIGNvbG9yOiBzdHJpbmcgPSAnIzAwMDAwMCcpIHtcclxuICAgIGNvbnN0IHJldmVyc2VMYWJlbFNpZGVcclxuICAgICAgPSBpdGVtLmN1cnJlbnRXYWxsRWRnZSA9PT0gaXRlbS5jdXJyZW50V2FsbC5iYWNrRWRnZTtcclxuXHJcbiAgICBjb25zdCBzY2FsZWREaW1lbnNpb25MaW5lRGlzdGFuY2VcclxuICAgICAgPSAocmV2ZXJzZUxhYmVsU2lkZSA/IDEgOiAtMSkgKiBkaW1lbnNpb25MaW5lRGlzdGFuY2UgKiAodGhpcy5fdmlld1NjYWxlIC8gMik7XHJcblxyXG4gICAgY29uc3QgYW5nbGVcclxuICAgICAgPSBVdGlscy5saW5lVG9YQXhpc0FuZ2xlKGl0ZW0uZ2V0U3RhcnRYKCksIGl0ZW0uZ2V0U3RhcnRZKCksIGl0ZW0uZ2V0RW5kWCgpLCBpdGVtLmdldEVuZFkoKSk7XHJcblxyXG4gICAgY29uc3QgbGFiZWxzRGF0YVxyXG4gICAgICA9IHRoaXMuX2dldEl0ZW1Ub0l0ZW1EaXN0YW5jZUxhYmVsc0RhdGEoaXRlbS5jdXJyZW50V2FsbC5nZXRXYWxsSXRlbXMoKSlcclxuICAgICAgLmZpbHRlcihkYXRhID0+IGRhdGEubGVmdEl0ZW0gPT09IGl0ZW0gfHwgZGF0YS5yaWdodEl0ZW0gPT09IGl0ZW0pO1xyXG5cclxuICAgIGZvciAoY29uc3QgbGFiZWxEYXRhIG9mIGxhYmVsc0RhdGEpIHtcclxuICAgICAgaWYgKGxhYmVsRGF0YS5kaXN0YW5jZSA8PSAwKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGxhYmVsTGluZSA9IFV0aWxzLmdldFRyYW5zbGF0ZWRMaW5lKFxyXG4gICAgICAgIG5ldyBWZWN0b3IyKHRoaXMuX2NvbnZlcnRYKGxhYmVsRGF0YS5zdGFydFBvaW50LngpLCB0aGlzLl9jb252ZXJ0WShsYWJlbERhdGEuc3RhcnRQb2ludC55KSksXHJcbiAgICAgICAgbmV3IFZlY3RvcjIodGhpcy5fY29udmVydFgobGFiZWxEYXRhLmVuZFBvaW50LngpLCB0aGlzLl9jb252ZXJ0WShsYWJlbERhdGEuZW5kUG9pbnQueSkpLFxyXG4gICAgICAgIGFuZ2xlLFxyXG4gICAgICAgIHNjYWxlZERpbWVuc2lvbkxpbmVEaXN0YW5jZVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5fZHJhd1BvaW50VG9Qb2ludERpbWVuc2lvbkxhYmVsKFxyXG4gICAgICAgIGxhYmVsTGluZS5zdGFydCxcclxuICAgICAgICBsYWJlbExpbmUuZW5kLFxyXG4gICAgICAgIE1hdGgucm91bmQobGFiZWxEYXRhLmRpc3RhbmNlICogMTAwKSxcclxuICAgICAgICBjb2xvclxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhd1BvaW50VG9Qb2ludERpbWVuc2lvbkxhYmVsKHN0YXJ0OiBWZWN0b3IyLCBlbmQ6IFZlY3RvcjIsIGRpbWVuc2lvbjogbnVtYmVyLCBjb2xvcjogc3RyaW5nKSB7XHJcbiAgICBDb250ZXh0VXRpbHMuRHJhd0xpbmUodGhpcy5fY29udGV4dCxcclxuICAgICAgc3RhcnQueCwgc3RhcnQueSxcclxuICAgICAgZW5kLngsIGVuZC55LFxyXG4gICAgICBkaW1lbnNpb25MaW5lV2lkdGgsIGNvbG9yXHJcbiAgICApO1xyXG4gICAgdGhpcy5fZHJhd0xhYmVsVGV4dChcclxuICAgICAgKHN0YXJ0LnggKyBlbmQueCkgLyAyLFxyXG4gICAgICAoc3RhcnQueSArIGVuZC55KSAvIDIsXHJcbiAgICAgIHRoaXMuX2RpbWVuc2lvblNlcnZpY2UuY21Ub01lYXN1cmUoZGltZW5zaW9uKSxcclxuICAgICAge2ZpbGxDb2xvcjogY29sb3J9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZmluZENsb3Nlc3RIYWxmRWRnZSh4OiBudW1iZXIsIHk6IG51bWJlcik6IEhhbGZFZGdlIHtcclxuICAgIGxldCBjbG9zZXN0RWRnZTtcclxuICAgIGxldCBtaW5EaXN0YW5jZSA9IEluZmluaXR5O1xyXG4gICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5nZXRXYWxscygpLmZvckVhY2god2FsbCA9PiB7XHJcbiAgICAgIFt3YWxsLmZyb250RWRnZSwgd2FsbC5iYWNrRWRnZV0uZm9yRWFjaChlZGdlID0+IHtcclxuICAgICAgICBpZiAoIWVkZ2UpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBlZGdlLmRpc3RhbmNlVG8oeCwgeSk7XHJcbiAgICAgICAgaWYgKGRpc3RhbmNlIDwgbWluRGlzdGFuY2UpIHtcclxuICAgICAgICAgIGNsb3Nlc3RFZGdlID0gZWRnZTtcclxuICAgICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBjbG9zZXN0RWRnZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldEl0ZW1Ub0l0ZW1EaXN0YW5jZUxhYmVsc0RhdGEoaXRlbXM6IFdhbGxJdGVtW10pXHJcbiAgICA6IHsgbGVmdEl0ZW06IFdhbGxJdGVtLCByaWdodEl0ZW06IFdhbGxJdGVtLCBzdGFydFBvaW50OiBWZWN0b3IyLCBlbmRQb2ludDogVmVjdG9yMiwgZGlzdGFuY2U6IG51bWJlciB9W10ge1xyXG5cclxuICAgIGlmICghaXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgIGNvbnN0IHRvQ29ybmVyc0Rpc3RhbmNlcyA9IGl0ZW1zXHJcbiAgICAgIC5tYXAoaXRlbSA9PiAoe2l0ZW06IGl0ZW0sIC4uLnRoaXMuX2dldERpc3RhbmNlVG9XYWxsQ29ybmVycyhpdGVtKX0pKVxyXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS50b1dhbGxTdGFydCAtIGIudG9XYWxsU3RhcnQpO1xyXG5cclxuICAgIHtcclxuICAgICAgY29uc3QgZmlyc3QgPSB0b0Nvcm5lcnNEaXN0YW5jZXNbMF07XHJcbiAgICAgIGNvbnN0IGZpcnN0SXRlbXNFZGdlID0gZmlyc3QuaXRlbS5jdXJyZW50V2FsbEVkZ2U7XHJcblxyXG4gICAgICBjb25zdCBzdGFydFBvaW50ID0gZmlyc3RJdGVtc0VkZ2UgPT09IGZpcnN0SXRlbXNFZGdlLndhbGwuYmFja0VkZ2VcclxuICAgICAgICA/IG5ldyBWZWN0b3IyKGZpcnN0SXRlbXNFZGdlLmdldFN0YXJ0KCkueCwgZmlyc3RJdGVtc0VkZ2UuZ2V0U3RhcnQoKS55KVxyXG4gICAgICAgIDogbmV3IFZlY3RvcjIoZmlyc3RJdGVtc0VkZ2UuZ2V0RW5kKCkueCwgZmlyc3RJdGVtc0VkZ2UuZ2V0RW5kKCkueSk7XHJcblxyXG4gICAgICBjb25zdCBlbmRQb2ludCA9IGZpcnN0SXRlbXNFZGdlID09PSBmaXJzdEl0ZW1zRWRnZS53YWxsLmJhY2tFZGdlXHJcbiAgICAgICAgPyBuZXcgVmVjdG9yMihmaXJzdC5pdGVtLmdldFN0YXJ0WCgpLCBmaXJzdC5pdGVtLmdldFN0YXJ0WSgpKVxyXG4gICAgICAgIDogbmV3IFZlY3RvcjIoZmlyc3QuaXRlbS5nZXRFbmRYKCksIGZpcnN0Lml0ZW0uZ2V0RW5kWSgpKTtcclxuXHJcbiAgICAgIHJlc3VsdC5wdXNoKHtcclxuICAgICAgICBsZWZ0SXRlbTogZmlyc3QuaXRlbSxcclxuICAgICAgICBzdGFydFBvaW50OiBzdGFydFBvaW50LFxyXG4gICAgICAgIGVuZFBvaW50OiBlbmRQb2ludCxcclxuICAgICAgICBkaXN0YW5jZTogZmlyc3QudG9XYWxsU3RhcnRcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRvQ29ybmVyc0Rpc3RhbmNlcy5sZW5ndGggLSAxOyArK2luZGV4KSB7XHJcbiAgICAgIGNvbnN0IGN1cnIgPSB0b0Nvcm5lcnNEaXN0YW5jZXNbaW5kZXhdO1xyXG4gICAgICBjb25zdCBuZXh0ID0gdG9Db3JuZXJzRGlzdGFuY2VzW2luZGV4ICsgMV07XHJcblxyXG4gICAgICBjb25zdCBjdXJyVG9OZXh0RGlzdGFuY2VcclxuICAgICAgICA9IG5leHQudG9XYWxsU3RhcnQgLSAoY3Vyci50b1dhbGxTdGFydCArICgyICogY3Vyci5pdGVtLmdldEhhbGZTaXplKCkueCkpO1xyXG5cclxuICAgICAgY29uc3Qgc3RhcnRQb2ludCA9IGN1cnIuaXRlbS5jdXJyZW50V2FsbEVkZ2UgPT09IGN1cnIuaXRlbS5jdXJyZW50V2FsbC5iYWNrRWRnZVxyXG4gICAgICAgID8gbmV3IFZlY3RvcjIoY3Vyci5pdGVtLmdldEVuZFgoKSwgY3Vyci5pdGVtLmdldEVuZFkoKSlcclxuICAgICAgICA6IG5ldyBWZWN0b3IyKGN1cnIuaXRlbS5nZXRTdGFydFgoKSwgY3Vyci5pdGVtLmdldFN0YXJ0WSgpKTtcclxuXHJcbiAgICAgIGxldCBlbmRQb2ludDtcclxuICAgICAgaWYgKGN1cnIuaXRlbS5jdXJyZW50V2FsbEVkZ2UgPT09IG5leHQuaXRlbS5jdXJyZW50V2FsbEVkZ2UpIHtcclxuICAgICAgICBlbmRQb2ludCA9IGN1cnIuaXRlbS5jdXJyZW50V2FsbEVkZ2UgPT09IGN1cnIuaXRlbS5jdXJyZW50V2FsbC5iYWNrRWRnZVxyXG4gICAgICAgICAgPyBuZXcgVmVjdG9yMihuZXh0Lml0ZW0uZ2V0U3RhcnRYKCksIG5leHQuaXRlbS5nZXRTdGFydFkoKSlcclxuICAgICAgICAgIDogbmV3IFZlY3RvcjIobmV4dC5pdGVtLmdldEVuZFgoKSwgbmV4dC5pdGVtLmdldEVuZFkoKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZW5kUG9pbnQgPSBjdXJyLml0ZW0uY3VycmVudFdhbGxFZGdlID09PSBjdXJyLml0ZW0uY3VycmVudFdhbGwuZnJvbnRFZGdlXHJcbiAgICAgICAgICA/IG5ldyBWZWN0b3IyKG5leHQuaXRlbS5nZXRTdGFydFgoKSwgbmV4dC5pdGVtLmdldFN0YXJ0WSgpKVxyXG4gICAgICAgICAgOiBuZXcgVmVjdG9yMihuZXh0Lml0ZW0uZ2V0RW5kWCgpLCBuZXh0Lml0ZW0uZ2V0RW5kWSgpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmVzdWx0LnB1c2goe1xyXG4gICAgICAgIGxlZnRJdGVtOiBjdXJyLml0ZW0sXHJcbiAgICAgICAgcmlnaHRJdGVtOiBuZXh0Lml0ZW0sXHJcbiAgICAgICAgc3RhcnRQb2ludDogc3RhcnRQb2ludCxcclxuICAgICAgICBlbmRQb2ludDogZW5kUG9pbnQsXHJcbiAgICAgICAgZGlzdGFuY2U6IGN1cnJUb05leHREaXN0YW5jZVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IGxhc3QgPSB0b0Nvcm5lcnNEaXN0YW5jZXNbdG9Db3JuZXJzRGlzdGFuY2VzLmxlbmd0aCAtIDFdO1xyXG4gICAgICBjb25zdCBsYXN0SXRlbXNFZGdlID0gbGFzdC5pdGVtLmN1cnJlbnRXYWxsRWRnZTtcclxuXHJcbiAgICAgIGNvbnN0IHN0YXJ0UG9pbnQgPSBsYXN0SXRlbXNFZGdlID09PSBsYXN0SXRlbXNFZGdlLndhbGwuYmFja0VkZ2VcclxuICAgICAgICA/IG5ldyBWZWN0b3IyKGxhc3QuaXRlbS5nZXRFbmRYKCksIGxhc3QuaXRlbS5nZXRFbmRZKCkpXHJcbiAgICAgICAgOiBuZXcgVmVjdG9yMihsYXN0Lml0ZW0uZ2V0U3RhcnRYKCksIGxhc3QuaXRlbS5nZXRTdGFydFkoKSk7XHJcblxyXG4gICAgICBjb25zdCBlbmRQb2ludCA9IGxhc3RJdGVtc0VkZ2UgPT09IGxhc3RJdGVtc0VkZ2Uud2FsbC5iYWNrRWRnZVxyXG4gICAgICAgID8gbmV3IFZlY3RvcjIobGFzdEl0ZW1zRWRnZS5nZXRFbmQoKS54LCBsYXN0SXRlbXNFZGdlLmdldEVuZCgpLnkpXHJcbiAgICAgICAgOiBuZXcgVmVjdG9yMihsYXN0SXRlbXNFZGdlLmdldFN0YXJ0KCkueCwgbGFzdEl0ZW1zRWRnZS5nZXRTdGFydCgpLnkpO1xyXG5cclxuICAgICAgcmVzdWx0LnB1c2goe1xyXG4gICAgICAgIGxlZnRJdGVtOiBsYXN0Lml0ZW0sXHJcbiAgICAgICAgc3RhcnRQb2ludDogc3RhcnRQb2ludCxcclxuICAgICAgICBlbmRQb2ludDogZW5kUG9pbnQsXHJcbiAgICAgICAgZGlzdGFuY2U6IGxhc3QudG9XYWxsRW5kXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXREaXN0YW5jZVRvV2FsbENvcm5lcnMoaXRlbTogV2FsbEl0ZW0pOiB7IHRvV2FsbFN0YXJ0OiBudW1iZXIsIHRvV2FsbEVuZDogbnVtYmVyIH0ge1xyXG4gICAgbGV0IHNob3J0ZXJFZGdlID0gaXRlbS5jdXJyZW50V2FsbEVkZ2U7XHJcbiAgICBpZiAoaXRlbS5jdXJyZW50V2FsbC5zaWRlID09PSBEb3VibGVTaWRlKSB7XHJcbiAgICAgIHNob3J0ZXJFZGdlID0gaXRlbS5jdXJyZW50V2FsbC5iYWNrRWRnZS5pbnRlcmlvckRpc3RhbmNlKCkgPCBpdGVtLmN1cnJlbnRXYWxsLmZyb250RWRnZS5pbnRlcmlvckRpc3RhbmNlKClcclxuICAgICAgICA/IGl0ZW0uY3VycmVudFdhbGwuYmFja0VkZ2VcclxuICAgICAgICA6IGl0ZW0uY3VycmVudFdhbGwuZnJvbnRFZGdlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVkZ2VTdGFydFhEaXN0YW5jZSA9IHNob3J0ZXJFZGdlLmludGVyaW9yU3RhcnQoKS54IC0gaXRlbS5wb3NpdGlvbi54O1xyXG4gICAgY29uc3QgZWRnZVN0YXJ0WURpc3RhbmNlID0gc2hvcnRlckVkZ2UuaW50ZXJpb3JTdGFydCgpLnkgLSBpdGVtLnBvc2l0aW9uLno7XHJcblxyXG4gICAgY29uc3QgZWRnZUVuZFhEaXN0YW5jZSA9IHNob3J0ZXJFZGdlLmludGVyaW9yRW5kKCkueCAtIGl0ZW0ucG9zaXRpb24ueDtcclxuICAgIGNvbnN0IGVkZ2VFbmRZRGlzdGFuY2UgPSBzaG9ydGVyRWRnZS5pbnRlcmlvckVuZCgpLnkgLSBpdGVtLnBvc2l0aW9uLno7XHJcblxyXG4gICAgY29uc3QgaXRlbVRvRWRnZVN0YXJ0RGlzdGFuY2VcclxuICAgICAgPSBNYXRoLnNxcnQoKGVkZ2VTdGFydFhEaXN0YW5jZSAqKiAyKSArIChlZGdlU3RhcnRZRGlzdGFuY2UgKiogMikpIC0gaXRlbS5nZXRIYWxmU2l6ZSgpLng7XHJcblxyXG4gICAgY29uc3QgaXRlbVRvRWRnZUVuZERpc3RhbmNlXHJcbiAgICAgID0gTWF0aC5zcXJ0KChlZGdlRW5kWERpc3RhbmNlICoqIDIpICsgKGVkZ2VFbmRZRGlzdGFuY2UgKiogMikpIC0gaXRlbS5nZXRIYWxmU2l6ZSgpLng7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdG9XYWxsU3RhcnQ6XHJcbiAgICAgICAgc2hvcnRlckVkZ2UgPT09IGl0ZW0uY3VycmVudFdhbGwuYmFja0VkZ2VcclxuICAgICAgICAgID8gaXRlbVRvRWRnZVN0YXJ0RGlzdGFuY2VcclxuICAgICAgICAgIDogaXRlbVRvRWRnZUVuZERpc3RhbmNlLFxyXG5cclxuICAgICAgdG9XYWxsRW5kOlxyXG4gICAgICAgIHNob3J0ZXJFZGdlID09PSBpdGVtLmN1cnJlbnRXYWxsLmJhY2tFZGdlXHJcbiAgICAgICAgICA/IGl0ZW1Ub0VkZ2VFbmREaXN0YW5jZVxyXG4gICAgICAgICAgOiBpdGVtVG9FZGdlU3RhcnREaXN0YW5jZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NhbGN1bGF0ZUdyaWRPZmZzZXQobikge1xyXG4gICAgaWYgKG4gPj0gMCkge1xyXG4gICAgICByZXR1cm4gKG4gKyBncmlkU3BhY2luZyAvIDIuMCkgJSBncmlkU3BhY2luZyAtIGdyaWRTcGFjaW5nIC8gMi4wO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIChuIC0gZ3JpZFNwYWNpbmcgLyAyLjApICUgZ3JpZFNwYWNpbmcgKyBncmlkU3BhY2luZyAvIDIuMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBDb252ZXJ0IGZyb20gVEhSRUVqcyBjb29yZHMgdG8gY2FudmFzIGNvb3Jkcy4gKi9cclxuICBwcml2YXRlIF9jb252ZXJ0WCh4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuICh4IC0gdGhpcy5fb3JpZ2luWCAqIHRoaXMuX2NtUGVyUGl4ZWwpICogdGhpcy5fcGl4ZWxzUGVyQ207XHJcbiAgfVxyXG5cclxuICAvKiogQ29udmVydCBmcm9tIFRIUkVFanMgY29vcmRzIHRvIGNhbnZhcyBjb29yZHMuICovXHJcbiAgcHJpdmF0ZSBfY29udmVydFkoeTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAoeSAtIHRoaXMuX29yaWdpblkgKiB0aGlzLl9jbVBlclBpeGVsKSAqIHRoaXMuX3BpeGVsc1BlckNtO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlQ21QZXJQaXhlbCgpIHtcclxuICAgIHRoaXMuX2NtUGVyUGl4ZWwgPSBjbVBlckZvb3QgKiAoMS4wIC8gcGl4ZWxzUGVyRm9vdCkgLyB0aGlzLl92aWV3U2NhbGU7XHJcbiAgICB0aGlzLl9waXhlbHNQZXJDbSA9IDEuMCAvIHRoaXMuX2NtUGVyUGl4ZWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXNldE9yaWdpbigpIHtcclxuICAgIGlmICh0aGlzLl9jYW52YXMpIHtcclxuICAgICAgY29uc3QgY2VudGVyWCA9IHRoaXMuX2NhbnZhcy53aWR0aCAvIDIuMDtcclxuICAgICAgY29uc3QgY2VudGVyWSA9IHRoaXMuX2NhbnZhcy5oZWlnaHQgLyAyLjA7XHJcbiAgICAgIGNvbnN0IGNlbnRlckZsb29ycGxhbiA9IGlzTmFOKHRoaXMuX2Zsb29ycGxhblNlcnZpY2UuZ2V0Q2VudGVyKCkueCkgP1xyXG4gICAgICAgIG5ldyBWZWN0b3IzKDAsIDAsIDApIDogdGhpcy5fZmxvb3JwbGFuU2VydmljZS5nZXRDZW50ZXIoKTtcclxuICAgICAgdGhpcy5fdXBkYXRlQ21QZXJQaXhlbCgpO1xyXG4gICAgICB0aGlzLl9vcmlnaW5YID0gKGNlbnRlckZsb29ycGxhbi54ICogdGhpcy5fcGl4ZWxzUGVyQ20gLSBjZW50ZXJYKTtcclxuICAgICAgdGhpcy5fb3JpZ2luWSA9IChjZW50ZXJGbG9vcnBsYW4ueiAqIHRoaXMuX3BpeGVsc1BlckNtIC0gY2VudGVyWSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zY2FsZU9yaWdpbigpIHtcclxuICAgIGNvbnN0IGNlbnRlckZsb29ycGxhbiA9IGlzTmFOKHRoaXMuX2Zsb29ycGxhblNlcnZpY2UuZ2V0Q2VudGVyKCkueCkgP1xyXG4gICAgICBuZXcgVmVjdG9yMygwLCAwLCAwKSA6IHRoaXMuX2Zsb29ycGxhblNlcnZpY2UuZ2V0Q2VudGVyKCk7XHJcbiAgICBjb25zdCBjZW50ZXJYID0gY2VudGVyRmxvb3JwbGFuLnggKiB0aGlzLl9waXhlbHNQZXJDbSAtIHRoaXMuX29yaWdpblg7XHJcbiAgICBjb25zdCBjZW50ZXJZID0gY2VudGVyRmxvb3JwbGFuLnogKiB0aGlzLl9waXhlbHNQZXJDbSAtIHRoaXMuX29yaWdpblk7XHJcbiAgICB0aGlzLl91cGRhdGVDbVBlclBpeGVsKCk7XHJcbiAgICB0aGlzLl9vcmlnaW5YID0gKGNlbnRlckZsb29ycGxhbi54ICogdGhpcy5fcGl4ZWxzUGVyQ20gLSBjZW50ZXJYKTtcclxuICAgIHRoaXMuX29yaWdpblkgPSAoY2VudGVyRmxvb3JwbGFuLnogKiB0aGlzLl9waXhlbHNQZXJDbSAtIGNlbnRlclkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29tcHV0ZUNvcm5lclJhZGl1cyhjb3JuZXI6IENvcm5lcik6IG51bWJlciB7XHJcbiAgICBjb25zdCBtaW5XYWxsV2lkdGggPSBtaW5Db3JuZXJSYWRpdXM7XHJcbiAgICBjb25zdCBtYXhXYWxsV2lkdGggPSBtYXhDb3JuZXJSYWRpdXM7XHJcbiAgICBjb25zdCB0aGlja2VzdFdhbGxXaWR0aCA9IE1hdGgubWF4KFxyXG4gICAgICAwLFxyXG4gICAgICAuLi5jb3JuZXIuc3RhcnRXYWxscy5tYXAod2FsbCA9PiB3YWxsLnRoaWNrbmVzcyksXHJcbiAgICAgIC4uLmNvcm5lci5lbmRXYWxscy5tYXAod2FsbCA9PiB3YWxsLnRoaWNrbmVzcylcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgbGltaXRlZFdhbGxXaWR0aCA9IE1hdGgubWluKFxyXG4gICAgICBtYXhXYWxsV2lkdGgsXHJcbiAgICAgIE1hdGgubWF4KHRoaWNrZXN0V2FsbFdpZHRoLCBtaW5XYWxsV2lkdGgpXHJcbiAgICApICogd2FsbFRoaWNrbmVzc011bHRpcGxpZXI7XHJcblxyXG4gICAgcmV0dXJuIE1hdGgubWF4KGxpbWl0ZWRXYWxsV2lkdGggKiB0aGlzLl92aWV3U2NhbGUgLyAxMDAsIG1pbkNvcm5lclJhZGl1cyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRTY2FsZWRBbmdsZUxhYmVsRGlzdGFuY2Uoc2NhbGU6IG51bWJlciwgc2NhbGVUcmVzaG9sZD86IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBjb25zdCBhbmdsZUxhYmVsRGlzdGFuY2VJbkNtID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5BbmdsZUxhYmVsRGlzdGFuY2VJbkNtKTtcclxuICAgIHJldHVybiBhbmdsZUxhYmVsRGlzdGFuY2VJbkNtIC8gTWF0aC5taW4oc2NhbGUsIHNjYWxlVHJlc2hvbGQgfHwgSW5maW5pdHkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0SW5pdGlhbFZpZXdTY2FsZSgpOiBudW1iZXIge1xyXG4gICAgbGV0IHZpZXdTY2FsZTogbnVtYmVyID0gdGhpcy5pbml0aWFsVmlld1NjYWxlO1xyXG4gICAgY29uc3QgZGltOiBhbnkgPSB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLmdldERpbWVuc2lvbnMoMTAwKTtcclxuICAgIGNvbnN0IGhlaWdodDogbnVtYmVyID0gKGRpbS55Lm1heCAtIGRpbS55Lm1pbik7XHJcbiAgICBpZiAodGhpcy5fY2FudmFzICYmICFpc05hTihoZWlnaHQpICYmICEhaGVpZ2h0ICYmIGlzRmluaXRlKGhlaWdodCkpIHtcclxuICAgICAgdmlld1NjYWxlID0gTWF0aC5yb3VuZCgodGhpcy5fY2FudmFzLmhlaWdodCAvIGhlaWdodCkgKiAxMDApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZpZXdTY2FsZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NsZWFuV2FsbExlbmd0aCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX21lc3NhZ2VCdXNTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuV2FsbExlbmd0aElucHV0U2hvd0NoYW5nZWQsIGZhbHNlKTtcclxuICAgIHRoaXMuX3dhbGxMZW5ndGggPSBudWxsO1xyXG4gIH1cclxufVxyXG4iLCI8Y2FudmFzICNmbG9vcnBsYW5uZXJDYW52YXNcclxuICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQ29udGV4dE1lbnUoJGV2ZW50KVwiXHJcbiAgICAgICAgKG1vdXNlZG93bik9XCJoYW5kbGVNb3VzZURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgKG1vdXNlbW92ZSk9XCJoYW5kbGVNb3VzZU1vdmUoJGV2ZW50KVwiXHJcbiAgICAgICAgKG1vdXNldXApPVwiaGFuZGxlTW91c2VVcCgkZXZlbnQpXCJcclxuICAgICAgICAobW91c2VsZWF2ZSk9XCJoYW5kbGVNb3VzZUxlYXZlKCRldmVudClcIlxyXG4gICAgICAgICh3aGVlbCk9XCJoYW5kbGVNb3VzZVdoZWVsKCRldmVudClcIlxyXG4gICAgICAgICh0b3VjaHN0YXJ0KT1cImhhbmRsZVRvdWNoU3RhcnQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRvdWNobW92ZSk9XCJoYW5kbGVUb3VjaE1vdmUoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRvdWNoZW5kKT1cImhhbmRsZVRvdWNoVXAoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRvdWNoY2FuY2VsKT1cImhhbmRsZVRvdWNoRW5kKCRldmVudClcIlxyXG4+PC9jYW52YXM+XHJcblxyXG48d2FsbC1sZW5ndGgtaW5wdXQ+PC93YWxsLWxlbmd0aC1pbnB1dD5cclxuXHJcbjxkaXYgY2xhc3M9XCJjb250cm9scy10b3BcIj5cclxuICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgY2xhc3M9XCJtb2RlLXRvZ2dsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlRmxvb3JwbGFubmVyTW9kZSgkZXZlbnQudmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkTW9kZVwiXHJcbiAgPlxyXG4gICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCJmbG9vcnBsYW5uZXJNb2RlLkRyYXdcIiBbbWF0VG9vbHRpcF09XCInRFJBV19XQUxMUycgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+ZWRpdDwvbWF0LWljb24+XHJcbiAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCJmbG9vcnBsYW5uZXJNb2RlLk1vdmVcIiBbbWF0VG9vbHRpcF09XCInU0VMRUNUX0FORF9NT1ZFX1dBTExTJyB8IGxvY2FsaXplXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIiBzdmdJY29uPVwiaGFuZC1wb2ludGVyXCI+PC9tYXQtaWNvbj5cclxuICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiaGludFwiICpuZ0lmPVwibW9kZSA9PT0gZmxvb3JwbGFubmVyTW9kZS5EcmF3aW5nXCIgKGNsaWNrKT1cImNoYW5nZUZsb29ycGxhbm5lck1vZGUoZmxvb3JwbGFubmVyTW9kZS5EcmF3KVwiPlxyXG4gIHt7ICdDTElDS19IRVJFX1RPX0VYSVRfRFJBV0lOR19NT0RFX09SX1BSRVNTX1RIRV9FU0NfS0VZJyB8IGxvY2FsaXplIH19XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImhpbnRcIiAqbmdJZj1cIm1vZGUgPT09IGZsb29ycGxhbm5lck1vZGUuRHJhdyAmJiB0aGlzLnNob3dTdGFydGluZ01lc3NhZ2VzXCI+XHJcbiAge3sgJ1RBQl9BTllXSEVSRV9UT19TVEFSVCcgfCBsb2NhbGl6ZSB9fVxyXG48L2Rpdj5cclxuIl19
|
|
1320
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvb3JwbGFubmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvcm9vbS1wbGFubmVyL2NvbXBvbmVudHMvZmxvb3JwbGFubmVyL2Zsb29ycGxhbm5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3Jvb20tcGxhbm5lci9jb21wb25lbnRzL2Zsb29ycGxhbm5lci9mbG9vcnBsYW5uZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFnQixTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBYSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBQyxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFFM0MsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUNMLCtCQUErQixFQUMvQixrQkFBa0IsRUFDbEIsU0FBUyxFQUNULFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUNsQixTQUFTLEVBQ1QsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxTQUFTLEVBQ1QsZUFBZSxFQUNmLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IsU0FBUyxFQUNULGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLG9CQUFv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QU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzFCLENBQUM7O21IQTFpRFUscUJBQXFCO3VHQUFyQixxQkFBcUIsa1dBQ1EsVUFBVSwyQ0N4RXBELHNwREFvQ0E7NEZEbUNhLHFCQUFxQjtrQkFMakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsV0FBVyxFQUFFLCtCQUErQjtvQkFDNUMsU0FBUyxFQUFFLENBQUMsK0JBQStCLENBQUM7aUJBQzdDO29RQUdRLGFBQWE7c0JBRG5CLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBRzFELGtCQUFrQjtzQkFEeEIsTUFBTTtnQkFvR0EsZ0JBQWdCO3NCQUR0QixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU1yQyxjQUFjO3NCQURwQixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU1uQyxVQUFVO3NCQURoQixZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1NlbGVjdGVkV2FsbEV2ZW50fSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9zZWxlY3RlZC13YWxsLWV2ZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7Rmxvb3JwbGFubmVyTW9kZX0gZnJvbSAnLi9mbG9vcnBsYW5uZXItbW9kZSc7XHJcbmltcG9ydCB7XHJcbiAgYW5nbGVMYWJlbERpc3RhbmNlU2NhbGVUcmVzaG9sZCxcclxuICBjbGlja01pc3NUb2xlcmFuY2UsXHJcbiAgY21QZXJGb290LFxyXG4gIGNvcm5lckNvbG9yLFxyXG4gIGNvcm5lckNvbG9ySG92ZXIsXHJcbiAgY29ybmVyQ29sb3JTZWxlY3RlZCxcclxuICBkZWZhdWx0V2FsbFdpZHRoLFxyXG4gIGRlZmF1bHRXYWxsV2lkdGhIb3ZlcixcclxuICBkaW1lbnNpb25MaW5lRGlzdGFuY2UsXHJcbiAgZGltZW5zaW9uTGluZVdpZHRoLFxyXG4gIGRvb3JDb2xvcixcclxuICBkb29yQ29sb3JIb3ZlcixcclxuICBkb3VibGVDbGlja0R1cmF0aW9uTXMsXHJcbiAgZHJhd01vZGVDdXJzb3JIZWlnaHQsXHJcbiAgZHJhd01vZGVDdXJzb3JJbWFnZVVybCxcclxuICBlZGdlV2lkdGgsXHJcbiAgZ3JpZENvbG9yLFxyXG4gIGdyaWRTcGFjaW5nLFxyXG4gIGdyaWRXaWR0aCxcclxuICBsYWJlbFNpemUsXHJcbiAgbWF4Q29ybmVyUmFkaXVzLFxyXG4gIG1pbkNvcm5lclJhZGl1cyxcclxuICBtaW5Nb3VzZU1vdmVEaXN0YW5jZSxcclxuICBwaXhlbHNQZXJGb290LFxyXG4gIHJvb21Db2xvcixcclxuICBzZWxlY3RlZFJvb21Db2xvcixcclxuICBzbmFwSW5kaWNhdG9yQ29sb3IsXHJcbiAgc25hcEluZGljYXRvclJhZGl1cyxcclxuICBzbmFwVG9sZXJhbmNlLFxyXG4gIHdhbGxDb2xvcixcclxuICB3YWxsQ29sb3JIb3ZlcixcclxuICB3YWxsQ29sb3JTZWxlY3RlZCxcclxuICB3YWxsU3Ryb2tlQ29sb3IsXHJcbiAgd2FsbFN0cm9rZUNvbG9ySG92ZXIsXHJcbiAgd2FsbFN0cm9rZUNvbG9yU2VsZWN0ZWQsXHJcbiAgd2FsbFRoaWNrbmVzc011bHRpcGxpZXIsXHJcbiAgd2luZG93Q29sb3IsXHJcbiAgd2luZG93Q29sb3JIb3ZlclxyXG59IGZyb20gJy4vY29uc3QvZGVmYXVsdHMnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25LZXl9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvZW51bS9jb25maWd1cmF0aW9uLWtleS5lbnVtJztcclxuaW1wb3J0IHtEb3VibGVTaWRlLCBWZWN0b3IyLCBWZWN0b3IzfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7U25hcEluZGljYXRvck1vZGV9IGZyb20gJy4vc25hcC1pbmRpY2F0b3ItbW9kZSc7XHJcbmltcG9ydCB7Rmxvb3JwbGFuU2VydmljZX0gZnJvbSAnLi9zZXJ2aWNlL2Zsb29ycGxhbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlQnVzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL21lc3NhZ2UtYnVzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtEaW1lbnNpb25pbmdTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvZGltZW5zaW9uaW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ZpZXdNb2RlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3ZpZXctbW9kZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uRGF0YX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9pbnRlcmZhY2UvY29uZmlndXJhdGlvbi1kYXRhLmludGVyZmFjZSc7XHJcbmltcG9ydCB7TWVzc2FnZVR5cGV9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvZW51bS9tZXNzYWdlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7RmlsZVV0aWxzfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3V0aWxzL2ZpbGUudXRpbHMnO1xyXG5pbXBvcnQge1JlbGF0aXZlUG9zaXRpb25VdGlsc30gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91dGlscy9yZWxhdGl2ZS1wb3NpdGlvbi51dGlscyc7XHJcbmltcG9ydCB7S2V5fSBmcm9tICcuLi8uLi9jb25zdC9rZXknO1xyXG5pbXBvcnQge1V0aWxzfSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvY29yZS91dGlscyc7XHJcbmltcG9ydCB7Q29udGV4dFV0aWxzfSBmcm9tICcuL3V0aWxzL2NvbnRleHQudXRpbHMnO1xyXG5pbXBvcnQge0Nvcm5lciwgSGFsZkVkZ2UsIEluV2FsbEl0ZW0sIFJvb20sIFdhbGwsIFdhbGxJdGVtfSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvd2FsbC1vYmplY3RzJztcclxuaW1wb3J0IHtJdGVtfSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvaXRlbSc7XHJcbmltcG9ydCB7SW5XYWxsRmxvb3JJdGVtfSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvaW4td2FsbC1mbG9vci1pdGVtJztcclxuaW1wb3J0IHtBbmdsZXN9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9jb3JlL2FuZ2xlcyc7XHJcbmltcG9ydCB7Um9vbVNlcnZpY2V9IGZyb20gJy4vc2VydmljZS9yb29tLnNlcnZpY2UnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZmxvb3ItcGxhbm5lcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Zsb29ycGxhbm5lci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZmxvb3JwbGFubmVyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEZsb29ycGxhbm5lckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgnZmxvb3JwbGFubmVyQ2FudmFzJywge3JlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZX0pXHJcbiAgcHVibGljIGNhbnZhc0VsZW1lbnQ6IEVsZW1lbnRSZWY7XHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHNlbGVjdGVkV2FsbENoYW5nZTogU3ViamVjdDxTZWxlY3RlZFdhbGxFdmVudD4gPSBuZXcgU3ViamVjdDxTZWxlY3RlZFdhbGxFdmVudD4oKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlld1NjYWxlTWluID0gNTA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlld1NjYWxlTWF4ID0gMzAwO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2N1cnNvcnMgPSB7XHJcbiAgICBbRmxvb3JwbGFubmVyTW9kZS5EcmF3XTogYHVybCgke2RyYXdNb2RlQ3Vyc29ySW1hZ2VVcmx9KSAwICR7ZHJhd01vZGVDdXJzb3JIZWlnaHR9LCBhdXRvYCxcclxuICAgIFtGbG9vcnBsYW5uZXJNb2RlLkRyYXdpbmddOiBgdXJsKCR7ZHJhd01vZGVDdXJzb3JJbWFnZVVybH0pIDAgJHtkcmF3TW9kZUN1cnNvckhlaWdodH0sIGF1dG9gLFxyXG4gICAgW0Zsb29ycGxhbm5lck1vZGUuQ2FtZXJhTW92ZV06ICdncmFiJyxcclxuICAgIFtGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmluZ106ICdncmFiYmluZycsXHJcbiAgICBbRmxvb3JwbGFubmVyTW9kZS5Nb3ZlXTogJ2dyYWInLFxyXG4gICAgW0Zsb29ycGxhbm5lck1vZGUuTW92aW5nXTogJ2dyYWJiaW5nJ1xyXG4gIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlnVG9TeW5jID0ge1xyXG4gICAgW0NvbmZpZ3VyYXRpb25LZXkuU2hvd0RldGFpbGVkV2FsbE1lYXN1cmVtZW50c106ICdkZXRhaWxlZFdhbGxNZWFzdXJlbWVudHNNb2RlJyxcclxuICAgIFtDb25maWd1cmF0aW9uS2V5LlNob3dXYWxsSXRlbU1lYXN1cmVtZW50c106ICdzaG93V2FsbEl0ZW1NZWFzdXJlbWVudHMnLFxyXG4gICAgW0NvbmZpZ3VyYXRpb25LZXkuQ29ybmVyU25hcHBpbmddOiAnc25hcENvcm5lcnMnLFxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBzaG93U3RhcnRpbmdNZXNzYWdlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB0b3VjaE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfY2FudmFzOiBhbnk7XHJcbiAgcHJpdmF0ZSBfY29udGV4dDogYW55O1xyXG4gIHByaXZhdGUgX29yaWdpblg6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfb3JpZ2luWTogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF92aWV3U2NhbGU6IG51bWJlciA9IDEwMDtcclxuICBwcml2YXRlIF9hY3RpdmVGbG9vciA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfYWN0aXZlSXRlbTtcclxuICBwcml2YXRlIF9hY3RpdmVXYWxsO1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkV2FsbDtcclxuICBwcml2YXRlIF9hY3RpdmVDb3JuZXI7XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRDb3JuZXI7XHJcbiAgcHJpdmF0ZSBfb2Zmc2V0WDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9vZmZzZXRZOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX21vdXNlWDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9tb3VzZVk6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfcmF3TW91c2U6IFZlY3RvcjIgPSBuZXcgVmVjdG9yMigwLCAwKTtcclxuICBwcml2YXRlIF9tb3VzZURvd246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9tb3VzZURvd25Qb3NpdGlvbjogVmVjdG9yMiA9IG5ldyBWZWN0b3IyKCk7XHJcbiAgcHJpdmF0ZSBfc3RhcnREcmFnTW91c2U6IFZlY3RvcjIgPSBuZXcgVmVjdG9yMigpO1xyXG4gIHByaXZhdGUgX3N0YXJ0RHJhZ0Nvcm5lcjogVmVjdG9yMiA9IG5ldyBWZWN0b3IyKCk7XHJcbiAgcHJpdmF0ZSBfbGFzdE1vdXNlVXBUaW1lc3RhbXA6IG51bWJlcjtcclxuICBwcml2YXRlIF9tb3ZpbmdTdGF0ZUNoYW5nZXM6IHsgW2luZGV4OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcclxuICBwcml2YXRlIF9sYXN0WDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9sYXN0WTogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF90YXJnZXRYOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX3RhcmdldFk6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfc25hcEluZGljYXRvck1vZGU6IFNuYXBJbmRpY2F0b3JNb2RlO1xyXG4gIHByaXZhdGUgX3NuYXBQb2ludCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfbGFzdE5vZGUgPSBudWxsO1xyXG4gIHByaXZhdGUgX3dhbGxMZW5ndGg6IG51bWJlcjtcclxuICBwcml2YXRlIF9zdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgX21vZGU6IEZsb29ycGxhbm5lck1vZGUgPSBGbG9vcnBsYW5uZXJNb2RlLkRyYXc7XHJcbiAgcHJpdmF0ZSBfY21QZXJQaXhlbDogbnVtYmVyO1xyXG4gIHByaXZhdGUgX3BpeGVsc1BlckNtOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRGbG9vciA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfbW9kZUJlZm9yZVJpZ2h0TW91c2VNb3ZlO1xyXG5cclxuICBwcml2YXRlIF9kaWFncmFtQmFja2dyb3VuZDogSFRNTEltYWdlRWxlbWVudDtcclxuICBwcml2YXRlIF9kaWFncmFtQmFja2dyb3VuZFNjYWxlOiBudW1iZXIgPSAxO1xyXG4gIHByaXZhdGUgX2RpYWdyYW1CYWNrZ3JvdW5kQ3VycmVudFNjYWxlOiBudW1iZXIgPSAxMDA7XHJcbiAgcHJpdmF0ZSBfZGlhZ3JhbUJhY2tncm91bmRIZWlnaHQ6IG51bWJlcjtcclxuICBwcml2YXRlIF9kaWFncmFtQmFja2dyb3VuZFdpZHRoOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfZGlhZ3JhbUJhY2tncm91bmRBY3RpdmVab29tOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX2RpYWdyYW1TY2FsZTogbnVtYmVyO1xyXG4gIHByaXZhdGUgX2NhbWVyYVpvb206IG51bWJlcjtcclxuXHJcbiAgcHJpdmF0ZSBfbGFzdFRvdWNoUG9pbnQ6IFZlY3RvcjI7XHJcbiAgcHJpdmF0ZSBfcmVhZHlUb0RyYXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgcmVhZG9ubHkgZmxvb3JwbGFubmVyTW9kZTogdHlwZW9mIEZsb29ycGxhbm5lck1vZGUgPSBGbG9vcnBsYW5uZXJNb2RlO1xyXG4gIHB1YmxpYyByZWFkb25seSBpbml0aWFsVmlld1NjYWxlID0gMTAwO1xyXG4gIHB1YmxpYyByZWFkb25seSBzY2FsaW5nRmFjdG9yID0gMS4yO1xyXG5cclxuICBwdWJsaWMgZGV0YWlsZWRXYWxsTWVhc3VyZW1lbnRzTW9kZTogYm9vbGVhbjtcclxuICBwdWJsaWMgc2hvd1dhbGxJdGVtTWVhc3VyZW1lbnRzOiBib29sZWFuO1xyXG4gIHB1YmxpYyBzbmFwQ29ybmVyczogYm9vbGVhbjtcclxuICBwdWJsaWMgc2VsZWN0ZWRNb2RlOiBGbG9vcnBsYW5uZXJNb2RlID0gRmxvb3JwbGFubmVyTW9kZS5EcmF3O1xyXG5cclxuICBwdWJsaWMgc2V0IG1vZGUodmFsdWU6IEZsb29ycGxhbm5lck1vZGUpIHtcclxuICAgIHRoaXMuX21vZGUgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLl9jYW52YXMpIHtcclxuICAgICAgdGhpcy5fY2FudmFzLnN0eWxlLmN1cnNvciA9IHRoaXMuX2N1cnNvcnNbdGhpcy5tb2RlXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbW9kZSgpOiBGbG9vcnBsYW5uZXJNb2RlIHtcclxuICAgIHJldHVybiB0aGlzLl9tb2RlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYW50Wm9vbUluKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdTY2FsZSA+IHRoaXMuX3ZpZXdTY2FsZU1heDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FudFpvb21PdXQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmlld1NjYWxlIDwgdGhpcy5fdmlld1NjYWxlTWluO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgcHVibGljIGhhbmRsZURvY0tleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXl1cCcsIFsnJGV2ZW50J10pXHJcbiAgcHVibGljIGhhbmRsZURvY0tleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZUtleVVwKGV2ZW50KTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxyXG4gIHB1YmxpYyByZXNpemVHcmlkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5faGFuZGxlV2luZG93UmVzaXplKCk7XHJcbiAgICB0aGlzLnJlc2V0KCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2Zsb29ycGxhblNlcnZpY2U6IEZsb29ycGxhblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlQnVzU2VydmljZTogTWVzc2FnZUJ1c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jb25maWd1cmF0aW9uU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaW1lbnNpb25TZXJ2aWNlOiBEaW1lbnNpb25pbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdmlld01vZGVTZXJ2aWNlOiBWaWV3TW9kZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9yb29tU2VydmljZTogUm9vbVNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICB0aGlzLl91cGRhdGVDbVBlclBpeGVsKCk7XHJcblxyXG4gICAgT2JqZWN0LmtleXModGhpcy5fY29uZmlnVG9TeW5jKS5mb3JFYWNoKChrZXk6IENvbmZpZ3VyYXRpb25LZXkpID0+IHtcclxuICAgICAgY29uc3QgcHJvcE5hbWUgPSB0aGlzLl9jb25maWdUb1N5bmNba2V5XTtcclxuICAgICAgdGhpc1twcm9wTmFtZV0gPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShrZXkpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgIHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLm9uQ2hhbmdlLnN1YnNjcmliZSgoY2hhbmdlZDogQ29uZmlndXJhdGlvbkRhdGEpID0+IHtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLl9jb25maWdUb1N5bmMpLmZvckVhY2goKGtleTogQ29uZmlndXJhdGlvbktleSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGtleSBpbiBjaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3BOYW1lID0gdGhpcy5fY29uZmlnVG9TeW5jW2tleV07XHJcbiAgICAgICAgICAgIHRoaXNbcHJvcE5hbWVdID0gY2hhbmdlZFtrZXldO1xyXG4gICAgICAgICAgICB0aGlzLl9kcmF3KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLnJvb21zVXBkYXRlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fZHJhdygpKSxcclxuICAgICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5yZWRyYXcuc3Vic2NyaWJlKHIgPT4gdGhpcy5fZHJhdygpKSxcclxuICAgICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5yb29tTG9hZGVkLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlc2V0KCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuV2FsbExlbmd0aElucHV0VmFsdWVDaGFuZ2VkLCAobGVuZ3RoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fd2FsbExlbmd0aCA9IGxlbmd0aCAvIDEwMDtcclxuICAgICAgICB0aGlzLl91cGRhdGVXYWxsUG9zaXRpb24oKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXNTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5UYWtlU2NyZWVuc2hvdCwgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl92aWV3TW9kZVNlcnZpY2UuaXMyZFZpZXdBY3RpdmUoKSkge1xyXG4gICAgICAgICAgY29uc3QgZGF0YVVybCA9IHRoaXMuX2NhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnKTtcclxuICAgICAgICAgIEZpbGVVdGlscy5Eb3dubG9hZEZyb21EYXRhVXJpKGRhdGFVcmwsIGBNeVJvb21wbGFuJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9LmpwZWdgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuU3RhcnRXaXRoRW1wdHlSb29tLCAoKSA9PiB0aGlzLnNob3dTdGFydE1lc3NhZ2UoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXNTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5Mb2FkU2NhbGVkRGlhZ3JhbSwgKGlucHV0KSA9PiB0aGlzLnNldERpYWdyYW1TZXR0aW5ncyhpbnB1dCkpXHJcbiAgICApO1xyXG4gICAgdGhpcy50b3VjaE1vZGUgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LkVuYWJsZVRvdWNoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vicy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICAgIHRoaXMuY2FudmFzRWxlbWVudCA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNhbnZhc0VsZW1lbnQgJiYgdGhpcy5jYW52YXNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5fY2FudmFzID0gdGhpcy5jYW52YXNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIHRoaXMuX2NvbnRleHQgPSB0aGlzLmNhbnZhc0VsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICB0aGlzLl9vZmZzZXRYID0gdGhpcy5fY2FudmFzLmNsaWVudExlZnQ7XHJcbiAgICAgIHRoaXMuX29mZnNldFkgPSB0aGlzLl9jYW52YXMuY2xpZW50VG9wO1xyXG4gICAgICB0aGlzLl9oYW5kbGVXaW5kb3dSZXNpemUoKTtcclxuICAgICAgdGhpcy5fcmVhZHlUb0RyYXcgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dTdGFydE1lc3NhZ2UoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fZGlhZ3JhbUJhY2tncm91bmQpIHtcclxuICAgICAgdGhpcy5fZGlhZ3JhbUJhY2tncm91bmQuc3JjID0gJyc7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLnJlc2V0KCk7XHJcbiAgICB0aGlzLl9kcmF3KCk7XHJcbiAgICB0aGlzLnNob3dTdGFydGluZ01lc3NhZ2VzID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRNb2RlKG1vZGU6IEZsb29ycGxhbm5lck1vZGUpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NsZWFuV2FsbExlbmd0aCgpO1xyXG4gICAgdGhpcy5fbGFzdE5vZGUgPSBudWxsO1xyXG4gICAgdGhpcy5tb2RlID0gbW9kZTtcclxuICAgIHRoaXMuX3VwZGF0ZVRhcmdldCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2l6ZVZpZXcoKSB7XHJcbiAgICB0aGlzLl9oYW5kbGVXaW5kb3dSZXNpemUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3ZpZXdTY2FsZSA9IHRoaXMuX2dldEluaXRpYWxWaWV3U2NhbGUoKTtcclxuICAgIHRoaXMucmVzaXplVmlldygpO1xyXG4gICAgdGhpcy5zZXREZWZhdWx0TW9kZSgpO1xyXG4gICAgdGhpcy5fcmVzZXRPcmlnaW4oKTtcclxuICAgIHRoaXMuX2RyYXcoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB6b29tSW4oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jYW50Wm9vbUluKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2NsZWFyKCk7XHJcbiAgICB0aGlzLl92aWV3U2NhbGUgKj0gdGhpcy5zY2FsaW5nRmFjdG9yO1xyXG4gICAgdGhpcy5fZGlhZ3JhbUJhY2tncm91bmRTY2FsZSA9IHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kU2NhbGUgKiB0aGlzLnNjYWxpbmdGYWN0b3I7XHJcbiAgICB0aGlzLl9kaWFncmFtQmFja2dyb3VuZEFjdGl2ZVpvb20gPSB0cnVlO1xyXG4gICAgdGhpcy5fc2NhbGUodGhpcy5zY2FsaW5nRmFjdG9yLCB0aGlzLnNjYWxpbmdGYWN0b3IpO1xyXG4gICAgdGhpcy5fc2NhbGVPcmlnaW4oKTtcclxuICAgIHRoaXMucmVzaXplVmlldygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHpvb21PdXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jYW50Wm9vbU91dCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9jbGVhcigpO1xyXG4gICAgdGhpcy5fdmlld1NjYWxlIC89IHRoaXMuc2NhbGluZ0ZhY3RvcjtcclxuICAgIHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kU2NhbGUgPSB0aGlzLl9kaWFncmFtQmFja2dyb3VuZFNjYWxlICogKDEgLyB0aGlzLnNjYWxpbmdGYWN0b3IpO1xyXG4gICAgdGhpcy5fZGlhZ3JhbUJhY2tncm91bmRBY3RpdmVab29tID0gdHJ1ZTtcclxuICAgIHRoaXMuX3NjYWxlKDEgLyB0aGlzLnNjYWxpbmdGYWN0b3IsIDEgLyB0aGlzLnNjYWxpbmdGYWN0b3IpO1xyXG4gICAgdGhpcy5fc2NhbGVPcmlnaW4oKTtcclxuICAgIHRoaXMucmVzaXplVmlldygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHpvb21SZXNldCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NsZWFyKCk7XHJcbiAgICB0aGlzLl9zY2FsZSgxIC8gdGhpcy5fdmlld1NjYWxlLCAxIC8gdGhpcy5fdmlld1NjYWxlKTtcclxuICAgIHRoaXMucmVzZXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RDb3JuZXIoY29ybmVyKSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZENvcm5lciA9IGNvcm5lcjtcclxuICAgIHRoaXMuX2RyYXcoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTZWxlY3RlZE1vZGUobW9kZTogRmxvb3JwbGFubmVyTW9kZSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZE1vZGUgPSBtb2RlO1xyXG4gICAgdGhpcy5zZXRNb2RlKG1vZGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERlZmF1bHRNb2RlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc25hcFBvaW50ID0gbnVsbDtcclxuICAgIHRoaXMuc2V0TW9kZSh0aGlzLnNlbGVjdGVkTW9kZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlQ29udGV4dE1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuX2xhc3RYID0gdGhpcy5fcmF3TW91c2UueDtcclxuICAgIHRoaXMuX2xhc3RZID0gdGhpcy5fcmF3TW91c2UueTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVNb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuX2xhc3RYID0gdGhpcy5fcmF3TW91c2UueDtcclxuICAgIHRoaXMuX2xhc3RZID0gdGhpcy5fcmF3TW91c2UueTtcclxuICAgIGlmIChldmVudC5idXR0b24gPT09IDIpIHsgLy8gcmlnaHQgbW91c2UgYnV0dG9uIG1vdmVzIHRoZSBjYW1lcmEgYnkgZGVmYXVsdFxyXG4gICAgICB0aGlzLl9tb2RlQmVmb3JlUmlnaHRNb3VzZU1vdmUgPSB0aGlzLm1vZGU7XHJcbiAgICAgIHRoaXMuc2V0TW9kZShGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmluZyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9tb3VzZURvd24gPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmUpIHtcclxuICAgICAgICB0aGlzLnNldE1vZGUoRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZpbmcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9tb3VzZURvd25Qb3NpdGlvbi5jb3B5KFJlbGF0aXZlUG9zaXRpb25VdGlscy5HZXRDbGllbnRNb3VzZVBvc2l0aW9uKGV2ZW50KSk7XHJcbiAgICBjb25zdCBoYXNBY3RpdmUgPSB0aGlzLl9hY3RpdmVXYWxsIHx8IHRoaXMuX2FjdGl2ZUNvcm5lciB8fCB0aGlzLl9hY3RpdmVJdGVtO1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5Nb3ZlICYmIGhhc0FjdGl2ZSkge1xyXG4gICAgICB0aGlzLnNldE1vZGUoRmxvb3JwbGFubmVyTW9kZS5Nb3ZpbmcpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuTW92ZSAmJiAhaGFzQWN0aXZlKSB7XHJcbiAgICAgIHRoaXMuc2V0TW9kZShGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmluZyk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5EcmF3KSB7XHJcbiAgICAgIHRoaXMuc2V0TW9kZShGbG9vcnBsYW5uZXJNb2RlLkRyYXdpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZVRvdWNoU3RhcnQoZXZlbnQ6IFRvdWNoRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnRvdWNoTW9kZSkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgdGhpcy5fbGFzdFggPSB0aGlzLl9yYXdNb3VzZS54O1xyXG4gICAgICB0aGlzLl9sYXN0WSA9IHRoaXMuX3Jhd01vdXNlLnk7XHJcbiAgICAgIHRoaXMuX21vdXNlRG93blBvc2l0aW9uLmNvcHkoUmVsYXRpdmVQb3NpdGlvblV0aWxzLkdldENsaWVudFRvdWNoUG9zaXRpb24oZXZlbnQsIHRoaXMuX2NhbnZhcykpO1xyXG4gICAgICB0aGlzLl9sYXN0VG91Y2hQb2ludCA9IHRoaXMuX21vdXNlRG93blBvc2l0aW9uO1xyXG4gICAgICBjb25zdCBoYXNBY3RpdmUgPSB0aGlzLl9hY3RpdmVXYWxsIHx8IHRoaXMuX2FjdGl2ZUNvcm5lciB8fCB0aGlzLl9hY3RpdmVJdGVtO1xyXG4gICAgICBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLk1vdmUgJiYgaGFzQWN0aXZlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRNb2RlKEZsb29ycGxhbm5lck1vZGUuTW92aW5nKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuTW92ZSAmJiAhaGFzQWN0aXZlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRNb2RlKEZsb29ycGxhbm5lck1vZGUuQ2FtZXJhTW92aW5nKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuRHJhdykge1xyXG4gICAgICAgIHRoaXMuc2V0TW9kZShGbG9vcnBsYW5uZXJNb2RlLkRyYXdpbmcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlTW91c2VVcChldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5fbW91c2VEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLl9mbHVzaE1vdmluZ1N0YXRlQ2hhbmdlcygpO1xyXG5cclxuICAgIC8vIGRldGVjdCBtb3VzZUNsaWNrXHJcbiAgICBpZiAoIXRoaXMuX2hhc01vdXNlTW92ZWQoZXZlbnQpKSB7XHJcbiAgICAgIGlmICh0aGlzLl9tb3VzZUNsaWNrSGFuZGxlZChldmVudCkpIHtcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRNb2RlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBtb3ZpbmdcclxuICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuTW92aW5nKSB7XHJcbiAgICAgIHRoaXMuc2V0RGVmYXVsdE1vZGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkcmF3aW5nXHJcbiAgICBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkRyYXdpbmcpIHtcclxuICAgICAgdGhpcy5faWZOb3REb3VibGVDbGljaygoKSA9PiB0aGlzLl9oYW5kbGVEcmF3aW5nTW91c2VVcCgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbmQgcGFubmluZ1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZlIHx8XHJcbiAgICAgIHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZpbmcpIHtcclxuICAgICAgaWYgKGV2ZW50LmJ1dHRvbiA9PT0gMikgeyAvLyByaWdodCBtb3VzZSBidXR0b24gZG93biwganVzdCBzdG9wIG1vdmluZyBjYW1lcmFcclxuICAgICAgICB0aGlzLnNldE1vZGUodGhpcy5fbW9kZUJlZm9yZVJpZ2h0TW91c2VNb3ZlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRNb2RlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVUb3VjaFVwKGV2ZW50OiBUb3VjaEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50b3VjaE1vZGUpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIHRoaXMuX21vdXNlRG93biA9IGZhbHNlO1xyXG4gICAgICB0aGlzLl9mbHVzaE1vdmluZ1N0YXRlQ2hhbmdlcygpO1xyXG5cclxuXHJcbiAgICAgIC8vIGlmICh0aGlzLl90b3VjaEV2ZW50SGFuZGxlZChldmVudCkpIHtcclxuICAgICAgLy8gICB0aGlzLnNldERlZmF1bHRNb2RlKCk7XHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIC8vIG1vdmluZ1xyXG4gICAgICBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLk1vdmluZykge1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdE1vZGUoKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBkcmF3aW5nXHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuRHJhd2luZykge1xyXG4gICAgICAgIC8vIHRoaXMuX2lmTm90RG91YmxlQ2xpY2soKCkgPT4gdGhpcy5faGFuZGxlRHJhd2luZ01vdXNlVXAoKSk7XHJcbiAgICAgICAgdGhpcy5faGFuZGxlRHJhd2luZ01vdXNlVXAoKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBlbmQgcGFubmluZ1xyXG4gICAgICAvLyBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmUgfHxcclxuICAgICAgLy8gICB0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuQ2FtZXJhTW92aW5nKSB7XHJcbiAgICAgIC8vICAgaWYgKGV2ZW50LmJ1dHRvbiA9PT0gMikgeyAvLyByaWdodCBtb3VzZSBidXR0b24gZG93biwganVzdCBzdG9wIG1vdmluZyBjYW1lcmFcclxuICAgICAgLy8gICAgIHRoaXMuc2V0TW9kZSh0aGlzLl9tb2RlQmVmb3JlUmlnaHRNb3VzZU1vdmUpO1xyXG4gICAgICAvLyAgIH0gZWxzZSB7XHJcbiAgICAgIC8vICAgICB0aGlzLnNldERlZmF1bHRNb2RlKCk7XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBpZiAoIXRoaXMuX2hhc01vdXNlTW92ZWQoZXZlbnQpKSB7XHJcblxyXG4gICAgfVxyXG4gICAgY29uc3QgbW91c2VQb3NpdGlvbiA9IFJlbGF0aXZlUG9zaXRpb25VdGlscy5HZXRDbGllbnRNb3VzZVBvc2l0aW9uKGV2ZW50KTtcclxuICAgIC8vIHVwZGF0ZSBtb3VzZVxyXG4gICAgdGhpcy5fcmF3TW91c2UuY29weShtb3VzZVBvc2l0aW9uKTtcclxuICAgIHRoaXMuX21vdXNlWCA9ICh0aGlzLl9yYXdNb3VzZS54IC0gdGhpcy5fb2Zmc2V0WCkgKiB0aGlzLl9jbVBlclBpeGVsICsgdGhpcy5fb3JpZ2luWCAqIHRoaXMuX2NtUGVyUGl4ZWw7XHJcbiAgICB0aGlzLl9tb3VzZVkgPSAodGhpcy5fcmF3TW91c2UueSAtIHRoaXMuX29mZnNldFkpICogdGhpcy5fY21QZXJQaXhlbCArIHRoaXMuX29yaWdpblkgKiB0aGlzLl9jbVBlclBpeGVsO1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZlICYmIHRoaXMuX21vdXNlRG93bikge1xyXG4gICAgICB0aGlzLnNldE1vZGUoRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZpbmcpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5EcmF3IHx8IHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5EcmF3aW5nKSB7XHJcbiAgICAgIHRoaXMuX3VwZGF0ZVdhbGxQb3NpdGlvbigpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5Nb3ZlKSB7XHJcbiAgICAgIGNvbnN0IGhvdmVyQ29ybmVyID0gdGhpcy5fZmxvb3JwbGFuU2VydmljZS5vdmVybGFwcGVkQ29ybmVyKHRoaXMuX21vdXNlWCwgdGhpcy5fbW91c2VZKTtcclxuICAgICAgY29uc3QgaG92ZXJXYWxsID0gdGhpcy5fZmxvb3JwbGFuU2VydmljZS5vdmVybGFwcGVkV2FsbCh0aGlzLl9tb3VzZVgsIHRoaXMuX21vdXNlWSk7XHJcbiAgICAgIGNvbnN0IGhvdmVyRmxvb3IgPSB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLm92ZXJsYXBwZWRGbG9vcih0aGlzLl9tb3VzZVgsIHRoaXMuX21vdXNlWSk7XHJcbiAgICAgIGNvbnN0IGhvdmVySXRlbSA9IHRoaXMuX2Zsb29ycGxhblNlcnZpY2Uub3ZlcmxhcHBlZEl0ZW0odGhpcy5fbW91c2VYLCB0aGlzLl9tb3VzZVkpO1xyXG4gICAgICBsZXQgZHJhdyA9IGZhbHNlO1xyXG4gICAgICBpZiAoaG92ZXJDb3JuZXIgIT09IHRoaXMuX2FjdGl2ZUNvcm5lcikge1xyXG4gICAgICAgIHRoaXMuX2FjdGl2ZUNvcm5lciA9IGhvdmVyQ29ybmVyO1xyXG4gICAgICAgIGRyYXcgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGNvcm5lciB0YWtlcyBwcmVjZW5kZW5jZVxyXG4gICAgICBpZiAodGhpcy5fYWN0aXZlQ29ybmVyID09IG51bGwpIHtcclxuICAgICAgICBpZiAoaG92ZXJJdGVtICE9PSB0aGlzLl9hY3RpdmVJdGVtKSB7XHJcbiAgICAgICAgICB0aGlzLl9hY3RpdmVJdGVtID0gaG92ZXJJdGVtO1xyXG4gICAgICAgICAgdGhpcy5fYWN0aXZlV2FsbCA9IG51bGw7XHJcbiAgICAgICAgICBkcmF3ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZUl0ZW0gPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5fYWN0aXZlV2FsbCA9IGhvdmVyV2FsbDtcclxuICAgICAgICAgIHRoaXMuX3N0YXJ0RHJhZ01vdXNlLmNvcHkodGhpcy5fcmF3TW91c2UpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZVdhbGwpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnREcmFnQ29ybmVyLnNldCh0aGlzLl9hY3RpdmVXYWxsLnN0YXJ0LngsIHRoaXMuX2FjdGl2ZVdhbGwuc3RhcnQueSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkcmF3ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGhvdmVyRmxvb3IgIT09IHRoaXMuX2FjdGl2ZUZsb29yKSB7XHJcbiAgICAgICAgICB0aGlzLl9hY3RpdmVGbG9vciA9IGhvdmVyRmxvb3I7XHJcbiAgICAgICAgICBkcmF3ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fYWN0aXZlV2FsbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fYWN0aXZlSXRlbSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGRyYXcpIHtcclxuICAgICAgICB0aGlzLl9kcmF3KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBwYW5uaW5nXHJcbiAgICBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmluZyAmJlxyXG4gICAgICAhdGhpcy5fYWN0aXZlQ29ybmVyICYmICF0aGlzLl9hY3RpdmVXYWxsICYmICF0aGlzLl9hY3RpdmVJdGVtKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpblggKz0gKHRoaXMuX2xhc3RYIC0gdGhpcy5fcmF3TW91c2UueCk7XHJcbiAgICAgIHRoaXMuX29yaWdpblkgKz0gKHRoaXMuX2xhc3RZIC0gdGhpcy5fcmF3TW91c2UueSk7XHJcbiAgICAgIHRoaXMuX2xhc3RYID0gdGhpcy5fcmF3TW91c2UueDtcclxuICAgICAgdGhpcy5fbGFzdFkgPSB0aGlzLl9yYXdNb3VzZS55O1xyXG4gICAgICB0aGlzLl9kcmF3KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZHJhZ2dpbmdcclxuICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuTW92aW5nKSB7XHJcbiAgICAgIGlmICh0aGlzLl9hY3RpdmVDb3JuZXIpIHtcclxuICAgICAgICB0aGlzLl9hY3RpdmVDb3JuZXIubW92ZSh0aGlzLl9tb3VzZVgsIHRoaXMuX21vdXNlWSk7XHJcbiAgICAgICAgdGhpcy5fbm90aWNlU3RhdGUoJ2Nvcm5lciBtb3ZlZCcpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2FjdGl2ZVdhbGwpIHtcclxuICAgICAgICBjb25zdCB7c3RhcnQsIGVuZH0gPSB0aGlzLl9hY3RpdmVXYWxsO1xyXG4gICAgICAgIGNvbnN0IG1vdXNlRHJhZ0RpZmYgPSBuZXcgVmVjdG9yMigpLmNvcHkodGhpcy5fcmF3TW91c2UpLnN1Yih0aGlzLl9zdGFydERyYWdNb3VzZSkubXVsdGlwbHlTY2FsYXIodGhpcy5fY21QZXJQaXhlbCk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnRFbmRDb3JuZXJEaWZmID0gbmV3IFZlY3RvcjIoZW5kLnggLSBzdGFydC54LCBlbmQueSAtIHN0YXJ0LnkpO1xyXG4gICAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gbmV3IFZlY3RvcjIoKS5jb3B5KHRoaXMuX3N0YXJ0RHJhZ0Nvcm5lcikuYWRkKG1vdXNlRHJhZ0RpZmYpO1xyXG4gICAgICAgIGNvbnN0IG5ld0VuZCA9IG5ldyBWZWN0b3IyKCkuY29weShuZXdTdGFydCkuYWRkKHN0YXJ0RW5kQ29ybmVyRGlmZik7XHJcbiAgICAgICAgY29uc3QgdG9sZXJhbmNlID0gMzAgKiB0aGlzLl9jbVBlclBpeGVsO1xyXG4gICAgICAgIGxldCBzbmFwcGVkID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuV2FsbFNuYXBwaW5nKSkge1xyXG4gICAgICAgICAgW1tzdGFydCwgbmV3U3RhcnRdLCBbZW5kLCBuZXdFbmRdXS5mb3JFYWNoKChbY29ybmVyLCBuZXdDb3JuZXJQb3NdKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzbmFwcGVkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAuLi5jb3JuZXIud2FsbEVuZHMubWFwKHcgPT4gdy5zdGFydCksXHJcbiAgICAgICAgICAgICAgLi4uY29ybmVyLndhbGxTdGFydHMubWFwKHcgPT4gdy5lbmQpXHJcbiAgICAgICAgICAgIF0uZm9yRWFjaChvdGhlckNvcm5lciA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHNuYXBwZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKG90aGVyQ29ybmVyID09PSBzdGFydCB8fCBvdGhlckNvcm5lciA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChNYXRoLmFicyhvdGhlckNvcm5lci55IC0gbmV3Q29ybmVyUG9zLnkpIDwgdG9sZXJhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICBzbmFwcGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIG5ld1N0YXJ0LnkgKz0gb3RoZXJDb3JuZXIueSAtIG5ld0Nvcm5lclBvcy55O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMob3RoZXJDb3JuZXIueCAtIG5ld0Nvcm5lclBvcy54KSA8IHRvbGVyYW5jZSkge1xyXG4gICAgICAgICAgICAgICAgc25hcHBlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBuZXdTdGFydC54ICs9IG90aGVyQ29ybmVyLnggLSBuZXdDb3JuZXJQb3MueDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2FjdGl2ZVdhbGwubW92ZShuZXdTdGFydC54LCBuZXdTdGFydC55KTtcclxuICAgICAgICB0aGlzLl9sYXN0WCA9IHRoaXMuX3Jhd01vdXNlLng7XHJcbiAgICAgICAgdGhpcy5fbGFzdFkgPSB0aGlzLl9yYXdNb3VzZS55O1xyXG4gICAgICAgIHRoaXMuX25vdGljZVN0YXRlKCd3YWxsIG1vdmVkJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYWN0aXZlSXRlbSkge1xyXG4gICAgICAgIGNvbnN0IGNsb3Nlc3RIYWxmRWRnZSA9IHRoaXMuX2ZpbmRDbG9zZXN0SGFsZkVkZ2UodGhpcy5fbW91c2VYLCB0aGlzLl9tb3VzZVkpO1xyXG4gICAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0ubW92ZVRvMmRQb3NpdGlvbih0aGlzLl9tb3VzZVgsIHRoaXMuX21vdXNlWSwgY2xvc2VzdEhhbGZFZGdlKTtcclxuICAgICAgICB0aGlzLl9sYXN0WCA9IHRoaXMuX3Jhd01vdXNlLng7XHJcbiAgICAgICAgdGhpcy5fbGFzdFkgPSB0aGlzLl9yYXdNb3VzZS55O1xyXG4gICAgICAgIHRoaXMuX25vdGljZVN0YXRlKCdpdGVtIG1vdmVkJyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fZHJhdygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBoYW5kbGVUb3VjaE1vdmUoZXZlbnQ6IFRvdWNoRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnRvdWNoTW9kZSkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgaWYgKCF0aGlzLl9oYXNNb3VzZU1vdmVkKGV2ZW50KSkge1xyXG5cclxuICAgICAgfVxyXG4gICAgICBjb25zdCBtb3VzZVBvc2l0aW9uID0gUmVsYXRpdmVQb3NpdGlvblV0aWxzLkdldENsaWVudFRvdWNoUG9zaXRpb24oZXZlbnQsIHRoaXMuX2NhbnZhcyk7XHJcbiAgICAgIC8vIHVwZGF0ZSBtb3VzZVxyXG4gICAgICB0aGlzLl9yYXdNb3VzZS5jb3B5KG1vdXNlUG9zaXRpb24pO1xyXG5cclxuICAgICAgdGhpcy5fbW91c2VYID0gKHRoaXMuX3Jhd01vdXNlLnggLSB0aGlzLl9vZmZzZXRYKSAqIHRoaXMuX2NtUGVyUGl4ZWwgKyB0aGlzLl9vcmlnaW5YICogdGhpcy5fY21QZXJQaXhlbDtcclxuICAgICAgdGhpcy5fbW91c2VZID0gKHRoaXMuX3Jhd01vdXNlLnkgLSB0aGlzLl9vZmZzZXRZKSAqIHRoaXMuX2NtUGVyUGl4ZWwgKyB0aGlzLl9vcmlnaW5ZICogdGhpcy5fY21QZXJQaXhlbDtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuQ2FtZXJhTW92ZSAmJiB0aGlzLl9tb3VzZURvd24pIHtcclxuICAgICAgICB0aGlzLnNldE1vZGUoRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZpbmcpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuRHJhdyB8fCB0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuRHJhd2luZykge1xyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVdhbGxQb3NpdGlvbigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLk1vdmUpIHtcclxuICAgICAgICBjb25zdCBob3ZlckNvcm5lciA9IHRoaXMuX2Zsb29ycGxhblNlcnZpY2Uub3ZlcmxhcHBlZENvcm5lcih0aGlzLl9tb3VzZVgsIHRoaXMuX21vdXNlWSk7XHJcbiAgICAgICAgY29uc3QgaG92ZXJXYWxsID0gdGhpcy5fZmxvb3JwbGFuU2VydmljZS5vdmVybGFwcGVkV2FsbCh0aGlzLl9tb3VzZVgsIHRoaXMuX21vdXNlWSk7XHJcbiAgICAgICAgY29uc3QgaG92ZXJGbG9vciA9IHRoaXMuX2Zsb29ycGxhblNlcnZpY2Uub3ZlcmxhcHBlZEZsb29yKHRoaXMuX21vdXNlWCwgdGhpcy5fbW91c2VZKTtcclxuICAgICAgICBjb25zdCBob3Zlckl0ZW0gPSB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLm92ZXJsYXBwZWRJdGVtKHRoaXMuX21vdXNlWCwgdGhpcy5fbW91c2VZKTtcclxuICAgICAgICBsZXQgZHJhdyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChob3ZlckNvcm5lciAhPT0gdGhpcy5fYWN0aXZlQ29ybmVyKSB7XHJcbiAgICAgICAgICB0aGlzLl9hY3RpdmVDb3JuZXIgPSBob3ZlckNvcm5lcjtcclxuICAgICAgICAgIGRyYXcgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb3JuZXIgdGFrZXMgcHJlY2VuZGVuY2VcclxuICAgICAgICBpZiAodGhpcy5fYWN0aXZlQ29ybmVyID09IG51bGwpIHtcclxuICAgICAgICAgIGlmIChob3Zlckl0ZW0gIT09IHRoaXMuX2FjdGl2ZUl0ZW0pIHtcclxuICAgICAgICAgICAgdGhpcy5fYWN0aXZlSXRlbSA9IGhvdmVySXRlbTtcclxuICAgICAgICAgICAgdGhpcy5fYWN0aXZlV2FsbCA9IG51bGw7XHJcbiAgICAgICAgICAgIGRyYXcgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZUl0ZW0gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVXYWxsID0gaG92ZXJXYWxsO1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydERyYWdNb3VzZS5jb3B5KHRoaXMuX3Jhd01vdXNlKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZVdhbGwpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9zdGFydERyYWdDb3JuZXIuc2V0KHRoaXMuX2FjdGl2ZVdhbGwuc3RhcnQueCwgdGhpcy5fYWN0aXZlV2FsbC5zdGFydC55KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkcmF3ID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChob3ZlckZsb29yICE9PSB0aGlzLl9hY3RpdmVGbG9vcikge1xyXG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVGbG9vciA9IGhvdmVyRmxvb3I7XHJcbiAgICAgICAgICAgIGRyYXcgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9hY3RpdmVXYWxsID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZHJhdykge1xyXG4gICAgICAgICAgdGhpcy5fZHJhdygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gcGFubmluZ1xyXG4gICAgICBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmluZyAmJlxyXG4gICAgICAgICF0aGlzLl9hY3RpdmVDb3JuZXIgJiYgIXRoaXMuX2FjdGl2ZVdhbGwgJiYgIXRoaXMuX2FjdGl2ZUl0ZW0pIHtcclxuICAgICAgICB0aGlzLl9vcmlnaW5YICs9ICh0aGlzLl9sYXN0WCAtIHRoaXMuX3Jhd01vdXNlLngpO1xyXG4gICAgICAgIHRoaXMuX29yaWdpblkgKz0gKHRoaXMuX2xhc3RZIC0gdGhpcy5fcmF3TW91c2UueSk7XHJcbiAgICAgICAgdGhpcy5fbGFzdFggPSB0aGlzLl9yYXdNb3VzZS54O1xyXG4gICAgICAgIHRoaXMuX2xhc3RZID0gdGhpcy5fcmF3TW91c2UueTtcclxuICAgICAgICB0aGlzLl9kcmF3KCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGRyYWdnaW5nXHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuTW92aW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZUNvcm5lcikge1xyXG4gICAgICAgICAgdGhpcy5fYWN0aXZlQ29ybmVyLm1vdmUodGhpcy5fbW91c2VYLCB0aGlzLl9tb3VzZVkpO1xyXG4gICAgICAgICAgdGhpcy5fbm90aWNlU3RhdGUoJ2Nvcm5lciBtb3ZlZCcpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYWN0aXZlV2FsbCkge1xyXG4gICAgICAgICAgY29uc3Qge3N0YXJ0LCBlbmR9ID0gdGhpcy5fYWN0aXZlV2FsbDtcclxuICAgICAgICAgIGNvbnN0IG1vdXNlRHJhZ0RpZmYgPSBuZXcgVmVjdG9yMigpLmNvcHkodGhpcy5fcmF3TW91c2UpLnN1Yih0aGlzLl9zdGFydERyYWdNb3VzZSkubXVsdGlwbHlTY2FsYXIodGhpcy5fY21QZXJQaXhlbCk7XHJcbiAgICAgICAgICBjb25zdCBzdGFydEVuZENvcm5lckRpZmYgPSBuZXcgVmVjdG9yMihlbmQueCAtIHN0YXJ0LngsIGVuZC55IC0gc3RhcnQueSk7XHJcbiAgICAgICAgICBjb25zdCBuZXdTdGFydCA9IG5ldyBWZWN0b3IyKCkuY29weSh0aGlzLl9zdGFydERyYWdDb3JuZXIpLmFkZChtb3VzZURyYWdEaWZmKTtcclxuICAgICAgICAgIGNvbnN0IG5ld0VuZCA9IG5ldyBWZWN0b3IyKCkuY29weShuZXdTdGFydCkuYWRkKHN0YXJ0RW5kQ29ybmVyRGlmZik7XHJcbiAgICAgICAgICBjb25zdCB0b2xlcmFuY2UgPSAzMCAqIHRoaXMuX2NtUGVyUGl4ZWw7XHJcbiAgICAgICAgICBsZXQgc25hcHBlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuV2FsbFNuYXBwaW5nKSkge1xyXG4gICAgICAgICAgICBbW3N0YXJ0LCBuZXdTdGFydF0sIFtlbmQsIG5ld0VuZF1dLmZvckVhY2goKFtjb3JuZXIsIG5ld0Nvcm5lclBvc10pID0+IHtcclxuICAgICAgICAgICAgICBpZiAoc25hcHBlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAuLi5jb3JuZXIud2FsbEVuZHMubWFwKHcgPT4gdy5zdGFydCksXHJcbiAgICAgICAgICAgICAgICAuLi5jb3JuZXIud2FsbFN0YXJ0cy5tYXAodyA9PiB3LmVuZClcclxuICAgICAgICAgICAgICBdLmZvckVhY2gob3RoZXJDb3JuZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNuYXBwZWQpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG90aGVyQ29ybmVyID09PSBzdGFydCB8fCBvdGhlckNvcm5lciA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhvdGhlckNvcm5lci55IC0gbmV3Q29ybmVyUG9zLnkpIDwgdG9sZXJhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNuYXBwZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICBuZXdTdGFydC55ICs9IG90aGVyQ29ybmVyLnkgLSBuZXdDb3JuZXJQb3MueTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKG90aGVyQ29ybmVyLnggLSBuZXdDb3JuZXJQb3MueCkgPCB0b2xlcmFuY2UpIHtcclxuICAgICAgICAgICAgICAgICAgc25hcHBlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIG5ld1N0YXJ0LnggKz0gb3RoZXJDb3JuZXIueCAtIG5ld0Nvcm5lclBvcy54O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX2FjdGl2ZVdhbGwubW92ZShuZXdTdGFydC54LCBuZXdTdGFydC55KTtcclxuICAgICAgICAgIHRoaXMuX2xhc3RYID0gdGhpcy5fcmF3TW91c2UueDtcclxuICAgICAgICAgIHRoaXMuX2xhc3RZID0gdGhpcy5fcmF3TW91c2UueTtcclxuICAgICAgICAgIHRoaXMuX25vdGljZVN0YXRlKCd3YWxsIG1vdmVkJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9hY3RpdmVJdGVtKSB7XHJcbiAgICAgICAgICBjb25zdCBjbG9zZXN0SGFsZkVkZ2UgPSB0aGlzLl9maW5kQ2xvc2VzdEhhbGZFZGdlKHRoaXMuX21vdXNlWCwgdGhpcy5fbW91c2VZKTtcclxuICAgICAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0ubW92ZVRvMmRQb3NpdGlvbih0aGlzLl9tb3VzZVgsIHRoaXMuX21vdXNlWSwgY2xvc2VzdEhhbGZFZGdlKTtcclxuICAgICAgICAgIHRoaXMuX2xhc3RYID0gdGhpcy5fcmF3TW91c2UueDtcclxuICAgICAgICAgIHRoaXMuX2xhc3RZID0gdGhpcy5fcmF3TW91c2UueTtcclxuICAgICAgICAgIHRoaXMuX25vdGljZVN0YXRlKCdpdGVtIG1vdmVkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2RyYXcoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZU1vdXNlTGVhdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuX21vdXNlRG93biA9IGZhbHNlO1xyXG4gICAgLy8gZW5kIHBhbm5pbmdcclxuICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuQ2FtZXJhTW92ZSB8fFxyXG4gICAgICB0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuQ2FtZXJhTW92aW5nKSB7XHJcbiAgICAgIHRoaXMuc2V0RGVmYXVsdE1vZGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVUb3VjaEVuZChldmVudDogVG91Y2hFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudG91Y2hNb2RlKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB0aGlzLl9tb3VzZURvd24gPSBmYWxzZTtcclxuICAgICAgLy8gZW5kIHBhbm5pbmdcclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZlIHx8XHJcbiAgICAgICAgdGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmluZykge1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdE1vZGUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZU1vdXNlV2hlZWwoZXZlbnQ6IFdoZWVsRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGlmIChldmVudC5kZWx0YVkgPiAwKSB7XHJcbiAgICAgIHRoaXMuem9vbU91dCgpO1xyXG4gICAgfSBlbHNlIGlmIChldmVudC5kZWx0YVkgPCAwKSB7XHJcbiAgICAgIHRoaXMuem9vbUluKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XHJcbiAgICAgIGNhc2UgS2V5LlNwYWNlOlxyXG4gICAgICAgIGlmICh0aGlzLm1vZGUgIT09IEZsb29ycGxhbm5lck1vZGUuQ2FtZXJhTW92aW5nKSB7XHJcbiAgICAgICAgICB0aGlzLnNldE1vZGUoRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgS2V5LkQ6XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZSAhPT0gRmxvb3JwbGFubmVyTW9kZS5EcmF3KSB7XHJcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkTW9kZShGbG9vcnBsYW5uZXJNb2RlLkRyYXcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBLZXkuUzpcclxuICAgICAgICBpZiAodGhpcy5tb2RlICE9PSBGbG9vcnBsYW5uZXJNb2RlLk1vdmUpIHtcclxuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRNb2RlKEZsb29ycGxhbm5lck1vZGUuTW92ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUtleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcclxuICAgICAgY2FzZSBLZXkuRXNjOlxyXG4gICAgICBjYXNlIEtleS5TcGFjZTpcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRNb2RlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hhbmdlRmxvb3JwbGFubmVyTW9kZSh2YWx1ZTogRmxvb3JwbGFubmVyTW9kZSkge1xyXG4gICAgdGhpcy5zZXRTZWxlY3RlZE1vZGUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERpYWdyYW1TZXR0aW5ncyhpbnB1dDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc2V0KCk7XHJcbiAgICB0aGlzLl9yZXNldE9yaWdpbigpO1xyXG4gICAgdGhpcy5fdmlld1NjYWxlID0gMTAwO1xyXG4gICAgdGhpcy5fdXBkYXRlQ21QZXJQaXhlbCgpO1xyXG4gICAgdGhpcy5fZHJhdygpO1xyXG4gICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5yZXNldCgpO1xyXG4gICAgdGhpcy5fcm9vbVNlcnZpY2UucmVzZXRBbGxSb29tcygpO1xyXG4gICAgdGhpcy5fZGlhZ3JhbUJhY2tncm91bmQgPSBpbnB1dC5iYWNrZ3JvdW5kO1xyXG4gICAgdGhpcy5fZGlhZ3JhbUJhY2tncm91bmRIZWlnaHQgPSBpbnB1dC5iYWNrZ3JvdW5kSGVpZ2h0O1xyXG4gICAgdGhpcy5fZGlhZ3JhbUJhY2tncm91bmRXaWR0aCA9IGlucHV0LmJhY2tncm91bmRXaWR0aDtcclxuICAgIHRoaXMuX2RpYWdyYW1TY2FsZSA9IGlucHV0LnNjYWxlO1xyXG4gICAgdGhpcy5fY2FtZXJhWm9vbSA9IGlucHV0LmNhbWVyYVpvb207XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kcmF3QmFja2dyb3VuZCgpOiBhbnkge1xyXG4gICAgaWYgKHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kQWN0aXZlWm9vbSkge1xyXG4gICAgICBpZiAodGhpcy5fZGlhZ3JhbUJhY2tncm91bmRDdXJyZW50U2NhbGUgPD0gdGhpcy5fdmlld1NjYWxlKSB7XHJcbiAgICAgICAgdGhpcy5fZGlhZ3JhbUJhY2tncm91bmRXaWR0aCA9IHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kV2lkdGggKiB0aGlzLnNjYWxpbmdGYWN0b3I7XHJcbiAgICAgICAgdGhpcy5fZGlhZ3JhbUJhY2tncm91bmRIZWlnaHQgPSB0aGlzLl9kaWFncmFtQmFja2dyb3VuZEhlaWdodCAqIHRoaXMuc2NhbGluZ0ZhY3RvcjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9kaWFncmFtQmFja2dyb3VuZFdpZHRoID0gdGhpcy5fZGlhZ3JhbUJhY2tncm91bmRXaWR0aCAqICgxIC8gdGhpcy5zY2FsaW5nRmFjdG9yKTtcclxuICAgICAgICB0aGlzLl9kaWFncmFtQmFja2dyb3VuZEhlaWdodCA9IHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kSGVpZ2h0ICogKDEgLyB0aGlzLnNjYWxpbmdGYWN0b3IpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kQWN0aXZlWm9vbSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZGlhZ3JhbUJhY2tncm91bmRDdXJyZW50U2NhbGUgPSB0aGlzLl92aWV3U2NhbGU7XHJcblxyXG4gICAgdGhpcy5fY29udGV4dC5kcmF3SW1hZ2UoXHJcbiAgICAgIHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kLFxyXG4gICAgICBNYXRoLmFicyh0aGlzLl9vcmlnaW5YKSAtICh0aGlzLl9kaWFncmFtQmFja2dyb3VuZFdpZHRoICogdGhpcy5fZGlhZ3JhbVNjYWxlIC8gMiksXHJcbiAgICAgIE1hdGguYWJzKHRoaXMuX29yaWdpblkpIC0gKHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kSGVpZ2h0ICogdGhpcy5fZGlhZ3JhbVNjYWxlIC8gMiksXHJcbiAgICAgIHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kV2lkdGggKiB0aGlzLl9kaWFncmFtU2NhbGUsXHJcbiAgICAgIHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kSGVpZ2h0ICogdGhpcy5fZGlhZ3JhbVNjYWxlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlV2luZG93UmVzaXplKCkge1xyXG4gICAgaWYgKHRoaXMuX2NhbnZhcykge1xyXG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9jYW52YXMucGFyZW50RWxlbWVudDtcclxuICAgICAgdGhpcy5fY2FudmFzLmhlaWdodCA9IHBhcmVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICAgIHRoaXMuX2NhbnZhcy53aWR0aCA9IHBhcmVudC5jbGllbnRXaWR0aDtcclxuICAgICAgdGhpcy5fZHJhdygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xlYXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fY29udGV4dCAmJiB0aGlzLl9jYW52YXMpIHtcclxuICAgICAgdGhpcy5fY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdGhpcy5fY2FudmFzLndpZHRoLCB0aGlzLl9jYW52YXMuaGVpZ2h0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZVdhbGxQb3NpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLl93YWxsTGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IHN0YXJ0UG9pbnQgPSB0aGlzLl9sYXN0Tm9kZTtcclxuICAgICAgY29uc3QgZW5kUG9pbnQgPSBVdGlscy5Qcm9sb25nU3RyYWlnaHRMaW5lKHN0YXJ0UG9pbnQueCwgc3RhcnRQb2ludC55LCB0aGlzLl9tb3VzZVgsIHRoaXMuX21vdXNlWSwgdGhpcy5fd2FsbExlbmd0aCk7XHJcbiAgICAgIHRoaXMuX21vdXNlWCA9IGVuZFBvaW50Lng7XHJcbiAgICAgIHRoaXMuX21vdXNlWSA9IGVuZFBvaW50Lnk7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLl91cGRhdGVTbmFwSW5kaWNhdG9yKHRoaXMuX21vdXNlWCwgdGhpcy5fbW91c2VZKTtcclxuICAgIC8vIHVwZGF0ZVRhcmdldCBhbHdheXMgZXhlYyB1cGRhdGVTbmFwSW5kaWNhdG9yLi4uXHJcbiAgICB0aGlzLl91cGRhdGVUYXJnZXQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NjYWxlKHg6IG51bWJlciwgeTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9jb250ZXh0LnNjYWxlKHgsIHkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhdygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5fcmVhZHlUb0RyYXcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY2xlYXIoKTtcclxuXHJcbiAgICB0aGlzLl9kcmF3R3JpZCgpO1xyXG4gICAgaWYgKHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kKSB7XHJcbiAgICAgIHRoaXMuX2RyYXdCYWNrZ3JvdW5kKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5nZXRSb29tcygpLmZvckVhY2gocm9vbSA9PiB7XHJcbiAgICAgIHRoaXMuX2RyYXdSb29tKHJvb20pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5nZXRXYWxscygpLmZvckVhY2goKHdhbGwpID0+IHtcclxuICAgICAgdGhpcy5fZHJhd1dhbGwod2FsbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLmdldENvcm5lcnMoKS5mb3JFYWNoKGNvcm5lciA9PiB7XHJcbiAgICAgIHRoaXMuX2RyYXdDb3JuZXIoY29ybmVyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UuZ2V0Um9vbXMoKS5mb3JFYWNoKHJvb20gPT4ge1xyXG4gICAgICB0aGlzLl9kcmF3Um9vbUFuZ2xlcyhyb29tLmNvcm5lcnMpO1xyXG4gICAgICB0aGlzLl9kcmF3Um9vbUFyZWEocm9vbSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLmdldEl0ZW1zKCkuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgdGhpcy5fZHJhd0l0ZW0oaXRlbSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5zaG93V2FsbEl0ZW1NZWFzdXJlbWVudHMgJiYgdGhpcy5fYWN0aXZlSXRlbSkge1xyXG4gICAgICB0aGlzLl9kcmF3SXRlbU1lYXN1cmVtZW50cyh0aGlzLl9hY3RpdmVJdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaG93V2FsbEl0ZW1NZWFzdXJlbWVudHMgJiYgdGhpcy5fYWN0aXZlV2FsbCAmJiB0aGlzLm1vZGUgIT09IEZsb29ycGxhbm5lck1vZGUuTW92aW5nKSB7XHJcbiAgICAgIHRoaXMuX2FjdGl2ZVdhbGwuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICB0aGlzLl9kcmF3SXRlbU1lYXN1cmVtZW50cyhpdGVtKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZHJhd01vZGUgPSB0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuRHJhdyB8fCB0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuRHJhd2luZztcclxuICAgIGlmIChkcmF3TW9kZSkge1xyXG4gICAgICB0aGlzLl9kcmF3VGFyZ2V0KFxyXG4gICAgICAgIHRoaXMuX3RhcmdldFgsXHJcbiAgICAgICAgdGhpcy5fdGFyZ2V0WSwge1xyXG4gICAgICAgICAgbGFzdE5vZGU6IHRoaXMuX2xhc3ROb2RlLFxyXG4gICAgICAgICAgc25hcFBvaW50OiB0aGlzLl9zbmFwUG9pbnRcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5nZXRXYWxscygpLmZvckVhY2goKHdhbGwpID0+IHtcclxuICAgICAgdGhpcy5fZHJhd0VkZ2VzTGFiZWxzKHdhbGwpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kcmF3R3JpZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9jYW52YXMpIHtcclxuICAgICAgdGhpcy5fY29udGV4dC5maWxsU3R5bGUgPSAnd2hpdGUnO1xyXG4gICAgICB0aGlzLl9jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuX2NhbnZhcy53aWR0aCwgdGhpcy5fY2FudmFzLmhlaWdodCk7XHJcblxyXG4gICAgICBjb25zdCBvZmZzZXRYID0gdGhpcy5fY2FsY3VsYXRlR3JpZE9mZnNldCgtdGhpcy5fb3JpZ2luWCk7XHJcbiAgICAgIGNvbnN0IG9mZnNldFkgPSB0aGlzLl9jYWxjdWxhdGVHcmlkT2Zmc2V0KC10aGlzLl9vcmlnaW5ZKTtcclxuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLl9jYW52YXMud2lkdGg7XHJcbiAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuX2NhbnZhcy5oZWlnaHQ7XHJcblxyXG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8PSAod2lkdGggLyBncmlkU3BhY2luZyk7IHgrKykge1xyXG4gICAgICAgIENvbnRleHRVdGlscy5EcmF3TGluZSh0aGlzLl9jb250ZXh0LCBncmlkU3BhY2luZyAqIHggKyBvZmZzZXRYLCAwLCBncmlkU3BhY2luZyAqIHggKyBvZmZzZXRYLCBoZWlnaHQsIGdyaWRXaWR0aCwgZ3JpZENvbG9yKTtcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCB5ID0gMDsgeSA8PSAoaGVpZ2h0IC8gZ3JpZFNwYWNpbmcpOyB5KyspIHtcclxuICAgICAgICBDb250ZXh0VXRpbHMuRHJhd0xpbmUodGhpcy5fY29udGV4dCwgMCwgZ3JpZFNwYWNpbmcgKiB5ICsgb2Zmc2V0WSwgd2lkdGgsIGdyaWRTcGFjaW5nICogeSArIG9mZnNldFksIGdyaWRXaWR0aCwgZ3JpZENvbG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhd1Jvb20ocm9vbTogUm9vbSkge1xyXG4gICAgbGV0IHVzZUluZmlsbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5fZGlhZ3JhbUJhY2tncm91bmQgJiYgdGhpcy5fZGlhZ3JhbUJhY2tncm91bmQuc3JjICE9PSAnJykge1xyXG4gICAgICB1c2VJbmZpbGwgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHNlbGVjdGVkID0gKHJvb20gPT09IHRoaXMuX3NlbGVjdGVkRmxvb3IpO1xyXG4gICAgQ29udGV4dFV0aWxzLkRyYXdQb2x5Z29uKHRoaXMuX2NvbnRleHQsXHJcbiAgICAgIFV0aWxzLm1hcChyb29tLmNvcm5lcnMsIChjb3JuZXI6IENvcm5lcikgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0WChjb3JuZXIueCk7XHJcbiAgICAgIH0pLFxyXG4gICAgICBVdGlscy5tYXAocm9vbS5jb3JuZXJzLCAoY29ybmVyOiBDb3JuZXIpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydFkoY29ybmVyLnkpO1xyXG4gICAgICB9KSxcclxuICAgICAgdXNlSW5maWxsLFxyXG4gICAgICBzZWxlY3RlZCA/IHNlbGVjdGVkUm9vbUNvbG9yIDogcm9vbUNvbG9yXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhd1dhbGwod2FsbDogV2FsbCkge1xyXG4gICAgY29uc3QgbW92ZU1vZGUgPSB0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuTW92ZSB8fCB0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuTW92aW5nO1xyXG4gICAgY29uc3QgaG92ZXIgPSBtb3ZlTW9kZSAmJiB3YWxsID09PSB0aGlzLl9hY3RpdmVXYWxsO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBtb3ZlTW9kZSAmJiB3YWxsID09PSB0aGlzLl9zZWxlY3RlZFdhbGw7XHJcblxyXG4gICAgbGV0IGZpbGxDb2xvciA9IHdhbGxDb2xvcjtcclxuICAgIGxldCBzdHJva2VDb2xvciA9IHdhbGxTdHJva2VDb2xvcjtcclxuXHJcbiAgICBpZiAoaG92ZXIpIHtcclxuICAgICAgZmlsbENvbG9yID0gd2FsbENvbG9ySG92ZXI7XHJcbiAgICAgIHN0cm9rZUNvbG9yID0gd2FsbFN0cm9rZUNvbG9ySG92ZXI7XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgIGZpbGxDb2xvciA9IHdhbGxDb2xvclNlbGVjdGVkO1xyXG4gICAgICBzdHJva2VDb2xvciA9IHdhbGxTdHJva2VDb2xvclNlbGVjdGVkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3YWxsLmZyb250RWRnZSkge1xyXG4gICAgICB0aGlzLl9kcmF3RWRnZSh3YWxsLmZyb250RWRnZSwgZmlsbENvbG9yLCBzdHJva2VDb2xvcik7XHJcbiAgICB9XHJcbiAgICBpZiAod2FsbC5iYWNrRWRnZSkge1xyXG4gICAgICB0aGlzLl9kcmF3RWRnZSh3YWxsLmJhY2tFZGdlLCBmaWxsQ29sb3IsIHN0cm9rZUNvbG9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RyYXdDb3JuZXIoY29ybmVyOiBDb3JuZXIpIHtcclxuICAgIGNvbnN0IGhvdmVyID0gKGNvcm5lciA9PT0gdGhpcy5fYWN0aXZlQ29ybmVyKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkID0gKGNvcm5lciA9PT0gdGhpcy5fc2VsZWN0ZWRDb3JuZXIpO1xyXG4gICAgbGV0IGNvbG9yID0gY29ybmVyQ29sb3I7XHJcbiAgICBpZiAoaG92ZXIpIHtcclxuICAgICAgY29sb3IgPSBjb3JuZXJDb2xvckhvdmVyO1xyXG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICBjb2xvciA9IGNvcm5lckNvbG9yU2VsZWN0ZWQ7XHJcbiAgICB9XHJcbiAgICBDb250ZXh0VXRpbHMuRHJhd0NpcmNsZShcclxuICAgICAgdGhpcy50b3VjaE1vZGUsXHJcbiAgICAgIHRoaXMuX2NvbnRleHQsXHJcbiAgICAgIHRoaXMuX2NvbnZlcnRYKGNvcm5lci54KSxcclxuICAgICAgdGhpcy5fY29udmVydFkoY29ybmVyLnkpLFxyXG4gICAgICAoaG92ZXIgfHwgc2VsZWN0ZWQpID8gdGhpcy5fY29tcHV0ZUNvcm5lclJhZGl1cyhjb3JuZXIpIDogMCxcclxuICAgICAgY29sb3JcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kcmF3Um9vbUFuZ2xlcyhjb3JuZXJzOiBDb3JuZXJbXSkge1xyXG4gICAgY29ybmVycy5mb3JFYWNoKChjb3JuZXIsIGksIHYpID0+IHtcclxuICAgICAgY29uc3QgZmlyc3RDb3JuZXIgPSAoaSAtIDEgPj0gMCkgPyB2W2kgLSAxXSA6IHZbdi5sZW5ndGggLSAxXTtcclxuICAgICAgY29uc3Qgc2Vjb25kQ29ybmVyID0gdlsoaSArIDEpICUgdi5sZW5ndGhdO1xyXG4gICAgICB0aGlzLl9kcmF3Um9vbUFuZ2xlTGFiZWwoXHJcbiAgICAgICAgY29ybmVyLngsIGNvcm5lci55LFxyXG4gICAgICAgIGZpcnN0Q29ybmVyLngsIGZpcnN0Q29ybmVyLnksXHJcbiAgICAgICAgc2Vjb25kQ29ybmVyLngsIHNlY29uZENvcm5lci55LFxyXG4gICAgICAgIGNvcm5lcnMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kcmF3Um9vbUFyZWEocm9vbTogUm9vbSkge1xyXG4gICAgY29uc3QgcG9zOiBWZWN0b3IyID0gbmV3IFZlY3RvcjIocm9vbS5jZW50ZXIueCwgcm9vbS5jZW50ZXIueSk7XHJcbiAgICB0aGlzLl9kcmF3QXJlYUxhYmVsKHBvcy54LCBwb3MueSwgcm9vbS5hcmVhKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RyYXdJdGVtKGl0ZW06IEl0ZW0pIHtcclxuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgSW5XYWxsRmxvb3JJdGVtKSB7XHJcbiAgICAgIHRoaXMuX2RyYXdEb29yKGl0ZW0pO1xyXG4gICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgSW5XYWxsSXRlbSkge1xyXG4gICAgICB0aGlzLl9kcmF3V2luZG93KGl0ZW0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhd0l0ZW1NZWFzdXJlbWVudHMoaXRlbTogSXRlbSkge1xyXG4gICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBJbldhbGxGbG9vckl0ZW0pIHtcclxuICAgICAgdGhpcy5fZHJhd0l0ZW1TaXplTGFiZWwoaXRlbSwgZG9vckNvbG9yKTtcclxuICAgICAgdGhpcy5fZHJhd0l0ZW1Ub05laWdoYm91cnNEaXN0YW5jZUxhYmVscyhpdGVtKTtcclxuICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIEluV2FsbEl0ZW0pIHtcclxuICAgICAgdGhpcy5fZHJhd0l0ZW1TaXplTGFiZWwoaXRlbSwgd2luZG93Q29sb3IpO1xyXG4gICAgICB0aGlzLl9kcmF3SXRlbVRvTmVpZ2hib3Vyc0Rpc3RhbmNlTGFiZWxzKGl0ZW0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhd0VkZ2VzTGFiZWxzKHdhbGw6IFdhbGwsIG9wdGlvbnM6IHsgZnJvbnQ/OiBib29sZWFuLCBiYWNrPzogYm9vbGVhbiB9ID0ge30gYXMgYW55KSB7XHJcbiAgICBsZXQgZWRnZTogSGFsZkVkZ2U7XHJcbiAgICBpZiAod2FsbC5mcm9udEVkZ2UpIHtcclxuICAgICAgZWRnZSA9IHdhbGwuZnJvbnRFZGdlO1xyXG4gICAgfSBlbHNlIGlmICh3YWxsLmJhY2tFZGdlKSB7XHJcbiAgICAgIGVkZ2UgPSB3YWxsLmJhY2tFZGdlO1xyXG4gICAgfVxyXG4gICAgaWYgKCFlZGdlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHBvcyA9IGVkZ2UuaW50ZXJpb3JDZW50ZXIoKTtcclxuICAgIGNvbnN0IGxlbmd0aHMgPSB0aGlzLmRldGFpbGVkV2FsbE1lYXN1cmVtZW50c01vZGUgPyB3YWxsLmVkZ2VzTGVuZ3RocyA6IFt3YWxsLmxlbmd0aF07XHJcbiAgICAvLyBjb25zdCBsZW46IG51bWJlciA9IGxlbmd0aHMubGVuZ3RoO1xyXG4gICAgLy8gZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAvLyAgICAgbGVuZ3Roc1tpXSA9IGxlbmd0aHNbaV0gKiAxMDA7XHJcbiAgICAvLyB9XHJcbiAgICB0aGlzLl9kcmF3TGFiZWxzKHBvcywgbGVuZ3Rocyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kcmF3VGFyZ2V0KHg6IG51bWJlciwgeTogbnVtYmVyLCB7XHJcbiAgICBsYXN0Tm9kZSA9IG51bGwsXHJcbiAgICBzbmFwUG9pbnQgPSBudWxsXHJcbiAgfSkge1xyXG4gICAgaWYgKGxhc3ROb2RlKSB7XHJcbiAgICAgIENvbnRleHRVdGlscy5EcmF3TGluZSh0aGlzLl9jb250ZXh0LFxyXG4gICAgICAgIHRoaXMuX2NvbnZlcnRYKGxhc3ROb2RlLngpLFxyXG4gICAgICAgIHRoaXMuX2NvbnZlcnRZKGxhc3ROb2RlLnkpLFxyXG4gICAgICAgIHRoaXMuX2NvbnZlcnRYKHgpLFxyXG4gICAgICAgIHRoaXMuX2NvbnZlcnRZKHkpLFxyXG4gICAgICAgIGRlZmF1bHRXYWxsV2lkdGhIb3ZlcixcclxuICAgICAgICB3YWxsQ29sb3JIb3ZlclxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCB3YWxsID0gbGFzdE5vZGUud2FsbEVuZHNbMF07XHJcbiAgICAgIGlmICh3YWxsKSB7XHJcbiAgICAgICAgdGhpcy5fZHJhd1RhcmdldEFuZ2xlTGFiZWwobGFzdE5vZGUueCwgbGFzdE5vZGUueSwgeCwgeSwgd2FsbC5zdGFydC54LCB3YWxsLnN0YXJ0LnkpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGxlbmd0aCA9IFV0aWxzLmRpc3RhbmNlKGxhc3ROb2RlLngsIGxhc3ROb2RlLnksIHgsIHkpO1xyXG4gICAgICBjb25zdCBwb3MgPSB7eDogKGxhc3ROb2RlLnggKyB4KSAvIDIuMCwgeTogKGxhc3ROb2RlLnkgKyB5KSAvIDIuMH07XHJcbiAgICAgIHRoaXMuX2RyYXdMYWJlbHMocG9zLCBbbGVuZ3RoXSk7XHJcbiAgICB9XHJcbiAgICBpZiAoc25hcFBvaW50KSB7XHJcbiAgICAgIHRoaXMuX2RyYXdTbmFwSW5kaWNhdG9yKHNuYXBQb2ludC54LCBzbmFwUG9pbnQueSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9tb3VzZUNsaWNrSGFuZGxlZChldmVudDogTW91c2VFdmVudCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5Nb3ZpbmcpIHtcclxuICAgICAgLy8gd2FsbCBvbiBjbGljayBzZWxlY3Rpb25cclxuICAgICAgaWYgKHRoaXMuX2FjdGl2ZVdhbGwpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RXYWxsKGV2ZW50LCB0aGlzLl9hY3RpdmVXYWxsKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9hY3RpdmVDb3JuZXIpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RXYWxsKGV2ZW50LCBudWxsKTtcclxuICAgICAgfSBlbHNlIGlmICghdGhpcy5fYWN0aXZlSXRlbSkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdFdhbGwoZXZlbnQsIHRoaXMuX2Zsb29ycGxhblNlcnZpY2Uub3ZlcmxhcHBlZFdhbGwodGhpcy5fbW91c2VYLCB0aGlzLl9tb3VzZVksIGNsaWNrTWlzc1RvbGVyYW5jZSkpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5Nb3ZlKSB7XHJcbiAgICAgIC8vIGZsb29yIG9uIGNsaWNrIHNlbGVjdGlvblxyXG4gICAgICBpZiAodGhpcy5fYWN0aXZlRmxvb3IpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RGbG9vcihldmVudCwgdGhpcy5fYWN0aXZlRmxvb3IpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2FjdGl2ZUNvcm5lcikge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdEZsb29yKGV2ZW50LCBudWxsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RGbG9vcihldmVudCwgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5vdmVybGFwcGVkRmxvb3IodGhpcy5fbW91c2VYLCB0aGlzLl9tb3VzZVkpKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldERlZmF1bHRNb2RlKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZmx1c2hNb3ZpbmdTdGF0ZUNoYW5nZXMoKSB7XHJcbiAgICBjb25zdCBjaGFuZ2VzID0gT2JqZWN0LmtleXModGhpcy5fbW92aW5nU3RhdGVDaGFuZ2VzKTtcclxuICAgIGlmIChjaGFuZ2VzLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBzdGF0ZURlc2NyaXB0aW9uID0gY2hhbmdlcy5qb2luKCc7Jyk7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXNTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2F2ZVN0YXRlLCB7YWN0aW9uOiBgZmxvb3JwbGFubmVyICR7c3RhdGVEZXNjcmlwdGlvbn1gfSk7XHJcbiAgICAgIGlmICh0aGlzLl9hY3RpdmVDb3JuZXIpIHtcclxuICAgICAgICB0aGlzLl91cGRhdGVGbG9vcnBsYW4oW3RoaXMuX2FjdGl2ZUNvcm5lcl0pO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2FjdGl2ZVdhbGwpIHtcclxuICAgICAgICB0aGlzLl91cGRhdGVGbG9vcnBsYW4oW3RoaXMuX2FjdGl2ZVdhbGwuZ2V0RW5kKCksIHRoaXMuX2FjdGl2ZVdhbGwuZ2V0U3RhcnQoKV0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX21vdmluZ1N0YXRlQ2hhbmdlcyA9IHt9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0V2FsbChldmVudDogTW91c2VFdmVudCwgd2FsbDogV2FsbCwgZWRnZT86IEhhbGZFZGdlKSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZFdhbGwgPSB3YWxsO1xyXG4gICAgdGhpcy5zZWxlY3RlZFdhbGxDaGFuZ2UubmV4dCh7ZXZlbnQ6IGV2ZW50LCB3YWxsOiB0aGlzLl9zZWxlY3RlZFdhbGwsIGVkZ2U6IGVkZ2V9KTtcclxuICAgIHRoaXMuX2RyYXcoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NlbGVjdEZsb29yKHJvb20sIGV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5fYWN0aXZlV2FsbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zZWxlY3RlZEZsb29yID0gcm9vbTtcclxuICAgIC8vIHRoaXMuc2VsZWN0ZWRGbG9vckNoYW5nZSh0aGlzLnNlbGVjdGVkRmxvb3IsIGV2ZW50KTtcclxuICAgIHRoaXMuX2RyYXcoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Vuc2VsZWN0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRXYWxsID0gbnVsbDtcclxuICAgIHRoaXMuX3NlbGVjdGVkRmxvb3IgPSBudWxsO1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRDb3JuZXIgPSBudWxsO1xyXG4gICAgdGhpcy5fZHJhdygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaWZOb3REb3VibGVDbGljayhoYW5kbGVTaW5nbGVDbGljaykge1xyXG4gICAgY29uc3QgY3VycmVudFRpbWVzdGFtcCA9IERhdGUubm93KCk7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuX2xhc3RNb3VzZVVwVGltZXN0YW1wICYmXHJcbiAgICAgIGN1cnJlbnRUaW1lc3RhbXAgPCB0aGlzLl9sYXN0TW91c2VVcFRpbWVzdGFtcCArIGRvdWJsZUNsaWNrRHVyYXRpb25Nc1xyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuX2xhc3RNb3VzZVVwVGltZXN0YW1wID0gbnVsbDtcclxuICAgICAgdGhpcy5zZXREZWZhdWx0TW9kZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbGFzdE1vdXNlVXBUaW1lc3RhbXAgPSBjdXJyZW50VGltZXN0YW1wO1xyXG4gICAgICBoYW5kbGVTaW5nbGVDbGljaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlRHJhd2luZ01vdXNlVXAoKSB7XHJcbiAgICBjb25zdCBwcmV2TnVtUm9vbXMgPSB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLmdldFJvb21zKCkubGVuZ3RoO1xyXG4gICAgY29uc3QgY29ybmVyID0gdGhpcy5fc25hcFBvaW50XHJcbiAgICAgID8gdGhpcy5fZmxvb3JwbGFuU2VydmljZS5uZXdDb3JuZXIodGhpcy5fc25hcFBvaW50LngsIHRoaXMuX3NuYXBQb2ludC55KVxyXG4gICAgICA6IHRoaXMuX2Zsb29ycGxhblNlcnZpY2UubmV3Q29ybmVyKHRoaXMuX3RhcmdldFgsIHRoaXMuX3RhcmdldFkpO1xyXG5cclxuICAgIGlmICh0aGlzLl9sYXN0Tm9kZSAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UubmV3V2FsbCh0aGlzLl9sYXN0Tm9kZSwgY29ybmVyKTtcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1c1NlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlU3RhdGUsIHthY3Rpb246ICduZXdXYWxsJ30pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdXBkYXRlRmxvb3JwbGFuKFtjb3JuZXJdKTtcclxuICAgIGNvbnN0IG5ld051bVJvb21zID0gdGhpcy5fZmxvb3JwbGFuU2VydmljZS5nZXRSb29tcygpLmxlbmd0aDtcclxuICAgIGlmIChuZXdOdW1Sb29tcyA+IHByZXZOdW1Sb29tcykge1xyXG4gICAgICB0aGlzLnNldERlZmF1bHRNb2RlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9sYXN0Tm9kZSA9IGNvcm5lcjtcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1c1NlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5XYWxsTGVuZ3RoSW5wdXRTaG93Q2hhbmdlZCwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVGbG9vcnBsYW4oY29ybmVyczogQ29ybmVyW10pOiB2b2lkIHtcclxuICAgIGZvciAoY29uc3QgY29ybmVyIG9mIGNvcm5lcnMpIHtcclxuICAgICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5tZXJnZVdpdGhJbnRlcnNlY3RlZChjb3JuZXIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5hZGRDb3JuZXJzRm9ySW50ZXJzZWN0aW9ucygpO1xyXG4gICAgLy8gdGhpcy5fZmxvb3JwbGFuU2VydmljZS5yZW1vdmVPcnBoYW5Db3JuZXJzKCk7XHJcbiAgICB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFzTW91c2VNb3ZlZChldmVudCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgbmV3UG9zID0gUmVsYXRpdmVQb3NpdGlvblV0aWxzLkdldENsaWVudE1vdXNlUG9zaXRpb24oZXZlbnQpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2RldGVjdE1vdXNlTW92ZW1lbnQodGhpcy5fbW91c2VEb3duUG9zaXRpb24sIG5ld1Bvcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYXNUb3VjaE1vdmVkKGV2ZW50OiBUb3VjaEV2ZW50KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBuZXdQb3MgPSBSZWxhdGl2ZVBvc2l0aW9uVXRpbHMuR2V0Q2xpZW50VG91Y2hQb3NpdGlvbihldmVudCwgdGhpcy5fY2FudmFzKTtcclxuICAgIHJldHVybiB0aGlzLl9kZXRlY3RNb3VzZU1vdmVtZW50KHRoaXMuX2xhc3RUb3VjaFBvaW50LCBuZXdQb3MpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGV0ZWN0TW91c2VNb3ZlbWVudChvbGRQb3M6IFZlY3RvcjIsIG5ld1BvczogVmVjdG9yMik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIG9sZFBvcy5kaXN0YW5jZVRvKG5ld1BvcykgPiBtaW5Nb3VzZU1vdmVEaXN0YW5jZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX25vdGljZVN0YXRlKGFjdGlvbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9tb3ZpbmdTdGF0ZUNoYW5nZXNbYWN0aW9uXSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVUYXJnZXQoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkRyYXdpbmcgJiYgdGhpcy5fbGFzdE5vZGUpIHtcclxuICAgICAgaWYgKHRoaXMuc25hcENvcm5lcnMgJiYgTWF0aC5hYnModGhpcy5fbW91c2VYIC0gdGhpcy5fbGFzdE5vZGUueCkgPCBzbmFwVG9sZXJhbmNlKSB7XHJcbiAgICAgICAgdGhpcy5fdGFyZ2V0WCA9IHRoaXMuX2xhc3ROb2RlLng7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fdGFyZ2V0WCA9IHRoaXMuX21vdXNlWDtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zbmFwQ29ybmVycyAmJiBNYXRoLmFicyh0aGlzLl9tb3VzZVkgLSB0aGlzLl9sYXN0Tm9kZS55KSA8IHNuYXBUb2xlcmFuY2UpIHtcclxuICAgICAgICB0aGlzLl90YXJnZXRZID0gdGhpcy5fbGFzdE5vZGUueTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl90YXJnZXRZID0gdGhpcy5fbW91c2VZO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLnJlbW92ZU9ycGhhbkNvcm5lcnMoKTtcclxuICAgICAgdGhpcy5fdGFyZ2V0WCA9IHRoaXMuX21vdXNlWDtcclxuICAgICAgdGhpcy5fdGFyZ2V0WSA9IHRoaXMuX21vdXNlWTtcclxuICAgIH1cclxuICAgIHRoaXMuX3VwZGF0ZVNuYXBJbmRpY2F0b3IodGhpcy5fdGFyZ2V0WCwgdGhpcy5fdGFyZ2V0WSk7XHJcbiAgICB0aGlzLl9kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVTbmFwSW5kaWNhdG9yKHg6IG51bWJlciwgeTogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBleGNsdWRlQ29ybmVycyA9IHRoaXMuX2xhc3ROb2RlID8gW3RoaXMuX2xhc3ROb2RlXSA6IFtdO1xyXG4gICAgdGhpcy5fc25hcFBvaW50ID0gdGhpcy5fZmxvb3JwbGFuU2VydmljZS5jb3JuZXJJblNuYXBEaXN0YW5jZShcclxuICAgICAgeCwgeSwgdGhpcy5zbmFwQ29ybmVycywgZXhjbHVkZUNvcm5lcnNcclxuICAgICk7XHJcbiAgICBpZiAoIXRoaXMuX3NuYXBQb2ludCkge1xyXG4gICAgICB0aGlzLl9zbmFwUG9pbnQgPSB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLndhbGxJblNuYXBEaXN0YW5jZSh4LCB5LCB0aGlzLnNuYXBDb3JuZXJzLCB0aGlzLl9sYXN0Tm9kZSk7XHJcbiAgICAgIGlmICh0aGlzLnNuYXBDb3JuZXJzKSB7XHJcbiAgICAgICAgdGhpcy5fc25hcEluZGljYXRvck1vZGUgPSBTbmFwSW5kaWNhdG9yTW9kZS5XYWxsO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5zbmFwQ29ybmVycykge1xyXG4gICAgICAgIHRoaXMuX3NuYXBJbmRpY2F0b3JNb2RlID0gU25hcEluZGljYXRvck1vZGUuQ29ybmVyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kcmF3TGFiZWxzKHBvczogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9LCBsZW5ndGhzOiBudW1iZXJbXSk6IHZvaWQge1xyXG4gICAgY29uc3QgdGV4dCA9IGxlbmd0aHNcclxuICAgICAgLmZpbHRlcihsID0+IGwgPj0gMC42KSAgLy8gb25seSBlZGdlcyBhdCBsZWFzdCB0aGlzIGxvbmdcclxuICAgICAgLmZpbHRlcihVdGlscy51bmlxRm4pXHJcbiAgICAgIC5tYXAobCA9PiB0aGlzLl9kaW1lbnNpb25TZXJ2aWNlLmNtVG9NZWFzdXJlKGwgKiAxMDApKVxyXG4gICAgICAuam9pbignLycpO1xyXG4gICAgdGhpcy5fZHJhd0xhYmVsVGV4dChcclxuICAgICAgdGhpcy5fY29udmVydFgocG9zLngpLFxyXG4gICAgICB0aGlzLl9jb252ZXJ0WShwb3MueSksXHJcbiAgICAgIHRleHRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kcmF3U25hcEluZGljYXRvcih4OiBudW1iZXIsIHk6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5EcmF3IHx8IHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5EcmF3aW5nKSB7XHJcbiAgICAgIENvbnRleHRVdGlscy5EcmF3Q2lyY2xlKHRoaXMudG91Y2hNb2RlLCB0aGlzLl9jb250ZXh0LFxyXG4gICAgICAgIHRoaXMuX2NvbnZlcnRYKHgpLFxyXG4gICAgICAgIHRoaXMuX2NvbnZlcnRZKHkpLFxyXG4gICAgICAgIHNuYXBJbmRpY2F0b3JSYWRpdXNbdGhpcy5fc25hcEluZGljYXRvck1vZGVdLFxyXG4gICAgICAgIHNuYXBJbmRpY2F0b3JDb2xvclt0aGlzLl9zbmFwSW5kaWNhdG9yTW9kZV1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RyYXdUYXJnZXRBbmdsZUxhYmVsKHg6IG51bWJlciwgeTogbnVtYmVyLCB4VGFyZ2V0OiBudW1iZXIsIHlUYXJnZXQ6IG51bWJlciwgeDA6IG51bWJlciwgeTA6IG51bWJlcikge1xyXG4gICAgY29uc3QgYW5nbGUgPSBVdGlscy5hbmdsZSh4VGFyZ2V0IC0geCwgeVRhcmdldCAtIHksIHgwIC0geCwgeTAgLSB5KTtcclxuICAgIGNvbnN0IGxlbmd0aCA9IFV0aWxzLmRpc3RhbmNlKHgsIHksIHhUYXJnZXQsIHlUYXJnZXQpO1xyXG4gICAgaWYgKGxlbmd0aCA8IDAuNikge1xyXG4gICAgICAvLyBkb24ndCBkcmF3IGFuZ2xlcyBmb3Igd2FsbHMgdGhpcyBzaG9ydFxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCB7eDogeGQsIHk6IHlkfSA9IFV0aWxzLnBvaW50T25BbmdsZUF4aXMoXHJcbiAgICAgIHRoaXMuX2dldFNjYWxlZEFuZ2xlTGFiZWxEaXN0YW5jZSh0aGlzLl92aWV3U2NhbGUsIGFuZ2xlTGFiZWxEaXN0YW5jZVNjYWxlVHJlc2hvbGQpLFxyXG4gICAgICBhbmdsZSxcclxuICAgICAgeDAgLSB4LFxyXG4gICAgICB5MCAtIHlcclxuICAgICk7XHJcbiAgICBjb25zdCBrID0geDAgPiB4ID8gMSA6IC0xO1xyXG4gICAgdGhpcy5fZHJhd0xhYmVsVGV4dChcclxuICAgICAgdGhpcy5fY29udmVydFgoeCArIGsgKiB4ZCksXHJcbiAgICAgIHRoaXMuX2NvbnZlcnRZKHkgKyBrICogeWQpLFxyXG4gICAgICBBbmdsZXMuYW5nbGVUb01lYXN1cmUoTWF0aC5hYnMoYW5nbGUpLCB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LkFuZ2xlVW5pdCkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhd0Rvb3IoZG9vcjogSW5XYWxsRmxvb3JJdGVtKSB7XHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuX2dldFRoaWNrbmVzc09mQ29udGFpbmluZ1dhbGwoZG9vcikgfHwgZGVmYXVsdFdhbGxXaWR0aDtcclxuICAgIGNvbnN0IGNvbG9yID0gdGhpcy5fYWN0aXZlSXRlbSA9PT0gZG9vciA/IGRvb3JDb2xvckhvdmVyIDogZG9vckNvbG9yO1xyXG4gICAgQ29udGV4dFV0aWxzLkRyYXdMaW5lKHRoaXMuX2NvbnRleHQsXHJcbiAgICAgIHRoaXMuX2NvbnZlcnRYKGRvb3IuZ2V0U3RhcnRYKCkpLFxyXG4gICAgICB0aGlzLl9jb252ZXJ0WShkb29yLmdldFN0YXJ0WSgpKSxcclxuICAgICAgdGhpcy5fY29udmVydFgoZG9vci5nZXRFbmRYKCkpLFxyXG4gICAgICB0aGlzLl9jb252ZXJ0WShkb29yLmdldEVuZFkoKSksXHJcbiAgICAgIHdpZHRoICogKHRoaXMuX3ZpZXdTY2FsZSAvIDIpLFxyXG4gICAgICBjb2xvclxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKiAqL1xyXG4gIHByaXZhdGUgX2RyYXdXaW5kb3cod2luZG93OiBJbldhbGxJdGVtKSB7XHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuX2dldFRoaWNrbmVzc09mQ29udGFpbmluZ1dhbGwod2luZG93KSB8fCBkZWZhdWx0V2FsbFdpZHRoO1xyXG4gICAgY29uc3QgY29sb3IgPSB0aGlzLl9hY3RpdmVJdGVtID09PSB3aW5kb3cgPyB3aW5kb3dDb2xvckhvdmVyIDogd2luZG93Q29sb3I7XHJcbiAgICBDb250ZXh0VXRpbHMuRHJhd0xpbmUodGhpcy5fY29udGV4dCxcclxuICAgICAgdGhpcy5fY29udmVydFgod2luZG93LmdldFN0YXJ0WCgpKSxcclxuICAgICAgdGhpcy5fY29udmVydFkod2luZG93LmdldFN0YXJ0WSgpKSxcclxuICAgICAgdGhpcy5fY29udmVydFgod2luZG93LmdldEVuZFgoKSksXHJcbiAgICAgIHRoaXMuX2NvbnZlcnRZKHdpbmRvdy5nZXRFbmRZKCkpLFxyXG4gICAgICB3aWR0aCAqICh0aGlzLl92aWV3U2NhbGUgLyAyKSxcclxuICAgICAgY29sb3JcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRUaGlja25lc3NPZkNvbnRhaW5pbmdXYWxsKGl0ZW06IFdhbGxJdGVtKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBpdGVtICYmXHJcbiAgICAgIGl0ZW0uY3VycmVudFdhbGxFZGdlICYmXHJcbiAgICAgIGl0ZW0uY3VycmVudFdhbGxFZGdlLndhbGwgJiZcclxuICAgICAgaXRlbS5jdXJyZW50V2FsbEVkZ2Uud2FsbC50aGlja25lc3M7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kcmF3Um9vbUFuZ2xlTGFiZWwoeDogbnVtYmVyLCB5OiBudW1iZXIsIHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIHBvbHlnb25Db3JuZXJzKSB7XHJcbiAgICBjb25zdCBsZW5ndGggPSBVdGlscy5kaXN0YW5jZSh4LCB5LCB4MSwgeTEpO1xyXG4gICAgaWYgKGxlbmd0aCA8IDAuNikge1xyXG4gICAgICAvLyBkb24ndCBkcmF3IGFuZ2xlcyBmb3Igd2FsbHMgdGhpcyBzaG9ydFxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBhbmdsZSA9IFV0aWxzLmFuZ2xlKHgxIC0geCwgeTEgLSB5LCB4MiAtIHgsIHkyIC0geSk7XHJcbiAgICBjb25zdCBwb3MgPSBVdGlscy5zZWxlY3RQb2ludEluc2lkZVBvbHlnb24oXHJcbiAgICAgIHt4LCB5fSxcclxuICAgICAgVXRpbHMucG9pbnRPbkFuZ2xlQXhpcyhcclxuICAgICAgICB0aGlzLl9nZXRTY2FsZWRBbmdsZUxhYmVsRGlzdGFuY2UodGhpcy5fdmlld1NjYWxlLCBhbmdsZUxhYmVsRGlzdGFuY2VTY2FsZVRyZXNob2xkKSxcclxuICAgICAgICBhbmdsZSxcclxuICAgICAgICB4MiAtIHgsXHJcbiAgICAgICAgeTIgLSB5XHJcbiAgICAgICksXHJcbiAgICAgIHBvbHlnb25Db3JuZXJzXHJcbiAgICApO1xyXG4gICAgdGhpcy5fZHJhd0xhYmVsVGV4dChcclxuICAgICAgdGhpcy5fY29udmVydFgocG9zLngpLFxyXG4gICAgICB0aGlzLl9jb252ZXJ0WShwb3MueSksXHJcbiAgICAgIEFuZ2xlcy5hbmdsZVRvTWVhc3VyZShVdGlscy5hbmdsZTJwaSh4MSAtIHgsIHkxIC0geSwgeDIgLSB4LCB5MiAtIHkpLCB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LkFuZ2xlVW5pdCkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhd0VkZ2UoZWRnZTogSGFsZkVkZ2UsIGZpbGxDb2xvcjogc3RyaW5nLCBzdHJva2VDb2xvcj86IHN0cmluZykge1xyXG4gICAgQ29udGV4dFV0aWxzLkRyYXdQb2x5Z29uKHRoaXMuX2NvbnRleHQsXHJcbiAgICAgIFV0aWxzLm1hcChlZGdlLmNvcm5lcnMoKSwgKGNvcm5lcikgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0WChjb3JuZXIueCk7XHJcbiAgICAgIH0pLFxyXG4gICAgICBVdGlscy5tYXAoZWRnZS5jb3JuZXJzKCksIChjb3JuZXIpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydFkoY29ybmVyLnkpO1xyXG4gICAgICB9KSxcclxuICAgICAgdHJ1ZSxcclxuICAgICAgZmlsbENvbG9yLFxyXG4gICAgICB0cnVlLFxyXG4gICAgICBzdHJva2VDb2xvciB8fCBmaWxsQ29sb3IsXHJcbiAgICAgIGVkZ2VXaWR0aFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RyYXdBcmVhTGFiZWwoeDogbnVtYmVyLCB5OiBudW1iZXIsIGFyZWE6IG51bWJlcikge1xyXG4gICAgaWYgKGFyZWEgPCAwLjA1KSB7XHJcbiAgICAgIC8vIGRvbid0IGRyYXcgYXJlYSBmb3Igcm9vbXMgdGhpcyBzbWFsbFxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9jb250ZXh0LmZvbnQgPSBgbm9ybWFsICR7bGFiZWxTaXplfSBBcmlhbGA7XHJcbiAgICB0aGlzLl9jb250ZXh0LmZpbGxTdHlsZSA9ICcjMDAwMDAwJztcclxuICAgIHRoaXMuX2NvbnRleHQudGV4dEJhc2VsaW5lID0gJ21pZGRsZSc7XHJcbiAgICB0aGlzLl9jb250ZXh0LnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgdGhpcy5fY29udGV4dC5zdHJva2VTdHlsZSA9ICcjZmZmZmZmJztcclxuICAgIHRoaXMuX2NvbnRleHQubGluZVdpZHRoID0gNDtcclxuXHJcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5fZGltZW5zaW9uU2VydmljZS5zbVRvTWVhc3VyZShhcmVhKTtcclxuICAgIHRoaXMuX2NvbnRleHQuc3Ryb2tlVGV4dCh0ZXh0LFxyXG4gICAgICB0aGlzLl9jb252ZXJ0WCh4KSxcclxuICAgICAgdGhpcy5fY29udmVydFkoeSkpO1xyXG4gICAgdGhpcy5fY29udGV4dC5maWxsVGV4dCh0ZXh0LFxyXG4gICAgICB0aGlzLl9jb252ZXJ0WCh4KSxcclxuICAgICAgdGhpcy5fY29udmVydFkoeSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhd0xhYmVsVGV4dChcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIHRleHQ6IHN0cmluZyxcclxuICAgIGNvbG9yT3B0aW9uczogeyBmaWxsQ29sb3I/OiBzdHJpbmcsIHN0cm9rZUNvbG9yPzogc3RyaW5nIH0gPSB7fVxyXG4gICkge1xyXG4gICAgdGhpcy5fY29udGV4dC5mb250ID0gYG5vcm1hbCAke2xhYmVsU2l6ZX0gQXJpYWxgO1xyXG4gICAgdGhpcy5fY29udGV4dC5maWxsU3R5bGUgPSBjb2xvck9wdGlvbnMuZmlsbENvbG9yIHx8ICcjMDAwMDAwJztcclxuICAgIHRoaXMuX2NvbnRleHQudGV4dEJhc2VsaW5lID0gJ21pZGRsZSc7XHJcbiAgICB0aGlzLl9jb250ZXh0LnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgdGhpcy5fY29udGV4dC5zdHJva2VTdHlsZSA9IGNvbG9yT3B0aW9ucy5zdHJva2VDb2xvciB8fCAnI2ZmZmZmZic7XHJcbiAgICB0aGlzLl9jb250ZXh0LmxpbmVXaWR0aCA9IDQ7XHJcbiAgICB0aGlzLl9jb250ZXh0LnN0cm9rZVRleHQodGV4dCwgeCwgeSk7XHJcbiAgICB0aGlzLl9jb250ZXh0LmZpbGxUZXh0KHRleHQsIHgsIHkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhd0l0ZW1TaXplTGFiZWwoaXRlbTogV2FsbEl0ZW0sIGNvbG9yOiBzdHJpbmcgPSAnIzAwMDAwMCcpIHtcclxuICAgIGNvbnN0IHJldmVyc2VMYWJlbFNpZGVcclxuICAgICAgPSBpdGVtLmN1cnJlbnRXYWxsRWRnZSA9PT0gaXRlbS5jdXJyZW50V2FsbC5iYWNrRWRnZTtcclxuXHJcbiAgICBjb25zdCBzY2FsZWREaW1lbnNpb25MaW5lRGlzdGFuY2VcclxuICAgICAgPSAocmV2ZXJzZUxhYmVsU2lkZSA/IC0xIDogMSkgKiBkaW1lbnNpb25MaW5lRGlzdGFuY2UgKiAodGhpcy5fdmlld1NjYWxlIC8gMik7XHJcblxyXG4gICAgY29uc3QgYW5nbGVcclxuICAgICAgPSBVdGlscy5saW5lVG9YQXhpc0FuZ2xlKGl0ZW0uZ2V0U3RhcnRYKCksIGl0ZW0uZ2V0U3RhcnRZKCksIGl0ZW0uZ2V0RW5kWCgpLCBpdGVtLmdldEVuZFkoKSk7XHJcblxyXG4gICAgY29uc3QgbGFiZWxMaW5lID0gVXRpbHMuZ2V0VHJhbnNsYXRlZExpbmUoXHJcbiAgICAgIG5ldyBWZWN0b3IyKHRoaXMuX2NvbnZlcnRYKGl0ZW0uZ2V0U3RhcnRYKCkpLCB0aGlzLl9jb252ZXJ0WShpdGVtLmdldFN0YXJ0WSgpKSksXHJcbiAgICAgIG5ldyBWZWN0b3IyKHRoaXMuX2NvbnZlcnRYKGl0ZW0uZ2V0RW5kWCgpKSwgdGhpcy5fY29udmVydFkoaXRlbS5nZXRFbmRZKCkpKSxcclxuICAgICAgYW5nbGUsXHJcbiAgICAgIHNjYWxlZERpbWVuc2lvbkxpbmVEaXN0YW5jZVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLl9kcmF3UG9pbnRUb1BvaW50RGltZW5zaW9uTGFiZWwoXHJcbiAgICAgIGxhYmVsTGluZS5zdGFydCxcclxuICAgICAgbGFiZWxMaW5lLmVuZCxcclxuICAgICAgTWF0aC5yb3VuZCgoaXRlbS5nZXRIYWxmU2l6ZSgpLnggKiAyMDApKSwgLy8gZmFjdG9yIDEwMCB0aW1lcyAyXHJcbiAgICAgIGNvbG9yXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhd0l0ZW1Ub05laWdoYm91cnNEaXN0YW5jZUxhYmVscyhpdGVtOiBXYWxsSXRlbSwgY29sb3I6IHN0cmluZyA9ICcjMDAwMDAwJykge1xyXG4gICAgY29uc3QgcmV2ZXJzZUxhYmVsU2lkZVxyXG4gICAgICA9IGl0ZW0uY3VycmVudFdhbGxFZGdlID09PSBpdGVtLmN1cnJlbnRXYWxsLmJhY2tFZGdlO1xyXG5cclxuICAgIGNvbnN0IHNjYWxlZERpbWVuc2lvbkxpbmVEaXN0YW5jZVxyXG4gICAgICA9IChyZXZlcnNlTGFiZWxTaWRlID8gMSA6IC0xKSAqIGRpbWVuc2lvbkxpbmVEaXN0YW5jZSAqICh0aGlzLl92aWV3U2NhbGUgLyAyKTtcclxuXHJcbiAgICBjb25zdCBhbmdsZVxyXG4gICAgICA9IFV0aWxzLmxpbmVUb1hBeGlzQW5nbGUoaXRlbS5nZXRTdGFydFgoKSwgaXRlbS5nZXRTdGFydFkoKSwgaXRlbS5nZXRFbmRYKCksIGl0ZW0uZ2V0RW5kWSgpKTtcclxuXHJcbiAgICBjb25zdCBsYWJlbHNEYXRhXHJcbiAgICAgID0gdGhpcy5fZ2V0SXRlbVRvSXRlbURpc3RhbmNlTGFiZWxzRGF0YShpdGVtLmN1cnJlbnRXYWxsLmdldFdhbGxJdGVtcygpKVxyXG4gICAgICAuZmlsdGVyKGRhdGEgPT4gZGF0YS5sZWZ0SXRlbSA9PT0gaXRlbSB8fCBkYXRhLnJpZ2h0SXRlbSA9PT0gaXRlbSk7XHJcblxyXG4gICAgZm9yIChjb25zdCBsYWJlbERhdGEgb2YgbGFiZWxzRGF0YSkge1xyXG4gICAgICBpZiAobGFiZWxEYXRhLmRpc3RhbmNlIDw9IDApIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgbGFiZWxMaW5lID0gVXRpbHMuZ2V0VHJhbnNsYXRlZExpbmUoXHJcbiAgICAgICAgbmV3IFZlY3RvcjIodGhpcy5fY29udmVydFgobGFiZWxEYXRhLnN0YXJ0UG9pbnQueCksIHRoaXMuX2NvbnZlcnRZKGxhYmVsRGF0YS5zdGFydFBvaW50LnkpKSxcclxuICAgICAgICBuZXcgVmVjdG9yMih0aGlzLl9jb252ZXJ0WChsYWJlbERhdGEuZW5kUG9pbnQueCksIHRoaXMuX2NvbnZlcnRZKGxhYmVsRGF0YS5lbmRQb2ludC55KSksXHJcbiAgICAgICAgYW5nbGUsXHJcbiAgICAgICAgc2NhbGVkRGltZW5zaW9uTGluZURpc3RhbmNlXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLl9kcmF3UG9pbnRUb1BvaW50RGltZW5zaW9uTGFiZWwoXHJcbiAgICAgICAgbGFiZWxMaW5lLnN0YXJ0LFxyXG4gICAgICAgIGxhYmVsTGluZS5lbmQsXHJcbiAgICAgICAgTWF0aC5yb3VuZChsYWJlbERhdGEuZGlzdGFuY2UgKiAxMDApLFxyXG4gICAgICAgIGNvbG9yXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kcmF3UG9pbnRUb1BvaW50RGltZW5zaW9uTGFiZWwoc3RhcnQ6IFZlY3RvcjIsIGVuZDogVmVjdG9yMiwgZGltZW5zaW9uOiBudW1iZXIsIGNvbG9yOiBzdHJpbmcpIHtcclxuICAgIENvbnRleHRVdGlscy5EcmF3TGluZSh0aGlzLl9jb250ZXh0LFxyXG4gICAgICBzdGFydC54LCBzdGFydC55LFxyXG4gICAgICBlbmQueCwgZW5kLnksXHJcbiAgICAgIGRpbWVuc2lvbkxpbmVXaWR0aCwgY29sb3JcclxuICAgICk7XHJcbiAgICB0aGlzLl9kcmF3TGFiZWxUZXh0KFxyXG4gICAgICAoc3RhcnQueCArIGVuZC54KSAvIDIsXHJcbiAgICAgIChzdGFydC55ICsgZW5kLnkpIC8gMixcclxuICAgICAgdGhpcy5fZGltZW5zaW9uU2VydmljZS5jbVRvTWVhc3VyZShkaW1lbnNpb24pLFxyXG4gICAgICB7ZmlsbENvbG9yOiBjb2xvcn1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9maW5kQ2xvc2VzdEhhbGZFZGdlKHg6IG51bWJlciwgeTogbnVtYmVyKTogSGFsZkVkZ2Uge1xyXG4gICAgbGV0IGNsb3Nlc3RFZGdlO1xyXG4gICAgbGV0IG1pbkRpc3RhbmNlID0gSW5maW5pdHk7XHJcbiAgICB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLmdldFdhbGxzKCkuZm9yRWFjaCh3YWxsID0+IHtcclxuICAgICAgW3dhbGwuZnJvbnRFZGdlLCB3YWxsLmJhY2tFZGdlXS5mb3JFYWNoKGVkZ2UgPT4ge1xyXG4gICAgICAgIGlmICghZWRnZSkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGVkZ2UuZGlzdGFuY2VUbyh4LCB5KTtcclxuICAgICAgICBpZiAoZGlzdGFuY2UgPCBtaW5EaXN0YW5jZSkge1xyXG4gICAgICAgICAgY2xvc2VzdEVkZ2UgPSBlZGdlO1xyXG4gICAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGNsb3Nlc3RFZGdlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0SXRlbVRvSXRlbURpc3RhbmNlTGFiZWxzRGF0YShpdGVtczogV2FsbEl0ZW1bXSlcclxuICAgIDogeyBsZWZ0SXRlbTogV2FsbEl0ZW0sIHJpZ2h0SXRlbTogV2FsbEl0ZW0sIHN0YXJ0UG9pbnQ6IFZlY3RvcjIsIGVuZFBvaW50OiBWZWN0b3IyLCBkaXN0YW5jZTogbnVtYmVyIH1bXSB7XHJcblxyXG4gICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgY29uc3QgdG9Db3JuZXJzRGlzdGFuY2VzID0gaXRlbXNcclxuICAgICAgLm1hcChpdGVtID0+ICh7aXRlbTogaXRlbSwgLi4udGhpcy5fZ2V0RGlzdGFuY2VUb1dhbGxDb3JuZXJzKGl0ZW0pfSkpXHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnRvV2FsbFN0YXJ0IC0gYi50b1dhbGxTdGFydCk7XHJcblxyXG4gICAge1xyXG4gICAgICBjb25zdCBmaXJzdCA9IHRvQ29ybmVyc0Rpc3RhbmNlc1swXTtcclxuICAgICAgY29uc3QgZmlyc3RJdGVtc0VkZ2UgPSBmaXJzdC5pdGVtLmN1cnJlbnRXYWxsRWRnZTtcclxuXHJcbiAgICAgIGNvbnN0IHN0YXJ0UG9pbnQgPSBmaXJzdEl0ZW1zRWRnZSA9PT0gZmlyc3RJdGVtc0VkZ2Uud2FsbC5iYWNrRWRnZVxyXG4gICAgICAgID8gbmV3IFZlY3RvcjIoZmlyc3RJdGVtc0VkZ2UuZ2V0U3RhcnQoKS54LCBmaXJzdEl0ZW1zRWRnZS5nZXRTdGFydCgpLnkpXHJcbiAgICAgICAgOiBuZXcgVmVjdG9yMihmaXJzdEl0ZW1zRWRnZS5nZXRFbmQoKS54LCBmaXJzdEl0ZW1zRWRnZS5nZXRFbmQoKS55KTtcclxuXHJcbiAgICAgIGNvbnN0IGVuZFBvaW50ID0gZmlyc3RJdGVtc0VkZ2UgPT09IGZpcnN0SXRlbXNFZGdlLndhbGwuYmFja0VkZ2VcclxuICAgICAgICA/IG5ldyBWZWN0b3IyKGZpcnN0Lml0ZW0uZ2V0U3RhcnRYKCksIGZpcnN0Lml0ZW0uZ2V0U3RhcnRZKCkpXHJcbiAgICAgICAgOiBuZXcgVmVjdG9yMihmaXJzdC5pdGVtLmdldEVuZFgoKSwgZmlyc3QuaXRlbS5nZXRFbmRZKCkpO1xyXG5cclxuICAgICAgcmVzdWx0LnB1c2goe1xyXG4gICAgICAgIGxlZnRJdGVtOiBmaXJzdC5pdGVtLFxyXG4gICAgICAgIHN0YXJ0UG9pbnQ6IHN0YXJ0UG9pbnQsXHJcbiAgICAgICAgZW5kUG9pbnQ6IGVuZFBvaW50LFxyXG4gICAgICAgIGRpc3RhbmNlOiBmaXJzdC50b1dhbGxTdGFydFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdG9Db3JuZXJzRGlzdGFuY2VzLmxlbmd0aCAtIDE7ICsraW5kZXgpIHtcclxuICAgICAgY29uc3QgY3VyciA9IHRvQ29ybmVyc0Rpc3RhbmNlc1tpbmRleF07XHJcbiAgICAgIGNvbnN0IG5leHQgPSB0b0Nvcm5lcnNEaXN0YW5jZXNbaW5kZXggKyAxXTtcclxuXHJcbiAgICAgIGNvbnN0IGN1cnJUb05leHREaXN0YW5jZVxyXG4gICAgICAgID0gbmV4dC50b1dhbGxTdGFydCAtIChjdXJyLnRvV2FsbFN0YXJ0ICsgKDIgKiBjdXJyLml0ZW0uZ2V0SGFsZlNpemUoKS54KSk7XHJcblxyXG4gICAgICBjb25zdCBzdGFydFBvaW50ID0gY3Vyci5pdGVtLmN1cnJlbnRXYWxsRWRnZSA9PT0gY3Vyci5pdGVtLmN1cnJlbnRXYWxsLmJhY2tFZGdlXHJcbiAgICAgICAgPyBuZXcgVmVjdG9yMihjdXJyLml0ZW0uZ2V0RW5kWCgpLCBjdXJyLml0ZW0uZ2V0RW5kWSgpKVxyXG4gICAgICAgIDogbmV3IFZlY3RvcjIoY3Vyci5pdGVtLmdldFN0YXJ0WCgpLCBjdXJyLml0ZW0uZ2V0U3RhcnRZKCkpO1xyXG5cclxuICAgICAgbGV0IGVuZFBvaW50O1xyXG4gICAgICBpZiAoY3Vyci5pdGVtLmN1cnJlbnRXYWxsRWRnZSA9PT0gbmV4dC5pdGVtLmN1cnJlbnRXYWxsRWRnZSkge1xyXG4gICAgICAgIGVuZFBvaW50ID0gY3Vyci5pdGVtLmN1cnJlbnRXYWxsRWRnZSA9PT0gY3Vyci5pdGVtLmN1cnJlbnRXYWxsLmJhY2tFZGdlXHJcbiAgICAgICAgICA/IG5ldyBWZWN0b3IyKG5leHQuaXRlbS5nZXRTdGFydFgoKSwgbmV4dC5pdGVtLmdldFN0YXJ0WSgpKVxyXG4gICAgICAgICAgOiBuZXcgVmVjdG9yMihuZXh0Lml0ZW0uZ2V0RW5kWCgpLCBuZXh0Lml0ZW0uZ2V0RW5kWSgpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBlbmRQb2ludCA9IGN1cnIuaXRlbS5jdXJyZW50V2FsbEVkZ2UgPT09IGN1cnIuaXRlbS5jdXJyZW50V2FsbC5mcm9udEVkZ2VcclxuICAgICAgICAgID8gbmV3IFZlY3RvcjIobmV4dC5pdGVtLmdldFN0YXJ0WCgpLCBuZXh0Lml0ZW0uZ2V0U3RhcnRZKCkpXHJcbiAgICAgICAgICA6IG5ldyBWZWN0b3IyKG5leHQuaXRlbS5nZXRFbmRYKCksIG5leHQuaXRlbS5nZXRFbmRZKCkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXN1bHQucHVzaCh7XHJcbiAgICAgICAgbGVmdEl0ZW06IGN1cnIuaXRlbSxcclxuICAgICAgICByaWdodEl0ZW06IG5leHQuaXRlbSxcclxuICAgICAgICBzdGFydFBvaW50OiBzdGFydFBvaW50LFxyXG4gICAgICAgIGVuZFBvaW50OiBlbmRQb2ludCxcclxuICAgICAgICBkaXN0YW5jZTogY3VyclRvTmV4dERpc3RhbmNlXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHtcclxuICAgICAgY29uc3QgbGFzdCA9IHRvQ29ybmVyc0Rpc3RhbmNlc1t0b0Nvcm5lcnNEaXN0YW5jZXMubGVuZ3RoIC0gMV07XHJcbiAgICAgIGNvbnN0IGxhc3RJdGVtc0VkZ2UgPSBsYXN0Lml0ZW0uY3VycmVudFdhbGxFZGdlO1xyXG5cclxuICAgICAgY29uc3Qgc3RhcnRQb2ludCA9IGxhc3RJdGVtc0VkZ2UgPT09IGxhc3RJdGVtc0VkZ2Uud2FsbC5iYWNrRWRnZVxyXG4gICAgICAgID8gbmV3IFZlY3RvcjIobGFzdC5pdGVtLmdldEVuZFgoKSwgbGFzdC5pdGVtLmdldEVuZFkoKSlcclxuICAgICAgICA6IG5ldyBWZWN0b3IyKGxhc3QuaXRlbS5nZXRTdGFydFgoKSwgbGFzdC5pdGVtLmdldFN0YXJ0WSgpKTtcclxuXHJcbiAgICAgIGNvbnN0IGVuZFBvaW50ID0gbGFzdEl0ZW1zRWRnZSA9PT0gbGFzdEl0ZW1zRWRnZS53YWxsLmJhY2tFZGdlXHJcbiAgICAgICAgPyBuZXcgVmVjdG9yMihsYXN0SXRlbXNFZGdlLmdldEVuZCgpLngsIGxhc3RJdGVtc0VkZ2UuZ2V0RW5kKCkueSlcclxuICAgICAgICA6IG5ldyBWZWN0b3IyKGxhc3RJdGVtc0VkZ2UuZ2V0U3RhcnQoKS54LCBsYXN0SXRlbXNFZGdlLmdldFN0YXJ0KCkueSk7XHJcblxyXG4gICAgICByZXN1bHQucHVzaCh7XHJcbiAgICAgICAgbGVmdEl0ZW06IGxhc3QuaXRlbSxcclxuICAgICAgICBzdGFydFBvaW50OiBzdGFydFBvaW50LFxyXG4gICAgICAgIGVuZFBvaW50OiBlbmRQb2ludCxcclxuICAgICAgICBkaXN0YW5jZTogbGFzdC50b1dhbGxFbmRcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldERpc3RhbmNlVG9XYWxsQ29ybmVycyhpdGVtOiBXYWxsSXRlbSk6IHsgdG9XYWxsU3RhcnQ6IG51bWJlciwgdG9XYWxsRW5kOiBudW1iZXIgfSB7XHJcbiAgICBsZXQgc2hvcnRlckVkZ2UgPSBpdGVtLmN1cnJlbnRXYWxsRWRnZTtcclxuICAgIGlmIChpdGVtLmN1cnJlbnRXYWxsLnNpZGUgPT09IERvdWJsZVNpZGUpIHtcclxuICAgICAgc2hvcnRlckVkZ2UgPSBpdGVtLmN1cnJlbnRXYWxsLmJhY2tFZGdlLmludGVyaW9yRGlzdGFuY2UoKSA8IGl0ZW0uY3VycmVudFdhbGwuZnJvbnRFZGdlLmludGVyaW9yRGlzdGFuY2UoKVxyXG4gICAgICAgID8gaXRlbS5jdXJyZW50V2FsbC5iYWNrRWRnZVxyXG4gICAgICAgIDogaXRlbS5jdXJyZW50V2FsbC5mcm9udEVkZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZWRnZVN0YXJ0WERpc3RhbmNlID0gc2hvcnRlckVkZ2UuaW50ZXJpb3JTdGFydCgpLnggLSBpdGVtLnBvc2l0aW9uLng7XHJcbiAgICBjb25zdCBlZGdlU3RhcnRZRGlzdGFuY2UgPSBzaG9ydGVyRWRnZS5pbnRlcmlvclN0YXJ0KCkueSAtIGl0ZW0ucG9zaXRpb24uejtcclxuXHJcbiAgICBjb25zdCBlZGdlRW5kWERpc3RhbmNlID0gc2hvcnRlckVkZ2UuaW50ZXJpb3JFbmQoKS54IC0gaXRlbS5wb3NpdGlvbi54O1xyXG4gICAgY29uc3QgZWRnZUVuZFlEaXN0YW5jZSA9IHNob3J0ZXJFZGdlLmludGVyaW9yRW5kKCkueSAtIGl0ZW0ucG9zaXRpb24uejtcclxuXHJcbiAgICBjb25zdCBpdGVtVG9FZGdlU3RhcnREaXN0YW5jZVxyXG4gICAgICA9IE1hdGguc3FydCgoZWRnZVN0YXJ0WERpc3RhbmNlICoqIDIpICsgKGVkZ2VTdGFydFlEaXN0YW5jZSAqKiAyKSkgLSBpdGVtLmdldEhhbGZTaXplKCkueDtcclxuXHJcbiAgICBjb25zdCBpdGVtVG9FZGdlRW5kRGlzdGFuY2VcclxuICAgICAgPSBNYXRoLnNxcnQoKGVkZ2VFbmRYRGlzdGFuY2UgKiogMikgKyAoZWRnZUVuZFlEaXN0YW5jZSAqKiAyKSkgLSBpdGVtLmdldEhhbGZTaXplKCkueDtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0b1dhbGxTdGFydDpcclxuICAgICAgICBzaG9ydGVyRWRnZSA9PT0gaXRlbS5jdXJyZW50V2FsbC5iYWNrRWRnZVxyXG4gICAgICAgICAgPyBpdGVtVG9FZGdlU3RhcnREaXN0YW5jZVxyXG4gICAgICAgICAgOiBpdGVtVG9FZGdlRW5kRGlzdGFuY2UsXHJcblxyXG4gICAgICB0b1dhbGxFbmQ6XHJcbiAgICAgICAgc2hvcnRlckVkZ2UgPT09IGl0ZW0uY3VycmVudFdhbGwuYmFja0VkZ2VcclxuICAgICAgICAgID8gaXRlbVRvRWRnZUVuZERpc3RhbmNlXHJcbiAgICAgICAgICA6IGl0ZW1Ub0VkZ2VTdGFydERpc3RhbmNlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2FsY3VsYXRlR3JpZE9mZnNldChuKSB7XHJcbiAgICBpZiAobiA+PSAwKSB7XHJcbiAgICAgIHJldHVybiAobiArIGdyaWRTcGFjaW5nIC8gMi4wKSAlIGdyaWRTcGFjaW5nIC0gZ3JpZFNwYWNpbmcgLyAyLjA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gKG4gLSBncmlkU3BhY2luZyAvIDIuMCkgJSBncmlkU3BhY2luZyArIGdyaWRTcGFjaW5nIC8gMi4wO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIENvbnZlcnQgZnJvbSBUSFJFRWpzIGNvb3JkcyB0byBjYW52YXMgY29vcmRzLiAqL1xyXG4gIHByaXZhdGUgX2NvbnZlcnRYKHg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKHggLSB0aGlzLl9vcmlnaW5YICogdGhpcy5fY21QZXJQaXhlbCkgKiB0aGlzLl9waXhlbHNQZXJDbTtcclxuICB9XHJcblxyXG4gIC8qKiBDb252ZXJ0IGZyb20gVEhSRUVqcyBjb29yZHMgdG8gY2FudmFzIGNvb3Jkcy4gKi9cclxuICBwcml2YXRlIF9jb252ZXJ0WSh5OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuICh5IC0gdGhpcy5fb3JpZ2luWSAqIHRoaXMuX2NtUGVyUGl4ZWwpICogdGhpcy5fcGl4ZWxzUGVyQ207XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVDbVBlclBpeGVsKCkge1xyXG4gICAgdGhpcy5fY21QZXJQaXhlbCA9IGNtUGVyRm9vdCAqICgxLjAgLyBwaXhlbHNQZXJGb290KSAvIHRoaXMuX3ZpZXdTY2FsZTtcclxuICAgIHRoaXMuX3BpeGVsc1BlckNtID0gMS4wIC8gdGhpcy5fY21QZXJQaXhlbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Jlc2V0T3JpZ2luKCkge1xyXG4gICAgaWYgKHRoaXMuX2NhbnZhcykge1xyXG4gICAgICBjb25zdCBjZW50ZXJYID0gdGhpcy5fY2FudmFzLndpZHRoIC8gMi4wO1xyXG4gICAgICBjb25zdCBjZW50ZXJZID0gdGhpcy5fY2FudmFzLmhlaWdodCAvIDIuMDtcclxuICAgICAgY29uc3QgY2VudGVyRmxvb3JwbGFuID0gaXNOYU4odGhpcy5fZmxvb3JwbGFuU2VydmljZS5nZXRDZW50ZXIoKS54KSA/XHJcbiAgICAgICAgbmV3IFZlY3RvcjMoMCwgMCwgMCkgOiB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLmdldENlbnRlcigpO1xyXG4gICAgICB0aGlzLl91cGRhdGVDbVBlclBpeGVsKCk7XHJcbiAgICAgIHRoaXMuX29yaWdpblggPSAoY2VudGVyRmxvb3JwbGFuLnggKiB0aGlzLl9waXhlbHNQZXJDbSAtIGNlbnRlclgpO1xyXG4gICAgICB0aGlzLl9vcmlnaW5ZID0gKGNlbnRlckZsb29ycGxhbi56ICogdGhpcy5fcGl4ZWxzUGVyQ20gLSBjZW50ZXJZKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NjYWxlT3JpZ2luKCkge1xyXG4gICAgY29uc3QgY2VudGVyRmxvb3JwbGFuID0gaXNOYU4odGhpcy5fZmxvb3JwbGFuU2VydmljZS5nZXRDZW50ZXIoKS54KSA/XHJcbiAgICAgIG5ldyBWZWN0b3IzKDAsIDAsIDApIDogdGhpcy5fZmxvb3JwbGFuU2VydmljZS5nZXRDZW50ZXIoKTtcclxuICAgIGNvbnN0IGNlbnRlclggPSBjZW50ZXJGbG9vcnBsYW4ueCAqIHRoaXMuX3BpeGVsc1BlckNtIC0gdGhpcy5fb3JpZ2luWDtcclxuICAgIGNvbnN0IGNlbnRlclkgPSBjZW50ZXJGbG9vcnBsYW4ueiAqIHRoaXMuX3BpeGVsc1BlckNtIC0gdGhpcy5fb3JpZ2luWTtcclxuICAgIHRoaXMuX3VwZGF0ZUNtUGVyUGl4ZWwoKTtcclxuICAgIHRoaXMuX29yaWdpblggPSAoY2VudGVyRmxvb3JwbGFuLnggKiB0aGlzLl9waXhlbHNQZXJDbSAtIGNlbnRlclgpO1xyXG4gICAgdGhpcy5fb3JpZ2luWSA9IChjZW50ZXJGbG9vcnBsYW4ueiAqIHRoaXMuX3BpeGVsc1BlckNtIC0gY2VudGVyWSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jb21wdXRlQ29ybmVyUmFkaXVzKGNvcm5lcjogQ29ybmVyKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IG1pbldhbGxXaWR0aCA9IG1pbkNvcm5lclJhZGl1cztcclxuICAgIGNvbnN0IG1heFdhbGxXaWR0aCA9IG1heENvcm5lclJhZGl1cztcclxuICAgIGNvbnN0IHRoaWNrZXN0V2FsbFdpZHRoID0gTWF0aC5tYXgoXHJcbiAgICAgIDAsXHJcbiAgICAgIC4uLmNvcm5lci5zdGFydFdhbGxzLm1hcCh3YWxsID0+IHdhbGwudGhpY2tuZXNzKSxcclxuICAgICAgLi4uY29ybmVyLmVuZFdhbGxzLm1hcCh3YWxsID0+IHdhbGwudGhpY2tuZXNzKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBsaW1pdGVkV2FsbFdpZHRoID0gTWF0aC5taW4oXHJcbiAgICAgIG1heFdhbGxXaWR0aCxcclxuICAgICAgTWF0aC5tYXgodGhpY2tlc3RXYWxsV2lkdGgsIG1pbldhbGxXaWR0aClcclxuICAgICkgKiB3YWxsVGhpY2tuZXNzTXVsdGlwbGllcjtcclxuXHJcbiAgICByZXR1cm4gTWF0aC5tYXgobGltaXRlZFdhbGxXaWR0aCAqIHRoaXMuX3ZpZXdTY2FsZSAvIDEwMCwgbWluQ29ybmVyUmFkaXVzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFNjYWxlZEFuZ2xlTGFiZWxEaXN0YW5jZShzY2FsZTogbnVtYmVyLCBzY2FsZVRyZXNob2xkPzogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGFuZ2xlTGFiZWxEaXN0YW5jZUluQ20gPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LkFuZ2xlTGFiZWxEaXN0YW5jZUluQ20pO1xyXG4gICAgcmV0dXJuIGFuZ2xlTGFiZWxEaXN0YW5jZUluQ20gLyBNYXRoLm1pbihzY2FsZSwgc2NhbGVUcmVzaG9sZCB8fCBJbmZpbml0eSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRJbml0aWFsVmlld1NjYWxlKCk6IG51bWJlciB7XHJcbiAgICBsZXQgdmlld1NjYWxlOiBudW1iZXIgPSB0aGlzLmluaXRpYWxWaWV3U2NhbGU7XHJcbiAgICBjb25zdCBkaW06IGFueSA9IHRoaXMuX2Zsb29ycGxhblNlcnZpY2UuZ2V0RGltZW5zaW9ucygxMDApO1xyXG4gICAgY29uc3QgaGVpZ2h0OiBudW1iZXIgPSAoZGltLnkubWF4IC0gZGltLnkubWluKTtcclxuICAgIGlmICh0aGlzLl9jYW52YXMgJiYgIWlzTmFOKGhlaWdodCkgJiYgISFoZWlnaHQgJiYgaXNGaW5pdGUoaGVpZ2h0KSkge1xyXG4gICAgICB2aWV3U2NhbGUgPSBNYXRoLnJvdW5kKCh0aGlzLl9jYW52YXMuaGVpZ2h0IC8gaGVpZ2h0KSAqIDEwMCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmlld1NjYWxlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xlYW5XYWxsTGVuZ3RoKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbWVzc2FnZUJ1c1NlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5XYWxsTGVuZ3RoSW5wdXRTaG93Q2hhbmdlZCwgZmFsc2UpO1xyXG4gICAgdGhpcy5fd2FsbExlbmd0aCA9IG51bGw7XHJcbiAgfVxyXG59XHJcbiIsIjxjYW52YXMgI2Zsb29ycGxhbm5lckNhbnZhc1xyXG4gICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVDb250ZXh0TWVudSgkZXZlbnQpXCJcclxuICAgICAgICAobW91c2Vkb3duKT1cImhhbmRsZU1vdXNlRG93bigkZXZlbnQpXCJcclxuICAgICAgICAobW91c2Vtb3ZlKT1cImhhbmRsZU1vdXNlTW92ZSgkZXZlbnQpXCJcclxuICAgICAgICAobW91c2V1cCk9XCJoYW5kbGVNb3VzZVVwKCRldmVudClcIlxyXG4gICAgICAgIChtb3VzZWxlYXZlKT1cImhhbmRsZU1vdXNlTGVhdmUoJGV2ZW50KVwiXHJcbiAgICAgICAgKHdoZWVsKT1cImhhbmRsZU1vdXNlV2hlZWwoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRvdWNoc3RhcnQpPVwiaGFuZGxlVG91Y2hTdGFydCgkZXZlbnQpXCJcclxuICAgICAgICAodG91Y2htb3ZlKT1cImhhbmRsZVRvdWNoTW92ZSgkZXZlbnQpXCJcclxuICAgICAgICAodG91Y2hlbmQpPVwiaGFuZGxlVG91Y2hVcCgkZXZlbnQpXCJcclxuICAgICAgICAodG91Y2hjYW5jZWwpPVwiaGFuZGxlVG91Y2hFbmQoJGV2ZW50KVwiXHJcbj48L2NhbnZhcz5cclxuXHJcbjx3YWxsLWxlbmd0aC1pbnB1dD48L3dhbGwtbGVuZ3RoLWlucHV0PlxyXG5cclxuPGRpdiBjbGFzcz1cImNvbnRyb2xzLXRvcFwiPlxyXG4gIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cCBjbGFzcz1cIm1vZGUtdG9nZ2xlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VGbG9vcnBsYW5uZXJNb2RlKCRldmVudC52YWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0ZWRNb2RlXCJcclxuICA+XHJcbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cImZsb29ycGxhbm5lck1vZGUuRHJhd1wiIFttYXRUb29sdGlwXT1cIidEUkFXX1dBTExTJyB8IGxvY2FsaXplXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5lZGl0PC9tYXQtaWNvbj5cclxuICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cImZsb29ycGxhbm5lck1vZGUuTW92ZVwiIFttYXRUb29sdGlwXT1cIidTRUxFQ1RfQU5EX01PVkVfV0FMTFMnIHwgbG9jYWxpemVcIj5cclxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiIHN2Z0ljb249XCJoYW5kLXBvaW50ZXJcIj48L21hdC1pY29uPlxyXG4gICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJoaW50XCIgKm5nSWY9XCJtb2RlID09PSBmbG9vcnBsYW5uZXJNb2RlLkRyYXdpbmdcIiAoY2xpY2spPVwiY2hhbmdlRmxvb3JwbGFubmVyTW9kZShmbG9vcnBsYW5uZXJNb2RlLkRyYXcpXCI+XHJcbiAge3sgJ0NMSUNLX0hFUkVfVE9fRVhJVF9EUkFXSU5HX01PREVfT1JfUFJFU1NfVEhFX0VTQ19LRVknIHwgbG9jYWxpemUgfX1cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiaGludFwiICpuZ0lmPVwibW9kZSA9PT0gZmxvb3JwbGFubmVyTW9kZS5EcmF3ICYmIHRoaXMuc2hvd1N0YXJ0aW5nTWVzc2FnZXNcIj5cclxuICB7eyAnVEFCX0FOWVdIRVJFX1RPX1NUQVJUJyB8IGxvY2FsaXplIH19XHJcbjwvZGl2PlxyXG4iXX0=
|