@colijnit/homedecorator 255.1.4 → 255.1.6

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.
Files changed (89) hide show
  1. package/app/core/enum/message-type.enum.d.ts +3 -1
  2. package/app/core/interface/message-with-payload.interface.d.ts +6 -0
  3. package/app/core/model/homedecorator-settings-options.d.ts +2 -0
  4. package/app/core/service/homedecorator-app-event.service.d.ts +1 -0
  5. package/app/core/service/homedecorator-connector-adapter.service.d.ts +2 -0
  6. package/app/core/service/homedecorator-connector.service.d.ts +5 -4
  7. package/app/core/service/homedecorator-settings.service.d.ts +2 -1
  8. package/app/core/service/presets.service.d.ts +3 -1
  9. package/app/homedecorator.component.d.ts +3 -1
  10. package/app/homedecorator.module.d.ts +2 -1
  11. package/app/plugins/core3d/service/floor-pattern.service.d.ts +1 -1
  12. package/app/plugins/core3d/service/floor-tile-intersection.service.d.ts +2 -1
  13. package/app/plugins/core3d/service/floor.service.d.ts +3 -1
  14. package/app/plugins/core3d/service/post-processing.service.d.ts +21 -7
  15. package/app/plugins/core3d/service/scene.service.d.ts +1 -1
  16. package/app/plugins/core3d/service/ssr.service.d.ts +0 -1
  17. package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +11 -2
  18. package/app/plugins/model-uploader/model-previewer/model-preview.component.scss +185 -15
  19. package/app/plugins/model-uploader/model-uploader.module.d.ts +5 -1
  20. package/app/plugins/render/render-dialog/render-dialog.component.d.ts +4 -1
  21. package/app/plugins/render/render-dialog/render-dialog.component.scss +5 -5
  22. package/app/plugins/room-planner/components/floorplanner/floorplanner.component.d.ts +3 -1
  23. package/app/plugins/room-planner/components/floorplanner/service/room.service.d.ts +1 -0
  24. package/app/plugins/room-planner/components/settings/settings.component.d.ts +5 -1
  25. package/app/plugins/room-planner/components/texture-editor/texture-editor.component.d.ts +4 -1
  26. package/app/plugins/room-planner/room-planner/room-planner.component.scss +1 -0
  27. package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +1 -3
  28. package/app/plugins/toolbar/draw-dialog/draw-dialog.component.d.ts +2 -0
  29. package/app/plugins/toolbar/draw-dialog/draw-dialog.component.scss +1 -1
  30. package/app/plugins/toolbar/toolbar/toolbar.component.d.ts +2 -0
  31. package/assets/icons/dash-button.svg +7 -0
  32. package/assets/icons/pen-ruler.svg +1 -0
  33. package/assets/icons/retry-button.svg +7 -0
  34. package/bundles/colijnit-homedecorator.umd.js +822 -601
  35. package/bundles/colijnit-homedecorator.umd.js.map +1 -1
  36. package/esm2015/app/app.version.js +3 -3
  37. package/esm2015/app/core/enum/message-type.enum.js +3 -1
  38. package/esm2015/app/core/interface/message-with-payload.interface.js +1 -1
  39. package/esm2015/app/core/model/homedecorator-settings-options.js +3 -1
  40. package/esm2015/app/core/service/3dm-api.js +4 -4
  41. package/esm2015/app/core/service/homedecorator-app-event.service.js +2 -1
  42. package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +25 -2
  43. package/esm2015/app/core/service/homedecorator-connector.service.js +25 -22
  44. package/esm2015/app/core/service/homedecorator-settings.service.js +3 -2
  45. package/esm2015/app/core/service/presets.service.js +13 -5
  46. package/esm2015/app/core/utils/material.utils.js +3 -3
  47. package/esm2015/app/homedecorator.component.js +26 -19
  48. package/esm2015/app/homedecorator.module.js +8 -4
  49. package/esm2015/app/plugins/core3d/core3d/components/scenecontrol/scene-control.component.js +5 -5
  50. package/esm2015/app/plugins/core3d/items/custom-cylinder-floor-item.js +2 -2
  51. package/esm2015/app/plugins/core3d/items/custom-cylinder-wall-item.js +2 -2
  52. package/esm2015/app/plugins/core3d/items/custom-shape-floor-item.js +2 -2
  53. package/esm2015/app/plugins/core3d/items/custom-shape-wall-item.js +2 -2
  54. package/esm2015/app/plugins/core3d/items/factory.js +3 -2
  55. package/esm2015/app/plugins/core3d/service/ar.service.js +2 -1
  56. package/esm2015/app/plugins/core3d/service/floor-pattern.service.js +24 -18
  57. package/esm2015/app/plugins/core3d/service/floor-tile-intersection.service.js +13 -8
  58. package/esm2015/app/plugins/core3d/service/floor.service.js +9 -4
  59. package/esm2015/app/plugins/core3d/service/light-presets.service.js +10 -8
  60. package/esm2015/app/plugins/core3d/service/lights.service.js +8 -1
  61. package/esm2015/app/plugins/core3d/service/outline.service.js +4 -6
  62. package/esm2015/app/plugins/core3d/service/post-processing.service.js +148 -51
  63. package/esm2015/app/plugins/core3d/service/scene-event.service.js +14 -7
  64. package/esm2015/app/plugins/core3d/service/scene.service.js +84 -74
  65. package/esm2015/app/plugins/core3d/service/ssr.service.js +2 -53
  66. package/esm2015/app/plugins/lite-selector/lite-selector/component/answers-slideout/answers-slideout.component.js +10 -5
  67. package/esm2015/app/plugins/lite-selector/lite-selector/lite-selector.component.js +2 -2
  68. package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +281 -166
  69. package/esm2015/app/plugins/model-uploader/model-uploader.module.js +22 -3
  70. package/esm2015/app/plugins/render/render-controls/render-controls.component.js +3 -2
  71. package/esm2015/app/plugins/render/render-dialog/render-dialog.component.js +19 -14
  72. package/esm2015/app/plugins/render/service/new-render.service.js +4 -2
  73. package/esm2015/app/plugins/room-planner/components/custom-cylinder-creator/custom-cylinder-creator.component.js +4 -2
  74. package/esm2015/app/plugins/room-planner/components/custome-shape-creator/custom-shape-creator.component.js +2 -2
  75. package/esm2015/app/plugins/room-planner/components/floorplanner/floorplanner.component.js +29 -15
  76. package/esm2015/app/plugins/room-planner/components/floorplanner/service/room.service.js +5 -2
  77. package/esm2015/app/plugins/room-planner/components/settings/settings.component.js +12 -5
  78. package/esm2015/app/plugins/room-planner/components/texture-editor/texture-editor.component.js +31 -15
  79. package/esm2015/app/plugins/room-planner/room-planner/room-planner.component.js +691 -683
  80. package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +43 -41
  81. package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +1 -1
  82. package/esm2015/app/plugins/toolbar/draw-dialog/draw-dialog.component.js +26 -20
  83. package/esm2015/app/plugins/toolbar/save-dialog/save-dialog.component.js +2 -2
  84. package/esm2015/app/plugins/toolbar/toolbar/toolbar.component.js +15 -8
  85. package/esm2015/app/shared/loading-overlay/loading-overlay.component.js +4 -2
  86. package/esm2015/app/shared/model-dialog/model-dialog-furniture-list.component.js +3 -3
  87. package/fesm2015/colijnit-homedecorator.js +1656 -1322
  88. package/fesm2015/colijnit-homedecorator.js.map +1 -1
  89. 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 "../wall-length-input/wall-length-input.component";
33
- import * as i7 from "@angular/material/button-toggle";
34
- import * as i8 from "@angular/material/icon";
35
- import * as i9 from "@angular/material/tooltip";
36
- import * as i10 from "@angular/common";
37
- import * as i11 from "../../../../core/pipe/localize.pipe";
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;
@@ -150,12 +152,16 @@ export class FloorplannerComponent {
150
152
  this._context = this.canvasElement.nativeElement.getContext('2d');
151
153
  this._offsetX = this._canvas.clientLeft;
152
154
  this._offsetY = this._canvas.clientTop;
153
- this._handleWindowResize();
154
155
  this._readyToDraw = true;
156
+ this._handleWindowResize();
155
157
  }
156
158
  }
157
159
  showStartMessage() {
158
- this._diagramBackground.src = '';
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;
@@ -654,8 +666,10 @@ export class FloorplannerComponent {
654
666
  _handleWindowResize() {
655
667
  if (this._canvas) {
656
668
  const parent = this._canvas.parentElement;
657
- this._canvas.height = parent.clientHeight;
658
- this._canvas.width = parent.clientWidth;
669
+ if (parent && parent.clientHeight > 0) { // don't set dimensions of canvas to 0
670
+ this._canvas.height = parent.clientHeight;
671
+ this._canvas.width = parent.clientWidth;
672
+ }
659
673
  this._draw();
660
674
  }
661
675
  }
@@ -1281,8 +1295,8 @@ export class FloorplannerComponent {
1281
1295
  this._wallLength = null;
1282
1296
  }
1283
1297
  }
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: i6.WallLengthInputComponent, selector: "wall-length-input" }, { type: i7.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-labelledby", "tabIndex", "appearance", "checked", "disabled", "id", "name", "aria-label", "value"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i7.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "localize": i11.LocalizePipe } });
1298
+ 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 });
1299
+ 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
1300
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FloorplannerComponent, decorators: [{
1287
1301
  type: Component,
1288
1302
  args: [{
@@ -1290,7 +1304,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
1290
1304
  templateUrl: './floorplanner.component.html',
1291
1305
  styleUrls: ['./floorplanner.component.scss']
1292
1306
  }]
1293
- }], ctorParameters: function () { return [{ type: i1.FloorplanService }, { type: i2.MessageBusService }, { type: i3.ConfigurationService }, { type: i4.DimensioningService }, { type: i5.ViewModeService }]; }, propDecorators: { canvasElement: [{
1307
+ }], ctorParameters: function () { return [{ type: i1.FloorplanService }, { type: i2.MessageBusService }, { type: i3.ConfigurationService }, { type: i4.DimensioningService }, { type: i5.ViewModeService }, { type: i6.RoomService }]; }, propDecorators: { canvasElement: [{
1294
1308
  type: ViewChild,
1295
1309
  args: ['floorplannerCanvas', { read: ElementRef, static: true }]
1296
1310
  }], selectedWallChange: [{
@@ -1305,4 +1319,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
1305
1319
  type: HostListener,
1306
1320
  args: ['window:resize']
1307
1321
  }] } });
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
1322
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvb3JwbGFubmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvcm9vbS1wbGFubmVyL2NvbXBvbmVudHMvZmxvb3JwbGFubmVyL2Zsb29ycGxhbm5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3Jvb20tcGxhbm5lci9jb21wb25lbnRzL2Zsb29ycGxhbm5lci9mbG9vcnBsYW5uZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFnQixTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBYSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBQyxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFFM0MsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUNMLCtCQUErQixFQUMvQixrQkFBa0IsRUFDbEIsU0FBUyxFQUNULFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUNsQixTQUFTLEVBQ1QsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxTQUFTLEVBQ1QsZUFBZSxFQUNmLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IsU0FBUyxFQUNULGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLG9CQUFvQixFQUNwQix1QkFBdUIsRUFDdkIsdUJBQXVCLEVBQ3ZCLFdBQVcsRUFDWCxnQkFBZ0IsRUFDakIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUM5RSxPQUFPLEVBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDbkQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFPeEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUM1RCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUNyRixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDcEMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2pELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQW1CLFVBQVUsRUFBdUIsTUFBTSxvQ0FBb0MsQ0FBQztBQUV0RyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDekUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7Ozs7OztBQVNuRCxNQUFNLE9BQU8scUJBQXFCO0lBc0hoQyxZQUNVLGlCQUFtQyxFQUNuQyxrQkFBcUMsRUFDckMscUJBQTJDLEVBQzNDLGlCQUFzQyxFQUN0QyxnQkFBaUMsRUFDakMsWUFBeUI7UUFMekIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNuQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ3JDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBc0I7UUFDM0Msc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFxQjtRQUN0QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1FBQ2pDLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBeEg1Qix1QkFBa0IsR0FBK0IsSUFBSSxPQUFPLEVBQXFCLENBQUM7UUFFeEUsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIsa0JBQWEsR0FBRyxHQUFHLENBQUM7UUFDcEIsYUFBUSxHQUFHO1lBQzFCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxzQkFBc0IsT0FBTyxvQkFBb0IsUUFBUTtZQUN6RixDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sc0JBQXNCLE9BQU8sb0JBQW9CLFFBQVE7WUFDNUYsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxNQUFNO1lBQ3JDLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEVBQUUsVUFBVTtZQUMzQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU07WUFDL0IsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxVQUFVO1NBQ3RDLENBQUM7UUFDZSxrQkFBYSxHQUFHO1lBQy9CLENBQUMsZ0JBQWdCLENBQUMsNEJBQTRCLENBQUMsRUFBRSw4QkFBOEI7WUFDL0UsQ0FBQyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLDBCQUEwQjtZQUN2RSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxFQUFFLGFBQWE7U0FDakQsQ0FBQztRQUVLLHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQUN0QyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBSTFCLGFBQVEsR0FBVyxDQUFDLENBQUM7UUFDckIsYUFBUSxHQUFXLENBQUMsQ0FBQztRQUNyQixlQUFVLEdBQVcsR0FBRyxDQUFDO1FBQ3pCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBTXBCLGFBQVEsR0FBVyxDQUFDLENBQUM7UUFDckIsYUFBUSxHQUFXLENBQUMsQ0FBQztRQUNyQixZQUFPLEdBQVcsQ0FBQyxDQUFDO1FBQ3BCLFlBQU8sR0FBVyxDQUFDLENBQUM7UUFDcEIsY0FBUyxHQUFZLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLHVCQUFrQixHQUFZLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUMsb0JBQWUsR0FBWSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3pDLHFCQUFnQixHQUFZLElBQUksT0FBTyxFQUFFLENBQUM7UUFFMUMsd0JBQW1CLEdBQWlDLEVBQUUsQ0FBQztRQUN2RCxXQUFNLEdBQVcsQ0FBQyxDQUFDO1FBQ25CLFdBQU0sR0FBVyxDQUFDLENBQUM7UUFDbkIsYUFBUSxHQUFXLENBQUMsQ0FBQztRQUNyQixhQUFRLEdBQVcsQ0FBQyxDQUFDO1FBRXJCLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsY0FBUyxHQUFHLElBQUksQ0FBQztRQUVqQixVQUFLLEdBQW1CLEVBQUUsQ0FBQztRQUMzQixVQUFLLEdBQXFCLGdCQUFnQixDQUFDLElBQUksQ0FBQztRQUdoRCxtQkFBYyxHQUFHLElBQUksQ0FBQztRQUl0Qiw0QkFBdUIsR0FBVyxDQUFDLENBQUM7UUFDcEMsbUNBQThCLEdBQVcsR0FBRyxDQUFDO1FBRzdDLGlDQUE0QixHQUFZLEtBQUssQ0FBQztRQU05QyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUN0QixxQkFBZ0IsR0FBNEIsZ0JBQWdCLENBQUM7UUFDN0QscUJBQWdCLEdBQUcsR0FBRyxDQUFDO1FBQ3ZCLGtCQUFhLEdBQUcsR0FBRyxDQUFDO1FBSzdCLGlCQUFZLEdBQXFCLGdCQUFnQixDQUFDLElBQUksQ0FBQztRQTZDNUQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFekIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBcUIsRUFBRSxFQUFFO1lBQ2hFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDYixJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQTBCLEVBQUUsRUFBRTtZQUMzRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFxQixFQUFFLEVBQUU7Z0JBQ2hFLElBQUksR0FBRyxJQUFJLE9BQU8sRUFBRTtvQkFDbEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2lCQUNkO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsRUFDRixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFDakUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFDMUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQy9ELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLDJCQUEyQixFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDcEYsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxFQUNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxHQUFTLEVBQUU7WUFDdkUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLEVBQUU7Z0JBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNyRCxTQUFTLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLGFBQWEsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDdEY7UUFDSCxDQUFDLENBQUEsQ0FBQyxFQUNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEVBQ2hHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDNUcsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBNUVELElBQVcsSUFBSSxDQUFDLEtBQXVCO1FBQ3JDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEQ7SUFDSCxDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM5QyxDQUFDO0lBR00sZ0JBQWdCLENBQUMsS0FBb0I7UUFDMUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBR00sY0FBYyxDQUFDLEtBQW9CO1FBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUdNLFVBQVU7UUFDZixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBNkNELFdBQVc7UUFDVCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFO1lBQzFELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7WUFDaEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVNLGdCQUFnQjtRQUNyQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMzQixJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztTQUNsQztRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0lBQ25DLENBQUM7SUFFTSxPQUFPLENBQUMsSUFBc0I7UUFDbkMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxVQUFVO1FBQ2YsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFTSxNQUFNO1FBQ1gsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN0QyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDakYsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQztRQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVNLE9BQU87UUFDWixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3RDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVNLFNBQVM7UUFDZCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVNLFlBQVksQ0FBQyxNQUFNO1FBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDO1FBQzlCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFTSxlQUFlLENBQUMsSUFBc0I7UUFDM0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRU0sY0FBYztRQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU0saUJBQWlCLENBQUMsS0FBaUI7UUFDeEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVNLGVBQWUsQ0FBQyxLQUFpQjtRQUN0QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUMvQixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLEVBQUUsaURBQWlEO1lBQ3pFLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDN0M7YUFBTTtZQUNMLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUU7Z0JBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDN0M7U0FDRjtRQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNsRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUM3RSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRTtZQUNwRCxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZDO2FBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUM1RCxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzdDO2FBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLElBQUksRUFBRTtZQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEtBQWlCO1FBQ3ZDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNoRyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUMvQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUM3RSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRTtnQkFDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN2QztpQkFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUM1RCxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQzdDO2lCQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7Z0JBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDeEM7U0FDRjtJQUNILENBQUM7SUFFTSxhQUFhLENBQUMsS0FBaUI7UUFDcEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUVoQyxvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDL0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN2QjtTQUNGO1FBRUQsU0FBUztRQUNULElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7WUFDekMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZCO1FBRUQsVUFBVTtRQUNWLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7WUFDMUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7U0FDNUQ7UUFFRCxjQUFjO1FBQ2QsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLFVBQVU7WUFDM0MsSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUU7WUFDN0MsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxFQUFFLG1EQUFtRDtnQkFDM0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQzthQUM5QztpQkFBTTtnQkFDTCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDdkI7U0FDRjtJQUNILENBQUM7SUFFTSxhQUFhLENBQUMsS0FBaUI7UUFDcEMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDeEIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFHaEMsd0NBQXdDO1lBQ3hDLDJCQUEyQjtZQUMzQixJQUFJO1lBRUosU0FBUztZQUNULElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN2QjtZQUNELFVBQVU7WUFDVixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxFQUFFO2dCQUMxQyw4REFBOEQ7Z0JBQzlELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2FBQzlCO1lBQ0QsY0FBYztZQUNkLG1EQUFtRDtZQUNuRCxtREFBbUQ7WUFDbkQsa0ZBQWtGO1lBQ2xGLG9EQUFvRDtZQUNwRCxhQUFhO1lBQ2IsNkJBQTZCO1lBQzdCLE1BQU07WUFDTixJQUFJO1NBQ0w7SUFDSCxDQUFDO0lBRU0sZUFBZSxDQUFDLEtBQWlCO1FBQ3RDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7U0FFaEM7UUFDRCxNQUFNLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRSxlQUFlO1FBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUN4RyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3hHLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNoRSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtZQUNqRixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztTQUM1QjtRQUNELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7WUFDdkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0RixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BGLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQztZQUNqQixJQUFJLFdBQVcsS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN0QyxJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQztnQkFDakMsSUFBSSxHQUFHLElBQUksQ0FBQzthQUNiO1lBQ0QsMkJBQTJCO1lBQzNCLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLEVBQUU7Z0JBQzlCLElBQUksU0FBUyxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUU7b0JBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO29CQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztvQkFDeEIsSUFBSSxHQUFHLElBQUksQ0FBQztpQkFDYjtnQkFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFO29CQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUMxQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7d0JBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUMvRTtvQkFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDO2lCQUNiO2dCQUNELElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUU7b0JBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDO29CQUMvQixJQUFJLEdBQUcsSUFBSSxDQUFDO2lCQUNiO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2FBQ3pCO1lBQ0QsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ2Q7U0FDRjtRQUVELFVBQVU7UUFDVixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsWUFBWTtZQUM3QyxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUMvRCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNkO1FBRUQsV0FBVztRQUNYLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7WUFDekMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUNuQztpQkFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQzNCLE1BQU0sRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDdEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDcEgsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pFLE1BQU0sUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDOUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBQ3BFLE1BQU0sU0FBUyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUN4QyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsRUFBRTtvQkFDdEUsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUU7d0JBQ3BFLElBQUksT0FBTyxFQUFFOzRCQUNYLE9BQU87eUJBQ1I7d0JBQ0Q7NEJBQ0UsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7NEJBQ3BDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO3lCQUNyQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTs0QkFDdEIsSUFBSSxPQUFPLEVBQUU7Z0NBQ1gsT0FBTzs2QkFDUjs0QkFDRCxJQUFJLFdBQVcsS0FBSyxLQUFLLElBQUksV0FBVyxLQUFLLEdBQUcsRUFBRTtnQ0FDaEQsT0FBTzs2QkFDUjs0QkFDRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxFQUFFO2dDQUN4RCxPQUFPLEdBQUcsSUFBSSxDQUFDO2dDQUNmLFFBQVEsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dDQUM3QyxPQUFPOzZCQUNSOzRCQUNELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEVBQUU7Z0NBQ3hELE9BQU8sR0FBRyxJQUFJLENBQUM7Z0NBQ2YsUUFBUSxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7NkJBQzlDO3dCQUNILENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO2lCQUNKO2dCQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ2pDO2lCQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDM0IsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM5RSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQztnQkFDL0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNqQztZQUNELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUdNLGVBQWUsQ0FBQyxLQUFpQjtRQUN0QyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRTthQUVoQztZQUNELE1BQU0sYUFBYSxHQUFHLHFCQUFxQixDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEYsZUFBZTtZQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRW5DLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDeEcsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUV4RyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDN0M7WUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxFQUFFO2dCQUNqRixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQzthQUM1QjtZQUVELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3ZDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDeEYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDcEYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdEYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDcEYsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDO2dCQUNqQixJQUFJLFdBQVcsS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFO29CQUN0QyxJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQztvQkFDakMsSUFBSSxHQUFHLElBQUksQ0FBQztpQkFDYjtnQkFDRCwyQkFBMkI7Z0JBQzNCLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLEVBQUU7b0JBQzlCLElBQUksU0FBUyxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUU7d0JBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO3dCQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQzt3QkFDeEIsSUFBSSxHQUFHLElBQUksQ0FBQztxQkFDYjtvQkFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFO3dCQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQzt3QkFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUMxQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7NEJBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUMvRTt3QkFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDO3FCQUNiO29CQUNELElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUU7d0JBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDO3dCQUMvQixJQUFJLEdBQUcsSUFBSSxDQUFDO3FCQUNiO2lCQUNGO3FCQUFNO29CQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO29CQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztpQkFDekI7Z0JBQ0QsSUFBSSxJQUFJLEVBQUU7b0JBQ1IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2lCQUNkO2FBQ0Y7WUFFRCxVQUFVO1lBQ1YsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLFlBQVk7Z0JBQzdDLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUMvRCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDZDtZQUVELFdBQVc7WUFDWCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsTUFBTSxFQUFFO2dCQUN6QyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNwRCxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUNuQztxQkFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7b0JBQzNCLE1BQU0sRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztvQkFDdEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDcEgsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pFLE1BQU0sUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDOUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7b0JBQ3BFLE1BQU0sU0FBUyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO29CQUN4QyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ3BCLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsRUFBRTt3QkFDdEUsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUU7NEJBQ3BFLElBQUksT0FBTyxFQUFFO2dDQUNYLE9BQU87NkJBQ1I7NEJBQ0Q7Z0NBQ0UsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0NBQ3BDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDOzZCQUNyQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtnQ0FDdEIsSUFBSSxPQUFPLEVBQUU7b0NBQ1gsT0FBTztpQ0FDUjtnQ0FDRCxJQUFJLFdBQVcsS0FBSyxLQUFLLElBQUksV0FBVyxLQUFLLEdBQUcsRUFBRTtvQ0FDaEQsT0FBTztpQ0FDUjtnQ0FDRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxFQUFFO29DQUN4RCxPQUFPLEdBQUcsSUFBSSxDQUFDO29DQUNmLFFBQVEsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO29DQUM3QyxPQUFPO2lDQUNSO2dDQUNELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEVBQUU7b0NBQ3hELE9BQU8sR0FBRyxJQUFJLENBQUM7b0NBQ2YsUUFBUSxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7aUNBQzlDOzRCQUNILENBQUMsQ0FBQyxDQUFDO3dCQUNMLENBQUMsQ0FBQyxDQUFDO3FCQUNKO29CQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM5QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO29CQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO29CQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUNqQztxQkFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7b0JBQzNCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDOUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7b0JBQy9FLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQ2pDO2dCQUNELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNkO1NBQ0Y7SUFDSCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsS0FBaUI7UUFDdkMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixjQUFjO1FBQ2QsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLFVBQVU7WUFDM0MsSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUU7WUFDN0MsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZCO0lBQ0gsQ0FBQztJQUVNLGNBQWMsQ0FBQyxLQUFpQjtRQUNyQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN4QixjQUFjO1lBQ2QsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLFVBQVU7Z0JBQzNDLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsWUFBWSxFQUFFO2dCQUM3QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDdkI7U0FDRjtJQUNILENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxLQUFpQjtRQUN2QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDcEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2hCO2FBQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDZjtJQUNILENBQUM7SUFFTSxhQUFhLENBQUMsS0FBb0I7UUFDdkMsUUFBUSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ3JCLEtBQUssR0FBRyxDQUFDLEtBQUs7Z0JBQ1osSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLFlBQVksRUFBRTtvQkFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDM0M7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ1IsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLElBQUksRUFBRTtvQkFDdkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDN0M7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ1IsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLElBQUksRUFBRTtvQkFDdkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDN0M7Z0JBQ0QsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQUVNLFdBQVcsQ0FBQyxLQUFvQjtRQUNyQyxRQUFRLEtBQUssQ0FBQyxPQUFPLEVBQUU7WUFDckIsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDO1lBQ2IsS0FBSyxHQUFHLENBQUMsS0FBSztnQkFDWixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRU0sc0JBQXNCLENBQUMsS0FBdUI7UUFDbkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU0sa0JBQWtCLENBQUMsS0FBVTtRQUNsQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7UUFDdEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDM0MsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztRQUN2RCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztRQUNyRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQ3RDLENBQUM7SUFFTyxlQUFlO1FBQ3JCLElBQUksSUFBSSxDQUFDLDRCQUE0QixFQUFFO1lBQ3JDLElBQUksSUFBSSxDQUFDLDhCQUE4QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQzFELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztnQkFDakYsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO2FBQ3BGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN2RixJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUMxRjtZQUNELElBQUksQ0FBQyw0QkFBNEIsR0FBRyxLQUFLLENBQUM7U0FDM0M7UUFDRCxJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUV0RCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FDckIsSUFBSSxDQUFDLGtCQUFrQixFQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUNqRixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUNsRixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFDakQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxhQUFhLENBQ25ELENBQUM7SUFDSixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUMxQyxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxHQUFHLENBQUMsRUFBRSxFQUFFLHNDQUFzQztnQkFDN0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztnQkFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQzthQUN6QztZQUNELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVPLE1BQU07UUFDWixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDeEU7SUFDSCxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ2xDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNySCxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQzNCO1FBQ0QseURBQXlEO1FBQ3pELGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxDQUFTLEVBQUUsQ0FBUztRQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVPLEtBQUs7UUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN0QixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFZCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ25ELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9DLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9DLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3JELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDOUM7UUFFRCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsTUFBTSxFQUFFO1lBQzlGLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25DLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUMvRixJQUFJLFFBQVEsRUFBRTtZQUNaLElBQUksQ0FBQyxXQUFXLENBQ2QsSUFBSSxDQUFDLFFBQVEsRUFDYixJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNiLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDeEIsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO2FBQzNCLENBQ0YsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxTQUFTO1FBQ2YsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztZQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFdEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNqQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUVuQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQy9DLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEdBQUcsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsV0FBVyxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQzthQUM3SDtZQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDaEQsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxXQUFXLEdBQUcsQ0FBQyxHQUFHLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQzVIO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sU0FBUyxDQUFDLElBQVU7UUFDMUIsSUFBSSxTQUFTLEdBQVksSUFBSSxDQUFDO1FBQzlCLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFO1lBQ2pFLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FDbkI7UUFDRCxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEQsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUNwQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFjLEVBQUUsRUFBRTtZQUN6QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxFQUNGLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQWMsRUFBRSxFQUFFO1lBQ3pDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxFQUNULFFBQVEsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDekMsQ0FBQztJQUNKLENBQUM7SUFFTyxTQUFTLENBQUMsSUFBVTtRQUMxQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztRQUM5RixNQUFNLEtBQUssR0FBRyxRQUFRLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDcEQsTUFBTSxRQUFRLEdBQUcsUUFBUSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBRXpELElBQUksU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMxQixJQUFJLFdBQVcsR0FBRyxlQUFlLENBQUM7UUFFbEMsSUFBSSxLQUFLLEVBQUU7WUFDVCxTQUFTLEdBQUcsY0FBYyxDQUFDO1lBQzNCLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQztTQUNwQzthQUFNLElBQUksUUFBUSxFQUFFO1lBQ25CLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQztZQUM5QixXQUFXLEdBQUcsdUJBQXVCLENBQUM7U0FDdkM7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUN4RDtRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ3ZEO0lBQ0gsQ0FBQztJQUVPLFdBQVcsQ0FBQyxNQUFjO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5QyxNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbkQsSUFBSSxLQUFLLEdBQUcsV0FBVyxDQUFDO1FBQ3hCLElBQUksS0FBSyxFQUFFO1lBQ1QsS0FBSyxHQUFHLGdCQUFnQixDQUFDO1NBQzFCO2FBQU0sSUFBSSxRQUFRLEVBQUU7WUFDbkIsS0FBSyxHQUFHLG1CQUFtQixDQUFDO1NBQzdCO1FBQ0QsWUFBWSxDQUFDLFVBQVUsQ0FDckIsSUFBSSxDQUFDLFNBQVMsRUFDZCxJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDeEIsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUMzRCxLQUFLLENBQ04sQ0FBQztJQUNKLENBQUM7SUFFTyxlQUFlLENBQUMsT0FBaUI7UUFDdkMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0IsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM5RCxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdEIsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUNsQixXQUFXLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQzVCLFlBQVksQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFDOUIsT0FBTyxDQUFDLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxhQUFhLENBQUMsSUFBVTtRQUM5QixNQUFNLEdBQUcsR0FBWSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU8sU0FBUyxDQUFDLElBQVU7UUFDMUIsSUFBSSxJQUFJLFlBQVksZUFBZSxFQUFFO1lBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEI7YUFBTSxJQUFJLElBQUksWUFBWSxVQUFVLEVBQUU7WUFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxJQUFVO1FBQ3RDLElBQUksSUFBSSxZQUFZLGVBQWUsRUFBRTtZQUNuQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoRDthQUFNLElBQUksSUFBSSxZQUFZLFVBQVUsRUFBRTtZQUNyQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoRDtJQUNILENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUFVLEVBQUUsVUFBK0MsRUFBUztRQUMzRixJQUFJLElBQWMsQ0FBQztRQUNuQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDdkI7YUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDeEIsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDdEI7UUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsT0FBTztTQUNSO1FBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEYsc0NBQXNDO1FBQ3RDLDBDQUEwQztRQUMxQyxxQ0FBcUM7UUFDckMsSUFBSTtRQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTyxXQUFXLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUN4QyxRQUFRLEdBQUcsSUFBSSxFQUNmLFNBQVMsR0FBRyxJQUFJLEVBQ2pCO1FBQ0MsSUFBSSxRQUFRLEVBQUU7WUFDWixZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFDakIscUJBQXFCLEVBQ3JCLGNBQWMsQ0FDZixDQUFDO1lBQ0YsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLElBQUksRUFBRTtnQkFDUixJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0RjtZQUNELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1RCxNQUFNLEdBQUcsR0FBRyxFQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFDLENBQUM7WUFDbkUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsSUFBSSxTQUFTLEVBQUU7WUFDYixJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbkQ7SUFDSCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsS0FBaUI7UUFDMUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtZQUN6QywwQkFBMEI7WUFDMUIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDM0M7aUJBQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQzthQUMvQjtpQkFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO2FBQ2hIO1lBQ0QsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7WUFDdkMsMkJBQTJCO1lBQzNCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQzdDO2lCQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDaEM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQzlGO1lBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN0RCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDbEIsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxFQUFDLE1BQU0sRUFBRSxnQkFBZ0IsZ0JBQWdCLEVBQUUsRUFBQyxDQUFDLENBQUM7WUFDbEcsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN0QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzthQUM3QztpQkFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDakY7WUFDRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFpQixFQUFFLElBQVUsRUFBRSxJQUFlO1FBQ2hFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFTyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUs7UUFDOUIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRU8sU0FBUztRQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxpQkFBaUI7UUFDekMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDcEMsSUFDRSxJQUFJLENBQUMscUJBQXFCO1lBQzFCLGdCQUFnQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxxQkFBcUIsRUFDckU7WUFDQSxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2QjthQUFNO1lBQ0wsSUFBSSxDQUFDLHFCQUFxQixHQUFHLGdCQUFnQixDQUFDO1lBQzlDLGlCQUFpQixFQUFFLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDOUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVU7WUFDNUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDeEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFbkUsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRTtZQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUM7U0FDMUU7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDN0QsSUFBSSxXQUFXLEdBQUcsWUFBWSxFQUFFO1lBQzlCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2QjthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7WUFDeEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDNUU7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsT0FBaUI7UUFDeEMsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JEO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDcEQsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRU8sY0FBYyxDQUFDLEtBQUs7UUFDMUIsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkUsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFTyxjQUFjLENBQUMsS0FBaUI7UUFDdEMsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxNQUFlLEVBQUUsTUFBZTtRQUMzRCxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7SUFDMUQsQ0FBQztJQUVPLFlBQVksQ0FBQyxNQUFjO1FBQ2pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDMUMsQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzVELElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLEVBQUU7Z0JBQ2pGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7YUFDbEM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQzlCO1lBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsRUFBRTtnQkFDakYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzthQUNsQztpQkFBTTtnQkFDTCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7YUFDOUI7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUM5QjtRQUNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRU8sb0JBQW9CLENBQUMsQ0FBUyxFQUFFLENBQVM7UUFDL0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM5RCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FDM0QsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FDdkMsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEcsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNwQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDO2FBQ2xEO1NBQ0Y7YUFBTTtZQUNMLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQzthQUNwRDtTQUNGO0lBQ0gsQ0FBQztJQUVPLFdBQVcsQ0FBQyxHQUE2QixFQUFFLE9BQWlCO1FBQ2xFLE1BQU0sSUFBSSxHQUFHLE9BQU87YUFDakIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFFLGdDQUFnQzthQUN2RCxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQzthQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQzthQUNyRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDYixJQUFJLENBQUMsY0FBYyxDQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ3JCLElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQztJQUVPLGtCQUFrQixDQUFDLENBQVMsRUFBRSxDQUFTO1FBQzdDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7WUFDakYsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQ25ELElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQ2pCLG1CQUFtQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUM1QyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FDNUMsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQixDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsT0FBZSxFQUFFLE9BQWUsRUFBRSxFQUFVLEVBQUUsRUFBVTtRQUMxRyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNwRSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELElBQUksTUFBTSxHQUFHLEdBQUcsRUFBRTtZQUNoQix5Q0FBeUM7WUFDekMsT0FBTztTQUNSO1FBQ0QsTUFBTSxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBQyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FDM0MsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsK0JBQStCLENBQUMsRUFDbkYsS0FBSyxFQUNMLEVBQUUsR0FBRyxDQUFDLEVBQ04sRUFBRSxHQUFHLENBQUMsQ0FDUCxDQUFDO1FBQ0YsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsY0FBYyxDQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFDMUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FDeEcsQ0FBQztJQUNKLENBQUM7SUFFTyxTQUFTLENBQUMsSUFBcUI7UUFDckMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxJQUFJLGdCQUFnQixDQUFDO1FBQzNFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNyRSxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQ2hDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQ2hDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQzlCLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQzdCLEtBQUssQ0FDTixDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU07SUFDRSxXQUFXLENBQUMsTUFBa0I7UUFDcEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxJQUFJLGdCQUFnQixDQUFDO1FBQzdFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQzNFLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsRUFDbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsRUFDbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsRUFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsRUFDaEMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFDN0IsS0FBSyxDQUNOLENBQUM7SUFDSixDQUFDO0lBRU8sNkJBQTZCLENBQUMsSUFBYztRQUNsRCxPQUFPLElBQUk7WUFDVCxJQUFJLENBQUMsZUFBZTtZQUNwQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUk7WUFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hDLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQVUsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxjQUFjO1FBQzlHLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFO1lBQ2hCLHlDQUF5QztZQUN6QyxPQUFPO1NBQ1I7UUFDRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsd0JBQXdCLENBQ3hDLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBQyxFQUNOLEtBQUssQ0FBQyxnQkFBZ0IsQ0FDcEIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsK0JBQStCLENBQUMsRUFDbkYsS0FBSyxFQUNMLEVBQUUsR0FBRyxDQUFDLEVBQ04sRUFBRSxHQUFHLENBQUMsQ0FDUCxFQUNELGNBQWMsQ0FDZixDQUFDO1FBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNyQixNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FDdkksQ0FBQztJQUNKLENBQUM7SUFFTyxTQUFTLENBQUMsSUFBYyxFQUFFLFNBQWlCLEVBQUUsV0FBb0I7UUFDdkUsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUNwQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ25DLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLEVBQ0YsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNuQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxFQUNGLElBQUksRUFDSixTQUFTLEVBQ1QsSUFBSSxFQUNKLFdBQVcsSUFBSSxTQUFTLEVBQ3hCLFNBQVMsQ0FDVixDQUFDO0lBQ0osQ0FBQztJQUVPLGNBQWMsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLElBQVk7UUFDdkQsSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFO1lBQ2YsdUNBQXVDO1lBQ3ZDLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLFVBQVUsU0FBUyxRQUFRLENBQUM7UUFDakQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztRQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUU1QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksRUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxjQUFjLENBQ3BCLENBQVMsRUFDVCxDQUFTLEVBQ1QsSUFBWSxFQUNaLGVBQTZELEVBQUU7UUFFL0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsVUFBVSxTQUFTLFFBQVEsQ0FBQztRQUNqRCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQztRQUM5RCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7UUFDdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLGtCQUFrQixDQUFDLElBQWMsRUFBRSxRQUFnQixTQUFTO1FBQ2xFLE1BQU0sZ0JBQWdCLEdBQ2xCLElBQUksQ0FBQyxlQUFlLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFFdkQsTUFBTSwyQkFBMkIsR0FDN0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHFCQUFxQixHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVoRixNQUFNLEtBQUssR0FDUCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFFL0YsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUN2QyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFDL0UsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQzNFLEtBQUssRUFDTCwyQkFBMkIsQ0FDNUIsQ0FBQztRQUVGLElBQUksQ0FBQywrQkFBK0IsQ0FDbEMsU0FBUyxDQUFDLEtBQUssRUFDZixTQUFTLENBQUMsR0FBRyxFQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUscUJBQXFCO1FBQy9ELEtBQUssQ0FDTixDQUFDO0lBQ0osQ0FBQztJQUVPLG1DQUFtQyxDQUFDLElBQWMsRUFBRSxRQUFnQixTQUFTO1FBQ25GLE1BQU0sZ0JBQWdCLEdBQ2xCLElBQUksQ0FBQyxlQUFlLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFFdkQsTUFBTSwyQkFBMkIsR0FDN0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHFCQUFxQixHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVoRixNQUFNLEtBQUssR0FDUCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFFL0YsTUFBTSxVQUFVLEdBQ1osSUFBSSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDdkUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUVyRSxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRTtZQUNsQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLElBQUksQ0FBQyxFQUFFO2dCQUMzQixTQUFTO2FBQ1Y7WUFFRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQ3ZDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDM0YsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN2RixLQUFLLEVBQ0wsMkJBQTJCLENBQzVCLENBQUM7WUFFRixJQUFJLENBQUMsK0JBQStCLENBQ2xDLFNBQVMsQ0FBQyxLQUFLLEVBQ2YsU0FBUyxDQUFDLEdBQUcsRUFDYixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLEVBQ3BDLEtBQUssQ0FDTixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRU8sK0JBQStCLENBQUMsS0FBYyxFQUFFLEdBQVksRUFBRSxTQUFpQixFQUFFLEtBQWE7UUFDcEcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUNqQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQ2hCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFDWixrQkFBa0IsRUFBRSxLQUFLLENBQzFCLENBQUM7UUFDRixJQUFJLENBQUMsY0FBYyxDQUNqQixDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFDckIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQ3JCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQzdDLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUNuQixDQUFDO0lBQ0osQ0FBQztJQUVPLG9CQUFvQixDQUFDLENBQVMsRUFBRSxDQUFTO1FBQy9DLElBQUksV0FBVyxDQUFDO1FBQ2hCLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQztRQUMzQixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9DLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUM3QyxJQUFJLENBQUMsSUFBSSxFQUFFO29CQUNULE9BQU87aUJBQ1I7Z0JBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksUUFBUSxHQUFHLFdBQVcsRUFBRTtvQkFDMUIsV0FBVyxHQUFHLElBQUksQ0FBQztvQkFDbkIsV0FBVyxHQUFHLFFBQVEsQ0FBQztpQkFDeEI7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVPLGdDQUFnQyxDQUFDLEtBQWlCO1FBR3hELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2pCLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFFRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsTUFBTSxrQkFBa0IsR0FBRyxLQUFLO2FBQzdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFFLElBQUksRUFBRSxJQUFJLElBQUssSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7YUFDcEUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFakQ7WUFDRSxNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUVsRCxNQUFNLFVBQVUsR0FBRyxjQUFjLEtBQUssY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRO2dCQUNoRSxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN2RSxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdEUsTUFBTSxRQUFRLEdBQUcsY0FBYyxLQUFLLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUTtnQkFDOUQsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDN0QsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBRTVELE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ1YsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJO2dCQUNwQixVQUFVLEVBQUUsVUFBVTtnQkFDdEIsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLFFBQVEsRUFBRSxLQUFLLENBQUMsV0FBVzthQUM1QixDQUFDLENBQUM7U0FDSjtRQUVELEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFO1lBQ2xFLE1BQU0sSUFBSSxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSxHQUFHLGtCQUFrQixDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUUzQyxNQUFNLGtCQUFrQixHQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFNUUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUTtnQkFDN0UsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdkQsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBRTlELElBQUksUUFBUSxDQUFDO1lBQ2IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDM0QsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVE7b0JBQ3JFLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQzNELENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUMzRDtpQkFBTTtnQkFDTCxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUztvQkFDdEUsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDM0QsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQzNEO1lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDVixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDcEIsVUFBVSxFQUFFLFVBQVU7Z0JBQ3RCLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixRQUFRLEVBQUUsa0JBQWtCO2FBQzdCLENBQUMsQ0FBQztTQUNKO1FBRUQ7WUFDRSxNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDL0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7WUFFaEQsTUFBTSxVQUFVLEdBQUcsYUFBYSxLQUFLLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUTtnQkFDOUQsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdkQsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBRTlELE1BQU0sUUFBUSxHQUFHLGFBQWEsS0FBSyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVE7Z0JBQzVELENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV4RSxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNWLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDbkIsVUFBVSxFQUFFLFVBQVU7Z0JBQ3RCLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVM7YUFDekIsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8seUJBQXlCLENBQUMsSUFBYztRQUM5QyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO1lBQ3hDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFO2dCQUN4RyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRO2dCQUMzQixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7U0FDaEM7UUFFRCxNQUFNLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDM0UsTUFBTSxrQkFBa0IsR0FBRyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRTNFLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN2RSxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFdkUsTUFBTSx1QkFBdUIsR0FDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQUEsa0JBQWtCLEVBQUksQ0FBQyxDQUFBLENBQUMsR0FBRyxDQUFDLFNBQUEsa0JBQWtCLEVBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFNUYsTUFBTSxxQkFBcUIsR0FDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQUEsZ0JBQWdCLEVBQUksQ0FBQyxDQUFBLENBQUMsR0FBRyxDQUFDLFNBQUEsZ0JBQWdCLEVBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFeEYsT0FBTztZQUNMLFdBQVcsRUFDVCxXQUFXLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRO2dCQUN2QyxDQUFDLENBQUMsdUJBQXVCO2dCQUN6QixDQUFDLENBQUMscUJBQXFCO1lBRTNCLFNBQVMsRUFDUCxXQUFXLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRO2dCQUN2QyxDQUFDLENBQUMscUJBQXFCO2dCQUN2QixDQUFDLENBQUMsdUJBQXVCO1NBQzlCLENBQUM7SUFDSixDQUFDO0lBRU8sb0JBQW9CLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDVixPQUFPLENBQUMsQ0FBQyxHQUFHLFdBQVcsR0FBRyxHQUFHLENBQUMsR0FBRyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsQ0FBQztTQUNsRTthQUFNO1lBQ0wsT0FBTyxDQUFDLENBQUMsR0FBRyxXQUFXLEdBQUcsR0FBRyxDQUFDLEdBQUcsV0FBVyxHQUFHLFdBQVcsR0FBRyxHQUFHLENBQUM7U0FDbEU7SUFDSCxDQUFDO0lBRUQsb0RBQW9EO0lBQzVDLFNBQVMsQ0FBQyxDQUFTO1FBQ3pCLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUNwRSxDQUFDO0lBRUQsb0RBQW9EO0lBQzVDLFNBQVMsQ0FBQyxDQUFTO1FBQ3pCLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUNwRSxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxHQUFHLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDdkUsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM3QyxDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1lBQ3pDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUMxQyxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25FLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM1RCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLENBQUM7U0FDbkU7SUFDSCxDQUFDO0lBRU8sWUFBWTtRQUNsQixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkUsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzVELE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3RFLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3RFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRU8sb0JBQW9CLENBQUMsTUFBYztRQUN6QyxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUM7UUFDckMsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDO1FBQ3JDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDaEMsQ0FBQyxFQUNELEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQ2hELEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQy9DLENBQUM7UUFFRixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQy9CLFlBQVksRUFDWixJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxDQUMxQyxHQUFHLHVCQUF1QixDQUFDO1FBRTVCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRU8sNEJBQTRCLENBQUMsS0FBYSxFQUFFLGFBQXNCO1FBQ3hFLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzVHLE9BQU8sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsYUFBYSxJQUFJLFFBQVEsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSxTQUFTLEdBQVcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQzlDLE1BQU0sR0FBRyxHQUFRLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0QsTUFBTSxNQUFNLEdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNsRSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQywwQkFBMEIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDOzttSEE1aURVLHFCQUFxQjt1R0FBckIscUJBQXFCLGtXQUNRLFVBQVUsMkNDeEVwRCxzcERBb0NBOzRGRG1DYSxxQkFBcUI7a0JBTGpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFdBQVcsRUFBRSwrQkFBK0I7b0JBQzVDLFNBQVMsRUFBRSxDQUFDLCtCQUErQixDQUFDO2lCQUM3QztvUUFHUSxhQUFhO3NCQURuQixTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUcxRCxrQkFBa0I7c0JBRHhCLE1BQU07Z0JBb0dBLGdCQUFnQjtzQkFEdEIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNckMsY0FBYztzQkFEcEIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNbkMsVUFBVTtzQkFEaEIsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7U3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtTZWxlY3RlZFdhbGxFdmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9pbnRlcmZhY2Uvc2VsZWN0ZWQtd2FsbC1ldmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0Zsb29ycGxhbm5lck1vZGV9IGZyb20gJy4vZmxvb3JwbGFubmVyLW1vZGUnO1xyXG5pbXBvcnQge1xyXG4gIGFuZ2xlTGFiZWxEaXN0YW5jZVNjYWxlVHJlc2hvbGQsXHJcbiAgY2xpY2tNaXNzVG9sZXJhbmNlLFxyXG4gIGNtUGVyRm9vdCxcclxuICBjb3JuZXJDb2xvcixcclxuICBjb3JuZXJDb2xvckhvdmVyLFxyXG4gIGNvcm5lckNvbG9yU2VsZWN0ZWQsXHJcbiAgZGVmYXVsdFdhbGxXaWR0aCxcclxuICBkZWZhdWx0V2FsbFdpZHRoSG92ZXIsXHJcbiAgZGltZW5zaW9uTGluZURpc3RhbmNlLFxyXG4gIGRpbWVuc2lvbkxpbmVXaWR0aCxcclxuICBkb29yQ29sb3IsXHJcbiAgZG9vckNvbG9ySG92ZXIsXHJcbiAgZG91YmxlQ2xpY2tEdXJhdGlvbk1zLFxyXG4gIGRyYXdNb2RlQ3Vyc29ySGVpZ2h0LFxyXG4gIGRyYXdNb2RlQ3Vyc29ySW1hZ2VVcmwsXHJcbiAgZWRnZVdpZHRoLFxyXG4gIGdyaWRDb2xvcixcclxuICBncmlkU3BhY2luZyxcclxuICBncmlkV2lkdGgsXHJcbiAgbGFiZWxTaXplLFxyXG4gIG1heENvcm5lclJhZGl1cyxcclxuICBtaW5Db3JuZXJSYWRpdXMsXHJcbiAgbWluTW91c2VNb3ZlRGlzdGFuY2UsXHJcbiAgcGl4ZWxzUGVyRm9vdCxcclxuICByb29tQ29sb3IsXHJcbiAgc2VsZWN0ZWRSb29tQ29sb3IsXHJcbiAgc25hcEluZGljYXRvckNvbG9yLFxyXG4gIHNuYXBJbmRpY2F0b3JSYWRpdXMsXHJcbiAgc25hcFRvbGVyYW5jZSxcclxuICB3YWxsQ29sb3IsXHJcbiAgd2FsbENvbG9ySG92ZXIsXHJcbiAgd2FsbENvbG9yU2VsZWN0ZWQsXHJcbiAgd2FsbFN0cm9rZUNvbG9yLFxyXG4gIHdhbGxTdHJva2VDb2xvckhvdmVyLFxyXG4gIHdhbGxTdHJva2VDb2xvclNlbGVjdGVkLFxyXG4gIHdhbGxUaGlja25lc3NNdWx0aXBsaWVyLFxyXG4gIHdpbmRvd0NvbG9yLFxyXG4gIHdpbmRvd0NvbG9ySG92ZXJcclxufSBmcm9tICcuL2NvbnN0L2RlZmF1bHRzJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uS2V5fSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudW0vY29uZmlndXJhdGlvbi1rZXkuZW51bSc7XHJcbmltcG9ydCB7RG91YmxlU2lkZSwgVmVjdG9yMiwgVmVjdG9yM30gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge1NuYXBJbmRpY2F0b3JNb2RlfSBmcm9tICcuL3NuYXAtaW5kaWNhdG9yLW1vZGUnO1xyXG5pbXBvcnQge0Zsb29ycGxhblNlcnZpY2V9IGZyb20gJy4vc2VydmljZS9mbG9vcnBsYW4uc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZUJ1c1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS9tZXNzYWdlLWJ1cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7RGltZW5zaW9uaW5nU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2RpbWVuc2lvbmluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHtWaWV3TW9kZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS92aWV3LW1vZGUuc2VydmljZSc7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbkRhdGF9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvaW50ZXJmYWNlL2NvbmZpZ3VyYXRpb24tZGF0YS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VUeXBlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge0ZpbGVVdGlsc30gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91dGlscy9maWxlLnV0aWxzJztcclxuaW1wb3J0IHtSZWxhdGl2ZVBvc2l0aW9uVXRpbHN9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvdXRpbHMvcmVsYXRpdmUtcG9zaXRpb24udXRpbHMnO1xyXG5pbXBvcnQge0tleX0gZnJvbSAnLi4vLi4vY29uc3Qva2V5JztcclxuaW1wb3J0IHtVdGlsc30gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2NvcmUvdXRpbHMnO1xyXG5pbXBvcnQge0NvbnRleHRVdGlsc30gZnJvbSAnLi91dGlscy9jb250ZXh0LnV0aWxzJztcclxuaW1wb3J0IHtDb3JuZXIsIEhhbGZFZGdlLCBJbldhbGxJdGVtLCBSb29tLCBXYWxsLCBXYWxsSXRlbX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2l0ZW1zL3dhbGwtb2JqZWN0cyc7XHJcbmltcG9ydCB7SXRlbX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2l0ZW0nO1xyXG5pbXBvcnQge0luV2FsbEZsb29ySXRlbX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2luLXdhbGwtZmxvb3ItaXRlbSc7XHJcbmltcG9ydCB7QW5nbGVzfSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvY29yZS9hbmdsZXMnO1xyXG5pbXBvcnQge1Jvb21TZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2Uvcm9vbS5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Zsb29yLXBsYW5uZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mbG9vcnBsYW5uZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Zsb29ycGxhbm5lci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGbG9vcnBsYW5uZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoJ2Zsb29ycGxhbm5lckNhbnZhcycsIHtyZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWV9KVxyXG4gIHB1YmxpYyBjYW52YXNFbGVtZW50OiBFbGVtZW50UmVmO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBzZWxlY3RlZFdhbGxDaGFuZ2U6IFN1YmplY3Q8U2VsZWN0ZWRXYWxsRXZlbnQ+ID0gbmV3IFN1YmplY3Q8U2VsZWN0ZWRXYWxsRXZlbnQ+KCk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdTY2FsZU1pbiA9IDUwO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdTY2FsZU1heCA9IDMwMDtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9jdXJzb3JzID0ge1xyXG4gICAgW0Zsb29ycGxhbm5lck1vZGUuRHJhd106IGB1cmwoJHtkcmF3TW9kZUN1cnNvckltYWdlVXJsfSkgMCAke2RyYXdNb2RlQ3Vyc29ySGVpZ2h0fSwgYXV0b2AsXHJcbiAgICBbRmxvb3JwbGFubmVyTW9kZS5EcmF3aW5nXTogYHVybCgke2RyYXdNb2RlQ3Vyc29ySW1hZ2VVcmx9KSAwICR7ZHJhd01vZGVDdXJzb3JIZWlnaHR9LCBhdXRvYCxcclxuICAgIFtGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmVdOiAnZ3JhYicsXHJcbiAgICBbRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZpbmddOiAnZ3JhYmJpbmcnLFxyXG4gICAgW0Zsb29ycGxhbm5lck1vZGUuTW92ZV06ICdncmFiJyxcclxuICAgIFtGbG9vcnBsYW5uZXJNb2RlLk1vdmluZ106ICdncmFiYmluZydcclxuICB9O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbmZpZ1RvU3luYyA9IHtcclxuICAgIFtDb25maWd1cmF0aW9uS2V5LlNob3dEZXRhaWxlZFdhbGxNZWFzdXJlbWVudHNdOiAnZGV0YWlsZWRXYWxsTWVhc3VyZW1lbnRzTW9kZScsXHJcbiAgICBbQ29uZmlndXJhdGlvbktleS5TaG93V2FsbEl0ZW1NZWFzdXJlbWVudHNdOiAnc2hvd1dhbGxJdGVtTWVhc3VyZW1lbnRzJyxcclxuICAgIFtDb25maWd1cmF0aW9uS2V5LkNvcm5lclNuYXBwaW5nXTogJ3NuYXBDb3JuZXJzJyxcclxuICB9O1xyXG5cclxuICBwdWJsaWMgc2hvd1N0YXJ0aW5nTWVzc2FnZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdG91Y2hNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX2NhbnZhczogYW55O1xyXG4gIHByaXZhdGUgX2NvbnRleHQ6IGFueTtcclxuICBwcml2YXRlIF9vcmlnaW5YOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX29yaWdpblk6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfdmlld1NjYWxlOiBudW1iZXIgPSAxMDA7XHJcbiAgcHJpdmF0ZSBfYWN0aXZlRmxvb3IgPSBudWxsO1xyXG4gIHByaXZhdGUgX2FjdGl2ZUl0ZW07XHJcbiAgcHJpdmF0ZSBfYWN0aXZlV2FsbDtcclxuICBwcml2YXRlIF9zZWxlY3RlZFdhbGw7XHJcbiAgcHJpdmF0ZSBfYWN0aXZlQ29ybmVyO1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkQ29ybmVyO1xyXG4gIHByaXZhdGUgX29mZnNldFg6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfb2Zmc2V0WTogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9tb3VzZVg6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfbW91c2VZOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX3Jhd01vdXNlOiBWZWN0b3IyID0gbmV3IFZlY3RvcjIoMCwgMCk7XHJcbiAgcHJpdmF0ZSBfbW91c2VEb3duOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfbW91c2VEb3duUG9zaXRpb246IFZlY3RvcjIgPSBuZXcgVmVjdG9yMigpO1xyXG4gIHByaXZhdGUgX3N0YXJ0RHJhZ01vdXNlOiBWZWN0b3IyID0gbmV3IFZlY3RvcjIoKTtcclxuICBwcml2YXRlIF9zdGFydERyYWdDb3JuZXI6IFZlY3RvcjIgPSBuZXcgVmVjdG9yMigpO1xyXG4gIHByaXZhdGUgX2xhc3RNb3VzZVVwVGltZXN0YW1wOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfbW92aW5nU3RhdGVDaGFuZ2VzOiB7IFtpbmRleDogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XHJcbiAgcHJpdmF0ZSBfbGFzdFg6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfbGFzdFk6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfdGFyZ2V0WDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF90YXJnZXRZOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX3NuYXBJbmRpY2F0b3JNb2RlOiBTbmFwSW5kaWNhdG9yTW9kZTtcclxuICBwcml2YXRlIF9zbmFwUG9pbnQgPSBudWxsO1xyXG4gIHByaXZhdGUgX2xhc3ROb2RlID0gbnVsbDtcclxuICBwcml2YXRlIF93YWxsTGVuZ3RoOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIF9tb2RlOiBGbG9vcnBsYW5uZXJNb2RlID0gRmxvb3JwbGFubmVyTW9kZS5EcmF3O1xyXG4gIHByaXZhdGUgX2NtUGVyUGl4ZWw6IG51bWJlcjtcclxuICBwcml2YXRlIF9waXhlbHNQZXJDbTogbnVtYmVyO1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkRmxvb3IgPSBudWxsO1xyXG4gIHByaXZhdGUgX21vZGVCZWZvcmVSaWdodE1vdXNlTW92ZTtcclxuXHJcbiAgcHJpdmF0ZSBfZGlhZ3JhbUJhY2tncm91bmQ6IEhUTUxJbWFnZUVsZW1lbnQ7XHJcbiAgcHJpdmF0ZSBfZGlhZ3JhbUJhY2tncm91bmRTY2FsZTogbnVtYmVyID0gMTtcclxuICBwcml2YXRlIF9kaWFncmFtQmFja2dyb3VuZEN1cnJlbnRTY2FsZTogbnVtYmVyID0gMTAwO1xyXG4gIHByaXZhdGUgX2RpYWdyYW1CYWNrZ3JvdW5kSGVpZ2h0OiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfZGlhZ3JhbUJhY2tncm91bmRXaWR0aDogbnVtYmVyO1xyXG4gIHByaXZhdGUgX2RpYWdyYW1CYWNrZ3JvdW5kQWN0aXZlWm9vbTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9kaWFncmFtU2NhbGU6IG51bWJlcjtcclxuICBwcml2YXRlIF9jYW1lcmFab29tOiBudW1iZXI7XHJcblxyXG4gIHByaXZhdGUgX2xhc3RUb3VjaFBvaW50OiBWZWN0b3IyO1xyXG4gIHByaXZhdGUgX3JlYWR5VG9EcmF3OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHJlYWRvbmx5IGZsb29ycGxhbm5lck1vZGU6IHR5cGVvZiBGbG9vcnBsYW5uZXJNb2RlID0gRmxvb3JwbGFubmVyTW9kZTtcclxuICBwdWJsaWMgcmVhZG9ubHkgaW5pdGlhbFZpZXdTY2FsZSA9IDEwMDtcclxuICBwdWJsaWMgcmVhZG9ubHkgc2NhbGluZ0ZhY3RvciA9IDEuMjtcclxuXHJcbiAgcHVibGljIGRldGFpbGVkV2FsbE1lYXN1cmVtZW50c01vZGU6IGJvb2xlYW47XHJcbiAgcHVibGljIHNob3dXYWxsSXRlbU1lYXN1cmVtZW50czogYm9vbGVhbjtcclxuICBwdWJsaWMgc25hcENvcm5lcnM6IGJvb2xlYW47XHJcbiAgcHVibGljIHNlbGVjdGVkTW9kZTogRmxvb3JwbGFubmVyTW9kZSA9IEZsb29ycGxhbm5lck1vZGUuRHJhdztcclxuXHJcbiAgcHVibGljIHNldCBtb2RlKHZhbHVlOiBGbG9vcnBsYW5uZXJNb2RlKSB7XHJcbiAgICB0aGlzLl9tb2RlID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5fY2FudmFzKSB7XHJcbiAgICAgIHRoaXMuX2NhbnZhcy5zdHlsZS5jdXJzb3IgPSB0aGlzLl9jdXJzb3JzW3RoaXMubW9kZV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG1vZGUoKTogRmxvb3JwbGFubmVyTW9kZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FudFpvb21JbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl92aWV3U2NhbGUgPiB0aGlzLl92aWV3U2NhbGVNYXg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNhbnRab29tT3V0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdTY2FsZSA8IHRoaXMuX3ZpZXdTY2FsZU1pbjtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyBoYW5kbGVEb2NLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZUtleURvd24oZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5dXAnLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyBoYW5kbGVEb2NLZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5oYW5kbGVLZXlVcChldmVudCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcclxuICBwdWJsaWMgcmVzaXplR3JpZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2hhbmRsZVdpbmRvd1Jlc2l6ZSgpO1xyXG4gICAgdGhpcy5yZXNldCgpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9mbG9vcnBsYW5TZXJ2aWNlOiBGbG9vcnBsYW5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZUJ1c1NlcnZpY2U6IE1lc3NhZ2VCdXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlndXJhdGlvblNlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZGltZW5zaW9uU2VydmljZTogRGltZW5zaW9uaW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgX3ZpZXdNb2RlU2VydmljZTogVmlld01vZGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcm9vbVNlcnZpY2U6IFJvb21TZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgdGhpcy5fdXBkYXRlQ21QZXJQaXhlbCgpO1xyXG5cclxuICAgIE9iamVjdC5rZXlzKHRoaXMuX2NvbmZpZ1RvU3luYykuZm9yRWFjaCgoa2V5OiBDb25maWd1cmF0aW9uS2V5KSA9PiB7XHJcbiAgICAgIGNvbnN0IHByb3BOYW1lID0gdGhpcy5fY29uZmlnVG9TeW5jW2tleV07XHJcbiAgICAgIHRoaXNbcHJvcE5hbWVdID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoa2V5KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5vbkNoYW5nZS5zdWJzY3JpYmUoKGNoYW5nZWQ6IENvbmZpZ3VyYXRpb25EYXRhKSA9PiB7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5fY29uZmlnVG9TeW5jKS5mb3JFYWNoKChrZXk6IENvbmZpZ3VyYXRpb25LZXkpID0+IHtcclxuICAgICAgICAgIGlmIChrZXkgaW4gY2hhbmdlZCkge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHRoaXMuX2NvbmZpZ1RvU3luY1trZXldO1xyXG4gICAgICAgICAgICB0aGlzW3Byb3BOYW1lXSA9IGNoYW5nZWRba2V5XTtcclxuICAgICAgICAgICAgdGhpcy5fZHJhdygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5yb29tc1VwZGF0ZWQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2RyYXcoKSksXHJcbiAgICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UucmVkcmF3LnN1YnNjcmliZShyID0+IHRoaXMuX2RyYXcoKSksXHJcbiAgICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2Uucm9vbUxvYWRlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZXNldCgpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1c1NlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLldhbGxMZW5ndGhJbnB1dFZhbHVlQ2hhbmdlZCwgKGxlbmd0aCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3dhbGxMZW5ndGggPSBsZW5ndGggLyAxMDA7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlV2FsbFBvc2l0aW9uKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuVGFrZVNjcmVlbnNob3QsIGFzeW5jICgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fdmlld01vZGVTZXJ2aWNlLmlzMmRWaWV3QWN0aXZlKCkpIHtcclxuICAgICAgICAgIGNvbnN0IGRhdGFVcmwgPSB0aGlzLl9jYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJyk7XHJcbiAgICAgICAgICBGaWxlVXRpbHMuRG93bmxvYWRGcm9tRGF0YVVyaShkYXRhVXJsLCBgTXlSb29tcGxhbiR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpfS5qcGVnYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1c1NlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlN0YXJ0V2l0aEVtcHR5Um9vbSwgKCkgPT4gdGhpcy5zaG93U3RhcnRNZXNzYWdlKCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuTG9hZFNjYWxlZERpYWdyYW0sIChpbnB1dCkgPT4gdGhpcy5zZXREaWFncmFtU2V0dGluZ3MoaW5wdXQpKVxyXG4gICAgKTtcclxuICAgIHRoaXMudG91Y2hNb2RlID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5FbmFibGVUb3VjaCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XHJcbiAgICB0aGlzLmNhbnZhc0VsZW1lbnQgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jYW52YXNFbGVtZW50ICYmIHRoaXMuY2FudmFzRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuX2NhbnZhcyA9IHRoaXMuY2FudmFzRWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICB0aGlzLl9jb250ZXh0ID0gdGhpcy5jYW52YXNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgdGhpcy5fb2Zmc2V0WCA9IHRoaXMuX2NhbnZhcy5jbGllbnRMZWZ0O1xyXG4gICAgICB0aGlzLl9vZmZzZXRZID0gdGhpcy5fY2FudmFzLmNsaWVudFRvcDtcclxuICAgICAgdGhpcy5fcmVhZHlUb0RyYXcgPSB0cnVlO1xyXG4gICAgICB0aGlzLl9oYW5kbGVXaW5kb3dSZXNpemUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93U3RhcnRNZXNzYWdlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kKSB7XHJcbiAgICAgIHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kLnNyYyA9ICcnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5yZXNldCgpO1xyXG4gICAgdGhpcy5fZHJhdygpO1xyXG4gICAgdGhpcy5zaG93U3RhcnRpbmdNZXNzYWdlcyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0TW9kZShtb2RlOiBGbG9vcnBsYW5uZXJNb2RlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jbGVhbldhbGxMZW5ndGgoKTtcclxuICAgIHRoaXMuX2xhc3ROb2RlID0gbnVsbDtcclxuICAgIHRoaXMubW9kZSA9IG1vZGU7XHJcbiAgICB0aGlzLl91cGRhdGVUYXJnZXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNpemVWaWV3KCkge1xyXG4gICAgdGhpcy5faGFuZGxlV2luZG93UmVzaXplKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl92aWV3U2NhbGUgPSB0aGlzLl9nZXRJbml0aWFsVmlld1NjYWxlKCk7XHJcbiAgICB0aGlzLnJlc2l6ZVZpZXcoKTtcclxuICAgIHRoaXMuc2V0RGVmYXVsdE1vZGUoKTtcclxuICAgIHRoaXMuX3Jlc2V0T3JpZ2luKCk7XHJcbiAgICB0aGlzLl9kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgem9vbUluKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2FudFpvb21Jbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9jbGVhcigpO1xyXG4gICAgdGhpcy5fdmlld1NjYWxlICo9IHRoaXMuc2NhbGluZ0ZhY3RvcjtcclxuICAgIHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kU2NhbGUgPSB0aGlzLl9kaWFncmFtQmFja2dyb3VuZFNjYWxlICogdGhpcy5zY2FsaW5nRmFjdG9yO1xyXG4gICAgdGhpcy5fZGlhZ3JhbUJhY2tncm91bmRBY3RpdmVab29tID0gdHJ1ZTtcclxuICAgIHRoaXMuX3NjYWxlKHRoaXMuc2NhbGluZ0ZhY3RvciwgdGhpcy5zY2FsaW5nRmFjdG9yKTtcclxuICAgIHRoaXMuX3NjYWxlT3JpZ2luKCk7XHJcbiAgICB0aGlzLnJlc2l6ZVZpZXcoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB6b29tT3V0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2FudFpvb21PdXQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY2xlYXIoKTtcclxuICAgIHRoaXMuX3ZpZXdTY2FsZSAvPSB0aGlzLnNjYWxpbmdGYWN0b3I7XHJcbiAgICB0aGlzLl9kaWFncmFtQmFja2dyb3VuZFNjYWxlID0gdGhpcy5fZGlhZ3JhbUJhY2tncm91bmRTY2FsZSAqICgxIC8gdGhpcy5zY2FsaW5nRmFjdG9yKTtcclxuICAgIHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kQWN0aXZlWm9vbSA9IHRydWU7XHJcbiAgICB0aGlzLl9zY2FsZSgxIC8gdGhpcy5zY2FsaW5nRmFjdG9yLCAxIC8gdGhpcy5zY2FsaW5nRmFjdG9yKTtcclxuICAgIHRoaXMuX3NjYWxlT3JpZ2luKCk7XHJcbiAgICB0aGlzLnJlc2l6ZVZpZXcoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB6b29tUmVzZXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jbGVhcigpO1xyXG4gICAgdGhpcy5fc2NhbGUoMSAvIHRoaXMuX3ZpZXdTY2FsZSwgMSAvIHRoaXMuX3ZpZXdTY2FsZSk7XHJcbiAgICB0aGlzLnJlc2V0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0Q29ybmVyKGNvcm5lcikge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRDb3JuZXIgPSBjb3JuZXI7XHJcbiAgICB0aGlzLl9kcmF3KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0U2VsZWN0ZWRNb2RlKG1vZGU6IEZsb29ycGxhbm5lck1vZGUpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRNb2RlID0gbW9kZTtcclxuICAgIHRoaXMuc2V0TW9kZShtb2RlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXREZWZhdWx0TW9kZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3NuYXBQb2ludCA9IG51bGw7XHJcbiAgICB0aGlzLnNldE1vZGUodGhpcy5zZWxlY3RlZE1vZGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUNvbnRleHRNZW51KGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLl9sYXN0WCA9IHRoaXMuX3Jhd01vdXNlLng7XHJcbiAgICB0aGlzLl9sYXN0WSA9IHRoaXMuX3Jhd01vdXNlLnk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLl9sYXN0WCA9IHRoaXMuX3Jhd01vdXNlLng7XHJcbiAgICB0aGlzLl9sYXN0WSA9IHRoaXMuX3Jhd01vdXNlLnk7XHJcbiAgICBpZiAoZXZlbnQuYnV0dG9uID09PSAyKSB7IC8vIHJpZ2h0IG1vdXNlIGJ1dHRvbiBtb3ZlcyB0aGUgY2FtZXJhIGJ5IGRlZmF1bHRcclxuICAgICAgdGhpcy5fbW9kZUJlZm9yZVJpZ2h0TW91c2VNb3ZlID0gdGhpcy5tb2RlO1xyXG4gICAgICB0aGlzLnNldE1vZGUoRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZpbmcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbW91c2VEb3duID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRNb2RlKEZsb29ycGxhbm5lck1vZGUuQ2FtZXJhTW92aW5nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fbW91c2VEb3duUG9zaXRpb24uY29weShSZWxhdGl2ZVBvc2l0aW9uVXRpbHMuR2V0Q2xpZW50TW91c2VQb3NpdGlvbihldmVudCkpO1xyXG4gICAgY29uc3QgaGFzQWN0aXZlID0gdGhpcy5fYWN0aXZlV2FsbCB8fCB0aGlzLl9hY3RpdmVDb3JuZXIgfHwgdGhpcy5fYWN0aXZlSXRlbTtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuTW92ZSAmJiBoYXNBY3RpdmUpIHtcclxuICAgICAgdGhpcy5zZXRNb2RlKEZsb29ycGxhbm5lck1vZGUuTW92aW5nKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLk1vdmUgJiYgIWhhc0FjdGl2ZSkge1xyXG4gICAgICB0aGlzLnNldE1vZGUoRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZpbmcpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuRHJhdykge1xyXG4gICAgICB0aGlzLnNldE1vZGUoRmxvb3JwbGFubmVyTW9kZS5EcmF3aW5nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVUb3VjaFN0YXJ0KGV2ZW50OiBUb3VjaEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50b3VjaE1vZGUpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIHRoaXMuX2xhc3RYID0gdGhpcy5fcmF3TW91c2UueDtcclxuICAgICAgdGhpcy5fbGFzdFkgPSB0aGlzLl9yYXdNb3VzZS55O1xyXG4gICAgICB0aGlzLl9tb3VzZURvd25Qb3NpdGlvbi5jb3B5KFJlbGF0aXZlUG9zaXRpb25VdGlscy5HZXRDbGllbnRUb3VjaFBvc2l0aW9uKGV2ZW50LCB0aGlzLl9jYW52YXMpKTtcclxuICAgICAgdGhpcy5fbGFzdFRvdWNoUG9pbnQgPSB0aGlzLl9tb3VzZURvd25Qb3NpdGlvbjtcclxuICAgICAgY29uc3QgaGFzQWN0aXZlID0gdGhpcy5fYWN0aXZlV2FsbCB8fCB0aGlzLl9hY3RpdmVDb3JuZXIgfHwgdGhpcy5fYWN0aXZlSXRlbTtcclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5Nb3ZlICYmIGhhc0FjdGl2ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0TW9kZShGbG9vcnBsYW5uZXJNb2RlLk1vdmluZyk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLk1vdmUgJiYgIWhhc0FjdGl2ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0TW9kZShGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmluZyk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkRyYXcpIHtcclxuICAgICAgICB0aGlzLnNldE1vZGUoRmxvb3JwbGFubmVyTW9kZS5EcmF3aW5nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZU1vdXNlVXAoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuX21vdXNlRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5fZmx1c2hNb3ZpbmdTdGF0ZUNoYW5nZXMoKTtcclxuXHJcbiAgICAvLyBkZXRlY3QgbW91c2VDbGlja1xyXG4gICAgaWYgKCF0aGlzLl9oYXNNb3VzZU1vdmVkKGV2ZW50KSkge1xyXG4gICAgICBpZiAodGhpcy5fbW91c2VDbGlja0hhbmRsZWQoZXZlbnQpKSB7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0TW9kZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gbW92aW5nXHJcbiAgICBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLk1vdmluZykge1xyXG4gICAgICB0aGlzLnNldERlZmF1bHRNb2RlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZHJhd2luZ1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5EcmF3aW5nKSB7XHJcbiAgICAgIHRoaXMuX2lmTm90RG91YmxlQ2xpY2soKCkgPT4gdGhpcy5faGFuZGxlRHJhd2luZ01vdXNlVXAoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZW5kIHBhbm5pbmdcclxuICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuQ2FtZXJhTW92ZSB8fFxyXG4gICAgICB0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuQ2FtZXJhTW92aW5nKSB7XHJcbiAgICAgIGlmIChldmVudC5idXR0b24gPT09IDIpIHsgLy8gcmlnaHQgbW91c2UgYnV0dG9uIGRvd24sIGp1c3Qgc3RvcCBtb3ZpbmcgY2FtZXJhXHJcbiAgICAgICAgdGhpcy5zZXRNb2RlKHRoaXMuX21vZGVCZWZvcmVSaWdodE1vdXNlTW92ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0TW9kZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlVG91Y2hVcChldmVudDogVG91Y2hFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudG91Y2hNb2RlKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB0aGlzLl9tb3VzZURvd24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5fZmx1c2hNb3ZpbmdTdGF0ZUNoYW5nZXMoKTtcclxuXHJcblxyXG4gICAgICAvLyBpZiAodGhpcy5fdG91Y2hFdmVudEhhbmRsZWQoZXZlbnQpKSB7XHJcbiAgICAgIC8vICAgdGhpcy5zZXREZWZhdWx0TW9kZSgpO1xyXG4gICAgICAvLyB9XHJcblxyXG4gICAgICAvLyBtb3ZpbmdcclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5Nb3ZpbmcpIHtcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRNb2RlKCk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gZHJhd2luZ1xyXG4gICAgICBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkRyYXdpbmcpIHtcclxuICAgICAgICAvLyB0aGlzLl9pZk5vdERvdWJsZUNsaWNrKCgpID0+IHRoaXMuX2hhbmRsZURyYXdpbmdNb3VzZVVwKCkpO1xyXG4gICAgICAgIHRoaXMuX2hhbmRsZURyYXdpbmdNb3VzZVVwKCk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gZW5kIHBhbm5pbmdcclxuICAgICAgLy8gaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZlIHx8XHJcbiAgICAgIC8vICAgdGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmluZykge1xyXG4gICAgICAvLyAgIGlmIChldmVudC5idXR0b24gPT09IDIpIHsgLy8gcmlnaHQgbW91c2UgYnV0dG9uIGRvd24sIGp1c3Qgc3RvcCBtb3ZpbmcgY2FtZXJhXHJcbiAgICAgIC8vICAgICB0aGlzLnNldE1vZGUodGhpcy5fbW9kZUJlZm9yZVJpZ2h0TW91c2VNb3ZlKTtcclxuICAgICAgLy8gICB9IGVsc2Uge1xyXG4gICAgICAvLyAgICAgdGhpcy5zZXREZWZhdWx0TW9kZSgpO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZU1vdXNlTW92ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgaWYgKCF0aGlzLl9oYXNNb3VzZU1vdmVkKGV2ZW50KSkge1xyXG5cclxuICAgIH1cclxuICAgIGNvbnN0IG1vdXNlUG9zaXRpb24gPSBSZWxhdGl2ZVBvc2l0aW9uVXRpbHMuR2V0Q2xpZW50TW91c2VQb3NpdGlvbihldmVudCk7XHJcbiAgICAvLyB1cGRhdGUgbW91c2VcclxuICAgIHRoaXMuX3Jhd01vdXNlLmNvcHkobW91c2VQb3NpdGlvbik7XHJcbiAgICB0aGlzLl9tb3VzZVggPSAodGhpcy5fcmF3TW91c2UueCAtIHRoaXMuX29mZnNldFgpICogdGhpcy5fY21QZXJQaXhlbCArIHRoaXMuX29yaWdpblggKiB0aGlzLl9jbVBlclBpeGVsO1xyXG4gICAgdGhpcy5fbW91c2VZID0gKHRoaXMuX3Jhd01vdXNlLnkgLSB0aGlzLl9vZmZzZXRZKSAqIHRoaXMuX2NtUGVyUGl4ZWwgKyB0aGlzLl9vcmlnaW5ZICogdGhpcy5fY21QZXJQaXhlbDtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuQ2FtZXJhTW92ZSAmJiB0aGlzLl9tb3VzZURvd24pIHtcclxuICAgICAgdGhpcy5zZXRNb2RlKEZsb29ycGxhbm5lck1vZGUuQ2FtZXJhTW92aW5nKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuRHJhdyB8fCB0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuRHJhd2luZykge1xyXG4gICAgICB0aGlzLl91cGRhdGVXYWxsUG9zaXRpb24oKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuTW92ZSkge1xyXG4gICAgICBjb25zdCBob3ZlckNvcm5lciA9IHRoaXMuX2Zsb29ycGxhblNlcnZpY2Uub3ZlcmxhcHBlZENvcm5lcih0aGlzLl9tb3VzZVgsIHRoaXMuX21vdXNlWSk7XHJcbiAgICAgIGNvbnN0IGhvdmVyV2FsbCA9IHRoaXMuX2Zsb29ycGxhblNlcnZpY2Uub3ZlcmxhcHBlZFdhbGwodGhpcy5fbW91c2VYLCB0aGlzLl9tb3VzZVkpO1xyXG4gICAgICBjb25zdCBob3ZlckZsb29yID0gdGhpcy5fZmxvb3JwbGFuU2VydmljZS5vdmVybGFwcGVkRmxvb3IodGhpcy5fbW91c2VYLCB0aGlzLl9tb3VzZVkpO1xyXG4gICAgICBjb25zdCBob3Zlckl0ZW0gPSB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLm92ZXJsYXBwZWRJdGVtKHRoaXMuX21vdXNlWCwgdGhpcy5fbW91c2VZKTtcclxuICAgICAgbGV0IGRyYXcgPSBmYWxzZTtcclxuICAgICAgaWYgKGhvdmVyQ29ybmVyICE9PSB0aGlzLl9hY3RpdmVDb3JuZXIpIHtcclxuICAgICAgICB0aGlzLl9hY3RpdmVDb3JuZXIgPSBob3ZlckNvcm5lcjtcclxuICAgICAgICBkcmF3ID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICAvLyBjb3JuZXIgdGFrZXMgcHJlY2VuZGVuY2VcclxuICAgICAgaWYgKHRoaXMuX2FjdGl2ZUNvcm5lciA9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKGhvdmVySXRlbSAhPT0gdGhpcy5fYWN0aXZlSXRlbSkge1xyXG4gICAgICAgICAgdGhpcy5fYWN0aXZlSXRlbSA9IGhvdmVySXRlbTtcclxuICAgICAgICAgIHRoaXMuX2FjdGl2ZVdhbGwgPSBudWxsO1xyXG4gICAgICAgICAgZHJhdyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmVJdGVtID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuX2FjdGl2ZVdhbGwgPSBob3ZlcldhbGw7XHJcbiAgICAgICAgICB0aGlzLl9zdGFydERyYWdNb3VzZS5jb3B5KHRoaXMuX3Jhd01vdXNlKTtcclxuICAgICAgICAgIGlmICh0aGlzLl9hY3RpdmVXYWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0RHJhZ0Nvcm5lci5zZXQodGhpcy5fYWN0aXZlV2FsbC5zdGFydC54LCB0aGlzLl9hY3RpdmVXYWxsLnN0YXJ0LnkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZHJhdyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChob3ZlckZsb29yICE9PSB0aGlzLl9hY3RpdmVGbG9vcikge1xyXG4gICAgICAgICAgdGhpcy5fYWN0aXZlRmxvb3IgPSBob3ZlckZsb29yO1xyXG4gICAgICAgICAgZHJhdyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2FjdGl2ZVdhbGwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0gPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChkcmF3KSB7XHJcbiAgICAgICAgdGhpcy5fZHJhdygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcGFubmluZ1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZpbmcgJiZcclxuICAgICAgIXRoaXMuX2FjdGl2ZUNvcm5lciAmJiAhdGhpcy5fYWN0aXZlV2FsbCAmJiAhdGhpcy5fYWN0aXZlSXRlbSkge1xyXG4gICAgICB0aGlzLl9vcmlnaW5YICs9ICh0aGlzLl9sYXN0WCAtIHRoaXMuX3Jhd01vdXNlLngpO1xyXG4gICAgICB0aGlzLl9vcmlnaW5ZICs9ICh0aGlzLl9sYXN0WSAtIHRoaXMuX3Jhd01vdXNlLnkpO1xyXG4gICAgICB0aGlzLl9sYXN0WCA9IHRoaXMuX3Jhd01vdXNlLng7XHJcbiAgICAgIHRoaXMuX2xhc3RZID0gdGhpcy5fcmF3TW91c2UueTtcclxuICAgICAgdGhpcy5fZHJhdygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRyYWdnaW5nXHJcbiAgICBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLk1vdmluZykge1xyXG4gICAgICBpZiAodGhpcy5fYWN0aXZlQ29ybmVyKSB7XHJcbiAgICAgICAgdGhpcy5fYWN0aXZlQ29ybmVyLm1vdmUodGhpcy5fbW91c2VYLCB0aGlzLl9tb3VzZVkpO1xyXG4gICAgICAgIHRoaXMuX25vdGljZVN0YXRlKCdjb3JuZXIgbW92ZWQnKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9hY3RpdmVXYWxsKSB7XHJcbiAgICAgICAgY29uc3Qge3N0YXJ0LCBlbmR9ID0gdGhpcy5fYWN0aXZlV2FsbDtcclxuICAgICAgICBjb25zdCBtb3VzZURyYWdEaWZmID0gbmV3IFZlY3RvcjIoKS5jb3B5KHRoaXMuX3Jhd01vdXNlKS5zdWIodGhpcy5fc3RhcnREcmFnTW91c2UpLm11bHRpcGx5U2NhbGFyKHRoaXMuX2NtUGVyUGl4ZWwpO1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0RW5kQ29ybmVyRGlmZiA9IG5ldyBWZWN0b3IyKGVuZC54IC0gc3RhcnQueCwgZW5kLnkgLSBzdGFydC55KTtcclxuICAgICAgICBjb25zdCBuZXdTdGFydCA9IG5ldyBWZWN0b3IyKCkuY29weSh0aGlzLl9zdGFydERyYWdDb3JuZXIpLmFkZChtb3VzZURyYWdEaWZmKTtcclxuICAgICAgICBjb25zdCBuZXdFbmQgPSBuZXcgVmVjdG9yMigpLmNvcHkobmV3U3RhcnQpLmFkZChzdGFydEVuZENvcm5lckRpZmYpO1xyXG4gICAgICAgIGNvbnN0IHRvbGVyYW5jZSA9IDMwICogdGhpcy5fY21QZXJQaXhlbDtcclxuICAgICAgICBsZXQgc25hcHBlZCA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LldhbGxTbmFwcGluZykpIHtcclxuICAgICAgICAgIFtbc3RhcnQsIG5ld1N0YXJ0XSwgW2VuZCwgbmV3RW5kXV0uZm9yRWFjaCgoW2Nvcm5lciwgbmV3Q29ybmVyUG9zXSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc25hcHBlZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgLi4uY29ybmVyLndhbGxFbmRzLm1hcCh3ID0+IHcuc3RhcnQpLFxyXG4gICAgICAgICAgICAgIC4uLmNvcm5lci53YWxsU3RhcnRzLm1hcCh3ID0+IHcuZW5kKVxyXG4gICAgICAgICAgICBdLmZvckVhY2gob3RoZXJDb3JuZXIgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChzbmFwcGVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChvdGhlckNvcm5lciA9PT0gc3RhcnQgfHwgb3RoZXJDb3JuZXIgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMob3RoZXJDb3JuZXIueSAtIG5ld0Nvcm5lclBvcy55KSA8IHRvbGVyYW5jZSkge1xyXG4gICAgICAgICAgICAgICAgc25hcHBlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBuZXdTdGFydC55ICs9IG90aGVyQ29ybmVyLnkgLSBuZXdDb3JuZXJQb3MueTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKG90aGVyQ29ybmVyLnggLSBuZXdDb3JuZXJQb3MueCkgPCB0b2xlcmFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHNuYXBwZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgbmV3U3RhcnQueCArPSBvdGhlckNvcm5lci54IC0gbmV3Q29ybmVyUG9zLng7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9hY3RpdmVXYWxsLm1vdmUobmV3U3RhcnQueCwgbmV3U3RhcnQueSk7XHJcbiAgICAgICAgdGhpcy5fbGFzdFggPSB0aGlzLl9yYXdNb3VzZS54O1xyXG4gICAgICAgIHRoaXMuX2xhc3RZID0gdGhpcy5fcmF3TW91c2UueTtcclxuICAgICAgICB0aGlzLl9ub3RpY2VTdGF0ZSgnd2FsbCBtb3ZlZCcpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2FjdGl2ZUl0ZW0pIHtcclxuICAgICAgICBjb25zdCBjbG9zZXN0SGFsZkVkZ2UgPSB0aGlzLl9maW5kQ2xvc2VzdEhhbGZFZGdlKHRoaXMuX21vdXNlWCwgdGhpcy5fbW91c2VZKTtcclxuICAgICAgICB0aGlzLl9hY3RpdmVJdGVtLm1vdmVUbzJkUG9zaXRpb24odGhpcy5fbW91c2VYLCB0aGlzLl9tb3VzZVksIGNsb3Nlc3RIYWxmRWRnZSk7XHJcbiAgICAgICAgdGhpcy5fbGFzdFggPSB0aGlzLl9yYXdNb3VzZS54O1xyXG4gICAgICAgIHRoaXMuX2xhc3RZID0gdGhpcy5fcmF3TW91c2UueTtcclxuICAgICAgICB0aGlzLl9ub3RpY2VTdGF0ZSgnaXRlbSBtb3ZlZCcpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2RyYXcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgaGFuZGxlVG91Y2hNb3ZlKGV2ZW50OiBUb3VjaEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50b3VjaE1vZGUpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIGlmICghdGhpcy5faGFzTW91c2VNb3ZlZChldmVudCkpIHtcclxuXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbW91c2VQb3NpdGlvbiA9IFJlbGF0aXZlUG9zaXRpb25VdGlscy5HZXRDbGllbnRUb3VjaFBvc2l0aW9uKGV2ZW50LCB0aGlzLl9jYW52YXMpO1xyXG4gICAgICAvLyB1cGRhdGUgbW91c2VcclxuICAgICAgdGhpcy5fcmF3TW91c2UuY29weShtb3VzZVBvc2l0aW9uKTtcclxuXHJcbiAgICAgIHRoaXMuX21vdXNlWCA9ICh0aGlzLl9yYXdNb3VzZS54IC0gdGhpcy5fb2Zmc2V0WCkgKiB0aGlzLl9jbVBlclBpeGVsICsgdGhpcy5fb3JpZ2luWCAqIHRoaXMuX2NtUGVyUGl4ZWw7XHJcbiAgICAgIHRoaXMuX21vdXNlWSA9ICh0aGlzLl9yYXdNb3VzZS55IC0gdGhpcy5fb2Zmc2V0WSkgKiB0aGlzLl9jbVBlclBpeGVsICsgdGhpcy5fb3JpZ2luWSAqIHRoaXMuX2NtUGVyUGl4ZWw7XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmUgJiYgdGhpcy5fbW91c2VEb3duKSB7XHJcbiAgICAgICAgdGhpcy5zZXRNb2RlKEZsb29ycGxhbm5lck1vZGUuQ2FtZXJhTW92aW5nKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkRyYXcgfHwgdGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkRyYXdpbmcpIHtcclxuICAgICAgICB0aGlzLl91cGRhdGVXYWxsUG9zaXRpb24oKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5Nb3ZlKSB7XHJcbiAgICAgICAgY29uc3QgaG92ZXJDb3JuZXIgPSB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLm92ZXJsYXBwZWRDb3JuZXIodGhpcy5fbW91c2VYLCB0aGlzLl9tb3VzZVkpO1xyXG4gICAgICAgIGNvbnN0IGhvdmVyV2FsbCA9IHRoaXMuX2Zsb29ycGxhblNlcnZpY2Uub3ZlcmxhcHBlZFdhbGwodGhpcy5fbW91c2VYLCB0aGlzLl9tb3VzZVkpO1xyXG4gICAgICAgIGNvbnN0IGhvdmVyRmxvb3IgPSB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLm92ZXJsYXBwZWRGbG9vcih0aGlzLl9tb3VzZVgsIHRoaXMuX21vdXNlWSk7XHJcbiAgICAgICAgY29uc3QgaG92ZXJJdGVtID0gdGhpcy5fZmxvb3JwbGFuU2VydmljZS5vdmVybGFwcGVkSXRlbSh0aGlzLl9tb3VzZVgsIHRoaXMuX21vdXNlWSk7XHJcbiAgICAgICAgbGV0IGRyYXcgPSBmYWxzZTtcclxuICAgICAgICBpZiAoaG92ZXJDb3JuZXIgIT09IHRoaXMuX2FjdGl2ZUNvcm5lcikge1xyXG4gICAgICAgICAgdGhpcy5fYWN0aXZlQ29ybmVyID0gaG92ZXJDb3JuZXI7XHJcbiAgICAgICAgICBkcmF3ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29ybmVyIHRha2VzIHByZWNlbmRlbmNlXHJcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZUNvcm5lciA9PSBudWxsKSB7XHJcbiAgICAgICAgICBpZiAoaG92ZXJJdGVtICE9PSB0aGlzLl9hY3RpdmVJdGVtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0gPSBob3Zlckl0ZW07XHJcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVdhbGwgPSBudWxsO1xyXG4gICAgICAgICAgICBkcmF3ID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLl9hY3RpdmVJdGVtID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5fYWN0aXZlV2FsbCA9IGhvdmVyV2FsbDtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnREcmFnTW91c2UuY29weSh0aGlzLl9yYXdNb3VzZSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9hY3RpdmVXYWxsKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fc3RhcnREcmFnQ29ybmVyLnNldCh0aGlzLl9hY3RpdmVXYWxsLnN0YXJ0LngsIHRoaXMuX2FjdGl2ZVdhbGwuc3RhcnQueSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZHJhdyA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaG92ZXJGbG9vciAhPT0gdGhpcy5fYWN0aXZlRmxvb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5fYWN0aXZlRmxvb3IgPSBob3ZlckZsb29yO1xyXG4gICAgICAgICAgICBkcmF3ID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fYWN0aXZlV2FsbCA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLl9hY3RpdmVJdGVtID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRyYXcpIHtcclxuICAgICAgICAgIHRoaXMuX2RyYXcoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHBhbm5pbmdcclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZpbmcgJiZcclxuICAgICAgICAhdGhpcy5fYWN0aXZlQ29ybmVyICYmICF0aGlzLl9hY3RpdmVXYWxsICYmICF0aGlzLl9hY3RpdmVJdGVtKSB7XHJcbiAgICAgICAgdGhpcy5fb3JpZ2luWCArPSAodGhpcy5fbGFzdFggLSB0aGlzLl9yYXdNb3VzZS54KTtcclxuICAgICAgICB0aGlzLl9vcmlnaW5ZICs9ICh0aGlzLl9sYXN0WSAtIHRoaXMuX3Jhd01vdXNlLnkpO1xyXG4gICAgICAgIHRoaXMuX2xhc3RYID0gdGhpcy5fcmF3TW91c2UueDtcclxuICAgICAgICB0aGlzLl9sYXN0WSA9IHRoaXMuX3Jhd01vdXNlLnk7XHJcbiAgICAgICAgdGhpcy5fZHJhdygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBkcmFnZ2luZ1xyXG4gICAgICBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLk1vdmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmVDb3JuZXIpIHtcclxuICAgICAgICAgIHRoaXMuX2FjdGl2ZUNvcm5lci5tb3ZlKHRoaXMuX21vdXNlWCwgdGhpcy5fbW91c2VZKTtcclxuICAgICAgICAgIHRoaXMuX25vdGljZVN0YXRlKCdjb3JuZXIgbW92ZWQnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2FjdGl2ZVdhbGwpIHtcclxuICAgICAgICAgIGNvbnN0IHtzdGFydCwgZW5kfSA9IHRoaXMuX2FjdGl2ZVdhbGw7XHJcbiAgICAgICAgICBjb25zdCBtb3VzZURyYWdEaWZmID0gbmV3IFZlY3RvcjIoKS5jb3B5KHRoaXMuX3Jhd01vdXNlKS5zdWIodGhpcy5fc3RhcnREcmFnTW91c2UpLm11bHRpcGx5U2NhbGFyKHRoaXMuX2NtUGVyUGl4ZWwpO1xyXG4gICAgICAgICAgY29uc3Qgc3RhcnRFbmRDb3JuZXJEaWZmID0gbmV3IFZlY3RvcjIoZW5kLnggLSBzdGFydC54LCBlbmQueSAtIHN0YXJ0LnkpO1xyXG4gICAgICAgICAgY29uc3QgbmV3U3RhcnQgPSBuZXcgVmVjdG9yMigpLmNvcHkodGhpcy5fc3RhcnREcmFnQ29ybmVyKS5hZGQobW91c2VEcmFnRGlmZik7XHJcbiAgICAgICAgICBjb25zdCBuZXdFbmQgPSBuZXcgVmVjdG9yMigpLmNvcHkobmV3U3RhcnQpLmFkZChzdGFydEVuZENvcm5lckRpZmYpO1xyXG4gICAgICAgICAgY29uc3QgdG9sZXJhbmNlID0gMzAgKiB0aGlzLl9jbVBlclBpeGVsO1xyXG4gICAgICAgICAgbGV0IHNuYXBwZWQgPSBmYWxzZTtcclxuICAgICAgICAgIGlmICh0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LldhbGxTbmFwcGluZykpIHtcclxuICAgICAgICAgICAgW1tzdGFydCwgbmV3U3RhcnRdLCBbZW5kLCBuZXdFbmRdXS5mb3JFYWNoKChbY29ybmVyLCBuZXdDb3JuZXJQb3NdKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHNuYXBwZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgLi4uY29ybmVyLndhbGxFbmRzLm1hcCh3ID0+IHcuc3RhcnQpLFxyXG4gICAgICAgICAgICAgICAgLi4uY29ybmVyLndhbGxTdGFydHMubWFwKHcgPT4gdy5lbmQpXHJcbiAgICAgICAgICAgICAgXS5mb3JFYWNoKG90aGVyQ29ybmVyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChzbmFwcGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChvdGhlckNvcm5lciA9PT0gc3RhcnQgfHwgb3RoZXJDb3JuZXIgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMob3RoZXJDb3JuZXIueSAtIG5ld0Nvcm5lclBvcy55KSA8IHRvbGVyYW5jZSkge1xyXG4gICAgICAgICAgICAgICAgICBzbmFwcGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgbmV3U3RhcnQueSArPSBvdGhlckNvcm5lci55IC0gbmV3Q29ybmVyUG9zLnk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhvdGhlckNvcm5lci54IC0gbmV3Q29ybmVyUG9zLngpIDwgdG9sZXJhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNuYXBwZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICBuZXdTdGFydC54ICs9IG90aGVyQ29ybmVyLnggLSBuZXdDb3JuZXJQb3MueDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9hY3RpdmVXYWxsLm1vdmUobmV3U3RhcnQueCwgbmV3U3RhcnQueSk7XHJcbiAgICAgICAgICB0aGlzLl9sYXN0WCA9IHRoaXMuX3Jhd01vdXNlLng7XHJcbiAgICAgICAgICB0aGlzLl9sYXN0WSA9IHRoaXMuX3Jhd01vdXNlLnk7XHJcbiAgICAgICAgICB0aGlzLl9ub3RpY2VTdGF0ZSgnd2FsbCBtb3ZlZCcpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYWN0aXZlSXRlbSkge1xyXG4gICAgICAgICAgY29uc3QgY2xvc2VzdEhhbGZFZGdlID0gdGhpcy5fZmluZENsb3Nlc3RIYWxmRWRnZSh0aGlzLl9tb3VzZVgsIHRoaXMuX21vdXNlWSk7XHJcbiAgICAgICAgICB0aGlzLl9hY3RpdmVJdGVtLm1vdmVUbzJkUG9zaXRpb24odGhpcy5fbW91c2VYLCB0aGlzLl9tb3VzZVksIGNsb3Nlc3RIYWxmRWRnZSk7XHJcbiAgICAgICAgICB0aGlzLl9sYXN0WCA9IHRoaXMuX3Jhd01vdXNlLng7XHJcbiAgICAgICAgICB0aGlzLl9sYXN0WSA9IHRoaXMuX3Jhd01vdXNlLnk7XHJcbiAgICAgICAgICB0aGlzLl9ub3RpY2VTdGF0ZSgnaXRlbSBtb3ZlZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kcmF3KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVNb3VzZUxlYXZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLl9tb3VzZURvd24gPSBmYWxzZTtcclxuICAgIC8vIGVuZCBwYW5uaW5nXHJcbiAgICBpZiAodGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmUgfHxcclxuICAgICAgdGhpcy5tb2RlID09PSBGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmluZykge1xyXG4gICAgICB0aGlzLnNldERlZmF1bHRNb2RlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlVG91Y2hFbmQoZXZlbnQ6IFRvdWNoRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnRvdWNoTW9kZSkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgdGhpcy5fbW91c2VEb3duID0gZmFsc2U7XHJcbiAgICAgIC8vIGVuZCBwYW5uaW5nXHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IEZsb29ycGxhbm5lck1vZGUuQ2FtZXJhTW92ZSB8fFxyXG4gICAgICAgIHRoaXMubW9kZSA9PT0gRmxvb3JwbGFubmVyTW9kZS5DYW1lcmFNb3ZpbmcpIHtcclxuICAgICAgICB0aGlzLnNldERlZmF1bHRNb2RlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVNb3VzZVdoZWVsKGV2ZW50OiBXaGVlbEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBpZiAoZXZlbnQuZGVsdGFZID4gMCkge1xyXG4gICAgICB0aGlzLnpvb21PdXQoKTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQuZGVsdGFZIDwgMCkge1xyXG4gICAgICB0aGlzLnpvb21JbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xyXG4gICAgICBjYXNlIEtleS5TcGFjZTpcclxuICAgICAgICBpZiAodGhpcy5tb2RlICE9PSBGbG9vcnBsYW5uZXJNb2RlLkNhbWVyYU1vdmluZykge1xyXG4gICAgICAgICAgdGhpcy5zZXRNb2RlKEZsb29ycGxhbm5lck1vZGUuQ2FtZXJhTW92ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEtleS5EOlxyXG4gICAgICAgIGlmICh0aGlzLm1vZGUgIT09IEZsb29ycGxhbm5lck1vZGUuRHJhdykge1xyXG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZE1vZGUoRmxvb3JwbGFubmVyTW9kZS5EcmF3KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgS2V5LlM6XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZSAhPT0gRmxvb3JwbGFubmVyTW9kZS5Nb3ZlKSB7XHJcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkTW9kZShGbG9vcnBsYW5uZXJNb2RlLk1vdmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVLZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XHJcbiAgICAgIGNhc2UgS2V5LkVzYzpcclxuICAgICAgY2FzZSBLZXkuU3BhY2U6XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0TW9kZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoYW5nZUZsb29ycGxhbm5lck1vZGUodmFsdWU6IEZsb29ycGxhbm5lck1vZGUpIHtcclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRNb2RlKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXREaWFncmFtU2V0dGluZ3MoaW5wdXQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXNldCgpO1xyXG4gICAgdGhpcy5fcmVzZXRPcmlnaW4oKTtcclxuICAgIHRoaXMuX3ZpZXdTY2FsZSA9IDEwMDtcclxuICAgIHRoaXMuX3VwZGF0ZUNtUGVyUGl4ZWwoKTtcclxuICAgIHRoaXMuX2RyYXcoKTtcclxuICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UucmVzZXQoKTtcclxuICAgIHRoaXMuX3Jvb21TZXJ2aWNlLnJlc2V0QWxsUm9vbXMoKTtcclxuICAgIHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kID0gaW5wdXQuYmFja2dyb3VuZDtcclxuICAgIHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kSGVpZ2h0ID0gaW5wdXQuYmFja2dyb3VuZEhlaWdodDtcclxuICAgIHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kV2lkdGggPSBpbnB1dC5iYWNrZ3JvdW5kV2lkdGg7XHJcbiAgICB0aGlzLl9kaWFncmFtU2NhbGUgPSBpbnB1dC5zY2FsZTtcclxuICAgIHRoaXMuX2NhbWVyYVpvb20gPSBpbnB1dC5jYW1lcmFab29tO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhd0JhY2tncm91bmQoKTogYW55IHtcclxuICAgIGlmICh0aGlzLl9kaWFncmFtQmFja2dyb3VuZEFjdGl2ZVpvb20pIHtcclxuICAgICAgaWYgKHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kQ3VycmVudFNjYWxlIDw9IHRoaXMuX3ZpZXdTY2FsZSkge1xyXG4gICAgICAgIHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kV2lkdGggPSB0aGlzLl9kaWFncmFtQmFja2dyb3VuZFdpZHRoICogdGhpcy5zY2FsaW5nRmFjdG9yO1xyXG4gICAgICAgIHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kSGVpZ2h0ID0gdGhpcy5fZGlhZ3JhbUJhY2tncm91bmRIZWlnaHQgKiB0aGlzLnNjYWxpbmdGYWN0b3I7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZGlhZ3JhbUJhY2tncm91bmRXaWR0aCA9IHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kV2lkdGggKiAoMSAvIHRoaXMuc2NhbGluZ0ZhY3Rvcik7XHJcbiAgICAgICAgdGhpcy5fZGlhZ3JhbUJhY2tncm91bmRIZWlnaHQgPSB0aGlzLl9kaWFncmFtQmFja2dyb3VuZEhlaWdodCAqICgxIC8gdGhpcy5zY2FsaW5nRmFjdG9yKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9kaWFncmFtQmFja2dyb3VuZEFjdGl2ZVpvb20gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kQ3VycmVudFNjYWxlID0gdGhpcy5fdmlld1NjYWxlO1xyXG5cclxuICAgIHRoaXMuX2NvbnRleHQuZHJhd0ltYWdlKFxyXG4gICAgICB0aGlzLl9kaWFncmFtQmFja2dyb3VuZCxcclxuICAgICAgTWF0aC5hYnModGhpcy5fb3JpZ2luWCkgLSAodGhpcy5fZGlhZ3JhbUJhY2tncm91bmRXaWR0aCAqIHRoaXMuX2RpYWdyYW1TY2FsZSAvIDIpLFxyXG4gICAgICBNYXRoLmFicyh0aGlzLl9vcmlnaW5ZKSAtICh0aGlzLl9kaWFncmFtQmFja2dyb3VuZEhlaWdodCAqIHRoaXMuX2RpYWdyYW1TY2FsZSAvIDIpLFxyXG4gICAgICB0aGlzLl9kaWFncmFtQmFja2dyb3VuZFdpZHRoICogdGhpcy5fZGlhZ3JhbVNjYWxlLFxyXG4gICAgICB0aGlzLl9kaWFncmFtQmFja2dyb3VuZEhlaWdodCAqIHRoaXMuX2RpYWdyYW1TY2FsZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZVdpbmRvd1Jlc2l6ZSgpIHtcclxuICAgIGlmICh0aGlzLl9jYW52YXMpIHtcclxuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5fY2FudmFzLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LmNsaWVudEhlaWdodCA+IDApIHsgLy8gZG9uJ3Qgc2V0IGRpbWVuc2lvbnMgb2YgY2FudmFzIHRvIDBcclxuICAgICAgICB0aGlzLl9jYW52YXMuaGVpZ2h0ID0gcGFyZW50LmNsaWVudEhlaWdodDtcclxuICAgICAgICB0aGlzLl9jYW52YXMud2lkdGggPSBwYXJlbnQuY2xpZW50V2lkdGg7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fZHJhdygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xlYXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fY29udGV4dCAmJiB0aGlzLl9jYW52YXMpIHtcclxuICAgICAgdGhpcy5fY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdGhpcy5fY2FudmFzLndpZHRoLCB0aGlzLl9jYW52YXMuaGVpZ2h0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZVdhbGxQb3NpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLl93YWxsTGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IHN0YXJ0UG9pbnQgPSB0aGlzLl9sYXN0Tm9kZTtcclxuICAgICAgY29uc3QgZW5kUG9pbnQgPSBVdGlscy5Qcm9sb25nU3RyYWlnaHRMaW5lKHN0YXJ0UG9pbnQueCwgc3RhcnRQb2ludC55LCB0aGlzLl9tb3VzZVgsIHRoaXMuX21vdXNlWSwgdGhpcy5fd2FsbExlbmd0aCk7XHJcbiAgICAgIHRoaXMuX21vdXNlWCA9IGVuZFBvaW50Lng7XHJcbiAgICAgIHRoaXMuX21vdXNlWSA9IGVuZFBvaW50Lnk7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLl91cGRhdGVTbmFwSW5kaWNhdG9yKHRoaXMuX21vdXNlWCwgdGhpcy5fbW91c2VZKTtcclxuICAgIC8vIHVwZGF0ZVRhcmdldCBhbHdheXMgZXhlYyB1cGRhdGVTbmFwSW5kaWNhdG9yLi4uXHJcbiAgICB0aGlzLl91cGRhdGVUYXJnZXQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NjYWxlKHg6IG51bWJlciwgeTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9jb250ZXh0LnNjYWxlKHgsIHkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHJhdygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5fcmVhZHlUb0RyYXcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY2xlYXIoKTtcclxuXHJcbiAgICB0aGlzLl9kcmF3R3JpZCgpO1xyXG4gICAgaWYgKHRoaXMuX2RpYWdyYW1CYWNrZ3JvdW5kKSB7XHJcbiAgICAgIHRoaXMuX2RyYXdCYWNrZ3JvdW5kKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5nZXRSb29tcygpLmZvckVhY2gocm9vbSA9PiB7XHJcbiAgICAgIHRoaXMuX2RyYXdSb29tKHJvb20pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5nZXRXYWxscygpLmZvckVhY2goKHdhbGwpID0+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=