@trudb/tru-common-lib 0.1.665 → 0.1.667

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.
@@ -269,11 +269,11 @@ export class TruCloneView extends TruViewBase {
269
269
  this.childFlatList.length = 0;
270
270
  }
271
271
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruCloneView, deps: [{ token: i1.TruTextManager }, { token: i2.TruWindowEventHandler }, { token: i3.TruDataContext }, { token: i4.TruModelTableLookup }, { token: i5.TruModelPropertyLookup }, { token: i6.TruModelTypeLookup }, { token: i7.TruModelNavigationPropertiesLookup }, { token: i8.TruUiNotification }], target: i0.ɵɵFactoryTarget.Component });
272
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: TruCloneView, selector: "tru-clone-view", usesInheritance: true, ngImport: i0, template: "<div>\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'expand-icon'\" [tooltip]=\"'Expand'\" [disabled]=\"!doneProcessing\" (onClick)=\"onExpandClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'collapse-icon'\" [tooltip]=\"'Collapse'\" [disabled]=\"!doneProcessing\" (onClick)=\"onCollapseClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-text [text]=\"'Copies:'\"></tru-toolbar-text>\r\n <tru-toolbar-dropdown [options]=\"numberOfCopies\"\r\n [(selectedOption)]=\"selectedNumberOfCopies\"\r\n [disabled]=\"!doneProcessing\"\r\n (selectionChange)=\"onNumberOfCopiesChanged($event)\">\r\n </tru-toolbar-dropdown>\r\n </tru-toolbar>\r\n <div class=\"tru-dialog-content clone\">\r\n <ng-template #groupNodeRenderer let-data>\r\n <div *ngIf=\"!data.child || data.showEntities\"\r\n class=\"clone-modal-tree-group\">\r\n <input [(ngModel)]=\"data.checked\"\r\n (click)=\"data.onCheckedChanged()\"\r\n [disabled]=\"data.root\"\r\n type=\"checkbox\" />\r\n <a (click)=\"data.onGroupDisplayNameClicked()\"\r\n [ngClass]=\"{'clone-modal-tree-group-root-name': data.root || data.child}\"\r\n [ngStyle]=\"{'max-width': data.childNode ? '300px' : 'auto'}\">{{data.displayName}}</a>\r\n <span *ngIf=\"!data.root && !data.child\"\r\n class=\"clone-modal-tree-group-count\">({{data.nodes.length}})</span>\r\n </div>\r\n <ul>\r\n <li *ngFor=\"let data of data.nodes; let last = last\" truRendered (rendered)=\"onRendered()\">\r\n <div *ngTemplateOutlet=\"groupNodeRenderer; context: {$implicit: data}\"></div>\r\n </li>\r\n </ul>\r\n </ng-template>\r\n <div *ngIf=\"loadingMessage\"\r\n class=\"clone-modal-loading\">\r\n <span class=\"clone-modal-loading-message\">{{loadingMessage}}</span>\r\n </div>\r\n <div *ngIf=\"doneProcessing\"\r\n class=\"clone-modal-tree\">\r\n <ul>\r\n <li *ngFor=\"let data of displayTree; let last = last\" truRendered (rendered)=\"onRendered()\">\r\n <div *ngTemplateOutlet=\"groupNodeRenderer; context: {$implicit: data}\"></div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div class=\"tru-dialog-footer\">\r\n <button mat-button (click)=\"onCancel()\">Cancel</button>\r\n <button mat-raised-button color=\"primary\" (click)=\"onClone()\" (keyup.enter)=\"onClone()\" [disabled]=\"!doneProcessing\">Clone</button>\r\n </div>\r\n</div>\r\n", styles: [".tru-dialog-footer{position:absolute;left:0;right:0;bottom:0;padding:4px 15px 5px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px #fff}.tru-dialog-footer button{height:30px}::ng-deep tru-toolbar-button svg{height:20px!important}.clone ul{list-style-type:none}.clone-modal-loading{position:absolute;inset:15px 0 -15px;overflow:hidden;margin-top:10px}.clone-modal-loading-message{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%)}.clone-modal-tree{position:absolute;inset:15px 0 -15px;overflow-y:auto;margin-top:10px}.clone-modal-tree ul{padding-left:15px}.clone-modal-tree-group{display:flex;margin-top:5px}.clone-modal-tree-group input{float:left}.clone-modal-tree-group a{text-decoration-line:underline}.clone-modal-tree-group-root-name{text-decoration-line:none!important;color:#000}.clone-modal-tree-group span{margin-left:5px}.clone-modal-tree-group a{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;line-height:18px;margin-left:5px;float:left}.clone-modal-tree-group-count{vertical-align:middle;float:left}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i10.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i11.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i12.TruToolbar, selector: "tru-toolbar", inputs: ["config"] }, { kind: "component", type: i13.TruToolbarButton, selector: "tru-toolbar-button", inputs: ["config", "icon", "text", "disabled", "tooltip", "type"], outputs: ["onClick", "onKeydown"] }, { kind: "component", type: i14.TruToolbarDropdown, selector: "tru-toolbar-dropdown", inputs: ["config", "options", "tooltip", "multiple", "filterable", "filterTooltip", "width", "selectedOption", "disabled"], outputs: ["selectedOptionChange", "selectionChange"] }, { kind: "component", type: i15.TruToolbarText, selector: "tru-toolbar-text", inputs: ["config", "icon", "text", "tooltip"] }, { kind: "directive", type: i16.TruRendered, selector: "[truRendered]", outputs: ["rendered"] }] });
272
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: TruCloneView, selector: "tru-clone-view", usesInheritance: true, ngImport: i0, template: "<div>\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'expand-icon'\" [tooltip]=\"'Expand'\" [disabled]=\"!doneProcessing\" (onClick)=\"onExpandClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'collapse-icon'\" [tooltip]=\"'Collapse'\" [disabled]=\"!doneProcessing\" (onClick)=\"onCollapseClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-text [text]=\"'Copies:'\"></tru-toolbar-text>\r\n <tru-toolbar-dropdown [options]=\"numberOfCopies\"\r\n [(selectedOption)]=\"selectedNumberOfCopies\"\r\n [disabled]=\"!doneProcessing\"\r\n (selectionChange)=\"onNumberOfCopiesChanged($event)\">\r\n </tru-toolbar-dropdown>\r\n </tru-toolbar>\r\n <div class=\"tru-dialog-content clone\">\r\n <ng-template #groupNodeRenderer let-data>\r\n <div *ngIf=\"!data.child || data.showEntities\"\r\n class=\"clone-modal-tree-group\">\r\n <input [(ngModel)]=\"data.checked\"\r\n (click)=\"data.onCheckedChanged()\"\r\n [disabled]=\"data.root\"\r\n type=\"checkbox\" />\r\n <a (click)=\"data.onGroupDisplayNameClicked()\"\r\n [ngClass]=\"{'clone-modal-tree-group-root-name': data.root || data.child}\"\r\n [ngStyle]=\"{'max-width': data.childNode ? '300px' : 'auto'}\">{{data.displayName}}</a>\r\n <span *ngIf=\"!data.root && !data.child\"\r\n class=\"clone-modal-tree-group-count\">({{data.nodes.length}})</span>\r\n </div>\r\n <ul>\r\n <li *ngFor=\"let data of data.nodes; let last = last\" truRendered (rendered)=\"onRendered()\">\r\n <div *ngTemplateOutlet=\"groupNodeRenderer; context: {$implicit: data}\"></div>\r\n </li>\r\n </ul>\r\n </ng-template>\r\n <div *ngIf=\"loadingMessage\"\r\n class=\"clone-modal-loading\">\r\n <span class=\"clone-modal-loading-message\">{{loadingMessage}}</span>\r\n </div>\r\n <div *ngIf=\"doneProcessing\"\r\n class=\"clone-modal-tree\">\r\n <ul>\r\n <li *ngFor=\"let data of displayTree; let last = last\" truRendered (rendered)=\"onRendered()\">\r\n <div *ngTemplateOutlet=\"groupNodeRenderer; context: {$implicit: data}\"></div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div class=\"tru-dialog-footer\">\r\n <button mat-button (keyup.enter)=\"onCancel()\" (click)=\"onCancel()\">Cancel</button>\r\n <button mat-raised-button color=\"primary\" (click)=\"onClone()\" (keyup.enter)=\"onClone()\" [disabled]=\"!doneProcessing\">Clone</button>\r\n </div>\r\n</div>\r\n", styles: [".tru-dialog-footer{position:absolute;left:0;right:0;bottom:0;padding:4px 15px 5px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px #fff}.tru-dialog-footer button{height:30px}::ng-deep tru-toolbar-button svg{height:20px!important}.clone ul{list-style-type:none}.clone-modal-loading{position:absolute;inset:15px 0 -15px;overflow:hidden;margin-top:10px}.clone-modal-loading-message{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%)}.clone-modal-tree{position:absolute;inset:15px 0 -15px;overflow-y:auto;margin-top:10px}.clone-modal-tree ul{padding-left:15px}.clone-modal-tree-group{display:flex;margin-top:5px}.clone-modal-tree-group input{float:left}.clone-modal-tree-group a{text-decoration-line:underline}.clone-modal-tree-group-root-name{text-decoration-line:none!important;color:#000}.clone-modal-tree-group span{margin-left:5px}.clone-modal-tree-group a{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;line-height:18px;margin-left:5px;float:left}.clone-modal-tree-group-count{vertical-align:middle;float:left}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i10.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i11.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i12.TruToolbar, selector: "tru-toolbar", inputs: ["config"] }, { kind: "component", type: i13.TruToolbarButton, selector: "tru-toolbar-button", inputs: ["config", "icon", "text", "disabled", "tooltip", "type"], outputs: ["onClick", "onKeydown"] }, { kind: "component", type: i14.TruToolbarDropdown, selector: "tru-toolbar-dropdown", inputs: ["config", "options", "tooltip", "multiple", "filterable", "filterTooltip", "width", "selectedOption", "disabled"], outputs: ["selectedOptionChange", "selectionChange"] }, { kind: "component", type: i15.TruToolbarText, selector: "tru-toolbar-text", inputs: ["config", "icon", "text", "tooltip"] }, { kind: "directive", type: i16.TruRendered, selector: "[truRendered]", outputs: ["rendered"] }] });
273
273
  }
274
274
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruCloneView, decorators: [{
275
275
  type: Component,
276
- args: [{ selector: 'tru-clone-view', template: "<div>\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'expand-icon'\" [tooltip]=\"'Expand'\" [disabled]=\"!doneProcessing\" (onClick)=\"onExpandClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'collapse-icon'\" [tooltip]=\"'Collapse'\" [disabled]=\"!doneProcessing\" (onClick)=\"onCollapseClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-text [text]=\"'Copies:'\"></tru-toolbar-text>\r\n <tru-toolbar-dropdown [options]=\"numberOfCopies\"\r\n [(selectedOption)]=\"selectedNumberOfCopies\"\r\n [disabled]=\"!doneProcessing\"\r\n (selectionChange)=\"onNumberOfCopiesChanged($event)\">\r\n </tru-toolbar-dropdown>\r\n </tru-toolbar>\r\n <div class=\"tru-dialog-content clone\">\r\n <ng-template #groupNodeRenderer let-data>\r\n <div *ngIf=\"!data.child || data.showEntities\"\r\n class=\"clone-modal-tree-group\">\r\n <input [(ngModel)]=\"data.checked\"\r\n (click)=\"data.onCheckedChanged()\"\r\n [disabled]=\"data.root\"\r\n type=\"checkbox\" />\r\n <a (click)=\"data.onGroupDisplayNameClicked()\"\r\n [ngClass]=\"{'clone-modal-tree-group-root-name': data.root || data.child}\"\r\n [ngStyle]=\"{'max-width': data.childNode ? '300px' : 'auto'}\">{{data.displayName}}</a>\r\n <span *ngIf=\"!data.root && !data.child\"\r\n class=\"clone-modal-tree-group-count\">({{data.nodes.length}})</span>\r\n </div>\r\n <ul>\r\n <li *ngFor=\"let data of data.nodes; let last = last\" truRendered (rendered)=\"onRendered()\">\r\n <div *ngTemplateOutlet=\"groupNodeRenderer; context: {$implicit: data}\"></div>\r\n </li>\r\n </ul>\r\n </ng-template>\r\n <div *ngIf=\"loadingMessage\"\r\n class=\"clone-modal-loading\">\r\n <span class=\"clone-modal-loading-message\">{{loadingMessage}}</span>\r\n </div>\r\n <div *ngIf=\"doneProcessing\"\r\n class=\"clone-modal-tree\">\r\n <ul>\r\n <li *ngFor=\"let data of displayTree; let last = last\" truRendered (rendered)=\"onRendered()\">\r\n <div *ngTemplateOutlet=\"groupNodeRenderer; context: {$implicit: data}\"></div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div class=\"tru-dialog-footer\">\r\n <button mat-button (click)=\"onCancel()\">Cancel</button>\r\n <button mat-raised-button color=\"primary\" (click)=\"onClone()\" (keyup.enter)=\"onClone()\" [disabled]=\"!doneProcessing\">Clone</button>\r\n </div>\r\n</div>\r\n", styles: [".tru-dialog-footer{position:absolute;left:0;right:0;bottom:0;padding:4px 15px 5px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px #fff}.tru-dialog-footer button{height:30px}::ng-deep tru-toolbar-button svg{height:20px!important}.clone ul{list-style-type:none}.clone-modal-loading{position:absolute;inset:15px 0 -15px;overflow:hidden;margin-top:10px}.clone-modal-loading-message{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%)}.clone-modal-tree{position:absolute;inset:15px 0 -15px;overflow-y:auto;margin-top:10px}.clone-modal-tree ul{padding-left:15px}.clone-modal-tree-group{display:flex;margin-top:5px}.clone-modal-tree-group input{float:left}.clone-modal-tree-group a{text-decoration-line:underline}.clone-modal-tree-group-root-name{text-decoration-line:none!important;color:#000}.clone-modal-tree-group span{margin-left:5px}.clone-modal-tree-group a{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;line-height:18px;margin-left:5px;float:left}.clone-modal-tree-group-count{vertical-align:middle;float:left}\n"] }]
276
+ args: [{ selector: 'tru-clone-view', template: "<div>\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'expand-icon'\" [tooltip]=\"'Expand'\" [disabled]=\"!doneProcessing\" (onClick)=\"onExpandClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'collapse-icon'\" [tooltip]=\"'Collapse'\" [disabled]=\"!doneProcessing\" (onClick)=\"onCollapseClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-text [text]=\"'Copies:'\"></tru-toolbar-text>\r\n <tru-toolbar-dropdown [options]=\"numberOfCopies\"\r\n [(selectedOption)]=\"selectedNumberOfCopies\"\r\n [disabled]=\"!doneProcessing\"\r\n (selectionChange)=\"onNumberOfCopiesChanged($event)\">\r\n </tru-toolbar-dropdown>\r\n </tru-toolbar>\r\n <div class=\"tru-dialog-content clone\">\r\n <ng-template #groupNodeRenderer let-data>\r\n <div *ngIf=\"!data.child || data.showEntities\"\r\n class=\"clone-modal-tree-group\">\r\n <input [(ngModel)]=\"data.checked\"\r\n (click)=\"data.onCheckedChanged()\"\r\n [disabled]=\"data.root\"\r\n type=\"checkbox\" />\r\n <a (click)=\"data.onGroupDisplayNameClicked()\"\r\n [ngClass]=\"{'clone-modal-tree-group-root-name': data.root || data.child}\"\r\n [ngStyle]=\"{'max-width': data.childNode ? '300px' : 'auto'}\">{{data.displayName}}</a>\r\n <span *ngIf=\"!data.root && !data.child\"\r\n class=\"clone-modal-tree-group-count\">({{data.nodes.length}})</span>\r\n </div>\r\n <ul>\r\n <li *ngFor=\"let data of data.nodes; let last = last\" truRendered (rendered)=\"onRendered()\">\r\n <div *ngTemplateOutlet=\"groupNodeRenderer; context: {$implicit: data}\"></div>\r\n </li>\r\n </ul>\r\n </ng-template>\r\n <div *ngIf=\"loadingMessage\"\r\n class=\"clone-modal-loading\">\r\n <span class=\"clone-modal-loading-message\">{{loadingMessage}}</span>\r\n </div>\r\n <div *ngIf=\"doneProcessing\"\r\n class=\"clone-modal-tree\">\r\n <ul>\r\n <li *ngFor=\"let data of displayTree; let last = last\" truRendered (rendered)=\"onRendered()\">\r\n <div *ngTemplateOutlet=\"groupNodeRenderer; context: {$implicit: data}\"></div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div class=\"tru-dialog-footer\">\r\n <button mat-button (keyup.enter)=\"onCancel()\" (click)=\"onCancel()\">Cancel</button>\r\n <button mat-raised-button color=\"primary\" (click)=\"onClone()\" (keyup.enter)=\"onClone()\" [disabled]=\"!doneProcessing\">Clone</button>\r\n </div>\r\n</div>\r\n", styles: [".tru-dialog-footer{position:absolute;left:0;right:0;bottom:0;padding:4px 15px 5px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px #fff}.tru-dialog-footer button{height:30px}::ng-deep tru-toolbar-button svg{height:20px!important}.clone ul{list-style-type:none}.clone-modal-loading{position:absolute;inset:15px 0 -15px;overflow:hidden;margin-top:10px}.clone-modal-loading-message{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%)}.clone-modal-tree{position:absolute;inset:15px 0 -15px;overflow-y:auto;margin-top:10px}.clone-modal-tree ul{padding-left:15px}.clone-modal-tree-group{display:flex;margin-top:5px}.clone-modal-tree-group input{float:left}.clone-modal-tree-group a{text-decoration-line:underline}.clone-modal-tree-group-root-name{text-decoration-line:none!important;color:#000}.clone-modal-tree-group span{margin-left:5px}.clone-modal-tree-group a{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;line-height:18px;margin-left:5px;float:left}.clone-modal-tree-group-count{vertical-align:middle;float:left}\n"] }]
277
277
  }], ctorParameters: () => [{ type: i1.TruTextManager }, { type: i2.TruWindowEventHandler }, { type: i3.TruDataContext }, { type: i4.TruModelTableLookup }, { type: i5.TruModelPropertyLookup }, { type: i6.TruModelTypeLookup }, { type: i7.TruModelNavigationPropertiesLookup }, { type: i8.TruUiNotification }] });
278
278
  class Node {
279
279
  ref;
@@ -344,4 +344,4 @@ class Node {
344
344
  }
345
345
  };
346
346
  }
347
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWNsb25lLXZpZXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cnUtY29tbW9uLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvY2xvbmUtdmlldy90cnUtY2xvbmUtdmlldy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9jbG9uZS12aWV3L3RydS1jbG9uZS12aWV3Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFXN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saURBQWlELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVExRixNQUFNLE9BQU8sWUFBYSxTQUFRLFdBQVc7SUFtQy9CO0lBQ0E7SUFDRjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUF6Q1YsT0FBTyxHQUFZLElBQUksQ0FBQztJQUN4QixjQUFjLEdBQVcsa0NBQWtDLENBQUM7SUFDNUQsY0FBYyxDQUFrQztJQUNoRCxzQkFBc0IsQ0FBNEI7SUFDbEQsY0FBYyxHQUFHLElBQUksQ0FBQztJQUN0QixRQUFRLEdBQWdCLElBQUksQ0FBQztJQUM3QixrQkFBa0IsR0FBRztRQUNuQixZQUFZO1FBQ1osU0FBUztRQUNULFlBQVk7UUFDWixTQUFTO1FBQ1QsUUFBUTtRQUNSLHlCQUF5QjtRQUN6QixjQUFjO1FBQ2QsdUJBQXVCO1FBQ3ZCLGVBQWU7UUFDZixjQUFjO1FBQ2QsWUFBWTtRQUNaLFlBQVk7UUFDWixlQUFlO1FBQ2YsYUFBYTtRQUNiLGFBQWE7UUFDYix1QkFBdUI7UUFDdkIsS0FBSztLQUNOLENBQUM7SUFDRixRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ2QsUUFBUSxHQUFnQixFQUFFLENBQUM7SUFD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Z0JBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7b0JBQ3BELE9BQU8sQ0FBQyxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUM7Z0JBQzdCLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksWUFBWTtvQkFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDaEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRTtvQkFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTt3QkFDekIsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3JCLENBQUMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNwQixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtvQkFDekIsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3JCLENBQUMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxDQUFBO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRydVZpZXdCYXNlIH0gZnJvbSAnLi4vLi4vYmFzZS12aWV3cy90cnUtdmlldy1iYXNlJztcclxuaW1wb3J0IHsgVHJ1RGF0YUNvbnRleHQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtZGF0YS1jb250ZXh0JztcclxuaW1wb3J0IHsgSVRydVRvb2xiYXJEcm9wZG93bk9wdGlvbiB9IGZyb20gJy4uL3Rvb2xiYXIvY2xhc3Nlcy90cnUtdG9vbGJhci1kcm9wZG93bi1vcHRpb24nO1xyXG5pbXBvcnQgeyBUcnVUZXh0TWFuYWdlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS10ZXh0LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBUcnVXaW5kb3dFdmVudEhhbmRsZXIgfSBmcm9tICcuLi9kZXNrdG9wL3NlcnZpY2VzL3RydS13aW5kb3ctZXZlbnQtaGFuZGxlcic7XHJcbmltcG9ydCB7IFRydU1vZGVsVGFibGVMb29rdXAgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtbW9kZWwtdGFibGUtbG9va3VwJztcclxuaW1wb3J0IHsgVHJ1VWlOb3RpZmljYXRpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtdWktbm90aWZpY2F0aW9uJztcclxuaW1wb3J0IHsgVHJ1TW9kZWxQcm9wZXJ0eUxvb2t1cCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS1tb2RlbC1wcm9wZXJ0eS1sb29rdXAnO1xyXG5pbXBvcnQgeyBUcnVNb2RlbFR5cGVMb29rdXAgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtbW9kZWwtdHlwZS1sb29rdXAnO1xyXG5pbXBvcnQgeyBUcnVNb2RlbE5hdmlnYXRpb25Qcm9wZXJ0aWVzTG9va3VwIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LW1vZGVsLW5hdmlnYXRpb24tcHJvcGVydGllcy1sb29rdXAnO1xyXG5pbXBvcnQgeyBUcnVOYXZpZ2F0aW9uUHJvcGVydHlDb25maWcgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RydS1uYXZpZ2F0aW9uLXByb3BlcnR5LWNvbmZpZyc7XHJcbmltcG9ydCB7IFRydVdpbmRvd0Nsb3NlRXZlbnRBcmdzIH0gZnJvbSAnLi4vZGVza3RvcC9zZXJ2aWNlcy90cnUtd2luZG93LWNsb3NlLWV2ZW50LWFyZ3MnO1xyXG5pbXBvcnQgeyBUcnVFbnRpdHlCYXNlIH0gZnJvbSAnLi4vLi4vYmFzZS1jbGFzc2VzL3RydS1lbnRpdHktYmFzZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RydS1jbG9uZS12aWV3JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJ1LWNsb25lLXZpZXcuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHJ1LWNsb25lLXZpZXcuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRydUNsb25lVmlldyBleHRlbmRzIFRydVZpZXdCYXNlIHtcclxuICBsb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBsb2FkaW5nTWVzc2FnZTogc3RyaW5nID0gJ1NlYXJjaGluZyBmb3IgcmVsYXRlZCByZWNvcmRzLi4uJztcclxuICBudW1iZXJPZkNvcGllczogQXJyYXk8SVRydVRvb2xiYXJEcm9wZG93bk9wdGlvbj5cclxuICBzZWxlY3RlZE51bWJlck9mQ29waWVzOiBJVHJ1VG9vbGJhckRyb3Bkb3duT3B0aW9uO1xyXG4gIGNvbnRleHRGaWx0ZXJzID0gbnVsbDtcclxuICByb290Tm9kZTogTm9kZSB8IG51bGwgPSBudWxsO1xyXG4gIGlnbm9yZVByb3BlcnR5TGlzdCA9IFtcclxuICAgICdDcmVhdGVkUmVmJyxcclxuICAgICdDcmVhdGVkJyxcclxuICAgICdVcGRhdGVkUmVmJyxcclxuICAgICdVcGRhdGVkJyxcclxuICAgICdyb3d2ZXInLFxyXG4gICAgJ19jdXN0b21WYWxpZGF0aW9uRXJyb3JzJyxcclxuICAgICdlbnRpdHlBc3BlY3QnLFxyXG4gICAgJ19hc3NvY2lhdGVkRGF0YUNhY2hlZCcsXHJcbiAgICAnX2JhY2tpbmdTdG9yZScsXHJcbiAgICAnX3NldERlZmF1bHRzJyxcclxuICAgICdfJHR5cGVOYW1lJyxcclxuICAgICdlbnRpdHlUeXBlJyxcclxuICAgICdfJGludGVyY2VwdG9yJyxcclxuICAgICdnZXRQcm9wZXJ0eScsXHJcbiAgICAnc2V0UHJvcGVydHknLFxyXG4gICAgJ19wZW5kaW5nQmFja2luZ1N0b3JlcycsXHJcbiAgICAnUmVmJ1xyXG4gIF07XHJcbiAgZGF0YVRyZWUgPSBbXTtcclxuICBmbGF0TGlzdDogQXJyYXk8Tm9kZT4gPSBbXTtcclxuICBjaGlsZEZsYXRMaXN0OiBBcnJheTxOb2RlPiA9IFtdO1xyXG4gIHByb2Nlc3NlZENvdW50OiBudW1iZXIgPSAwO1xyXG4gIGRvbmVQcm9jZXNzaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGlzcGxheVRyZWUgPSBbdGhpcy5yb290Tm9kZV07XHJcbiAgcGFyZW50RGF0YUNvbnRleHQhOiBUcnVEYXRhQ29udGV4dDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgdGV4dE1hbmFnZXI6IFRydVRleHRNYW5hZ2VyLFxyXG4gICAgcHJvdGVjdGVkIHdpbmRvd0V2ZW50SGFuZGxlcjogVHJ1V2luZG93RXZlbnRIYW5kbGVyLFxyXG4gICAgcHJpdmF0ZSBkYXRhQ29udGV4dDogVHJ1RGF0YUNvbnRleHQsXHJcbiAgICBwcml2YXRlIG1vZGVsVGFibGVMb29rdXA6IFRydU1vZGVsVGFibGVMb29rdXAsXHJcbiAgICBwcml2YXRlIG1vZGVsUHJvcGVydHlMb29rdXA6IFRydU1vZGVsUHJvcGVydHlMb29rdXAsXHJcbiAgICBwcml2YXRlIG1vZGVsVHlwZUxvb2t1cDogVHJ1TW9kZWxUeXBlTG9va3VwLFxyXG4gICAgcHJpdmF0ZSBtb2RlbE5hdmlnYXRpb25Qcm9wZXJ0aWVzTG9va3VwOiBUcnVNb2RlbE5hdmlnYXRpb25Qcm9wZXJ0aWVzTG9va3VwLFxyXG4gICAgcHJpdmF0ZSB1aU5vdGlmaWNhdGlvbjogVHJ1VWlOb3RpZmljYXRpb24pIHtcclxuICAgIHN1cGVyKHRleHRNYW5hZ2VyLCB3aW5kb3dFdmVudEhhbmRsZXIpO1xyXG4gICAgdGhpcy5udW1iZXJPZkNvcGllcyA9IHRoaXMuZ2V0TnVtYmVyT2ZDb3BpZXMoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWROdW1iZXJPZkNvcGllcyA9IHRoaXMubnVtYmVyT2ZDb3BpZXNbMF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE51bWJlck9mQ29waWVzID0gKCk6IEFycmF5PElUcnVUb29sYmFyRHJvcGRvd25PcHRpb24+ID0+IHtcclxuICAgIGxldCBjb3BpZXM6IEFycmF5PElUcnVUb29sYmFyRHJvcGRvd25PcHRpb24+ID0gW107XHJcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAyNTsgaSsrKSB7XHJcbiAgICAgIGNvcGllcy5wdXNoKHtcclxuICAgICAgICB2YWx1ZTogaSxcclxuICAgICAgICBsYWJlbDogaS50b1N0cmluZygpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvcGllcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJvcGVydHlJc0FsbG93ZWQgPSAocHJvcGVydHlOYW1lOiBzdHJpbmcsIHRhYmxlTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAocHJvcGVydHlOYW1lID09PSB0YWJsZU5hbWUgKyAnUmVmJykgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKHByb3BlcnR5TmFtZS5zdGFydHNXaXRoKCdvJykpIHJldHVybiBmYWxzZTtcclxuICAgIGxldCBwcm9wZXJ0eSA9IHRoaXMubW9kZWxQcm9wZXJ0eUxvb2t1cC5sb29rdXAuZ2V0KHByb3BlcnR5TmFtZSk7XHJcbiAgICBpZiAocHJvcGVydHkgJiYgcHJvcGVydHkuZXhjbHVkZUZyb21DbG9uaW5nKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5pZ25vcmVQcm9wZXJ0eUxpc3Quc29tZShmdW5jdGlvbiAocHJvcGVydHlUb0lnbm9yZSkgeyByZXR1cm4gcHJvcGVydHlUb0lnbm9yZSA9PT0gcHJvcGVydHlOYW1lOyB9KSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UHJvdG90eXBlUHJvcGVydGllcyA9IChvYmo6IGFueSkgPT4ge1xyXG4gICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgZm9yICh2YXIgcHJvcCBpbiBvYmopIHtcclxuICAgICAgaWYgKCFvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHtcclxuICAgICAgICByZXN1bHQucHVzaChwcm9wKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q2hpbGRQcm9wZXJ0aWVzRm9yQ3VycmVudEVudGl0eSA9IChjdXJyZW50RW50aXR5OiBhbnkpID0+IHtcclxuICAgIC8vdmFyIHByb3BlcnR5TmFtZXMgPSBPYmplY3Qua2V5cyhPYmplY3QuZ2V0UHJvdG90eXBlT2YoY3VycmVudEVudGl0eSkpO1xyXG4gICAgbGV0IGVudGl0eU5hbWUgPSB0aGlzLmdldFR5cGVGcm9tRW50aXR5VHlwZU5hbWUoY3VycmVudEVudGl0eS4kdHlwZSk7XHJcbiAgICBsZXQgY2hpbGRMb29rdXAgPSB0aGlzLm1vZGVsTmF2aWdhdGlvblByb3BlcnRpZXNMb29rdXAubG9va3VwLmdldChlbnRpdHlOYW1lKSBhcyBUcnVOYXZpZ2F0aW9uUHJvcGVydHlDb25maWdbXTtcclxuICAgIGxldCBwcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmtleXMoY3VycmVudEVudGl0eSk7XHJcbiAgICBsZXQgbmF2aWdhdGlvblByb3BlcnR5TmFtZXMgPSBwcm9wZXJ0eU5hbWVzLmZpbHRlcigobikgPT4geyByZXR1cm4gbi5zdGFydHNXaXRoKCdvJyk7IH0pO1xyXG4gICAgbGV0IGNoaWxkTmF2aWdhdGlvblByb3BlcnR5TmFtZXMgPSBuYXZpZ2F0aW9uUHJvcGVydHlOYW1lcy5maWx0ZXIoKG4pID0+IHtcclxuICAgICAgcmV0dXJuIGNoaWxkTG9va3VwLnNvbWUoKGxvb2t1cDogYW55KSA9PiB7IHJldHVybiBsb29rdXAubmFtZSA9PT0gbjsgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgY2hpbGRQcm9wZXJ0aWVzOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICBjaGlsZE5hdmlnYXRpb25Qcm9wZXJ0eU5hbWVzLmZpbHRlcihmdW5jdGlvbiAobikge1xyXG4gICAgICBpZiAoY3VycmVudEVudGl0eVtuXSAmJiBjdXJyZW50RW50aXR5W25dLmxlbmd0aClcclxuICAgICAgICBjaGlsZFByb3BlcnRpZXMucHVzaCh7XHJcbiAgICAgICAgICBwYXJlbnRUb0NoaWxkUmVmTmFtZTogbixcclxuICAgICAgICAgIGVudGl0aWVzOiBjdXJyZW50RW50aXR5W25dXHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gY2hpbGRQcm9wZXJ0aWVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUeXBlRnJvbUVudGl0eVR5cGVOYW1lID0gKHR5cGVOYW1lOiBzdHJpbmcpID0+IHtcclxuICAgIHZhciBwMXMgPSB0eXBlTmFtZS5zcGxpdCgnLCcpWzBdO1xyXG4gICAgdmFyIHAycyA9IHAxcy5zcGxpdCgnLicpO1xyXG4gICAgcmV0dXJuIHAyc1twMnMubGVuZ3RoIC0gMV07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkQ2xvbmVUcmVlID0gKGN1cnJlbnRFbnRpdHk6IGFueSwgbm9kZTogYW55KSA9PiB7XHJcbiAgICB2YXIgY2hpbGRQcm9wZXJ0aWVzID0gdGhpcy5nZXRDaGlsZFByb3BlcnRpZXNGb3JDdXJyZW50RW50aXR5KGN1cnJlbnRFbnRpdHkpO1xyXG4gICAgY2hpbGRQcm9wZXJ0aWVzLmZvckVhY2goKGNoaWxkUHJvcGVydHk6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgdHlwZSA9IHRoaXMuZ2V0VHlwZUZyb21FbnRpdHlUeXBlTmFtZShjaGlsZFByb3BlcnR5LmVudGl0aWVzWzBdLiR0eXBlKTtcclxuICAgICAgICBsZXQgY2hpbGRMb29rdXAgPSB0aGlzLm1vZGVsVGFibGVMb29rdXAubG9va3VwLmdldCh0eXBlKTtcclxuICAgICAgICBsZXQgZ3JvdXBOb2RlID0gbmV3IE5vZGUoXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgY2hpbGRQcm9wZXJ0eS5lbnRpdGllc1swXS5jb25zdHJ1Y3Rvci5uYW1lLFxyXG4gICAgICAgICAgY2hpbGRMb29rdXA/LnBsdXJhbExhYmVsIGFzIHN0cmluZyxcclxuICAgICAgICAgIGZhbHNlLFxyXG4gICAgICAgICAgdHJ1ZSxcclxuICAgICAgICAgIFtdLFxyXG4gICAgICAgICAgJycsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgICBub2RlLFxyXG4gICAgICAgICAgbnVsbFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmxhdExpc3QucHVzaChncm91cE5vZGUpO1xyXG5cclxuICAgICAgICBjaGlsZFByb3BlcnR5LmVudGl0aWVzLmZvckVhY2goKGNoaWxkRW50aXR5OiBhbnkpID0+IHtcclxuICAgICAgICAgIGxldCB0eXBlID0gdGhpcy5nZXRUeXBlRnJvbUVudGl0eVR5cGVOYW1lKGNoaWxkRW50aXR5LiR0eXBlKTtcclxuICAgICAgICAgIGxldCBjaGlsZE5vZGUgPSBuZXcgTm9kZShcclxuICAgICAgICAgICAgY2hpbGRFbnRpdHlbdHlwZSArICdSZWYnXSxcclxuICAgICAgICAgICAgdHlwZSxcclxuICAgICAgICAgICAgdHlwZSxcclxuICAgICAgICAgICAgdHJ1ZSxcclxuICAgICAgICAgICAgdHJ1ZSxcclxuICAgICAgICAgICAgW10sXHJcbiAgICAgICAgICAgICcnLFxyXG4gICAgICAgICAgICBjaGlsZFByb3BlcnR5LnBhcmVudFRvQ2hpbGRSZWZOYW1lLFxyXG4gICAgICAgICAgICBmYWxzZSxcclxuICAgICAgICAgICAgZ3JvdXBOb2RlLFxyXG4gICAgICAgICAgICBjaGlsZEVudGl0eVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmNoaWxkRmxhdExpc3QucHVzaChjaGlsZE5vZGUpO1xyXG4gICAgICAgICAgZ3JvdXBOb2RlLm5vZGVzLnB1c2goY2hpbGROb2RlKTtcclxuICAgICAgICAgIHRoaXMuYnVpbGRDbG9uZVRyZWUoY2hpbGRFbnRpdHksIGNoaWxkTm9kZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIG5vZGUubm9kZXMucHVzaChncm91cE5vZGUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jRm9yRWFjaFJlY29yZElkID0gKGFycjogYW55LCBjYjogYW55KSA9PiB7XHJcbiAgICByZXR1cm4gYXJyLnJlZHVjZSgocDogYW55LCBjOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHAudGhlbigoKSA9PiBjYihjKSk7XHJcbiAgICB9LCBQcm9taXNlLnJlc29sdmUoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZldGNoUmVjb3JkSWQgPSAoY2hpbGQ6IGFueSkgPT4ge1xyXG4gICAgdmFyIGMgPSBjaGlsZDtcclxuICAgIHZhciBkYXRhID0ge1xyXG4gICAgICByZWY6IGMucmVmLFxyXG4gICAgICB0YWJsZU5hbWU6IGMudGFibGVOYW1lXHJcbiAgICB9O1xyXG4gICAgZGF0YSA9IHRoaXMudGV4dE1hbmFnZXIuZm9ybWF0QXNVcmxQYXJhbWV0ZXJzKGRhdGEpO1xyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogYW55KSA9PiB7XHJcbiAgICAgIGMuZGlzcGxheU5hbWUgPSBjaGlsZC5lbnRpdHkuSElEO1xyXG4gICAgICB0aGlzLnByb2Nlc3NlZENvdW50Kys7XHJcbiAgICAgIHRoaXMubG9hZGluZ01lc3NhZ2UgPSAnRm9ybWF0dGluZyBkYXRhLi4ucHJvY2Vzc2VkICgnICsgdGhpcy5wcm9jZXNzZWRDb3VudCArICcvJyArIHRoaXMuY2hpbGRGbGF0TGlzdC5sZW5ndGggKyAnKSByZWNvcmRzJztcclxuICAgICAgaWYgKHRoaXMucHJvY2Vzc2VkQ291bnQgPj0gdGhpcy5jaGlsZEZsYXRMaXN0Lmxlbmd0aClcclxuICAgICAgICB0aGlzLmxvYWRpbmdNZXNzYWdlID0gJ1JlbmRlcmluZyB0cmVlLi4uJztcclxuICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRyYXZlcnNlID0gKG5vZGU6IGFueSwgY3VycmVudEVudGl0eTogYW55KSA9PiB7XHJcbiAgICB2YXIgZ3JvdXAgPSAhbm9kZS5jaGlsZDtcclxuICAgIGlmIChncm91cCkge1xyXG4gICAgICB2YXIgZ3JvdXBOb2RlcyA9IG5vZGUubm9kZXM7XHJcbiAgICAgIGdyb3VwTm9kZXMuZm9yRWFjaCgoZ3JvdXBOb2RlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZ3JvdXBOb2RlLmNoZWNrZWQpXHJcbiAgICAgICAgICBncm91cE5vZGUubm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy50cmF2ZXJzZShjaGlsZE5vZGUsIGN1cnJlbnRFbnRpdHkpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKG5vZGUuY2hlY2tlZCkge1xyXG4gICAgICAgIGxldCB0YWJsZVR5cGUgPSB0aGlzLm1vZGVsVHlwZUxvb2t1cC5nZXRUeXBlKG5vZGUudGFibGVOYW1lKTtcclxuICAgICAgICBsZXQgbmV3RW50aXR5ID0gdGhpcy5wYXJlbnREYXRhQ29udGV4dC5lbnRpdHlBY2Nlc3MoKS5hZGQodGFibGVUeXBlLCB0aGlzLmNvbnRleHRGaWx0ZXJzKTtcclxuICAgICAgICB0eXBlIE9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBuZXdFbnRpdHk7XHJcbiAgICAgICAgdGhpcy5nZXRQcm90b3R5cGVQcm9wZXJ0aWVzKG5ld0VudGl0eSkuZm9yRWFjaCgocHJvcGVydHlOYW1lKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5wcm9wZXJ0eUlzQWxsb3dlZChwcm9wZXJ0eU5hbWUsIG5vZGUudGFibGVOYW1lKSkge1xyXG4gICAgICAgICAgICBuZXdFbnRpdHlbcHJvcGVydHlOYW1lIGFzIE9iamVjdEtleV0gPSBub2RlLmVudGl0eVtwcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBuZXdFbnRpdHkuc2V0UHJvcGVydHkhKCdfYXNzb2NpYXRlZERhdGFDYWNoZWQnLCB0cnVlKTtcclxuXHJcbiAgICAgICAgbGV0IGNoaWxkTG9va3VwID0gdGhpcy5tb2RlbFRhYmxlTG9va3VwLmxvb2t1cC5nZXQobm9kZS50YWJsZU5hbWUpO1xyXG4gICAgICAgIGN1cnJlbnRFbnRpdHlbbm9kZS5wYXJlbnRUb0NoaWxkUmVmTmFtZV0ucHVzaChuZXdFbnRpdHkpO1xyXG4gICAgICAgIGxldCBjaGlsZE5vZGVzID0gbm9kZS5ub2RlcztcclxuICAgICAgICBjaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2hpbGROb2RlLmNoZWNrZWQpXHJcbiAgICAgICAgICAgIGNoaWxkTm9kZS5ub2Rlcy5mb3JFYWNoKChncm91cE5vZGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudHJhdmVyc2UoZ3JvdXBOb2RlLCBuZXdFbnRpdHkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgZ2V0RGF0YUZvckNsb25pbmcgPSAoKSA9PiB7XHJcbiAgICB0aGlzLnBhcmVudERhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLmNsb25lKHtcclxuICAgICAgcmVmOiB0aGlzLmVudGl0eS5SZWYsXHJcbiAgICAgIHRhYmxlTmFtZTogdGhpcy50YWJsZU5hbWVcclxuICAgIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhVHJlZSA9IHJlc3BvbnNlLkNvbnRlbnRbMF07XHJcbiAgICAgICAgdGhpcy5idWlsZENsb25lVHJlZSh0aGlzLmRhdGFUcmVlLCB0aGlzLnJvb3ROb2RlKTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkaW5nTWVzc2FnZSA9ICdGb3JtYXR0aW5nIGRhdGEuLi4oMC8nICsgdGhpcy5jaGlsZEZsYXRMaXN0Lmxlbmd0aCArICcpIHJlY29yZHMnO1xyXG4gICAgICAgIHRoaXMuYXN5bmNGb3JFYWNoUmVjb3JkSWQodGhpcy5jaGlsZEZsYXRMaXN0LCB0aGlzLmZldGNoUmVjb3JkSWQpLnRoZW4odGhpcy5vbkRvbmUpO1xyXG5cclxuICAgICAgICB0aGlzLmRpc3BsYXlUcmVlID0gW3RoaXMucm9vdE5vZGVdO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGV4OiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZXJyb3InLCB0aGlzLnVpTm90aWZpY2F0aW9uLmVycm9yKCdTZXJ2ZXIgRXJyb3I6ICcgKyBleC5zdGF0dXMsIFtleC5lcnJvci5NZXNzYWdlXSkpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DbG9uZSA9ICgpID0+IHtcclxuICAgIGxldCBjb3BpZXMgPSB0aGlzLnNlbGVjdGVkTnVtYmVyT2ZDb3BpZXMudmFsdWU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvcGllczsgaSsrKSB7XHJcbiAgICAgIGxldCB0YWJsZVR5cGUgPSB0aGlzLm1vZGVsVHlwZUxvb2t1cC5nZXRUeXBlKHRoaXMudGFibGVOYW1lKTtcclxuICAgICAgbGV0IG5ld0VudGl0eSA9IHRoaXMucGFyZW50RGF0YUNvbnRleHQuZW50aXR5QWNjZXNzKCkuYWRkKHRhYmxlVHlwZSwgdGhpcy5jb250ZXh0RmlsdGVycyk7XHJcbiAgICAgIHR5cGUgT2JqZWN0S2V5ID0ga2V5b2YgdHlwZW9mIG5ld0VudGl0eTtcclxuICAgICAgdGhpcy5nZXRQcm90b3R5cGVQcm9wZXJ0aWVzKHRoaXMuZW50aXR5KS5mb3JFYWNoKChwcm9wZXJ0eU5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BlcnR5SXNBbGxvd2VkKHByb3BlcnR5TmFtZSwgdGhpcy50YWJsZU5hbWUpKSB7XHJcbiAgICAgICAgICBuZXdFbnRpdHlbcHJvcGVydHlOYW1lIGFzIE9iamVjdEtleV0gPSB0aGlzLmVudGl0eVtwcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBuZXdFbnRpdHkuc2V0UHJvcGVydHkhKCdfYXNzb2NpYXRlZERhdGFDYWNoZWQnLCB0cnVlKTtcclxuXHJcbiAgICAgIHRoaXMudHJhdmVyc2UodGhpcy5kaXNwbGF5VHJlZVswXSwgbmV3RW50aXR5KTtcclxuICAgICAgdGhpcy52aWV3LmVudGl0aWVzPy51bnNoaWZ0KG5ld0VudGl0eSk7XHJcbiAgICB9XHJcbiAgICBsZXQgd2luZG93Q2xvc2VFdmVudEFyZ3MgPSBuZXcgVHJ1V2luZG93Q2xvc2VFdmVudEFyZ3MoKTtcclxuICAgIHdpbmRvd0Nsb3NlRXZlbnRBcmdzLmVudGl0aWVzID0gdGhpcy52aWV3LmVudGl0aWVzIGFzIEFycmF5PFRydUVudGl0eUJhc2U+O1xyXG4gICAgd2luZG93Q2xvc2VFdmVudEFyZ3MuZW50aXR5SW5kZXggPSAwO1xyXG4gICAgd2luZG93Q2xvc2VFdmVudEFyZ3MucmVmcmVzaCA9IHRydWU7XHJcbiAgICB0aGlzLndpbmRvd0V2ZW50SGFuZGxlci5jbG9zZSh3aW5kb3dDbG9zZUV2ZW50QXJncyk7XHJcbiAgfTtcclxuXHJcbiAgb25Eb25lID0gKCkgPT4ge1xyXG4gICAgdGhpcy5kb25lUHJvY2Vzc2luZyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBvblJlbmRlcmVkID0gKCkgPT4ge1xyXG4gICAgdGhpcy5sb2FkaW5nTWVzc2FnZSA9ICcnO1xyXG4gIH07XHJcblxyXG4gIG9uQ2FuY2VsID0gKCkgPT4ge1xyXG4gICAgdGhpcy53aW5kb3dFdmVudEhhbmRsZXIuY2xvc2UoKTtcclxuICB9O1xyXG5cclxuICBvbkV4cGFuZENsaWNrZWQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNoaWxkRmxhdExpc3QuZmluZCgobm9kZTogTm9kZSkgPT4geyBub2RlLnNob3dFbnRpdGllcyA9IHRydWU7IH0pO1xyXG4gIH1cclxuXHJcbiAgb25Db2xsYXBzZUNsaWNrZWQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNoaWxkRmxhdExpc3QuZmluZCgobm9kZTogTm9kZSkgPT4geyBub2RlLnNob3dFbnRpdGllcyA9IGZhbHNlOyB9KTtcclxuICB9XHJcblxyXG4gIG9uTnVtYmVyT2ZDb3BpZXNDaGFuZ2VkID0gKGV2ZW50OiBhbnkpID0+IHtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLnZpZXcud2luZG93LnBhcmVudERhdGFDb250ZXh0ICE9PSBudWxsKVxyXG4gICAgICB0aGlzLnBhcmVudERhdGFDb250ZXh0ID0gdGhpcy52aWV3LndpbmRvdy5wYXJlbnREYXRhQ29udGV4dDtcclxuICAgIHRoaXMudGFibGVOYW1lID0gdGhpcy52aWV3LndpbmRvdy50YWJsZU5hbWU7XHJcbiAgICB0aGlzLmVudGl0aWVzID0gdGhpcy52aWV3LmVudGl0aWVzIGFzIGFueTtcclxuICAgIHRoaXMuZW50aXR5ID0gdGhpcy5lbnRpdGllc1t0aGlzLnZpZXcuZW50aXR5SW5kZXhdO1xyXG4gICAgdGhpcy5yb290Tm9kZSA9IG5ldyBOb2RlKG51bGwsIHRoaXMudGFibGVOYW1lLCB0aGlzLnRhYmxlTmFtZSwgZmFsc2UsIHRydWUsIG51bGwsIG51bGwsIG51bGwsIHRydWUsIG51bGwsIG51bGwpO1xyXG4gICAgdGhpcy5zZXRFbnRpdHlEaXNwbGF5VmFsdWVzKHRoaXMudmlldy53aW5kb3cudGFibGVOYW1lKTtcclxuICAgIHRoaXMuZ2V0RGF0YUZvckNsb25pbmcoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5kYXRhVHJlZS5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5mbGF0TGlzdC5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5jaGlsZEZsYXRMaXN0Lmxlbmd0aCA9IDA7XHJcbiAgfVxyXG59XHJcblxyXG5jbGFzcyBOb2RlIHtcclxuICByZWY6IG51bWJlciB8IG51bGw7XHJcbiAgdGFibGVOYW1lOiBzdHJpbmc7XHJcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcclxuICBjaGVja2VkOiBib29sZWFuO1xyXG4gIGNoaWxkOiBhbnk7XHJcbiAgY2hpbGROb2RlczogYW55O1xyXG4gIHNob3dFbnRpdGllczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHBhdGhGcm9tUm9vdDogc3RyaW5nIHwgbnVsbDtcclxuICBwYXJlbnRUb0NoaWxkUmVmTmFtZTogc3RyaW5nIHwgbnVsbDtcclxuICBub2RlczogTm9kZVtdID0gW107XHJcbiAgcm9vdDogYW55O1xyXG4gIHBhcmVudDogYW55O1xyXG4gIGVudGl0eTogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHJlZjogbnVtYmVyIHwgbnVsbCxcclxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxyXG4gICAgZGlzcGxheU5hbWU6IHN0cmluZyxcclxuICAgIGNoaWxkOiBhbnksXHJcbiAgICBjaGVja2VkOiBib29sZWFuLFxyXG4gICAgY2hpbGRFbnRpdGllczogYW55LFxyXG4gICAgcGF0aEZyb21Sb290OiBzdHJpbmcgfCBudWxsLFxyXG4gICAgcGFyZW50VG9DaGlsZFJlZk5hbWU6IHN0cmluZyB8IG51bGwsXHJcbiAgICByb290OiBib29sZWFuLFxyXG4gICAgcGFyZW50OiBhbnksXHJcbiAgICBlbnRpdHk6IGFueSkge1xyXG4gICAgdGhpcy5yZWYgPSByZWY7XHJcbiAgICB0aGlzLnRhYmxlTmFtZSA9IHRhYmxlTmFtZTtcclxuICAgIHRoaXMuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcclxuICAgIHRoaXMuY2hlY2tlZCA9IGNoZWNrZWQ7XHJcbiAgICB0aGlzLmNoaWxkID0gY2hpbGQ7XHJcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBjaGlsZEVudGl0aWVzO1xyXG4gICAgdGhpcy5wYXRoRnJvbVJvb3QgPSBwYXRoRnJvbVJvb3Q7XHJcbiAgICB0aGlzLnBhcmVudFRvQ2hpbGRSZWZOYW1lID0gcGFyZW50VG9DaGlsZFJlZk5hbWU7XHJcbiAgICB0aGlzLnJvb3QgPSByb290O1xyXG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XHJcbiAgICB0aGlzLmVudGl0eSA9IGVudGl0eTtcclxuICB9XHJcblxyXG4gIG9uR3JvdXBEaXNwbGF5ID0gKCkgPT4ge1xyXG4gICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHRoaXMuc2hvd0VudGl0aWVzID0gIXRoaXMuc2hvd0VudGl0aWVzO1xyXG4gICAgdGhpcy5ub2Rlcy5maW5kKChuOiBhbnkpID0+IHtcclxuICAgICAgbi5zaG93RW50aXRpZXMgPSBjdXJyZW50VmFsdWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQ2hlY2tlZENoYW5nZWQgPSAoKSA9PiB7XHJcbiAgICBpZiAodGhpcy5jaGVja2VkKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoaWxkKSB7XHJcbiAgICAgICAgdmFyIHAgPSB0aGlzLnBhcmVudDtcclxuICAgICAgICB3aGlsZSAocCkge1xyXG4gICAgICAgICAgcC5jaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICAgIHAgPSBwLnBhcmVudDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5ub2Rlcy5maW5kKChuOiBhbnkpID0+IHsgbi5jaGVja2VkID0gdHJ1ZTsgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmNoaWxkKSB7XHJcbiAgICAgICAgdmFyIGFsbFVuY2hlY2tlZCA9IHRoaXMucGFyZW50Lm5vZGVzLmV2ZXJ5KChuOiBhbnkpID0+IHtcclxuICAgICAgICAgIHJldHVybiBuLmNoZWNrZWQgPT09IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChhbGxVbmNoZWNrZWQpXHJcbiAgICAgICAgICB0aGlzLnBhcmVudC5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIHVuY2hlY2tDaGlsZE5vZGVzID0gKG5vZGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgbm9kZS5ub2Rlcy5maW5kKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdW5jaGVja0NoaWxkTm9kZXMobik7XHJcbiAgICAgICAgICAgIG4uY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm5vZGVzLmZpbmQoKG46IGFueSkgPT4ge1xyXG4gICAgICAgICAgdW5jaGVja0NoaWxkTm9kZXMobik7XHJcbiAgICAgICAgICBuLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2PlxyXG4gIDx0cnUtdG9vbGJhcj5cclxuICAgIDx0cnUtdG9vbGJhci1idXR0b24gW2ljb25dPVwiJ2V4cGFuZC1pY29uJ1wiIFt0b29sdGlwXT1cIidFeHBhbmQnXCIgW2Rpc2FibGVkXT1cIiFkb25lUHJvY2Vzc2luZ1wiIChvbkNsaWNrKT1cIm9uRXhwYW5kQ2xpY2tlZCgpXCI+PC90cnUtdG9vbGJhci1idXR0b24+XHJcbiAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIidjb2xsYXBzZS1pY29uJ1wiIFt0b29sdGlwXT1cIidDb2xsYXBzZSdcIiBbZGlzYWJsZWRdPVwiIWRvbmVQcm9jZXNzaW5nXCIgKG9uQ2xpY2spPVwib25Db2xsYXBzZUNsaWNrZWQoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgPHRydS10b29sYmFyLXRleHQgW3RleHRdPVwiJ0NvcGllczonXCI+PC90cnUtdG9vbGJhci10ZXh0PlxyXG4gICAgPHRydS10b29sYmFyLWRyb3Bkb3duIFtvcHRpb25zXT1cIm51bWJlck9mQ29waWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkT3B0aW9uKV09XCJzZWxlY3RlZE51bWJlck9mQ29waWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWRvbmVQcm9jZXNzaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uTnVtYmVyT2ZDb3BpZXNDaGFuZ2VkKCRldmVudClcIj5cclxuICAgIDwvdHJ1LXRvb2xiYXItZHJvcGRvd24+XHJcbiAgPC90cnUtdG9vbGJhcj5cclxuICA8ZGl2IGNsYXNzPVwidHJ1LWRpYWxvZy1jb250ZW50IGNsb25lXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgI2dyb3VwTm9kZVJlbmRlcmVyIGxldC1kYXRhPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIWRhdGEuY2hpbGQgfHwgZGF0YS5zaG93RW50aXRpZXNcIlxyXG4gICAgICAgICAgIGNsYXNzPVwiY2xvbmUtbW9kYWwtdHJlZS1ncm91cFwiPlxyXG4gICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImRhdGEuY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJkYXRhLm9uQ2hlY2tlZENoYW5nZWQoKVwiXHJcbiAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkYXRhLnJvb3RcIlxyXG4gICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiAvPlxyXG4gICAgICAgIDxhIChjbGljayk9XCJkYXRhLm9uR3JvdXBEaXNwbGF5TmFtZUNsaWNrZWQoKVwiXHJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwieydjbG9uZS1tb2RhbC10cmVlLWdyb3VwLXJvb3QtbmFtZSc6IGRhdGEucm9vdCB8fCBkYXRhLmNoaWxkfVwiXHJcbiAgICAgICAgICAgW25nU3R5bGVdPVwieydtYXgtd2lkdGgnOiBkYXRhLmNoaWxkTm9kZSA/ICczMDBweCcgOiAnYXV0byd9XCI+e3tkYXRhLmRpc3BsYXlOYW1lfX08L2E+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhZGF0YS5yb290ICYmICFkYXRhLmNoaWxkXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImNsb25lLW1vZGFsLXRyZWUtZ3JvdXAtY291bnRcIj4oe3tkYXRhLm5vZGVzLmxlbmd0aH19KTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDx1bD5cclxuICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGRhdGEgb2YgZGF0YS5ub2RlczsgbGV0IGxhc3QgPSBsYXN0XCIgdHJ1UmVuZGVyZWQgKHJlbmRlcmVkKT1cIm9uUmVuZGVyZWQoKVwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdUZW1wbGF0ZU91dGxldD1cImdyb3VwTm9kZVJlbmRlcmVyOyBjb250ZXh0OiB7JGltcGxpY2l0OiBkYXRhfVwiPjwvZGl2PlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgIDwvdWw+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPGRpdiAqbmdJZj1cImxvYWRpbmdNZXNzYWdlXCJcclxuICAgICAgICAgY2xhc3M9XCJjbG9uZS1tb2RhbC1sb2FkaW5nXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiY2xvbmUtbW9kYWwtbG9hZGluZy1tZXNzYWdlXCI+e3tsb2FkaW5nTWVzc2FnZX19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZG9uZVByb2Nlc3NpbmdcIlxyXG4gICAgICAgICBjbGFzcz1cImNsb25lLW1vZGFsLXRyZWVcIj5cclxuICAgICAgPHVsPlxyXG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZGF0YSBvZiBkaXNwbGF5VHJlZTsgbGV0IGxhc3QgPSBsYXN0XCIgdHJ1UmVuZGVyZWQgKHJlbmRlcmVkKT1cIm9uUmVuZGVyZWQoKVwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdUZW1wbGF0ZU91dGxldD1cImdyb3VwTm9kZVJlbmRlcmVyOyBjb250ZXh0OiB7JGltcGxpY2l0OiBkYXRhfVwiPjwvZGl2PlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgIDwvdWw+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwidHJ1LWRpYWxvZy1mb290ZXJcIj5cclxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwib25DYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwib25DbG9uZSgpXCIgKGtleXVwLmVudGVyKT1cIm9uQ2xvbmUoKVwiIFtkaXNhYmxlZF09XCIhZG9uZVByb2Nlc3NpbmdcIj5DbG9uZTwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
347
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWNsb25lLXZpZXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cnUtY29tbW9uLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvY2xvbmUtdmlldy90cnUtY2xvbmUtdmlldy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9jbG9uZS12aWV3L3RydS1jbG9uZS12aWV3Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFXN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saURBQWlELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVExRixNQUFNLE9BQU8sWUFBYSxTQUFRLFdBQVc7SUFtQy9CO0lBQ0E7SUFDRjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUF6Q1YsT0FBTyxHQUFZLElBQUksQ0FBQztJQUN4QixjQUFjLEdBQVcsa0NBQWtDLENBQUM7SUFDNUQsY0FBYyxDQUFrQztJQUNoRCxzQkFBc0IsQ0FBNEI7SUFDbEQsY0FBYyxHQUFHLElBQUksQ0FBQztJQUN0QixRQUFRLEdBQWdCLElBQUksQ0FBQztJQUM3QixrQkFBa0IsR0FBRztRQUNuQixZQUFZO1FBQ1osU0FBUztRQUNULFlBQVk7UUFDWixTQUFTO1FBQ1QsUUFBUTtRQUNSLHlCQUF5QjtRQUN6QixjQUFjO1FBQ2QsdUJBQXVCO1FBQ3ZCLGVBQWU7UUFDZixjQUFjO1FBQ2QsWUFBWTtRQUNaLFlBQVk7UUFDWixlQUFlO1FBQ2YsYUFBYTtRQUNiLGFBQWE7UUFDYix1QkFBdUI7UUFDdkIsS0FBSztLQUNOLENBQUM7SUFDRixRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ2QsUUFBUSxHQUFnQixFQUFFLENBQUM7SUFDM0IsYUFBYSxHQUFnQixFQUFFLENBQUM7SUFDaEMsY0FBYyxHQUFXLENBQUMsQ0FBQztJQUMzQixjQUFjLEdBQVksS0FBSyxDQUFDO0lBQ2hDLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5QixpQkFBaUIsQ0FBa0I7SUFFbkMsWUFDWSxXQUEyQixFQUMzQixrQkFBeUMsRUFDM0MsV0FBMkIsRUFDM0IsZ0JBQXFDLEVBQ3JDLG1CQUEyQyxFQUMzQyxlQUFtQyxFQUNuQywrQkFBbUUsRUFDbkUsY0FBaUM7UUFDekMsS0FBSyxDQUFDLFdBQVcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBUjdCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXVCO1FBQzNDLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXFCO1FBQ3JDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBd0I7UUFDM0Msb0JBQWUsR0FBZixlQUFlLENBQW9CO1FBQ25DLG9DQUErQixHQUEvQiwrQkFBK0IsQ0FBb0M7UUFDbkUsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBRXpDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVPLGlCQUFpQixHQUFHLEdBQXFDLEVBQUU7UUFDakUsSUFBSSxNQUFNLEdBQXFDLEVBQUUsQ0FBQztRQUNsRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDVixLQUFLLEVBQUUsQ0FBQztnQkFDUixLQUFLLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTthQUNwQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFBO0lBRU8saUJBQWlCLEdBQUcsQ0FBQyxZQUFvQixFQUFFLFNBQWlCLEVBQUUsRUFBRTtRQUN0RSxJQUFJLFlBQVksS0FBSyxTQUFTLEdBQUcsS0FBSztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3JELElBQUksWUFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMvQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqRSxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsa0JBQWtCO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDMUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsZ0JBQWdCLElBQUksT0FBTyxnQkFBZ0IsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVHLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFBO0lBRU8sc0JBQXNCLEdBQUcsQ0FBQyxHQUFRLEVBQUUsRUFBRTtRQUM1QyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFBO0lBRU8sa0NBQWtDLEdBQUcsQ0FBQyxhQUFrQixFQUFFLEVBQUU7UUFDbEUsd0VBQXdFO1FBQ3hFLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckUsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFrQyxDQUFDO1FBQy9HLElBQUksYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0MsSUFBSSx1QkFBdUIsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RixJQUFJLDRCQUE0QixHQUFHLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3RFLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFLEdBQUcsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxlQUFlLEdBQWUsRUFBRSxDQUFDO1FBQ3JDLDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFDN0MsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Z0JBQzdDLGVBQWUsQ0FBQyxJQUFJLENBQUM7b0JBQ25CLG9CQUFvQixFQUFFLENBQUM7b0JBQ3ZCLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO2lCQUMzQixDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUMsQ0FBQTtJQUVPLHlCQUF5QixHQUFHLENBQUMsUUFBZ0IsRUFBRSxFQUFFO1FBQ3ZELElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUMsQ0FBQTtJQUVPLGNBQWMsR0FBRyxDQUFDLGFBQWtCLEVBQUUsSUFBUyxFQUFFLEVBQUU7UUFDekQsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdFLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFrQixFQUFFLEVBQUU7WUFDN0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekUsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekQsSUFBSSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQ3RCLElBQUksRUFDSixhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQzFDLFdBQVcsRUFBRSxXQUFxQixFQUNsQyxLQUFLLEVBQ0wsSUFBSSxFQUNKLEVBQUUsRUFDRixFQUFFLEVBQ0YsSUFBSSxFQUNKLEtBQUssRUFDTCxJQUFJLEVBQ0osSUFBSSxDQUNMLENBQUM7WUFFRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUU5QixhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQWdCLEVBQUUsRUFBRTtnQkFDbEQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQ3RCLFdBQVcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQ3pCLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixFQUFFLEVBQ0YsRUFBRSxFQUNGLGFBQWEsQ0FBQyxvQkFBb0IsRUFDbEMsS0FBSyxFQUNMLFNBQVMsRUFDVCxXQUFXLENBQ1osQ0FBQztnQkFFRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDbkMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzlDLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUE7SUFFTyxvQkFBb0IsR0FBRyxDQUFDLEdBQVEsRUFBRSxFQUFPLEVBQUUsRUFBRTtRQUNuRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUU7WUFDbkMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLENBQUMsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN4QixDQUFDLENBQUE7SUFFTyxhQUFhLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRTtRQUNyQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDZCxJQUFJLElBQUksR0FBRztZQUNULEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRztZQUNWLFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUztTQUN2QixDQUFDO1FBQ0YsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO1lBQ2xDLENBQUMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7WUFDakMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsK0JBQStCLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO1lBQzVILElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU07Z0JBQ2xELElBQUksQ0FBQyxjQUFjLEdBQUcsbUJBQW1CLENBQUM7WUFDNUMsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQTtJQUVPLFFBQVEsR0FBRyxDQUFDLElBQVMsRUFBRSxhQUFrQixFQUFFLEVBQUU7UUFDbkQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3hCLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQzVCLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFjLEVBQUUsRUFBRTtnQkFDcEMsSUFBSSxTQUFTLENBQUMsT0FBTztvQkFDbkIsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFjLEVBQUUsRUFBRTt3QkFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUM7b0JBQzFDLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqQixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzdELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFFMUYsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO29CQUM5RCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7d0JBQ3pELFNBQVMsQ0FBQyxZQUF5QixDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDbkUsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFFSCxTQUFTLENBQUMsV0FBWSxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUV0RCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ25FLGFBQWEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3pELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQzVCLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFjLEVBQUUsRUFBRTtvQkFDcEMsSUFBSSxTQUFTLENBQUMsT0FBTzt3QkFDbkIsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFjLEVBQUUsRUFBRTs0QkFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7d0JBQ3RDLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDLENBQUM7SUFFTSxpQkFBaUIsR0FBRyxHQUFHLEVBQUU7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssQ0FBQztZQUMxQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHO1lBQ3BCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztTQUMxQixDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ1gsSUFBSSxFQUFFLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFbEQsSUFBSSxDQUFDLGNBQWMsR0FBRyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7Z0JBQ3hGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUVwRixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxFQUFPLEVBQUUsRUFBRTtnQkFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ25HLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUE7SUFFRCxPQUFPLEdBQUcsR0FBRyxFQUFFO1FBQ2IsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQztRQUMvQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUUxRixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQW9CLEVBQUUsRUFBRTtnQkFDeEUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUN6RCxTQUFTLENBQUMsWUFBeUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ25FLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILFNBQVMsQ0FBQyxXQUFZLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFdEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsSUFBSSxvQkFBb0IsR0FBRyxJQUFJLHVCQUF1QixFQUFFLENBQUM7UUFDekQsb0JBQW9CLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBZ0MsQ0FBQztRQUMzRSxvQkFBb0IsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLG9CQUFvQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3RELENBQUMsQ0FBQztJQUVGLE1BQU0sR0FBRyxHQUFHLEVBQUU7UUFDWixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUM3QixDQUFDLENBQUE7SUFFRCxVQUFVLEdBQUcsR0FBRyxFQUFFO1FBQ2hCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO0lBQzNCLENBQUMsQ0FBQztJQUVGLFFBQVEsR0FBRyxHQUFHLEVBQUU7UUFDZCxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbEMsQ0FBQyxDQUFDO0lBRUYsZUFBZSxHQUFHLEdBQUcsRUFBRTtRQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQVUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDLENBQUE7SUFFRCxpQkFBaUIsR0FBRyxHQUFHLEVBQUU7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFVLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQyxDQUFBO0lBRUQsdUJBQXVCLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRTtJQUV6QyxDQUFDLENBQUE7SUFFRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsS0FBSyxJQUFJO1lBQzdDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztRQUM5RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUM1QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBZSxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEgsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQzt1R0F6U1UsWUFBWTsyRkFBWixZQUFZLDZFQ3BCekIseWtGQWlEQTs7MkZEN0JhLFlBQVk7a0JBTHhCLFNBQVM7K0JBQ0UsZ0JBQWdCOztBQWdUNUIsTUFBTSxJQUFJO0lBQ1IsR0FBRyxDQUFnQjtJQUNuQixTQUFTLENBQVM7SUFDbEIsV0FBVyxDQUFTO0lBQ3BCLE9BQU8sQ0FBVTtJQUNqQixLQUFLLENBQU07SUFDWCxVQUFVLENBQU07SUFDaEIsWUFBWSxHQUFZLEtBQUssQ0FBQztJQUM5QixZQUFZLENBQWdCO0lBQzVCLG9CQUFvQixDQUFnQjtJQUNwQyxLQUFLLEdBQVcsRUFBRSxDQUFDO0lBQ25CLElBQUksQ0FBTTtJQUNWLE1BQU0sQ0FBTTtJQUNaLE1BQU0sQ0FBTTtJQUVaLFlBQ0UsR0FBa0IsRUFDbEIsU0FBaUIsRUFDakIsV0FBbUIsRUFDbkIsS0FBVSxFQUNWLE9BQWdCLEVBQ2hCLGFBQWtCLEVBQ2xCLFlBQTJCLEVBQzNCLG9CQUFtQyxFQUNuQyxJQUFhLEVBQ2IsTUFBVyxFQUNYLE1BQVc7UUFDWCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztRQUNqRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsY0FBYyxHQUFHLEdBQUcsRUFBRTtRQUNwQixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUMxRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQ3pCLENBQUMsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFBO0lBRUQsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFO1FBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ3BCLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ1QsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ2pCLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUNmLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7b0JBQ3BELE9BQU8sQ0FBQyxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUM7Z0JBQzdCLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksWUFBWTtvQkFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDaEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRTtvQkFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTt3QkFDekIsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3JCLENBQUMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNwQixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtvQkFDekIsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3JCLENBQUMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxDQUFBO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRydVZpZXdCYXNlIH0gZnJvbSAnLi4vLi4vYmFzZS12aWV3cy90cnUtdmlldy1iYXNlJztcclxuaW1wb3J0IHsgVHJ1RGF0YUNvbnRleHQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtZGF0YS1jb250ZXh0JztcclxuaW1wb3J0IHsgSVRydVRvb2xiYXJEcm9wZG93bk9wdGlvbiB9IGZyb20gJy4uL3Rvb2xiYXIvY2xhc3Nlcy90cnUtdG9vbGJhci1kcm9wZG93bi1vcHRpb24nO1xyXG5pbXBvcnQgeyBUcnVUZXh0TWFuYWdlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS10ZXh0LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBUcnVXaW5kb3dFdmVudEhhbmRsZXIgfSBmcm9tICcuLi9kZXNrdG9wL3NlcnZpY2VzL3RydS13aW5kb3ctZXZlbnQtaGFuZGxlcic7XHJcbmltcG9ydCB7IFRydU1vZGVsVGFibGVMb29rdXAgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtbW9kZWwtdGFibGUtbG9va3VwJztcclxuaW1wb3J0IHsgVHJ1VWlOb3RpZmljYXRpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtdWktbm90aWZpY2F0aW9uJztcclxuaW1wb3J0IHsgVHJ1TW9kZWxQcm9wZXJ0eUxvb2t1cCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS1tb2RlbC1wcm9wZXJ0eS1sb29rdXAnO1xyXG5pbXBvcnQgeyBUcnVNb2RlbFR5cGVMb29rdXAgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtbW9kZWwtdHlwZS1sb29rdXAnO1xyXG5pbXBvcnQgeyBUcnVNb2RlbE5hdmlnYXRpb25Qcm9wZXJ0aWVzTG9va3VwIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LW1vZGVsLW5hdmlnYXRpb24tcHJvcGVydGllcy1sb29rdXAnO1xyXG5pbXBvcnQgeyBUcnVOYXZpZ2F0aW9uUHJvcGVydHlDb25maWcgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RydS1uYXZpZ2F0aW9uLXByb3BlcnR5LWNvbmZpZyc7XHJcbmltcG9ydCB7IFRydVdpbmRvd0Nsb3NlRXZlbnRBcmdzIH0gZnJvbSAnLi4vZGVza3RvcC9zZXJ2aWNlcy90cnUtd2luZG93LWNsb3NlLWV2ZW50LWFyZ3MnO1xyXG5pbXBvcnQgeyBUcnVFbnRpdHlCYXNlIH0gZnJvbSAnLi4vLi4vYmFzZS1jbGFzc2VzL3RydS1lbnRpdHktYmFzZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RydS1jbG9uZS12aWV3JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJ1LWNsb25lLXZpZXcuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHJ1LWNsb25lLXZpZXcuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRydUNsb25lVmlldyBleHRlbmRzIFRydVZpZXdCYXNlIHtcclxuICBsb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBsb2FkaW5nTWVzc2FnZTogc3RyaW5nID0gJ1NlYXJjaGluZyBmb3IgcmVsYXRlZCByZWNvcmRzLi4uJztcclxuICBudW1iZXJPZkNvcGllczogQXJyYXk8SVRydVRvb2xiYXJEcm9wZG93bk9wdGlvbj5cclxuICBzZWxlY3RlZE51bWJlck9mQ29waWVzOiBJVHJ1VG9vbGJhckRyb3Bkb3duT3B0aW9uO1xyXG4gIGNvbnRleHRGaWx0ZXJzID0gbnVsbDtcclxuICByb290Tm9kZTogTm9kZSB8IG51bGwgPSBudWxsO1xyXG4gIGlnbm9yZVByb3BlcnR5TGlzdCA9IFtcclxuICAgICdDcmVhdGVkUmVmJyxcclxuICAgICdDcmVhdGVkJyxcclxuICAgICdVcGRhdGVkUmVmJyxcclxuICAgICdVcGRhdGVkJyxcclxuICAgICdyb3d2ZXInLFxyXG4gICAgJ19jdXN0b21WYWxpZGF0aW9uRXJyb3JzJyxcclxuICAgICdlbnRpdHlBc3BlY3QnLFxyXG4gICAgJ19hc3NvY2lhdGVkRGF0YUNhY2hlZCcsXHJcbiAgICAnX2JhY2tpbmdTdG9yZScsXHJcbiAgICAnX3NldERlZmF1bHRzJyxcclxuICAgICdfJHR5cGVOYW1lJyxcclxuICAgICdlbnRpdHlUeXBlJyxcclxuICAgICdfJGludGVyY2VwdG9yJyxcclxuICAgICdnZXRQcm9wZXJ0eScsXHJcbiAgICAnc2V0UHJvcGVydHknLFxyXG4gICAgJ19wZW5kaW5nQmFja2luZ1N0b3JlcycsXHJcbiAgICAnUmVmJ1xyXG4gIF07XHJcbiAgZGF0YVRyZWUgPSBbXTtcclxuICBmbGF0TGlzdDogQXJyYXk8Tm9kZT4gPSBbXTtcclxuICBjaGlsZEZsYXRMaXN0OiBBcnJheTxOb2RlPiA9IFtdO1xyXG4gIHByb2Nlc3NlZENvdW50OiBudW1iZXIgPSAwO1xyXG4gIGRvbmVQcm9jZXNzaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGlzcGxheVRyZWUgPSBbdGhpcy5yb290Tm9kZV07XHJcbiAgcGFyZW50RGF0YUNvbnRleHQhOiBUcnVEYXRhQ29udGV4dDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgdGV4dE1hbmFnZXI6IFRydVRleHRNYW5hZ2VyLFxyXG4gICAgcHJvdGVjdGVkIHdpbmRvd0V2ZW50SGFuZGxlcjogVHJ1V2luZG93RXZlbnRIYW5kbGVyLFxyXG4gICAgcHJpdmF0ZSBkYXRhQ29udGV4dDogVHJ1RGF0YUNvbnRleHQsXHJcbiAgICBwcml2YXRlIG1vZGVsVGFibGVMb29rdXA6IFRydU1vZGVsVGFibGVMb29rdXAsXHJcbiAgICBwcml2YXRlIG1vZGVsUHJvcGVydHlMb29rdXA6IFRydU1vZGVsUHJvcGVydHlMb29rdXAsXHJcbiAgICBwcml2YXRlIG1vZGVsVHlwZUxvb2t1cDogVHJ1TW9kZWxUeXBlTG9va3VwLFxyXG4gICAgcHJpdmF0ZSBtb2RlbE5hdmlnYXRpb25Qcm9wZXJ0aWVzTG9va3VwOiBUcnVNb2RlbE5hdmlnYXRpb25Qcm9wZXJ0aWVzTG9va3VwLFxyXG4gICAgcHJpdmF0ZSB1aU5vdGlmaWNhdGlvbjogVHJ1VWlOb3RpZmljYXRpb24pIHtcclxuICAgIHN1cGVyKHRleHRNYW5hZ2VyLCB3aW5kb3dFdmVudEhhbmRsZXIpO1xyXG4gICAgdGhpcy5udW1iZXJPZkNvcGllcyA9IHRoaXMuZ2V0TnVtYmVyT2ZDb3BpZXMoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWROdW1iZXJPZkNvcGllcyA9IHRoaXMubnVtYmVyT2ZDb3BpZXNbMF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE51bWJlck9mQ29waWVzID0gKCk6IEFycmF5PElUcnVUb29sYmFyRHJvcGRvd25PcHRpb24+ID0+IHtcclxuICAgIGxldCBjb3BpZXM6IEFycmF5PElUcnVUb29sYmFyRHJvcGRvd25PcHRpb24+ID0gW107XHJcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAyNTsgaSsrKSB7XHJcbiAgICAgIGNvcGllcy5wdXNoKHtcclxuICAgICAgICB2YWx1ZTogaSxcclxuICAgICAgICBsYWJlbDogaS50b1N0cmluZygpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvcGllcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJvcGVydHlJc0FsbG93ZWQgPSAocHJvcGVydHlOYW1lOiBzdHJpbmcsIHRhYmxlTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAocHJvcGVydHlOYW1lID09PSB0YWJsZU5hbWUgKyAnUmVmJykgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKHByb3BlcnR5TmFtZS5zdGFydHNXaXRoKCdvJykpIHJldHVybiBmYWxzZTtcclxuICAgIGxldCBwcm9wZXJ0eSA9IHRoaXMubW9kZWxQcm9wZXJ0eUxvb2t1cC5sb29rdXAuZ2V0KHByb3BlcnR5TmFtZSk7XHJcbiAgICBpZiAocHJvcGVydHkgJiYgcHJvcGVydHkuZXhjbHVkZUZyb21DbG9uaW5nKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5pZ25vcmVQcm9wZXJ0eUxpc3Quc29tZShmdW5jdGlvbiAocHJvcGVydHlUb0lnbm9yZSkgeyByZXR1cm4gcHJvcGVydHlUb0lnbm9yZSA9PT0gcHJvcGVydHlOYW1lOyB9KSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UHJvdG90eXBlUHJvcGVydGllcyA9IChvYmo6IGFueSkgPT4ge1xyXG4gICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgZm9yICh2YXIgcHJvcCBpbiBvYmopIHtcclxuICAgICAgaWYgKCFvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHtcclxuICAgICAgICByZXN1bHQucHVzaChwcm9wKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q2hpbGRQcm9wZXJ0aWVzRm9yQ3VycmVudEVudGl0eSA9IChjdXJyZW50RW50aXR5OiBhbnkpID0+IHtcclxuICAgIC8vdmFyIHByb3BlcnR5TmFtZXMgPSBPYmplY3Qua2V5cyhPYmplY3QuZ2V0UHJvdG90eXBlT2YoY3VycmVudEVudGl0eSkpO1xyXG4gICAgbGV0IGVudGl0eU5hbWUgPSB0aGlzLmdldFR5cGVGcm9tRW50aXR5VHlwZU5hbWUoY3VycmVudEVudGl0eS4kdHlwZSk7XHJcbiAgICBsZXQgY2hpbGRMb29rdXAgPSB0aGlzLm1vZGVsTmF2aWdhdGlvblByb3BlcnRpZXNMb29rdXAubG9va3VwLmdldChlbnRpdHlOYW1lKSBhcyBUcnVOYXZpZ2F0aW9uUHJvcGVydHlDb25maWdbXTtcclxuICAgIGxldCBwcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmtleXMoY3VycmVudEVudGl0eSk7XHJcbiAgICBsZXQgbmF2aWdhdGlvblByb3BlcnR5TmFtZXMgPSBwcm9wZXJ0eU5hbWVzLmZpbHRlcigobikgPT4geyByZXR1cm4gbi5zdGFydHNXaXRoKCdvJyk7IH0pO1xyXG4gICAgbGV0IGNoaWxkTmF2aWdhdGlvblByb3BlcnR5TmFtZXMgPSBuYXZpZ2F0aW9uUHJvcGVydHlOYW1lcy5maWx0ZXIoKG4pID0+IHtcclxuICAgICAgcmV0dXJuIGNoaWxkTG9va3VwLnNvbWUoKGxvb2t1cDogYW55KSA9PiB7IHJldHVybiBsb29rdXAubmFtZSA9PT0gbjsgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgY2hpbGRQcm9wZXJ0aWVzOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICBjaGlsZE5hdmlnYXRpb25Qcm9wZXJ0eU5hbWVzLmZpbHRlcihmdW5jdGlvbiAobikge1xyXG4gICAgICBpZiAoY3VycmVudEVudGl0eVtuXSAmJiBjdXJyZW50RW50aXR5W25dLmxlbmd0aClcclxuICAgICAgICBjaGlsZFByb3BlcnRpZXMucHVzaCh7XHJcbiAgICAgICAgICBwYXJlbnRUb0NoaWxkUmVmTmFtZTogbixcclxuICAgICAgICAgIGVudGl0aWVzOiBjdXJyZW50RW50aXR5W25dXHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gY2hpbGRQcm9wZXJ0aWVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUeXBlRnJvbUVudGl0eVR5cGVOYW1lID0gKHR5cGVOYW1lOiBzdHJpbmcpID0+IHtcclxuICAgIHZhciBwMXMgPSB0eXBlTmFtZS5zcGxpdCgnLCcpWzBdO1xyXG4gICAgdmFyIHAycyA9IHAxcy5zcGxpdCgnLicpO1xyXG4gICAgcmV0dXJuIHAyc1twMnMubGVuZ3RoIC0gMV07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkQ2xvbmVUcmVlID0gKGN1cnJlbnRFbnRpdHk6IGFueSwgbm9kZTogYW55KSA9PiB7XHJcbiAgICB2YXIgY2hpbGRQcm9wZXJ0aWVzID0gdGhpcy5nZXRDaGlsZFByb3BlcnRpZXNGb3JDdXJyZW50RW50aXR5KGN1cnJlbnRFbnRpdHkpO1xyXG4gICAgY2hpbGRQcm9wZXJ0aWVzLmZvckVhY2goKGNoaWxkUHJvcGVydHk6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgdHlwZSA9IHRoaXMuZ2V0VHlwZUZyb21FbnRpdHlUeXBlTmFtZShjaGlsZFByb3BlcnR5LmVudGl0aWVzWzBdLiR0eXBlKTtcclxuICAgICAgICBsZXQgY2hpbGRMb29rdXAgPSB0aGlzLm1vZGVsVGFibGVMb29rdXAubG9va3VwLmdldCh0eXBlKTtcclxuICAgICAgICBsZXQgZ3JvdXBOb2RlID0gbmV3IE5vZGUoXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgY2hpbGRQcm9wZXJ0eS5lbnRpdGllc1swXS5jb25zdHJ1Y3Rvci5uYW1lLFxyXG4gICAgICAgICAgY2hpbGRMb29rdXA/LnBsdXJhbExhYmVsIGFzIHN0cmluZyxcclxuICAgICAgICAgIGZhbHNlLFxyXG4gICAgICAgICAgdHJ1ZSxcclxuICAgICAgICAgIFtdLFxyXG4gICAgICAgICAgJycsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgICBub2RlLFxyXG4gICAgICAgICAgbnVsbFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmxhdExpc3QucHVzaChncm91cE5vZGUpO1xyXG5cclxuICAgICAgICBjaGlsZFByb3BlcnR5LmVudGl0aWVzLmZvckVhY2goKGNoaWxkRW50aXR5OiBhbnkpID0+IHtcclxuICAgICAgICAgIGxldCB0eXBlID0gdGhpcy5nZXRUeXBlRnJvbUVudGl0eVR5cGVOYW1lKGNoaWxkRW50aXR5LiR0eXBlKTtcclxuICAgICAgICAgIGxldCBjaGlsZE5vZGUgPSBuZXcgTm9kZShcclxuICAgICAgICAgICAgY2hpbGRFbnRpdHlbdHlwZSArICdSZWYnXSxcclxuICAgICAgICAgICAgdHlwZSxcclxuICAgICAgICAgICAgdHlwZSxcclxuICAgICAgICAgICAgdHJ1ZSxcclxuICAgICAgICAgICAgdHJ1ZSxcclxuICAgICAgICAgICAgW10sXHJcbiAgICAgICAgICAgICcnLFxyXG4gICAgICAgICAgICBjaGlsZFByb3BlcnR5LnBhcmVudFRvQ2hpbGRSZWZOYW1lLFxyXG4gICAgICAgICAgICBmYWxzZSxcclxuICAgICAgICAgICAgZ3JvdXBOb2RlLFxyXG4gICAgICAgICAgICBjaGlsZEVudGl0eVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmNoaWxkRmxhdExpc3QucHVzaChjaGlsZE5vZGUpO1xyXG4gICAgICAgICAgZ3JvdXBOb2RlLm5vZGVzLnB1c2goY2hpbGROb2RlKTtcclxuICAgICAgICAgIHRoaXMuYnVpbGRDbG9uZVRyZWUoY2hpbGRFbnRpdHksIGNoaWxkTm9kZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIG5vZGUubm9kZXMucHVzaChncm91cE5vZGUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jRm9yRWFjaFJlY29yZElkID0gKGFycjogYW55LCBjYjogYW55KSA9PiB7XHJcbiAgICByZXR1cm4gYXJyLnJlZHVjZSgocDogYW55LCBjOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHAudGhlbigoKSA9PiBjYihjKSk7XHJcbiAgICB9LCBQcm9taXNlLnJlc29sdmUoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZldGNoUmVjb3JkSWQgPSAoY2hpbGQ6IGFueSkgPT4ge1xyXG4gICAgdmFyIGMgPSBjaGlsZDtcclxuICAgIHZhciBkYXRhID0ge1xyXG4gICAgICByZWY6IGMucmVmLFxyXG4gICAgICB0YWJsZU5hbWU6IGMudGFibGVOYW1lXHJcbiAgICB9O1xyXG4gICAgZGF0YSA9IHRoaXMudGV4dE1hbmFnZXIuZm9ybWF0QXNVcmxQYXJhbWV0ZXJzKGRhdGEpO1xyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogYW55KSA9PiB7XHJcbiAgICAgIGMuZGlzcGxheU5hbWUgPSBjaGlsZC5lbnRpdHkuSElEO1xyXG4gICAgICB0aGlzLnByb2Nlc3NlZENvdW50Kys7XHJcbiAgICAgIHRoaXMubG9hZGluZ01lc3NhZ2UgPSAnRm9ybWF0dGluZyBkYXRhLi4ucHJvY2Vzc2VkICgnICsgdGhpcy5wcm9jZXNzZWRDb3VudCArICcvJyArIHRoaXMuY2hpbGRGbGF0TGlzdC5sZW5ndGggKyAnKSByZWNvcmRzJztcclxuICAgICAgaWYgKHRoaXMucHJvY2Vzc2VkQ291bnQgPj0gdGhpcy5jaGlsZEZsYXRMaXN0Lmxlbmd0aClcclxuICAgICAgICB0aGlzLmxvYWRpbmdNZXNzYWdlID0gJ1JlbmRlcmluZyB0cmVlLi4uJztcclxuICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRyYXZlcnNlID0gKG5vZGU6IGFueSwgY3VycmVudEVudGl0eTogYW55KSA9PiB7XHJcbiAgICB2YXIgZ3JvdXAgPSAhbm9kZS5jaGlsZDtcclxuICAgIGlmIChncm91cCkge1xyXG4gICAgICB2YXIgZ3JvdXBOb2RlcyA9IG5vZGUubm9kZXM7XHJcbiAgICAgIGdyb3VwTm9kZXMuZm9yRWFjaCgoZ3JvdXBOb2RlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZ3JvdXBOb2RlLmNoZWNrZWQpXHJcbiAgICAgICAgICBncm91cE5vZGUubm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy50cmF2ZXJzZShjaGlsZE5vZGUsIGN1cnJlbnRFbnRpdHkpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKG5vZGUuY2hlY2tlZCkge1xyXG4gICAgICAgIGxldCB0YWJsZVR5cGUgPSB0aGlzLm1vZGVsVHlwZUxvb2t1cC5nZXRUeXBlKG5vZGUudGFibGVOYW1lKTtcclxuICAgICAgICBsZXQgbmV3RW50aXR5ID0gdGhpcy5wYXJlbnREYXRhQ29udGV4dC5lbnRpdHlBY2Nlc3MoKS5hZGQodGFibGVUeXBlLCB0aGlzLmNvbnRleHRGaWx0ZXJzKTtcclxuICAgICAgICB0eXBlIE9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBuZXdFbnRpdHk7XHJcbiAgICAgICAgdGhpcy5nZXRQcm90b3R5cGVQcm9wZXJ0aWVzKG5ld0VudGl0eSkuZm9yRWFjaCgocHJvcGVydHlOYW1lKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5wcm9wZXJ0eUlzQWxsb3dlZChwcm9wZXJ0eU5hbWUsIG5vZGUudGFibGVOYW1lKSkge1xyXG4gICAgICAgICAgICBuZXdFbnRpdHlbcHJvcGVydHlOYW1lIGFzIE9iamVjdEtleV0gPSBub2RlLmVudGl0eVtwcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBuZXdFbnRpdHkuc2V0UHJvcGVydHkhKCdfYXNzb2NpYXRlZERhdGFDYWNoZWQnLCB0cnVlKTtcclxuXHJcbiAgICAgICAgbGV0IGNoaWxkTG9va3VwID0gdGhpcy5tb2RlbFRhYmxlTG9va3VwLmxvb2t1cC5nZXQobm9kZS50YWJsZU5hbWUpO1xyXG4gICAgICAgIGN1cnJlbnRFbnRpdHlbbm9kZS5wYXJlbnRUb0NoaWxkUmVmTmFtZV0ucHVzaChuZXdFbnRpdHkpO1xyXG4gICAgICAgIGxldCBjaGlsZE5vZGVzID0gbm9kZS5ub2RlcztcclxuICAgICAgICBjaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2hpbGROb2RlLmNoZWNrZWQpXHJcbiAgICAgICAgICAgIGNoaWxkTm9kZS5ub2Rlcy5mb3JFYWNoKChncm91cE5vZGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudHJhdmVyc2UoZ3JvdXBOb2RlLCBuZXdFbnRpdHkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgZ2V0RGF0YUZvckNsb25pbmcgPSAoKSA9PiB7XHJcbiAgICB0aGlzLnBhcmVudERhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLmNsb25lKHtcclxuICAgICAgcmVmOiB0aGlzLmVudGl0eS5SZWYsXHJcbiAgICAgIHRhYmxlTmFtZTogdGhpcy50YWJsZU5hbWVcclxuICAgIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhVHJlZSA9IHJlc3BvbnNlLkNvbnRlbnRbMF07XHJcbiAgICAgICAgdGhpcy5idWlsZENsb25lVHJlZSh0aGlzLmRhdGFUcmVlLCB0aGlzLnJvb3ROb2RlKTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkaW5nTWVzc2FnZSA9ICdGb3JtYXR0aW5nIGRhdGEuLi4oMC8nICsgdGhpcy5jaGlsZEZsYXRMaXN0Lmxlbmd0aCArICcpIHJlY29yZHMnO1xyXG4gICAgICAgIHRoaXMuYXN5bmNGb3JFYWNoUmVjb3JkSWQodGhpcy5jaGlsZEZsYXRMaXN0LCB0aGlzLmZldGNoUmVjb3JkSWQpLnRoZW4odGhpcy5vbkRvbmUpO1xyXG5cclxuICAgICAgICB0aGlzLmRpc3BsYXlUcmVlID0gW3RoaXMucm9vdE5vZGVdO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGV4OiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZXJyb3InLCB0aGlzLnVpTm90aWZpY2F0aW9uLmVycm9yKCdTZXJ2ZXIgRXJyb3I6ICcgKyBleC5zdGF0dXMsIFtleC5lcnJvci5NZXNzYWdlXSkpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DbG9uZSA9ICgpID0+IHtcclxuICAgIGxldCBjb3BpZXMgPSB0aGlzLnNlbGVjdGVkTnVtYmVyT2ZDb3BpZXMudmFsdWU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvcGllczsgaSsrKSB7XHJcbiAgICAgIGxldCB0YWJsZVR5cGUgPSB0aGlzLm1vZGVsVHlwZUxvb2t1cC5nZXRUeXBlKHRoaXMudGFibGVOYW1lKTtcclxuICAgICAgbGV0IG5ld0VudGl0eSA9IHRoaXMucGFyZW50RGF0YUNvbnRleHQuZW50aXR5QWNjZXNzKCkuYWRkKHRhYmxlVHlwZSwgdGhpcy5jb250ZXh0RmlsdGVycyk7XHJcbiAgICAgIHR5cGUgT2JqZWN0S2V5ID0ga2V5b2YgdHlwZW9mIG5ld0VudGl0eTtcclxuICAgICAgdGhpcy5nZXRQcm90b3R5cGVQcm9wZXJ0aWVzKHRoaXMuZW50aXR5KS5mb3JFYWNoKChwcm9wZXJ0eU5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BlcnR5SXNBbGxvd2VkKHByb3BlcnR5TmFtZSwgdGhpcy50YWJsZU5hbWUpKSB7XHJcbiAgICAgICAgICBuZXdFbnRpdHlbcHJvcGVydHlOYW1lIGFzIE9iamVjdEtleV0gPSB0aGlzLmVudGl0eVtwcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBuZXdFbnRpdHkuc2V0UHJvcGVydHkhKCdfYXNzb2NpYXRlZERhdGFDYWNoZWQnLCB0cnVlKTtcclxuXHJcbiAgICAgIHRoaXMudHJhdmVyc2UodGhpcy5kaXNwbGF5VHJlZVswXSwgbmV3RW50aXR5KTtcclxuICAgICAgdGhpcy52aWV3LmVudGl0aWVzPy51bnNoaWZ0KG5ld0VudGl0eSk7XHJcbiAgICB9XHJcbiAgICBsZXQgd2luZG93Q2xvc2VFdmVudEFyZ3MgPSBuZXcgVHJ1V2luZG93Q2xvc2VFdmVudEFyZ3MoKTtcclxuICAgIHdpbmRvd0Nsb3NlRXZlbnRBcmdzLmVudGl0aWVzID0gdGhpcy52aWV3LmVudGl0aWVzIGFzIEFycmF5PFRydUVudGl0eUJhc2U+O1xyXG4gICAgd2luZG93Q2xvc2VFdmVudEFyZ3MuZW50aXR5SW5kZXggPSAwO1xyXG4gICAgd2luZG93Q2xvc2VFdmVudEFyZ3MucmVmcmVzaCA9IHRydWU7XHJcbiAgICB0aGlzLndpbmRvd0V2ZW50SGFuZGxlci5jbG9zZSh3aW5kb3dDbG9zZUV2ZW50QXJncyk7XHJcbiAgfTtcclxuXHJcbiAgb25Eb25lID0gKCkgPT4ge1xyXG4gICAgdGhpcy5kb25lUHJvY2Vzc2luZyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBvblJlbmRlcmVkID0gKCkgPT4ge1xyXG4gICAgdGhpcy5sb2FkaW5nTWVzc2FnZSA9ICcnO1xyXG4gIH07XHJcblxyXG4gIG9uQ2FuY2VsID0gKCkgPT4ge1xyXG4gICAgdGhpcy53aW5kb3dFdmVudEhhbmRsZXIuY2xvc2UoKTtcclxuICB9O1xyXG5cclxuICBvbkV4cGFuZENsaWNrZWQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNoaWxkRmxhdExpc3QuZmluZCgobm9kZTogTm9kZSkgPT4geyBub2RlLnNob3dFbnRpdGllcyA9IHRydWU7IH0pO1xyXG4gIH1cclxuXHJcbiAgb25Db2xsYXBzZUNsaWNrZWQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNoaWxkRmxhdExpc3QuZmluZCgobm9kZTogTm9kZSkgPT4geyBub2RlLnNob3dFbnRpdGllcyA9IGZhbHNlOyB9KTtcclxuICB9XHJcblxyXG4gIG9uTnVtYmVyT2ZDb3BpZXNDaGFuZ2VkID0gKGV2ZW50OiBhbnkpID0+IHtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLnZpZXcud2luZG93LnBhcmVudERhdGFDb250ZXh0ICE9PSBudWxsKVxyXG4gICAgICB0aGlzLnBhcmVudERhdGFDb250ZXh0ID0gdGhpcy52aWV3LndpbmRvdy5wYXJlbnREYXRhQ29udGV4dDtcclxuICAgIHRoaXMudGFibGVOYW1lID0gdGhpcy52aWV3LndpbmRvdy50YWJsZU5hbWU7XHJcbiAgICB0aGlzLmVudGl0aWVzID0gdGhpcy52aWV3LmVudGl0aWVzIGFzIGFueTtcclxuICAgIHRoaXMuZW50aXR5ID0gdGhpcy5lbnRpdGllc1t0aGlzLnZpZXcuZW50aXR5SW5kZXhdO1xyXG4gICAgdGhpcy5yb290Tm9kZSA9IG5ldyBOb2RlKG51bGwsIHRoaXMudGFibGVOYW1lLCB0aGlzLnRhYmxlTmFtZSwgZmFsc2UsIHRydWUsIG51bGwsIG51bGwsIG51bGwsIHRydWUsIG51bGwsIG51bGwpO1xyXG4gICAgdGhpcy5zZXRFbnRpdHlEaXNwbGF5VmFsdWVzKHRoaXMudmlldy53aW5kb3cudGFibGVOYW1lKTtcclxuICAgIHRoaXMuZ2V0RGF0YUZvckNsb25pbmcoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5kYXRhVHJlZS5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5mbGF0TGlzdC5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5jaGlsZEZsYXRMaXN0Lmxlbmd0aCA9IDA7XHJcbiAgfVxyXG59XHJcblxyXG5jbGFzcyBOb2RlIHtcclxuICByZWY6IG51bWJlciB8IG51bGw7XHJcbiAgdGFibGVOYW1lOiBzdHJpbmc7XHJcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcclxuICBjaGVja2VkOiBib29sZWFuO1xyXG4gIGNoaWxkOiBhbnk7XHJcbiAgY2hpbGROb2RlczogYW55O1xyXG4gIHNob3dFbnRpdGllczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHBhdGhGcm9tUm9vdDogc3RyaW5nIHwgbnVsbDtcclxuICBwYXJlbnRUb0NoaWxkUmVmTmFtZTogc3RyaW5nIHwgbnVsbDtcclxuICBub2RlczogTm9kZVtdID0gW107XHJcbiAgcm9vdDogYW55O1xyXG4gIHBhcmVudDogYW55O1xyXG4gIGVudGl0eTogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHJlZjogbnVtYmVyIHwgbnVsbCxcclxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxyXG4gICAgZGlzcGxheU5hbWU6IHN0cmluZyxcclxuICAgIGNoaWxkOiBhbnksXHJcbiAgICBjaGVja2VkOiBib29sZWFuLFxyXG4gICAgY2hpbGRFbnRpdGllczogYW55LFxyXG4gICAgcGF0aEZyb21Sb290OiBzdHJpbmcgfCBudWxsLFxyXG4gICAgcGFyZW50VG9DaGlsZFJlZk5hbWU6IHN0cmluZyB8IG51bGwsXHJcbiAgICByb290OiBib29sZWFuLFxyXG4gICAgcGFyZW50OiBhbnksXHJcbiAgICBlbnRpdHk6IGFueSkge1xyXG4gICAgdGhpcy5yZWYgPSByZWY7XHJcbiAgICB0aGlzLnRhYmxlTmFtZSA9IHRhYmxlTmFtZTtcclxuICAgIHRoaXMuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcclxuICAgIHRoaXMuY2hlY2tlZCA9IGNoZWNrZWQ7XHJcbiAgICB0aGlzLmNoaWxkID0gY2hpbGQ7XHJcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBjaGlsZEVudGl0aWVzO1xyXG4gICAgdGhpcy5wYXRoRnJvbVJvb3QgPSBwYXRoRnJvbVJvb3Q7XHJcbiAgICB0aGlzLnBhcmVudFRvQ2hpbGRSZWZOYW1lID0gcGFyZW50VG9DaGlsZFJlZk5hbWU7XHJcbiAgICB0aGlzLnJvb3QgPSByb290O1xyXG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XHJcbiAgICB0aGlzLmVudGl0eSA9IGVudGl0eTtcclxuICB9XHJcblxyXG4gIG9uR3JvdXBEaXNwbGF5ID0gKCkgPT4ge1xyXG4gICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHRoaXMuc2hvd0VudGl0aWVzID0gIXRoaXMuc2hvd0VudGl0aWVzO1xyXG4gICAgdGhpcy5ub2Rlcy5maW5kKChuOiBhbnkpID0+IHtcclxuICAgICAgbi5zaG93RW50aXRpZXMgPSBjdXJyZW50VmFsdWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQ2hlY2tlZENoYW5nZWQgPSAoKSA9PiB7XHJcbiAgICBpZiAodGhpcy5jaGVja2VkKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoaWxkKSB7XHJcbiAgICAgICAgdmFyIHAgPSB0aGlzLnBhcmVudDtcclxuICAgICAgICB3aGlsZSAocCkge1xyXG4gICAgICAgICAgcC5jaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICAgIHAgPSBwLnBhcmVudDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5ub2Rlcy5maW5kKChuOiBhbnkpID0+IHsgbi5jaGVja2VkID0gdHJ1ZTsgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmNoaWxkKSB7XHJcbiAgICAgICAgdmFyIGFsbFVuY2hlY2tlZCA9IHRoaXMucGFyZW50Lm5vZGVzLmV2ZXJ5KChuOiBhbnkpID0+IHtcclxuICAgICAgICAgIHJldHVybiBuLmNoZWNrZWQgPT09IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChhbGxVbmNoZWNrZWQpXHJcbiAgICAgICAgICB0aGlzLnBhcmVudC5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIHVuY2hlY2tDaGlsZE5vZGVzID0gKG5vZGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgbm9kZS5ub2Rlcy5maW5kKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdW5jaGVja0NoaWxkTm9kZXMobik7XHJcbiAgICAgICAgICAgIG4uY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm5vZGVzLmZpbmQoKG46IGFueSkgPT4ge1xyXG4gICAgICAgICAgdW5jaGVja0NoaWxkTm9kZXMobik7XHJcbiAgICAgICAgICBuLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2PlxyXG4gIDx0cnUtdG9vbGJhcj5cclxuICAgIDx0cnUtdG9vbGJhci1idXR0b24gW2ljb25dPVwiJ2V4cGFuZC1pY29uJ1wiIFt0b29sdGlwXT1cIidFeHBhbmQnXCIgW2Rpc2FibGVkXT1cIiFkb25lUHJvY2Vzc2luZ1wiIChvbkNsaWNrKT1cIm9uRXhwYW5kQ2xpY2tlZCgpXCI+PC90cnUtdG9vbGJhci1idXR0b24+XHJcbiAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIidjb2xsYXBzZS1pY29uJ1wiIFt0b29sdGlwXT1cIidDb2xsYXBzZSdcIiBbZGlzYWJsZWRdPVwiIWRvbmVQcm9jZXNzaW5nXCIgKG9uQ2xpY2spPVwib25Db2xsYXBzZUNsaWNrZWQoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgPHRydS10b29sYmFyLXRleHQgW3RleHRdPVwiJ0NvcGllczonXCI+PC90cnUtdG9vbGJhci10ZXh0PlxyXG4gICAgPHRydS10b29sYmFyLWRyb3Bkb3duIFtvcHRpb25zXT1cIm51bWJlck9mQ29waWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkT3B0aW9uKV09XCJzZWxlY3RlZE51bWJlck9mQ29waWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWRvbmVQcm9jZXNzaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uTnVtYmVyT2ZDb3BpZXNDaGFuZ2VkKCRldmVudClcIj5cclxuICAgIDwvdHJ1LXRvb2xiYXItZHJvcGRvd24+XHJcbiAgPC90cnUtdG9vbGJhcj5cclxuICA8ZGl2IGNsYXNzPVwidHJ1LWRpYWxvZy1jb250ZW50IGNsb25lXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgI2dyb3VwTm9kZVJlbmRlcmVyIGxldC1kYXRhPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIWRhdGEuY2hpbGQgfHwgZGF0YS5zaG93RW50aXRpZXNcIlxyXG4gICAgICAgICAgIGNsYXNzPVwiY2xvbmUtbW9kYWwtdHJlZS1ncm91cFwiPlxyXG4gICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImRhdGEuY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJkYXRhLm9uQ2hlY2tlZENoYW5nZWQoKVwiXHJcbiAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkYXRhLnJvb3RcIlxyXG4gICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiAvPlxyXG4gICAgICAgIDxhIChjbGljayk9XCJkYXRhLm9uR3JvdXBEaXNwbGF5TmFtZUNsaWNrZWQoKVwiXHJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwieydjbG9uZS1tb2RhbC10cmVlLWdyb3VwLXJvb3QtbmFtZSc6IGRhdGEucm9vdCB8fCBkYXRhLmNoaWxkfVwiXHJcbiAgICAgICAgICAgW25nU3R5bGVdPVwieydtYXgtd2lkdGgnOiBkYXRhLmNoaWxkTm9kZSA/ICczMDBweCcgOiAnYXV0byd9XCI+e3tkYXRhLmRpc3BsYXlOYW1lfX08L2E+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhZGF0YS5yb290ICYmICFkYXRhLmNoaWxkXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImNsb25lLW1vZGFsLXRyZWUtZ3JvdXAtY291bnRcIj4oe3tkYXRhLm5vZGVzLmxlbmd0aH19KTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDx1bD5cclxuICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGRhdGEgb2YgZGF0YS5ub2RlczsgbGV0IGxhc3QgPSBsYXN0XCIgdHJ1UmVuZGVyZWQgKHJlbmRlcmVkKT1cIm9uUmVuZGVyZWQoKVwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdUZW1wbGF0ZU91dGxldD1cImdyb3VwTm9kZVJlbmRlcmVyOyBjb250ZXh0OiB7JGltcGxpY2l0OiBkYXRhfVwiPjwvZGl2PlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgIDwvdWw+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPGRpdiAqbmdJZj1cImxvYWRpbmdNZXNzYWdlXCJcclxuICAgICAgICAgY2xhc3M9XCJjbG9uZS1tb2RhbC1sb2FkaW5nXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiY2xvbmUtbW9kYWwtbG9hZGluZy1tZXNzYWdlXCI+e3tsb2FkaW5nTWVzc2FnZX19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZG9uZVByb2Nlc3NpbmdcIlxyXG4gICAgICAgICBjbGFzcz1cImNsb25lLW1vZGFsLXRyZWVcIj5cclxuICAgICAgPHVsPlxyXG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZGF0YSBvZiBkaXNwbGF5VHJlZTsgbGV0IGxhc3QgPSBsYXN0XCIgdHJ1UmVuZGVyZWQgKHJlbmRlcmVkKT1cIm9uUmVuZGVyZWQoKVwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdUZW1wbGF0ZU91dGxldD1cImdyb3VwTm9kZVJlbmRlcmVyOyBjb250ZXh0OiB7JGltcGxpY2l0OiBkYXRhfVwiPjwvZGl2PlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgIDwvdWw+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwidHJ1LWRpYWxvZy1mb290ZXJcIj5cclxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoa2V5dXAuZW50ZXIpPVwib25DYW5jZWwoKVwiIChjbGljayk9XCJvbkNhbmNlbCgpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJvbkNsb25lKClcIiAoa2V5dXAuZW50ZXIpPVwib25DbG9uZSgpXCIgW2Rpc2FibGVkXT1cIiFkb25lUHJvY2Vzc2luZ1wiPkNsb25lPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -440,9 +440,8 @@ export class TruDataGrid {
440
440
  this.firstSearchRan = true;
441
441
  this.api.hideOverlay();
442
442
  this.api.showLoadingOverlay();
443
- let entityLoaded = this.loadedEntities.some((ref) => {
444
- return ref === this.entity[this.entity.constructor.name + 'Ref'] ||
445
- this.entity[this.entity.constructor.name + 'Ref'] < 0;
443
+ let entityLoaded = this.entity['Ref'] < 0 || this.loadedEntities.some((ref) => {
444
+ return ref === this.entity['Ref'];
446
445
  });
447
446
  let joins = [];
448
447
  if (entityLoaded) {
@@ -556,4 +555,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
556
555
  }], name: [{
557
556
  type: Input
558
557
  }] } });
559
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWRhdGEtZ3JpZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWdyaWQvdHJ1LWRhdGEtZ3JpZC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWdyaWQvdHJ1LWRhdGEtZ3JpZC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUMsU0FBUyxFQUFnQixLQUFLLEVBQXFCLFFBQVEsRUFBOEIsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNMLE9BQU8sRUFBZ0IsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxLQUFLLENBQUMsTUFBTSxZQUFZLENBQUM7QUFhaEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDL0YsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFFNUcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0VBQXdFLENBQUM7QUFDbkgsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0VBQXdFLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU2xILE1BQU0sT0FBTyxXQUFXO0lBbUVaO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDVztJQTFFWixNQUFNLENBQXNCO0lBQzVCLE1BQU0sQ0FBTztJQUNiLElBQUksQ0FBTztJQUVwQixnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUVwQyxLQUFLLEdBQVcsRUFBRSxDQUFDO0lBQ25CLFVBQVUsR0FBUSxFQUFFLENBQUM7SUFDckIs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QVc7MkZBQVgsV0FBVyxpTUM5QnhCLGkxR0FvREE7OzJGRHRCYSxXQUFXO2tCQVB2QixTQUFTOytCQUNFLGVBQWUsaUJBR1YsaUJBQWlCLENBQUMsSUFBSSxRQUMvQixFQUFDLHVCQUF1QixFQUFFLE1BQU0sRUFBQzs7MEJBNkVwQyxRQUFRO3lDQTFFRixNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIEFwcGxpY2F0aW9uUmVmLCBDb21wb25lbnQsIENvbXBvbmVudFJlZiwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPcHRpb25hbCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdFbmNhcHN1bGF0aW9uLCBjcmVhdGVDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29sRGVmLCBDb2x1bW4sIEdyaWRBcGksIEdyaWRSZWFkeUV2ZW50LCBTdXBwcmVzc0tleWJvYXJkRXZlbnRQYXJhbXMgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZm9ya0pvaW4sIGZyb21FdmVudCwgc2tpcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ3VuZGVyc2NvcmUnO1xyXG5pbXBvcnQgeyBUcnVMaXN0Q29udHJvbENvbmZpZ0Jhc2UgfSBmcm9tICcuLi8uLi9iYXNlLWNsYXNzZXMvdHJ1LWxpc3QtY29udHJvbC1jb25maWctYmFzZSc7XHJcbmltcG9ydCB7IFRydVNlYXJjaFZpZXdFdmVudEhhbmRsZXIgfSBmcm9tICcuLi8uLi9iYXNlLXZpZXdzL3NlYXJjaC9zZXJ2aWNlcy90cnUtc2VhcmNoLXZpZXctZXZlbnQtaGFuZGxlcic7XHJcbmltcG9ydCB7IFRydURhdGFDaGFuZ2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RydS1kYXRhLWNoYW5nZSc7XHJcbmltcG9ydCB7IFRydU1lcmdlRGF0YVNldCB9IGZyb20gJy4uLy4uL2NsYXNzZXMvdHJ1LW1lcmdlLWRhdGEtc2V0JztcclxuaW1wb3J0IHsgVHJ1QXBwRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtYXBwLWVudmlyb25tZW50JztcclxuaW1wb3J0IHsgVHJ1Q29ubmVjdGlvbkh1YiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS1jb25uZWN0aW9uLWh1Yic7XHJcbmltcG9ydCB7IFRydURhdGFDb250ZXh0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LWRhdGEtY29udGV4dCc7XHJcbmltcG9ydCB7IFRydVNlYXJjaFJlc3VsdFZpZXdNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LXNlYXJjaC1yZXN1bHQtdmlldy1tYW5hZ2VyJztcclxuaW1wb3J0IHsgVHJ1VWlOb3RpZmljYXRpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtdWktbm90aWZpY2F0aW9uJztcclxuaW1wb3J0IHsgVHJ1VXRpbCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS11dGlsJztcclxuaW1wb3J0IHsgVHJ1VGFiR3JvdXBFdmVudE5vdGlmaWVyIH0gZnJvbSAnLi4vbGF5b3V0L3RhYi9zZXJ2aWNlcy90cnUtdGFiLWdyb3VwLWV2ZW50LW5vdGlmaWVyJztcclxuaW1wb3J0IHsgSVRydVRvb2xiYXJEcm9wZG93bk9wdGlvbiB9IGZyb20gJy4uL3Rvb2xiYXIvY2xhc3Nlcy90cnUtdG9vbGJhci1kcm9wZG93bi1vcHRpb24nO1xyXG5pbXBvcnQgeyBUcnVHcmlkVmFsaWRhdGlvbkRpYWxvZyB9IGZyb20gJy4uL2dyaWQtdmFsaWRhdGlvbi1kaWFsb2cvdHJ1LWdyaWQtdmFsaWRhdGlvbi1kaWFsb2cnO1xyXG5pbXBvcnQgeyBUcnVHcmlkVmFsaWRhdGlvbkRpYWxvZ0NvbmZpZyB9IGZyb20gJy4uL2dyaWQtdmFsaWRhdGlvbi1kaWFsb2cvdHJ1LWdyaWQtdmFsaWRhdGlvbi1kaWFsb2ctY29uZmlnJztcclxuaW1wb3J0IHsgSVRydURhdGFHcmlkQ29uZmlnIH0gZnJvbSAnLi9jbGFzc2VzL3RydS1kYXRhLWdyaWQtY29uZmlnJztcclxuaW1wb3J0IHsgVHJ1RGF0YUdyaWRUeXBlcyB9IGZyb20gJy4vZW51bXMvdHJ1LWRhdGEtZ3JpZC10eXBlcyc7XHJcbmltcG9ydCB7IFRydURhdGFHcmlkTG9hZGluZ092ZXJsYXkgfSBmcm9tICcuL292ZXJsYXlzL3RydS1kYXRhLWdyaWQtbG9hZGluZy1vdmVybGF5L3RydS1kYXRhLWdyaWQtbG9hZGluZy1vdmVybGF5JztcclxuaW1wb3J0IHsgVHJ1RGF0YUdyaWROb1Jvd3NPdmVybGF5IH0gZnJvbSAnLi9vdmVybGF5cy90cnUtZGF0YS1ncmlkLW5vLXJvd3Mtb3ZlcmxheS90cnUtZGF0YS1ncmlkLW5vLXJvd3Mtb3ZlcmxheSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RydS1kYXRhLWdyaWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90cnUtZGF0YS1ncmlkLmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RydS1kYXRhLWdyaWQuY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBob3N0OiB7J1tjbGFzcy50cnUtZGF0YS1ncmlkXSc6ICd0cnVlJ31cclxufSlcclxuZXhwb3J0IGNsYXNzIFRydURhdGFHcmlkIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xyXG4gIEBJbnB1dCgpIGNvbmZpZyE6IElUcnVEYXRhR3JpZENvbmZpZztcclxuICBASW5wdXQoKSBlbnRpdHkhOiBhbnk7XHJcbiAgQElucHV0KCkgbmFtZSE6IGFueTtcclxuXHJcbiAgVHJ1RGF0YUdyaWRUeXBlcyA9IFRydURhdGFHcmlkVHlwZXM7XHJcblxyXG4gIGxhYmVsOiBzdHJpbmcgPSAnJztcclxuICBjb2x1bW5EZWZzOiBhbnkgPSBbXTtcclxuICByb3dEYXRhOiBhbnkgPSBbXTtcclxuICB2aWV3Q2hvaWNlczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIHNlbGVjdGVkVmlld0Nob2ljZTogYW55O1xyXG4gIHVuYXNzb2NpYXRlZENob2ljZXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBzZWxlY3RlZFVuYXNzb2NpYXRlZENob2ljZTogYW55O1xyXG4gIHZpZXdNZW51SXRlbXM6IGFueSA9IFtdO1xyXG4gIHNlbGVjdGVkVmlld01lbnVJdGVtOiBhbnkgfCBudWxsID0gbnVsbDtcclxuICBncmlkVHlwZTogVHJ1RGF0YUdyaWRUeXBlcyA9IFRydURhdGFHcmlkVHlwZXMuU2VhcmNoXHJcbiAgdW5zYXZlZEVudGl0aWVzOiBBcnJheTxhbnk+ID0gW107XHJcbiAgbG9hZGVkRW50aXRpZXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBsYXRlc3RTZXR1cFF1ZXJ5OiBhbnk7XHJcbiAgZmlyc3RTZWFyY2hSYW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBncmlkT3B0aW9uczogYW55ID0ge1xyXG4gICAgYW5pbWF0ZVJvd3M6IGZhbHNlLFxyXG4gICAgcm93U2VsZWN0aW9uOiAnbXVsdGlwbGUnLFxyXG4gICAgcm93U3R5bGU6IHsgYmFja2dyb3VuZDogJ3doaXRlJyB9LFxyXG4gICAgc3VwcHJlc3NSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXHJcbiAgICBsb2FkaW5nT3ZlcmxheUNvbXBvbmVudDogVHJ1RGF0YUdyaWRMb2FkaW5nT3ZlcmxheSxcclxuICAgIGxvYWRpbmdPdmVybGF5Q29tcG9uZW50UGFyYW1zOiB7XHJcbiAgICAgIGxvYWRpbmdNZXNzYWdlOiAnU2VhcmNoaW5nIC0gT25lIG1vbWVudCBwbGVhc2UuLi4nLFxyXG4gICAgfSxcclxuICAgIG5vUm93c092ZXJsYXlDb21wb25lbnQ6IFRydURhdGFHcmlkTm9Sb3dzT3ZlcmxheSxcclxuICAgIG5vUm93c092ZXJsYXlDb21wb25lbnRQYXJhbXM6IHtcclxuICAgICAgbm9Sb3dzTWVzc2FnZUZ1bmM6ICgpID0+XHJcbiAgICAgIHtcclxuICAgICAgICBpZiAodGhpcy5maXJzdFNlYXJjaFJhbilcclxuICAgICAgICAgIHJldHVybiAnU29ycnkgLSBubyByb3dzIGZvdW5kISdcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXR1cm4gJ0NsaWNrIHNlYXJjaCB0byBkaXNwbGF5IHJlc3VsdHMuJ1xyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICAgIG9uU2VsZWN0aW9uQ2hhbmdlZDogKHBhcmFtczogYW55KSA9PiB7XHJcblxyXG4gICAgfSxcclxuICAgIG9uUm93RGF0YVVwZGF0ZWQ6ICgpID0+IHtcclxuICAgICAgdGhpcy5jb25maWcudmlld01lbnVDb25maWcuZW50aXRpZXMgPSB0aGlzLmdldFJvd0RhdGEoKTtcclxuICAgICAgdGhpcy5jb25maWcudmlld01lbnVDb25maWcuYWN0aW9uUmVmcyA9IHRoaXMuZ2V0UmVmcygpO1xyXG4gICAgfSxcclxuICAgIG9uQ2VsbEVkaXRpbmdTdG9wcGVkOiAocGFyYW1zOiBhbnkpID0+IHtcclxuICAgICAgcGFyYW1zLmFwaS5yZWZyZXNoQ2VsbHMoe1xyXG4gICAgICAgIGZvcmNlOiB0cnVlLFxyXG4gICAgICAgIHJvd05vZGVzOiBbcGFyYW1zLm5vZGVdXHJcbiAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIG9uQ2VsbFZhbHVlQ2hhbmdlZDogKHBhcmFtczogYW55KSA9PiB7XHJcblxyXG4gICAgfSxcclxuICAgIG9uR3JpZFJlYWR5OiAoZXZlbnQ6IEdyaWRSZWFkeUV2ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMuYXBpID0gZXZlbnQuYXBpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwYXJlbnRUb29sYmFyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBhcGkhOiBHcmlkQXBpO1xyXG4gIHByaXZhdGUgc3ViczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xyXG4gIHByaXZhdGUgaXNBY3RpdmU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZGF0YUNvbnRleHQ6IFRydURhdGFDb250ZXh0LFxyXG4gICAgcHJpdmF0ZSBzZWFyY2hSZXN1bHRWaWV3TWFuYWdlcjogVHJ1U2VhcmNoUmVzdWx0Vmlld01hbmFnZXIsXHJcbiAgICBwcml2YXRlIGFwcEVudmlyb25tZW50OiBUcnVBcHBFbnZpcm9ubWVudCxcclxuICAgIHByaXZhdGUgc2VhcmNoVmlld0V2ZW50SGFuZGxlcjogVHJ1U2VhcmNoVmlld0V2ZW50SGFuZGxlcixcclxuICAgIHByaXZhdGUgdWlOb3RpZmljYXRpb246IFRydVVpTm90aWZpY2F0aW9uLFxyXG4gICAgcHJpdmF0ZSBjb25uZWN0aW9uSHViOiBUcnVDb25uZWN0aW9uSHViLFxyXG4gICAgcHJpdmF0ZSB1dGlsOiBUcnVVdGlsLFxyXG4gICAgcHJpdmF0ZSBhcHA6IEFwcGxpY2F0aW9uUmVmLFxyXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIHRhYkdyb3VwRXZlbnROb3RpZmllcjogVHJ1VGFiR3JvdXBFdmVudE5vdGlmaWVyKSB7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVuaGFuY2VSb3dEYXRhRm9yRW50aXR5ID0gKGVudGl0eTogYW55KSA9PiB7XHJcbiAgICBsZXQgcm93RGF0YSA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5yb3dEYXRhRW5oYW5jZXIoZW50aXR5KTtcclxuICAgIHJvd0RhdGEuJGVudGl0eSA9IGVudGl0eTtcclxuICAgIHJldHVybiByb3dEYXRhO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgc2V0Tm9Sb3dzVGVtcGxhdGUgPSAoKSA9PiB7XHJcbiAgICAvL3RoaXMubm9Sb3dzVGVtcGxhdGUgPSBgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MTRweDtmb250LXdlaWdodDpib2xkO1wiPk5vIGRhdGEgZm91bmQuPC9zcGFuPmA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1YnNjcmliZVRvID0gKCkgPT4ge1xyXG4gICAgdGhpcy5zdWJzLnB1c2godGhpcy5hcHBFbnZpcm9ubWVudC5vblNhdmVDb21wbGV0ZSQucGlwZShza2lwKDEpKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQ/LnN1Y2Nlc3NmdWwpXHJcbiAgICAgICAgdGhpcy5hcGk/LnJlZHJhd1Jvd3MoKTtcclxuICAgIH0pKTtcclxuICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMuYXBwRW52aXJvbm1lbnQub25SZXZlcnRDb21wbGV0ZSQuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgaWYgKGV2ZW50Py5zdWNjZXNzZnVsKSB7XHJcbiAgICAgICAgbGV0IHJvd3NUb1JlbW92ZTogQXJyYXk8YW55PiA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnJvd0RhdGEubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgIGlmICh0aGlzLnJvd0RhdGFbaV0uJGVudGl0eVt0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5VHlwZS5uYW1lICsgJ1JlZiddIDwgMClcclxuICAgICAgICAgICAgcm93c1RvUmVtb3ZlLnB1c2godGhpcy5yb3dEYXRhW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hcGk/LmFwcGx5VHJhbnNhY3Rpb24oeyByZW1vdmU6IHJvd3NUb1JlbW92ZSB9KTtcclxuICAgICAgICB0aGlzLmFwaT8ucmVkcmF3Um93cygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5zdWJzLnB1c2godGhpcy5hcHBFbnZpcm9ubWVudC5vbkRlbGV0ZUNvbXBsZXRlJC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQ/LnN1Y2Nlc3NmdWwgJiYgZXZlbnQuZW50aXRpZXMgJiYgZXZlbnQuZW50aXRpZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IHJvd3NUb1JlbW92ZTogQXJyYXk8YW55PiA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnJvd0RhdGEubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgIGZvciAobGV0IGogPSBldmVudC5lbnRpdGllcy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yb3dEYXRhW2ldLiRlbnRpdHkgPT09IGV2ZW50LmVudGl0aWVzW2pdKVxyXG4gICAgICAgICAgICAgIHJvd3NUb1JlbW92ZS5wdXNoKHRoaXMucm93RGF0YVtpXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXBpPy5hcHBseVRyYW5zYWN0aW9uKHsgcmVtb3ZlOiByb3dzVG9SZW1vdmUgfSk7XHJcbiAgICAgICAgdGhpcy5hcGk/LnJlZHJhd1Jvd3MoKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5zdWJzLnB1c2godGhpcy5zZWFyY2hWaWV3RXZlbnRIYW5kbGVyLm9uU2VhcmNoKCkucGlwZShza2lwKDEpKS5zdWJzY3JpYmUoKHNldHVwUXVlcnk6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLm9uU2VhcmNoKHNldHVwUXVlcnkpO1xyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5zdWJzLnB1c2godGhpcy5jb25maWcudmlldy5vbkFjdGl2ZSgpLnBpcGUoc2tpcCgxKSkuc3Vic2NyaWJlKChpc0FjdGl2ZTogYm9vbGVhbikgPT4ge1xyXG4gICAgICB0aGlzLmlzQWN0aXZlID0gaXNBY3RpdmU7XHJcbiAgICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWcudmlld01lbnVDb25maWcubWVudUl0ZW1zRW5hYmxlZCA9ICgpID0+IHsgcmV0dXJuIHRoaXMucm93RGF0YS5sZW5ndGg7IH07XHJcbiAgICAgICAgdGhpcy5jb25maWcudmlld01lbnVDb25maWcuYWN0aW9uUmVmcyA9IHRoaXMuZ2V0UmVmcygpO1xyXG4gICAgICAgIHRoaXMuYXBpLnJlZnJlc2hDZWxscygpO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgICBpZiAodGhpcy50YWJHcm91cEV2ZW50Tm90aWZpZXIgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5zdWJzLnB1c2godGhpcy50YWJHcm91cEV2ZW50Tm90aWZpZXIub25BY3RpdmVTdGF0ZUNoYW5nZWQoKS5waXBlKHNraXAoMSkpLnN1YnNjcmliZSgoaXNBY3RpdmU6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICB0aGlzLnJ1blNlYXJjaCgpO1xyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN1YnMucHVzaCh0aGlzLmNvbm5lY3Rpb25IdWIuc3Vic2NyaWJlKFxyXG4gICAgICB0aGlzLmRhdGFDb250ZXh0LFxyXG4gICAgICB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5VHlwZSxcclxuICAgICAgdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eVR5cGUubmFtZSxcclxuICAgICAgdGhpcy5hZGRFbnRpdHksXHJcbiAgICAgIHRoaXMuZ2V0Um93RGF0YSxcclxuICAgICAgKCkgPT4geyByZXR1cm4gdGhpcy5sYXRlc3RTZXR1cFF1ZXJ5IH0sXHJcbiAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5leHBhbmRzLFxyXG4gICAgICBbXSxcclxuICAgICAgKCkgPT4geyByZXR1cm4gdHJ1ZTsgfSkuc3Vic2NyaWJlKChkYXRhQ2hhbmdlOiBUcnVEYXRhQ2hhbmdlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hcGkucmVmcmVzaENlbGxzKHsgZm9yY2U6IHRydWUgfSk7XHJcbiAgICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLnN1YnMucHVzaChmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnQsICdrZXlkb3duJykuc3Vic2NyaWJlKChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jb25maWcudmlldy5hY3RpdmUpIHtcclxuICAgICAgICBsZXQga2V5U2VxdWVuY2UgPSB0aGlzLnV0aWwuZ2V0S2V5U2VxdWVuY2UoZXZlbnQpO1xyXG4gICAgICAgIGlmIChrZXlTZXF1ZW5jZSA9PT0gJ2N0cmwraScgfHwga2V5U2VxdWVuY2UgPT09ICdtZXRhK2knKSB7IFxyXG4gICAgICAgICAgdGhpcy5vbkFkZCgpO1xyXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGtleVNlcXVlbmNlID09PSAnY3RybCtkJyB8fCBrZXlTZXF1ZW5jZSA9PT0gJ21ldGErZCcpIHsgXHJcbiAgICAgICAgICB0aGlzLm9uRGVsZXRlKCk7XHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdjdHJsK2snIHx8IGtleVNlcXVlbmNlID09PSAnbWV0YStrJykgeyBcclxuICAgICAgICAgIHRoaXMub25LZWVwKCk7XHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdjdHJsK3InIHx8IGtleVNlcXVlbmNlID09PSAnbWV0YStyJykge1xyXG4gICAgICAgICAgdGhpcy5vblJlbW92ZSgpO1xyXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHRhcmdldElzQ29udHJvbCA9IHRoaXMudXRpbC50YXJnZXRJc0NvbnRyb2woZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcclxuICAgICAgICBpZiAoIXRhcmdldElzQ29udHJvbCAmJiBldmVudC5jdHJsS2V5IHx8IGV2ZW50LmFsdEtleSlcclxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UmVmcyA9ICgpOiBzdHJpbmcgPT4ge1xyXG4gICAgbGV0IHJvd05vZGVzOiBhbnkgPSBbXTtcclxuICAgIHRoaXMuYXBpPy5mb3JFYWNoTm9kZSgocm93Tm9kZTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIHJvd05vZGVzLnB1c2gocm93Tm9kZSk7XHJcbiAgICB9KTtcclxuICAgIGxldCByZWZzID0gXy5tYXAocm93Tm9kZXMsIChyb3dOb2RlKSA9PiB7IHJldHVybiByb3dOb2RlLmRhdGEuJGVudGl0eVt0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5VHlwZS5uYW1lICsgJ1JlZiddOyB9KTtcclxuICAgIHJldHVybiByZWZzLmpvaW4oJywnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Um93RGF0YSA9ICgpID0+IHtcclxuICAgIGxldCBkYXRhOiBhbnkgPSBbXTtcclxuICAgIHRoaXMuYXBpPy5mb3JFYWNoTm9kZSgocm93Tm9kZTogYW55KSA9PiB7XHJcbiAgICAgIGRhdGEucHVzaChyb3dOb2RlLmRhdGEuJGVudGl0eSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH0gXHJcblxyXG4gIHByaXZhdGUgbG9hZEdyaWREYXRhID0gKGVudGl0aWVzOiBBcnJheTxhbnk+KSA9PiB7XHJcbiAgICB0aGlzLnJvd0RhdGEgPSBlbnRpdGllcy5tYXAodGhpcy5lbmhhbmNlUm93RGF0YUZvckVudGl0eSwgZW50aXRpZXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkTWFueVRvTWFueUdyaWREYXRhID0gKGFzc29jaWF0ZWRFbnRpdGllczogQXJyYXk8YW55PiwgYXNzb2NpYXRhYmxlRW50aXRpZXM6IEFycmF5PGFueT4sIGluaXRhbExvYWQ6IGJvb2xlYW4pID0+IHtcclxuICAgIGlmIChpbml0YWxMb2FkKVxyXG4gICAgICB0aGlzLnJvd0RhdGEgPSBhc3NvY2lhdGVkRW50aXRpZXMubWFwKHRoaXMuZW5oYW5jZVJvd0RhdGFGb3JFbnRpdHksIGFzc29jaWF0ZWRFbnRpdGllcyk7XHJcbiAgICBlbHNlXHJcbiAgICAgIGFzc29jaWF0ZWRFbnRpdGllcyA9IHRoaXMucm93RGF0YS5tYXAoKGU6IGFueSkgPT4geyByZXR1cm4gZS4kZW50aXR5IH0pO1xyXG4gICAgbGV0IGFzc29jaWF0YWJsZVR5cGVOYW1lID0gdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eU1hbnlUb01hbnlUeXBlLm5hbWVcclxuICAgIGxldCBhc3NvY2lhdGFibGVUeXBlTmFtZVdpdGhQcmVmaXggPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5TWFueVRvTWFueVR5cGVOYW1lV2l0aFByZWZpeFxyXG4gICAgbGV0IGFzc29jaWF0ZWRNYXBPZkFzc29jaWF0YWJsZSA9IF8ubWFwKGFzc29jaWF0ZWRFbnRpdGllcywgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGVbJ28nICsgYXNzb2NpYXRhYmxlVHlwZU5hbWVXaXRoUHJlZml4XTsgfSk7XHJcbiAgICB0aGlzLnVuYXNzb2NpYXRlZENob2ljZXMgPSBhc3NvY2lhdGFibGVFbnRpdGllcy5maWx0ZXIob2JqZWN0MSA9PiB7XHJcbiAgICAgIHJldHVybiAhYXNzb2NpYXRlZE1hcE9mQXNzb2NpYXRhYmxlLnNvbWUob2JqZWN0MiA9PiB7IHJldHVybiBvYmplY3QxLnZhbHVlLiQgPT09IG9iamVjdDJbYXNzb2NpYXRhYmxlVHlwZU5hbWUgKyAnUmVmJ107IH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cG9ydERhdGEgPSAoKSA9PiB7XHJcbiAgICB0aGlzLnVpTm90aWZpY2F0aW9uLnNob3dFeHBvcnREaWFsb2coKS50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKCFyZXN1bHQpIHJldHVybjtcclxuICAgICAgbGV0IGV4cG9ydEdyaWRTcGVjO1xyXG4gICAgICBpZiAodGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eVR5cGUpXHJcbiAgICAgICAgZXhwb3J0R3JpZFNwZWMgPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcubmFtZTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGV4cG9ydEdyaWRTcGVjID0gJyRjdXN0b209JyArIDE7XHJcblxyXG4gICAgICB0aGlzLmRhdGFDb250ZXh0XHJcbiAgICAgICAgLmVudGl0eUFjY2VzcygpXHJcbiAgICAgICAgLmV4cG9ydCh0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5VHlwZSwgZXhwb3J0R3JpZFNwZWMsIHRoaXMubGF0ZXN0U2V0dXBRdWVyeSwgdGhpcy5nZXRSZWZzKCksIHJlc3VsdCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25TdXBwcmVzc0tleWJvYXJkRXZlbnQgPSAocGFyYW1zOiBTdXBwcmVzc0tleWJvYXJkRXZlbnRQYXJhbXMpOiBib29sZWFuID0+IHtcclxuICAgIGxldCBpc1RhYktleSA9IHBhcmFtcy5ldmVudC5rZXkgPT09ICdUYWInO1xyXG4gICAgbGV0IGlzQXJyb3dEb3duID0gcGFyYW1zLmV2ZW50LmtleSA9PT0gJ0Fycm93RG93bic7XHJcbiAgICBsZXQgaXNBcnJvd1VwID0gcGFyYW1zLmV2ZW50LmtleSA9PT0gJ0Fycm93VXAnO1xyXG4gICAgbGV0IGlzQXJyb3dMZWZ0ID0gcGFyYW1zLmV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCc7XHJcbiAgICBsZXQgaXNBcnJvd1JpZ2h0ID0gcGFyYW1zLmV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnO1xyXG4gICAgbGV0IGlzU2hpZnRLZXkgPSBwYXJhbXMuZXZlbnQuc2hpZnRLZXk7XHJcbiAgICBsZXQgaXNBbHRLZXkgPSBwYXJhbXMuZXZlbnQuYWx0S2V5O1xyXG5cclxuICAgIGxldCBmb2N1c2VkQ2VsbCA9IHBhcmFtcy5hcGkuZ2V0Rm9jdXNlZENlbGwoKTtcclxuICAgIGxldCBoYXNDaG9pY2VzID0gcGFyYW1zLmRhdGFbcGFyYW1zLmNvbHVtbi5nZXRDb2xJZCgpXSAmJiBwYXJhbXMuZGF0YVtwYXJhbXMuY29sdW1uLmdldENvbElkKCldLmNob2ljZXMgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgaWYgKHBhcmFtcy5jb2x1bW4uaXNQaW5uZWQoKSkge1xyXG4gICAgICBpZiAoaXNUYWJLZXkgJiYgIWlzU2hpZnRLZXkpXHJcbiAgICAgICAgcGFyYW1zLmFwaS50YWJUb05leHRDZWxsKCk7XHJcbiAgICAgIGVsc2UgaWYgKGlzVGFiS2V5ICYmIGlzU2hpZnRLZXkpXHJcbiAgICAgICAgcGFyYW1zLmFwaS50YWJUb1ByZXZpb3VzQ2VsbCgpO1xyXG4gICAgICBlbHNlIGlmIChpc0Fycm93TGVmdClcclxuICAgICAgICBwYXJhbXMuYXBpLnRhYlRvUHJldmlvdXNDZWxsKCk7XHJcbiAgICAgIGVsc2UgaWYgKGlzQXJyb3dSaWdodClcclxuICAgICAgICBwYXJhbXMuYXBpLnRhYlRvTmV4dENlbGwoKTtcclxuICAgICAgdGhpcy5hcGkuc3RvcEVkaXRpbmcoKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNDaG9pY2VzICYmIGlzQWx0S2V5ICYmIChpc0Fycm93RG93biB8fCBpc0Fycm93VXApKSB7XHJcbiAgICAgIHBhcmFtcy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgcGFyYW1zLmFwaS5zdGFydEVkaXRpbmdDZWxsKHtcclxuICAgICAgICByb3dJbmRleDogZm9jdXNlZENlbGw/LnJvd0luZGV4IGFzIG51bWJlcixcclxuICAgICAgICBjb2xLZXk6IGZvY3VzZWRDZWxsPy5jb2x1bW4gYXMgQ29sdW1uLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBhZGRFbnRpdHkgPSAobmV3RW50aXR5OiBhbnkpID0+IHtcclxuICAgIGlmICh0aGlzLmVudGl0eSkge1xyXG4gICAgICBsZXQgcGFyZW50TmFtZSA9IHRoaXMuZW50aXR5LmNvbnN0cnVjdG9yLm5hbWU7XHJcbiAgICAgIG5ld0VudGl0eVtwYXJlbnROYW1lICsgJ1JlZiddID0gdGhpcy5lbnRpdHlbcGFyZW50TmFtZSArICdSZWYnXTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmdyaWRUeXBlID09PSBUcnVEYXRhR3JpZFR5cGVzLkRldGFpbE1hbnlUb01hbnkpIHtcclxuICAgICAgbGV0IHBhcmVudE5hbWUgPSB0aGlzLmVudGl0eS5jb25zdHJ1Y3Rvci5uYW1lO1xyXG4gICAgICBsZXQgdW5hc3NvY2lhdGVkVHlwZSA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlNYW55VG9NYW55VHlwZTtcclxuICAgICAgbGV0IHJlZiA9IHRoaXMuc2VsZWN0ZWRVbmFzc29jaWF0ZWRDaG9pY2UudmFsdWUuJDtcclxuICAgICAgbGV0IGNoaWxkVG9Bc3NvY2lhdGUgPSB0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLnNlYXJjaEJ5UmVmQ2FjaGVPbmx5KHVuYXNzb2NpYXRlZFR5cGUsIHJlZiwgdHJ1ZSlcclxuICAgICAgaWYgKGNoaWxkVG9Bc3NvY2lhdGUpIHtcclxuICAgICAgICBsZXQgZW5oYW5jZWRFbnRpdHkgPSB0aGlzLmVuaGFuY2VSb3dEYXRhRm9yRW50aXR5KG5ld0VudGl0eSk7XHJcbiAgICAgICAgZW5oYW5jZWRFbnRpdHkuJGVudGl0eVt1bmFzc29jaWF0ZWRUeXBlLm5hbWUgKyAnUmVmJ10gPSBjaGlsZFRvQXNzb2NpYXRlW3VuYXNzb2NpYXRlZFR5cGUubmFtZSArICdSZWYnXTtcclxuICAgICAgICBlbmhhbmNlZEVudGl0eS4kZW50aXR5W3BhcmVudE5hbWUgKyAnUmVmJ10gPSB0aGlzLmVudGl0eVtwYXJlbnROYW1lICsgJ1JlZiddO1xyXG4gICAgICAgIC8vIHJlbW92ZSBpdGVtIGZyb20gdGhlIGFkZCBkcm9wZG93biBjb250cm9sXHJcbiAgICAgICAgbGV0IGl0ZW1JbmRleCA9IHRoaXMudW5hc3NvY2lhdGVkQ2hvaWNlcy5maW5kSW5kZXgoKGNob2ljZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGNob2ljZVt1bmFzc29jaWF0ZWRUeXBlLm5hbWUgKyAnUmVmJ10gPT09IGNoaWxkVG9Bc3NvY2lhdGVbdW5hc3NvY2lhdGVkVHlwZS5uYW1lICsgJ1JlZiddO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMudW5hc3NvY2lhdGVkQ2hvaWNlcy5zcGxpY2UoaXRlbUluZGV4LCAxKTtcclxuICAgICAgICAvLyBjbGVhciBhZGQgc2VsZWN0aW9uXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVuYXNzb2NpYXRlZENob2ljZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAvLyBhZGQgcm93IHRvIGdyaWRcclxuICAgICAgICB0aGlzLnVuc2F2ZWRFbnRpdGllcy5wdXNoKGVuaGFuY2VkRW50aXR5KTtcclxuICAgICAgICB0aGlzLmFwaS5hcHBseVRyYW5zYWN0aW9uKHsgYWRkOiBbZW5oYW5jZWRFbnRpdHldLCBhZGRJbmRleDogMCB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGVuaGFuY2VkRW50aXR5ID0gdGhpcy5lbmhhbmNlUm93RGF0YUZvckVudGl0eShuZXdFbnRpdHkpO1xyXG4gICAgICB0aGlzLnJvd0RhdGEudW5zaGlmdChlbmhhbmNlZEVudGl0eSk7XHJcbiAgICAgIHRoaXMuYXBpLmFwcGx5VHJhbnNhY3Rpb24oeyBhZGQ6IFtlbmhhbmNlZEVudGl0eV0sIGFkZEluZGV4OiAwIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNZXJnZURhdGEgPSAoY29uZmlnOiBUcnVMaXN0Q29udHJvbENvbmZpZ0Jhc2U8YW55PiwgZW50aXR5VG9WYWxpZGF0ZTogYW55KTogVHJ1TWVyZ2VEYXRhU2V0IHwgbnVsbCA9PiB7XHJcbiAgICBpZiAoY29uZmlnLnByb3BlcnR5UGF0aD8uaW5jbHVkZXMoJy8nKSkge1xyXG4gICAgICBsZXQgcHJvcGVydHlOYW1lUGFydHMgPSBjb25maWcucHJvcGVydHlQYXRoLnNwbGl0KCcvJyk7XHJcbiAgICAgIHByb3BlcnR5TmFtZVBhcnRzLnBvcCgpO1xyXG4gICAgICBsZXQgdGFyZ2V0UHJvcGVydHk6IGFueTtcclxuICAgICAgcHJvcGVydHlOYW1lUGFydHMuZm9yRWFjaCgobmFtZSkgPT4ge1xyXG4gICAgICAgIGlmICghdGFyZ2V0UHJvcGVydHkpIHtcclxuICAgICAgICAgIGxldCB0YXJnZXRQcm9wZXJ0eU5hbWUgPSAnbycgKyBuYW1lIGFzIGtleW9mIHR5cGVvZiBlbnRpdHlUb1ZhbGlkYXRlO1xyXG4gICAgICAgICAgdGFyZ2V0UHJvcGVydHkgPSBlbnRpdHlUb1ZhbGlkYXRlW3RhcmdldFByb3BlcnR5TmFtZV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCB0YXJnZXRQcm9wZXJ0eU5hbWUgPSAnbycgKyBuYW1lIGFzIGtleW9mIHR5cGVvZiBlbnRpdHlUb1ZhbGlkYXRlO1xyXG4gICAgICAgICAgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRQcm9wZXJ0eVt0YXJnZXRQcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5NZXJnZV9EYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldFByb3BlcnR5Lk1lcmdlX0RhdGFfU2V0O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGVudGl0eVRvVmFsaWRhdGUuTWVyZ2VfRGF0YV9TZXQ/LmdldChjb25maWcucHJvcGVydHlOYW1lIGFzIHN0cmluZykgPyBlbnRpdHlUb1ZhbGlkYXRlLk1lcmdlX0RhdGFfU2V0IDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0aW9uRGlhbG9nOiBDb21wb25lbnRSZWY8VHJ1R3JpZFZhbGlkYXRpb25EaWFsb2c+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBhZGRWYWxpZGF0aW9uRGlhbG9nID0gKGNvbmZpZzogVHJ1R3JpZFZhbGlkYXRpb25EaWFsb2dDb25maWcsIGhvc3RFbGVtZW50OiBhbnkpID0+IHtcclxuICAgIGxldCB0YXJnZXQgPSBob3N0RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZGlhbG9nLXRhcmdldCcpWzBdO1xyXG4gICAgbGV0IGRpYWxvZ0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIGRpYWxvZ0VsZW1lbnQuY2xhc3NMaXN0LmFkZCgnaW52YWxpZCcpO1xyXG4gICAgdGFyZ2V0LmFwcGVuZENoaWxkKGRpYWxvZ0VsZW1lbnQpO1xyXG4gICAgbGV0IGNvbXBvbmVudFJlZiA9IGNyZWF0ZUNvbXBvbmVudDxUcnVHcmlkVmFsaWRhdGlvbkRpYWxvZz4oVHJ1R3JpZFZhbGlkYXRpb25EaWFsb2csIHtcclxuICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5hcHAuaW5qZWN0b3IsXHJcbiAgICAgIGhvc3RFbGVtZW50OiBkaWFsb2dFbGVtZW50LFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmNvbmZpZyA9IGNvbmZpZztcclxuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5jbG9zZS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmFwaS5yZWZyZXNoQ2VsbHMoeyBmb3JjZTogdHJ1ZSB9KTtcclxuICAgICAgY29tcG9uZW50UmVmLmRlc3Ryb3koKVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnZhbGlkYXRpb25EaWFsb2cgPSBjb21wb25lbnRSZWY7XHJcbiAgICB0aGlzLmFwcC5hdHRhY2hWaWV3KGNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XHJcbiAgICBjb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3YWl0Rm9yR3JpZEFwaSA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xyXG4gICAgdmFyIGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5hcGkpIHtcclxuICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcclxuICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICB9XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBydW5TZWFyY2ggPSBhc3luYyAoKSA9PiB7XHJcbiAgICB0aGlzLndhaXRGb3JHcmlkQXBpKCgpID0+IHtcclxuICAgICAgbGV0IGNvbnRhaW5lcklzQWN0aXZlID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMudGFiR3JvdXBFdmVudE5vdGlmaWVyICE9PSBudWxsKVxyXG4gICAgICAgIGNvbnRhaW5lcklzQWN0aXZlID0gdGhpcy50YWJHcm91cEV2ZW50Tm90aWZpZXIuaXNBY3RpdmU7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBjb250YWluZXJJc0FjdGl2ZSA9IHRydWU7XHJcblxyXG4gICAgICBpZiAoKFxyXG4gICAgICAgIHRoaXMuZ3JpZFR5cGUgPT09IFRydURhdGFHcmlkVHlwZXMuRGV0YWlsIHx8XHJcbiAgICAgICAgdGhpcy5ncmlkVHlwZSA9PT0gVHJ1RGF0YUdyaWRUeXBlcy5EZXRhaWxNYW55VG9NYW55IHx8XHJcbiAgICAgICAgdGhpcy5jb25maWcubm9RdWVyeSkgJiZcclxuICAgICAgICBjb250YWluZXJJc0FjdGl2ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5ub1F1ZXJ5KVxyXG4gICAgICAgICAgdGhpcy5vblNlYXJjaChudWxsKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aGlzLm9uU2VhcmNoKHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5zZXR1cFF1ZXJ5KHRoaXMuZW50aXR5KSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQcm9wZXJ0eVBhdGhQYXJ0cyA9IChwcm9wZXJ0eVBhdGg6IHN0cmluZykgPT4ge1xyXG4gICAgbGV0IGxhc3RJbmRleCA9IHByb3BlcnR5UGF0aC5sYXN0SW5kZXhPZignLicpO1xyXG4gICAgcHJvcGVydHlQYXRoID0gcHJvcGVydHlQYXRoLnNsaWNlKDAsIGxhc3RJbmRleCk7XHJcbiAgICByZXR1cm4gcHJvcGVydHlQYXRoLnNwbGl0KCcuJyk7XHJcbiAgfVxyXG5cclxuICBkZWZhdWx0Q29sRGVmOiBDb2xEZWYgPSB7XHJcbiAgICBzdXBwcmVzc0tleWJvYXJkRXZlbnQ6IHRoaXMub25TdXBwcmVzc0tleWJvYXJkRXZlbnRcclxuICB9O1xyXG5cclxuICBnZXRSb3dDb3VudCA9ICgpID0+IHtcclxuICAgIGxldCBjb3VudCA9IDA7XHJcbiAgICB0aGlzLmFwaT8uZm9yRWFjaE5vZGVBZnRlckZpbHRlcigoKSA9PiBjb3VudCsrKTtcclxuICAgIHJldHVybiAnUm93czogJyArIGNvdW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0ZWRSb3dDb3VudCA9ICgpID0+IHtcclxuICAgIGxldCBjb3VudCA9IDA7XHJcbiAgICBjb3VudCA9IHRoaXMuYXBpPy5nZXRTZWxlY3RlZFJvd3MoKS5sZW5ndGg7XHJcbiAgICByZXR1cm4gJ1NlbGVjdGVkOiAnICsgY291bnQ7XHJcbiAgfVxyXG5cclxuICBvblJvd0RhdGFDaGFuZ2VkID0gKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgaWYgKHRoaXMucm93RGF0YSA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnNldE5vUm93c1RlbXBsYXRlKCk7XHJcbiAgICAgIHRoaXMuYXBpLnNob3dOb1Jvd3NPdmVybGF5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNlbGxDbGlja2VkID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgIGlmICghZXZlbnQuY29sdW1uLmNvbERlZi5waW5uZWQpIHtcclxuICAgICAgdGhpcy5hcGkuZGVzZWxlY3RBbGwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2VsbERvdWJsZUNsaWNrZWQgPSAoZ3JpZENvbmZpZzogYW55KSA9PiB7XHJcbiAgICBpZiAoZ3JpZENvbmZpZy5jb2xEZWYuY2VsbENsYXNzID09PSAnYWctcGstYWxpZ25lZC1jZWxsJylcclxuICAgICAgdGhpcy5jb25maWcucm93SGVhZGVyRG91YmxlQ2xpY2tlZChncmlkQ29uZmlnKTtcclxuICB9XHJcblxyXG4gIG9uQ2VsbEtleURvd24gPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgaWYgKCFldmVudC5ldmVudCkgcmV0dXJuO1xyXG4gICAgY29uc3Qga2V5ID0gKGV2ZW50LmV2ZW50IGFzIHVua25vd24pIGFzIEtleWJvYXJkRXZlbnQ7XHJcbiAgICBpZiAoa2V5LmNvZGUgPT09ICdTcGFjZScpIHtcclxuICAgICAga2V5LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGtleS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgdGhpcy5hcGk/LnN0YXJ0RWRpdGluZ0NlbGwoe1xyXG4gICAgICAgIHJvd0luZGV4OiBldmVudC5yb3dJbmRleCxcclxuICAgICAgICBjb2xLZXk6IGV2ZW50LmNvbHVtbi5nZXRDb2xJZCgpLFxyXG4gICAgICAgIGtleToga2V5LmNvZGVcclxuICAgICAgfSk7XHJcbiAgICB9IFxyXG4gIH1cclxuXHJcbiAgb25DZWxsTW91c2VPdmVyKGU6IGFueSkge1xyXG4gICAgaWYgKGUuZGF0YS4kZW50aXR5LmVudGl0eUFzcGVjdC5oYXNWYWxpZGF0aW9uRXJyb3JzKSB7XHJcbiAgICAgIGxldCB0YXJnZXRFbGVtZW50ID0gZS5ldmVudC50YXJnZXQ7XHJcbiAgICAgIGlmICghdGFyZ2V0RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2FnLWNlbGwnKSlcclxuICAgICAgICB0YXJnZXRFbGVtZW50ID0gdGFyZ2V0RWxlbWVudC5jbG9zZXN0KCcuYWctY2VsbCcpO1xyXG4gICAgICBpZiAodGFyZ2V0RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2ludmFsaWQnKSkge1xyXG4gICAgICAgIGxldCBmaWVsZE5hbWUgPSBlLmNvbERlZi5maWVsZDtcclxuICAgICAgICBsZXQgcHJvcGVydHlDb25maWcgPSBlLmRhdGFbZmllbGROYW1lXTtcclxuXHJcbiAgICAgICAgbGV0IHByb3BlcnR5UGF0aFBhcnRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eUNvbmZpZy5wcm9wZXJ0eVBhdGguaW5jbHVkZXMoJy4nKSkge1xyXG4gICAgICAgICAgcHJvcGVydHlQYXRoUGFydHMgPSB0aGlzLmdldFByb3BlcnR5UGF0aFBhcnRzKHByb3BlcnR5Q29uZmlnLnByb3BlcnR5UGF0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZW50aXR5VG9WYWxpZGF0ZSA9IHByb3BlcnR5UGF0aFBhcnRzLmxlbmd0aCA/IHByb3BlcnR5UGF0aFBhcnRzLnJlZHVjZSgocDogYW55LCBjOiBhbnkpID0+IHAgJiYgcFtjXSB8fCBudWxsLCBlLmRhdGEuJGVudGl0eSkgOiBlLmRhdGEuJGVudGl0eTtcclxuICAgICAgICBsZXQgdmFsaWRhdGlvbkVycm9yc0ZvclByb3BlcnR5ID0gdGhpcy5kYXRhQ29udGV4dC5nZXRWYWxpZGF0aW9uRXJyb3JzRm9yUHJvcGVydHkoZW50aXR5VG9WYWxpZGF0ZSwgcHJvcGVydHlDb25maWcucHJvcGVydHlOYW1lKTtcclxuICAgICAgICBsZXQgdmFsaWRhdGlvbkVycm9yc01lc3NhZ2VzRm9yUHJvcGVydHkgPSB0aGlzLmRhdGFDb250ZXh0LnBhcnNlRXJyb3JNZXNzYWdlcyh2YWxpZGF0aW9uRXJyb3JzRm9yUHJvcGVydHkpO1xyXG5cclxuICAgICAgICBsZXQgdmFsaWRhdGlvbkRpYWxvZ0NvbmZpZyA9IG5ldyBUcnVHcmlkVmFsaWRhdGlvbkRpYWxvZ0NvbmZpZyhlbnRpdHlUb1ZhbGlkYXRlLCBwcm9wZXJ0eUNvbmZpZywgZmFsc2UpO1xyXG4gICAgICAgIHZhbGlkYXRpb25EaWFsb2dDb25maWcuZXJyb3JNc2cgPSB2YWxpZGF0aW9uRXJyb3JzTWVzc2FnZXNGb3JQcm9wZXJ0eTtcclxuICAgICAgICB2YWxpZGF0aW9uRGlhbG9nQ29uZmlnLm1lcmdlRGF0YSA9IHRoaXMuZ2V0TWVyZ2VEYXRhKHByb3BlcnR5Q29uZmlnLCBlbnRpdHlUb1ZhbGlkYXRlKTtcclxuICAgICAgICB0aGlzLmFkZFZhbGlkYXRpb25EaWFsb2codmFsaWRhdGlvbkRpYWxvZ0NvbmZpZywgdGFyZ2V0RWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25EaWFsb2cpXHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uRGlhbG9nLmRlc3Ryb3koKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2VsbE1vdXNlT3V0KGU6IGFueSkge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGlvbkRpYWxvZylcclxuICAgICAgdGhpcy52YWxpZGF0aW9uRGlhbG9nLmRlc3Ryb3koKTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoID0gKHNldHVwUXVlcnk6IGFueSkgPT4ge1xyXG4gICAgdGhpcy5maXJzdFNlYXJjaFJhbiA9IHRydWU7XHJcbiAgICB0aGlzLmFwaS5oaWRlT3ZlcmxheSgpO1xyXG4gICAgdGhpcy5hcGkuc2hvd0xvYWRpbmdPdmVybGF5KCk7XHJcblxyXG4gICAgbGV0IGVudGl0eUxvYWRlZCA9IHRoaXMubG9hZGVkRW50aXRpZXMuc29tZSgocmVmKSA9PiB7XHJcbiAgICAgIHJldHVybiByZWYgPT09IHRoaXMuZW50aXR5W3RoaXMuZW50aXR5LmNvbnN0cnVjdG9yLm5hbWUgKyAnUmVmJ10gfHxcclxuICAgICAgICB0aGlzLmVudGl0eVt0aGlzLmVudGl0eS5jb25zdHJ1Y3Rvci5uYW1lICsgJ1JlZiddIDwgMDtcclxuICAgIH0pO1xyXG4gICAgbGV0IGpvaW5zID0gW107XHJcbiAgICBpZiAoZW50aXR5TG9hZGVkKSB7XHJcbiAgICAgIGpvaW5zLnB1c2godGhpcy5kYXRhQ29udGV4dC5lbnRpdHlBY2Nlc3MoKS5zZWFyY2hDYWNoZU9ubHkoXHJcbiAgICAgICAgdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eVR5cGUsXHJcbiAgICAgICAgc2V0dXBRdWVyeSxcclxuICAgICAgICB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZXhwYW5kcykpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT09IFRydURhdGFHcmlkVHlwZXMuRGV0YWlsTWFueVRvTWFueSAmJiB0aGlzLmNvbmZpZy50YWJsZUNvbmZpZy5jYW5BZGQpXHJcbiAgICAgICAgam9pbnMucHVzaCh0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLnNlYXJjaFF1ZXJ5Q2hvaWNlcyhcclxuICAgICAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlNYW55VG9NYW55VHlwZSxcclxuICAgICAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5tYW55VG9NYW55U2V0dXBRdWVyeSh0aGlzLmVudGl0eSksIGZhbHNlKSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGpvaW5zLnB1c2godGhpcy5kYXRhQ29udGV4dC5lbnRpdHlBY2Nlc3MoKS5zZWFyY2goXHJcbiAgICAgICAgdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eVR5cGUsXHJcbiAgICAgICAgc2V0dXBRdWVyeSxcclxuICAgICAgICB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZXhwYW5kcywgZmFsc2UpKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmdyaWRUeXBlID09PSBUcnVEYXRhR3JpZFR5cGVzLkRldGFpbE1hbnlUb01hbnkgJiYgdGhpcy5jb25maWcudGFibGVDb25maWcuY2FuQWRkKVxyXG4gICAgICAgIGpvaW5zLnB1c2godGhpcy5kYXRhQ29udGV4dC5lbnRpdHlBY2Nlc3MoKS5zZWFyY2hRdWVyeUNob2ljZXMoXHJcbiAgICAgICAgICB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5TWFueVRvTWFueVR5cGUsXHJcbiAgICAgICAgICB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcubWFueVRvTWFueVNldHVwUXVlcnkodGhpcy5lbnRpdHkpLCB0cnVlKSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxhdGVzdFNldHVwUXVlcnkgPSBzZXR1cFF1ZXJ5O1xyXG5cclxuICAgIGZvcmtKb2luKGpvaW5zKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiByZXN1bHRzID0+IHtcclxuICAgICAgICB0aGlzLnNldE5vUm93c1RlbXBsYXRlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT09IFRydURhdGFHcmlkVHlwZXMuRGV0YWlsTWFueVRvTWFueSlcclxuICAgICAgICAgIHRoaXMubG9hZE1hbnlUb01hbnlHcmlkRGF0YShyZXN1bHRzWzBdLCByZXN1bHRzWzFdLCB0cnVlKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aGlzLmxvYWRHcmlkRGF0YShyZXN1bHRzWzBdKTtcclxuICAgICAgfSxcclxuICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkVHlwZSAhPT0gVHJ1RGF0YUdyaWRUeXBlcy5TZWFyY2gpXHJcbiAgICAgICAgICB0aGlzLmxvYWRlZEVudGl0aWVzLnB1c2godGhpcy5lbnRpdHlbdGhpcy5lbnRpdHkuY29uc3RydWN0b3IubmFtZSArICdSZWYnXSk7XHJcbiAgICAgICAgdGhpcy5hcGkuaGlkZU92ZXJsYXkoKTtcclxuICAgICAgICBpZiAodGhpcy5yb3dEYXRhID09PSBudWxsIHx8ICF0aGlzLnJvd0RhdGEubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLmFwaS5zaG93Tm9Sb3dzT3ZlcmxheSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblVuYXNzb2NpYXRlZENob2ljZUNoYW5nZWQgPSAob3B0aW9uOiBBcnJheTxJVHJ1VG9vbGJhckRyb3Bkb3duT3B0aW9uPiB8IG51bGwpID0+IHt9XHJcbiAgb25TZWxlY3RlZFJlcG9ydENoYW5nZWQgPSAoZXZlbnQ6IGFueSkgPT4ge31cclxuXHJcbiAgY2FuQWRkID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy50YWJsZUNvbmZpZy5jYW5BZGQpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLmdyaWRUeXBlID09PSBUcnVEYXRhR3JpZFR5cGVzLkRldGFpbE1hbnlUb01hbnkpXHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVW5hc3NvY2lhdGVkQ2hvaWNlICE9PSB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG9uQWRkID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgdGhpcy5hZGRFbnRpdHkodGhpcy5kYXRhQ29udGV4dC5lbnRpdHlBY2Nlc3MoKS5hZGQodGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eVR5cGUpKTtcclxuICB9XHJcblxyXG4gIG9uRGVsZXRlID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgbGV0IHNlbGVjdGVkUm93cyA9IHRoaXMuYXBpLmdldFNlbGVjdGVkUm93cygpO1xyXG4gICAgaWYgKHNlbGVjdGVkUm93cy5sZW5ndGgpIHtcclxuICAgICAgbGV0IGVudGl0aWVzID0gc2VsZWN0ZWRSb3dzLm1hcChmdW5jdGlvbiAocm93OiBhbnkpIHsgcmV0dXJuIHJvdy4kZW50aXR5OyB9KTtcclxuICAgICAgbGV0IGNvbmZpcm1Nc2cgPSB0aGlzLmFwcEVudmlyb25tZW50LmZvcm1hdERlbGV0ZUNvbmZpcm1hdGlvbk1lc3NhZ2UodGhpcy5jb25maWcudGFibGVOYW1lLCB0aGlzLmNvbmZpZy50YWJsZVBsdXJhbExhYmVsLCBzZWxlY3RlZFJvd3MubGVuZ3RoKTtcclxuICAgICAgbGV0IG9uU3VjY2VzcyA9ICgpID0+IHtcclxuICAgICAgICBsZXQgc2VsZWN0ZWRSb3dzID0gdGhpcy5hcGkuZ2V0U2VsZWN0ZWRSb3dzKCk7XHJcbiAgICAgICAgdGhpcy5hcGkuYXBwbHlUcmFuc2FjdGlvbih7IHJlbW92ZTogc2VsZWN0ZWRSb3dzIH0pO1xyXG4gICAgICAgIHRoaXMub25TZWFyY2godGhpcy5jb25maWcucmVzdWx0Q29uZmlnLnNldHVwUXVlcnkodGhpcy5lbnRpdHkpKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRhdGFDb250ZXh0LmRlbGV0ZShlbnRpdGllcywgY29uZmlybU1zZywgb25TdWNjZXNzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudWlOb3RpZmljYXRpb24ud2FybmluZyh0aGlzLmFwcEVudmlyb25tZW50Lm1zZ05vUmVjb3Jkc1NlbGVjdGVkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uS2VlcCA9ICgpOiB2b2lkID0+IHtcclxuICAgIGxldCBzZWxlY3RlZFJvd3MgPSB0aGlzLmFwaS5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICAgIGlmIChzZWxlY3RlZFJvd3MubGVuZ3RoKVxyXG4gICAgICB0aGlzLnJvd0RhdGEgPSB0aGlzLmFwaS5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICB9XHJcblxyXG4gIG9uUmVtb3ZlID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgbGV0IHNlbGVjdGVkUm93cyA9IHRoaXMuYXBpLmdldFNlbGVjdGVkUm93cygpO1xyXG4gICAgdGhpcy5hcGkuYXBwbHlUcmFuc2FjdGlvbih7IHJlbW92ZTogc2VsZWN0ZWRSb3dzIH0pO1xyXG4gICAgdGhpcy5hcGkuc2VsZWN0QWxsKCk7XHJcbiAgICBzZWxlY3RlZFJvd3MgPSB0aGlzLmFwaS5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICAgIGlmIChzZWxlY3RlZFJvd3MubGVuZ3RoKVxyXG4gICAgICB0aGlzLnJvd0RhdGEgPSB0aGlzLmFwaS5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5yb3dEYXRhID0gW107XHJcbiAgfVxyXG5cclxuICBvbkV4cG9ydCA9ICgpOiB2b2lkID0+IHtcclxuICAgIHRoaXMuZXhwb3J0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmliZVRvKCk7XHJcbiAgICB0aGlzLmxhYmVsID0gdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmxhYmVsOyBcclxuICAgIHRoaXMuY29sdW1uRGVmcyA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5jb2x1bW5EZWZzO1xyXG4gICAgdGhpcy5ncmlkVHlwZSA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5ncmlkVHlwZTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIC8vc2V0VGltZW91dCB0byBwcmV2ZW50OiBFUlJPUiBFcnJvcjogTkcwMTAwOiBFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yLiBcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnBhcmVudFRvb2xiYXJUZW1wbGF0ZSA9IHRoaXMuc2VhcmNoUmVzdWx0Vmlld01hbmFnZXIuc2VhcmNoVmlld1Rvb2xiYXJUZW1wbGF0ZTtcclxuICAgICAgdGhpcy5jb25maWcudmlld01lbnVDb25maWcubWVudUl0ZW1zRW5hYmxlZCA9ICgpID0+IHsgcmV0dXJuIHRoaXMucm93RGF0YS5sZW5ndGg7IH07XHJcbiAgICAgIHRoaXMuY29uZmlnLnZpZXdNZW51Q29uZmlnLmFsbE1lbnVzKCkuc3Vic2NyaWJlKChtZW51OiBhbnkpID0+IHsgdGhpcy52aWV3TWVudUl0ZW1zID0gbWVudTsgfSk7XHJcbiAgICAgIHRoaXMucnVuU2VhcmNoKCk7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHRoaXMucnVuU2VhcmNoKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vicy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBbbmdDbGFzc109XCJ7J3RydS1kYXRhLWdyaWQtbGFiZWwtb2Zmc2V0JzogbGFiZWx9XCI+XHJcbiAgPHNwYW4gY2xhc3M9XCJ0cnUtZGF0YS1ncmlkLWxhYmVsXCIgKm5nSWY9XCJsYWJlbFwiPnt7bGFiZWx9fTwvc3Bhbj5cclxuICA8ZGl2IGNsYXNzPVwidHJ1LWRhdGEtZ3JpZC10b29sYmFyLWNvbnRhaW5lclwiPlxyXG4gICAgPHRydS10b29sYmFyPlxyXG4gICAgICA8dHJ1LXRvb2xiYXItZHJvcGRvd24gW29wdGlvbnNdPVwidW5hc3NvY2lhdGVkQ2hvaWNlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkT3B0aW9uKV09XCJzZWxlY3RlZFVuYXNzb2NpYXRlZENob2ljZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXRoaXMuY29uZmlnLnRhYmxlQ29uZmlnLmNhbkFkZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uVW5hc3NvY2lhdGVkQ2hvaWNlQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JpZFR5cGUgPT0gVHJ1RGF0YUdyaWRUeXBlcy5EZXRhaWxNYW55VG9NYW55XCI+XHJcbiAgICAgIDwvdHJ1LXRvb2xiYXItZHJvcGRvd24+XHJcbiAgICAgIDx0cnUtdG9vbGJhci1idXR0b24gW2ljb25dPVwiJ3RydS10b29sYmFyLWFkZC1pY29uJ1wiIFt0b29sdGlwXT1cIidBZGQgLSBbQ3RybCArIEldJ1wiIFtkaXNhYmxlZF09XCIhY2FuQWRkKClcIiAob25DbGljayk9XCJvbkFkZCgpXCI+PC90cnUtdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDx0cnUtdG9vbGJhci1idXR0b24gW2ljb25dPVwiJ3RydS10b29sYmFyLWRlbGV0ZS1pY29uJ1wiIFt0b29sdGlwXT1cIidEZWxldGUgLSBbQ3RybCArIERdJ1wiIChjbGljayk9XCJvbkRlbGV0ZSgpXCI+PC90cnUtdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDx0cnUtdG9vbGJhci1idXR0b24gW2ljb25dPVwiJ3RydS10b29sYmFyLWtlZXAtaWNvbidcIiBbdG9vbHRpcF09XCInS2VlcCBzZWxlY3RlZCByZWNvcmRzIC0gW0N0cmwgKyBLXSdcIiAoY2xpY2spPVwib25LZWVwKClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPHRydS10b29sYmFyLWJ1dHRvbiBbaWNvbl09XCIndHJ1LXRvb2xiYXItcmVtb3ZlLWljb24nXCIgW3Rvb2x0aXBdPVwiJ1JlbW92ZSBzZWxlY3RlZCByZWNvcmRzIC0gW0N0cmwgKyBSXSdcIiAoY2xpY2spPVwib25SZW1vdmUoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8dHJ1LXRvb2xiYXItc2VwYXJhdG9yICpuZ0lmPVwicGFyZW50VG9vbGJhclRlbXBsYXRlXCI+PC90cnUtdG9vbGJhci1zZXBhcmF0b3I+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYXJlbnRUb29sYmFyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPHRydS10b29sYmFyLXNlcGFyYXRvcj48L3RydS10b29sYmFyLXNlcGFyYXRvcj5cclxuICAgICAgPHRydS10b29sYmFyLWJ1dHRvbiBbaWNvbl09XCIndHJ1LXRvb2xiYXItZXhwb3J0LWljb24nXCIgW3Rvb2x0aXBdPVwiJ0V4cG9ydCdcIiAoY2xpY2spPVwib25FeHBvcnQoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8dHJ1LXRvb2xiYXItc2VwYXJhdG9yICpuZ0lmPVwidmlld01lbnVJdGVtcy5sZW5ndGhcIj48L3RydS10b29sYmFyLXNlcGFyYXRvcj5cclxuICAgICAgPGRpdiAqbmdJZj1cInZpZXdNZW51SXRlbXMubGVuZ3RoXCI+XHJcbiAgICAgICAgPHRydS10b29sYmFyLW1lbnUgKm5nRm9yPVwibGV0IHZpZXdNZW51SXRlbSBvZiB2aWV3TWVudUl0ZW1zXCIgW2NvbmZpZ109XCJ2aWV3TWVudUl0ZW1cIj48L3RydS10b29sYmFyLW1lbnU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC90cnUtdG9vbGJhcj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwidHJ1LWRhdGEtZ3JpZC1jb250YWluZXJcIj5cclxuICAgIDxhZy1ncmlkLWFuZ3VsYXIgY2xhc3M9XCJhZy10aGVtZS1hbHBpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbZ3JpZE9wdGlvbnNdPVwiZ3JpZE9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbcm93RGF0YV09XCJyb3dEYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbkRlZnNdPVwiY29sdW1uRGVmc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtkZWZhdWx0Q29sRGVmXT1cImRlZmF1bHRDb2xEZWZcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbaGVhZGVySGVpZ2h0XT1cIjI1XCJcclxuICAgICAgICAgICAgICAgICAgICAgW3Jvd0hlaWdodF09XCIyNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtyb3dCdWZmZXJdPVwiNTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbZW50ZXJOYXZpZ2F0ZXNWZXJ0aWNhbGx5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbZW50ZXJOYXZpZ2F0ZXNWZXJ0aWNhbGx5QWZ0ZXJFZGl0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbc3VwcHJlc3NSb3dIb3ZlckhpZ2hsaWdodF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3N0b3BFZGl0aW5nV2hlbkNlbGxzTG9zZUZvY3VzXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGNlbGxDbGlja2VkKT1cIm9uQ2VsbENsaWNrZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChjZWxsRG91YmxlQ2xpY2tlZCk9XCJvbkNlbGxEb3VibGVDbGlja2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoY2VsbEtleURvd24pPVwib25DZWxsS2V5RG93bigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgKHJvd0RhdGFDaGFuZ2VkKT1cIm9uUm93RGF0YUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChjZWxsTW91c2VPdmVyKT1cIm9uQ2VsbE1vdXNlT3ZlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGNlbGxNb3VzZU91dCk9XCJvbkNlbGxNb3VzZU91dCgkZXZlbnQpXCI+XHJcbiAgICA8L2FnLWdyaWQtYW5ndWxhcj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwidHJ1LWRhdGEtZ3JpZC1zdGF0dXNiYXItY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidHJ1LWRhdGEtZ3JpZC1zdGF0dXNiYXItdmFsdWVzLWNvbnRhaW5lclwiPlxyXG4gICAgICA8cCBjbGFzcz1cInRydS1kYXRhLWdyaWQtc3RhdHVzYmFyLXZhbHVlcy10ZXh0XCI+e3tnZXRSb3dDb3VudCgpfX08L3A+XHJcbiAgICAgIDxwIGNsYXNzPVwidHJ1LWRhdGEtZ3JpZC1zdGF0dXNiYXItdmFsdWVzLXRleHRcIj57e2dldFNlbGVjdGVkUm93Q291bnQoKX19PC9wPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
558
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWRhdGEtZ3JpZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWdyaWQvdHJ1LWRhdGEtZ3JpZC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWdyaWQvdHJ1LWRhdGEtZ3JpZC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUMsU0FBUyxFQUFnQixLQUFLLEVBQXFCLFFBQVEsRUFBOEIsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNMLE9BQU8sRUFBZ0IsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxLQUFLLENBQUMsTUFBTSxZQUFZLENBQUM7QUFhaEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDL0YsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFFNUcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0VBQXdFLENBQUM7QUFDbkgsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0VBQXdFLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU2xILE1BQU0sT0FBTyxXQUFXO0lBbUVaO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDVztJQTFFWixNQUFNLENBQXNCO0lBQzVCLE1BQU0sQ0FBTztJQUNiLElBQUksQ0FBTztJQUVwQixnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUVwQyxLQUFLLEdBQVcsRUFBRSxDQUFDO0lBQ25CLFVBQVUsR0FBUSxFQUFFLENBQUM7SUFDckIsT0FBTyxHQUFRLEVBQUUsQ0FBQztJQUNsQixXQUFXLEdBQWUsRUFBRSxDQUFDO0lBQzdCLGtCQUFrQixDQUFNO0lBQ3hCLG1CQUFtQixHQUFlLEVBQUUsQ0FBQztJQUNyQywwQkFBMEIsQ0FBTTtJQUNoQyxhQUFhLEdBQVEsRUFBRSxDQUFDO0lBQ3hCLG9CQUFvQixHQUFlLElBQUksQ0FBQztJQUN4QyxRQUFRLEdBQXFCLGdCQUFnQixDQUFDLE1BQU0sQ0FBQTtJQUNwRCxlQUFlLEdBQWUsRUFBRSxDQUFDO0lBQ2pDLGNBQWMsR0FBZSxFQUFFLENBQUM7SUFDaEMsZ0JBQWdCLENBQU07SUFDdEIsY0FBYyxHQUFZLEtBQUssQ0FBQztJQUNoQyxXQUFXLEdBQVE7UUFDakIsV0FBVyxFQUFFLEtBQUs7UUFDbEIsWUFBWSxFQUFFLFVBQVU7UUFDeEIsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRTtRQUNqQyx5QkFBeUIsRUFBRSxLQUFLO1FBQ2hDLHVCQUF1QixFQUFFLHlCQUF5QjtRQUNsRCw2QkFBNkIsRUFBRTtZQUM3QixjQUFjLEVBQUUsa0NBQWtDO1NBQ25EO1FBQ0Qsc0JBQXNCLEVBQUUsd0JBQXdCO1FBQ2hELDRCQUE0QixFQUFFO1lBQzVCLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtnQkFFdEIsSUFBSSxJQUFJLENBQUMsY0FBYztvQkFDckIsT0FBTyx3QkFBd0IsQ0FBQTs7b0JBRS9CLE9BQU8sa0NBQWtDLENBQUE7WUFDN0MsQ0FBQztTQUNGO1FBQ0Qsa0JBQWtCLEVBQUUsQ0FBQyxNQUFXLEVBQUUsRUFBRTtRQUVwQyxDQUFDO1FBQ0QsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6RCxDQUFDO1FBQ0Qsb0JBQW9CLEVBQUUsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUNwQyxNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztnQkFDdEIsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQzthQUN4QixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0Qsa0JBQWtCLEVBQUUsQ0FBQyxNQUFXLEVBQUUsRUFBRTtRQUVwQyxDQUFDO1FBQ0QsV0FBVyxFQUFFLENBQUMsS0FBcUIsRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUN2QixDQUFDO0tBQ0YsQ0FBQTtJQUNELHFCQUFxQixHQUE0QixJQUFJLENBQUM7SUFFOUMsR0FBRyxDQUFXO0lBQ2QsSUFBSSxHQUF3QixFQUFFLENBQUM7SUFDL0IsUUFBUSxHQUFZLElBQUksQ0FBQztJQUVqQyxZQUNVLFdBQTJCLEVBQzNCLHVCQUFtRCxFQUNuRCxjQUFpQyxFQUNqQyxzQkFBaUQsRUFDakQsY0FBaUMsRUFDakMsYUFBK0IsRUFDL0IsSUFBYSxFQUNiLEdBQW1CLEVBQ1IscUJBQStDO1FBUjFELGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQTRCO1FBQ25ELG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQTJCO1FBQ2pELG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IsU0FBSSxHQUFKLElBQUksQ0FBUztRQUNiLFFBQUcsR0FBSCxHQUFHLENBQWdCO1FBQ1IsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUEwQjtJQUNwRSxDQUFDO0lBRU8sdUJBQXVCLEdBQUcsQ0FBQyxNQUFXLEVBQUUsRUFBRTtRQUNoRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0QsT0FBTyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDekIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxDQUFDO0lBRU0saUJBQWlCLEdBQUcsR0FBRyxFQUFFO1FBQy9CLCtGQUErRjtJQUNqRyxDQUFDLENBQUE7SUFFTyxXQUFXLEdBQUcsR0FBRyxFQUFFO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakYsSUFBSSxLQUFLLEVBQUUsVUFBVTtnQkFDbkIsSUFBSSxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckUsSUFBSSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksWUFBWSxHQUFlLEVBQUUsQ0FBQztnQkFDbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUNsRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQzt3QkFDL0UsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBQ3pCLENBQUM7UUFFSCxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckUsSUFBSSxLQUFLLEVBQUUsVUFBVSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakUsSUFBSSxZQUFZLEdBQWUsRUFBRSxDQUFDO2dCQUNsQyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ2xELEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQzt3QkFDcEQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzs0QkFDL0MsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZDLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxJQUFJLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQWUsRUFBRSxFQUFFO1lBQ2hHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFpQixFQUFFLEVBQUU7WUFDdkYsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxHQUFHLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BGLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBaUIsRUFBRSxFQUFFO2dCQUM3RyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNOLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FDekMsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUN4QyxJQUFJLENBQUMsU0FBUyxFQUNkLElBQUksQ0FBQyxVQUFVLEVBQ2YsR0FBRyxFQUFFLEdBQUcsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUEsQ0FBQyxDQUFDLEVBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFDaEMsRUFBRSxFQUNGLEdBQUcsRUFBRSxHQUFHLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsVUFBeUIsRUFBRSxFQUFFO1lBQzlELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVOLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBZ0IsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtZQUM5RixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUM1QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxXQUFXLEtBQUssUUFBUSxJQUFJLFdBQVcsS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDekQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNiLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDekIsQ0FBQztnQkFDRCxJQUFJLFdBQVcsS0FBSyxRQUFRLElBQUksV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUN6RCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDekIsQ0FBQztnQkFDRCxJQUFJLFdBQVcsS0FBSyxRQUFRLElBQUksV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUN6RCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN6QixDQUFDO2dCQUNELElBQUksV0FBVyxLQUFLLFFBQVEsSUFBSSxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ3pELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN6QixDQUFDO2dCQUNELElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFxQixDQUFDLENBQUM7Z0JBQzdFLElBQUksQ0FBQyxlQUFlLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTTtvQkFDbkQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFBO0lBRU8sT0FBTyxHQUFHLEdBQVcsRUFBRTtRQUM3QixJQUFJLFFBQVEsR0FBUSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQyxPQUFZLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDcEQsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1SCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEIsQ0FBQyxDQUFBO0lBRU8sVUFBVSxHQUFHLEdBQUcsRUFBRTtRQUN4QixJQUFJLElBQUksR0FBUSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQTtJQUVPLFlBQVksR0FBRyxDQUFDLFFBQW9CLEVBQUUsRUFBRTtRQUM5QyxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3RFLENBQUMsQ0FBQTtJQUVPLHNCQUFzQixHQUFHLENBQUMsa0JBQThCLEVBQUUsb0JBQWdDLEVBQUUsVUFBbUIsRUFBRSxFQUFFO1FBQ3pILElBQUksVUFBVTtZQUNaLElBQUksQ0FBQyxPQUFPLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDOztZQUV4RixrQkFBa0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsSUFBSSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUE7UUFDN0UsSUFBSSw4QkFBOEIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxrQ0FBa0MsQ0FBQTtRQUNoRyxJQUFJLDJCQUEyQixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsR0FBRyxHQUFHLDhCQUE4QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5SCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQy9ELE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFBO0lBRU8sVUFBVSxHQUFHLEdBQUcsRUFBRTtRQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDckQsSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTztZQUNwQixJQUFJLGNBQWMsQ0FBQztZQUNuQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVU7Z0JBQ3JDLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7O2dCQUUvQyxjQUFjLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQztZQUVsQyxJQUFJLENBQUMsV0FBVztpQkFDYixZQUFZLEVBQUU7aUJBQ2QsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQTtJQUVPLHVCQUF1QixHQUFHLENBQUMsTUFBbUMsRUFBVyxFQUFFO1FBQ2pGLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEtBQUssQ0FBQztRQUMxQyxJQUFJLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXLENBQUM7UUFDbkQsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDO1FBQy9DLElBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLFdBQVcsQ0FBQztRQUNuRCxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxZQUFZLENBQUM7UUFDckQsSUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDdkMsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFFbkMsSUFBSSxXQUFXLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM5QyxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBRXZILElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQzdCLElBQUksUUFBUSxJQUFJLENBQUMsVUFBVTtnQkFDekIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDeEIsSUFBSSxRQUFRLElBQUksVUFBVTtnQkFDN0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2lCQUM1QixJQUFJLFdBQVc7Z0JBQ2xCLE1BQU0sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztpQkFDNUIsSUFBSSxZQUFZO2dCQUNuQixNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsSUFBSSxVQUFVLElBQUksUUFBUSxJQUFJLENBQUMsV0FBVyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDekQsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMvQixNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDO2dCQUMxQixRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQWtCO2dCQUN6QyxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQWdCO2FBQ3RDLENBQUMsQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0lBRU0sU0FBUyxHQUFHLENBQUMsU0FBYyxFQUFFLEVBQUU7UUFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQzlDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUM5QyxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDO1lBQ3JFLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2xELElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDeEcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNyQixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzdELGNBQWMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQztnQkFDeEcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUM7Z0JBQzdFLDRDQUE0QztnQkFDNUMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUM1RCxPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO2dCQUNuRyxDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDOUMsc0JBQXNCO2dCQUN0QixJQUFJLENBQUMsMEJBQTBCLEdBQUcsU0FBUyxDQUFDO2dCQUM1QyxrQkFBa0I7Z0JBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEUsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwRSxDQUFDO0lBQ0gsQ0FBQyxDQUFBO0lBRU8sWUFBWSxHQUFHLENBQUMsTUFBcUMsRUFBRSxnQkFBcUIsRUFBMEIsRUFBRTtRQUM5RyxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkMsSUFBSSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2RCxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN4QixJQUFJLGNBQW1CLENBQUM7WUFDeEIsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDcEIsSUFBSSxrQkFBa0IsR0FBRyxHQUFHLEdBQUcsSUFBcUMsQ0FBQztvQkFDckUsY0FBYyxHQUFHLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBQ3hELENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLGtCQUFrQixHQUFHLEdBQUcsR0FBRyxJQUFxQyxDQUFDO29CQUNyRSxjQUFjLEdBQUcsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBQ3RELENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDaEQsT0FBTyxjQUFjLENBQUMsY0FBYyxDQUFDO1lBQ3ZDLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQzNILENBQUM7SUFDSCxDQUFDLENBQUE7SUFFTyxnQkFBZ0IsR0FBaUQsSUFBSSxDQUFDO0lBQ3RFLG1CQUFtQixHQUFHLENBQUMsTUFBcUMsRUFBRSxXQUFnQixFQUFFLEVBQUU7UUFDeEYsSUFBSSxNQUFNLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0QsSUFBSSxhQUFhLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xDLElBQUksWUFBWSxHQUFHLGVBQWUsQ0FBMEIsdUJBQXVCLEVBQUU7WUFDbkYsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRO1lBQ3RDLFdBQVcsRUFBRSxhQUFhO1NBQzNCLENBQUMsQ0FBQztRQUVILFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN0QyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdkMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFlBQVksQ0FBQztRQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0MsWUFBWSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ2pELENBQUMsQ0FBQTtJQUVPLGNBQWMsR0FBRyxDQUFDLFFBQW9CLEVBQUUsRUFBRTtRQUNoRCxJQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQzlCLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNiLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDeEIsUUFBUSxFQUFFLENBQUM7WUFDYixDQUFDO1FBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQyxDQUFBO0lBRU8sU0FBUyxHQUFHLEtBQUssSUFBSSxFQUFFO1FBQzdCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFO1lBQ3ZCLElBQUksaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQzdCLElBQUksSUFBSSxDQUFDLHFCQUFxQixLQUFLLElBQUk7Z0JBQ3JDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7O2dCQUV4RCxpQkFBaUIsR0FBRyxJQUFJLENBQUM7WUFFM0IsSUFBSSxDQUNGLElBQUksQ0FBQyxRQUFRLEtBQUssZ0JBQWdCLENBQUMsTUFBTTtnQkFDekMsSUFBSSxDQUFDLFFBQVEsS0FBSyxnQkFBZ0IsQ0FBQyxnQkFBZ0I7Z0JBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO2dCQUNwQixpQkFBaUIsRUFBRSxDQUFDO2dCQUNwQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTztvQkFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7b0JBRXBCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQTtJQUVPLG9CQUFvQixHQUFHLENBQUMsWUFBb0IsRUFBRSxFQUFFO1FBQ3RELElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsWUFBWSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDLENBQUE7SUFFRCxhQUFhLEdBQVc7UUFDdEIscUJBQXFCLEVBQUUsSUFBSSxDQUFDLHVCQUF1QjtLQUNwRCxDQUFDO0lBRUYsV0FBVyxHQUFHLEdBQUcsRUFBRTtRQUNqQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsR0FBRyxFQUFFLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDaEQsT0FBTyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUMsQ0FBQTtJQUVELG1CQUFtQixHQUFHLEdBQUcsRUFBRTtRQUN6QixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxlQUFlLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDM0MsT0FBTyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzlCLENBQUMsQ0FBQTtJQUVELGdCQUFnQixHQUFHLENBQUMsSUFBUyxFQUFFLEVBQUU7UUFDL0IsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQyxDQUFBO0lBRUQsYUFBYSxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUU7UUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVELG1CQUFtQixHQUFHLENBQUMsVUFBZSxFQUFFLEVBQUU7UUFDeEMsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxvQkFBb0I7WUFDdEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUE7SUFFRCxhQUFhLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRTtRQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBQ3pCLE1BQU0sR0FBRyxHQUFJLEtBQUssQ0FBQyxLQUFrQyxDQUFDO1FBQ3RELElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUN6QixHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDckIsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUM7Z0JBQ3pCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtnQkFDeEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUMvQixHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUk7YUFDZCxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFBO0lBRUQsZUFBZSxDQUFDLENBQU07UUFDcEIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUNwRCxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO2dCQUM5QyxhQUFhLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwRCxJQUFJLGFBQWEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hELElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUMvQixJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUV2QyxJQUFJLGlCQUFpQixHQUFhLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxjQUFjLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUM5QyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUM3RSxDQUFDO2dCQUVELElBQUksZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDbkosSUFBSSwyQkFBMkIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLDhCQUE4QixDQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDakksSUFBSSxtQ0FBbUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLDJCQUEyQixDQUFDLENBQUM7Z0JBRTNHLElBQUksc0JBQXNCLEdBQUcsSUFBSSw2QkFBNkIsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3hHLHNCQUFzQixDQUFDLFFBQVEsR0FBRyxtQ0FBbUMsQ0FBQztnQkFDdEUsc0JBQXNCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLGdCQUFnQixDQUFDLENBQUM7Z0JBQ3ZGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxzQkFBc0IsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNsRSxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxDQUFNO1FBQ25CLElBQUksSUFBSSxDQUFDLGdCQUFnQjtZQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELFFBQVEsR0FBRyxDQUFDLFVBQWUsRUFBRSxFQUFFO1FBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRTlCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDNUUsT0FBTyxHQUFHLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDLGVBQWUsQ0FDeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUNuQyxVQUFVLEVBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUVyQyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssZ0JBQWdCLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTTtnQkFDdkYsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDLGtCQUFrQixDQUMzRCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsRUFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFDekUsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUMsTUFBTSxDQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQ25DLFVBQVUsRUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUU1QyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssZ0JBQWdCLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTTtnQkFDdkYsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDLGtCQUFrQixDQUMzRCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsRUFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDeEUsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLENBQUM7UUFFbkMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN4QixJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxnQkFBZ0IsQ0FBQyxnQkFBZ0I7b0JBQ3JELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDOztvQkFFMUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxDQUFDO1lBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDYixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssZ0JBQWdCLENBQUMsTUFBTTtvQkFDM0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDOUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2xELElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDL0IsQ0FBQztZQUNILENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUE7SUFFRCwyQkFBMkIsR0FBRyxDQUFDLE1BQStDLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQTtJQUNyRix1QkFBdUIsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUFBO0lBRTVDLE1BQU0sR0FBRyxHQUFZLEVBQUU7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU07WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNsRCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssZ0JBQWdCLENBQUMsZ0JBQWdCO1lBQ3JELE9BQU8sSUFBSSxDQUFDLDBCQUEwQixLQUFLLFNBQVMsQ0FBQztRQUN2RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQTtJQUVELEtBQUssR0FBRyxHQUFTLEVBQUU7UUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzNGLENBQUMsQ0FBQTtJQUVELFFBQVEsR0FBRyxHQUFTLEVBQUU7UUFDcEIsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM5QyxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4QixJQUFJLFFBQVEsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBUSxJQUFJLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdFLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0ksSUFBSSxTQUFTLEdBQUcsR0FBRyxFQUFFO2dCQUNuQixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUM5QyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2xFLENBQUMsQ0FBQTtZQUNELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDM0QsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDeEUsQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVELE1BQU0sR0FBRyxHQUFTLEVBQUU7UUFDbEIsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM5QyxJQUFJLFlBQVksQ0FBQyxNQUFNO1lBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM5QyxDQUFDLENBQUE7SUFFRCxRQUFRLEdBQUcsR0FBUyxFQUFFO1FBQ3BCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckIsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDMUMsSUFBSSxZQUFZLENBQUMsTUFBTTtZQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7O1lBRTFDLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUMsQ0FBQTtJQUVELFFBQVEsR0FBRyxHQUFTLEVBQUU7UUFDcEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUMsQ0FBQTtJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7UUFDdEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7SUFDcEQsQ0FBQztJQUVELGVBQWU7UUFDYiwyRkFBMkY7UUFDM0YsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMseUJBQXlCLENBQUM7WUFDcEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLEdBQUcsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRixJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0YsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDO3VHQWxrQlUsV0FBVzsyRkFBWCxXQUFXLGlNQzlCeEIsaTFHQW9EQTs7MkZEdEJhLFdBQVc7a0JBUHZCLFNBQVM7K0JBQ0UsZUFBZSxpQkFHVixpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CLEVBQUMsdUJBQXVCLEVBQUUsTUFBTSxFQUFDOzswQkE2RXBDLFFBQVE7eUNBMUVGLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQXBwbGljYXRpb25SZWYsIENvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE9wdGlvbmFsLCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgVmlld0VuY2Fwc3VsYXRpb24sIGNyZWF0ZUNvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb2xEZWYsIENvbHVtbiwgR3JpZEFwaSwgR3JpZFJlYWR5RXZlbnQsIFN1cHByZXNzS2V5Ym9hcmRFdmVudFBhcmFtcyB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmb3JrSm9pbiwgZnJvbUV2ZW50LCBza2lwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAndW5kZXJzY29yZSc7XHJcbmltcG9ydCB7IFRydUxpc3RDb250cm9sQ29uZmlnQmFzZSB9IGZyb20gJy4uLy4uL2Jhc2UtY2xhc3Nlcy90cnUtbGlzdC1jb250cm9sLWNvbmZpZy1iYXNlJztcclxuaW1wb3J0IHsgVHJ1U2VhcmNoVmlld0V2ZW50SGFuZGxlciB9IGZyb20gJy4uLy4uL2Jhc2Utdmlld3Mvc2VhcmNoL3NlcnZpY2VzL3RydS1zZWFyY2gtdmlldy1ldmVudC1oYW5kbGVyJztcclxuaW1wb3J0IHsgVHJ1RGF0YUNoYW5nZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvdHJ1LWRhdGEtY2hhbmdlJztcclxuaW1wb3J0IHsgVHJ1TWVyZ2VEYXRhU2V0IH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy90cnUtbWVyZ2UtZGF0YS1zZXQnO1xyXG5pbXBvcnQgeyBUcnVBcHBFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS1hcHAtZW52aXJvbm1lbnQnO1xyXG5pbXBvcnQgeyBUcnVDb25uZWN0aW9uSHViIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LWNvbm5lY3Rpb24taHViJztcclxuaW1wb3J0IHsgVHJ1RGF0YUNvbnRleHQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtZGF0YS1jb250ZXh0JztcclxuaW1wb3J0IHsgVHJ1U2VhcmNoUmVzdWx0Vmlld01hbmFnZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtc2VhcmNoLXJlc3VsdC12aWV3LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBUcnVVaU5vdGlmaWNhdGlvbiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS11aS1ub3RpZmljYXRpb24nO1xyXG5pbXBvcnQgeyBUcnVVdGlsIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LXV0aWwnO1xyXG5pbXBvcnQgeyBUcnVUYWJHcm91cEV2ZW50Tm90aWZpZXIgfSBmcm9tICcuLi9sYXlvdXQvdGFiL3NlcnZpY2VzL3RydS10YWItZ3JvdXAtZXZlbnQtbm90aWZpZXInO1xyXG5pbXBvcnQgeyBJVHJ1VG9vbGJhckRyb3Bkb3duT3B0aW9uIH0gZnJvbSAnLi4vdG9vbGJhci9jbGFzc2VzL3RydS10b29sYmFyLWRyb3Bkb3duLW9wdGlvbic7XHJcbmltcG9ydCB7IFRydUdyaWRWYWxpZGF0aW9uRGlhbG9nIH0gZnJvbSAnLi4vZ3JpZC12YWxpZGF0aW9uLWRpYWxvZy90cnUtZ3JpZC12YWxpZGF0aW9uLWRpYWxvZyc7XHJcbmltcG9ydCB7IFRydUdyaWRWYWxpZGF0aW9uRGlhbG9nQ29uZmlnIH0gZnJvbSAnLi4vZ3JpZC12YWxpZGF0aW9uLWRpYWxvZy90cnUtZ3JpZC12YWxpZGF0aW9uLWRpYWxvZy1jb25maWcnO1xyXG5pbXBvcnQgeyBJVHJ1RGF0YUdyaWRDb25maWcgfSBmcm9tICcuL2NsYXNzZXMvdHJ1LWRhdGEtZ3JpZC1jb25maWcnO1xyXG5pbXBvcnQgeyBUcnVEYXRhR3JpZFR5cGVzIH0gZnJvbSAnLi9lbnVtcy90cnUtZGF0YS1ncmlkLXR5cGVzJztcclxuaW1wb3J0IHsgVHJ1RGF0YUdyaWRMb2FkaW5nT3ZlcmxheSB9IGZyb20gJy4vb3ZlcmxheXMvdHJ1LWRhdGEtZ3JpZC1sb2FkaW5nLW92ZXJsYXkvdHJ1LWRhdGEtZ3JpZC1sb2FkaW5nLW92ZXJsYXknO1xyXG5pbXBvcnQgeyBUcnVEYXRhR3JpZE5vUm93c092ZXJsYXkgfSBmcm9tICcuL292ZXJsYXlzL3RydS1kYXRhLWdyaWQtbm8tcm93cy1vdmVybGF5L3RydS1kYXRhLWdyaWQtbm8tcm93cy1vdmVybGF5JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndHJ1LWRhdGEtZ3JpZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RydS1kYXRhLWdyaWQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHJ1LWRhdGEtZ3JpZC5jc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGhvc3Q6IHsnW2NsYXNzLnRydS1kYXRhLWdyaWRdJzogJ3RydWUnfVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJ1RGF0YUdyaWQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQElucHV0KCkgY29uZmlnITogSVRydURhdGFHcmlkQ29uZmlnO1xyXG4gIEBJbnB1dCgpIGVudGl0eSE6IGFueTtcclxuICBASW5wdXQoKSBuYW1lITogYW55O1xyXG5cclxuICBUcnVEYXRhR3JpZFR5cGVzID0gVHJ1RGF0YUdyaWRUeXBlcztcclxuXHJcbiAgbGFiZWw6IHN0cmluZyA9ICcnO1xyXG4gIGNvbHVtbkRlZnM6IGFueSA9IFtdO1xyXG4gIHJvd0RhdGE6IGFueSA9IFtdO1xyXG4gIHZpZXdDaG9pY2VzOiBBcnJheTxhbnk+ID0gW107XHJcbiAgc2VsZWN0ZWRWaWV3Q2hvaWNlOiBhbnk7XHJcbiAgdW5hc3NvY2lhdGVkQ2hvaWNlczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIHNlbGVjdGVkVW5hc3NvY2lhdGVkQ2hvaWNlOiBhbnk7XHJcbiAgdmlld01lbnVJdGVtczogYW55ID0gW107XHJcbiAgc2VsZWN0ZWRWaWV3TWVudUl0ZW06IGFueSB8IG51bGwgPSBudWxsO1xyXG4gIGdyaWRUeXBlOiBUcnVEYXRhR3JpZFR5cGVzID0gVHJ1RGF0YUdyaWRUeXBlcy5TZWFyY2hcclxuICB1bnNhdmVkRW50aXRpZXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBsb2FkZWRFbnRpdGllczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIGxhdGVzdFNldHVwUXVlcnk6IGFueTtcclxuICBmaXJzdFNlYXJjaFJhbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGdyaWRPcHRpb25zOiBhbnkgPSB7XHJcbiAgICBhbmltYXRlUm93czogZmFsc2UsXHJcbiAgICByb3dTZWxlY3Rpb246ICdtdWx0aXBsZScsXHJcbiAgICByb3dTdHlsZTogeyBiYWNrZ3JvdW5kOiAnd2hpdGUnIH0sXHJcbiAgICBzdXBwcmVzc1Jvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcclxuICAgIGxvYWRpbmdPdmVybGF5Q29tcG9uZW50OiBUcnVEYXRhR3JpZExvYWRpbmdPdmVybGF5LFxyXG4gICAgbG9hZGluZ092ZXJsYXlDb21wb25lbnRQYXJhbXM6IHtcclxuICAgICAgbG9hZGluZ01lc3NhZ2U6ICdTZWFyY2hpbmcgLSBPbmUgbW9tZW50IHBsZWFzZS4uLicsXHJcbiAgICB9LFxyXG4gICAgbm9Sb3dzT3ZlcmxheUNvbXBvbmVudDogVHJ1RGF0YUdyaWROb1Jvd3NPdmVybGF5LFxyXG4gICAgbm9Sb3dzT3ZlcmxheUNvbXBvbmVudFBhcmFtczoge1xyXG4gICAgICBub1Jvd3NNZXNzYWdlRnVuYzogKCkgPT5cclxuICAgICAge1xyXG4gICAgICAgIGlmICh0aGlzLmZpcnN0U2VhcmNoUmFuKVxyXG4gICAgICAgICAgcmV0dXJuICdTb3JyeSAtIG5vIHJvd3MgZm91bmQhJ1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJldHVybiAnQ2xpY2sgc2VhcmNoIHRvIGRpc3BsYXkgcmVzdWx0cy4nXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgb25TZWxlY3Rpb25DaGFuZ2VkOiAocGFyYW1zOiBhbnkpID0+IHtcclxuXHJcbiAgICB9LFxyXG4gICAgb25Sb3dEYXRhVXBkYXRlZDogKCkgPT4ge1xyXG4gICAgICB0aGlzLmNvbmZpZy52aWV3TWVudUNvbmZpZy5lbnRpdGllcyA9IHRoaXMuZ2V0Um93RGF0YSgpO1xyXG4gICAgICB0aGlzLmNvbmZpZy52aWV3TWVudUNvbmZpZy5hY3Rpb25SZWZzID0gdGhpcy5nZXRSZWZzKCk7XHJcbiAgICB9LFxyXG4gICAgb25DZWxsRWRpdGluZ1N0b3BwZWQ6IChwYXJhbXM6IGFueSkgPT4ge1xyXG4gICAgICBwYXJhbXMuYXBpLnJlZnJlc2hDZWxscyh7XHJcbiAgICAgICAgZm9yY2U6IHRydWUsXHJcbiAgICAgICAgcm93Tm9kZXM6IFtwYXJhbXMubm9kZV1cclxuICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgb25DZWxsVmFsdWVDaGFuZ2VkOiAocGFyYW1zOiBhbnkpID0+IHtcclxuXHJcbiAgICB9LFxyXG4gICAgb25HcmlkUmVhZHk6IChldmVudDogR3JpZFJlYWR5RXZlbnQpID0+IHtcclxuICAgICAgdGhpcy5hcGkgPSBldmVudC5hcGk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHBhcmVudFRvb2xiYXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIGFwaSE6IEdyaWRBcGk7XHJcbiAgcHJpdmF0ZSBzdWJzOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XHJcbiAgcHJpdmF0ZSBpc0FjdGl2ZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkYXRhQ29udGV4dDogVHJ1RGF0YUNvbnRleHQsXHJcbiAgICBwcml2YXRlIHNlYXJjaFJlc3VsdFZpZXdNYW5hZ2VyOiBUcnVTZWFyY2hSZXN1bHRWaWV3TWFuYWdlcixcclxuICAgIHByaXZhdGUgYXBwRW52aXJvbm1lbnQ6IFRydUFwcEVudmlyb25tZW50LFxyXG4gICAgcHJpdmF0ZSBzZWFyY2hWaWV3RXZlbnRIYW5kbGVyOiBUcnVTZWFyY2hWaWV3RXZlbnRIYW5kbGVyLFxyXG4gICAgcHJpdmF0ZSB1aU5vdGlmaWNhdGlvbjogVHJ1VWlOb3RpZmljYXRpb24sXHJcbiAgICBwcml2YXRlIGNvbm5lY3Rpb25IdWI6IFRydUNvbm5lY3Rpb25IdWIsXHJcbiAgICBwcml2YXRlIHV0aWw6IFRydVV0aWwsXHJcbiAgICBwcml2YXRlIGFwcDogQXBwbGljYXRpb25SZWYsXHJcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgdGFiR3JvdXBFdmVudE5vdGlmaWVyOiBUcnVUYWJHcm91cEV2ZW50Tm90aWZpZXIpIHtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW5oYW5jZVJvd0RhdGFGb3JFbnRpdHkgPSAoZW50aXR5OiBhbnkpID0+IHtcclxuICAgIGxldCByb3dEYXRhID0gdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLnJvd0RhdGFFbmhhbmNlcihlbnRpdHkpO1xyXG4gICAgcm93RGF0YS4kZW50aXR5ID0gZW50aXR5O1xyXG4gICAgcmV0dXJuIHJvd0RhdGE7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBzZXROb1Jvd3NUZW1wbGF0ZSA9ICgpID0+IHtcclxuICAgIC8vdGhpcy5ub1Jvd3NUZW1wbGF0ZSA9IGA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OmJvbGQ7XCI+Tm8gZGF0YSBmb3VuZC48L3NwYW4+YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG8gPSAoKSA9PiB7XHJcbiAgICB0aGlzLnN1YnMucHVzaCh0aGlzLmFwcEVudmlyb25tZW50Lm9uU2F2ZUNvbXBsZXRlJC5waXBlKHNraXAoMSkpLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgIGlmIChldmVudD8uc3VjY2Vzc2Z1bClcclxuICAgICAgICB0aGlzLmFwaT8ucmVkcmF3Um93cygpO1xyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5zdWJzLnB1c2godGhpcy5hcHBFbnZpcm9ubWVudC5vblJldmVydENvbXBsZXRlJC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQ/LnN1Y2Nlc3NmdWwpIHtcclxuICAgICAgICBsZXQgcm93c1RvUmVtb3ZlOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMucm93RGF0YS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMucm93RGF0YVtpXS4kZW50aXR5W3RoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlUeXBlLm5hbWUgKyAnUmVmJ10gPCAwKVxyXG4gICAgICAgICAgICByb3dzVG9SZW1vdmUucHVzaCh0aGlzLnJvd0RhdGFbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFwaT8uYXBwbHlUcmFuc2FjdGlvbih7IHJlbW92ZTogcm93c1RvUmVtb3ZlIH0pO1xyXG4gICAgICAgIHRoaXMuYXBpPy5yZWRyYXdSb3dzKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLnN1YnMucHVzaCh0aGlzLmFwcEVudmlyb25tZW50Lm9uRGVsZXRlQ29tcGxldGUkLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgIGlmIChldmVudD8uc3VjY2Vzc2Z1bCAmJiBldmVudC5lbnRpdGllcyAmJiBldmVudC5lbnRpdGllcy5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgcm93c1RvUmVtb3ZlOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMucm93RGF0YS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgZm9yIChsZXQgaiA9IGV2ZW50LmVudGl0aWVzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJvd0RhdGFbaV0uJGVudGl0eSA9PT0gZXZlbnQuZW50aXRpZXNbal0pXHJcbiAgICAgICAgICAgICAgcm93c1RvUmVtb3ZlLnB1c2godGhpcy5yb3dEYXRhW2ldKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hcGk/LmFwcGx5VHJhbnNhY3Rpb24oeyByZW1vdmU6IHJvd3NUb1JlbW92ZSB9KTtcclxuICAgICAgICB0aGlzLmFwaT8ucmVkcmF3Um93cygpO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLnN1YnMucHVzaCh0aGlzLnNlYXJjaFZpZXdFdmVudEhhbmRsZXIub25TZWFyY2goKS5waXBlKHNraXAoMSkpLnN1YnNjcmliZSgoc2V0dXBRdWVyeTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMub25TZWFyY2goc2V0dXBRdWVyeSk7XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLnN1YnMucHVzaCh0aGlzLmNvbmZpZy52aWV3Lm9uQWN0aXZlKCkucGlwZShza2lwKDEpKS5zdWJzY3JpYmUoKGlzQWN0aXZlOiBib29sZWFuKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNBY3RpdmUgPSBpc0FjdGl2ZTtcclxuICAgICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcclxuICAgICAgICB0aGlzLmNvbmZpZy52aWV3TWVudUNvbmZpZy5tZW51SXRlbXNFbmFibGVkID0gKCkgPT4geyByZXR1cm4gdGhpcy5yb3dEYXRhLmxlbmd0aDsgfTtcclxuICAgICAgICB0aGlzLmNvbmZpZy52aWV3TWVudUNvbmZpZy5hY3Rpb25SZWZzID0gdGhpcy5nZXRSZWZzKCk7XHJcbiAgICAgICAgdGhpcy5hcGkucmVmcmVzaENlbGxzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICAgIGlmICh0aGlzLnRhYkdyb3VwRXZlbnROb3RpZmllciAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnN1YnMucHVzaCh0aGlzLnRhYkdyb3VwRXZlbnROb3RpZmllci5vbkFjdGl2ZVN0YXRlQ2hhbmdlZCgpLnBpcGUoc2tpcCgxKSkuc3Vic2NyaWJlKChpc0FjdGl2ZTogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIHRoaXMucnVuU2VhcmNoKCk7XHJcbiAgICAgIH0pKTtcclxuICAgIH1cclxuICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMuY29ubmVjdGlvbkh1Yi5zdWJzY3JpYmUoXHJcbiAgICAgIHRoaXMuZGF0YUNvbnRleHQsXHJcbiAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlUeXBlLFxyXG4gICAgICB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5VHlwZS5uYW1lLFxyXG4gICAgICB0aGlzLmFkZEVudGl0eSxcclxuICAgICAgdGhpcy5nZXRSb3dEYXRhLFxyXG4gICAgICAoKSA9PiB7IHJldHVybiB0aGlzLmxhdGVzdFNldHVwUXVlcnkgfSxcclxuICAgICAgdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmV4cGFuZHMsXHJcbiAgICAgIFtdLFxyXG4gICAgICAoKSA9PiB7IHJldHVybiB0cnVlOyB9KS5zdWJzY3JpYmUoKGRhdGFDaGFuZ2U6IFRydURhdGFDaGFuZ2UpID0+IHtcclxuICAgICAgICB0aGlzLmFwaS5yZWZyZXNoQ2VsbHMoeyBmb3JjZTogdHJ1ZSB9KTtcclxuICAgICAgfSkpO1xyXG5cclxuICAgIHRoaXMuc3Vicy5wdXNoKGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleWRvd24nKS5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmNvbmZpZy52aWV3LmFjdGl2ZSkge1xyXG4gICAgICAgIGxldCBrZXlTZXF1ZW5jZSA9IHRoaXMudXRpbC5nZXRLZXlTZXF1ZW5jZShldmVudCk7XHJcbiAgICAgICAgaWYgKGtleVNlcXVlbmNlID09PSAnY3RybCtpJyB8fCBrZXlTZXF1ZW5jZSA9PT0gJ21ldGEraScpIHsgXHJcbiAgICAgICAgICB0aGlzLm9uQWRkKCk7XHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdjdHJsK2QnIHx8IGtleVNlcXVlbmNlID09PSAnbWV0YStkJykgeyBcclxuICAgICAgICAgIHRoaXMub25EZWxldGUoKTtcclxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChrZXlTZXF1ZW5jZSA9PT0gJ2N0cmwraycgfHwga2V5U2VxdWVuY2UgPT09ICdtZXRhK2snKSB7IFxyXG4gICAgICAgICAgdGhpcy5vbktlZXAoKTtcclxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChrZXlTZXF1ZW5jZSA9PT0gJ2N0cmwrcicgfHwga2V5U2VxdWVuY2UgPT09ICdtZXRhK3InKSB7XHJcbiAgICAgICAgICB0aGlzLm9uUmVtb3ZlKCk7XHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdGFyZ2V0SXNDb250cm9sID0gdGhpcy51dGlsLnRhcmdldElzQ29udHJvbChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xyXG4gICAgICAgIGlmICghdGFyZ2V0SXNDb250cm9sICYmIGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5KVxyXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSZWZzID0gKCk6IHN0cmluZyA9PiB7XHJcbiAgICBsZXQgcm93Tm9kZXM6IGFueSA9IFtdO1xyXG4gICAgdGhpcy5hcGk/LmZvckVhY2hOb2RlKChyb3dOb2RlOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgcm93Tm9kZXMucHVzaChyb3dOb2RlKTtcclxuICAgIH0pO1xyXG4gICAgbGV0IHJlZnMgPSBfLm1hcChyb3dOb2RlcywgKHJvd05vZGUpID0+IHsgcmV0dXJuIHJvd05vZGUuZGF0YS4kZW50aXR5W3RoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlUeXBlLm5hbWUgKyAnUmVmJ107IH0pO1xyXG4gICAgcmV0dXJuIHJlZnMuam9pbignLCcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSb3dEYXRhID0gKCkgPT4ge1xyXG4gICAgbGV0IGRhdGE6IGFueSA9IFtdO1xyXG4gICAgdGhpcy5hcGk/LmZvckVhY2hOb2RlKChyb3dOb2RlOiBhbnkpID0+IHtcclxuICAgICAgZGF0YS5wdXNoKHJvd05vZGUuZGF0YS4kZW50aXR5KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfSBcclxuXHJcbiAgcHJpdmF0ZSBsb2FkR3JpZERhdGEgPSAoZW50aXRpZXM6IEFycmF5PGFueT4pID0+IHtcclxuICAgIHRoaXMucm93RGF0YSA9IGVudGl0aWVzLm1hcCh0aGlzLmVuaGFuY2VSb3dEYXRhRm9yRW50aXR5LCBlbnRpdGllcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRNYW55VG9NYW55R3JpZERhdGEgPSAoYXNzb2NpYXRlZEVudGl0aWVzOiBBcnJheTxhbnk+LCBhc3NvY2lhdGFibGVFbnRpdGllczogQXJyYXk8YW55PiwgaW5pdGFsTG9hZDogYm9vbGVhbikgPT4ge1xyXG4gICAgaWYgKGluaXRhbExvYWQpXHJcbiAgICAgIHRoaXMucm93RGF0YSA9IGFzc29jaWF0ZWRFbnRpdGllcy5tYXAodGhpcy5lbmhhbmNlUm93RGF0YUZvckVudGl0eSwgYXNzb2NpYXRlZEVudGl0aWVzKTtcclxuICAgIGVsc2VcclxuICAgICAgYXNzb2NpYXRlZEVudGl0aWVzID0gdGhpcy5yb3dEYXRhLm1hcCgoZTogYW55KSA9PiB7IHJldHVybiBlLiRlbnRpdHkgfSk7XHJcbiAgICBsZXQgYXNzb2NpYXRhYmxlVHlwZU5hbWUgPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5TWFueVRvTWFueVR5cGUubmFtZVxyXG4gICAgbGV0IGFzc29jaWF0YWJsZVR5cGVOYW1lV2l0aFByZWZpeCA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlNYW55VG9NYW55VHlwZU5hbWVXaXRoUHJlZml4XHJcbiAgICBsZXQgYXNzb2NpYXRlZE1hcE9mQXNzb2NpYXRhYmxlID0gXy5tYXAoYXNzb2NpYXRlZEVudGl0aWVzLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZVsnbycgKyBhc3NvY2lhdGFibGVUeXBlTmFtZVdpdGhQcmVmaXhdOyB9KTtcclxuICAgIHRoaXMudW5hc3NvY2lhdGVkQ2hvaWNlcyA9IGFzc29jaWF0YWJsZUVudGl0aWVzLmZpbHRlcihvYmplY3QxID0+IHtcclxuICAgICAgcmV0dXJuICFhc3NvY2lhdGVkTWFwT2ZBc3NvY2lhdGFibGUuc29tZShvYmplY3QyID0+IHsgcmV0dXJuIG9iamVjdDEudmFsdWUuJCA9PT0gb2JqZWN0Mlthc3NvY2lhdGFibGVUeXBlTmFtZSArICdSZWYnXTsgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwb3J0RGF0YSA9ICgpID0+IHtcclxuICAgIHRoaXMudWlOb3RpZmljYXRpb24uc2hvd0V4cG9ydERpYWxvZygpLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAoIXJlc3VsdCkgcmV0dXJuO1xyXG4gICAgICBsZXQgZXhwb3J0R3JpZFNwZWM7XHJcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5VHlwZSlcclxuICAgICAgICBleHBvcnRHcmlkU3BlYyA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5uYW1lO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgZXhwb3J0R3JpZFNwZWMgPSAnJGN1c3RvbT0nICsgMTtcclxuXHJcbiAgICAgIHRoaXMuZGF0YUNvbnRleHRcclxuICAgICAgICAuZW50aXR5QWNjZXNzKClcclxuICAgICAgICAuZXhwb3J0KHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlUeXBlLCBleHBvcnRHcmlkU3BlYywgdGhpcy5sYXRlc3RTZXR1cFF1ZXJ5LCB0aGlzLmdldFJlZnMoKSwgcmVzdWx0KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblN1cHByZXNzS2V5Ym9hcmRFdmVudCA9IChwYXJhbXM6IFN1cHByZXNzS2V5Ym9hcmRFdmVudFBhcmFtcyk6IGJvb2xlYW4gPT4ge1xyXG4gICAgbGV0IGlzVGFiS2V5ID0gcGFyYW1zLmV2ZW50LmtleSA9PT0gJ1RhYic7XHJcbiAgICBsZXQgaXNBcnJvd0Rvd24gPSBwYXJhbXMuZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJztcclxuICAgIGxldCBpc0Fycm93VXAgPSBwYXJhbXMuZXZlbnQua2V5ID09PSAnQXJyb3dVcCc7XHJcbiAgICBsZXQgaXNBcnJvd0xlZnQgPSBwYXJhbXMuZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JztcclxuICAgIGxldCBpc0Fycm93UmlnaHQgPSBwYXJhbXMuZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCc7XHJcbiAgICBsZXQgaXNTaGlmdEtleSA9IHBhcmFtcy5ldmVudC5zaGlmdEtleTtcclxuICAgIGxldCBpc0FsdEtleSA9IHBhcmFtcy5ldmVudC5hbHRLZXk7XHJcblxyXG4gICAgbGV0IGZvY3VzZWRDZWxsID0gcGFyYW1zLmFwaS5nZXRGb2N1c2VkQ2VsbCgpO1xyXG4gICAgbGV0IGhhc0Nob2ljZXMgPSBwYXJhbXMuZGF0YVtwYXJhbXMuY29sdW1uLmdldENvbElkKCldICYmIHBhcmFtcy5kYXRhW3BhcmFtcy5jb2x1bW4uZ2V0Q29sSWQoKV0uY2hvaWNlcyA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICBpZiAocGFyYW1zLmNvbHVtbi5pc1Bpbm5lZCgpKSB7XHJcbiAgICAgIGlmIChpc1RhYktleSAmJiAhaXNTaGlmdEtleSlcclxuICAgICAgICBwYXJhbXMuYXBpLnRhYlRvTmV4dENlbGwoKTtcclxuICAgICAgZWxzZSBpZiAoaXNUYWJLZXkgJiYgaXNTaGlmdEtleSlcclxuICAgICAgICBwYXJhbXMuYXBpLnRhYlRvUHJldmlvdXNDZWxsKCk7XHJcbiAgICAgIGVsc2UgaWYgKGlzQXJyb3dMZWZ0KVxyXG4gICAgICAgIHBhcmFtcy5hcGkudGFiVG9QcmV2aW91c0NlbGwoKTtcclxuICAgICAgZWxzZSBpZiAoaXNBcnJvd1JpZ2h0KVxyXG4gICAgICAgIHBhcmFtcy5hcGkudGFiVG9OZXh0Q2VsbCgpO1xyXG4gICAgICB0aGlzLmFwaS5zdG9wRWRpdGluZygpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhhc0Nob2ljZXMgJiYgaXNBbHRLZXkgJiYgKGlzQXJyb3dEb3duIHx8IGlzQXJyb3dVcCkpIHtcclxuICAgICAgcGFyYW1zLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICBwYXJhbXMuYXBpLnN0YXJ0RWRpdGluZ0NlbGwoe1xyXG4gICAgICAgIHJvd0luZGV4OiBmb2N1c2VkQ2VsbD8ucm93SW5kZXggYXMgbnVtYmVyLFxyXG4gICAgICAgIGNvbEtleTogZm9jdXNlZENlbGw/LmNvbHVtbiBhcyBDb2x1bW4sXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIGFkZEVudGl0eSA9IChuZXdFbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgaWYgKHRoaXMuZW50aXR5KSB7XHJcbiAgICAgIGxldCBwYXJlbnROYW1lID0gdGhpcy5lbnRpdHkuY29uc3RydWN0b3IubmFtZTtcclxuICAgICAgbmV3RW50aXR5W3BhcmVudE5hbWUgKyAnUmVmJ10gPSB0aGlzLmVudGl0eVtwYXJlbnROYW1lICsgJ1JlZiddO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT09IFRydURhdGFHcmlkVHlwZXMuRGV0YWlsTWFueVRvTWFueSkge1xyXG4gICAgICBsZXQgcGFyZW50TmFtZSA9IHRoaXMuZW50aXR5LmNvbnN0cnVjdG9yLm5hbWU7XHJcbiAgICAgIGxldCB1bmFzc29jaWF0ZWRUeXBlID0gdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eU1hbnlUb01hbnlUeXBlO1xyXG4gICAgICBsZXQgcmVmID0gdGhpcy5zZWxlY3RlZFVuYXNzb2NpYXRlZENob2ljZS52YWx1ZS4kO1xyXG4gICAgICBsZXQgY2hpbGRUb0Fzc29jaWF0ZSA9IHRoaXMuZGF0YUNvbnRleHQuZW50aXR5QWNjZXNzKCkuc2VhcmNoQnlSZWZDYWNoZU9ubHkodW5hc3NvY2lhdGVkVHlwZSwgcmVmLCB0cnVlKVxyXG4gICAgICBpZiAoY2hpbGRUb0Fzc29jaWF0ZSkge1xyXG4gICAgICAgIGxldCBlbmhhbmNlZEVudGl0eSA9IHRoaXMuZW5oYW5jZVJvd0RhdGFGb3JFbnRpdHkobmV3RW50aXR5KTtcclxuICAgICAgICBlbmhhbmNlZEVudGl0eS4kZW50aXR5W3VuYXNzb2NpYXRlZFR5cGUubmFtZSArICdSZWYnXSA9IGNoaWxkVG9Bc3NvY2lhdGVbdW5hc3NvY2lhdGVkVHlwZS5uYW1lICsgJ1JlZiddO1xyXG4gICAgICAgIGVuaGFuY2VkRW50aXR5LiRlbnRpdHlbcGFyZW50TmFtZSArICdSZWYnXSA9IHRoaXMuZW50aXR5W3BhcmVudE5hbWUgKyAnUmVmJ107XHJcbiAgICAgICAgLy8gcmVtb3ZlIGl0ZW0gZnJvbSB0aGUgYWRkIGRyb3Bkb3duIGNvbnRyb2xcclxuICAgICAgICBsZXQgaXRlbUluZGV4ID0gdGhpcy51bmFzc29jaWF0ZWRDaG9pY2VzLmZpbmRJbmRleCgoY2hvaWNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gY2hvaWNlW3VuYXNzb2NpYXRlZFR5cGUubmFtZSArICdSZWYnXSA9PT0gY2hpbGRUb0Fzc29jaWF0ZVt1bmFzc29jaWF0ZWRUeXBlLm5hbWUgKyAnUmVmJ107XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy51bmFzc29jaWF0ZWRDaG9pY2VzLnNwbGljZShpdGVtSW5kZXgsIDEpO1xyXG4gICAgICAgIC8vIGNsZWFyIGFkZCBzZWxlY3Rpb25cclxuICAgICAgICB0aGlzLnNlbGVjdGVkVW5hc3NvY2lhdGVkQ2hvaWNlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIC8vIGFkZCByb3cgdG8gZ3JpZFxyXG4gICAgICAgIHRoaXMudW5zYXZlZEVudGl0aWVzLnB1c2goZW5oYW5jZWRFbnRpdHkpO1xyXG4gICAgICAgIHRoaXMuYXBpLmFwcGx5VHJhbnNhY3Rpb24oeyBhZGQ6IFtlbmhhbmNlZEVudGl0eV0sIGFkZEluZGV4OiAwIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgZW5oYW5jZWRFbnRpdHkgPSB0aGlzLmVuaGFuY2VSb3dEYXRhRm9yRW50aXR5KG5ld0VudGl0eSk7XHJcbiAgICAgIHRoaXMucm93RGF0YS51bnNoaWZ0KGVuaGFuY2VkRW50aXR5KTtcclxuICAgICAgdGhpcy5hcGkuYXBwbHlUcmFuc2FjdGlvbih7IGFkZDogW2VuaGFuY2VkRW50aXR5XSwgYWRkSW5kZXg6IDAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1lcmdlRGF0YSA9IChjb25maWc6IFRydUxpc3RDb250cm9sQ29uZmlnQmFzZTxhbnk+LCBlbnRpdHlUb1ZhbGlkYXRlOiBhbnkpOiBUcnVNZXJnZURhdGFTZXQgfCBudWxsID0+IHtcclxuICAgIGlmIChjb25maWcucHJvcGVydHlQYXRoPy5pbmNsdWRlcygnLycpKSB7XHJcbiAgICAgIGxldCBwcm9wZXJ0eU5hbWVQYXJ0cyA9IGNvbmZpZy5wcm9wZXJ0eVBhdGguc3BsaXQoJy8nKTtcclxuICAgICAgcHJvcGVydHlOYW1lUGFydHMucG9wKCk7XHJcbiAgICAgIGxldCB0YXJnZXRQcm9wZXJ0eTogYW55O1xyXG4gICAgICBwcm9wZXJ0eU5hbWVQYXJ0cy5mb3JFYWNoKChuYW1lKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0YXJnZXRQcm9wZXJ0eSkge1xyXG4gICAgICAgICAgbGV0IHRhcmdldFByb3BlcnR5TmFtZSA9ICdvJyArIG5hbWUgYXMga2V5b2YgdHlwZW9mIGVudGl0eVRvVmFsaWRhdGU7XHJcbiAgICAgICAgICB0YXJnZXRQcm9wZXJ0eSA9IGVudGl0eVRvVmFsaWRhdGVbdGFyZ2V0UHJvcGVydHlOYW1lXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHRhcmdldFByb3BlcnR5TmFtZSA9ICdvJyArIG5hbWUgYXMga2V5b2YgdHlwZW9mIGVudGl0eVRvVmFsaWRhdGU7XHJcbiAgICAgICAgICB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFByb3BlcnR5W3RhcmdldFByb3BlcnR5TmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5Lk1lcmdlX0RhdGEpIHtcclxuICAgICAgICByZXR1cm4gdGFyZ2V0UHJvcGVydHkuTWVyZ2VfRGF0YV9TZXQ7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZW50aXR5VG9WYWxpZGF0ZS5NZXJnZV9EYXRhX1NldD8uZ2V0KGNvbmZpZy5wcm9wZXJ0eU5hbWUgYXMgc3RyaW5nKSA/IGVudGl0eVRvVmFsaWRhdGUuTWVyZ2VfRGF0YV9TZXQgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRpb25EaWFsb2c6IENvbXBvbmVudFJlZjxUcnVHcmlkVmFsaWRhdGlvbkRpYWxvZz4gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGFkZFZhbGlkYXRpb25EaWFsb2cgPSAoY29uZmlnOiBUcnVHcmlkVmFsaWRhdGlvbkRpYWxvZ0NvbmZpZywgaG9zdEVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgbGV0IHRhcmdldCA9IGhvc3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kaWFsb2ctdGFyZ2V0JylbMF07XHJcbiAgICBsZXQgZGlhbG9nRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgZGlhbG9nRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpbnZhbGlkJyk7XHJcbiAgICB0YXJnZXQuYXBwZW5kQ2hpbGQoZGlhbG9nRWxlbWVudCk7XHJcbiAgICBsZXQgY29tcG9uZW50UmVmID0gY3JlYXRlQ29tcG9uZW50PFRydUdyaWRWYWxpZGF0aW9uRGlhbG9nPihUcnVHcmlkVmFsaWRhdGlvbkRpYWxvZywge1xyXG4gICAgICBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmFwcC5pbmplY3RvcixcclxuICAgICAgaG9zdEVsZW1lbnQ6IGRpYWxvZ0VsZW1lbnQsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY29uZmlnID0gY29uZmlnO1xyXG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmNsb3NlLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYXBpLnJlZnJlc2hDZWxscyh7IGZvcmNlOiB0cnVlIH0pO1xyXG4gICAgICBjb21wb25lbnRSZWYuZGVzdHJveSgpXHJcbiAgICB9KTtcclxuICAgIHRoaXMudmFsaWRhdGlvbkRpYWxvZyA9IGNvbXBvbmVudFJlZjtcclxuICAgIHRoaXMuYXBwLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcclxuICAgIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHdhaXRGb3JHcmlkQXBpID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XHJcbiAgICB2YXIgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmFwaSkge1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xyXG4gICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJ1blNlYXJjaCA9IGFzeW5jICgpID0+IHtcclxuICAgIHRoaXMud2FpdEZvckdyaWRBcGkoKCkgPT4ge1xyXG4gICAgICBsZXQgY29udGFpbmVySXNBY3RpdmUgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy50YWJHcm91cEV2ZW50Tm90aWZpZXIgIT09IG51bGwpXHJcbiAgICAgICAgY29udGFpbmVySXNBY3RpdmUgPSB0aGlzLnRhYkdyb3VwRXZlbnROb3RpZmllci5pc0FjdGl2ZTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGNvbnRhaW5lcklzQWN0aXZlID0gdHJ1ZTtcclxuXHJcbiAgICAgIGlmICgoXHJcbiAgICAgICAgdGhpcy5ncmlkVHlwZSA9PT0gVHJ1RGF0YUdyaWRUeXBlcy5EZXRhaWwgfHxcclxuICAgICAgICB0aGlzLmdyaWRUeXBlID09PSBUcnVEYXRhR3JpZFR5cGVzLkRldGFpbE1hbnlUb01hbnkgfHxcclxuICAgICAgICB0aGlzLmNvbmZpZy5ub1F1ZXJ5KSAmJlxyXG4gICAgICAgIGNvbnRhaW5lcklzQWN0aXZlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLm5vUXVlcnkpXHJcbiAgICAgICAgICB0aGlzLm9uU2VhcmNoKG51bGwpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMub25TZWFyY2godGhpcy5jb25maWcucmVzdWx0Q29uZmlnLnNldHVwUXVlcnkodGhpcy5lbnRpdHkpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFByb3BlcnR5UGF0aFBhcnRzID0gKHByb3BlcnR5UGF0aDogc3RyaW5nKSA9PiB7XHJcbiAgICBsZXQgbGFzdEluZGV4ID0gcHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKCcuJyk7XHJcbiAgICBwcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eVBhdGguc2xpY2UoMCwgbGFzdEluZGV4KTtcclxuICAgIHJldHVybiBwcm9wZXJ0eVBhdGguc3BsaXQoJy4nKTtcclxuICB9XHJcblxyXG4gIGRlZmF1bHRDb2xEZWY6IENvbERlZiA9IHtcclxuICAgIHN1cHByZXNzS2V5Ym9hcmRFdmVudDogdGhpcy5vblN1cHByZXNzS2V5Ym9hcmRFdmVudFxyXG4gIH07XHJcblxyXG4gIGdldFJvd0NvdW50ID0gKCkgPT4ge1xyXG4gICAgbGV0IGNvdW50ID0gMDtcclxuICAgIHRoaXMuYXBpPy5mb3JFYWNoTm9kZUFmdGVyRmlsdGVyKCgpID0+IGNvdW50KyspO1xyXG4gICAgcmV0dXJuICdSb3dzOiAnICsgY291bnQ7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZFJvd0NvdW50ID0gKCkgPT4ge1xyXG4gICAgbGV0IGNvdW50ID0gMDtcclxuICAgIGNvdW50ID0gdGhpcy5hcGk/LmdldFNlbGVjdGVkUm93cygpLmxlbmd0aDtcclxuICAgIHJldHVybiAnU2VsZWN0ZWQ6ICcgKyBjb3VudDtcclxuICB9XHJcblxyXG4gIG9uUm93RGF0YUNoYW5nZWQgPSAoZGF0YTogYW55KSA9PiB7XHJcbiAgICBpZiAodGhpcy5yb3dEYXRhID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2V0Tm9Sb3dzVGVtcGxhdGUoKTtcclxuICAgICAgdGhpcy5hcGkuc2hvd05vUm93c092ZXJsYXkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2VsbENsaWNrZWQgPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgaWYgKCFldmVudC5jb2x1bW4uY29sRGVmLnBpbm5lZCkge1xyXG4gICAgICB0aGlzLmFwaS5kZXNlbGVjdEFsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DZWxsRG91YmxlQ2xpY2tlZCA9IChncmlkQ29uZmlnOiBhbnkpID0+IHtcclxuICAgIGlmIChncmlkQ29uZmlnLmNvbERlZi5jZWxsQ2xhc3MgPT09ICdhZy1way1hbGlnbmVkLWNlbGwnKVxyXG4gICAgICB0aGlzLmNvbmZpZy5yb3dIZWFkZXJEb3VibGVDbGlja2VkKGdyaWRDb25maWcpO1xyXG4gIH1cclxuXHJcbiAgb25DZWxsS2V5RG93biA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICBpZiAoIWV2ZW50LmV2ZW50KSByZXR1cm47XHJcbiAgICBjb25zdCBrZXkgPSAoZXZlbnQuZXZlbnQgYXMgdW5rbm93bikgYXMgS2V5Ym9hcmRFdmVudDtcclxuICAgIGlmIChrZXkuY29kZSA9PT0gJ1NwYWNlJykge1xyXG4gICAgICBrZXkucHJldmVudERlZmF1bHQoKTtcclxuICAgICAga2V5LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB0aGlzLmFwaT8uc3RhcnRFZGl0aW5nQ2VsbCh7XHJcbiAgICAgICAgcm93SW5kZXg6IGV2ZW50LnJvd0luZGV4LFxyXG4gICAgICAgIGNvbEtleTogZXZlbnQuY29sdW1uLmdldENvbElkKCksXHJcbiAgICAgICAga2V5OiBrZXkuY29kZVxyXG4gICAgICB9KTtcclxuICAgIH0gXHJcbiAgfVxyXG5cclxuICBvbkNlbGxNb3VzZU92ZXIoZTogYW55KSB7XHJcbiAgICBpZiAoZS5kYXRhLiRlbnRpdHkuZW50aXR5QXNwZWN0Lmhhc1ZhbGlkYXRpb25FcnJvcnMpIHtcclxuICAgICAgbGV0IHRhcmdldEVsZW1lbnQgPSBlLmV2ZW50LnRhcmdldDtcclxuICAgICAgaWYgKCF0YXJnZXRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnYWctY2VsbCcpKVxyXG4gICAgICAgIHRhcmdldEVsZW1lbnQgPSB0YXJnZXRFbGVtZW50LmNsb3Nlc3QoJy5hZy1jZWxsJyk7XHJcbiAgICAgIGlmICh0YXJnZXRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnaW52YWxpZCcpKSB7XHJcbiAgICAgICAgbGV0IGZpZWxkTmFtZSA9IGUuY29sRGVmLmZpZWxkO1xyXG4gICAgICAgIGxldCBwcm9wZXJ0eUNvbmZpZyA9IGUuZGF0YVtmaWVsZE5hbWVdO1xyXG5cclxuICAgICAgICBsZXQgcHJvcGVydHlQYXRoUGFydHM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgaWYgKHByb3BlcnR5Q29uZmlnLnByb3BlcnR5UGF0aC5pbmNsdWRlcygnLicpKSB7XHJcbiAgICAgICAgICBwcm9wZXJ0eVBhdGhQYXJ0cyA9IHRoaXMuZ2V0UHJvcGVydHlQYXRoUGFydHMocHJvcGVydHlDb25maWcucHJvcGVydHlQYXRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBlbnRpdHlUb1ZhbGlkYXRlID0gcHJvcGVydHlQYXRoUGFydHMubGVuZ3RoID8gcHJvcGVydHlQYXRoUGFydHMucmVkdWNlKChwOiBhbnksIGM6IGFueSkgPT4gcCAmJiBwW2NdIHx8IG51bGwsIGUuZGF0YS4kZW50aXR5KSA6IGUuZGF0YS4kZW50aXR5O1xyXG4gICAgICAgIGxldCB2YWxpZGF0aW9uRXJyb3JzRm9yUHJvcGVydHkgPSB0aGlzLmRhdGFDb250ZXh0LmdldFZhbGlkYXRpb25FcnJvcnNGb3JQcm9wZXJ0eShlbnRpdHlUb1ZhbGlkYXRlLCBwcm9wZXJ0eUNvbmZpZy5wcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgIGxldCB2YWxpZGF0aW9uRXJyb3JzTWVzc2FnZXNGb3JQcm9wZXJ0eSA9IHRoaXMuZGF0YUNvbnRleHQucGFyc2VFcnJvck1lc3NhZ2VzKHZhbGlkYXRpb25FcnJvcnNGb3JQcm9wZXJ0eSk7XHJcblxyXG4gICAgICAgIGxldCB2YWxpZGF0aW9uRGlhbG9nQ29uZmlnID0gbmV3IFRydUdyaWRWYWxpZGF0aW9uRGlhbG9nQ29uZmlnKGVudGl0eVRvVmFsaWRhdGUsIHByb3BlcnR5Q29uZmlnLCBmYWxzZSk7XHJcbiAgICAgICAgdmFsaWRhdGlvbkRpYWxvZ0NvbmZpZy5lcnJvck1zZyA9IHZhbGlkYXRpb25FcnJvcnNNZXNzYWdlc0ZvclByb3BlcnR5O1xyXG4gICAgICAgIHZhbGlkYXRpb25EaWFsb2dDb25maWcubWVyZ2VEYXRhID0gdGhpcy5nZXRNZXJnZURhdGEocHJvcGVydHlDb25maWcsIGVudGl0eVRvVmFsaWRhdGUpO1xyXG4gICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbkRpYWxvZyh2YWxpZGF0aW9uRGlhbG9nQ29uZmlnLCB0YXJnZXRFbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMudmFsaWRhdGlvbkRpYWxvZylcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25EaWFsb2cuZGVzdHJveSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DZWxsTW91c2VPdXQoZTogYW55KSB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0aW9uRGlhbG9nKVxyXG4gICAgICB0aGlzLnZhbGlkYXRpb25EaWFsb2cuZGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2ggPSAoc2V0dXBRdWVyeTogYW55KSA9PiB7XHJcbiAgICB0aGlzLmZpcnN0U2VhcmNoUmFuID0gdHJ1ZTtcclxuICAgIHRoaXMuYXBpLmhpZGVPdmVybGF5KCk7XHJcbiAgICB0aGlzLmFwaS5zaG93TG9hZGluZ092ZXJsYXkoKTtcclxuXHJcbiAgICBsZXQgZW50aXR5TG9hZGVkID0gdGhpcy5lbnRpdHlbJ1JlZiddIDwgMCB8fCB0aGlzLmxvYWRlZEVudGl0aWVzLnNvbWUoKHJlZikgPT4ge1xyXG4gICAgICByZXR1cm4gcmVmID09PSB0aGlzLmVudGl0eVsnUmVmJ11cclxuICAgIH0pO1xyXG4gICAgbGV0IGpvaW5zID0gW107XHJcbiAgICBpZiAoZW50aXR5TG9hZGVkKSB7XHJcbiAgICAgIGpvaW5zLnB1c2godGhpcy5kYXRhQ29udGV4dC5lbnRpdHlBY2Nlc3MoKS5zZWFyY2hDYWNoZU9ubHkoXHJcbiAgICAgICAgdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eVR5cGUsXHJcbiAgICAgICAgc2V0dXBRdWVyeSxcclxuICAgICAgICB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZXhwYW5kcykpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT09IFRydURhdGFHcmlkVHlwZXMuRGV0YWlsTWFueVRvTWFueSAmJiB0aGlzLmNvbmZpZy50YWJsZUNvbmZpZy5jYW5BZGQpXHJcbiAgICAgICAgam9pbnMucHVzaCh0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLnNlYXJjaFF1ZXJ5Q2hvaWNlcyhcclxuICAgICAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5lbnRpdHlNYW55VG9NYW55VHlwZSxcclxuICAgICAgICAgIHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5tYW55VG9NYW55U2V0dXBRdWVyeSh0aGlzLmVudGl0eSksIGZhbHNlKSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGpvaW5zLnB1c2godGhpcy5kYXRhQ29udGV4dC5lbnRpdHlBY2Nlc3MoKS5zZWFyY2goXHJcbiAgICAgICAgdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eVR5cGUsXHJcbiAgICAgICAgc2V0dXBRdWVyeSxcclxuICAgICAgICB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZXhwYW5kcywgZmFsc2UpKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmdyaWRUeXBlID09PSBUcnVEYXRhR3JpZFR5cGVzLkRldGFpbE1hbnlUb01hbnkgJiYgdGhpcy5jb25maWcudGFibGVDb25maWcuY2FuQWRkKVxyXG4gICAgICAgIGpvaW5zLnB1c2godGhpcy5kYXRhQ29udGV4dC5lbnRpdHlBY2Nlc3MoKS5zZWFyY2hRdWVyeUNob2ljZXMoXHJcbiAgICAgICAgICB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuZW50aXR5TWFueVRvTWFueVR5cGUsXHJcbiAgICAgICAgICB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcubWFueVRvTWFueVNldHVwUXVlcnkodGhpcy5lbnRpdHkpLCB0cnVlKSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxhdGVzdFNldHVwUXVlcnkgPSBzZXR1cFF1ZXJ5O1xyXG5cclxuICAgIGZvcmtKb2luKGpvaW5zKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiByZXN1bHRzID0+IHtcclxuICAgICAgICB0aGlzLnNldE5vUm93c1RlbXBsYXRlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT09IFRydURhdGFHcmlkVHlwZXMuRGV0YWlsTWFueVRvTWFueSlcclxuICAgICAgICAgIHRoaXMubG9hZE1hbnlUb01hbnlHcmlkRGF0YShyZXN1bHRzWzBdLCByZXN1bHRzWzFdLCB0cnVlKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aGlzLmxvYWRHcmlkRGF0YShyZXN1bHRzWzBdKTtcclxuICAgICAgfSxcclxuICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkVHlwZSAhPT0gVHJ1RGF0YUdyaWRUeXBlcy5TZWFyY2gpXHJcbiAgICAgICAgICB0aGlzLmxvYWRlZEVudGl0aWVzLnB1c2godGhpcy5lbnRpdHlbdGhpcy5lbnRpdHkuY29uc3RydWN0b3IubmFtZSArICdSZWYnXSk7XHJcbiAgICAgICAgdGhpcy5hcGkuaGlkZU92ZXJsYXkoKTtcclxuICAgICAgICBpZiAodGhpcy5yb3dEYXRhID09PSBudWxsIHx8ICF0aGlzLnJvd0RhdGEubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLmFwaS5zaG93Tm9Sb3dzT3ZlcmxheSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblVuYXNzb2NpYXRlZENob2ljZUNoYW5nZWQgPSAob3B0aW9uOiBBcnJheTxJVHJ1VG9vbGJhckRyb3Bkb3duT3B0aW9uPiB8IG51bGwpID0+IHt9XHJcbiAgb25TZWxlY3RlZFJlcG9ydENoYW5nZWQgPSAoZXZlbnQ6IGFueSkgPT4ge31cclxuXHJcbiAgY2FuQWRkID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy50YWJsZUNvbmZpZy5jYW5BZGQpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLmdyaWRUeXBlID09PSBUcnVEYXRhR3JpZFR5cGVzLkRldGFpbE1hbnlUb01hbnkpXHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVW5hc3NvY2lhdGVkQ2hvaWNlICE9PSB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG9uQWRkID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgdGhpcy5hZGRFbnRpdHkodGhpcy5kYXRhQ29udGV4dC5lbnRpdHlBY2Nlc3MoKS5hZGQodGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmVudGl0eVR5cGUpKTtcclxuICB9XHJcblxyXG4gIG9uRGVsZXRlID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgbGV0IHNlbGVjdGVkUm93cyA9IHRoaXMuYXBpLmdldFNlbGVjdGVkUm93cygpO1xyXG4gICAgaWYgKHNlbGVjdGVkUm93cy5sZW5ndGgpIHtcclxuICAgICAgbGV0IGVudGl0aWVzID0gc2VsZWN0ZWRSb3dzLm1hcChmdW5jdGlvbiAocm93OiBhbnkpIHsgcmV0dXJuIHJvdy4kZW50aXR5OyB9KTtcclxuICAgICAgbGV0IGNvbmZpcm1Nc2cgPSB0aGlzLmFwcEVudmlyb25tZW50LmZvcm1hdERlbGV0ZUNvbmZpcm1hdGlvbk1lc3NhZ2UodGhpcy5jb25maWcudGFibGVOYW1lLCB0aGlzLmNvbmZpZy50YWJsZVBsdXJhbExhYmVsLCBzZWxlY3RlZFJvd3MubGVuZ3RoKTtcclxuICAgICAgbGV0IG9uU3VjY2VzcyA9ICgpID0+IHtcclxuICAgICAgICBsZXQgc2VsZWN0ZWRSb3dzID0gdGhpcy5hcGkuZ2V0U2VsZWN0ZWRSb3dzKCk7XHJcbiAgICAgICAgdGhpcy5hcGkuYXBwbHlUcmFuc2FjdGlvbih7IHJlbW92ZTogc2VsZWN0ZWRSb3dzIH0pO1xyXG4gICAgICAgIHRoaXMub25TZWFyY2godGhpcy5jb25maWcucmVzdWx0Q29uZmlnLnNldHVwUXVlcnkodGhpcy5lbnRpdHkpKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRhdGFDb250ZXh0LmRlbGV0ZShlbnRpdGllcywgY29uZmlybU1zZywgb25TdWNjZXNzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudWlOb3RpZmljYXRpb24ud2FybmluZyh0aGlzLmFwcEVudmlyb25tZW50Lm1zZ05vUmVjb3Jkc1NlbGVjdGVkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uS2VlcCA9ICgpOiB2b2lkID0+IHtcclxuICAgIGxldCBzZWxlY3RlZFJvd3MgPSB0aGlzLmFwaS5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICAgIGlmIChzZWxlY3RlZFJvd3MubGVuZ3RoKVxyXG4gICAgICB0aGlzLnJvd0RhdGEgPSB0aGlzLmFwaS5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICB9XHJcblxyXG4gIG9uUmVtb3ZlID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgbGV0IHNlbGVjdGVkUm93cyA9IHRoaXMuYXBpLmdldFNlbGVjdGVkUm93cygpO1xyXG4gICAgdGhpcy5hcGkuYXBwbHlUcmFuc2FjdGlvbih7IHJlbW92ZTogc2VsZWN0ZWRSb3dzIH0pO1xyXG4gICAgdGhpcy5hcGkuc2VsZWN0QWxsKCk7XHJcbiAgICBzZWxlY3RlZFJvd3MgPSB0aGlzLmFwaS5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICAgIGlmIChzZWxlY3RlZFJvd3MubGVuZ3RoKVxyXG4gICAgICB0aGlzLnJvd0RhdGEgPSB0aGlzLmFwaS5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5yb3dEYXRhID0gW107XHJcbiAgfVxyXG5cclxuICBvbkV4cG9ydCA9ICgpOiB2b2lkID0+IHtcclxuICAgIHRoaXMuZXhwb3J0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmliZVRvKCk7XHJcbiAgICB0aGlzLmxhYmVsID0gdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmxhYmVsOyBcclxuICAgIHRoaXMuY29sdW1uRGVmcyA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5jb2x1bW5EZWZzO1xyXG4gICAgdGhpcy5ncmlkVHlwZSA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5ncmlkVHlwZTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIC8vc2V0VGltZW91dCB0byBwcmV2ZW50OiBFUlJPUiBFcnJvcjogTkcwMTAwOiBFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yLiBcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnBhcmVudFRvb2xiYXJUZW1wbGF0ZSA9IHRoaXMuc2VhcmNoUmVzdWx0Vmlld01hbmFnZXIuc2VhcmNoVmlld1Rvb2xiYXJUZW1wbGF0ZTtcclxuICAgICAgdGhpcy5jb25maWcudmlld01lbnVDb25maWcubWVudUl0ZW1zRW5hYmxlZCA9ICgpID0+IHsgcmV0dXJuIHRoaXMucm93RGF0YS5sZW5ndGg7IH07XHJcbiAgICAgIHRoaXMuY29uZmlnLnZpZXdNZW51Q29uZmlnLmFsbE1lbnVzKCkuc3Vic2NyaWJlKChtZW51OiBhbnkpID0+IHsgdGhpcy52aWV3TWVudUl0ZW1zID0gbWVudTsgfSk7XHJcbiAgICAgIHRoaXMucnVuU2VhcmNoKCk7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHRoaXMucnVuU2VhcmNoKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vicy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBbbmdDbGFzc109XCJ7J3RydS1kYXRhLWdyaWQtbGFiZWwtb2Zmc2V0JzogbGFiZWx9XCI+XHJcbiAgPHNwYW4gY2xhc3M9XCJ0cnUtZGF0YS1ncmlkLWxhYmVsXCIgKm5nSWY9XCJsYWJlbFwiPnt7bGFiZWx9fTwvc3Bhbj5cclxuICA8ZGl2IGNsYXNzPVwidHJ1LWRhdGEtZ3JpZC10b29sYmFyLWNvbnRhaW5lclwiPlxyXG4gICAgPHRydS10b29sYmFyPlxyXG4gICAgICA8dHJ1LXRvb2xiYXItZHJvcGRvd24gW29wdGlvbnNdPVwidW5hc3NvY2lhdGVkQ2hvaWNlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkT3B0aW9uKV09XCJzZWxlY3RlZFVuYXNzb2NpYXRlZENob2ljZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXRoaXMuY29uZmlnLnRhYmxlQ29uZmlnLmNhbkFkZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uVW5hc3NvY2lhdGVkQ2hvaWNlQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JpZFR5cGUgPT0gVHJ1RGF0YUdyaWRUeXBlcy5EZXRhaWxNYW55VG9NYW55XCI+XHJcbiAgICAgIDwvdHJ1LXRvb2xiYXItZHJvcGRvd24+XHJcbiAgICAgIDx0cnUtdG9vbGJhci1idXR0b24gW2ljb25dPVwiJ3RydS10b29sYmFyLWFkZC1pY29uJ1wiIFt0b29sdGlwXT1cIidBZGQgLSBbQ3RybCArIEldJ1wiIFtkaXNhYmxlZF09XCIhY2FuQWRkKClcIiAob25DbGljayk9XCJvbkFkZCgpXCI+PC90cnUtdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDx0cnUtdG9vbGJhci1idXR0b24gW2ljb25dPVwiJ3RydS10b29sYmFyLWRlbGV0ZS1pY29uJ1wiIFt0b29sdGlwXT1cIidEZWxldGUgLSBbQ3RybCArIERdJ1wiIChjbGljayk9XCJvbkRlbGV0ZSgpXCI+PC90cnUtdG9vbGJhci1idXR0b24+XHJcbiAgICAgIDx0cnUtdG9vbGJhci1idXR0b24gW2ljb25dPVwiJ3RydS10b29sYmFyLWtlZXAtaWNvbidcIiBbdG9vbHRpcF09XCInS2VlcCBzZWxlY3RlZCByZWNvcmRzIC0gW0N0cmwgKyBLXSdcIiAoY2xpY2spPVwib25LZWVwKClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPHRydS10b29sYmFyLWJ1dHRvbiBbaWNvbl09XCIndHJ1LXRvb2xiYXItcmVtb3ZlLWljb24nXCIgW3Rvb2x0aXBdPVwiJ1JlbW92ZSBzZWxlY3RlZCByZWNvcmRzIC0gW0N0cmwgKyBSXSdcIiAoY2xpY2spPVwib25SZW1vdmUoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8dHJ1LXRvb2xiYXItc2VwYXJhdG9yICpuZ0lmPVwicGFyZW50VG9vbGJhclRlbXBsYXRlXCI+PC90cnUtdG9vbGJhci1zZXBhcmF0b3I+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYXJlbnRUb29sYmFyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPHRydS10b29sYmFyLXNlcGFyYXRvcj48L3RydS10b29sYmFyLXNlcGFyYXRvcj5cclxuICAgICAgPHRydS10b29sYmFyLWJ1dHRvbiBbaWNvbl09XCIndHJ1LXRvb2xiYXItZXhwb3J0LWljb24nXCIgW3Rvb2x0aXBdPVwiJ0V4cG9ydCdcIiAoY2xpY2spPVwib25FeHBvcnQoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8dHJ1LXRvb2xiYXItc2VwYXJhdG9yICpuZ0lmPVwidmlld01lbnVJdGVtcy5sZW5ndGhcIj48L3RydS10b29sYmFyLXNlcGFyYXRvcj5cclxuICAgICAgPGRpdiAqbmdJZj1cInZpZXdNZW51SXRlbXMubGVuZ3RoXCI+XHJcbiAgICAgICAgPHRydS10b29sYmFyLW1lbnUgKm5nRm9yPVwibGV0IHZpZXdNZW51SXRlbSBvZiB2aWV3TWVudUl0ZW1zXCIgW2NvbmZpZ109XCJ2aWV3TWVudUl0ZW1cIj48L3RydS10b29sYmFyLW1lbnU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC90cnUtdG9vbGJhcj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwidHJ1LWRhdGEtZ3JpZC1jb250YWluZXJcIj5cclxuICAgIDxhZy1ncmlkLWFuZ3VsYXIgY2xhc3M9XCJhZy10aGVtZS1hbHBpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbZ3JpZE9wdGlvbnNdPVwiZ3JpZE9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbcm93RGF0YV09XCJyb3dEYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbkRlZnNdPVwiY29sdW1uRGVmc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtkZWZhdWx0Q29sRGVmXT1cImRlZmF1bHRDb2xEZWZcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbaGVhZGVySGVpZ2h0XT1cIjI1XCJcclxuICAgICAgICAgICAgICAgICAgICAgW3Jvd0hlaWdodF09XCIyNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtyb3dCdWZmZXJdPVwiNTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbZW50ZXJOYXZpZ2F0ZXNWZXJ0aWNhbGx5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbZW50ZXJOYXZpZ2F0ZXNWZXJ0aWNhbGx5QWZ0ZXJFZGl0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbc3VwcHJlc3NSb3dIb3ZlckhpZ2hsaWdodF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3N0b3BFZGl0aW5nV2hlbkNlbGxzTG9zZUZvY3VzXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGNlbGxDbGlja2VkKT1cIm9uQ2VsbENsaWNrZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChjZWxsRG91YmxlQ2xpY2tlZCk9XCJvbkNlbGxEb3VibGVDbGlja2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoY2VsbEtleURvd24pPVwib25DZWxsS2V5RG93bigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgKHJvd0RhdGFDaGFuZ2VkKT1cIm9uUm93RGF0YUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChjZWxsTW91c2VPdmVyKT1cIm9uQ2VsbE1vdXNlT3ZlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGNlbGxNb3VzZU91dCk9XCJvbkNlbGxNb3VzZU91dCgkZXZlbnQpXCI+XHJcbiAgICA8L2FnLWdyaWQtYW5ndWxhcj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwidHJ1LWRhdGEtZ3JpZC1zdGF0dXNiYXItY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidHJ1LWRhdGEtZ3JpZC1zdGF0dXNiYXItdmFsdWVzLWNvbnRhaW5lclwiPlxyXG4gICAgICA8cCBjbGFzcz1cInRydS1kYXRhLWdyaWQtc3RhdHVzYmFyLXZhbHVlcy10ZXh0XCI+e3tnZXRSb3dDb3VudCgpfX08L3A+XHJcbiAgICAgIDxwIGNsYXNzPVwidHJ1LWRhdGEtZ3JpZC1zdGF0dXNiYXItdmFsdWVzLXRleHRcIj57e2dldFNlbGVjdGVkUm93Q291bnQoKX19PC9wPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=