@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.
- package/app/core/enum/message-type.enum.d.ts +3 -1
- package/app/core/interface/message-with-payload.interface.d.ts +6 -0
- package/app/core/model/homedecorator-settings-options.d.ts +2 -0
- package/app/core/service/homedecorator-app-event.service.d.ts +1 -0
- package/app/core/service/homedecorator-connector-adapter.service.d.ts +2 -0
- package/app/core/service/homedecorator-connector.service.d.ts +5 -4
- package/app/core/service/homedecorator-settings.service.d.ts +2 -1
- package/app/core/service/presets.service.d.ts +3 -1
- package/app/homedecorator.component.d.ts +3 -1
- package/app/homedecorator.module.d.ts +2 -1
- package/app/plugins/core3d/service/floor-pattern.service.d.ts +1 -1
- package/app/plugins/core3d/service/floor-tile-intersection.service.d.ts +2 -1
- package/app/plugins/core3d/service/floor.service.d.ts +3 -1
- package/app/plugins/core3d/service/post-processing.service.d.ts +21 -7
- package/app/plugins/core3d/service/scene.service.d.ts +1 -1
- package/app/plugins/core3d/service/ssr.service.d.ts +0 -1
- package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +11 -2
- package/app/plugins/model-uploader/model-previewer/model-preview.component.scss +185 -15
- package/app/plugins/model-uploader/model-uploader.module.d.ts +5 -1
- package/app/plugins/render/render-dialog/render-dialog.component.d.ts +4 -1
- package/app/plugins/render/render-dialog/render-dialog.component.scss +5 -5
- package/app/plugins/room-planner/components/floorplanner/floorplanner.component.d.ts +3 -1
- package/app/plugins/room-planner/components/floorplanner/service/room.service.d.ts +1 -0
- package/app/plugins/room-planner/components/settings/settings.component.d.ts +5 -1
- package/app/plugins/room-planner/components/texture-editor/texture-editor.component.d.ts +4 -1
- package/app/plugins/room-planner/room-planner/room-planner.component.scss +1 -0
- package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +1 -3
- package/app/plugins/toolbar/draw-dialog/draw-dialog.component.d.ts +2 -0
- package/app/plugins/toolbar/draw-dialog/draw-dialog.component.scss +1 -1
- package/app/plugins/toolbar/toolbar/toolbar.component.d.ts +2 -0
- package/assets/icons/dash-button.svg +7 -0
- package/assets/icons/pen-ruler.svg +1 -0
- package/assets/icons/retry-button.svg +7 -0
- package/bundles/colijnit-homedecorator.umd.js +822 -601
- package/bundles/colijnit-homedecorator.umd.js.map +1 -1
- package/esm2015/app/app.version.js +3 -3
- package/esm2015/app/core/enum/message-type.enum.js +3 -1
- package/esm2015/app/core/interface/message-with-payload.interface.js +1 -1
- package/esm2015/app/core/model/homedecorator-settings-options.js +3 -1
- package/esm2015/app/core/service/3dm-api.js +4 -4
- package/esm2015/app/core/service/homedecorator-app-event.service.js +2 -1
- package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +25 -2
- package/esm2015/app/core/service/homedecorator-connector.service.js +25 -22
- package/esm2015/app/core/service/homedecorator-settings.service.js +3 -2
- package/esm2015/app/core/service/presets.service.js +13 -5
- package/esm2015/app/core/utils/material.utils.js +3 -3
- package/esm2015/app/homedecorator.component.js +26 -19
- package/esm2015/app/homedecorator.module.js +8 -4
- package/esm2015/app/plugins/core3d/core3d/components/scenecontrol/scene-control.component.js +5 -5
- package/esm2015/app/plugins/core3d/items/custom-cylinder-floor-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/custom-cylinder-wall-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/custom-shape-floor-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/custom-shape-wall-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/factory.js +3 -2
- package/esm2015/app/plugins/core3d/service/ar.service.js +2 -1
- package/esm2015/app/plugins/core3d/service/floor-pattern.service.js +24 -18
- package/esm2015/app/plugins/core3d/service/floor-tile-intersection.service.js +13 -8
- package/esm2015/app/plugins/core3d/service/floor.service.js +9 -4
- package/esm2015/app/plugins/core3d/service/light-presets.service.js +10 -8
- package/esm2015/app/plugins/core3d/service/lights.service.js +8 -1
- package/esm2015/app/plugins/core3d/service/outline.service.js +4 -6
- package/esm2015/app/plugins/core3d/service/post-processing.service.js +148 -51
- package/esm2015/app/plugins/core3d/service/scene-event.service.js +14 -7
- package/esm2015/app/plugins/core3d/service/scene.service.js +84 -74
- package/esm2015/app/plugins/core3d/service/ssr.service.js +2 -53
- package/esm2015/app/plugins/lite-selector/lite-selector/component/answers-slideout/answers-slideout.component.js +10 -5
- package/esm2015/app/plugins/lite-selector/lite-selector/lite-selector.component.js +2 -2
- package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +281 -166
- package/esm2015/app/plugins/model-uploader/model-uploader.module.js +22 -3
- package/esm2015/app/plugins/render/render-controls/render-controls.component.js +3 -2
- package/esm2015/app/plugins/render/render-dialog/render-dialog.component.js +19 -14
- package/esm2015/app/plugins/render/service/new-render.service.js +4 -2
- package/esm2015/app/plugins/room-planner/components/custom-cylinder-creator/custom-cylinder-creator.component.js +4 -2
- package/esm2015/app/plugins/room-planner/components/custome-shape-creator/custom-shape-creator.component.js +2 -2
- package/esm2015/app/plugins/room-planner/components/floorplanner/floorplanner.component.js +29 -15
- package/esm2015/app/plugins/room-planner/components/floorplanner/service/room.service.js +5 -2
- package/esm2015/app/plugins/room-planner/components/settings/settings.component.js +12 -5
- package/esm2015/app/plugins/room-planner/components/texture-editor/texture-editor.component.js +31 -15
- package/esm2015/app/plugins/room-planner/room-planner/room-planner.component.js +691 -683
- package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +43 -41
- package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +1 -1
- package/esm2015/app/plugins/toolbar/draw-dialog/draw-dialog.component.js +26 -20
- package/esm2015/app/plugins/toolbar/save-dialog/save-dialog.component.js +2 -2
- package/esm2015/app/plugins/toolbar/toolbar/toolbar.component.js +15 -8
- package/esm2015/app/shared/loading-overlay/loading-overlay.component.js +4 -2
- package/esm2015/app/shared/model-dialog/model-dialog-furniture-list.component.js +3 -3
- package/fesm2015/colijnit-homedecorator.js +1656 -1322
- package/fesm2015/colijnit-homedecorator.js.map +1 -1
- package/package.json +1 -1
package/esm2015/app/plugins/room-planner/components/texture-editor/texture-editor.component.js
CHANGED
|
@@ -14,15 +14,17 @@ import { debounceTime } from 'rxjs/operators';
|
|
|
14
14
|
import { TextureType } from '../../../../core/model/texture-type';
|
|
15
15
|
import { Texture } from '../../../../core/model/texture';
|
|
16
16
|
import { MaterialUtils } from '../../../../core/utils/material.utils';
|
|
17
|
+
import { MessageType } from '../../../../core/enum/message-type.enum';
|
|
17
18
|
import * as i0 from "@angular/core";
|
|
18
|
-
import * as i1 from "../../../../core/service/
|
|
19
|
-
import * as i2 from "
|
|
20
|
-
import * as i3 from "
|
|
21
|
-
import * as i4 from "@angular/material/
|
|
22
|
-
import * as i5 from "
|
|
23
|
-
import * as i6 from "
|
|
24
|
-
import * as i7 from "@angular/
|
|
25
|
-
import * as i8 from "
|
|
19
|
+
import * as i1 from "../../../../core/service/message-bus.service";
|
|
20
|
+
import * as i2 from "../../../../core/service/homedecorator-settings.service";
|
|
21
|
+
import * as i3 from "../file-drop/file-drop.component";
|
|
22
|
+
import * as i4 from "@angular/material/button-toggle";
|
|
23
|
+
import * as i5 from "@angular/material/icon";
|
|
24
|
+
import * as i6 from "../../../../shared/slider-input/slider-input.component";
|
|
25
|
+
import * as i7 from "@angular/common";
|
|
26
|
+
import * as i8 from "@angular/flex-layout/flex";
|
|
27
|
+
import * as i9 from "../../../../core/pipe/localize.pipe";
|
|
26
28
|
export var TextureEditorOptions;
|
|
27
29
|
(function (TextureEditorOptions) {
|
|
28
30
|
TextureEditorOptions[TextureEditorOptions["None"] = 0] = "None";
|
|
@@ -31,7 +33,8 @@ export var TextureEditorOptions;
|
|
|
31
33
|
TextureEditorOptions[TextureEditorOptions["Both"] = 3] = "Both";
|
|
32
34
|
})(TextureEditorOptions || (TextureEditorOptions = {}));
|
|
33
35
|
export class TextureEditorComponent {
|
|
34
|
-
constructor(_settingsService) {
|
|
36
|
+
constructor(messageService, _settingsService) {
|
|
37
|
+
this.messageService = messageService;
|
|
35
38
|
this._settingsService = _settingsService;
|
|
36
39
|
this.textureType = TextureType;
|
|
37
40
|
this.dragNDropEnforced = false;
|
|
@@ -73,6 +76,7 @@ export class TextureEditorComponent {
|
|
|
73
76
|
};
|
|
74
77
|
};
|
|
75
78
|
// this.dampSetTexture = this.createDampener(this.setTexture);
|
|
79
|
+
this._subs.push(this.messageService.subscribe(MessageType.ChangeTexture, (texture) => this.setNewTexture(texture)));
|
|
76
80
|
}
|
|
77
81
|
ngOnInit() {
|
|
78
82
|
this.setTiled(false);
|
|
@@ -92,7 +96,9 @@ export class TextureEditorComponent {
|
|
|
92
96
|
}
|
|
93
97
|
ngOnDestroy() {
|
|
94
98
|
// this.dampSetTexture.release();
|
|
95
|
-
this._subs.forEach((s) => {
|
|
99
|
+
this._subs.forEach((s) => {
|
|
100
|
+
s.unsubscribe();
|
|
101
|
+
});
|
|
96
102
|
this.canvas.nativeElement.removeEventListener('mousedown', () => this.onMouseDown());
|
|
97
103
|
this.canvas.nativeElement.removeEventListener('mouseup', () => this.onMouseUp());
|
|
98
104
|
this.canvas.nativeElement.removeEventListener('mousemove', e => this.onMouseMove(e));
|
|
@@ -116,6 +122,9 @@ export class TextureEditorComponent {
|
|
|
116
122
|
this.initializeTexture();
|
|
117
123
|
}
|
|
118
124
|
}
|
|
125
|
+
setNewTexture(texture) {
|
|
126
|
+
this.plainTexture = texture;
|
|
127
|
+
}
|
|
119
128
|
handleRemoveTextureClick(event) {
|
|
120
129
|
this.imageHasBeenResized = false;
|
|
121
130
|
this.removeTexture.emit(event);
|
|
@@ -255,7 +264,13 @@ export class TextureEditorComponent {
|
|
|
255
264
|
}
|
|
256
265
|
initializeTexture() {
|
|
257
266
|
return __awaiter(this, void 0, void 0, function* () {
|
|
258
|
-
|
|
267
|
+
let texture;
|
|
268
|
+
if (this.texturePlane && this.texturePlane.getTexture() !== undefined) {
|
|
269
|
+
texture = this.texturePlane.getTexture();
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
texture = this.plainTexture;
|
|
273
|
+
}
|
|
259
274
|
if (texture) {
|
|
260
275
|
yield this._loadTextureData(texture, false);
|
|
261
276
|
}
|
|
@@ -376,6 +391,7 @@ export class TextureEditorComponent {
|
|
|
376
391
|
// this.dampSetTexture.emit(texture);
|
|
377
392
|
this.imageHasBeenResized = resized;
|
|
378
393
|
this.setTexture.emit(texture);
|
|
394
|
+
// this.setNewTexture(texture);
|
|
379
395
|
});
|
|
380
396
|
}
|
|
381
397
|
onMouseMove(event) {
|
|
@@ -580,8 +596,8 @@ export class TextureEditorComponent {
|
|
|
580
596
|
return destCanvas;
|
|
581
597
|
}
|
|
582
598
|
}
|
|
583
|
-
TextureEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TextureEditorComponent, deps: [{ token: i1.HomedecoratorSettingsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
584
|
-
TextureEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TextureEditorComponent, selector: "rp-texture-editor", inputs: { width: "width", height: "height", texturePlane: "texturePlane", plainTexture: "plainTexture", changedTexture: "changedTexture", options: "options", dragNDropEnforced: "dragNDropEnforced" }, outputs: { setTexture: "setTexture", removeTexture: "removeTexture" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, static: true }, { propertyName: "canvas", first: true, predicate: ["canvas"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<rp-file-drop\r\n [showDragDrop]=\"((!changedTexture || texture?.type === textureType.Basic) && options !== Options.None) || dragNDropEnforced\"\r\n [showRemove]=\"changedTexture\"\r\n (fileContentChanged)=\"onPhotoDataChange($event)\"\r\n (removeClick)=\"handleRemoveTextureClick($event)\"\r\n>\r\n</rp-file-drop>\r\n\r\n<div class=\"resize-message-wrapper\" *ngIf=\"imageHasBeenResized\">\r\n <span class=\"resize-message\" [textContent]=\"'IMAGE_RESIZED' | localize\"></span>\r\n</div>\r\n\r\n<div class=\"picture-editor\" [hidden]=\"!texture || !changedTexture || dragNDropEnforced\">\r\n <div\r\n class=\"picture-editor-canvas\"\r\n [hidden]=\"options === Options.None || (texture?.type === textureType.Basic)\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event)\"\r\n >\r\n <div\r\n class=\"canvas-wrapper\"\r\n fxLayout=\"column inline\"\r\n fxLayoutAlign=\"center center\"\r\n >\r\n <canvas [hidden]=\"texture && texture.stretch\" #canvas></canvas>\r\n <mat-button-toggle-group\r\n *ngIf=\"options === Options.Both\"\r\n (change)=\"tiledChanged($event.value === 'texture')\"\r\n [value]=\"tiled ? 'texture' : 'stretch'\"\r\n >\r\n <mat-button-toggle\r\n value=\"stretch\"\r\n title=\"{{'PICTURE' | localize}}\"\r\n [checked]=\"!tiled\">\r\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\">\r\n <mat-icon class=\"homedecorator-material-icons\">photo_size_select_large</mat-icon>\r\n {{'SKIN_FULL_WALL' | localize}}\r\n </div>\r\n </mat-button-toggle>\r\n <mat-button-toggle\r\n value=\"texture\"\r\n title=\"{{'TILE' | localize}}\"\r\n [checked]=\"tiled\"\r\n >\r\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\">\r\n <mat-icon class=\"homedecorator-material-icons\">texture</mat-icon>\r\n {{'CREATE_TEXTURE' | localize}}\r\n </div>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n\r\n <div class=\"sliders\" *ngIf=\"texture?.type === textureType.CustomPattern\r\n || ((texture?.type === textureType.Basic || texture?.type === textureType.PBR)\r\n && options === Options.None)\r\n\"\r\n >\r\n <rp-slider-input\r\n title=\"{{'TILE_ROTATION' | localize}}\"\r\n min=\"-180\"\r\n max=\"180\"\r\n step=\"1\"\r\n [value]=\"tileRotationDeg\"\r\n (onChange)=\"onTileRotationChange($event)\">\r\n </rp-slider-input>\r\n <rp-slider-input\r\n title=\"{{'TILE_SIZE' | localize}}\"\r\n [min]=\"tileSizeMin\"\r\n [max]=\"tileSizeMax\"\r\n step=\"0.1\"\r\n [value]=\"tileSize\"\r\n (onChange)=\"onTileSizeChange($event)\">\r\n </rp-slider-input>\r\n </div>\r\n\r\n <div class=\"sliders\" *ngIf=\"!isBasic(texture) && !isPBR(texture)\">\r\n <rp-slider-input\r\n title=\"{{'ROTATION' | localize}}\"\r\n min=\"-180\"\r\n max=\"180\"\r\n step=\"1\"\r\n [value]=\"textureRotationDeg\"\r\n (onChange)=\"onRotationChange($event)\">\r\n </rp-slider-input>\r\n <rp-slider-input\r\n title=\"{{'ZOOM' | localize}}\"\r\n [min]=\"-zoomSliderMax\"\r\n [max]=\"zoomSliderMax\"\r\n step=\"0.1\"\r\n [value]=\"textureScaleSlider\"\r\n (onChange)=\"onScaleChange($event)\">\r\n </rp-slider-input>\r\n </div>\r\n\r\n <!--\r\n <footer class=\"picture-editor-footer\">\r\n <button *ngIf=\"texture?.type !== TextureType.Basic || options === Options.None\"\r\n mat-stroked-button color=\"warn\"\r\n (click)=\"resetTexture()\"\r\n >\r\n {{ 'Remove' | localize }}\r\n </button>\r\n </footer>\r\n -->\r\n</div>\r\n", styles: ["rp-texture-editor{display:block;width:100%}.picture-editor-footer{margin-bottom:16px}.picture-editor-canvas{margin-top:.75em;margin-bottom:1.5em;text-align:center}.canvas-wrapper{position:relative}.canvas-wrapper mat-button-toggle-group{text-align:center;width:320px}.canvas-wrapper mat-button-toggle{flex-basis:50%;padding:4px 0}.resize-message-wrapper{margin:10px 3px 3px;text-align:-webkit-center}.resize-message-wrapper .resize-message{color:red;font-style:italic;font-weight:bold;font-size:.9em}\n"], components: [{ type:
|
|
599
|
+
TextureEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TextureEditorComponent, deps: [{ token: i1.MessageBusService }, { token: i2.HomedecoratorSettingsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
600
|
+
TextureEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TextureEditorComponent, selector: "rp-texture-editor", inputs: { width: "width", height: "height", texturePlane: "texturePlane", plainTexture: "plainTexture", changedTexture: "changedTexture", options: "options", dragNDropEnforced: "dragNDropEnforced" }, outputs: { setTexture: "setTexture", removeTexture: "removeTexture" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, static: true }, { propertyName: "canvas", first: true, predicate: ["canvas"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<rp-file-drop\r\n [showDragDrop]=\"((!changedTexture || texture?.type === textureType.Basic) && options !== Options.None) || dragNDropEnforced\"\r\n [showRemove]=\"changedTexture\"\r\n (fileContentChanged)=\"onPhotoDataChange($event)\"\r\n (removeClick)=\"handleRemoveTextureClick($event)\"\r\n>\r\n</rp-file-drop>\r\n\r\n<div class=\"resize-message-wrapper\" *ngIf=\"imageHasBeenResized\">\r\n <span class=\"resize-message\" [textContent]=\"'IMAGE_RESIZED' | localize\"></span>\r\n</div>\r\n\r\n<div class=\"picture-editor\" [hidden]=\"!texture || !changedTexture || dragNDropEnforced\">\r\n <div\r\n class=\"picture-editor-canvas\"\r\n [hidden]=\"options === Options.None || (texture?.type === textureType.Basic)\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event)\"\r\n >\r\n <div\r\n class=\"canvas-wrapper\"\r\n fxLayout=\"column inline\"\r\n fxLayoutAlign=\"center center\"\r\n >\r\n <canvas [hidden]=\"texture && texture.stretch\" #canvas></canvas>\r\n <mat-button-toggle-group\r\n *ngIf=\"options === Options.Both\"\r\n (change)=\"tiledChanged($event.value === 'texture')\"\r\n [value]=\"tiled ? 'texture' : 'stretch'\"\r\n >\r\n <mat-button-toggle\r\n value=\"stretch\"\r\n title=\"{{'PICTURE' | localize}}\"\r\n [checked]=\"!tiled\">\r\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\">\r\n <mat-icon class=\"homedecorator-material-icons\">photo_size_select_large</mat-icon>\r\n {{'SKIN_FULL_WALL' | localize}}\r\n </div>\r\n </mat-button-toggle>\r\n <mat-button-toggle\r\n value=\"texture\"\r\n title=\"{{'TILE' | localize}}\"\r\n [checked]=\"tiled\"\r\n >\r\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\">\r\n <mat-icon class=\"homedecorator-material-icons\">texture</mat-icon>\r\n {{'CREATE_TEXTURE' | localize}}\r\n </div>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n\r\n <div class=\"sliders\" *ngIf=\"texture?.type === textureType.CustomPattern\r\n || ((texture?.type === textureType.Basic || texture?.type === textureType.PBR)\r\n && options === Options.None)\r\n\"\r\n >\r\n <rp-slider-input\r\n title=\"{{'TILE_ROTATION' | localize}}\"\r\n min=\"-180\"\r\n max=\"180\"\r\n step=\"1\"\r\n [value]=\"tileRotationDeg\"\r\n (onChange)=\"onTileRotationChange($event)\">\r\n </rp-slider-input>\r\n <rp-slider-input\r\n title=\"{{'TILE_SIZE' | localize}}\"\r\n [min]=\"tileSizeMin\"\r\n [max]=\"tileSizeMax\"\r\n step=\"0.1\"\r\n [value]=\"tileSize\"\r\n (onChange)=\"onTileSizeChange($event)\">\r\n </rp-slider-input>\r\n </div>\r\n\r\n <div class=\"sliders\" *ngIf=\"!isBasic(texture) && !isPBR(texture)\">\r\n <rp-slider-input\r\n title=\"{{'ROTATION' | localize}}\"\r\n min=\"-180\"\r\n max=\"180\"\r\n step=\"1\"\r\n [value]=\"textureRotationDeg\"\r\n (onChange)=\"onRotationChange($event)\">\r\n </rp-slider-input>\r\n <rp-slider-input\r\n title=\"{{'ZOOM' | localize}}\"\r\n [min]=\"-zoomSliderMax\"\r\n [max]=\"zoomSliderMax\"\r\n step=\"0.1\"\r\n [value]=\"textureScaleSlider\"\r\n (onChange)=\"onScaleChange($event)\">\r\n </rp-slider-input>\r\n </div>\r\n\r\n <!--\r\n <footer class=\"picture-editor-footer\">\r\n <button *ngIf=\"texture?.type !== TextureType.Basic || options === Options.None\"\r\n mat-stroked-button color=\"warn\"\r\n (click)=\"resetTexture()\"\r\n >\r\n {{ 'Remove' | localize }}\r\n </button>\r\n </footer>\r\n -->\r\n</div>\r\n", styles: ["rp-texture-editor{display:block;width:100%}.picture-editor-footer{margin-bottom:16px}.picture-editor-canvas{margin-top:.75em;margin-bottom:1.5em;text-align:center}.canvas-wrapper{position:relative}.canvas-wrapper mat-button-toggle-group{text-align:center;width:320px}.canvas-wrapper mat-button-toggle{flex-basis:50%;padding:4px 0}.resize-message-wrapper{margin:10px 3px 3px;text-align:-webkit-center}.resize-message-wrapper .resize-message{color:red;font-style:italic;font-weight:bold;font-size:.9em}\n"], components: [{ type: i3.FileDropComponent, selector: "rp-file-drop", inputs: ["showDragDrop", "showRemove"], outputs: ["fileContentChanged", "removeClick"] }, { type: i4.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-labelledby", "tabIndex", "appearance", "checked", "disabled", "id", "name", "aria-label", "value"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.SliderInputComponent, selector: "rp-slider-input", inputs: ["title", "min", "max", "step", "value"], outputs: ["onChange"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i4.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }], pipes: { "localize": i9.LocalizePipe } });
|
|
585
601
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TextureEditorComponent, decorators: [{
|
|
586
602
|
type: Component,
|
|
587
603
|
args: [{
|
|
@@ -589,7 +605,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
589
605
|
templateUrl: './texture-editor.component.html',
|
|
590
606
|
styleUrls: ['./texture-editor.component.scss']
|
|
591
607
|
}]
|
|
592
|
-
}], ctorParameters: function () { return [{ type: i1.HomedecoratorSettingsService }]; }, propDecorators: { fileInput: [{
|
|
608
|
+
}], ctorParameters: function () { return [{ type: i1.MessageBusService }, { type: i2.HomedecoratorSettingsService }]; }, propDecorators: { fileInput: [{
|
|
593
609
|
type: ViewChild,
|
|
594
610
|
args: ['fileInput', { static: true }]
|
|
595
611
|
}], canvas: [{
|
|
@@ -614,4 +630,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
614
630
|
}], removeTexture: [{
|
|
615
631
|
type: Output
|
|
616
632
|
}] } });
|
|
617
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dHVyZS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9yb29tLXBsYW5uZXIvY29tcG9uZW50cy90ZXh0dXJlLWVkaXRvci90ZXh0dXJlLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3Jvb20tcGxhbm5lci9jb21wb25lbnRzL3RleHR1cmUtZWRpdG9yL3RleHR1cmUtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRS9CLE9BQU8sRUFBQyxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBZ0MsTUFBTSxFQUFpQixTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekksT0FBTyxFQUFDLE9BQU8sRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ2hFLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV2RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sdUNBQXVDLENBQUM7Ozs7Ozs7Ozs7QUFFcEUsTUFBTSxDQUFOLElBQVksb0JBS1g7QUFMRCxXQUFZLG9CQUFvQjtJQUM5QiwrREFBSSxDQUFBO0lBQ0osaUVBQUssQ0FBQTtJQUNMLGlFQUFLLENBQUE7SUFDTCwrREFBSSxDQUFBO0FBQ04sQ0FBQyxFQUxXLG9CQUFvQixLQUFwQixvQkFBb0IsUUFLL0I7QUFPRCxNQUFNLE9BQU8sc0JBQXNCO0lBa0ZqQyxZQUFvQixnQkFBOEM7UUFBOUMscUJBQWdCLEdBQWhCLGdCQUFn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QyxPQUFPLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxhQUFhLEVBQUU7WUFDbkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQ2xDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxZQUFZLEdBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2xLO2FBQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsS0FBSyxFQUFFO1lBQ2xELE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFELE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVELFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM3RztRQUVELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUVkLE9BQU8sUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxVQUFVLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU07UUFDL0MsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCxVQUFVLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUN6QixVQUFVLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUMzQixVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQ2hELElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRyxtQ0FBbUM7UUFDOUQsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBTSxzQ0FBc0M7UUFDbkUsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQzs7b0hBaG9CVSxzQkFBc0I7d0dBQXRCLHNCQUFzQixvakJDdEJuQyw4c0hBMEdBOzRGRHBGYSxzQkFBc0I7a0JBTGxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsV0FBVyxFQUFFLGlDQUFpQztvQkFDOUMsU0FBUyxFQUFFLENBQUMsaUNBQWlDLENBQUM7aUJBQy9DO21IQUkyQyxTQUFTO3NCQUFsRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0QsTUFBTTtzQkFBNUMsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUM1QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xyXG5cclxuaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge2RlYm91bmNlVGltZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge1RleHR1cmVUeXBlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL21vZGVsL3RleHR1cmUtdHlwZSc7XHJcbmltcG9ydCB7VGV4dHVyZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9tb2RlbC90ZXh0dXJlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHtNYXRlcmlhbFV0aWxzfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3V0aWxzL21hdGVyaWFsLnV0aWxzJztcclxuXHJcbmV4cG9ydCBlbnVtIFRleHR1cmVFZGl0b3JPcHRpb25zIHtcclxuICBOb25lLFxyXG4gIEltYWdlLFxyXG4gIFRpbGVzLFxyXG4gIEJvdGhcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdycC10ZXh0dXJlLWVkaXRvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RleHR1cmUtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90ZXh0dXJlLWVkaXRvci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZXh0dXJlRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgcHVibGljIHJlYWRvbmx5IHRleHR1cmVUeXBlOiB0eXBlb2YgVGV4dHVyZVR5cGUgPSBUZXh0dXJlVHlwZTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZmlsZUlucHV0JywgeyBzdGF0aWM6IHRydWUgfSkgZmlsZUlucHV0OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2NhbnZhcycsIHsgc3RhdGljOiB0cnVlIH0pIGNhbnZhczogRWxlbWVudFJlZjtcclxuICBASW5wdXQoKSB3aWR0aDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGhlaWdodDogbnVtYmVyO1xyXG5cclxuICBASW5wdXQoKSB0ZXh0dXJlUGxhbmU7XHJcbiAgQElucHV0KCkgcGxhaW5UZXh0dXJlO1xyXG4gIEBJbnB1dCgpIGNoYW5nZWRUZXh0dXJlOiBUZXh0dXJlO1xyXG5cclxuICBASW5wdXQoKSBvcHRpb25zOiBUZXh0dXJlRWRpdG9yT3B0aW9ucztcclxuICBASW5wdXQoKSBkcmFnTkRyb3BFbmZvcmNlZCA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoKSBzZXRUZXh0dXJlID0gbmV3IEV2ZW50RW1pdHRlcjxUZXh0dXJlIHwgbnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKSByZW1vdmVUZXh0dXJlOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIHB1YmxpYyBpbWFnZUhhc0JlZW5SZXNpemVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX3N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIE9wdGlvbnMgPSBUZXh0dXJlRWRpdG9yT3B0aW9ucztcclxuXHJcbiAgdGV4dHVyZTogVGV4dHVyZTtcclxuXHJcbiAgbW91c2VEb3duID0gZmFsc2U7XHJcbiAgbGFzdFRvdWNoUG9zaXRpb246IFRIUkVFLlZlY3RvcjI7XHJcblxyXG4gIGVkaXRvcldpZHRoID0gMzIwO1xyXG4gIGVkaXRvckhlaWdodCA9IDMyMDtcclxuICBlZGl0b3JNYXJnaW4gPSAyMDtcclxuICBtaW5ab29tID0gNTA7XHJcbiAgbWF4Wm9vbSA9IHtcclxuICAgIFtUZXh0dXJlVHlwZS5CYXNpY106IDUwMCxcclxuICAgIFtUZXh0dXJlVHlwZS5JbWFnZV06IDIwMCxcclxuICAgIFtUZXh0dXJlVHlwZS5DdXN0b21QYXR0ZXJuXTogNTAwLFxyXG4gICAgW1RleHR1cmVUeXBlLlBCUl06IDUwMFxyXG4gIH07XHJcbiAgY3VzdG9tUGF0dGVybk11bHRpcGxpZXIgPSAwLjc5O1xyXG4gIHpvb21TbGlkZXJNYXggPSA0O1xyXG4gIGVkaXRvclJhdGlvID0gdGhpcy5lZGl0b3JXaWR0aCAvIHRoaXMuZWRpdG9ySGVpZ2h0O1xyXG4gIGVkaXRvclNjYWxlOiBudW1iZXI7XHJcblxyXG4gIHRhcmdldFdpZHRoOiBudW1iZXI7XHJcbiAgdGFyZ2V0SGVpZ2h0OiBudW1iZXI7XHJcbiAgdGFyZ2V0UG9zWDogbnVtYmVyO1xyXG4gIHRhcmdldFBvc1k6IG51bWJlcjtcclxuICB0ZXh0dXJlUm90YXRpb25EZWc6IG51bWJlcjtcclxuICB0ZXh0dXJlU2NhbGU6IG51bWJlcjtcclxuICB0ZXh0dXJlU2NhbGVTbGlkZXI6IG51bWJlcjtcclxuICB0aWxlUm90YXRpb25EZWcgPSAwO1xyXG4gIHRpbGVTaXplTWluID0gNTtcclxuICB0aWxlU2l6ZU1heCA9IDMwMDtcclxuICB0aWxlU2l6ZSA9IHRoaXMuZWRpdG9yV2lkdGggLSAyICogdGhpcy5lZGl0b3JNYXJnaW47XHJcbiAgdGlsZVRleHR1cmVSYXRpbzogbnVtYmVyO1xyXG4gIHRleHR1cmVPZmZzZXRYOiBudW1iZXI7XHJcbiAgdGV4dHVyZU9mZnNldFk6IG51bWJlcjtcclxuICB0ZXh0dXJlV2lkdGg6IG51bWJlcjtcclxuICB0ZXh0dXJlSGVpZ2h0OiBudW1iZXI7XHJcbiAgaW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQ7XHJcbiAgaW1nUmF0aW86IG51bWJlcjtcclxuICB0YXJnZXRSYXRpbzogbnVtYmVyO1xyXG4gIGNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcclxuICBkYW1wU2V0VGV4dHVyZTtcclxuICB0aWxlZDogYm9vbGVhbjtcclxuXHJcbiAgLy8gcHJpdmF0ZSBfbG9hZFRleHR1cmVEYXRhOiBhbnk7XHJcblxyXG4gIGNyZWF0ZURhbXBlbmVyID0gZW1pdHRlciA9PiB7XHJcbiAgICBjb25zdCAkZGFtcGVuZXIgPSBuZXcgU3ViamVjdCgpO1xyXG4gICAgY29uc3QgZGFtcGVuZXIgPSAkZGFtcGVuZXJcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDE1MCkpXHJcbiAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4gZW1pdHRlci5lbWl0KHZhbHVlKSk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBlbWl0OiB2YWx1ZSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZWRyYXcoKTtcclxuICAgICAgICAkZGFtcGVuZXIubmV4dCh2YWx1ZSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHJlbGVhc2U6ICgpID0+IGRhbXBlbmVyLnVuc3Vic2NyaWJlKClcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9zZXR0aW5nc1NlcnZpY2U6IEhvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2UpIHtcclxuICAgIC8vIHRoaXMuZGFtcFNldFRleHR1cmUgPSB0aGlzLmNyZWF0ZURhbXBlbmVyKHRoaXMuc2V0VGV4dHVyZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0VGlsZWQoZmFsc2UpO1xyXG4gICAgdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC5oZWlnaHQgPSB0aGlzLmVkaXRvckhlaWdodDtcclxuICAgIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQud2lkdGggPSB0aGlzLmVkaXRvcldpZHRoO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKCkgPT4gdGhpcy5vbk1vdXNlRG93bigpKTtcclxuICAgIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICgpID0+IHRoaXMub25Nb3VzZVVwKCkpO1xyXG4gICAgdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBlID0+IHRoaXMub25Nb3VzZU1vdmUoZSkpO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIChlKSA9PiB0aGlzLm9uVG91Y2hTdGFydChlKSk7XHJcbiAgICB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgKCkgPT4gdGhpcy5vblRvdWNoRW5kKCkpO1xyXG4gICAgdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBlID0+IHRoaXMub25Ub3VjaE1vdmUoZSkpO1xyXG5cclxuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVRhcmdldFByb3BzKCk7XHJcbiAgICBpZiAodGhpcy5jaGFuZ2VkVGV4dHVyZSkge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVUZXh0dXJlKCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAvLyB0aGlzLmRhbXBTZXRUZXh0dXJlLnJlbGVhc2UoKTtcclxuICAgIHRoaXMuX3N1YnMuZm9yRWFjaCgocykgPT4ge3MudW5zdWJzY3JpYmUoKTt9KTtcclxuICAgIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKCkgPT4gdGhpcy5vbk1vdXNlRG93bigpKTtcclxuICAgIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICgpID0+IHRoaXMub25Nb3VzZVVwKCkpO1xyXG4gICAgdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBlID0+IHRoaXMub25Nb3VzZU1vdmUoZSkpO1xyXG4gICAgdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgKGUpID0+IHRoaXMub25Ub3VjaFN0YXJ0KGUpKTtcclxuICAgIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCAoKSA9PiB0aGlzLm9uVG91Y2hFbmQoKSk7XHJcbiAgICB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIGUgPT4gdGhpcy5vblRvdWNoTW92ZShlKSk7XHJcbiAgICB0aGlzLmNhbnZhcyA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZmlsZUlucHV0ID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKCF0aGlzLmNvbnRleHQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXMud2lkdGggfHwgY2hhbmdlcy5oZWlnaHQpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplVGFyZ2V0UHJvcHMoKTtcclxuICAgICAgdGhpcy5pbml0aWFsaXplVGV4dHVyZSgpO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgKChjaGFuZ2VzLmNoYW5nZWRUZXh0dXJlICYmIGNoYW5nZXMuY2hhbmdlZFRleHR1cmUuY3VycmVudFZhbHVlICYmIGNoYW5nZXMuY2hhbmdlZFRleHR1cmUuY3VycmVudFZhbHVlLnR5cGUgIT09IFRleHR1cmVUeXBlLkN1c3RvbVBhdHRlcm4pXHJcbiAgICAvLyAgIHx8IGNoYW5nZXMudGV4dHVyZVBsYW5lIHx8IGNoYW5nZXMucGxhaW5UZXh0dXJlKSB7XHJcbiAgICBpZiAoY2hhbmdlcy5jaGFuZ2VkVGV4dHVyZSB8fCBjaGFuZ2VzLnRleHR1cmVQbGFuZSB8fCBjaGFuZ2VzLnBsYWluVGV4dHVyZSkge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVUZXh0dXJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlUmVtb3ZlVGV4dHVyZUNsaWNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuaW1hZ2VIYXNCZWVuUmVzaXplZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZW1vdmVUZXh0dXJlLmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfbG9hZFRleHR1cmVEYXRhKHRleHR1cmU6IFRleHR1cmUsIHJlc2l6ZTogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHN3aXRjaCAodGV4dHVyZS50eXBlKSB7XHJcbiAgICAgIGNhc2UgVGV4dHVyZVR5cGUuQmFzaWM6XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubG9hZEJhc2ljVGV4dHVyZURhdGEodGV4dHVyZSk7XHJcbiAgICAgIGNhc2UgVGV4dHVyZVR5cGUuQ3VzdG9tUGF0dGVybjpcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fbG9hZEN1c3RvbVRleHR1cmVEYXRhKHRleHR1cmUpO1xyXG4gICAgICBjYXNlIFRleHR1cmVUeXBlLkltYWdlOlxyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmxvYWRQaG90b0RhdGEodGV4dHVyZSwgcmVzaXplKTtcclxuICAgICAgY2FzZSBUZXh0dXJlVHlwZS5QQlI6XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubG9hZFBCUlRleHR1cmVEYXRhKHRleHR1cmUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2V0UGhvdG9JbWFnZShkYXRhVXJsOiBzdHJpbmcsIHJlc2l6ZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGxldCBwaG90b0ltYWdlOiBIVE1MSW1hZ2VFbGVtZW50O1xyXG4gICAgdHJ5IHtcclxuICAgICAgcGhvdG9JbWFnZSA9IGF3YWl0IE1hdGVyaWFsVXRpbHMuTG9hZEltYWdlQ2FjaGVkKGRhdGFVcmwsIHJlc2l6ZSk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3QgcmVhZCBpbWFnZScsIGVycm9yKTtcclxuICAgICAgdGhpcy5zZXRUZXh0dXJlLmVtaXQoKTsgLy8gcm9sbGJhY2tcclxuICAgICAgcGhvdG9JbWFnZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLmltYWdlID0gcGhvdG9JbWFnZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VGlsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudGlsZWQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGxvYWRQaG90b0RhdGEodGV4dHVyZTogVGV4dHVyZSwgcmVzaXplOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgYXdhaXQgdGhpcy5zZXRQaG90b0ltYWdlKHRleHR1cmUuZGF0YSwgcmVzaXplKTtcclxuICAgIGlmICh0aGlzLmltYWdlKSB7XHJcbiAgICAgIHRleHR1cmUuZGF0YSA9IHRoaXMuaW1hZ2Uuc3JjO1xyXG4gICAgICB0aGlzLmltZ1JhdGlvID0gdGhpcy5pbWFnZS53aWR0aCAvIHRoaXMuaW1hZ2UuaGVpZ2h0O1xyXG4gICAgICBpZiAodGhpcy5pbWdSYXRpbyA8IHRoaXMudGFyZ2V0UmF0aW8pIHtcclxuICAgICAgICB0aGlzLnRleHR1cmVXaWR0aCA9IHRoaXMudGFyZ2V0V2lkdGg7XHJcbiAgICAgICAgdGhpcy50ZXh0dXJlSGVpZ2h0ID0gdGhpcy50ZXh0dXJlV2lkdGggLyB0aGlzLmltZ1JhdGlvO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudGV4dHVyZUhlaWdodCA9IHRoaXMudGFyZ2V0SGVpZ2h0O1xyXG4gICAgICAgIHRoaXMudGV4dHVyZVdpZHRoID0gdGhpcy50ZXh0dXJlSGVpZ2h0ICogdGhpcy5pbWdSYXRpbztcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmluaXRpYWxpemVUZXh0dXJlUHJvcHModGV4dHVyZSk7XHJcbiAgICAgIHRoaXMuc2V0VGlsZWQoZmFsc2UpO1xyXG4gICAgICB0aGlzLnJlZHJhdygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfc2V0VGV4dHVyZUltYWdlKGRhdGFVcmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHRleHR1cmVJbWFnZTogSFRNTEltYWdlRWxlbWVudDtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRleHR1cmVJbWFnZSA9IGF3YWl0IE1hdGVyaWFsVXRpbHMuTG9hZEltYWdlQ2FjaGVkKGRhdGFVcmwpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignQ2Fubm90IHJlYWQgaW1hZ2UnLCBlcnJvcik7XHJcbiAgICAgIHRoaXMuc2V0VGV4dHVyZS5lbWl0KCk7IC8vIHJvbGxiYWNrXHJcbiAgICAgIHRleHR1cmVJbWFnZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLmltYWdlID0gdGV4dHVyZUltYWdlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfbG9hZEN1c3RvbVRleHR1cmVEYXRhKHRleHR1cmU6IFRleHR1cmUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vIGNsZWFyVGltZW91dCh0aGlzLl9sb2FkVGV4dHVyZURhdGEpO1xyXG4gICAgLy8gdGhpcy5fbG9hZFRleHR1cmVEYXRhID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgIGF3YWl0IHRoaXMuX3NldFRleHR1cmVJbWFnZSh0ZXh0dXJlLmRhdGEpO1xyXG4gICAgICBpZiAodGhpcy5pbWFnZSkge1xyXG4gICAgICAgIHRoaXMuaW1nUmF0aW8gPSB0aGlzLmltYWdlLndpZHRoIC8gdGhpcy5pbWFnZS5oZWlnaHQ7XHJcbiAgICAgICAgdGhpcy50aWxlU2l6ZSA9IHRleHR1cmUudGlsZVNpemUgKiAxMDA7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1nUmF0aW8gPCAxKSB7XHJcbiAgICAgICAgICB0aGlzLnRleHR1cmVXaWR0aCA9IHRoaXMuaW1hZ2Uud2lkdGg7XHJcbiAgICAgICAgICB0aGlzLnRleHR1cmVIZWlnaHQgPSB0aGlzLnRleHR1cmVXaWR0aCAvIHRoaXMuaW1nUmF0aW87XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudGV4dHVyZUhlaWdodCA9IHRoaXMuaW1hZ2UuaGVpZ2h0O1xyXG4gICAgICAgICAgdGhpcy50ZXh0dXJlV2lkdGggPSB0aGlzLnRleHR1cmVIZWlnaHQgKiB0aGlzLmltZ1JhdGlvO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluaXRpYWxpemVUZXh0dXJlUHJvcHModGV4dHVyZSk7XHJcbiAgICAgICAgdGhpcy5zZXRUaWxlZCh0cnVlKTtcclxuICAgICAgICB0aGlzLnJlZHJhdygpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgLy8gfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGxvYWRCYXNpY1RleHR1cmVEYXRhKHRleHR1cmU6IFRleHR1cmUpIHtcclxuICAgIC8vIGNsZWFyVGltZW91dCh0aGlzLl9sb2FkVGV4dHVyZURhdGEpO1xyXG4gICAgLy8gdGhpcy5fbG9hZFRleHR1cmVEYXRhID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgIGF3YWl0IHRoaXMuX3NldFRleHR1cmVJbWFnZSh0ZXh0dXJlLnVybCk7XHJcbiAgICAgIGlmICh0aGlzLmltYWdlKSB7XHJcbiAgICAgICAgdGhpcy5pbWdSYXRpbyA9IHRoaXMuaW1hZ2Uud2lkdGggLyB0aGlzLmltYWdlLmhlaWdodDtcclxuICAgICAgICBpZiAodGhpcy5pbWdSYXRpbyA8IHRoaXMudGFyZ2V0UmF0aW8pIHtcclxuICAgICAgICAgIHRoaXMudGV4dHVyZVdpZHRoID0gdGhpcy50YXJnZXRXaWR0aDtcclxuICAgICAgICAgIHRoaXMudGV4dHVyZUhlaWdodCA9IHRoaXMudGV4dHVyZVdpZHRoIC8gdGhpcy5pbWdSYXRpbztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50ZXh0dXJlSGVpZ2h0ID0gdGhpcy50YXJnZXRIZWlnaHQ7XHJcbiAgICAgICAgICB0aGlzLnRleHR1cmVXaWR0aCA9IHRoaXMudGV4dHVyZUhlaWdodCAqIHRoaXMuaW1nUmF0aW87XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVRleHR1cmVQcm9wcyh0ZXh0dXJlKTtcclxuICAgICAgICB0aGlzLnNldFRpbGVkKHRydWUpO1xyXG4gICAgICAgIHRoaXMucmVkcmF3KCk7XHJcbiAgICAgIH1cclxuICAgIC8vIH0sIDIwMCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBsb2FkUEJSVGV4dHVyZURhdGEodGV4dHVyZTogVGV4dHVyZSkge1xyXG4gICAgLy8gY2xlYXJUaW1lb3V0KHRoaXMuX2xvYWRUZXh0dXJlRGF0YSk7XHJcbiAgICAvLyB0aGlzLl9sb2FkVGV4dHVyZURhdGEgPSBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuICAgICAgYXdhaXQgdGhpcy5fc2V0VGV4dHVyZUltYWdlKHRleHR1cmUudXJsKTtcclxuICAgICAgaWYgKHRoaXMuaW1hZ2UpIHtcclxuICAgICAgICB0aGlzLmltZ1JhdGlvID0gdGhpcy5pbWFnZS53aWR0aCAvIHRoaXMuaW1hZ2UuaGVpZ2h0O1xyXG4gICAgICAgIGlmICh0aGlzLmltZ1JhdGlvIDwgdGhpcy50YXJnZXRSYXRpbykge1xyXG4gICAgICAgICAgdGhpcy50ZXh0dXJlV2lkdGggPSB0aGlzLnRhcmdldFdpZHRoO1xyXG4gICAgICAgICAgdGhpcy50ZXh0dXJlSGVpZ2h0ID0gdGhpcy50ZXh0dXJlV2lkdGggLyB0aGlzLmltZ1JhdGlvO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnRleHR1cmVIZWlnaHQgPSB0aGlzLnRhcmdldEhlaWdodDtcclxuICAgICAgICAgIHRoaXMudGV4dHVyZVdpZHRoID0gdGhpcy50ZXh0dXJlSGVpZ2h0ICogdGhpcy5pbWdSYXRpbztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplVGV4dHVyZVByb3BzKHRleHR1cmUpO1xyXG4gICAgICAgIHRoaXMuc2V0VGlsZWQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5yZWRyYXcoKTtcclxuICAgICAgfVxyXG4gICAgLy8gfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGluaXRpYWxpemVUZXh0dXJlKCkge1xyXG4gICAgY29uc3QgdGV4dHVyZVxyXG4gICAgICA9IHRoaXMudGV4dHVyZVBsYW5lID8gdGhpcy50ZXh0dXJlUGxhbmUuZ2V0VGV4dHVyZSgpIDogdGhpcy5wbGFpblRleHR1cmU7XHJcbiAgICBpZiAodGV4dHVyZSkge1xyXG4gICAgICBhd2FpdCB0aGlzLl9sb2FkVGV4dHVyZURhdGEodGV4dHVyZSwgZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZVRleHR1cmVQcm9wcyh0ZXh0dXJlOiBUZXh0dXJlKSB7XHJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xyXG4gICAgY29uc3QgbWF4Wm9vbSA9IHRoaXMubWF4Wm9vbVt0ZXh0dXJlLnR5cGVdO1xyXG4gICAgdGhpcy50ZXh0dXJlU2NhbGUgPSB0ZXh0dXJlLnNjYWxlIHx8IDEwMDtcclxuICAgIHRoaXMudGV4dHVyZVNjYWxlU2xpZGVyID0gdGhpcy50ZXh0dXJlU2NhbGUgPiAxMDAgP1xyXG4gICAgICAodGhpcy50ZXh0dXJlU2NhbGUgLSAxMDApICogdGhpcy56b29tU2xpZGVyTWF4IC8gKG1heFpvb20gLSAxMDApXHJcbiAgICAgIDogLSh0aGlzLnRleHR1cmVTY2FsZSAtIDEwMCkgKiB0aGlzLnpvb21TbGlkZXJNYXggLyAodGhpcy5taW5ab29tIC0gMTAwKTtcclxuICAgIHRoaXMudGV4dHVyZVJvdGF0aW9uRGVnID0gTWF0aC5yb3VuZChUSFJFRS5NYXRoVXRpbHMucmFkVG9EZWcodGV4dHVyZS5yb3RhdGlvbiB8fCAwKSk7XHJcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHRleHR1cmUudGlsZVNpemUpKSB7XHJcbiAgICAgIHRoaXMudGlsZVNpemUgPSB0ZXh0dXJlLnRpbGVTaXplICogMTAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGV4dHVyZS50aWxlU2l6ZSA9IHRoaXMudGlsZVNpemUgLyAxMDA7XHJcbiAgICB9XHJcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHRleHR1cmUudGlsZVJvdGF0aW9uKSkge1xyXG4gICAgICB0aGlzLnRpbGVSb3RhdGlvbkRlZyA9IE1hdGgucm91bmQoVEhSRUUuTWF0aFV0aWxzLnJhZFRvRGVnKHRleHR1cmUudGlsZVJvdGF0aW9uKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0ZXh0dXJlLnRpbGVSb3RhdGlvbiA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCh0aGlzLnRpbGVSb3RhdGlvbkRlZyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGV4dHVyZS50eXBlID09PSBUZXh0dXJlVHlwZS5DdXN0b21QYXR0ZXJuKSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yU2NhbGUgPSBNYXRoLm1pbih0aGlzLmltYWdlLndpZHRoLCB0aGlzLmltYWdlLmhlaWdodCkgLyB0aGlzLnRhcmdldFdpZHRoO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lZGl0b3JTY2FsZSA9IHRoaXMud2lkdGggLyB0aGlzLnRhcmdldFdpZHRoO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2Zmc2V0ID0gdGV4dHVyZS5vZmZzZXQgfHwgbmV3IFRIUkVFLlZlY3RvcjIoKTtcclxuICAgIHRoaXMudGV4dHVyZU9mZnNldFggPSBvZmZzZXQueCAvIHRoaXMuZWRpdG9yU2NhbGU7XHJcbiAgICB0aGlzLnRleHR1cmVPZmZzZXRZID0gb2Zmc2V0LnkgLyB0aGlzLmVkaXRvclNjYWxlO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZVRhcmdldFByb3BzKCkge1xyXG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZSh0aGlzLndpZHRoKSAmJiBOdW1iZXIuaXNGaW5pdGUodGhpcy5oZWlnaHQpKSB7XHJcbiAgICAgIHRoaXMudGFyZ2V0UmF0aW8gPSB0aGlzLndpZHRoIC8gdGhpcy5oZWlnaHQ7XHJcbiAgICAgIGlmICh0aGlzLnRhcmdldFJhdGlvID4gdGhpcy5lZGl0b3JSYXRpbykge1xyXG4gICAgICAgIHRoaXMudGFyZ2V0V2lkdGggPSB0aGlzLmVkaXRvcldpZHRoIC0gMiAqIHRoaXMuZWRpdG9yTWFyZ2luO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0SGVpZ2h0ID0gdGhpcy50YXJnZXRXaWR0aCAvIHRoaXMudGFyZ2V0UmF0aW87XHJcbiAgICAgICAgdGhpcy50YXJnZXRQb3NYID0gdGhpcy5lZGl0b3JNYXJnaW47XHJcbiAgICAgICAgdGhpcy50YXJnZXRQb3NZID0gKHRoaXMuZWRpdG9ySGVpZ2h0IC0gdGhpcy50YXJnZXRIZWlnaHQpIC8gMjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRhcmdldEhlaWdodCA9IHRoaXMuZWRpdG9ySGVpZ2h0IC0gMiAqIHRoaXMuZWRpdG9yTWFyZ2luO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0V2lkdGggPSB0aGlzLnRhcmdldEhlaWdodCAqIHRoaXMudGFyZ2V0UmF0aW87XHJcbiAgICAgICAgdGhpcy50YXJnZXRQb3NYID0gKHRoaXMuZWRpdG9yV2lkdGggLSB0aGlzLnRhcmdldFdpZHRoKSAvIDI7XHJcbiAgICAgICAgdGhpcy50YXJnZXRQb3NZID0gdGhpcy5lZGl0b3JNYXJnaW47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTW91c2VEb3duKCkge1xyXG4gICAgdGhpcy5tb3VzZURvd24gPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb25Ub3VjaFN0YXJ0KGV2ZW50OiBUb3VjaEV2ZW50KSB7XHJcbiAgICB0aGlzLm1vdXNlRG93biA9IHRydWU7XHJcbiAgICBjb25zdCB0b3VjaCA9IGV2ZW50LnRvdWNoZXNbMF07XHJcbiAgICBpZiAodG91Y2gpIHtcclxuICAgICAgdGhpcy5sYXN0VG91Y2hQb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IyKHRvdWNoLnBhZ2VYLCB0b3VjaC5wYWdlWSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlVXAoKSB7XHJcbiAgICB0aGlzLm1vdXNlRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25Ub3VjaEVuZCgpIHtcclxuICAgIHRoaXMubW91c2VEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmxhc3RUb3VjaFBvc2l0aW9uID0gbnVsbDtcclxuICB9XHJcblxyXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBsZXQgZmlsZTogRmlsZTtcclxuICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIuaXRlbXMpIHtcclxuICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlci5pdGVtc1swXS5raW5kID09PSAnZmlsZScpIHtcclxuICAgICAgICBmaWxlID0gZXZlbnQuZGF0YVRyYW5zZmVyLml0ZW1zWzBdLmdldEFzRmlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmaWxlID0gZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRhdGE6IEhUTUxJbWFnZUVsZW1lbnQgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLlJlYWRBbmRSZXNpemVQaG90b0FzRGF0YVVSTChmaWxlKTtcclxuICAgIHRoaXMub25QaG90b0RhdGFDaGFuZ2UoeyBkYXRhOiBkYXRhLnNyYywgZmlsZU5hbWU6IGZpbGUubmFtZSwgcmVzaXplZDogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICBpc0Jhc2ljKHRleHR1cmU6IFRleHR1cmUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0ZXh0dXJlICYmIHRleHR1cmUudHlwZSA9PT0gVGV4dHVyZVR5cGUuQmFzaWM7XHJcbiAgfVxyXG5cclxuICBpc1BCUih0ZXh0dXJlOiBUZXh0dXJlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGV4dHVyZSAmJiB0ZXh0dXJlLnR5cGUgPT09IFRleHR1cmVUeXBlLlBCUjtcclxuICB9XHJcblxyXG4gIGlzVGlsZSh0ZXh0dXJlOiBUZXh0dXJlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGV4dHVyZSAmJiAhdGV4dHVyZS5zdHJldGNoICYmXHJcbiAgICAgICh0ZXh0dXJlLnR5cGUgPT09IFRleHR1cmVUeXBlLkN1c3RvbVBhdHRlcm4gfHxcclxuICAgICAgdGV4dHVyZS50eXBlID09PSBUZXh0dXJlVHlwZS5CYXNpYyk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXh0dXJlT2Zmc2V0KCk6IFRIUkVFLlZlY3RvcjIge1xyXG4gICAgY29uc3Qgb2Zmc2V0ID0gbmV3IFRIUkVFLlZlY3RvcjIodGhpcy50ZXh0dXJlT2Zmc2V0WCwgdGhpcy50ZXh0dXJlT2Zmc2V0WSk7XHJcbiAgICByZXR1cm4gb2Zmc2V0Lm11bHRpcGx5U2NhbGFyKHRoaXMuZWRpdG9yU2NhbGUpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25QaG90b0RhdGFDaGFuZ2UoeyBkYXRhLCBmaWxlTmFtZSwgcmVzaXplZCB9OiB7IGRhdGE6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZywgcmVzaXplZDogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmltYWdlSGFzQmVlblJlc2l6ZWQgPSBmYWxzZTtcclxuICAgIGNvbnN0IHRleHR1cmUgPSBuZXcgVGV4dHVyZSgpO1xyXG4gICAgdGV4dHVyZS5uYW1lID0gZmlsZU5hbWU7XHJcbiAgICB0ZXh0dXJlLmRhdGEgPSBkYXRhO1xyXG4gICAgdGV4dHVyZS5vZmZzZXQgPSBuZXcgVEhSRUUuVmVjdG9yMigpO1xyXG4gICAgdGV4dHVyZS5zY2FsZSA9IDEwMDtcclxuICAgIHRleHR1cmUucm90YXRpb24gPSAwO1xyXG4gICAgdGV4dHVyZS50aWxlU2l6ZSA9IDE7XHJcbiAgICB0ZXh0dXJlLnRpbGVSb3RhdGlvbiA9IDA7XHJcbiAgICB0ZXh0dXJlLnR5cGUgPSB0aGlzLnRpbGVkID8gVGV4dHVyZVR5cGUuQ3VzdG9tUGF0dGVybiA6IFRleHR1cmVUeXBlLkltYWdlO1xyXG4gICAgYXdhaXQgdGhpcy5fbG9hZFRleHR1cmVEYXRhKFRleHR1cmUuQ3JlYXRlTW9kZWxGcm9tSW50ZXJmYWNlKHRleHR1cmUpKTtcclxuICAgIC8vIHRoaXMuZGFtcFNldFRleHR1cmUuZW1pdCh0ZXh0dXJlKTtcclxuICAgIHRoaXMuaW1hZ2VIYXNCZWVuUmVzaXplZCA9IHJlc2l6ZWQ7XHJcbiAgICB0aGlzLnNldFRleHR1cmUuZW1pdCh0ZXh0dXJlKTtcclxuICB9XHJcblxyXG4gIG9uTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy50ZXh0dXJlICYmIHRoaXMubW91c2VEb3duICYmIHRoaXMudGV4dHVyZS50eXBlICE9PSBUZXh0dXJlVHlwZS5CYXNpYykge1xyXG4gICAgICB0aGlzLm9mZnNldFRleHR1cmUoZXZlbnQubW92ZW1lbnRYLCBldmVudC5tb3ZlbWVudFkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Ub3VjaE1vdmUoZXZlbnQ6IFRvdWNoRXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBjb25zdCB0b3VjaCA9IGV2ZW50LnRvdWNoZXNbMF07XHJcbiAgICBpZiAodG91Y2ggJiYgdGhpcy5sYXN0VG91Y2hQb3NpdGlvbiAmJiB0aGlzLnRleHR1cmUgJiYgdGhpcy5tb3VzZURvd24gJiYgdGhpcy50ZXh0dXJlLnR5cGUgIT09IFRleHR1cmVUeXBlLkJhc2ljKSB7XHJcbiAgICAgIHRoaXMub2Zmc2V0VGV4dHVyZShcclxuICAgICAgICB0b3VjaC5wYWdlWCAtIHRoaXMubGFzdFRvdWNoUG9zaXRpb24ueCxcclxuICAgICAgICB0b3VjaC5wYWdlWSAtIHRoaXMubGFzdFRvdWNoUG9zaXRpb24ueVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmxhc3RUb3VjaFBvc2l0aW9uLnNldCh0b3VjaC5wYWdlWCwgdG91Y2gucGFnZVkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb2Zmc2V0VGV4dHVyZSh4OiBudW1iZXIsIHk6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZXh0dXJlT2Zmc2V0WCArPSB4ICogKHRoaXMudGV4dHVyZVNjYWxlIC8gMTAwKTtcclxuICAgIHRoaXMudGV4dHVyZU9mZnNldFkgKz0geSAqICh0aGlzLnRleHR1cmVTY2FsZSAvIDEwMCk7XHJcbiAgICB0aGlzLnRleHR1cmUub2Zmc2V0ID0gdGhpcy5nZXRUZXh0dXJlT2Zmc2V0KCk7XHJcbiAgICB0aGlzLnRleHR1cmUub2Zmc2V0U2NhbGUgPSB0aGlzLmVkaXRvclNjYWxlO1xyXG4gICAgLy8gdGhpcy5kYW1wU2V0VGV4dHVyZS5lbWl0KHRoaXMudGV4dHVyZSk7XHJcbiAgICB0aGlzLnJlZHJhdygpO1xyXG4gICAgdGhpcy5zZXRUZXh0dXJlLmVtaXQodGhpcy50ZXh0dXJlKTtcclxuICB9XHJcblxyXG4gIG9uUm90YXRpb25DaGFuZ2UodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZXh0dXJlUm90YXRpb25EZWcgPSB0aGlzLmNsYW1wTnVtYmVyKHZhbHVlLCAtMTgwLCAxODApO1xyXG4gICAgdGhpcy50ZXh0dXJlLnJvdGF0aW9uID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKHRoaXMudGV4dHVyZVJvdGF0aW9uRGVnKTtcclxuICAgIC8vIHRoaXMuZGFtcFNldFRleHR1cmUuZW1pdCh0aGlzLnRleHR1cmUpO1xyXG4gICAgdGhpcy5yZWRyYXcoKTtcclxuICAgIHRoaXMuc2V0VGV4dHVyZS5lbWl0KHRoaXMudGV4dHVyZSk7XHJcbiAgfVxyXG5cclxuICBvblNjYWxlQ2hhbmdlKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGV4dHVyZVNjYWxlU2xpZGVyID1cclxuICAgICAgTWF0aC5yb3VuZCgxMDAwICogdGhpcy5jbGFtcE51bWJlcih2YWx1ZSwgLXRoaXMuem9vbVNsaWRlck1heCwgdGhpcy56b29tU2xpZGVyTWF4KSkgLyAxMDAwO1xyXG4gICAgY29uc3Qgb2xkU2NhbGUgPSB0aGlzLnRleHR1cmVTY2FsZSAvIDEwMDtcclxuICAgIGNvbnN0IG1heFpvb20gPSB0aGlzLm1heFpvb21bdGhpcy50ZXh0dXJlLnR5cGVdO1xyXG4gICAgaWYgKHRoaXMudGV4dHVyZVNjYWxlU2xpZGVyID49IDApIHtcclxuICAgICAgdGhpcy50ZXh0dXJlU2NhbGUgPSAobWF4Wm9vbSAtIDEwMCkgLyB0aGlzLnpvb21TbGlkZXJNYXggKiB0aGlzLnRleHR1cmVTY2FsZVNsaWRlciArIDEwMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudGV4dHVyZVNjYWxlID0gKHRoaXMubWluWm9vbSAtIDEwMCkgLyAtdGhpcy56b29tU2xpZGVyTWF4ICogdGhpcy50ZXh0dXJlU2NhbGVTbGlkZXIgKyAxMDA7XHJcbiAgICB9XHJcbiAgICBjb25zdCBuZXdTY2FsZSA9IHRoaXMudGV4dHVyZVNjYWxlIC8gMTAwO1xyXG4gICAgdGhpcy50ZXh0dXJlT2Zmc2V0WCA9ICh0aGlzLnRhcmdldFdpZHRoIC8gMiAtICh0aGlzLnRhcmdldFdpZHRoIC8gMiAtIHRoaXMudGV4dHVyZU9mZnNldFggLyBvbGRTY2FsZSkgKiBuZXdTY2FsZSAvIG9sZFNjYWxlKSAqIG5ld1NjYWxlO1xyXG4gICAgdGhpcy50ZXh0dXJlT2Zmc2V0WSA9ICh0aGlzLnRhcmdldEhlaWdodCAvIDIgLVxyXG4gICAgICAodGhpcy50YXJnZXRIZWlnaHQgLyAyIC0gdGhpcy50ZXh0dXJlT2Zmc2V0WSAvIG9sZFNjYWxlKSAqXHJcbiAgICAgIG5ld1NjYWxlIC8gb2xkU2NhbGUpICogbmV3U2NhbGU7XHJcbiAgICB0aGlzLnRleHR1cmUuc2NhbGUgPSB0aGlzLnRleHR1cmVTY2FsZTtcclxuICAgIHRoaXMudGV4dHVyZS5vZmZzZXQgPSB0aGlzLmdldFRleHR1cmVPZmZzZXQoKTtcclxuICAgIC8vIHRoaXMuZGFtcFNldFRleHR1cmUuZW1pdCh0aGlzLnRleHR1cmUpO1xyXG4gICAgdGhpcy5yZWRyYXcoKTtcclxuICAgIHRoaXMuc2V0VGV4dHVyZS5lbWl0KHRoaXMudGV4dHVyZSk7XHJcbiAgfVxyXG5cclxuICBvblRpbGVTaXplQ2hhbmdlKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGlsZVNpemUgPSBNYXRoLnJvdW5kKDEwMDAgKiB0aGlzLmNsYW1wTnVtYmVyKHZhbHVlLCB0aGlzLnRpbGVTaXplTWluLCB0aGlzLnRpbGVTaXplTWF4KSAvIDEwMDApO1xyXG4gICAgdGhpcy50ZXh0dXJlLnRpbGVTaXplID0gdGhpcy50aWxlU2l6ZSAvIDEwMDtcclxuICAgIC8vIHRoaXMuZGFtcFNldFRleHR1cmUuZW1pdCh0aGlzLnRleHR1cmUpO1xyXG4gICAgdGhpcy5zZXRUZXh0dXJlLmVtaXQodGhpcy50ZXh0dXJlKTtcclxuICB9XHJcblxyXG4gIG9uVGlsZVJvdGF0aW9uQ2hhbmdlKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGlsZVJvdGF0aW9uRGVnID0gdGhpcy5jbGFtcE51bWJlcih2YWx1ZSwgLTE4MCwgMTgwKTtcclxuICAgIHRoaXMudGV4dHVyZS50aWxlUm90YXRpb24gPSBUSFJFRS5NYXRoVXRpbHMuZGVnVG9SYWQodGhpcy50aWxlUm90YXRpb25EZWcpO1xyXG4gICAgLy8gdGhpcy5kYW1wU2V0VGV4dHVyZS5lbWl0KHRoaXMudGV4dHVyZSk7XHJcbiAgICB0aGlzLnNldFRleHR1cmUuZW1pdCh0aGlzLnRleHR1cmUpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdGlsZWRDaGFuZ2VkKG5ld1RpbGVkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnNldFRpbGVkKG5ld1RpbGVkKTtcclxuICAgIHRoaXMudGV4dHVyZS50eXBlID0gdGhpcy50aWxlZCA/IFRleHR1cmVUeXBlLkN1c3RvbVBhdHRlcm4gOiBUZXh0dXJlVHlwZS5JbWFnZTtcclxuICAgIGF3YWl0IHRoaXMuX2xvYWRUZXh0dXJlRGF0YSh0aGlzLnRleHR1cmUpO1xyXG4gICAgLy8gdGhpcy5kYW1wU2V0VGV4dHVyZS5lbWl0KHRoaXMudGV4dHVyZSk7XHJcbiAgICB0aGlzLnNldFRleHR1cmUuZW1pdCh0aGlzLnRleHR1cmUpO1xyXG4gIH1cclxuXHJcbiAgZHJhd1Bob3RvSW1hZ2UoKSB7XHJcbiAgICBjb25zdCBzY2FsZU5vcm0gPSB0aGlzLnRleHR1cmVTY2FsZSAvIDEwMDtcclxuICAgIGNvbnN0IHJvdGF0aW9uUmFkID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKHRoaXMudGV4dHVyZVJvdGF0aW9uRGVnKTtcclxuICAgIGNvbnN0IHRyYW5zWCA9IHRoaXMudGFyZ2V0UG9zWCArIHRoaXMudGV4dHVyZU9mZnNldFggLyBzY2FsZU5vcm0gKyB0aGlzLnRleHR1cmVXaWR0aCAqIHNjYWxlTm9ybSAvIDI7XHJcbiAgICBjb25zdCB0cmFuc1kgPSB0aGlzLnRhcmdldFBvc1kgKyB0aGlzLnRleHR1cmVPZmZzZXRZIC8gc2NhbGVOb3JtICsgdGhpcy50ZXh0dXJlSGVpZ2h0ICogc2NhbGVOb3JtIC8gMjtcclxuICAgIHRoaXMuY29udGV4dC50cmFuc2xhdGUodHJhbnNYLCB0cmFuc1kpO1xyXG4gICAgdGhpcy5jb250ZXh0LnJvdGF0ZShyb3RhdGlvblJhZCk7XHJcbiAgICB0aGlzLmNvbnRleHQuZHJhd0ltYWdlKFxyXG4gICAgICB0aGlzLmltYWdlLFxyXG4gICAgICAtdGhpcy50ZXh0dXJlV2lkdGggKiBzY2FsZU5vcm0gLyAyLFxyXG4gICAgICAtdGhpcy50ZXh0dXJlSGVpZ2h0ICogc2NhbGVOb3JtIC8gMixcclxuICAgICAgdGhpcy50ZXh0dXJlV2lkdGggKiBzY2FsZU5vcm0sXHJcbiAgICAgIHRoaXMudGV4dHVyZUhlaWdodCAqIHNjYWxlTm9ybVxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udGV4dC5yb3RhdGUoLXJvdGF0aW9uUmFkKTtcclxuICAgIHRoaXMuY29udGV4dC50cmFuc2xhdGUoLXRyYW5zWCwgLXRyYW5zWSk7XHJcbiAgfVxyXG5cclxuICBkcmF3QmFzaWNUZXh0dXJlSW1hZ2UoKSB7XHJcbiAgICBpZiAodGhpcy50ZXh0dXJlLnN0cmV0Y2gpIHtcclxuICAgICAgY29uc3QgeE1hcmdpbiA9ICh0aGlzLmVkaXRvcldpZHRoIC0gdGhpcy50YXJnZXRXaWR0aCkgLyAyO1xyXG4gICAgICBjb25zdCB5TWFyZ2luID0gKHRoaXMuZWRpdG9ySGVpZ2h0IC0gdGhpcy50YXJnZXRIZWlnaHQpIC8gMjtcclxuICAgICAgdGhpcy5jb250ZXh0LmRyYXdJbWFnZShcclxuICAgICAgICB0aGlzLmltYWdlLFxyXG4gICAgICAgIHhNYXJnaW4sXHJcbiAgICAgICAgeU1hcmdpbixcclxuICAgICAgICB0aGlzLmVkaXRvcldpZHRoIC0gMiAqIHhNYXJnaW4sXHJcbiAgICAgICAgdGhpcy5lZGl0b3JIZWlnaHQgLSAyICogeU1hcmdpblxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgeE1hcmdpbiA9ICh0aGlzLmVkaXRvcldpZHRoIC0gdGhpcy50ZXh0dXJlV2lkdGgpIC8gMjtcclxuICAgICAgY29uc3QgeU1hcmdpbiA9ICh0aGlzLmVkaXRvckhlaWdodCAtIHRoaXMudGV4dHVyZUhlaWdodCkgLyAyO1xyXG4gICAgICB0aGlzLmNvbnRleHQuZHJhd0ltYWdlKFxyXG4gICAgICAgIHRoaXMuaW1hZ2UsXHJcbiAgICAgICAgeE1hcmdpbixcclxuICAgICAgICB5TWFyZ2luLFxyXG4gICAgICAgIHRoaXMuZWRpdG9yV2lkdGggLSAyICogeE1hcmdpbixcclxuICAgICAgICB0aGlzLmVkaXRvckhlaWdodCAtIDIgKiB5TWFyZ2luXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcmF3Q3VzdG9tVGV4dHVyZUltYWdlKCkge1xyXG4gICAgY29uc3Qgc2NhbGVOb3JtID0gdGhpcy50ZXh0dXJlU2NhbGUgLyAxMDA7XHJcbiAgICBjb25zdCByb3RhdGlvblJhZCA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCh0aGlzLnRleHR1cmVSb3RhdGlvbkRlZyk7XHJcbiAgICBsZXQgdGlsZVJhdGlvO1xyXG4gICAgaWYgKHRoaXMudGV4dHVyZVdpZHRoIDwgdGhpcy50ZXh0dXJlSGVpZ2h0KSB7XHJcbiAgICAgIHRpbGVSYXRpbyA9ICh0aGlzLmVkaXRvcldpZHRoIC0gMiAqIHRoaXMuZWRpdG9yTWFyZ2luKSAvIHRoaXMudGV4dHVyZVdpZHRoO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGlsZVJhdGlvID0gKHRoaXMuZWRpdG9ySGVpZ2h0IC0gMiAqIHRoaXMuZWRpdG9yTWFyZ2luKSAvIHRoaXMudGV4dHVyZUhlaWdodDtcclxuICAgIH1cclxuICAgIGNvbnN0IHRyYW5zWCA9IHRoaXMuZWRpdG9yTWFyZ2luICsgdGhpcy50ZXh0dXJlT2Zmc2V0WCAvIHNjYWxlTm9ybSArIHRoaXMudGV4dHVyZVdpZHRoICogdGlsZVJhdGlvICogc2NhbGVOb3JtIC8gMjtcclxuICAgIGNvbnN0IHRyYW5zWSA9IHRoaXMuZWRpdG9yTWFyZ2luICsgdGhpcy50ZXh0dXJlT2Zmc2V0WSAvIHNjYWxlTm9ybSArIHRoaXMudGV4dHVyZUhlaWdodCAqIHRpbGVSYXRpbyAqIHNjYWxlTm9ybSAvIDI7XHJcbiAgICB0aGlzLmNvbnRleHQudHJhbnNsYXRlKHRyYW5zWCwgdHJhbnNZKTtcclxuICAgIHRoaXMuY29udGV4dC5yb3RhdGUocm90YXRpb25SYWQpO1xyXG4gICAgdGhpcy5jb250ZXh0LmRyYXdJbWFnZShcclxuICAgICAgdGhpcy5pbWFnZSxcclxuICAgICAgLXRoaXMudGV4dHVyZVdpZHRoICogdGlsZVJhdGlvICogc2NhbGVOb3JtIC8gMixcclxuICAgICAgLXRoaXMudGV4dHVyZUhlaWdodCAqIHRpbGVSYXRpbyAqIHNjYWxlTm9ybSAvIDIsXHJcbiAgICAgIHRoaXMudGV4dHVyZVdpZHRoICogdGlsZVJhdGlvICogc2NhbGVOb3JtLFxyXG4gICAgICB0aGlzLnRleHR1cmVIZWlnaHQgKiB0aWxlUmF0aW8gKiBzY2FsZU5vcm1cclxuICAgICk7XHJcbiAgICB0aGlzLmNvbnRleHQucm90YXRlKC1yb3RhdGlvblJhZCk7XHJcbiAgICB0aGlzLmNvbnRleHQudHJhbnNsYXRlKC10cmFuc1gsIC10cmFuc1kpO1xyXG4gIH1cclxuXHJcbiAgZHJhd1RleHR1cmVJbWFnZSgpIHtcclxuICAgIGlmICh0aGlzLnRleHR1cmUpIHtcclxuICAgICAgaWYgKHRoaXMudGV4dHVyZS50eXBlID09PSBUZXh0dXJlVHlwZS5CYXNpYyB8fCB0aGlzLnRleHR1cmUudHlwZSA9PT0gVGV4dHVyZVR5cGUuUEJSKSB7XHJcbiAgICAgICAgdGhpcy5kcmF3QmFzaWNUZXh0dXJlSW1hZ2UoKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnRleHR1cmUudHlwZSA9PT0gVGV4dHVyZVR5cGUuQ3VzdG9tUGF0dGVybikge1xyXG4gICAgICAgIHRoaXMuZHJhd0N1c3RvbVRleHR1cmVJbWFnZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcmF3VGFyZ2V0T3ZlcmxheSgpIHtcclxuICAgIGNvbnN0IHhNYXJnaW4gPSAodGhpcy5lZGl0b3JXaWR0aCAtIHRoaXMudGFyZ2V0V2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IHlNYXJnaW4gPSAodGhpcy5lZGl0b3JIZWlnaHQgLSB0aGlzLnRhcmdldEhlaWdodCkgLyAyO1xyXG5cclxuICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAncmdiYSgwLCAwLCAwLCAwLjQ1KSc7XHJcbiAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy5lZGl0b3JXaWR0aCwgeU1hcmdpbik7XHJcbiAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgeU1hcmdpbiwgeE1hcmdpbiwgdGhpcy50YXJnZXRIZWlnaHQpO1xyXG4gICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KHhNYXJnaW4gKyB0aGlzLnRhcmdldFdpZHRoLCB5TWFyZ2luLCB4TWFyZ2luLCB0aGlzLnRhcmdldEhlaWdodCk7XHJcbiAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgdGhpcy5lZGl0b3JIZWlnaHQgLSB5TWFyZ2luLCB0aGlzLmVkaXRvcldpZHRoLCB5TWFyZ2luKTtcclxuXHJcbiAgICAvLyBjcmVhdGUgdGhlIGJvcmRlclxyXG4gICAgY29uc3QgYm9yZGVyV2lkdGg6IG51bWJlciA9IDE7XHJcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ3JnYmEoMjU1LCAwLCAyNTUsIDEpJztcclxuICAgIHRoaXMuY29udGV4dC5maWxsUmVjdCh4TWFyZ2luLCB5TWFyZ2luLCB0aGlzLnRhcmdldFdpZHRoLCBib3JkZXJXaWR0aCk7XHJcbiAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoeE1hcmdpbiwgeU1hcmdpbiArIGJvcmRlcldpZHRoLCBib3JkZXJXaWR0aCwgdGhpcy50YXJnZXRIZWlnaHQpO1xyXG4gICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KCh4TWFyZ2luICsgdGhpcy50YXJnZXRXaWR0aCkgLSBib3JkZXJXaWR0aCwgeU1hcmdpbiwgYm9yZGVyV2lkdGgsIHRoaXMudGFyZ2V0SGVpZ2h0KTtcclxuICAgIHRoaXMuY29udGV4dC5maWxsUmVjdCh4TWFyZ2luLCB0aGlzLmVkaXRvckhlaWdodCAtIHlNYXJnaW4sIHRoaXMudGFyZ2V0V2lkdGgsIGJvcmRlcldpZHRoKTtcclxuICB9XHJcblxyXG4gIGRyYXdUaWxlT3ZlcmxheSgpIHtcclxuICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAncmdiYSgwLCAwLCAwLCAwLjQ1KSc7XHJcbiAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy5lZGl0b3JXaWR0aCwgdGhpcy5lZGl0b3JNYXJnaW4pO1xyXG4gICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIHRoaXMuZWRpdG9yTWFyZ2luLCB0aGlzLmVkaXRvck1hcmdpbiwgdGhpcy5lZGl0b3JIZWlnaHQgLSAyICogdGhpcy5lZGl0b3JNYXJnaW4pO1xyXG4gICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KFxyXG4gICAgICB0aGlzLmVkaXRvcldpZHRoIC0gdGhpcy5lZGl0b3JNYXJnaW4sIHRoaXMuZWRpdG9yTWFyZ2luLFxyXG4gICAgICB0aGlzLmVkaXRvck1hcmdpbiwgdGhpcy5lZGl0b3JIZWlnaHQgLSAyICogdGhpcy5lZGl0b3JNYXJnaW5cclxuICAgICk7XHJcbiAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgdGhpcy5lZGl0b3JIZWlnaHQgLSB0aGlzLmVkaXRvck1hcmdpbiwgdGhpcy5lZGl0b3JXaWR0aCwgdGhpcy5lZGl0b3JNYXJnaW4pO1xyXG5cclxuICAgIC8vIGNyZWF0ZSB0aGUgYm9yZGVyXHJcbiAgICBjb25zdCBib3JkZXJXaWR0aDogbnVtYmVyID0gMTtcclxuICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSAncmdiYSgyNTUsIDAsIDI1NSwgMSknO1xyXG4gICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KHRoaXMuZWRpdG9yTWFyZ2luLCB0aGlzLmVkaXRvck1hcmdpbiwgdGhpcy5lZGl0b3JXaWR0aCAtICh0aGlzLmVkaXRvck1hcmdpbiAqIDIpLCBib3JkZXJXaWR0aCk7XHJcbiAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QodGhpcy5lZGl0b3JXaWR0aCAtIHRoaXMuZWRpdG9yTWFyZ2luLCB0aGlzLmVkaXRvck1hcmdpbiwgYm9yZGVyV2lkdGgsIHRoaXMuZWRpdG9ySGVpZ2h0IC0gKHRoaXMuZWRpdG9yTWFyZ2luICogMikpO1xyXG4gICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KHRoaXMuZWRpdG9yTWFyZ2luLCB0aGlzLmVkaXRvckhlaWdodCAtIHRoaXMuZWRpdG9yTWFyZ2luLCB0aGlzLmVkaXRvcldpZHRoIC0gKHRoaXMuZWRpdG9yTWFyZ2luICogMikgKyBib3JkZXJXaWR0aCwgYm9yZGVyV2lkdGgpO1xyXG4gICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KHRoaXMuZWRpdG9yTWFyZ2luLCB0aGlzLmVkaXRvck1hcmdpbiwgYm9yZGVyV2lkdGgsIHRoaXMuZWRpdG9ySGVpZ2h0IC0gKHRoaXMuZWRpdG9yTWFyZ2luICogMikpO1xyXG4gIH1cclxuXHJcbiAgcmVkcmF3KGJhY2tncm91bmQ6IHN0cmluZyA9ICcjNjY2NjY2Jykge1xyXG4gICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9IGJhY2tncm91bmQ7XHJcbiAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoLXRoaXMuZWRpdG9yV2lkdGgsIC10aGlzLmVkaXRvckhlaWdodCwgMiAqIHRoaXMuZWRpdG9yV2lkdGgsIDIgKiB0aGlzLmVkaXRvckhlaWdodCk7XHJcbiAgICBpZiAodGhpcy5pbWFnZSkge1xyXG4gICAgICBpZiAodGhpcy50aWxlZCkge1xyXG4gICAgICAgIHRoaXMuZHJhd1RleHR1cmVJbWFnZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLnRleHR1cmUudHlwZSA9PT0gVGV4dHVyZVR5cGUuQ3VzdG9tUGF0dGVybikge1xyXG4gICAgICAgICAgdGhpcy5kcmF3VGlsZU92ZXJsYXkoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5kcmF3UGhvdG9JbWFnZSgpO1xyXG4gICAgICAgIHRoaXMuZHJhd1RhcmdldE92ZXJsYXkoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gVE9ETzogUmVzZXQgZGVmYXVsdCB0ZXh0dXJlIC0gbm90IHdoaXRlXHJcbiAgcmVzZXRUZXh0dXJlKCkge1xyXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcclxuICAgIHRoaXMuc2V0VGV4dHVyZS5lbWl0KDB4ZmZmZmZmKTtcclxuICB9XHJcblxyXG4gIGNsYW1wTnVtYmVyKG51bWJlcjogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KG51bWJlciwgbWluKSwgbWF4KTtcclxuICB9XHJcblxyXG4gIGdldENyb3BwZWRDYW52YXMoKTogc3RyaW5nIHtcclxuXHJcbiAgICB0aGlzLnJlZHJhdygnI2ZmZmZmZicpO1xyXG5cclxuICAgIGxldCBteUNhbnZhcyA9IHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgaWYgKHRoaXMudGV4dHVyZS50eXBlID09PSBUZXh0dXJlVHlwZS5DdXN0b21QYXR0ZXJuKSB7XHJcbiAgICAgIGNvbnN0IHhNYXJnaW4gPSB0aGlzLmVkaXRvck1hcmdpbjtcclxuICAgICAgY29uc3QgeU1hcmdpbiA9IHRoaXMuZWRpdG9yTWFyZ2luO1xyXG4gICAgICBteUNhbnZhcyA9IHRoaXMuY3JvcENhbnZhcyhteUNhbnZhcywgeE1hcmdpbiArIDEsIHlNYXJnaW4gKyAxLCB0aGlzLmVkaXRvcldpZHRoIC0gKDIgKiB0aGlzLmVkaXRvck1hcmdpbikgLSAxLCB0aGlzLmVkaXRvckhlaWdodCAgLSAoMiAqIHRoaXMuZWRpdG9yTWFyZ2luKSAtIDEpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnRleHR1cmUudHlwZSA9PT0gVGV4dHVyZVR5cGUuSW1hZ2UpIHtcclxuICAgICAgY29uc3QgeE1hcmdpbiA9ICh0aGlzLmVkaXRvcldpZHRoIC0gdGhpcy50YXJnZXRXaWR0aCkgLyAyO1xyXG4gICAgICBjb25zdCB5TWFyZ2luID0gKHRoaXMuZWRpdG9ySGVpZ2h0IC0gdGhpcy50YXJnZXRIZWlnaHQpIC8gMjtcclxuICAgICAgbXlDYW52YXMgPSB0aGlzLmNyb3BDYW52YXMobXlDYW52YXMsIHhNYXJnaW4gKyAxLCB5TWFyZ2luICsgMSwgdGhpcy50YXJnZXRXaWR0aCAtIDIsIHRoaXMudGFyZ2V0SGVpZ2h0IC0gMik7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZWRyYXcoKTtcclxuXHJcbiAgICByZXR1cm4gbXlDYW52YXMudG9EYXRhVVJMKCk7XHJcbiAgfVxyXG5cclxuICBjcm9wQ2FudmFzKHNvdXJjZUNhbnZhcywgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTogYW55IHtcclxuICAgIGNvbnN0IGRlc3RDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIGRlc3RDYW52YXMud2lkdGggPSB3aWR0aDtcclxuICAgIGRlc3RDYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgZGVzdENhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmRyYXdJbWFnZShzb3VyY2VDYW52YXMsXHJcbiAgICAgIGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCwgIC8vIHNvdXJjZSByZWN0IHdpdGggY29udGVudCB0byBjcm9wXHJcbiAgICAgIDAsIDAsIHdpZHRoLCBoZWlnaHQpOyAgICAgIC8vIG5ld0NhbnZhcywgc2FtZSBzaXplIGFzIHNvdXJjZSByZWN0XHJcbiAgICByZXR1cm4gZGVzdENhbnZhcztcclxuICB9XHJcbn1cclxuIiwiPHJwLWZpbGUtZHJvcFxyXG4gIFtzaG93RHJhZ0Ryb3BdPVwiKCghY2hhbmdlZFRleHR1cmUgfHwgdGV4dHVyZT8udHlwZSA9PT0gdGV4dHVyZVR5cGUuQmFzaWMpICYmIG9wdGlvbnMgIT09IE9wdGlvbnMuTm9uZSkgfHwgZHJhZ05Ecm9wRW5mb3JjZWRcIlxyXG4gIFtzaG93UmVtb3ZlXT1cImNoYW5nZWRUZXh0dXJlXCJcclxuICAoZmlsZUNvbnRlbnRDaGFuZ2VkKT1cIm9uUGhvdG9EYXRhQ2hhbmdlKCRldmVudClcIlxyXG4gIChyZW1vdmVDbGljayk9XCJoYW5kbGVSZW1vdmVUZXh0dXJlQ2xpY2soJGV2ZW50KVwiXHJcbj5cclxuPC9ycC1maWxlLWRyb3A+XHJcblxyXG48ZGl2IGNsYXNzPVwicmVzaXplLW1lc3NhZ2Utd3JhcHBlclwiICpuZ0lmPVwiaW1hZ2VIYXNCZWVuUmVzaXplZFwiPlxyXG4gIDxzcGFuIGNsYXNzPVwicmVzaXplLW1lc3NhZ2VcIiBbdGV4dENvbnRlbnRdPVwiJ0lNQUdFX1JFU0laRUQnIHwgbG9jYWxpemVcIj48L3NwYW4+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cInBpY3R1cmUtZWRpdG9yXCIgW2hpZGRlbl09XCIhdGV4dHVyZSB8fCAhY2hhbmdlZFRleHR1cmUgfHwgZHJhZ05Ecm9wRW5mb3JjZWRcIj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cInBpY3R1cmUtZWRpdG9yLWNhbnZhc1wiXHJcbiAgICBbaGlkZGVuXT1cIm9wdGlvbnMgPT09IE9wdGlvbnMuTm9uZSB8fCAodGV4dHVyZT8udHlwZSA9PT0gdGV4dHVyZVR5cGUuQmFzaWMpXCJcclxuICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxyXG4gICAgKGRyb3ApPVwib25Ecm9wKCRldmVudClcIlxyXG4gID5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJjYW52YXMtd3JhcHBlclwiXHJcbiAgICAgIGZ4TGF5b3V0PVwiY29sdW1uIGlubGluZVwiXHJcbiAgICAgIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCJcclxuICAgID5cclxuICAgICAgPGNhbnZhcyBbaGlkZGVuXT1cInRleHR1cmUgJiYgdGV4dHVyZS5zdHJldGNoXCIgI2NhbnZhcz48L2NhbnZhcz5cclxuICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwXHJcbiAgICAgICAgKm5nSWY9XCJvcHRpb25zID09PSBPcHRpb25zLkJvdGhcIlxyXG4gICAgICAgIChjaGFuZ2UpPVwidGlsZWRDaGFuZ2VkKCRldmVudC52YWx1ZSA9PT0gJ3RleHR1cmUnKVwiXHJcbiAgICAgICAgW3ZhbHVlXT1cInRpbGVkID8gJ3RleHR1cmUnIDogJ3N0cmV0Y2gnXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZVxyXG4gICAgICAgICAgdmFsdWU9XCJzdHJldGNoXCJcclxuICAgICAgICAgIHRpdGxlPVwie3snUElDVFVSRScgfCBsb2NhbGl6ZX19XCJcclxuICAgICAgICAgIFtjaGVja2VkXT1cIiF0aWxlZFwiPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5waG90b19zaXplX3NlbGVjdF9sYXJnZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIHt7J1NLSU5fRlVMTF9XQUxMJyB8IGxvY2FsaXplfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlXHJcbiAgICAgICAgICB2YWx1ZT1cInRleHR1cmVcIlxyXG4gICAgICAgICAgdGl0bGU9XCJ7eydUSUxFJyB8IGxvY2FsaXplfX1cIlxyXG4gICAgICAgICAgW2NoZWNrZWRdPVwidGlsZWRcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj50ZXh0dXJlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAge3snQ1JFQVRFX1RFWFRVUkUnIHwgbG9jYWxpemV9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwic2xpZGVyc1wiICpuZ0lmPVwidGV4dHVyZT8udHlwZSA9PT0gdGV4dHVyZVR5cGUuQ3VzdG9tUGF0dGVyblxyXG4gICAgfHwgKCh0ZXh0dXJlPy50eXBlID09PSB0ZXh0dXJlVHlwZS5CYXNpYyB8fCB0ZXh0dXJlPy50eXBlID09PSB0ZXh0dXJlVHlwZS5QQlIpXHJcbiAgICAmJiBvcHRpb25zID09PSBPcHRpb25zLk5vbmUpXHJcblwiXHJcbiAgICA+XHJcbiAgICA8cnAtc2xpZGVyLWlucHV0XHJcbiAgICAgIHRpdGxlPVwie3snVElMRV9ST1RBVElPTicgfCBsb2NhbGl6ZX19XCJcclxuICAgICAgbWluPVwiLTE4MFwiXHJcbiAgICAgIG1heD1cIjE4MFwiXHJcbiAgICAgIHN0ZXA9XCIxXCJcclxuICAgICAgW3ZhbHVlXT1cInRpbGVSb3RhdGlvbkRlZ1wiXHJcbiAgICAgIChvbkNoYW5nZSk9XCJvblRpbGVSb3RhdGlvbkNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICA8L3JwLXNsaWRlci1pbnB1dD5cclxuICAgIDxycC1zbGlkZXItaW5wdXRcclxuICAgICAgdGl0bGU9XCJ7eydUSUxFX1NJWkUnIHwgbG9jYWxpemV9fVwiXHJcbiAgICAgIFttaW5dPVwidGlsZVNpemVNaW5cIlxyXG4gICAgICBbbWF4XT1cInRpbGVTaXplTWF4XCJcclxuICAgICAgc3RlcD1cIjAuMVwiXHJcbiAgICAgIFt2YWx1ZV09XCJ0aWxlU2l6ZVwiXHJcbiAgICAgIChvbkNoYW5nZSk9XCJvblRpbGVTaXplQ2hhbmdlKCRldmVudClcIj5cclxuICAgIDwvcnAtc2xpZGVyLWlucHV0PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwic2xpZGVyc1wiICpuZ0lmPVwiIWlzQmFzaWModGV4dHVyZSkgJiYgIWlzUEJSKHRleHR1cmUpXCI+XHJcbiAgICA8cnAtc2xpZGVyLWlucHV0XHJcbiAgICAgIHRpdGxlPVwie3snUk9UQVRJT04nIHwgbG9jYWxpemV9fVwiXHJcbiAgICAgIG1pbj1cIi0xODBcIlxyXG4gICAgICBtYXg9XCIxODBcIlxyXG4gICAgICBzdGVwPVwiMVwiXHJcbiAgICAgIFt2YWx1ZV09XCJ0ZXh0dXJlUm90YXRpb25EZWdcIlxyXG4gICAgICAob25DaGFuZ2UpPVwib25Sb3RhdGlvbkNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICA8L3JwLXNsaWRlci1pbnB1dD5cclxuICAgIDxycC1zbGlkZXItaW5wdXRcclxuICAgICAgdGl0bGU9XCJ7eydaT09NJyB8IGxvY2FsaXplfX1cIlxyXG4gICAgICBbbWluXT1cIi16b29tU2xpZGVyTWF4XCJcclxuICAgICAgW21heF09XCJ6b29tU2xpZGVyTWF4XCJcclxuICAgICAgc3RlcD1cIjAuMVwiXHJcbiAgICAgIFt2YWx1ZV09XCJ0ZXh0dXJlU2NhbGVTbGlkZXJcIlxyXG4gICAgICAob25DaGFuZ2UpPVwib25TY2FsZUNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICA8L3JwLXNsaWRlci1pbnB1dD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLVxyXG4gIDxmb290ZXIgY2xhc3M9XCJwaWN0dXJlLWVkaXRvci1mb290ZXJcIj5cclxuICAgIDxidXR0b24gKm5nSWY9XCJ0ZXh0dXJlPy50eXBlICE9PSBUZXh0dXJlVHlwZS5CYXNpYyB8fCBvcHRpb25zID09PSBPcHRpb25zLk5vbmVcIlxyXG4gICAgICBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJ3YXJuXCJcclxuICAgICAgKGNsaWNrKT1cInJlc2V0VGV4dHVyZSgpXCJcclxuICAgID5cclxuICAgICAge3sgJ1JlbW92ZScgfCBsb2NhbGl6ZSB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9mb290ZXI+XHJcbiAgLS0+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
633
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dHVyZS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9yb29tLXBsYW5uZXIvY29tcG9uZW50cy90ZXh0dXJlLWVkaXRvci90ZXh0dXJlLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3Jvb20tcGxhbm5lci9jb21wb25lbnRzL3RleHR1cmUtZWRpdG9yL3RleHR1cmUtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRS9CLE9BQU8sRUFBQyxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBZ0MsTUFBTSxFQUFpQixTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekksT0FBTyxFQUFDLE9BQU8sRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ2hFLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV2RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDcEUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7Ozs7OztBQUdwRSxNQUFNLENBQU4sSUFBWSxvQkFLWDtBQUxELFdBQVksb0JBQW9CO0lBQzlCLCtEQUFJLENBQUE7SUFDSixpRUFBSyxDQUFBO0lBQ0wsaUVBQUssQ0FBQTtJQUNMLCtEQUFJLENBQUE7QUFDTixDQUFDLEVBTFcsb0JBQW9CLEtBQXBCLG9CQUFvQixRQUsvQjtBQU9ELE1BQU0sT0FBTyxzQkFBc0I7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RCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBQ0QsTUFBTTtzQkFBMUMsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUMxQixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xyXG5cclxuaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge2RlYm91bmNlVGltZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge1RleHR1cmVUeXBlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL21vZGVsL3RleHR1cmUtdHlwZSc7XHJcbmltcG9ydCB7VGV4dHVyZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9tb2RlbC90ZXh0dXJlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHtNYXRlcmlhbFV0aWxzfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3V0aWxzL21hdGVyaWFsLnV0aWxzJztcclxuaW1wb3J0IHtNZXNzYWdlVHlwZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9lbnVtL21lc3NhZ2UtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtNZXNzYWdlQnVzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL21lc3NhZ2UtYnVzLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGVudW0gVGV4dHVyZUVkaXRvck9wdGlvbnMge1xyXG4gIE5vbmUsXHJcbiAgSW1hZ2UsXHJcbiAgVGlsZXMsXHJcbiAgQm90aFxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JwLXRleHR1cmUtZWRpdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dHVyZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RleHR1cmUtZWRpdG9yLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRleHR1cmVFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBwdWJsaWMgcmVhZG9ubHkgdGV4dHVyZVR5cGU6IHR5cGVvZiBUZXh0dXJlVHlwZSA9IFRleHR1cmVUeXBlO1xyXG5cclxuICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnLCB7c3RhdGljOiB0cnVlfSkgZmlsZUlucHV0OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2NhbnZhcycsIHtzdGF0aWM6IHRydWV9KSBjYW52YXM6IEVsZW1lbnRSZWY7XHJcbiAgQElucHV0KCkgd2lkdGg6IG51bWJlcjtcclxuICBASW5wdXQoKSBoZWlnaHQ6IG51bWJlcjtcclxuXHJcbiAgQElucHV0KCkgdGV4dHVyZVBsYW5lO1xyXG4gIEBJbnB1dCgpIHBsYWluVGV4dHVyZTtcclxuICBASW5wdXQoKSBjaGFuZ2VkVGV4dHVyZTogVGV4dHVyZTtcclxuXHJcbiAgQElucHV0KCkgb3B0aW9uczogVGV4dHVyZUVkaXRvck9wdGlvbnM7XHJcbiAgQElucHV0KCkgZHJhZ05Ecm9wRW5mb3JjZWQgPSBmYWxzZTtcclxuICBAT3V0cHV0KCkgc2V0VGV4dHVyZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGV4dHVyZSB8IG51bWJlcj4oKTtcclxuICBAT3V0cHV0KCkgcmVtb3ZlVGV4dHVyZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICBwdWJsaWMgaW1hZ2VIYXNCZWVuUmVzaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9zdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBPcHRpb25zID0gVGV4dHVyZUVkaXRvck9wdGlvbnM7XHJcblxyXG4gIHRleHR1cmU6IFRleHR1cmU7XHJcblxyXG4gIG1vdXNlRG93biA9IGZhbHNlO1xyXG4gIGxhc3RUb3VjaFBvc2l0aW9uOiBUSFJFRS5WZWN0b3IyO1xyXG5cclxuICBlZGl0b3JXaWR0aCA9IDMyMDtcclxuICBlZGl0b3JIZWlnaHQgPSAzMjA7XHJcbiAgZWRpdG9yTWFyZ2luID0gMjA7XHJcbiAgbWluWm9vbSA9IDUwO1xyXG4gIG1heFpvb20gPSB7XHJcbiAgICBbVGV4dHVyZVR5cGUuQmFzaWNdOiA1MDAsXHJcbiAgICBbVGV4dHVyZVR5cGUuSW1hZ2VdOiAyMDAsXHJcbiAgICBbVGV4dHVyZVR5cGUuQ3VzdG9tUGF0dGVybl06IDUwMCxcclxuICAgIFtUZXh0dXJlVHlwZS5QQlJdOiA1MDBcclxuICB9O1xyXG4gIGN1c3RvbVBhdHRlcm5NdWx0aXBsaWVyID0gMC43OTtcclxuICB6b29tU2xpZGVyTWF4ID0gNDtcclxuICBlZGl0b3JSYXRpbyA9IHRoaXMuZWRpdG9yV2lkdGggLyB0aGlzLmVkaXRvckhlaWdodDtcclxuICBlZGl0b3JTY2FsZTogbnVtYmVyO1xyXG5cclxuICB0YXJnZXRXaWR0aDogbnVtYmVyO1xyXG4gIHRhcmdldEhlaWdodDogbnVtYmVyO1xyXG4gIHRhcmdldFBvc1g6IG51bWJlcjtcclxuICB0YXJnZXRQb3NZOiBudW1iZXI7XHJcbiAgdGV4dHVyZVJvdGF0aW9uRGVnOiBudW1iZXI7XHJcbiAgdGV4dHVyZVNjYWxlOiBudW1iZXI7XHJcbiAgdGV4dHVyZVNjYWxlU2xpZGVyOiBudW1iZXI7XHJcbiAgdGlsZVJvdGF0aW9uRGVnID0gMDtcclxuICB0aWxlU2l6ZU1pbiA9IDU7XHJcbiAgdGlsZVNpemVNYXggPSAzMDA7XHJcbiAgdGlsZVNpemUgPSB0aGlzLmVkaXRvcldpZHRoIC0gMiAqIHRoaXMuZWRpdG9yTWFyZ2luO1xyXG4gIHRpbGVUZXh0dXJlUmF0aW86IG51bWJlcjtcclxuICB0ZXh0dXJlT2Zmc2V0WDogbnVtYmVyO1xyXG4gIHRleHR1cmVPZmZzZXRZOiBudW1iZXI7XHJcbiAgdGV4dHVyZVdpZHRoOiBudW1iZXI7XHJcbiAgdGV4dHVyZUhlaWdodDogbnVtYmVyO1xyXG4gIGltYWdlOiBIVE1MSW1hZ2VFbGVtZW50O1xyXG4gIGltZ1JhdGlvOiBudW1iZXI7XHJcbiAgdGFyZ2V0UmF0aW86IG51bWJlcjtcclxuICBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XHJcbiAgZGFtcFNldFRleHR1cmU7XHJcbiAgdGlsZWQ6IGJvb2xlYW47XHJcblxyXG4gIC8vIHByaXZhdGUgX2xvYWRUZXh0dXJlRGF0YTogYW55O1xyXG5cclxuICBjcmVhdGVEYW1wZW5lciA9IGVtaXR0ZXIgPT4ge1xyXG4gICAgY29uc3QgJGRhbXBlbmVyID0gbmV3IFN1YmplY3QoKTtcclxuICAgIGNvbnN0IGRhbXBlbmVyID0gJGRhbXBlbmVyXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxNTApKVxyXG4gICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IGVtaXR0ZXIuZW1pdCh2YWx1ZSkpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZW1pdDogdmFsdWUgPT4ge1xyXG4gICAgICAgIHRoaXMucmVkcmF3KCk7XHJcbiAgICAgICAgJGRhbXBlbmVyLm5leHQodmFsdWUpO1xyXG4gICAgICB9LFxyXG4gICAgICByZWxlYXNlOiAoKSA9PiBkYW1wZW5lci51bnN1YnNjcmliZSgpXHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlQnVzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZSkge1xyXG4gICAgLy8gdGhpcy5kYW1wU2V0VGV4dHVyZSA9IHRoaXMuY3JlYXRlRGFtcGVuZXIodGhpcy5zZXRUZXh0dXJlKTtcclxuICAgIHRoaXMuX3N1YnMucHVzaChcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuQ2hhbmdlVGV4dHVyZSwgKHRleHR1cmUpID0+IHRoaXMuc2V0TmV3VGV4dHVyZSh0ZXh0dXJlKSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0VGlsZWQoZmFsc2UpO1xyXG4gICAgdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC5oZWlnaHQgPSB0aGlzLmVkaXRvckhlaWdodDtcclxuICAgIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQud2lkdGggPSB0aGlzLmVkaXRvcldpZHRoO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKCkgPT4gdGhpcy5vbk1vdXNlRG93bigpKTtcclxuICAgIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICgpID0+IHRoaXMub25Nb3VzZVVwKCkpO1xyXG4gICAgdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBlID0+IHRoaXMub25Nb3VzZU1vdmUoZSkpO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIChlKSA9PiB0aGlzLm9uVG91Y2hTdGFydChlKSk7XHJcbiAgICB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgKCkgPT4gdGhpcy5vblRvdWNoRW5kKCkpO1xyXG4gICAgdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBlID0+IHRoaXMub25Ub3VjaE1vdmUoZSkpO1xyXG5cclxuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVRhcmdldFByb3BzKCk7XHJcbiAgICBpZiAodGhpcy5jaGFuZ2VkVGV4dHVyZSkge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVUZXh0dXJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIC8vIHRoaXMuZGFtcFNldFRleHR1cmUucmVsZWFzZSgpO1xyXG4gICAgdGhpcy5fc3Vicy5mb3JFYWNoKChzKSA9PiB7XHJcbiAgICAgIHMudW5zdWJzY3JpYmUoKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoKSA9PiB0aGlzLm9uTW91c2VEb3duKCkpO1xyXG4gICAgdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgKCkgPT4gdGhpcy5vbk1vdXNlVXAoKSk7XHJcbiAgICB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGUgPT4gdGhpcy5vbk1vdXNlTW92ZShlKSk7XHJcbiAgICB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCAoZSkgPT4gdGhpcy5vblRvdWNoU3RhcnQoZSkpO1xyXG4gICAgdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsICgpID0+IHRoaXMub25Ub3VjaEVuZCgpKTtcclxuICAgIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgZSA9PiB0aGlzLm9uVG91Y2hNb3ZlKGUpKTtcclxuICAgIHRoaXMuY2FudmFzID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5maWxlSW5wdXQgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoIXRoaXMuY29udGV4dCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlcy53aWR0aCB8fCBjaGFuZ2VzLmhlaWdodCkge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVUYXJnZXRQcm9wcygpO1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVUZXh0dXJlKCk7XHJcbiAgICB9XHJcbiAgICAvLyBpZiAoKGNoYW5nZXMuY2hhbmdlZFRleHR1cmUgJiYgY2hhbmdlcy5jaGFuZ2VkVGV4dHVyZS5jdXJyZW50VmFsdWUgJiYgY2hhbmdlcy5jaGFuZ2VkVGV4dHVyZS5jdXJyZW50VmFsdWUudHlwZSAhPT0gVGV4dHVyZVR5cGUuQ3VzdG9tUGF0dGVybilcclxuICAgIC8vICAgfHwgY2hhbmdlcy50ZXh0dXJlUGxhbmUgfHwgY2hhbmdlcy5wbGFpblRleHR1cmUpIHtcclxuICAgIGlmIChjaGFuZ2VzLmNoYW5nZWRUZXh0dXJlIHx8IGNoYW5nZXMudGV4dHVyZVBsYW5lIHx8IGNoYW5nZXMucGxhaW5UZXh0dXJlKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVRleHR1cmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXROZXdUZXh0dXJlKHRleHR1cmU6IFRleHR1cmUpOiB2b2lkIHtcclxuICAgIHRoaXMucGxhaW5UZXh0dXJlID0gdGV4dHVyZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVSZW1vdmVUZXh0dXJlQ2xpY2soZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5pbWFnZUhhc0JlZW5SZXNpemVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnJlbW92ZVRleHR1cmUuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9sb2FkVGV4dHVyZURhdGEodGV4dHVyZTogVGV4dHVyZSwgcmVzaXplOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgc3dpdGNoICh0ZXh0dXJlLnR5cGUpIHtcclxuICAgICAgY2FzZSBUZXh0dXJlVHlwZS5CYXNpYzpcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5sb2FkQmFzaWNUZXh0dXJlRGF0YSh0ZXh0dXJlKTtcclxuICAgICAgY2FzZSBUZXh0dXJlVHlwZS5DdXN0b21QYXR0ZXJuOlxyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9sb2FkQ3VzdG9tVGV4dHVyZURhdGEodGV4dHVyZSk7XHJcbiAgICAgIGNhc2UgVGV4dHVyZVR5cGUuSW1hZ2U6XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubG9hZFBob3RvRGF0YSh0ZXh0dXJlLCByZXNpemUpO1xyXG4gICAgICBjYXNlIFRleHR1cmVUeXBlLlBCUjpcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5sb2FkUEJSVGV4dHVyZURhdGEodGV4dHVyZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBzZXRQaG90b0ltYWdlKGRhdGFVcmw6IHN0cmluZywgcmVzaXplOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgbGV0IHBob3RvSW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQ7XHJcbiAgICB0cnkge1xyXG4gICAgICBwaG90b0ltYWdlID0gYXdhaXQgTWF0ZXJpYWxVdGlscy5Mb2FkSW1hZ2VDYWNoZWQoZGF0YVVybCwgcmVzaXplKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCByZWFkIGltYWdlJywgZXJyb3IpO1xyXG4gICAgICB0aGlzLnNldFRleHR1cmUuZW1pdCgpOyAvLyByb2xsYmFja1xyXG4gICAgICBwaG90b0ltYWdlID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuaW1hZ2UgPSBwaG90b0ltYWdlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRUaWxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy50aWxlZCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbG9hZFBob3RvRGF0YSh0ZXh0dXJlOiBUZXh0dXJlLCByZXNpemU6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBhd2FpdCB0aGlzLnNldFBob3RvSW1hZ2UodGV4dHVyZS5kYXRhLCByZXNpemUpO1xyXG4gICAgaWYgKHRoaXMuaW1hZ2UpIHtcclxuICAgICAgdGV4dHVyZS5kYXRhID0gdGhpcy5pbWFnZS5zcmM7XHJcbiAgICAgIHRoaXMuaW1nUmF0aW8gPSB0aGlzLmltYWdlLndpZHRoIC8gdGhpcy5pbWFnZS5oZWlnaHQ7XHJcbiAgICAgIGlmICh0aGlzLmltZ1JhdGlvIDwgdGhpcy50YXJnZXRSYXRpbykge1xyXG4gICAgICAgIHRoaXMudGV4dHVyZVdpZHRoID0gdGhpcy50YXJnZXRXaWR0aDtcclxuICAgICAgICB0aGlzLnRleHR1cmVIZWlnaHQgPSB0aGlzLnRleHR1cmVXaWR0aCAvIHRoaXMuaW1nUmF0aW87XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50ZXh0dXJlSGVpZ2h0ID0gdGhpcy50YXJnZXRIZWlnaHQ7XHJcbiAgICAgICAgdGhpcy50ZXh0dXJlV2lkdGggPSB0aGlzLnRleHR1cmVIZWlnaHQgKiB0aGlzLmltZ1JhdGlvO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVRleHR1cmVQcm9wcyh0ZXh0dXJlKTtcclxuICAgICAgdGhpcy5zZXRUaWxlZChmYWxzZSk7XHJcbiAgICAgIHRoaXMucmVkcmF3KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9zZXRUZXh0dXJlSW1hZ2UoZGF0YVVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgdGV4dHVyZUltYWdlOiBIVE1MSW1hZ2VFbGVtZW50O1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGV4dHVyZUltYWdlID0gYXdhaXQgTWF0ZXJpYWxVdGlscy5Mb2FkSW1hZ2VDYWNoZWQoZGF0YVVybCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3QgcmVhZCBpbWFnZScsIGVycm9yKTtcclxuICAgICAgdGhpcy5zZXRUZXh0dXJlLmVtaXQoKTsgLy8gcm9sbGJhY2tcclxuICAgICAgdGV4dHVyZUltYWdlID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuaW1hZ2UgPSB0ZXh0dXJlSW1hZ2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9sb2FkQ3VzdG9tVGV4dHVyZURhdGEodGV4dHVyZTogVGV4dHVyZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gY2xlYXJUaW1lb3V0KHRoaXMuX2xvYWRUZXh0dXJlRGF0YSk7XHJcbiAgICAvLyB0aGlzLl9sb2FkVGV4dHVyZURhdGEgPSBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuICAgIGF3YWl0IHRoaXMuX3NldFRleHR1cmVJbWFnZSh0ZXh0dXJlLmRhdGEpO1xyXG4gICAgaWYgKHRoaXMuaW1hZ2UpIHtcclxuICAgICAgdGhpcy5pbWdSYXRpbyA9IHRoaXMuaW1hZ2Uud2lkdGggLyB0aGlzLmltYWdlLmhlaWdodDtcclxuICAgICAgdGhpcy50aWxlU2l6ZSA9IHRleHR1cmUudGlsZVNpemUgKiAxMDA7XHJcbiAgICAgIGlmICh0aGlzLmltZ1JhdGlvIDwgMSkge1xyXG4gICAgICAgIHRoaXMudGV4dHVyZVdpZHRoID0gdGhpcy5pbWFnZS53aWR0aDtcclxuICAgICAgICB0aGlzLnRleHR1cmVIZWlnaHQgPSB0aGlzLnRleHR1cmVXaWR0aCAvIHRoaXMuaW1nUmF0aW87XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50ZXh0dXJlSGVpZ2h0ID0gdGhpcy5pbWFnZS5oZWlnaHQ7XHJcbiAgICAgICAgdGhpcy50ZXh0dXJlV2lkdGggPSB0aGlzLnRleHR1cmVIZWlnaHQgKiB0aGlzLmltZ1JhdGlvO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVRleHR1cmVQcm9wcyh0ZXh0dXJlKTtcclxuICAgICAgdGhpcy5zZXRUaWxlZCh0cnVlKTtcclxuICAgICAgdGhpcy5yZWRyYXcoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGxvYWRCYXNpY1RleHR1cmVEYXRhKHRleHR1cmU6IFRleHR1cmUpIHtcclxuICAgIC8vIGNsZWFyVGltZW91dCh0aGlzLl9sb2FkVGV4dHVyZURhdGEpO1xyXG4gICAgLy8gdGhpcy5fbG9hZFRleHR1cmVEYXRhID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICBhd2FpdCB0aGlzLl9zZXRUZXh0dXJlSW1hZ2UodGV4dHVyZS51cmwpO1xyXG4gICAgaWYgKHRoaXMuaW1hZ2UpIHtcclxuICAgICAgdGhpcy5pbWdSYXRpbyA9IHRoaXMuaW1hZ2Uud2lkdGggLyB0aGlzLmltYWdlLmhlaWdodDtcclxuICAgICAgaWYgKHRoaXMuaW1nUmF0aW8gPCB0aGlzLnRhcmdldFJhdGlvKSB7XHJcbiAgICAgICAgdGhpcy50ZXh0dXJlV2lkdGggPSB0aGlzLnRhcmdldFdpZHRoO1xyXG4gICAgICAgIHRoaXMudGV4dHVyZUhlaWdodCA9IHRoaXMudGV4dHVyZVdpZHRoIC8gdGhpcy5pbWdSYXRpbztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRleHR1cmVIZWlnaHQgPSB0aGlzLnRhcmdldEhlaWdodDtcclxuICAgICAgICB0aGlzLnRleHR1cmVXaWR0aCA9IHRoaXMudGV4dHVyZUhlaWdodCAqIHRoaXMuaW1nUmF0aW87XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbml0aWFsaXplVGV4dHVyZVByb3BzKHRleHR1cmUpO1xyXG4gICAgICB0aGlzLnNldFRpbGVkKHRydWUpO1xyXG4gICAgICB0aGlzLnJlZHJhdygpO1xyXG4gICAgfVxyXG4gICAgLy8gfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGxvYWRQQlJUZXh0dXJlRGF0YSh0ZXh0dXJlOiBUZXh0dXJlKSB7XHJcbiAgICAvLyBjbGVhclRpbWVvdXQodGhpcy5fbG9hZFRleHR1cmVEYXRhKTtcclxuICAgIC8vIHRoaXMuX2xvYWRUZXh0dXJlRGF0YSA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgYXdhaXQgdGhpcy5fc2V0VGV4dHVyZUltYWdlKHRleHR1cmUudXJsKTtcclxuICAgIGlmICh0aGlzLmltYWdlKSB7XHJcbiAgICAgIHRoaXMuaW1nUmF0aW8gPSB0aGlzLmltYWdlLndpZHRoIC8gdGhpcy5pbWFnZS5oZWlnaHQ7XHJcbiAgICAgIGlmICh0aGlzLmltZ1JhdGlvIDwgdGhpcy50YXJnZXRSYXRpbykge1xyXG4gICAgICAgIHRoaXMudGV4dHVyZVdpZHRoID0gdGhpcy50YXJnZXRXaWR0aDtcclxuICAgICAgICB0aGlzLnRleHR1cmVIZWlnaHQgPSB0aGlzLnRleHR1cmVXaWR0aCAvIHRoaXMuaW1nUmF0aW87XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50ZXh0dXJlSGVpZ2h0ID0gdGhpcy50YXJnZXRIZWlnaHQ7XHJcbiAgICAgICAgdGhpcy50ZXh0dXJlV2lkdGggPSB0aGlzLnRleHR1cmVIZWlnaHQgKiB0aGlzLmltZ1JhdGlvO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVRleHR1cmVQcm9wcyh0ZXh0dXJlKTtcclxuICAgICAgdGhpcy5zZXRUaWxlZCh0cnVlKTtcclxuICAgICAgdGhpcy5yZWRyYXcoKTtcclxuICAgIH1cclxuICAgIC8vIH0sIDIwMCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbml0aWFsaXplVGV4dHVyZSgpIHtcclxuICAgIGxldCB0ZXh0dXJlOiBUZXh0dXJlO1xyXG4gICAgaWYgKHRoaXMudGV4dHVyZVBsYW5lICYmIHRoaXMudGV4dHVyZVBsYW5lLmdldFRleHR1cmUoKSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRleHR1cmUgPSB0aGlzLnRleHR1cmVQbGFuZS5nZXRUZXh0dXJlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0ZXh0dXJlID0gdGhpcy5wbGFpblRleHR1cmU7XHJcbiAgICB9XHJcbiAgICBpZiAodGV4dHVyZSkge1xyXG4gICAgICBhd2FpdCB0aGlzLl9sb2FkVGV4dHVyZURhdGEodGV4dHVyZSwgZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZVRleHR1cmVQcm9wcyh0ZXh0dXJlOiBUZXh0dXJlKSB7XHJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xyXG4gICAgY29uc3QgbWF4Wm9vbSA9IHRoaXMubWF4Wm9vbVt0ZXh0dXJlLnR5cGVdO1xyXG4gICAgdGhpcy50ZXh0dXJlU2NhbGUgPSB0ZXh0dXJlLnNjYWxlIHx8IDEwMDtcclxuICAgIHRoaXMudGV4dHVyZVNjYWxlU2xpZGVyID0gdGhpcy50ZXh0dXJlU2NhbGUgPiAxMDAgP1xyXG4gICAgICAodGhpcy50ZXh0dXJlU2NhbGUgLSAxMDApICogdGhpcy56b29tU2xpZGVyTWF4IC8gKG1heFpvb20gLSAxMDApXHJcbiAgICAgIDogLSh0aGlzLnRleHR1cmVTY2FsZSAtIDEwMCkgKiB0aGlzLnpvb21TbGlkZXJNYXggLyAodGhpcy5taW5ab29tIC0gMTAwKTtcclxuICAgIHRoaXMudGV4dHVyZVJvdGF0aW9uRGVnID0gTWF0aC5yb3VuZChUSFJFRS5NYXRoVXRpbHMucmFkVG9EZWcodGV4dHVyZS5yb3RhdGlvbiB8fCAwKSk7XHJcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHRleHR1cmUudGlsZVNpemUpKSB7XHJcbiAgICAgIHRoaXMudGlsZVNpemUgPSB0ZXh0dXJlLnRpbGVTaXplICogMTAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGV4dHVyZS50aWxlU2l6ZSA9IHRoaXMudGlsZVNpemUgLyAxMDA7XHJcbiAgICB9XHJcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHRleHR1cmUudGlsZVJvdGF0aW9uKSkge1xyXG4gICAgICB0aGlzLnRpbGVSb3RhdGlvbkRlZyA9IE1hdGgucm91bmQoVEhSRUUuTWF0aFV0aWxzLnJhZFRvRGVnKHRleHR1cmUudGlsZVJvdGF0aW9uKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0ZXh0dXJlLnRpbGVSb3RhdGlvbiA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCh0aGlzLnRpbGVSb3RhdGlvbkRlZyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGV4dHVyZS50eXBlID09PSBUZXh0dXJlVHlwZS5DdXN0b21QYXR0ZXJuKSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yU2NhbGUgPSBNYXRoLm1pbih0aGlzLmltYWdlLndpZHRoLCB0aGlzLmltYWdlLmhlaWdodCkgLyB0aGlzLnRhcmdldFdpZHRoO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lZGl0b3JTY2FsZSA9IHRoaXMud2lkdGggLyB0aGlzLnRhcmdldFdpZHRoO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2Zmc2V0ID0gdGV4dHVyZS5vZmZzZXQgfHwgbmV3IFRIUkVFLlZlY3RvcjIoKTtcclxuICAgIHRoaXMudGV4dHVyZU9mZnNldFggPSBvZmZzZXQueCAvIHRoaXMuZWRpdG9yU2NhbGU7XHJcbiAgICB0aGlzLnRleHR1cmVPZmZzZXRZID0gb2Zmc2V0LnkgLyB0aGlzLmVkaXRvclNjYWxlO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZVRhcmdldFByb3BzKCkge1xyXG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZSh0aGlzLndpZHRoKSAmJiBOdW1iZXIuaXNGaW5pdGUodGhpcy5oZWlnaHQpKSB7XHJcbiAgICAgIHRoaXMudGFyZ2V0UmF0aW8gPSB0aGlzLndpZHRoIC8gdGhpcy5oZWlnaHQ7XHJcbiAgICAgIGlmICh0aGlzLnRhcmdldFJhdGlvID4gdGhpcy5lZGl0b3JSYXRpbykge1xyXG4gICAgICAgIHRoaXMudGFyZ2V0V2lkdGggPSB0aGlzLmVkaXRvcldpZHRoIC0gMiAqIHRoaXMuZWRpdG9yTWFyZ2luO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0SGVpZ2h0ID0gdGhpcy50YXJnZXRXaWR0aCAvIHRoaXMudGFyZ2V0UmF0aW87XHJcbiAgICAgICAgdGhpcy50YXJnZXRQb3NYID0gdGhpcy5lZGl0b3JNYXJnaW47XHJcbiAgICAgICAgdGhpcy50YXJnZXRQb3NZID0gKHRoaXMuZWRpdG9ySGVpZ2h0IC0gdGhpcy50YXJnZXRIZWlnaHQpIC8gMjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRhcmdldEhlaWdodCA9IHRoaXMuZWRpdG9ySGVpZ2h0IC0gMiAqIHRoaXMuZWRpdG9yTWFyZ2luO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0V2lkdGggPSB0aGlzLnRhcmdldEhlaWdodCAqIHRoaXMudGFyZ2V0UmF0aW87XHJcbiAgICAgICAgdGhpcy50YXJnZXRQb3NYID0gKHRoaXMuZWRpdG9yV2lkdGggLSB0aGlzLnRhcmdldFdpZHRoKSAvIDI7XHJcbiAgICAgICAgdGhpcy50YXJnZXRQb3NZID0gdGhpcy5lZGl0b3JNYXJnaW47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTW91c2VEb3duKCkge1xyXG4gICAgdGhpcy5tb3VzZURvd24gPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb25Ub3VjaFN0YXJ0KGV2ZW50OiBUb3VjaEV2ZW50KSB7XHJcbiAgICB0aGlzLm1vdXNlRG93biA9IHRydWU7XHJcbiAgICBjb25zdCB0b3VjaCA9IGV2ZW50LnRvdWNoZXNbMF07XHJcbiAgICBpZiAodG91Y2gpIHtcclxuICAgICAgdGhpcy5sYXN0VG91Y2hQb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IyKHRvdWNoLnBhZ2VYLCB0b3VjaC5wYWdlWSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlVXAoKSB7XHJcbiAgICB0aGlzLm1vdXNlRG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25Ub3VjaEVuZCgpIHtcclxuICAgIHRoaXMubW91c2VEb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmxhc3RUb3VjaFBvc2l0aW9uID0gbnVsbDtcclxuICB9XHJcblxyXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBsZXQgZmlsZTogRmlsZTtcclxuICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIuaXRlbXMpIHtcclxuICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlci5pdGVtc1swXS5raW5kID09PSAnZmlsZScpIHtcclxuICAgICAgICBmaWxlID0gZXZlbnQuZGF0YVRyYW5zZmVyLml0ZW1zWzBdLmdldEFzRmlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmaWxlID0gZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRhdGE6IEhUTUxJbWFnZUVsZW1lbnQgPSBhd2FpdCBNYXRlcmlhbFV0aWxzLlJlYWRBbmRSZXNpemVQaG90b0FzRGF0YVVSTChmaWxlKTtcclxuICAgIHRoaXMub25QaG90b0RhdGFDaGFuZ2Uoe2RhdGE6IGRhdGEuc3JjLCBmaWxlTmFtZTogZmlsZS5uYW1lLCByZXNpemVkOiBmYWxzZX0pO1xyXG4gIH1cclxuXHJcbiAgaXNCYXNpYyh0ZXh0dXJlOiBUZXh0dXJlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGV4dHVyZSAmJiB0ZXh0dXJlLnR5cGUgPT09IFRleHR1cmVUeXBlLkJhc2ljO1xyXG4gIH1cclxuXHJcbiAgaXNQQlIodGV4dHVyZTogVGV4dHVyZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRleHR1cmUgJiYgdGV4dHVyZS50eXBlID09PSBUZXh0dXJlVHlwZS5QQlI7XHJcbiAgfVxyXG5cclxuICBpc1RpbGUodGV4dHVyZTogVGV4dHVyZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRleHR1cmUgJiYgIXRleHR1cmUuc3RyZXRjaCAmJlxyXG4gICAgICAodGV4dHVyZS50eXBlID09PSBUZXh0dXJlVHlwZS5DdXN0b21QYXR0ZXJuIHx8XHJcbiAgICAgICAgdGV4dHVyZS50eXBlID09PSBUZXh0dXJlVHlwZS5CYXNpYyk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXh0dXJlT2Zmc2V0KCk6IFRIUkVFLlZlY3RvcjIge1xyXG4gICAgY29uc3Qgb2Zmc2V0ID0gbmV3IFRIUkVFLlZlY3RvcjIodGhpcy50ZXh0dXJlT2Zmc2V0WCwgdGhpcy50ZXh0dXJlT2Zmc2V0WSk7XHJcbiAgICByZXR1cm4gb2Zmc2V0Lm11bHRpcGx5U2NhbGFyKHRoaXMuZWRpdG9yU2NhbGUpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25QaG90b0RhdGFDaGFuZ2Uoe2RhdGEsIGZpbGVOYW1lLCByZXNpemVkfTogeyBkYXRhOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIHJlc2l6ZWQ6IGJvb2xlYW4gfSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5pbWFnZUhhc0JlZW5SZXNpemVkID0gZmFsc2U7XHJcbiAgICBjb25zdCB0ZXh0dXJlID0gbmV3IFRleHR1cmUoKTtcclxuICAgIHRleHR1cmUubmFtZSA9IGZpbGVOYW1lO1xyXG4gICAgdGV4dHVyZS5kYXRhID0gZGF0YTtcclxuICAgIHRleHR1cmUub2Zmc2V0ID0gbmV3IFRIUkVFLlZlY3RvcjIoKTtcclxuICAgIHRleHR1cmUuc2NhbGUgPSAxMDA7XHJcbiAgICB0ZXh0dXJlLnJvdGF0aW9uID0gMDtcclxuICAgIHRleHR1cmUudGlsZVNpemUgPSAxO1xyXG4gICAgdGV4dHVyZS50aWxlUm90YXRpb24gPSAwO1xyXG4gICAgdGV4dHVyZS50eXBlID0gdGhpcy50aWxlZCA/IFRleHR1cmVUeXBlLkN1c3RvbVBhdHRlcm4gOiBUZXh0dXJlVHlwZS5JbWFnZTtcclxuICAgIGF3YWl0IHRoaXMuX2xvYWRUZXh0dXJlRGF0YShUZXh0dXJlLkNyZWF0ZU1vZGVsRnJvbUludGVyZmFjZSh0ZXh0dXJlKSk7XHJcbiAgICAvLyB0aGlzLmRhbXBTZXRUZXh0dXJlLmVtaXQodGV4dHVyZSk7XHJcbiAgICB0aGlzLmltYWdlSGFzQmVlblJlc2l6ZWQgPSByZXNpemVkO1xyXG4gICAgdGhpcy5zZXRUZXh0dXJlLmVtaXQodGV4dHVyZSk7XHJcbiAgICAvLyB0aGlzLnNldE5ld1RleHR1cmUodGV4dHVyZSk7XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlTW92ZShldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKHRoaXMudGV4dHVyZSAmJiB0aGlzLm1vdXNlRG93biAmJiB0aGlzLnRleHR1cmUudHlwZSAhPT0gVGV4dHVyZVR5cGUuQmFzaWMpIHtcclxuICAgICAgdGhpcy5vZmZzZXRUZXh0dXJlKGV2ZW50Lm1vdmVtZW50WCwgZXZlbnQubW92ZW1lbnRZKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uVG91Y2hNb3ZlKGV2ZW50OiBUb3VjaEV2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgY29uc3QgdG91Y2ggPSBldmVudC50b3VjaGVzWzBdO1xyXG4gICAgaWYgKHRvdWNoICYmIHRoaXMubGFzdFRvdWNoUG9zaXRpb24gJiYgdGhpcy50ZXh0dXJlICYmIHRoaXMubW91c2VEb3duICYmIHRoaXMudGV4dHVyZS50eXBlICE9PSBUZXh0dXJlVHlwZS5CYXNpYykge1xyXG4gICAgICB0aGlzLm9mZnNldFRleHR1cmUoXHJcbiAgICAgICAgdG91Y2gucGFnZVggLSB0aGlzLmxhc3RUb3VjaFBvc2l0aW9uLngsXHJcbiAgICAgICAgdG91Y2gucGFnZVkgLSB0aGlzLmxhc3RUb3VjaFBvc2l0aW9uLnlcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5sYXN0VG91Y2hQb3NpdGlvbi5zZXQodG91Y2gucGFnZVgsIHRvdWNoLnBhZ2VZKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9mZnNldFRleHR1cmUoeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcclxuICAgIHRoaXMudGV4dHVyZU9mZnNldFggKz0geCAqICh0aGlzLnRleHR1cmVTY2FsZSAvIDEwMCk7XHJcbiAgICB0aGlzLnRleHR1cmVPZmZzZXRZICs9IHkgKiAodGhpcy50ZXh0dXJlU2NhbGUgLyAxMDApO1xyXG4gICAgdGhpcy50ZXh0dXJlLm9mZnNldCA9IHRoaXMuZ2V0VGV4dHVyZU9mZnNldCgpO1xyXG4gICAgdGhpcy50ZXh0dXJlLm9mZnNldFNjYWxlID0gdGhpcy5lZGl0b3JTY2FsZTtcclxuICAgIC8vIHRoaXMuZGFtcFNldFRleHR1cmUuZW1pdCh0aGlzLnRleHR1cmUpO1xyXG4gICAgdGhpcy5yZWRyYXcoKTtcclxuICAgIHRoaXMuc2V0VGV4dHVyZS5lbWl0KHRoaXMudGV4dHVyZSk7XHJcbiAgfVxyXG5cclxuICBvblJvdGF0aW9uQ2hhbmdlKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGV4dHVyZVJvdGF0aW9uRGVnID0gdGhpcy5jbGFtcE51bWJlcih2YWx1ZSwgLTE4MCwgMTgwKTtcclxuICAgIHRoaXMudGV4dHVyZS5yb3RhdGlvbiA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCh0aGlzLnRleHR1cmVSb3RhdGlvbkRlZyk7XHJcbiAgICAvLyB0aGlzLmRhbXBTZXRUZXh0dXJlLmVtaXQodGhpcy50ZXh0dXJlKTtcclxuICAgIHRoaXMucmVkcmF3KCk7XHJcbiAgICB0aGlzLnNldFRleHR1cmUuZW1pdCh0aGlzLnRleHR1cmUpO1xyXG4gIH1cclxuXHJcbiAgb25TY2FsZUNoYW5nZSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRleHR1cmVTY2FsZVNsaWRlciA9XHJcbiAgICAgIE1hdGgucm91bmQoMTAwMCAqIHRoaXMuY2xhbXBOdW1iZXIodmFsdWUsIC10aGlzLnpvb21TbGlkZXJNYXgsIHRoaXMuem9vbVNsaWRlck1heCkpIC8gMTAwMDtcclxuICAgIGNvbnN0IG9sZFNjYWxlID0gdGhpcy50ZXh0dXJlU2NhbGUgLyAxMDA7XHJcbiAgICBjb25zdCBtYXhab29tID0gdGhpcy5tYXhab29tW3RoaXMudGV4dHVyZS50eXBlXTtcclxuICAgIGlmICh0aGlzLnRleHR1cmVTY2FsZVNsaWRlciA+PSAwKSB7XHJcbiAgICAgIHRoaXMudGV4dHVyZVNjYWxlID0gKG1heFpvb20gLSAxMDApIC8gdGhpcy56b29tU2xpZGVyTWF4ICogdGhpcy50ZXh0dXJlU2NhbGVTbGlkZXIgKyAxMDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRleHR1cmVTY2FsZSA9ICh0aGlzLm1pblpvb20gLSAxMDApIC8gLXRoaXMuem9vbVNsaWRlck1heCAqIHRoaXMudGV4dHVyZVNjYWxlU2xpZGVyICsgMTAwO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbmV3U2NhbGUgPSB0aGlzLnRleHR1cmVTY2FsZSAvIDEwMDtcclxuICAgIHRoaXMudGV4dHVyZU9mZnNldFggPSAodGhpcy50YXJnZXRXaWR0aCAvIDIgLSAodGhpcy50YXJnZXRXaWR0aCAvIDIgLSB0aGlzLnRleHR1cmVPZmZzZXRYIC8gb2xkU2NhbGUpICogbmV3U2NhbGUgLyBvbGRTY2FsZSkgKiBuZXdTY2FsZTtcclxuICAgIHRoaXMudGV4dHVyZU9mZnNldFkgPSAodGhpcy50YXJnZXRIZWlnaHQgLyAyIC1cclxuICAgICAgKHRoaXMudGFyZ2V0SGVpZ2h0IC8gMiAtIHRoaXMudGV4dHVyZU9mZnNldFkgLyBvbGRTY2FsZSkgKlxyXG4gICAgICBuZXdTY2FsZSAvIG9sZFNjYWxlKSAqIG5ld1NjYWxlO1xyXG4gICAgdGhpcy50ZXh0dXJlLnNjYWxlID0gdGhpcy50ZXh0dXJlU2NhbGU7XHJcbiAgICB0aGlzLnRleHR1cmUub2Zmc2V0ID0gdGhpcy5nZXRUZXh0dXJlT2Zmc2V0KCk7XHJcbiAgICAvLyB0aGlzLmRhbXBTZXRUZXh0dXJlLmVtaXQodGhpcy50ZXh0dXJlKTtcclxuICAgIHRoaXMucmVkcmF3KCk7XHJcbiAgICB0aGlzLnNldFRleHR1cmUuZW1pdCh0aGlzLnRleHR1cmUpO1xyXG4gIH1cclxuXHJcbiAgb25UaWxlU2l6ZUNoYW5nZSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRpbGVTaXplID0gTWF0aC5yb3VuZCgxMDAwICogdGhpcy5jbGFtcE51bWJlcih2YWx1ZSwgdGhpcy50aWxlU2l6ZU1pbiwgdGhpcy50aWxlU2l6ZU1heCkgLyAxMDAwKTtcclxuICAgIHRoaXMudGV4dHVyZS50aWxlU2l6ZSA9IHRoaXMudGlsZVNpemUgLyAxMDA7XHJcbiAgICAvLyB0aGlzLmRhbXBTZXRUZXh0dXJlLmVtaXQodGhpcy50ZXh0dXJlKTtcclxuICAgIHRoaXMuc2V0VGV4dHVyZS5lbWl0KHRoaXMudGV4dHVyZSk7XHJcbiAgfVxyXG5cclxuICBvblRpbGVSb3RhdGlvbkNoYW5nZSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRpbGVSb3RhdGlvbkRlZyA9IHRoaXMuY2xhbXBOdW1iZXIodmFsdWUsIC0xODAsIDE4MCk7XHJcbiAgICB0aGlzLnRleHR1cmUudGlsZVJvdGF0aW9uID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKHRoaXMudGlsZVJvdGF0aW9uRGVnKTtcclxuICAgIC8vIHRoaXMuZGFtcFNldFRleHR1cmUuZW1pdCh0aGlzLnRleHR1cmUpO1xyXG4gICAgdGhpcy5zZXRUZXh0dXJlLmVtaXQodGhpcy50ZXh0dXJlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHRpbGVkQ2hhbmdlZChuZXdUaWxlZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5zZXRUaWxlZChuZXdUaWxlZCk7XHJcbiAgICB0aGlzLnRleHR1cmUudHlwZSA9IHRoaXMudGlsZWQgPyBUZXh0dXJlVHlwZS5DdXN0b21QYXR0ZXJuIDogVGV4dHVyZVR5cGUuSW1hZ2U7XHJcbiAgICBhd2FpdCB0aGlzLl9sb2FkVGV4dHVyZURhdGEodGhpcy50ZXh0dXJlKTtcclxuICAgIC8vIHRoaXMuZGFtcFNldFRleHR1cmUuZW1pdCh0aGlzLnRleHR1cmUpO1xyXG4gICAgdGhpcy5zZXRUZXh0dXJlLmVtaXQodGhpcy50ZXh0dXJlKTtcclxuICB9XHJcblxyXG4gIGRyYXdQaG90b0ltYWdlKCkge1xyXG4gICAgY29uc3Qgc2NhbGVOb3JtID0gdGhpcy50ZXh0dXJlU2NhbGUgLyAxMDA7XHJcbiAgICBjb25zdCByb3RhdGlvblJhZCA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCh0aGlzLnRleHR1cmVSb3RhdGlvbkRlZyk7XHJcbiAgICBjb25zdCB0cmFuc1ggPSB0aGlzLnRhcmdldFBvc1ggKyB0aGlzLnRleHR1cmVPZmZzZXRYIC8gc2NhbGVOb3JtICsgdGhpcy50ZXh0dXJlV2lkdGggKiBzY2FsZU5vcm0gLyAyO1xyXG4gICAgY29uc3QgdHJhbnNZID0gdGhpcy50YXJnZXRQb3NZICsgdGhpcy50ZXh0dXJlT2Zmc2V0WSAvIHNjYWxlTm9ybSArIHRoaXMudGV4dHVyZUhlaWdodCAqIHNjYWxlTm9ybSAvIDI7XHJcbiAgICB0aGlzLmNvbnRleHQudHJhbnNsYXRlKHRyYW5zWCwgdHJhbnNZKTtcclxuICAgIHRoaXMuY29udGV4dC5yb3RhdGUocm90YXRpb25SYWQpO1xyXG4gICAgdGhpcy5jb250ZXh0LmRyYXdJbWFnZShcclxuICAgICAgdGhpcy5pbWFnZSxcclxuICAgICAgLXRoaXMudGV4dHVyZVdpZHRoICogc2NhbGVOb3JtIC8gMixcclxuICAgICAgLXRoaXMudGV4dHVyZUhlaWdodCAqIHNjYWxlTm9ybSAvIDIsXHJcbiAgICAgIHRoaXMudGV4dHVyZVdpZHRoICogc2NhbGVOb3JtLFxyXG4gICAgICB0aGlzLnRleHR1cmVIZWlnaHQgKiBzY2FsZU5vcm1cclxuICAgICk7XHJcbiAgICB0aGlzLmNvbnRleHQucm90YXRlKC1yb3RhdGlvblJhZCk7XHJcbiAgICB0aGlzLmNvbnRleHQudHJhbnNsYXRlKC10cmFuc1gsIC10cmFuc1kpO1xyXG4gIH1cclxuXHJcbiAgZHJhd0Jhc2ljVGV4dHVyZUltYWdlKCkge1xyXG4gICAgaWYgKHRoaXMudGV4dHVyZS5zdHJldGNoKSB7XHJcbiAgICAgIGNvbnN0IHhNYXJnaW4gPSAodGhpcy5lZGl0b3JXaWR0aCAtIHRoaXMudGFyZ2V0V2lkdGgpIC8gMjtcclxuICAgICAgY29uc3QgeU1hcmdpbiA9ICh0aGlzLmVkaXRvckhlaWdodCAtIHRoaXMudGFyZ2V0SGVpZ2h0KSAvIDI7XHJcbiAgICAgIHRoaXMuY29udGV4dC5kcmF3SW1hZ2UoXHJcbiAgICAgICAgdGhpcy5pbWFnZSxcclxuICAgICAgICB4TWFyZ2luLFxyXG4gICAgICAgIHlNYXJnaW4sXHJcbiAgICAgICAgdGhpcy5lZGl0b3JXaWR0aCAtIDIgKiB4TWFyZ2luLFxyXG4gICAgICAgIHRoaXMuZWRpdG9ySGVpZ2h0IC0gMiAqIHlNYXJnaW5cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHhNYXJnaW4gPSAodGhpcy5lZGl0b3JXaWR0aCAtIHRoaXMudGV4dHVyZVdpZHRoKSAvIDI7XHJcbiAgICAgIGNvbnN0IHlNYXJnaW4gPSAodGhpcy5lZGl0b3JIZWlnaHQgLSB0aGlzLnRleHR1cmVIZWlnaHQpIC8gMjtcclxuICAgICAgdGhpcy5jb250ZXh0LmRyYXdJbWFnZShcclxuICAgICAgICB0aGlzLmltYWdlLFxyXG4gICAgICAgIHhNYXJnaW4sXHJcbiAgICAgICAgeU1hcmdpbixcclxuICAgICAgICB0aGlzLmVkaXRvcldpZHRoIC0gMiAqIHhNYXJnaW4sXHJcbiAgICAgICAgdGhpcy5lZGl0b3JIZWlnaHQgLSAyICogeU1hcmdpblxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZHJhd0N1c3RvbVRleHR1cmVJbWFnZSgpIHtcclxuICAgIGNvbnN0IHNjYWxlTm9ybSA9IHRoaXMudGV4dHVyZVNjYWxlIC8gMTAwO1xyXG4gICAgY29uc3Qgcm90YXRpb25SYWQgPSBUSFJFRS5NYXRoVXRpbHMuZGVnVG9SYWQodGhpcy50ZXh0dXJlUm90YXRpb25EZWcpO1xyXG4gICAgbGV0IHRpbGVSYXRpbztcclxuICAgIGlmICh0aGlzLnRleHR1cmVXaWR0aCA8IHRoaXMudGV4dHVyZUhlaWdodCkge1xyXG4gICAgICB0aWxlUmF0aW8gPSAodGhpcy5lZGl0b3JXaWR0aCAtIDIgKiB0aGlzLmVkaXRvck1hcmdpbikgLyB0aGlzLnRleHR1cmVXaWR0aDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRpbGVSYXRpbyA9ICh0aGlzLmVkaXRvckhlaWdodCAtIDIgKiB0aGlzLmVkaXRvck1hcmdpbikgLyB0aGlzLnRleHR1cmVIZWlnaHQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCB0cmFuc1ggPSB0aGlzLmVkaXRvck1hcmdpbiArIHRoaXMudGV4dHVyZU9mZnNldFggLyBzY2FsZU5vcm0gKyB0aGlzLnRleHR1cmVXaWR0aCAqIHRpbGVSYXRpbyAqIHNjYWxlTm9ybSAvIDI7XHJcbiAgICBjb25zdCB0cmFuc1kgPSB0aGlzLmVkaXRvck1hcmdpbiArIHRoaXMudGV4dHVyZU9mZnNldFkgLyBzY2FsZU5vcm0gKyB0aGlzLnRleHR1cmVIZWlnaHQgKiB0aWxlUmF0aW8gKiBzY2FsZU5vcm0gLyAyO1xyXG4gICAgdGhpcy5jb250ZXh0LnRyYW5zbGF0ZSh0cmFuc1gsIHRyYW5zWSk7XHJcbiAgICB0aGlzLmNvbnRleHQucm90YXRlKHJvdGF0aW9uUmFkKTtcclxuICAgIHRoaXMuY29udGV4dC5kcmF3SW1hZ2UoXHJcbiAgICAgIHRoaXMuaW1hZ2UsXHJcbiAgICAgIC10aGlzLnRleHR1cmVXaWR0aCAqIHRpbGVSYXRpbyAqIHNjYWxlTm9ybSAvIDIsXHJcbiAgICAgIC10aGlzLnRleHR1cmVIZWlnaHQgKiB0aWxlUmF0aW8gKiBzY2FsZU5vcm0gLyAyLFxyXG4gICAgICB0aGlzLnRleHR1cmVXaWR0aCAqIHRpbGVSYXRpbyAqIHNjYWxlTm9ybSxcclxuICAgICAgdGhpcy50ZXh0dXJlSGVpZ2h0ICogdGlsZVJhdGlvICogc2NhbGVOb3JtXHJcbiAgICApO1xyXG4gICAgdGhpcy5jb250ZXh0LnJvdGF0ZSgtcm90YXRpb25SYWQpO1xyXG4gICAgdGhpcy5jb250ZXh0LnRyYW5zbGF0ZSgtdHJhbnNYLCAtdHJhbnNZKTtcclxuICB9XHJcblxyXG4gIGRyYXdUZXh0dXJlSW1hZ2UoKSB7XHJcbiAgICBpZiAodGhpcy50ZXh0dXJlKSB7XHJcbiAgICAgIGlmICh0aGlzLnRleHR1cmUudHlwZSA9PT0gVGV4dHVyZVR5cGUuQmFzaWMgfHwgdGhpcy50ZXh0dXJlLnR5cGUgPT09IFRleHR1cmVUeXBlLlBCUikge1xyXG4gICAgICAgIHRoaXMuZHJhd0Jhc2ljVGV4dHVyZUltYWdlKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50ZXh0dXJlLnR5cGUgPT09IFRleHR1cmVUeXBlLkN1c3RvbVBhdHRlcm4pIHtcclxuICAgICAgICB0aGlzLmRyYXdDdXN0b21UZXh0dXJlSW1hZ2UoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZHJhd1RhcmdldE92ZXJsYXkoKSB7XHJcbiAgICBjb25zdCB4TWFyZ2luID0gKHRoaXMuZWRpdG9yV2lkdGggLSB0aGlzLnRhcmdldFdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCB5TWFyZ2luID0gKHRoaXMuZWRpdG9ySGVpZ2h0IC0gdGhpcy50YXJnZXRIZWlnaHQpIC8gMjtcclxuXHJcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ3JnYmEoMCwgMCwgMCwgMC40NSknO1xyXG4gICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuZWRpdG9yV2lkdGgsIHlNYXJnaW4pO1xyXG4gICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIHlNYXJnaW4sIHhNYXJnaW4sIHRoaXMudGFyZ2V0SGVpZ2h0KTtcclxuICAgIHRoaXMuY29udGV4dC5maWxsUmVjdCh4TWFyZ2luICsgdGhpcy50YXJnZXRXaWR0aCwgeU1hcmdpbiwgeE1hcmdpbiwgdGhpcy50YXJnZXRIZWlnaHQpO1xyXG4gICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIHRoaXMuZWRpdG9ySGVpZ2h0IC0geU1hcmdpbiwgdGhpcy5lZGl0b3JXaWR0aCwgeU1hcmdpbik7XHJcblxyXG4gICAgLy8gY3JlYXRlIHRoZSBib3JkZXJcclxuICAgIGNvbnN0IGJvcmRlcldpZHRoOiBudW1iZXIgPSAxO1xyXG4gICAgdGhpcy5jb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKDI1NSwgMCwgMjU1LCAxKSc7XHJcbiAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoeE1hcmdpbiwgeU1hcmdpbiwgdGhpcy50YXJnZXRXaWR0aCwgYm9yZGVyV2lkdGgpO1xyXG4gICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KHhNYXJnaW4sIHlNYXJnaW4gKyBib3JkZXJXaWR0aCwgYm9yZGVyV2lkdGgsIHRoaXMudGFyZ2V0SGVpZ2h0KTtcclxuICAgIHRoaXMuY29udGV4dC5maWxsUmVjdCgoeE1hcmdpbiArIHRoaXMudGFyZ2V0V2lkdGgpIC0gYm9yZGVyV2lkdGgsIHlNYXJnaW4sIGJvcmRlcldpZHRoLCB0aGlzLnRhcmdldEhlaWdodCk7XHJcbiAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoeE1hcmdpbiwgdGhpcy5lZGl0b3JIZWlnaHQgLSB5TWFyZ2luLCB0aGlzLnRhcmdldFdpZHRoLCBib3JkZXJXaWR0aCk7XHJcbiAgfVxyXG5cclxuICBkcmF3VGlsZU92ZXJsYXkoKSB7XHJcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ3JnYmEoMCwgMCwgMCwgMC40NSknO1xyXG4gICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIDAsIHRoaXMuZWRpdG9yV2lkdGgsIHRoaXMuZWRpdG9yTWFyZ2luKTtcclxuICAgIHRoaXMuY29udGV4dC5maWxsUmVjdCgwLCB0aGlzLmVkaXRvck1hcmdpbiwgdGhpcy5lZGl0b3JNYXJnaW4sIHRoaXMuZWRpdG9ySGVpZ2h0IC0gMiAqIHRoaXMuZWRpdG9yTWFyZ2luKTtcclxuICAgIHRoaXMuY29udGV4dC5maWxsUmVjdChcclxuICAgICAgdGhpcy5lZGl0b3JXaWR0aCAtIHRoaXMuZWRpdG9yTWFyZ2luLCB0aGlzLmVkaXRvck1hcmdpbixcclxuICAgICAgdGhpcy5lZGl0b3JNYXJnaW4sIHRoaXMuZWRpdG9ySGVpZ2h0IC0gMiAqIHRoaXMuZWRpdG9yTWFyZ2luXHJcbiAgICApO1xyXG4gICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KDAsIHRoaXMuZWRpdG9ySGVpZ2h0IC0gdGhpcy5lZGl0b3JNYXJnaW4sIHRoaXMuZWRpdG9yV2lkdGgsIHRoaXMuZWRpdG9yTWFyZ2luKTtcclxuXHJcbiAgICAvLyBjcmVhdGUgdGhlIGJvcmRlclxyXG4gICAgY29uc3QgYm9yZGVyV2lkdGg6IG51bWJlciA9IDE7XHJcbiAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJ3JnYmEoMjU1LCAwLCAyNTUsIDEpJztcclxuICAgIHRoaXMuY29udGV4dC5maWxsUmVjdCh0aGlzLmVkaXRvck1hcmdpbiwgdGhpcy5lZGl0b3JNYXJnaW4sIHRoaXMuZWRpdG9yV2lkdGggLSAodGhpcy5lZGl0b3JNYXJnaW4gKiAyKSwgYm9yZGVyV2lkdGgpO1xyXG4gICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KHRoaXMuZWRpdG9yV2lkdGggLSB0aGlzLmVkaXRvck1hcmdpbiwgdGhpcy5lZGl0b3JNYXJnaW4sIGJvcmRlcldpZHRoLCB0aGlzLmVkaXRvckhlaWdodCAtICh0aGlzLmVkaXRvck1hcmdpbiAqIDIpKTtcclxuICAgIHRoaXMuY29udGV4dC5maWxsUmVjdCh0aGlzLmVkaXRvck1hcmdpbiwgdGhpcy5lZGl0b3JIZWlnaHQgLSB0aGlzLmVkaXRvck1hcmdpbiwgdGhpcy5lZGl0b3JXaWR0aCAtICh0aGlzLmVkaXRvck1hcmdpbiAqIDIpICsgYm9yZGVyV2lkdGgsIGJvcmRlcldpZHRoKTtcclxuICAgIHRoaXMuY29udGV4dC5maWxsUmVjdCh0aGlzLmVkaXRvck1hcmdpbiwgdGhpcy5lZGl0b3JNYXJnaW4sIGJvcmRlcldpZHRoLCB0aGlzLmVkaXRvckhlaWdodCAtICh0aGlzLmVkaXRvck1hcmdpbiAqIDIpKTtcclxuICB9XHJcblxyXG4gIHJlZHJhdyhiYWNrZ3JvdW5kOiBzdHJpbmcgPSAnIzY2NjY2NicpIHtcclxuICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBiYWNrZ3JvdW5kO1xyXG4gICAgdGhpcy5jb250ZXh0LmZpbGxSZWN0KC10aGlzLmVkaXRvcldpZHRoLCAtdGhpcy5lZGl0b3JIZWlnaHQsIDIgKiB0aGlzLmVkaXRvcldpZHRoLCAyICogdGhpcy5lZGl0b3JIZWlnaHQpO1xyXG4gICAgaWYgKHRoaXMuaW1hZ2UpIHtcclxuICAgICAgaWYgKHRoaXMudGlsZWQpIHtcclxuICAgICAgICB0aGlzLmRyYXdUZXh0dXJlSW1hZ2UoKTtcclxuICAgICAgICBpZiAodGhpcy50ZXh0dXJlLnR5cGUgPT09IFRleHR1cmVUeXBlLkN1c3RvbVBhdHRlcm4pIHtcclxuICAgICAgICAgIHRoaXMuZHJhd1RpbGVPdmVybGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZHJhd1Bob3RvSW1hZ2UoKTtcclxuICAgICAgICB0aGlzLmRyYXdUYXJnZXRPdmVybGF5KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFRPRE86IFJlc2V0IGRlZmF1bHQgdGV4dHVyZSAtIG5vdCB3aGl0ZVxyXG4gIHJlc2V0VGV4dHVyZSgpIHtcclxuICAgIHRoaXMudGV4dHVyZSA9IG51bGw7XHJcbiAgICB0aGlzLnNldFRleHR1cmUuZW1pdCgweGZmZmZmZik7XHJcbiAgfVxyXG5cclxuICBjbGFtcE51bWJlcihudW1iZXI6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChudW1iZXIsIG1pbiksIG1heCk7XHJcbiAgfVxyXG5cclxuICBnZXRDcm9wcGVkQ2FudmFzKCk6IHN0cmluZyB7XHJcblxyXG4gICAgdGhpcy5yZWRyYXcoJyNmZmZmZmYnKTtcclxuXHJcbiAgICBsZXQgbXlDYW52YXMgPSB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgIGlmICh0aGlzLnRleHR1cmUudHlwZSA9PT0gVGV4dHVyZVR5cGUuQ3VzdG9tUGF0dGVybikge1xyXG4gICAgICBjb25zdCB4TWFyZ2luID0gdGhpcy5lZGl0b3JNYXJnaW47XHJcbiAgICAgIGNvbnN0IHlNYXJnaW4gPSB0aGlzLmVkaXRvck1hcmdpbjtcclxuICAgICAgbXlDYW52YXMgPSB0aGlzLmNyb3BDYW52YXMobXlDYW52YXMsIHhNYXJnaW4gKyAxLCB5TWFyZ2luICsgMSwgdGhpcy5lZGl0b3JXaWR0aCAtICgyICogdGhpcy5lZGl0b3JNYXJnaW4pIC0gMSwgdGhpcy5lZGl0b3JIZWlnaHQgLSAoMiAqIHRoaXMuZWRpdG9yTWFyZ2luKSAtIDEpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnRleHR1cmUudHlwZSA9PT0gVGV4dHVyZVR5cGUuSW1hZ2UpIHtcclxuICAgICAgY29uc3QgeE1hcmdpbiA9ICh0aGlzLmVkaXRvcldpZHRoIC0gdGhpcy50YXJnZXRXaWR0aCkgLyAyO1xyXG4gICAgICBjb25zdCB5TWFyZ2luID0gKHRoaXMuZWRpdG9ySGVpZ2h0IC0gdGhpcy50YXJnZXRIZWlnaHQpIC8gMjtcclxuICAgICAgbXlDYW52YXMgPSB0aGlzLmNyb3BDYW52YXMobXlDYW52YXMsIHhNYXJnaW4gKyAxLCB5TWFyZ2luICsgMSwgdGhpcy50YXJnZXRXaWR0aCAtIDIsIHRoaXMudGFyZ2V0SGVpZ2h0IC0gMik7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZWRyYXcoKTtcclxuXHJcbiAgICByZXR1cm4gbXlDYW52YXMudG9EYXRhVVJMKCk7XHJcbiAgfVxyXG5cclxuICBjcm9wQ2FudmFzKHNvdXJjZUNhbnZhcywgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTogYW55IHtcclxuICAgIGNvbnN0IGRlc3RDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIGRlc3RDYW52YXMud2lkdGggPSB3aWR0aDtcclxuICAgIGRlc3RDYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgZGVzdENhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmRyYXdJbWFnZShzb3VyY2VDYW52YXMsXHJcbiAgICAgIGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCwgIC8vIHNvdXJjZSByZWN0IHdpdGggY29udGVudCB0byBjcm9wXHJcbiAgICAgIDAsIDAsIHdpZHRoLCBoZWlnaHQpOyAgICAgIC8vIG5ld0NhbnZhcywgc2FtZSBzaXplIGFzIHNvdXJjZSByZWN0XHJcbiAgICByZXR1cm4gZGVzdENhbnZhcztcclxuICB9XHJcbn1cclxuIiwiPHJwLWZpbGUtZHJvcFxyXG4gIFtzaG93RHJhZ0Ryb3BdPVwiKCghY2hhbmdlZFRleHR1cmUgfHwgdGV4dHVyZT8udHlwZSA9PT0gdGV4dHVyZVR5cGUuQmFzaWMpICYmIG9wdGlvbnMgIT09IE9wdGlvbnMuTm9uZSkgfHwgZHJhZ05Ecm9wRW5mb3JjZWRcIlxyXG4gIFtzaG93UmVtb3ZlXT1cImNoYW5nZWRUZXh0dXJlXCJcclxuICAoZmlsZUNvbnRlbnRDaGFuZ2VkKT1cIm9uUGhvdG9EYXRhQ2hhbmdlKCRldmVudClcIlxyXG4gIChyZW1vdmVDbGljayk9XCJoYW5kbGVSZW1vdmVUZXh0dXJlQ2xpY2soJGV2ZW50KVwiXHJcbj5cclxuPC9ycC1maWxlLWRyb3A+XHJcblxyXG48ZGl2IGNsYXNzPVwicmVzaXplLW1lc3NhZ2Utd3JhcHBlclwiICpuZ0lmPVwiaW1hZ2VIYXNCZWVuUmVzaXplZFwiPlxyXG4gIDxzcGFuIGNsYXNzPVwicmVzaXplLW1lc3NhZ2VcIiBbdGV4dENvbnRlbnRdPVwiJ0lNQUdFX1JFU0laRUQnIHwgbG9jYWxpemVcIj48L3NwYW4+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cInBpY3R1cmUtZWRpdG9yXCIgW2hpZGRlbl09XCIhdGV4dHVyZSB8fCAhY2hhbmdlZFRleHR1cmUgfHwgZHJhZ05Ecm9wRW5mb3JjZWRcIj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cInBpY3R1cmUtZWRpdG9yLWNhbnZhc1wiXHJcbiAgICBbaGlkZGVuXT1cIm9wdGlvbnMgPT09IE9wdGlvbnMuTm9uZSB8fCAodGV4dHVyZT8udHlwZSA9PT0gdGV4dHVyZVR5cGUuQmFzaWMpXCJcclxuICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxyXG4gICAgKGRyb3ApPVwib25Ecm9wKCRldmVudClcIlxyXG4gID5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJjYW52YXMtd3JhcHBlclwiXHJcbiAgICAgIGZ4TGF5b3V0PVwiY29sdW1uIGlubGluZVwiXHJcbiAgICAgIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCJcclxuICAgID5cclxuICAgICAgPGNhbnZhcyBbaGlkZGVuXT1cInRleHR1cmUgJiYgdGV4dHVyZS5zdHJldGNoXCIgI2NhbnZhcz48L2NhbnZhcz5cclxuICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwXHJcbiAgICAgICAgKm5nSWY9XCJvcHRpb25zID09PSBPcHRpb25zLkJvdGhcIlxyXG4gICAgICAgIChjaGFuZ2UpPVwidGlsZWRDaGFuZ2VkKCRldmVudC52YWx1ZSA9PT0gJ3RleHR1cmUnKVwiXHJcbiAgICAgICAgW3ZhbHVlXT1cInRpbGVkID8gJ3RleHR1cmUnIDogJ3N0cmV0Y2gnXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZVxyXG4gICAgICAgICAgdmFsdWU9XCJzdHJldGNoXCJcclxuICAgICAgICAgIHRpdGxlPVwie3snUElDVFVSRScgfCBsb2NhbGl6ZX19XCJcclxuICAgICAgICAgIFtjaGVja2VkXT1cIiF0aWxlZFwiPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5waG90b19zaXplX3NlbGVjdF9sYXJnZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIHt7J1NLSU5fRlVMTF9XQUxMJyB8IGxvY2FsaXplfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlXHJcbiAgICAgICAgICB2YWx1ZT1cInRleHR1cmVcIlxyXG4gICAgICAgICAgdGl0bGU9XCJ7eydUSUxFJyB8IGxvY2FsaXplfX1cIlxyXG4gICAgICAgICAgW2NoZWNrZWRdPVwidGlsZWRcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj50ZXh0dXJlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAge3snQ1JFQVRFX1RFWFRVUkUnIHwgbG9jYWxpemV9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwic2xpZGVyc1wiICpuZ0lmPVwidGV4dHVyZT8udHlwZSA9PT0gdGV4dHVyZVR5cGUuQ3VzdG9tUGF0dGVyblxyXG4gICAgfHwgKCh0ZXh0dXJlPy50eXBlID09PSB0ZXh0dXJlVHlwZS5CYXNpYyB8fCB0ZXh0dXJlPy50eXBlID09PSB0ZXh0dXJlVHlwZS5QQlIpXHJcbiAgICAmJiBvcHRpb25zID09PSBPcHRpb25zLk5vbmUpXHJcblwiXHJcbiAgICA+XHJcbiAgICA8cnAtc2xpZGVyLWlucHV0XHJcbiAgICAgIHRpdGxlPVwie3snVElMRV9ST1RBVElPTicgfCBsb2NhbGl6ZX19XCJcclxuICAgICAgbWluPVwiLTE4MFwiXHJcbiAgICAgIG1heD1cIjE4MFwiXHJcbiAgICAgIHN0ZXA9XCIxXCJcclxuICAgICAgW3ZhbHVlXT1cInRpbGVSb3RhdGlvbkRlZ1wiXHJcbiAgICAgIChvbkNoYW5nZSk9XCJvblRpbGVSb3RhdGlvbkNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICA8L3JwLXNsaWRlci1pbnB1dD5cclxuICAgIDxycC1zbGlkZXItaW5wdXRcclxuICAgICAgdGl0bGU9XCJ7eydUSUxFX1NJWkUnIHwgbG9jYWxpemV9fVwiXHJcbiAgICAgIFttaW5dPVwidGlsZVNpemVNaW5cIlxyXG4gICAgICBbbWF4XT1cInRpbGVTaXplTWF4XCJcclxuICAgICAgc3RlcD1cIjAuMVwiXHJcbiAgICAgIFt2YWx1ZV09XCJ0aWxlU2l6ZVwiXHJcbiAgICAgIChvbkNoYW5nZSk9XCJvblRpbGVTaXplQ2hhbmdlKCRldmVudClcIj5cclxuICAgIDwvcnAtc2xpZGVyLWlucHV0PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwic2xpZGVyc1wiICpuZ0lmPVwiIWlzQmFzaWModGV4dHVyZSkgJiYgIWlzUEJSKHRleHR1cmUpXCI+XHJcbiAgICA8cnAtc2xpZGVyLWlucHV0XHJcbiAgICAgIHRpdGxlPVwie3snUk9UQVRJT04nIHwgbG9jYWxpemV9fVwiXHJcbiAgICAgIG1pbj1cIi0xODBcIlxyXG4gICAgICBtYXg9XCIxODBcIlxyXG4gICAgICBzdGVwPVwiMVwiXHJcbiAgICAgIFt2YWx1ZV09XCJ0ZXh0dXJlUm90YXRpb25EZWdcIlxyXG4gICAgICAob25DaGFuZ2UpPVwib25Sb3RhdGlvbkNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICA8L3JwLXNsaWRlci1pbnB1dD5cclxuICAgIDxycC1zbGlkZXItaW5wdXRcclxuICAgICAgdGl0bGU9XCJ7eydaT09NJyB8IGxvY2FsaXplfX1cIlxyXG4gICAgICBbbWluXT1cIi16b29tU2xpZGVyTWF4XCJcclxuICAgICAgW21heF09XCJ6b29tU2xpZGVyTWF4XCJcclxuICAgICAgc3RlcD1cIjAuMVwiXHJcbiAgICAgIFt2YWx1ZV09XCJ0ZXh0dXJlU2NhbGVTbGlkZXJcIlxyXG4gICAgICAob25DaGFuZ2UpPVwib25TY2FsZUNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICA8L3JwLXNsaWRlci1pbnB1dD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLVxyXG4gIDxmb290ZXIgY2xhc3M9XCJwaWN0dXJlLWVkaXRvci1mb290ZXJcIj5cclxuICAgIDxidXR0b24gKm5nSWY9XCJ0ZXh0dXJlPy50eXBlICE9PSBUZXh0dXJlVHlwZS5CYXNpYyB8fCBvcHRpb25zID09PSBPcHRpb25zLk5vbmVcIlxyXG4gICAgICBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJ3YXJuXCJcclxuICAgICAgKGNsaWNrKT1cInJlc2V0VGV4dHVyZSgpXCJcclxuICAgID5cclxuICAgICAge3sgJ1JlbW92ZScgfCBsb2NhbGl6ZSB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9mb290ZXI+XHJcbiAgLS0+XHJcbjwvZGl2PlxyXG4iXX0=
|