@trudb/tru-common-lib 0.1.621 → 0.1.627
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.
|
@@ -25,6 +25,10 @@ export class TruCloneView extends TruViewBase {
|
|
|
25
25
|
modelTypeLookup;
|
|
26
26
|
modelNavigationPropertiesLookup;
|
|
27
27
|
uiNotification;
|
|
28
|
+
set ready(isReady) {
|
|
29
|
+
if (isReady)
|
|
30
|
+
this.done();
|
|
31
|
+
}
|
|
28
32
|
loading = true;
|
|
29
33
|
loadingMessage = 'Searching for related records...';
|
|
30
34
|
numberOfCopies;
|
|
@@ -233,8 +237,10 @@ export class TruCloneView extends TruViewBase {
|
|
|
233
237
|
this.windowEventHandler.close();
|
|
234
238
|
};
|
|
235
239
|
onExpandClicked = () => {
|
|
240
|
+
this.childFlatList.find((node) => { node.showEntities = true; });
|
|
236
241
|
};
|
|
237
242
|
onCollapseClicked = () => {
|
|
243
|
+
this.childFlatList.find((node) => { node.showEntities = false; });
|
|
238
244
|
};
|
|
239
245
|
onNumberOfCopiesChanged = (event) => {
|
|
240
246
|
};
|
|
@@ -252,11 +258,11 @@ export class TruCloneView extends TruViewBase {
|
|
|
252
258
|
this.childFlatList.length = 0;
|
|
253
259
|
}
|
|
254
260
|
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 });
|
|
255
|
-
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]=\"loading\" (onClick)=\"onExpandClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'collapse-icon'\" [tooltip]=\"'Collapse'\" [disabled]=\"loading\" (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]=\"loading\"\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\">\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\">\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()\">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-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:
|
|
261
|
+
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]=\"loading\" (onClick)=\"onExpandClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'collapse-icon'\" [tooltip]=\"'Collapse'\" [disabled]=\"loading\" (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]=\"loading\"\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\">\r\n <div *ngTemplateOutlet=\"groupNodeRenderer; context: {$implicit: data}\" [attr.ready]=\"last ? true : false\"></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\">\r\n <div *ngTemplateOutlet=\"groupNodeRenderer; context: {$implicit: data}\" [attr.ready]=\"last ? true : false\"></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()\">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"] }] });
|
|
256
262
|
}
|
|
257
263
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruCloneView, decorators: [{
|
|
258
264
|
type: Component,
|
|
259
|
-
args: [{ selector: 'tru-clone-view', template: "<div>\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'expand-icon'\" [tooltip]=\"'Expand'\" [disabled]=\"loading\" (onClick)=\"onExpandClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'collapse-icon'\" [tooltip]=\"'Collapse'\" [disabled]=\"loading\" (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]=\"loading\"\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\">\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\">\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()\">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-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:
|
|
265
|
+
args: [{ selector: 'tru-clone-view', template: "<div>\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'expand-icon'\" [tooltip]=\"'Expand'\" [disabled]=\"loading\" (onClick)=\"onExpandClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'collapse-icon'\" [tooltip]=\"'Collapse'\" [disabled]=\"loading\" (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]=\"loading\"\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\">\r\n <div *ngTemplateOutlet=\"groupNodeRenderer; context: {$implicit: data}\" [attr.ready]=\"last ? true : false\"></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\">\r\n <div *ngTemplateOutlet=\"groupNodeRenderer; context: {$implicit: data}\" [attr.ready]=\"last ? true : false\"></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()\">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"] }]
|
|
260
266
|
}], 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 }] });
|
|
261
267
|
class Node {
|
|
262
268
|
ref;
|
|
@@ -267,7 +273,7 @@ class Node {
|
|
|
267
273
|
childNodes;
|
|
268
274
|
showEntities = false;
|
|
269
275
|
pathFromRoot;
|
|
270
|
-
nodes;
|
|
276
|
+
nodes = [];
|
|
271
277
|
root;
|
|
272
278
|
parent;
|
|
273
279
|
entity;
|
|
@@ -325,4 +331,4 @@ class Node {
|
|
|
325
331
|
}
|
|
326
332
|
};
|
|
327
333
|
}
|
|
328
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWNsb25lLXZpZXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cnUtY29tbW9uLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvY2xvbmUtdmlldy90cnUtY2xvbmUtdmlldy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9jbG9uZS12aWV3L3RydS1jbG9uZS12aWV3Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0I3RCxNQUFNLE9BQU8sWUFBYSxTQUFRLFdBQVc7SUFrQy9CO0lBQ0E7SUFDRjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUF4Q1YsT0FBTyxHQUFZLElBQUksQ0FBQztJQUN4QixjQUFjLEdBQVcsa0NBQWtDLENBQUM7SUFDNUQsY0FBYyxDQUFrQztJQUNoRCxzQkFBc0IsQ0FBNEI7SUFDbEQsY0FBYyxHQUFHLElBQUksQ0FBQztJQUN0QixRQUFRLEdBQWdCLElBQUksQ0FBQztJQUM3QixrQkFBa0IsR0FBRztRQUNuQixZQUFZO1FBQ1osU0FBUztRQUNULFlBQVk7UUFDWixTQUFTO1FBQ1QsUUFBUTtRQUNSLHlCQUF5QjtRQUN6QixjQUFjO1FBQ2QsdUJBQXVCO1FBQ3ZCLGVBQWU7UUFDZixjQUFjO1FBQ2QsWUFBWTtRQUNaLFlBQVk7UUFDWixlQUFlO1FBQ2YsYUFBYTtRQUNiLGFBQWE7UUFDYix1QkFBdUI7UUFDdkIsS0FBSztLQUNOLENBQUM7SUFDRixRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ2QsUUFBUSxHQUFnQixFQUFFLENBQUM7SUFDM0IsYUFBYSxHQUFnQixFQUFFLENBQUM7SUFDaEMsY0FBYyxHQUFXLENBQUMs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QUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNmLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO29CQUNwRCxPQUFPLENBQUMsQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDO2dCQUM3QixDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLFlBQVk7b0JBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ2hDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLGlCQUFpQixHQUFHLENBQUMsSUFBUyxFQUFFLEVBQUU7b0JBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7d0JBQ3pCLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNyQixDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztvQkFDcEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDO2dCQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7b0JBQ3pCLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNyQixDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDcEIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQTtDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRydVZpZXdCYXNlIH0gZnJvbSAnLi4vLi4vYmFzZS12aWV3cy90cnUtdmlldy1iYXNlJztcclxuaW1wb3J0IHsgVHJ1RGF0YUNvbnRleHQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtZGF0YS1jb250ZXh0JztcclxuaW1wb3J0IHsgSVRydVRvb2xiYXJEcm9wZG93bk9wdGlvbiB9IGZyb20gJy4uL3Rvb2xiYXIvY2xhc3Nlcy90cnUtdG9vbGJhci1kcm9wZG93bi1vcHRpb24nO1xyXG5pbXBvcnQgeyBUcnVUZXh0TWFuYWdlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS10ZXh0LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBUcnVXaW5kb3dFdmVudEhhbmRsZXIgfSBmcm9tICcuLi9kZXNrdG9wL3NlcnZpY2VzL3RydS13aW5kb3ctZXZlbnQtaGFuZGxlcic7XHJcbmltcG9ydCB7IFRydU1vZGVsVGFibGVMb29rdXAgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtbW9kZWwtdGFibGUtbG9va3VwJztcclxuaW1wb3J0IHsgVHJ1VWlOb3RpZmljYXRpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtdWktbm90aWZpY2F0aW9uJztcclxuaW1wb3J0IHsgVHJ1TW9kZWxQcm9wZXJ0eUxvb2t1cCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS1tb2RlbC1wcm9wZXJ0eS1sb29rdXAnO1xyXG5pbXBvcnQgeyBUcnVNb2RlbFR5cGVMb29rdXAgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtbW9kZWwtdHlwZS1sb29rdXAnO1xyXG5pbXBvcnQgeyBUcnVNb2RlbE5hdmlnYXRpb25Qcm9wZXJ0aWVzTG9va3VwIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LW1vZGVsLW5hdmlnYXRpb24tcHJvcGVydGllcy1sb29rdXAnO1xyXG5pbXBvcnQgeyBUcnVOYXZpZ2F0aW9uUHJvcGVydHlDb25maWcgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RydS1uYXZpZ2F0aW9uLXByb3BlcnR5LWNvbmZpZyc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0cnUtY2xvbmUtdmlldycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RydS1jbG9uZS12aWV3Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RydS1jbG9uZS12aWV3LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcnVDbG9uZVZpZXcgZXh0ZW5kcyBUcnVWaWV3QmFzZSB7XHJcbiAgbG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgbG9hZGluZ01lc3NhZ2U6IHN0cmluZyA9ICdTZWFyY2hpbmcgZm9yIHJlbGF0ZWQgcmVjb3Jkcy4uLic7XHJcbiAgbnVtYmVyT2ZDb3BpZXM6IEFycmF5PElUcnVUb29sYmFyRHJvcGRvd25PcHRpb24+XHJcbiAgc2VsZWN0ZWROdW1iZXJPZkNvcGllczogSVRydVRvb2xiYXJEcm9wZG93bk9wdGlvbjtcclxuICBjb250ZXh0RmlsdGVycyA9IG51bGw7XHJcbiAgcm9vdE5vZGU6IE5vZGUgfCBudWxsID0gbnVsbDsgXHJcbiAgaWdub3JlUHJvcGVydHlMaXN0ID0gW1xyXG4gICAgJ0NyZWF0ZWRSZWYnLFxyXG4gICAgJ0NyZWF0ZWQnLFxyXG4gICAgJ1VwZGF0ZWRSZWYnLFxyXG4gICAgJ1VwZGF0ZWQnLFxyXG4gICAgJ3Jvd3ZlcicsXHJcbiAgICAnX2N1c3RvbVZhbGlkYXRpb25FcnJvcnMnLFxyXG4gICAgJ2VudGl0eUFzcGVjdCcsXHJcbiAgICAnX2Fzc29jaWF0ZWREYXRhQ2FjaGVkJyxcclxuICAgICdfYmFja2luZ1N0b3JlJyxcclxuICAgICdfc2V0RGVmYXVsdHMnLFxyXG4gICAgJ18kdHlwZU5hbWUnLFxyXG4gICAgJ2VudGl0eVR5cGUnLFxyXG4gICAgJ18kaW50ZXJjZXB0b3InLFxyXG4gICAgJ2dldFByb3BlcnR5JyxcclxuICAgICdzZXRQcm9wZXJ0eScsXHJcbiAgICAnX3BlbmRpbmdCYWNraW5nU3RvcmVzJyxcclxuICAgICdSZWYnXHJcbiAgXTtcclxuICBkYXRhVHJlZSA9IFtdO1xyXG4gIGZsYXRMaXN0OiBBcnJheTxOb2RlPiA9IFtdO1xyXG4gIGNoaWxkRmxhdExpc3Q6IEFycmF5PE5vZGU+ID0gW107XHJcbiAgcHJvY2Vzc2VkQ291bnQ6IG51bWJlciA9IDA7XHJcbiAgZG9uZVByb2Nlc3Npbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkaXNwbGF5VHJlZSA9IFt0aGlzLnJvb3ROb2RlXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgdGV4dE1hbmFnZXI6IFRydVRleHRNYW5hZ2VyLFxyXG4gICAgcHJvdGVjdGVkIHdpbmRvd0V2ZW50SGFuZGxlcjogVHJ1V2luZG93RXZlbnRIYW5kbGVyLFxyXG4gICAgcHJpdmF0ZSBkYXRhQ29udGV4dDogVHJ1RGF0YUNvbnRleHQsXHJcbiAgICBwcml2YXRlIG1vZGVsVGFibGVMb29rdXA6IFRydU1vZGVsVGFibGVMb29rdXAsXHJcbiAgICBwcml2YXRlIG1vZGVsUHJvcGVydHlMb29rdXA6IFRydU1vZGVsUHJvcGVydHlMb29rdXAsXHJcbiAgICBwcml2YXRlIG1vZGVsVHlwZUxvb2t1cDogVHJ1TW9kZWxUeXBlTG9va3VwLFxyXG4gICAgcHJpdmF0ZSBtb2RlbE5hdmlnYXRpb25Qcm9wZXJ0aWVzTG9va3VwOiBUcnVNb2RlbE5hdmlnYXRpb25Qcm9wZXJ0aWVzTG9va3VwLFxyXG4gICAgcHJpdmF0ZSB1aU5vdGlmaWNhdGlvbjogVHJ1VWlOb3RpZmljYXRpb24pIHtcclxuICAgIHN1cGVyKHRleHRNYW5hZ2VyLCB3aW5kb3dFdmVudEhhbmRsZXIpO1xyXG4gICAgdGhpcy5udW1iZXJPZkNvcGllcyA9IHRoaXMuZ2V0TnVtYmVyT2ZDb3BpZXMoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWROdW1iZXJPZkNvcGllcyA9IHRoaXMubnVtYmVyT2ZDb3BpZXNbMF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE51bWJlck9mQ29waWVzID0gKCk6IEFycmF5PElUcnVUb29sYmFyRHJvcGRvd25PcHRpb24+ID0+IHtcclxuICAgIGxldCBjb3BpZXM6IEFycmF5PElUcnVUb29sYmFyRHJvcGRvd25PcHRpb24+ID0gW107XHJcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAyNTsgaSsrKSB7XHJcbiAgICAgIGNvcGllcy5wdXNoKHtcclxuICAgICAgICB2YWx1ZTogaSxcclxuICAgICAgICBsYWJlbDogaS50b1N0cmluZygpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvcGllcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJvcGVydHlJc0FsbG93ZWQgPSAocHJvcGVydHlOYW1lOiBzdHJpbmcsIHRhYmxlTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAocHJvcGVydHlOYW1lID09PSB0YWJsZU5hbWUgKyAnUmVmJykgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKHByb3BlcnR5TmFtZS5zdGFydHNXaXRoKCdvJykpIHJldHVybiBmYWxzZTtcclxuICAgIGxldCBwcm9wZXJ0eSA9IHRoaXMubW9kZWxQcm9wZXJ0eUxvb2t1cC5sb29rdXAuZ2V0KHByb3BlcnR5TmFtZSk7XHJcbiAgICBpZiAocHJvcGVydHkgJiYgcHJvcGVydHkuZXhjbHVkZUZyb21DbG9uaW5nKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5pZ25vcmVQcm9wZXJ0eUxpc3Quc29tZShmdW5jdGlvbiAocHJvcGVydHlUb0lnbm9yZSkgeyByZXR1cm4gcHJvcGVydHlUb0lnbm9yZSA9PT0gcHJvcGVydHlOYW1lOyB9KSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgIGdldFByb3RvdHlwZVByb3BlcnRpZXMgPSAob2JqOiBhbnkpID0+IHtcclxuICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XHJcbiAgICAgIGlmICghb2JqLmhhc093blByb3BlcnR5KHByb3ApKSB7XHJcbiAgICAgICAgcmVzdWx0LnB1c2gocHJvcCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENoaWxkUHJvcGVydGllc0ZvckN1cnJlbnRFbnRpdHkgPSAoY3VycmVudEVudGl0eTogYW55KSA9PiB7XHJcbiAgICAvL3ZhciBwcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmtleXMoT2JqZWN0LmdldFByb3RvdHlwZU9mKGN1cnJlbnRFbnRpdHkpKTtcclxuICAgIGxldCBlbnRpdHlOYW1lID0gdGhpcy5nZXRUeXBlRnJvbUVudGl0eVR5cGVOYW1lKGN1cnJlbnRFbnRpdHkuJHR5cGUpO1xyXG4gICAgbGV0IGNoaWxkTG9va3VwID0gdGhpcy5tb2RlbE5hdmlnYXRpb25Qcm9wZXJ0aWVzTG9va3VwLmxvb2t1cC5nZXQoZW50aXR5TmFtZSkgYXMgVHJ1TmF2aWdhdGlvblByb3BlcnR5Q29uZmlnW107XHJcbiAgICBsZXQgcHJvcGVydHlOYW1lcyA9IE9iamVjdC5rZXlzKGN1cnJlbnRFbnRpdHkpO1xyXG4gICAgbGV0IG5hdmlnYXRpb25Qcm9wZXJ0eU5hbWVzID0gcHJvcGVydHlOYW1lcy5maWx0ZXIoKG4pID0+IHsgcmV0dXJuIG4uc3RhcnRzV2l0aCgnbycpOyB9KTtcclxuICAgIGxldCBjaGlsZE5hdmlnYXRpb25Qcm9wZXJ0eU5hbWVzID0gbmF2aWdhdGlvblByb3BlcnR5TmFtZXMuZmlsdGVyKChuKSA9PiB7XHJcbiAgICAgIHJldHVybiBjaGlsZExvb2t1cC5zb21lKChsb29rdXA6IGFueSkgPT4geyByZXR1cm4gbG9va3VwLm5hbWUgPT09IG47IH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IGNoaWxkUHJvcGVydGllczogQXJyYXk8YW55PiA9IFtdO1xyXG4gICAgY2hpbGROYXZpZ2F0aW9uUHJvcGVydHlOYW1lcy5maWx0ZXIoZnVuY3Rpb24gKG4pIHtcclxuICAgICAgaWYgKGN1cnJlbnRFbnRpdHlbbl0gJiYgY3VycmVudEVudGl0eVtuXS5sZW5ndGgpIGNoaWxkUHJvcGVydGllcy5wdXNoKGN1cnJlbnRFbnRpdHlbbl0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGNoaWxkUHJvcGVydGllcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VHlwZUZyb21FbnRpdHlUeXBlTmFtZSA9ICh0eXBlTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICB2YXIgcDFzID0gdHlwZU5hbWUuc3BsaXQoJywnKVswXTtcclxuICAgIHZhciBwMnMgPSBwMXMuc3BsaXQoJy4nKTtcclxuICAgIHJldHVybiBwMnNbcDJzLmxlbmd0aCAtIDFdO1xyXG4gIH1cclxuXHJcbnByaXZhdGUgYnVpbGRDbG9uZVRyZWUgPSAoY3VycmVudEVudGl0eTogYW55LCBub2RlOiBhbnkpID0+IHtcclxuICB2YXIgY2hpbGRQcm9wZXJ0aWVzID0gdGhpcy5nZXRDaGlsZFByb3BlcnRpZXNGb3JDdXJyZW50RW50aXR5KGN1cnJlbnRFbnRpdHkpO1xyXG4gIGNoaWxkUHJvcGVydGllcy5mb3JFYWNoKChjaGlsZEVudGl0aWVzOiBhbnkpID0+IHtcclxuICAgIGxldCB0eXBlID0gdGhpcy5nZXRUeXBlRnJvbUVudGl0eVR5cGVOYW1lKGNoaWxkRW50aXRpZXNbMF0uJHR5cGUpO1xyXG4gICAgbGV0IGNoaWxkTG9va3VwID0gdGhpcy5tb2RlbFRhYmxlTG9va3VwLmxvb2t1cC5nZXQodHlwZSk7XHJcbiAgICBsZXQgZ3JvdXBOb2RlID0gbmV3IE5vZGUoXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIGNoaWxkRW50aXRpZXNbMF0uY29uc3RydWN0b3IubmFtZSxcclxuICAgICAgY2hpbGRMb29rdXA/LnBsdXJhbExhYmVsIGFzIHN0cmluZyxcclxuICAgICAgZmFsc2UsXHJcbiAgICAgIHRydWUsXHJcbiAgICAgIFtdLFxyXG4gICAgICAnJyxcclxuICAgICAgZmFsc2UsXHJcbiAgICAgIG5vZGUsXHJcbiAgICAgIG51bGxcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5mbGF0TGlzdC5wdXNoKGdyb3VwTm9kZSk7XHJcblxyXG4gICAgY2hpbGRFbnRpdGllcy5mb3JFYWNoKChjaGlsZEVudGl0eTogYW55KSA9PiB7XHJcbiAgICAgIGxldCB0eXBlID0gdGhpcy5nZXRUeXBlRnJvbUVudGl0eVR5cGVOYW1lKGNoaWxkRW50aXR5LiR0eXBlKTtcclxuICAgICAgbGV0IGNoaWxkTm9kZSA9IG5ldyBOb2RlKFxyXG4gICAgICAgIGNoaWxkRW50aXR5W3R5cGUgKyAnUmVmJ10sXHJcbiAgICAgICAgdHlwZSxcclxuICAgICAgICB0eXBlLFxyXG4gICAgICAgIHRydWUsXHJcbiAgICAgICAgdHJ1ZSxcclxuICAgICAgICBbXSxcclxuICAgICAgICAnJyxcclxuICAgICAgICBmYWxzZSxcclxuICAgICAgICBncm91cE5vZGUsXHJcbiAgICAgICAgY2hpbGRFbnRpdHlcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuY2hpbGRGbGF0TGlzdC5wdXNoKGNoaWxkTm9kZSk7XHJcbiAgICAgIGdyb3VwTm9kZS5ub2Rlcy5wdXNoKGNoaWxkTm9kZSk7XHJcbiAgICAgIHRoaXMuYnVpbGRDbG9uZVRyZWUoY2hpbGRFbnRpdHksIGNoaWxkTm9kZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBub2RlLm5vZGVzLnB1c2goZ3JvdXBOb2RlKTtcclxuICB9KTtcclxufVxyXG5cclxuICBwcml2YXRlIGFzeW5jRm9yRWFjaFJlY29yZElkID0gKGFycjogYW55LCBjYjogYW55KSA9PiB7XHJcbiAgICByZXR1cm4gYXJyLnJlZHVjZSgocDogYW55LCBjOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHAudGhlbigoKSA9PiBjYihjKSk7XHJcbiAgICB9LCBQcm9taXNlLnJlc29sdmUoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZldGNoUmVjb3JkSWQgPSAoY2hpbGQ6IGFueSkgPT4ge1xyXG4gICAgdmFyIGMgPSBjaGlsZDtcclxuICAgIHZhciBkYXRhID0ge1xyXG4gICAgICByZWY6IGMucmVmLFxyXG4gICAgICB0YWJsZU5hbWU6IGMudGFibGVOYW1lXHJcbiAgICB9O1xyXG4gICAgZGF0YSA9IHRoaXMudGV4dE1hbmFnZXIuZm9ybWF0QXNVcmxQYXJhbWV0ZXJzKGRhdGEpO1xyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogYW55KSA9PiB7XHJcbiAgICAgIGMuZGlzcGxheU5hbWUgPSBjaGlsZC5lbnRpdHkuSElEO1xyXG4gICAgICB0aGlzLnByb2Nlc3NlZENvdW50Kys7XHJcbiAgICAgIHRoaXMubG9hZGluZ01lc3NhZ2UgPSAnRm9ybWF0dGluZyBkYXRhLi4ucHJvY2Vzc2VkICgnICsgdGhpcy5wcm9jZXNzZWRDb3VudCArICcvJyArIHRoaXMuY2hpbGRGbGF0TGlzdC5sZW5ndGggKyAnKSByZWNvcmRzJztcclxuICAgICAgaWYgKHRoaXMucHJvY2Vzc2VkQ291bnQgPj0gdGhpcy5jaGlsZEZsYXRMaXN0Lmxlbmd0aClcclxuICAgICAgICB0aGlzLmxvYWRpbmdNZXNzYWdlID0gJ1JlbmRlcmluZyB0cmVlLi4uJztcclxuICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRvbmUgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmRvbmVQcm9jZXNzaW5nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJhdmVyc2UgPSAobm9kZTogYW55LCBjdXJyZW50RW50aXR5OiBhbnkpID0+IHtcclxuICAgIHZhciBncm91cCA9ICFub2RlLmNoaWxkO1xyXG4gICAgaWYgKGdyb3VwKSB7XHJcbiAgICAgIHZhciBncm91cE5vZGVzID0gbm9kZS5ub2RlcztcclxuICAgICAgZ3JvdXBOb2Rlcy5mb3JFYWNoKChncm91cE5vZGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChncm91cE5vZGUuY2hlY2tlZClcclxuICAgICAgICAgIGdyb3VwTm9kZS5ub2Rlcy5mb3JFYWNoKChjaGlsZE5vZGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRyYXZlcnNlKGNoaWxkTm9kZSwgY3VycmVudEVudGl0eSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAobm9kZS5jaGVja2VkKSB7XHJcbiAgICAgICAgbGV0IHRhYmxlVHlwZSA9IHRoaXMubW9kZWxUeXBlTG9va3VwLmdldFR5cGUodGhpcy50YWJsZU5hbWUpO1xyXG4gICAgICAgIGxldCBuZXdFbnRpdHkgPSB0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLmFkZCh0YWJsZVR5cGUsIHRoaXMuY29udGV4dEZpbHRlcnMpO1xyXG4gICAgICAgIHR5cGUgT2JqZWN0S2V5ID0ga2V5b2YgdHlwZW9mIG5ld0VudGl0eTtcclxuICAgICAgICB0aGlzLmdldFByb3RvdHlwZVByb3BlcnRpZXMobmV3RW50aXR5KS5mb3JFYWNoKChwcm9wZXJ0eU5hbWUpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLnByb3BlcnR5SXNBbGxvd2VkKHByb3BlcnR5TmFtZSwgbm9kZS50YWJsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIG5ld0VudGl0eVtwcm9wZXJ0eU5hbWUgYXMgT2JqZWN0S2V5XSA9IG5vZGUuZW50aXR5W3Byb3BlcnR5TmFtZV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIG5ld0VudGl0eS5zZXRQcm9wZXJ0eSEoJ19hc3NvY2lhdGVkRGF0YUNhY2hlZCcsIHRydWUpO1xyXG5cclxuICAgICAgICBsZXQgY2hpbGRMb29rdXAgPSB0aGlzLm1vZGVsVGFibGVMb29rdXAubG9va3VwLmdldChub2RlLnRhYmxlTmFtZSk7XHJcbiAgICAgICAgY3VycmVudEVudGl0eVsnbycgKyBjaGlsZExvb2t1cCEucGx1cmFsTmFtZV0ucHVzaChuZXdFbnRpdHkpO1xyXG4gICAgICAgIGxldCBjaGlsZE5vZGVzID0gbm9kZS5ub2RlcztcclxuICAgICAgICBjaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2hpbGROb2RlLmNoZWNrZWQpXHJcbiAgICAgICAgICAgIGNoaWxkTm9kZS5ub2Rlcy5mb3JFYWNoKChncm91cE5vZGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudHJhdmVyc2UoZ3JvdXBOb2RlLCBuZXdFbnRpdHkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgZ2V0RGF0YUZvckNsb25pbmcgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLmNsb25lKHtcclxuICAgICAgcmVmOiB0aGlzLmVudGl0eS5SZWYsXHJcbiAgICAgIHRhYmxlTmFtZTogdGhpcy50YWJsZU5hbWVcclxuICAgIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhVHJlZSA9IHJlc3BvbnNlLkNvbnRlbnRbMF07XHJcbiAgICAgICAgdGhpcy5idWlsZENsb25lVHJlZSh0aGlzLmRhdGFUcmVlLCB0aGlzLnJvb3ROb2RlKTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkaW5nTWVzc2FnZSA9ICdGb3JtYXR0aW5nIGRhdGEuLi4oMC8nICsgdGhpcy5jaGlsZEZsYXRMaXN0Lmxlbmd0aCArICcpIHJlY29yZHMnO1xyXG4gICAgICAgIHRoaXMuYXN5bmNGb3JFYWNoUmVjb3JkSWQodGhpcy5jaGlsZEZsYXRMaXN0LCB0aGlzLmZldGNoUmVjb3JkSWQpLnRoZW4odGhpcy5kb25lKTtcclxuXHJcbiAgICAgICAgdGhpcy5kaXNwbGF5VHJlZSA9IFt0aGlzLnJvb3ROb2RlXTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChleDogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yJywgdGhpcy51aU5vdGlmaWNhdGlvbi5lcnJvcignU2VydmVyIEVycm9yOiAnICsgZXguc3RhdHVzLCBbZXguZXJyb3IuTWVzc2FnZV0pKVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQ2xvbmUgPSAoKSA9PiB7XHJcbiAgICBsZXQgY29waWVzID0gdGhpcy5zZWxlY3RlZE51bWJlck9mQ29waWVzLnZhbHVlO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3BpZXM7IGkrKykge1xyXG4gICAgICBsZXQgdGFibGVUeXBlID0gdGhpcy5tb2RlbFR5cGVMb29rdXAuZ2V0VHlwZSh0aGlzLnRhYmxlTmFtZSk7XHJcbiAgICAgIGxldCBuZXdFbnRpdHkgPSB0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLmFkZCh0YWJsZVR5cGUsIHRoaXMuY29udGV4dEZpbHRlcnMpO1xyXG4gICAgICB0eXBlIE9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBuZXdFbnRpdHk7XHJcbiAgICAgIHRoaXMuZ2V0UHJvdG90eXBlUHJvcGVydGllcyh0aGlzLmVudGl0eSkuZm9yRWFjaCgocHJvcGVydHlOYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wZXJ0eUlzQWxsb3dlZChwcm9wZXJ0eU5hbWUsIHRoaXMudGFibGVOYW1lKSkge1xyXG4gICAgICAgICAgbmV3RW50aXR5W3Byb3BlcnR5TmFtZSBhcyBPYmplY3RLZXldID0gdGhpcy5lbnRpdHlbcHJvcGVydHlOYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgbmV3RW50aXR5LnNldFByb3BlcnR5ISgnX2Fzc29jaWF0ZWREYXRhQ2FjaGVkJywgdHJ1ZSk7XHJcblxyXG4gICAgICB0aGlzLnRyYXZlcnNlKHRoaXMuZGlzcGxheVRyZWVbMF0sIG5ld0VudGl0eSk7XHJcbiAgICAgIC8vdGhpcy52aWV3LmRhdGEuYWRkKG5ld0VudGl0eSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLndpbmRvd0V2ZW50SGFuZGxlci5jbG9zZSgpO1xyXG4gIH07XHJcblxyXG4gIG9uQ2FuY2VsID0gKCkgPT4ge1xyXG4gICAgdGhpcy53aW5kb3dFdmVudEhhbmRsZXIuY2xvc2UoKTtcclxuICB9O1xyXG5cclxuICBvbkV4cGFuZENsaWNrZWQgPSAoKSA9PiB7XHJcblxyXG4gIH1cclxuICAgICBcclxuICBvbkNvbGxhcHNlQ2xpY2tlZCA9ICgpID0+IHtcclxuXHJcbiAgfVxyXG5cclxuICBvbk51bWJlck9mQ29waWVzQ2hhbmdlZCA9IChldmVudDogYW55KSA9PiB7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnRhYmxlTmFtZSA9IHRoaXMudmlldy53aW5kb3cudGFibGVOYW1lO1xyXG4gICAgdGhpcy5lbnRpdGllcyA9IHRoaXMudmlldy5lbnRpdGllcyBhcyBhbnk7XHJcbiAgICB0aGlzLmVudGl0eSA9IHRoaXMuZW50aXRpZXNbdGhpcy52aWV3LmVudGl0eUluZGV4XTtcclxuICAgIHRoaXMucm9vdE5vZGUgPSBuZXcgTm9kZShudWxsLCB0aGlzLnRhYmxlTmFtZSwgdGhpcy50YWJsZU5hbWUsIGZhbHNlLCB0cnVlLCBudWxsLCBudWxsLCB0cnVlLCBudWxsLCBudWxsKTtcclxuICAgIHRoaXMuc2V0RW50aXR5RGlzcGxheVZhbHVlcyh0aGlzLnZpZXcud2luZG93LnRhYmxlTmFtZSk7XHJcbiAgICB0aGlzLmdldERhdGFGb3JDbG9uaW5nKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuZGF0YVRyZWUubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuZmxhdExpc3QubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuY2hpbGRGbGF0TGlzdC5sZW5ndGggPSAwO1xyXG4gIH1cclxufVxyXG5cclxuY2xhc3MgTm9kZSB7XHJcbiAgcmVmOiBudW1iZXIgfCBudWxsO1xyXG4gIHRhYmxlTmFtZTogc3RyaW5nO1xyXG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgY2hlY2tlZDogYm9vbGVhbjtcclxuICBjaGlsZDogYW55O1xyXG4gIGNoaWxkTm9kZXM6IGFueTtcclxuICBzaG93RW50aXRpZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwYXRoRnJvbVJvb3Q6IHN0cmluZyB8IG51bGw7XHJcbiAgbm9kZXM6IGFueTtcclxuICByb290OiBhbnk7XHJcbiAgcGFyZW50OiBhbnk7XHJcbiAgZW50aXR5OiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcmVmOiBudW1iZXIgfCBudWxsLFxyXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXHJcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nLFxyXG4gICAgY2hpbGQ6IGFueSxcclxuICAgIGNoZWNrZWQ6IGJvb2xlYW4sXHJcbiAgICBjaGlsZEVudGl0aWVzOiBhbnksXHJcbiAgICBwYXRoRnJvbVJvb3Q6IHN0cmluZyB8IG51bGwsXHJcbiAgICByb290OiBib29sZWFuLFxyXG4gICAgcGFyZW50OiBhbnksXHJcbiAgICBlbnRpdHk6IGFueSkge1xyXG4gICAgdGhpcy5yZWYgPSByZWY7XHJcbiAgICB0aGlzLnRhYmxlTmFtZSA9IHRhYmxlTmFtZTtcclxuICAgIHRoaXMuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcclxuICAgIHRoaXMuY2hlY2tlZCA9IGNoZWNrZWQ7XHJcbiAgICB0aGlzLmNoaWxkID0gY2hpbGQ7XHJcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBjaGlsZEVudGl0aWVzO1xyXG4gICAgdGhpcy5wYXRoRnJvbVJvb3QgPSBwYXRoRnJvbVJvb3Q7XHJcbiAgICB0aGlzLnJvb3QgPSByb290O1xyXG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XHJcbiAgICB0aGlzLmVudGl0eSA9IGVudGl0eTtcclxuICB9XHJcblxyXG4gIG9uR3JvdXBEaXNwbGF5ID0gKCkgPT4ge1xyXG4gICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHRoaXMuc2hvd0VudGl0aWVzID0gIXRoaXMuc2hvd0VudGl0aWVzO1xyXG4gICAgdGhpcy5ub2Rlcy5maW5kKChuOiBhbnkpID0+IHtcclxuICAgICAgbi5zaG93RW50aXRpZXMgPSBjdXJyZW50VmFsdWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQ2hlY2tlZENoYW5nZWQgPSAoKSA9PiB7XHJcbiAgICBpZiAodGhpcy5jaGVja2VkKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoaWxkKSB7XHJcbiAgICAgICAgdmFyIHAgPSB0aGlzLnBhcmVudDtcclxuICAgICAgICB3aGlsZSAocCkge1xyXG4gICAgICAgICAgcC5jaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICAgIHAgPSBwLnBhcmVudDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5ub2Rlcy5maW5kKChuOiBhbnkpID0+IHsgbi5jaGVja2VkID0gdHJ1ZTsgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmNoaWxkKSB7XHJcbiAgICAgICAgdmFyIGFsbFVuY2hlY2tlZCA9IHRoaXMucGFyZW50Lm5vZGVzLmV2ZXJ5KChuOiBhbnkpID0+IHtcclxuICAgICAgICAgIHJldHVybiBuLmNoZWNrZWQgPT09IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChhbGxVbmNoZWNrZWQpXHJcbiAgICAgICAgICB0aGlzLnBhcmVudC5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIHVuY2hlY2tDaGlsZE5vZGVzID0gKG5vZGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgbm9kZS5ub2Rlcy5maW5kKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdW5jaGVja0NoaWxkTm9kZXMobik7XHJcbiAgICAgICAgICAgIG4uY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm5vZGVzLmZpbmQoKG46IGFueSkgPT4ge1xyXG4gICAgICAgICAgdW5jaGVja0NoaWxkTm9kZXMobik7XHJcbiAgICAgICAgICBuLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuIiwiPGRpdj5cclxuICA8dHJ1LXRvb2xiYXI+XHJcbiAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIidleHBhbmQtaWNvbidcIiBbdG9vbHRpcF09XCInRXhwYW5kJ1wiIFtkaXNhYmxlZF09XCJsb2FkaW5nXCIgKG9uQ2xpY2spPVwib25FeHBhbmRDbGlja2VkKClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgIDx0cnUtdG9vbGJhci1idXR0b24gW2ljb25dPVwiJ2NvbGxhcHNlLWljb24nXCIgW3Rvb2x0aXBdPVwiJ0NvbGxhcHNlJ1wiIFtkaXNhYmxlZF09XCJsb2FkaW5nXCIgKG9uQ2xpY2spPVwib25Db2xsYXBzZUNsaWNrZWQoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgPHRydS10b29sYmFyLXRleHQgW3RleHRdPVwiJ0NvcGllczonXCI+PC90cnUtdG9vbGJhci10ZXh0PlxyXG4gICAgPHRydS10b29sYmFyLWRyb3Bkb3duIFtvcHRpb25zXT1cIm51bWJlck9mQ29waWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkT3B0aW9uKV09XCJzZWxlY3RlZE51bWJlck9mQ29waWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbk51bWJlck9mQ29waWVzQ2hhbmdlZCgkZXZlbnQpXCI+XHJcbiAgICA8L3RydS10b29sYmFyLWRyb3Bkb3duPlxyXG4gIDwvdHJ1LXRvb2xiYXI+XHJcbiAgPGRpdiBjbGFzcz1cInRydS1kaWFsb2ctY29udGVudCBjbG9uZVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlICNncm91cE5vZGVSZW5kZXJlciBsZXQtZGF0YT5cclxuICAgICAgPGRpdiAqbmdJZj1cIiFkYXRhLmNoaWxkIHx8IGRhdGEuc2hvd0VudGl0aWVzXCJcclxuICAgICAgICAgICBjbGFzcz1cImNsb25lLW1vZGFsLXRyZWUtZ3JvdXBcIj5cclxuICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJkYXRhLmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAoY2xpY2spPVwiZGF0YS5vbkNoZWNrZWRDaGFuZ2VkKClcIlxyXG4gICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGF0YS5yb290XCJcclxuICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgLz5cclxuICAgICAgICA8YSAoY2xpY2spPVwiZGF0YS5vbkdyb3VwRGlzcGxheU5hbWVDbGlja2VkKClcIlxyXG4gICAgICAgICAgIFtuZ0NsYXNzXT1cInsnY2xvbmUtbW9kYWwtdHJlZS1ncm91cC1yb290LW5hbWUnOiBkYXRhLnJvb3QgfHwgZGF0YS5jaGlsZH1cIlxyXG4gICAgICAgICAgIFtuZ1N0eWxlXT1cInsnbWF4LXdpZHRoJzogZGF0YS5jaGlsZE5vZGUgPyAnMzAwcHgnIDogJ2F1dG8nfVwiPnt7ZGF0YS5kaXNwbGF5TmFtZX19PC9hPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiIWRhdGEucm9vdCAmJiAhZGF0YS5jaGlsZFwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjbG9uZS1tb2RhbC10cmVlLWdyb3VwLWNvdW50XCI+KHt7ZGF0YS5ub2Rlcy5sZW5ndGh9fSk8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8dWw+XHJcbiAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBkYXRhIG9mIGRhdGEubm9kZXNcIj5cclxuICAgICAgICAgIDxkaXYgKm5nVGVtcGxhdGVPdXRsZXQ9XCJncm91cE5vZGVSZW5kZXJlcjsgY29udGV4dDogeyRpbXBsaWNpdDogZGF0YX1cIj48L2Rpdj5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICA8L3VsPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxkaXYgKm5nSWY9XCJsb2FkaW5nTWVzc2FnZVwiXHJcbiAgICAgICAgIGNsYXNzPVwiY2xvbmUtbW9kYWwtbG9hZGluZ1wiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImNsb25lLW1vZGFsLWxvYWRpbmctbWVzc2FnZVwiPnt7bG9hZGluZ01lc3NhZ2V9fTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cImRvbmVQcm9jZXNzaW5nXCJcclxuICAgICAgICAgY2xhc3M9XCJjbG9uZS1tb2RhbC10cmVlXCI+XHJcbiAgICAgIDx1bD5cclxuICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGRhdGEgb2YgZGlzcGxheVRyZWVcIj5cclxuICAgICAgICAgIDxkaXYgKm5nVGVtcGxhdGVPdXRsZXQ9XCJncm91cE5vZGVSZW5kZXJlcjsgY29udGV4dDogeyRpbXBsaWNpdDogZGF0YX1cIj48L2Rpdj5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICA8L3VsPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInRydS1kaWFsb2ctZm9vdGVyXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9uQ2xvbmUoKVwiIChrZXl1cC5lbnRlcik9XCJvbkNsb25lKClcIj5DbG9uZTwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
334
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWNsb25lLXZpZXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cnUtY29tbW9uLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvY2xvbmUtdmlldy90cnUtY2xvbmUtdmlldy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9jbG9uZS12aWV3L3RydS1jbG9uZS12aWV3Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0I3RCxNQUFNLE9BQU8sWUFBYSxTQUFRLFdBQVc7SUF1Qy9CO0lBQ0E7SUFDRjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUE1Q1YsSUFBSSxLQUFLLENBQUMsT0FBZ0I7UUFDeEIsSUFBSSxPQUFPO1lBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxPQUFPLEdBQVksSUFBSSxDQUFDO0lBQ3hCLGNBQWMsR0FBVyxrQ0FBa0MsQ0FBQztJQUM1RCxjQUFjLENBQWtDO0lBQ2hELHNCQUFzQixDQUE0QjtJQUNsRCxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLFFBQVEsR0FBZ0IsSUFBSSxDQUFDO0lBQzdCLGtCQUFrQixHQUFHO1FBQ25CLFlBQVk7UUFDWixTQUFTO1FBQ1QsWUFBWTtRQUNaLFNBQVM7UUFDVCxRQUFRO1FBQ1IseUJBQXlCO1FBQ3pCLGNBQWM7UUFDZCx1QkFBdUI7UUFDdkIsZUFBZTtRQUNmLGNBQWM7UUFDZCxZQUFZO1FBQ1osWUFBWTtRQUNaLGVBQWU7UUFDZixhQUFhO1FBQ2IsYUFBYTtRQUNiLHVCQUF1QjtRQUN2QixLQUFLO0tBQ04sQ0FBQztJQUNGLFFBQVEsR0FBRyxF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QkFDRixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO29CQUN6QixpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckIsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDLENBQUE7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJ1Vmlld0Jhc2UgfSBmcm9tICcuLi8uLi9iYXNlLXZpZXdzL3RydS12aWV3LWJhc2UnO1xyXG5pbXBvcnQgeyBUcnVEYXRhQ29udGV4dCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS1kYXRhLWNvbnRleHQnO1xyXG5pbXBvcnQgeyBJVHJ1VG9vbGJhckRyb3Bkb3duT3B0aW9uIH0gZnJvbSAnLi4vdG9vbGJhci9jbGFzc2VzL3RydS10b29sYmFyLWRyb3Bkb3duLW9wdGlvbic7XHJcbmltcG9ydCB7IFRydVRleHRNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LXRleHQtbWFuYWdlcic7XHJcbmltcG9ydCB7IFRydVdpbmRvd0V2ZW50SGFuZGxlciB9IGZyb20gJy4uL2Rlc2t0b3Avc2VydmljZXMvdHJ1LXdpbmRvdy1ldmVudC1oYW5kbGVyJztcclxuaW1wb3J0IHsgVHJ1TW9kZWxUYWJsZUxvb2t1cCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS1tb2RlbC10YWJsZS1sb29rdXAnO1xyXG5pbXBvcnQgeyBUcnVVaU5vdGlmaWNhdGlvbiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS11aS1ub3RpZmljYXRpb24nO1xyXG5pbXBvcnQgeyBUcnVNb2RlbFByb3BlcnR5TG9va3VwIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJ1LW1vZGVsLXByb3BlcnR5LWxvb2t1cCc7XHJcbmltcG9ydCB7IFRydU1vZGVsVHlwZUxvb2t1cCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS1tb2RlbC10eXBlLWxvb2t1cCc7XHJcbmltcG9ydCB7IFRydU1vZGVsTmF2aWdhdGlvblByb3BlcnRpZXNMb29rdXAgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtbW9kZWwtbmF2aWdhdGlvbi1wcm9wZXJ0aWVzLWxvb2t1cCc7XHJcbmltcG9ydCB7IFRydU5hdmlnYXRpb25Qcm9wZXJ0eUNvbmZpZyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvdHJ1LW5hdmlnYXRpb24tcHJvcGVydHktY29uZmlnJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RydS1jbG9uZS12aWV3JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJ1LWNsb25lLXZpZXcuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHJ1LWNsb25lLXZpZXcuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRydUNsb25lVmlldyBleHRlbmRzIFRydVZpZXdCYXNlIHtcclxuXHJcbiAgc2V0IHJlYWR5KGlzUmVhZHk6IGJvb2xlYW4pIHtcclxuICAgIGlmIChpc1JlYWR5KSB0aGlzLmRvbmUoKTtcclxuICB9XHJcblxyXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGxvYWRpbmdNZXNzYWdlOiBzdHJpbmcgPSAnU2VhcmNoaW5nIGZvciByZWxhdGVkIHJlY29yZHMuLi4nO1xyXG4gIG51bWJlck9mQ29waWVzOiBBcnJheTxJVHJ1VG9vbGJhckRyb3Bkb3duT3B0aW9uPlxyXG4gIHNlbGVjdGVkTnVtYmVyT2ZDb3BpZXM6IElUcnVUb29sYmFyRHJvcGRvd25PcHRpb247XHJcbiAgY29udGV4dEZpbHRlcnMgPSBudWxsO1xyXG4gIHJvb3ROb2RlOiBOb2RlIHwgbnVsbCA9IG51bGw7IFxyXG4gIGlnbm9yZVByb3BlcnR5TGlzdCA9IFtcclxuICAgICdDcmVhdGVkUmVmJyxcclxuICAgICdDcmVhdGVkJyxcclxuICAgICdVcGRhdGVkUmVmJyxcclxuICAgICdVcGRhdGVkJyxcclxuICAgICdyb3d2ZXInLFxyXG4gICAgJ19jdXN0b21WYWxpZGF0aW9uRXJyb3JzJyxcclxuICAgICdlbnRpdHlBc3BlY3QnLFxyXG4gICAgJ19hc3NvY2lhdGVkRGF0YUNhY2hlZCcsXHJcbiAgICAnX2JhY2tpbmdTdG9yZScsXHJcbiAgICAnX3NldERlZmF1bHRzJyxcclxuICAgICdfJHR5cGVOYW1lJyxcclxuICAgICdlbnRpdHlUeXBlJyxcclxuICAgICdfJGludGVyY2VwdG9yJyxcclxuICAgICdnZXRQcm9wZXJ0eScsXHJcbiAgICAnc2V0UHJvcGVydHknLFxyXG4gICAgJ19wZW5kaW5nQmFja2luZ1N0b3JlcycsXHJcbiAgICAnUmVmJ1xyXG4gIF07XHJcbiAgZGF0YVRyZWUgPSBbXTtcclxuICBmbGF0TGlzdDogQXJyYXk8Tm9kZT4gPSBbXTtcclxuICBjaGlsZEZsYXRMaXN0OiBBcnJheTxOb2RlPiA9IFtdO1xyXG4gIHByb2Nlc3NlZENvdW50OiBudW1iZXIgPSAwO1xyXG4gIGRvbmVQcm9jZXNzaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGlzcGxheVRyZWUgPSBbdGhpcy5yb290Tm9kZV07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIHRleHRNYW5hZ2VyOiBUcnVUZXh0TWFuYWdlcixcclxuICAgIHByb3RlY3RlZCB3aW5kb3dFdmVudEhhbmRsZXI6IFRydVdpbmRvd0V2ZW50SGFuZGxlcixcclxuICAgIHByaXZhdGUgZGF0YUNvbnRleHQ6IFRydURhdGFDb250ZXh0LFxyXG4gICAgcHJpdmF0ZSBtb2RlbFRhYmxlTG9va3VwOiBUcnVNb2RlbFRhYmxlTG9va3VwLFxyXG4gICAgcHJpdmF0ZSBtb2RlbFByb3BlcnR5TG9va3VwOiBUcnVNb2RlbFByb3BlcnR5TG9va3VwLFxyXG4gICAgcHJpdmF0ZSBtb2RlbFR5cGVMb29rdXA6IFRydU1vZGVsVHlwZUxvb2t1cCxcclxuICAgIHByaXZhdGUgbW9kZWxOYXZpZ2F0aW9uUHJvcGVydGllc0xvb2t1cDogVHJ1TW9kZWxOYXZpZ2F0aW9uUHJvcGVydGllc0xvb2t1cCxcclxuICAgIHByaXZhdGUgdWlOb3RpZmljYXRpb246IFRydVVpTm90aWZpY2F0aW9uKSB7XHJcbiAgICBzdXBlcih0ZXh0TWFuYWdlciwgd2luZG93RXZlbnRIYW5kbGVyKTtcclxuICAgIHRoaXMubnVtYmVyT2ZDb3BpZXMgPSB0aGlzLmdldE51bWJlck9mQ29waWVzKCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkTnVtYmVyT2ZDb3BpZXMgPSB0aGlzLm51bWJlck9mQ29waWVzWzBdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXROdW1iZXJPZkNvcGllcyA9ICgpOiBBcnJheTxJVHJ1VG9vbGJhckRyb3Bkb3duT3B0aW9uPiA9PiB7XHJcbiAgICBsZXQgY29waWVzOiBBcnJheTxJVHJ1VG9vbGJhckRyb3Bkb3duT3B0aW9uPiA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gMjU7IGkrKykge1xyXG4gICAgICBjb3BpZXMucHVzaCh7XHJcbiAgICAgICAgdmFsdWU6IGksXHJcbiAgICAgICAgbGFiZWw6IGkudG9TdHJpbmcoKVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb3BpZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb3BlcnR5SXNBbGxvd2VkID0gKHByb3BlcnR5TmFtZTogc3RyaW5nLCB0YWJsZU5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gdGFibGVOYW1lICsgJ1JlZicpIHJldHVybiBmYWxzZTtcclxuICAgIGlmIChwcm9wZXJ0eU5hbWUuc3RhcnRzV2l0aCgnbycpKSByZXR1cm4gZmFsc2U7XHJcbiAgICBsZXQgcHJvcGVydHkgPSB0aGlzLm1vZGVsUHJvcGVydHlMb29rdXAubG9va3VwLmdldChwcm9wZXJ0eU5hbWUpO1xyXG4gICAgaWYgKHByb3BlcnR5ICYmIHByb3BlcnR5LmV4Y2x1ZGVGcm9tQ2xvbmluZykgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuaWdub3JlUHJvcGVydHlMaXN0LnNvbWUoZnVuY3Rpb24gKHByb3BlcnR5VG9JZ25vcmUpIHsgcmV0dXJuIHByb3BlcnR5VG9JZ25vcmUgPT09IHByb3BlcnR5TmFtZTsgfSkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlICBnZXRQcm90b3R5cGVQcm9wZXJ0aWVzID0gKG9iajogYW55KSA9PiB7XHJcbiAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICBmb3IgKHZhciBwcm9wIGluIG9iaikge1xyXG4gICAgICBpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xyXG4gICAgICAgIHJlc3VsdC5wdXNoKHByb3ApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDaGlsZFByb3BlcnRpZXNGb3JDdXJyZW50RW50aXR5ID0gKGN1cnJlbnRFbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgLy92YXIgcHJvcGVydHlOYW1lcyA9IE9iamVjdC5rZXlzKE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50RW50aXR5KSk7XHJcbiAgICBsZXQgZW50aXR5TmFtZSA9IHRoaXMuZ2V0VHlwZUZyb21FbnRpdHlUeXBlTmFtZShjdXJyZW50RW50aXR5LiR0eXBlKTtcclxuICAgIGxldCBjaGlsZExvb2t1cCA9IHRoaXMubW9kZWxOYXZpZ2F0aW9uUHJvcGVydGllc0xvb2t1cC5sb29rdXAuZ2V0KGVudGl0eU5hbWUpIGFzIFRydU5hdmlnYXRpb25Qcm9wZXJ0eUNvbmZpZ1tdO1xyXG4gICAgbGV0IHByb3BlcnR5TmFtZXMgPSBPYmplY3Qua2V5cyhjdXJyZW50RW50aXR5KTtcclxuICAgIGxldCBuYXZpZ2F0aW9uUHJvcGVydHlOYW1lcyA9IHByb3BlcnR5TmFtZXMuZmlsdGVyKChuKSA9PiB7IHJldHVybiBuLnN0YXJ0c1dpdGgoJ28nKTsgfSk7XHJcbiAgICBsZXQgY2hpbGROYXZpZ2F0aW9uUHJvcGVydHlOYW1lcyA9IG5hdmlnYXRpb25Qcm9wZXJ0eU5hbWVzLmZpbHRlcigobikgPT4ge1xyXG4gICAgICByZXR1cm4gY2hpbGRMb29rdXAuc29tZSgobG9va3VwOiBhbnkpID0+IHsgcmV0dXJuIGxvb2t1cC5uYW1lID09PSBuOyB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBjaGlsZFByb3BlcnRpZXM6IEFycmF5PGFueT4gPSBbXTtcclxuICAgIGNoaWxkTmF2aWdhdGlvblByb3BlcnR5TmFtZXMuZmlsdGVyKGZ1bmN0aW9uIChuKSB7XHJcbiAgICAgIGlmIChjdXJyZW50RW50aXR5W25dICYmIGN1cnJlbnRFbnRpdHlbbl0ubGVuZ3RoKSBjaGlsZFByb3BlcnRpZXMucHVzaChjdXJyZW50RW50aXR5W25dKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBjaGlsZFByb3BlcnRpZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFR5cGVGcm9tRW50aXR5VHlwZU5hbWUgPSAodHlwZU5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgdmFyIHAxcyA9IHR5cGVOYW1lLnNwbGl0KCcsJylbMF07XHJcbiAgICB2YXIgcDJzID0gcDFzLnNwbGl0KCcuJyk7XHJcbiAgICByZXR1cm4gcDJzW3Aycy5sZW5ndGggLSAxXTtcclxuICB9XHJcblxyXG5wcml2YXRlIGJ1aWxkQ2xvbmVUcmVlID0gKGN1cnJlbnRFbnRpdHk6IGFueSwgbm9kZTogYW55KSA9PiB7XHJcbiAgdmFyIGNoaWxkUHJvcGVydGllcyA9IHRoaXMuZ2V0Q2hpbGRQcm9wZXJ0aWVzRm9yQ3VycmVudEVudGl0eShjdXJyZW50RW50aXR5KTtcclxuICBjaGlsZFByb3BlcnRpZXMuZm9yRWFjaCgoY2hpbGRFbnRpdGllczogYW55KSA9PiB7XHJcbiAgICBsZXQgdHlwZSA9IHRoaXMuZ2V0VHlwZUZyb21FbnRpdHlUeXBlTmFtZShjaGlsZEVudGl0aWVzWzBdLiR0eXBlKTtcclxuICAgIGxldCBjaGlsZExvb2t1cCA9IHRoaXMubW9kZWxUYWJsZUxvb2t1cC5sb29rdXAuZ2V0KHR5cGUpO1xyXG4gICAgbGV0IGdyb3VwTm9kZSA9IG5ldyBOb2RlKFxyXG4gICAgICBudWxsLFxyXG4gICAgICBjaGlsZEVudGl0aWVzWzBdLmNvbnN0cnVjdG9yLm5hbWUsXHJcbiAgICAgIGNoaWxkTG9va3VwPy5wbHVyYWxMYWJlbCBhcyBzdHJpbmcsXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICB0cnVlLFxyXG4gICAgICBbXSxcclxuICAgICAgJycsXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICBub2RlLFxyXG4gICAgICBudWxsXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuZmxhdExpc3QucHVzaChncm91cE5vZGUpO1xyXG5cclxuICAgIGNoaWxkRW50aXRpZXMuZm9yRWFjaCgoY2hpbGRFbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgdHlwZSA9IHRoaXMuZ2V0VHlwZUZyb21FbnRpdHlUeXBlTmFtZShjaGlsZEVudGl0eS4kdHlwZSk7XHJcbiAgICAgIGxldCBjaGlsZE5vZGUgPSBuZXcgTm9kZShcclxuICAgICAgICBjaGlsZEVudGl0eVt0eXBlICsgJ1JlZiddLFxyXG4gICAgICAgIHR5cGUsXHJcbiAgICAgICAgdHlwZSxcclxuICAgICAgICB0cnVlLFxyXG4gICAgICAgIHRydWUsXHJcbiAgICAgICAgW10sXHJcbiAgICAgICAgJycsXHJcbiAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgZ3JvdXBOb2RlLFxyXG4gICAgICAgIGNoaWxkRW50aXR5XHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmNoaWxkRmxhdExpc3QucHVzaChjaGlsZE5vZGUpO1xyXG4gICAgICBncm91cE5vZGUubm9kZXMucHVzaChjaGlsZE5vZGUpO1xyXG4gICAgICB0aGlzLmJ1aWxkQ2xvbmVUcmVlKGNoaWxkRW50aXR5LCBjaGlsZE5vZGUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbm9kZS5ub2Rlcy5wdXNoKGdyb3VwTm9kZSk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbiAgcHJpdmF0ZSBhc3luY0ZvckVhY2hSZWNvcmRJZCA9IChhcnI6IGFueSwgY2I6IGFueSkgPT4ge1xyXG4gICAgcmV0dXJuIGFyci5yZWR1Y2UoKHA6IGFueSwgYzogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBwLnRoZW4oKCkgPT4gY2IoYykpO1xyXG4gICAgfSwgUHJvbWlzZS5yZXNvbHZlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmZXRjaFJlY29yZElkID0gKGNoaWxkOiBhbnkpID0+IHtcclxuICAgIHZhciBjID0gY2hpbGQ7XHJcbiAgICB2YXIgZGF0YSA9IHtcclxuICAgICAgcmVmOiBjLnJlZixcclxuICAgICAgdGFibGVOYW1lOiBjLnRhYmxlTmFtZVxyXG4gICAgfTtcclxuICAgIGRhdGEgPSB0aGlzLnRleHRNYW5hZ2VyLmZvcm1hdEFzVXJsUGFyYW1ldGVycyhkYXRhKTtcclxuXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IGFueSkgPT4ge1xyXG4gICAgICBjLmRpc3BsYXlOYW1lID0gY2hpbGQuZW50aXR5LkhJRDtcclxuICAgICAgdGhpcy5wcm9jZXNzZWRDb3VudCsrO1xyXG4gICAgICB0aGlzLmxvYWRpbmdNZXNzYWdlID0gJ0Zvcm1hdHRpbmcgZGF0YS4uLnByb2Nlc3NlZCAoJyArIHRoaXMucHJvY2Vzc2VkQ291bnQgKyAnLycgKyB0aGlzLmNoaWxkRmxhdExpc3QubGVuZ3RoICsgJykgcmVjb3Jkcyc7XHJcbiAgICAgIGlmICh0aGlzLnByb2Nlc3NlZENvdW50ID49IHRoaXMuY2hpbGRGbGF0TGlzdC5sZW5ndGgpXHJcbiAgICAgICAgdGhpcy5sb2FkaW5nTWVzc2FnZSA9ICdSZW5kZXJpbmcgdHJlZS4uLic7XHJcbiAgICAgIHJlc29sdmUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkb25lID0gKCkgPT4ge1xyXG4gICAgdGhpcy5kb25lUHJvY2Vzc2luZyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRyYXZlcnNlID0gKG5vZGU6IGFueSwgY3VycmVudEVudGl0eTogYW55KSA9PiB7XHJcbiAgICB2YXIgZ3JvdXAgPSAhbm9kZS5jaGlsZDtcclxuICAgIGlmIChncm91cCkge1xyXG4gICAgICB2YXIgZ3JvdXBOb2RlcyA9IG5vZGUubm9kZXM7XHJcbiAgICAgIGdyb3VwTm9kZXMuZm9yRWFjaCgoZ3JvdXBOb2RlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZ3JvdXBOb2RlLmNoZWNrZWQpXHJcbiAgICAgICAgICBncm91cE5vZGUubm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy50cmF2ZXJzZShjaGlsZE5vZGUsIGN1cnJlbnRFbnRpdHkpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKG5vZGUuY2hlY2tlZCkge1xyXG4gICAgICAgIGxldCB0YWJsZVR5cGUgPSB0aGlzLm1vZGVsVHlwZUxvb2t1cC5nZXRUeXBlKHRoaXMudGFibGVOYW1lKTtcclxuICAgICAgICBsZXQgbmV3RW50aXR5ID0gdGhpcy5kYXRhQ29udGV4dC5lbnRpdHlBY2Nlc3MoKS5hZGQodGFibGVUeXBlLCB0aGlzLmNvbnRleHRGaWx0ZXJzKTtcclxuICAgICAgICB0eXBlIE9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBuZXdFbnRpdHk7XHJcbiAgICAgICAgdGhpcy5nZXRQcm90b3R5cGVQcm9wZXJ0aWVzKG5ld0VudGl0eSkuZm9yRWFjaCgocHJvcGVydHlOYW1lKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5wcm9wZXJ0eUlzQWxsb3dlZChwcm9wZXJ0eU5hbWUsIG5vZGUudGFibGVOYW1lKSkge1xyXG4gICAgICAgICAgICBuZXdFbnRpdHlbcHJvcGVydHlOYW1lIGFzIE9iamVjdEtleV0gPSBub2RlLmVudGl0eVtwcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBuZXdFbnRpdHkuc2V0UHJvcGVydHkhKCdfYXNzb2NpYXRlZERhdGFDYWNoZWQnLCB0cnVlKTtcclxuXHJcbiAgICAgICAgbGV0IGNoaWxkTG9va3VwID0gdGhpcy5tb2RlbFRhYmxlTG9va3VwLmxvb2t1cC5nZXQobm9kZS50YWJsZU5hbWUpO1xyXG4gICAgICAgIGN1cnJlbnRFbnRpdHlbJ28nICsgY2hpbGRMb29rdXAhLnBsdXJhbE5hbWVdLnB1c2gobmV3RW50aXR5KTtcclxuICAgICAgICBsZXQgY2hpbGROb2RlcyA9IG5vZGUubm9kZXM7XHJcbiAgICAgICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNoaWxkTm9kZS5jaGVja2VkKVxyXG4gICAgICAgICAgICBjaGlsZE5vZGUubm9kZXMuZm9yRWFjaCgoZ3JvdXBOb2RlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnRyYXZlcnNlKGdyb3VwTm9kZSwgbmV3RW50aXR5KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIGdldERhdGFGb3JDbG9uaW5nID0gKCkgPT4ge1xyXG4gICAgdGhpcy5kYXRhQ29udGV4dC5lbnRpdHlBY2Nlc3MoKS5jbG9uZSh7XHJcbiAgICAgIHJlZjogdGhpcy5lbnRpdHkuUmVmLFxyXG4gICAgICB0YWJsZU5hbWU6IHRoaXMudGFibGVOYW1lXHJcbiAgICB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGF0YVRyZWUgPSByZXNwb25zZS5Db250ZW50WzBdO1xyXG4gICAgICAgIHRoaXMuYnVpbGRDbG9uZVRyZWUodGhpcy5kYXRhVHJlZSwgdGhpcy5yb290Tm9kZSk7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZGluZ01lc3NhZ2UgPSAnRm9ybWF0dGluZyBkYXRhLi4uKDAvJyArIHRoaXMuY2hpbGRGbGF0TGlzdC5sZW5ndGggKyAnKSByZWNvcmRzJztcclxuICAgICAgICB0aGlzLmFzeW5jRm9yRWFjaFJlY29yZElkKHRoaXMuY2hpbGRGbGF0TGlzdCwgdGhpcy5mZXRjaFJlY29yZElkKS50aGVuKHRoaXMuZG9uZSk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlzcGxheVRyZWUgPSBbdGhpcy5yb290Tm9kZV07XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXg6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJvcicsIHRoaXMudWlOb3RpZmljYXRpb24uZXJyb3IoJ1NlcnZlciBFcnJvcjogJyArIGV4LnN0YXR1cywgW2V4LmVycm9yLk1lc3NhZ2VdKSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNsb25lID0gKCkgPT4ge1xyXG4gICAgbGV0IGNvcGllcyA9IHRoaXMuc2VsZWN0ZWROdW1iZXJPZkNvcGllcy52YWx1ZTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29waWVzOyBpKyspIHtcclxuICAgICAgbGV0IHRhYmxlVHlwZSA9IHRoaXMubW9kZWxUeXBlTG9va3VwLmdldFR5cGUodGhpcy50YWJsZU5hbWUpO1xyXG4gICAgICBsZXQgbmV3RW50aXR5ID0gdGhpcy5kYXRhQ29udGV4dC5lbnRpdHlBY2Nlc3MoKS5hZGQodGFibGVUeXBlLCB0aGlzLmNvbnRleHRGaWx0ZXJzKTtcclxuICAgICAgdHlwZSBPYmplY3RLZXkgPSBrZXlvZiB0eXBlb2YgbmV3RW50aXR5O1xyXG4gICAgICB0aGlzLmdldFByb3RvdHlwZVByb3BlcnRpZXModGhpcy5lbnRpdHkpLmZvckVhY2goKHByb3BlcnR5TmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydHlJc0FsbG93ZWQocHJvcGVydHlOYW1lLCB0aGlzLnRhYmxlTmFtZSkpIHtcclxuICAgICAgICAgIG5ld0VudGl0eVtwcm9wZXJ0eU5hbWUgYXMgT2JqZWN0S2V5XSA9IHRoaXMuZW50aXR5W3Byb3BlcnR5TmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIG5ld0VudGl0eS5zZXRQcm9wZXJ0eSEoJ19hc3NvY2lhdGVkRGF0YUNhY2hlZCcsIHRydWUpO1xyXG5cclxuICAgICAgdGhpcy50cmF2ZXJzZSh0aGlzLmRpc3BsYXlUcmVlWzBdLCBuZXdFbnRpdHkpO1xyXG4gICAgICAvL3RoaXMudmlldy5kYXRhLmFkZChuZXdFbnRpdHkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy53aW5kb3dFdmVudEhhbmRsZXIuY2xvc2UoKTtcclxuICB9O1xyXG5cclxuICBvbkNhbmNlbCA9ICgpID0+IHtcclxuICAgIHRoaXMud2luZG93RXZlbnRIYW5kbGVyLmNsb3NlKCk7XHJcbiAgfTtcclxuXHJcbiAgb25FeHBhbmRDbGlja2VkID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jaGlsZEZsYXRMaXN0LmZpbmQoKG5vZGU6IE5vZGUpID0+IHsgbm9kZS5zaG93RW50aXRpZXMgPSB0cnVlOyB9KTtcclxuICB9XHJcbiAgICAgXHJcbiAgb25Db2xsYXBzZUNsaWNrZWQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNoaWxkRmxhdExpc3QuZmluZCgobm9kZTogTm9kZSkgPT4geyBub2RlLnNob3dFbnRpdGllcyA9IGZhbHNlOyB9KTtcclxuICB9XHJcblxyXG4gIG9uTnVtYmVyT2ZDb3BpZXNDaGFuZ2VkID0gKGV2ZW50OiBhbnkpID0+IHtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudGFibGVOYW1lID0gdGhpcy52aWV3LndpbmRvdy50YWJsZU5hbWU7XHJcbiAgICB0aGlzLmVudGl0aWVzID0gdGhpcy52aWV3LmVudGl0aWVzIGFzIGFueTtcclxuICAgIHRoaXMuZW50aXR5ID0gdGhpcy5lbnRpdGllc1t0aGlzLnZpZXcuZW50aXR5SW5kZXhdO1xyXG4gICAgdGhpcy5yb290Tm9kZSA9IG5ldyBOb2RlKG51bGwsIHRoaXMudGFibGVOYW1lLCB0aGlzLnRhYmxlTmFtZSwgZmFsc2UsIHRydWUsIG51bGwsIG51bGwsIHRydWUsIG51bGwsIG51bGwpO1xyXG4gICAgdGhpcy5zZXRFbnRpdHlEaXNwbGF5VmFsdWVzKHRoaXMudmlldy53aW5kb3cudGFibGVOYW1lKTtcclxuICAgIHRoaXMuZ2V0RGF0YUZvckNsb25pbmcoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5kYXRhVHJlZS5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5mbGF0TGlzdC5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5jaGlsZEZsYXRMaXN0Lmxlbmd0aCA9IDA7XHJcbiAgfVxyXG59XHJcblxyXG5jbGFzcyBOb2RlIHtcclxuICByZWY6IG51bWJlciB8IG51bGw7XHJcbiAgdGFibGVOYW1lOiBzdHJpbmc7XHJcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcclxuICBjaGVja2VkOiBib29sZWFuO1xyXG4gIGNoaWxkOiBhbnk7XHJcbiAgY2hpbGROb2RlczogYW55O1xyXG4gIHNob3dFbnRpdGllczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHBhdGhGcm9tUm9vdDogc3RyaW5nIHwgbnVsbDtcclxuICBub2RlczogTm9kZVtdID0gW107XHJcbiAgcm9vdDogYW55O1xyXG4gIHBhcmVudDogYW55O1xyXG4gIGVudGl0eTogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHJlZjogbnVtYmVyIHwgbnVsbCxcclxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxyXG4gICAgZGlzcGxheU5hbWU6IHN0cmluZyxcclxuICAgIGNoaWxkOiBhbnksXHJcbiAgICBjaGVja2VkOiBib29sZWFuLFxyXG4gICAgY2hpbGRFbnRpdGllczogYW55LFxyXG4gICAgcGF0aEZyb21Sb290OiBzdHJpbmcgfCBudWxsLFxyXG4gICAgcm9vdDogYm9vbGVhbixcclxuICAgIHBhcmVudDogYW55LFxyXG4gICAgZW50aXR5OiBhbnkpIHtcclxuICAgIHRoaXMucmVmID0gcmVmO1xyXG4gICAgdGhpcy50YWJsZU5hbWUgPSB0YWJsZU5hbWU7XHJcbiAgICB0aGlzLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XHJcbiAgICB0aGlzLmNoZWNrZWQgPSBjaGVja2VkO1xyXG4gICAgdGhpcy5jaGlsZCA9IGNoaWxkO1xyXG4gICAgdGhpcy5jaGlsZE5vZGVzID0gY2hpbGRFbnRpdGllcztcclxuICAgIHRoaXMucGF0aEZyb21Sb290ID0gcGF0aEZyb21Sb290O1xyXG4gICAgdGhpcy5yb290ID0gcm9vdDtcclxuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xyXG4gICAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7XHJcbiAgfVxyXG5cclxuICBvbkdyb3VwRGlzcGxheSA9ICgpID0+IHtcclxuICAgIHZhciBjdXJyZW50VmFsdWUgPSB0aGlzLnNob3dFbnRpdGllcyA9ICF0aGlzLnNob3dFbnRpdGllcztcclxuICAgIHRoaXMubm9kZXMuZmluZCgobjogYW55KSA9PiB7XHJcbiAgICAgIG4uc2hvd0VudGl0aWVzID0gY3VycmVudFZhbHVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNoZWNrZWRDaGFuZ2VkID0gKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuY2hlY2tlZCkge1xyXG4gICAgICBpZiAodGhpcy5jaGlsZCkge1xyXG4gICAgICAgIHZhciBwID0gdGhpcy5wYXJlbnQ7XHJcbiAgICAgICAgd2hpbGUgKHApIHtcclxuICAgICAgICAgIHAuY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICBwID0gcC5wYXJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubm9kZXMuZmluZCgobjogYW55KSA9PiB7IG4uY2hlY2tlZCA9IHRydWU7IH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5jaGlsZCkge1xyXG4gICAgICAgIHZhciBhbGxVbmNoZWNrZWQgPSB0aGlzLnBhcmVudC5ub2Rlcy5ldmVyeSgobjogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gbi5jaGVja2VkID09PSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoYWxsVW5jaGVja2VkKVxyXG4gICAgICAgICAgdGhpcy5wYXJlbnQuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciB1bmNoZWNrQ2hpbGROb2RlcyA9IChub2RlOiBhbnkpID0+IHtcclxuICAgICAgICAgIG5vZGUubm9kZXMuZmluZCgobjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHVuY2hlY2tDaGlsZE5vZGVzKG4pO1xyXG4gICAgICAgICAgICBuLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5ub2Rlcy5maW5kKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgIHVuY2hlY2tDaGlsZE5vZGVzKG4pO1xyXG4gICAgICAgICAgbi5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbiIsIjxkaXY+XHJcbiAgPHRydS10b29sYmFyPlxyXG4gICAgPHRydS10b29sYmFyLWJ1dHRvbiBbaWNvbl09XCInZXhwYW5kLWljb24nXCIgW3Rvb2x0aXBdPVwiJ0V4cGFuZCdcIiBbZGlzYWJsZWRdPVwibG9hZGluZ1wiIChvbkNsaWNrKT1cIm9uRXhwYW5kQ2xpY2tlZCgpXCI+PC90cnUtdG9vbGJhci1idXR0b24+XHJcbiAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIidjb2xsYXBzZS1pY29uJ1wiIFt0b29sdGlwXT1cIidDb2xsYXBzZSdcIiBbZGlzYWJsZWRdPVwibG9hZGluZ1wiIChvbkNsaWNrKT1cIm9uQ29sbGFwc2VDbGlja2VkKClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgIDx0cnUtdG9vbGJhci10ZXh0IFt0ZXh0XT1cIidDb3BpZXM6J1wiPjwvdHJ1LXRvb2xiYXItdGV4dD5cclxuICAgIDx0cnUtdG9vbGJhci1kcm9wZG93biBbb3B0aW9uc109XCJudW1iZXJPZkNvcGllc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZE9wdGlvbildPVwic2VsZWN0ZWROdW1iZXJPZkNvcGllc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25OdW1iZXJPZkNvcGllc0NoYW5nZWQoJGV2ZW50KVwiPlxyXG4gICAgPC90cnUtdG9vbGJhci1kcm9wZG93bj5cclxuICA8L3RydS10b29sYmFyPlxyXG4gIDxkaXYgY2xhc3M9XCJ0cnUtZGlhbG9nLWNvbnRlbnQgY2xvbmVcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZ3JvdXBOb2RlUmVuZGVyZXIgbGV0LWRhdGE+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCIhZGF0YS5jaGlsZCB8fCBkYXRhLnNob3dFbnRpdGllc1wiXHJcbiAgICAgICAgICAgY2xhc3M9XCJjbG9uZS1tb2RhbC10cmVlLWdyb3VwXCI+XHJcbiAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiZGF0YS5jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgKGNsaWNrKT1cImRhdGEub25DaGVja2VkQ2hhbmdlZCgpXCJcclxuICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRhdGEucm9vdFwiXHJcbiAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiIC8+XHJcbiAgICAgICAgPGEgKGNsaWNrKT1cImRhdGEub25Hcm91cERpc3BsYXlOYW1lQ2xpY2tlZCgpXCJcclxuICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Nsb25lLW1vZGFsLXRyZWUtZ3JvdXAtcm9vdC1uYW1lJzogZGF0YS5yb290IHx8IGRhdGEuY2hpbGR9XCJcclxuICAgICAgICAgICBbbmdTdHlsZV09XCJ7J21heC13aWR0aCc6IGRhdGEuY2hpbGROb2RlID8gJzMwMHB4JyA6ICdhdXRvJ31cIj57e2RhdGEuZGlzcGxheU5hbWV9fTwvYT5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cIiFkYXRhLnJvb3QgJiYgIWRhdGEuY2hpbGRcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2xvbmUtbW9kYWwtdHJlZS1ncm91cC1jb3VudFwiPih7e2RhdGEubm9kZXMubGVuZ3RofX0pPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPHVsPlxyXG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZGF0YSBvZiBkYXRhLm5vZGVzOyBsZXQgbGFzdD1sYXN0XCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JvdXBOb2RlUmVuZGVyZXI7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGRhdGF9XCIgW2F0dHIucmVhZHldPVwibGFzdCA/IHRydWUgOiBmYWxzZVwiPjwvZGl2PlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgIDwvdWw+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPGRpdiAqbmdJZj1cImxvYWRpbmdNZXNzYWdlXCJcclxuICAgICAgICAgY2xhc3M9XCJjbG9uZS1tb2RhbC1sb2FkaW5nXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiY2xvbmUtbW9kYWwtbG9hZGluZy1tZXNzYWdlXCI+e3tsb2FkaW5nTWVzc2FnZX19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZG9uZVByb2Nlc3NpbmdcIlxyXG4gICAgICAgICBjbGFzcz1cImNsb25lLW1vZGFsLXRyZWVcIj5cclxuICAgICAgPHVsPlxyXG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZGF0YSBvZiBkaXNwbGF5VHJlZTsgbGV0IGxhc3Q9bGFzdFwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdUZW1wbGF0ZU91dGxldD1cImdyb3VwTm9kZVJlbmRlcmVyOyBjb250ZXh0OiB7JGltcGxpY2l0OiBkYXRhfVwiIFthdHRyLnJlYWR5XT1cImxhc3QgPyB0cnVlIDogZmFsc2VcIj48L2Rpdj5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICA8L3VsPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInRydS1kaWFsb2ctZm9vdGVyXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9uQ2xvbmUoKVwiIChrZXl1cC5lbnRlcik9XCJvbkNsb25lKClcIj5DbG9uZTwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
@@ -5632,6 +5632,10 @@ class TruCloneView extends TruViewBase {
|
|
|
5632
5632
|
modelTypeLookup;
|
|
5633
5633
|
modelNavigationPropertiesLookup;
|
|
5634
5634
|
uiNotification;
|
|
5635
|
+
set ready(isReady) {
|
|
5636
|
+
if (isReady)
|
|
5637
|
+
this.done();
|
|
5638
|
+
}
|
|
5635
5639
|
loading = true;
|
|
5636
5640
|
loadingMessage = 'Searching for related records...';
|
|
5637
5641
|
numberOfCopies;
|
|
@@ -5840,8 +5844,10 @@ class TruCloneView extends TruViewBase {
|
|
|
5840
5844
|
this.windowEventHandler.close();
|
|
5841
5845
|
};
|
|
5842
5846
|
onExpandClicked = () => {
|
|
5847
|
+
this.childFlatList.find((node) => { node.showEntities = true; });
|
|
5843
5848
|
};
|
|
5844
5849
|
onCollapseClicked = () => {
|
|
5850
|
+
this.childFlatList.find((node) => { node.showEntities = false; });
|
|
5845
5851
|
};
|
|
5846
5852
|
onNumberOfCopiesChanged = (event) => {
|
|
5847
5853
|
};
|
|
@@ -5859,11 +5865,11 @@ class TruCloneView extends TruViewBase {
|
|
|
5859
5865
|
this.childFlatList.length = 0;
|
|
5860
5866
|
}
|
|
5861
5867
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruCloneView, deps: [{ token: TruTextManager }, { token: TruWindowEventHandler }, { token: TruDataContext }, { token: TruModelTableLookup }, { token: TruModelPropertyLookup }, { token: TruModelTypeLookup }, { token: TruModelNavigationPropertiesLookup }, { token: TruUiNotification }], target: i0.ɵɵFactoryTarget.Component });
|
|
5862
|
-
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]=\"loading\" (onClick)=\"onExpandClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'collapse-icon'\" [tooltip]=\"'Collapse'\" [disabled]=\"loading\" (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]=\"loading\"\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\">\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\">\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()\">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-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:
|
|
5868
|
+
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]=\"loading\" (onClick)=\"onExpandClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'collapse-icon'\" [tooltip]=\"'Collapse'\" [disabled]=\"loading\" (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]=\"loading\"\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\">\r\n <div *ngTemplateOutlet=\"groupNodeRenderer; context: {$implicit: data}\" [attr.ready]=\"last ? true : false\"></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\">\r\n <div *ngTemplateOutlet=\"groupNodeRenderer; context: {$implicit: data}\" [attr.ready]=\"last ? true : false\"></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()\">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: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i8.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: TruToolbar, selector: "tru-toolbar", inputs: ["config"] }, { kind: "component", type: TruToolbarButton, selector: "tru-toolbar-button", inputs: ["config", "icon", "text", "disabled", "tooltip", "type"], outputs: ["onClick", "onKeydown"] }, { kind: "component", type: TruToolbarDropdown, selector: "tru-toolbar-dropdown", inputs: ["config", "options", "tooltip", "multiple", "filterable", "filterTooltip", "width", "selectedOption", "disabled"], outputs: ["selectedOptionChange", "selectionChange"] }, { kind: "component", type: TruToolbarText, selector: "tru-toolbar-text", inputs: ["config", "icon", "text", "tooltip"] }] });
|
|
5863
5869
|
}
|
|
5864
5870
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruCloneView, decorators: [{
|
|
5865
5871
|
type: Component,
|
|
5866
|
-
args: [{ selector: 'tru-clone-view', template: "<div>\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'expand-icon'\" [tooltip]=\"'Expand'\" [disabled]=\"loading\" (onClick)=\"onExpandClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'collapse-icon'\" [tooltip]=\"'Collapse'\" [disabled]=\"loading\" (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]=\"loading\"\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\">\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\">\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()\">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-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:
|
|
5872
|
+
args: [{ selector: 'tru-clone-view', template: "<div>\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'expand-icon'\" [tooltip]=\"'Expand'\" [disabled]=\"loading\" (onClick)=\"onExpandClicked()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'collapse-icon'\" [tooltip]=\"'Collapse'\" [disabled]=\"loading\" (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]=\"loading\"\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\">\r\n <div *ngTemplateOutlet=\"groupNodeRenderer; context: {$implicit: data}\" [attr.ready]=\"last ? true : false\"></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\">\r\n <div *ngTemplateOutlet=\"groupNodeRenderer; context: {$implicit: data}\" [attr.ready]=\"last ? true : false\"></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()\">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"] }]
|
|
5867
5873
|
}], ctorParameters: () => [{ type: TruTextManager }, { type: TruWindowEventHandler }, { type: TruDataContext }, { type: TruModelTableLookup }, { type: TruModelPropertyLookup }, { type: TruModelTypeLookup }, { type: TruModelNavigationPropertiesLookup }, { type: TruUiNotification }] });
|
|
5868
5874
|
class Node {
|
|
5869
5875
|
ref;
|
|
@@ -5874,7 +5880,7 @@ class Node {
|
|
|
5874
5880
|
childNodes;
|
|
5875
5881
|
showEntities = false;
|
|
5876
5882
|
pathFromRoot;
|
|
5877
|
-
nodes;
|
|
5883
|
+
nodes = [];
|
|
5878
5884
|
root;
|
|
5879
5885
|
parent;
|
|
5880
5886
|
entity;
|