ng-zenduit 1.0.6 → 1.0.7
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.
|
@@ -469,12 +469,17 @@ export class ZenduFilterComponent {
|
|
|
469
469
|
handleCustomDateRangeClick(item) {
|
|
470
470
|
this.selectedDateRangeOptions[item.key] = "Custom";
|
|
471
471
|
}
|
|
472
|
+
handleEndDateChange(item) {
|
|
473
|
+
if (!item.showTime) {
|
|
474
|
+
item.dateRange.end = moment(item.dateRange.end).endOf('day').toDate();
|
|
475
|
+
}
|
|
476
|
+
}
|
|
472
477
|
}
|
|
473
478
|
ZenduFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
474
|
-
ZenduFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduFilterComponent, selector: "zen-filter", inputs: { config: "config", filter: "filter", position: "position", resetBehavior: "resetBehavior", isVisible: "isVisible", customTrigger: "customTrigger", imageUrl: "imageUrl", label: "label", showOptions: "showOptions", customOptions: "customOptions" }, outputs: { filterChange: "filterChange", isVisibleChange: "isVisibleChange" }, host: { listeners: { "window:mousedown": "outsideHandling($event)", "window:resize": "windowSizeHandling($event)", "window:scroll": "windowScroll($event)", "window:wheel": "handleMouseScroll($event)", "window:keydown": "onWindowKeyDown($event)" } }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }, { propertyName: "_componentElement", first: true, predicate: ["mainComponent"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"filters-component\"\n\t #mainComponent\n\t click-out=\"isVisible && hide()\">\n\n\t<ng-container *ngIf=\"!customTrigger\">\n\t\t<button (click)=\"toggle()\"\n\t\t\t\tclass=\"button-stroked filter {{isApplied ? 'applied' : ''}}\">\n\t\t\t<zen-icon [src]=\"imageUrl\"\n\t\t\t\t\t *ngIf=\"imageUrl\"></zen-icon>\n\t\t\t<i class=\"filter-icon material-icons\"\n\t\t\t *ngIf=\"!imageUrl\">filter_list</i>\n\t\t\t<span *ngIf=\"label\">{{ label }}</span>\n\t\t</button>\n\t</ng-container>\n\n\t<ng-content *ngIf=\"customTrigger\"></ng-content>\n\n\t<div [hidden]=\"!isVisible\"\n\t\t class=\"action-menu menu-content\"\n\t\t [class.customTrigger]=\"customTrigger\"\n\t\t [ngStyle]=\"{ 'left': menuLeft, 'right': menuRight, 'top': menuTop, 'bottom': menuBottom }\">\n\t\t<div class=\"action-menu-header\">\n\t\t\t<zen-search-box [(text)]=\"searchText\"\n\t\t\t\t\t\t\t#searchBox\n\t\t\t\t\t\t\t(textChange)=\"searchTextChanged()\"></zen-search-box>\n\t\t</div>\n\n\t\t<div class=\"action-menu-body items-wrapper\">\n\t\t\t<ng-container *ngIf=\"errorMessage.length\">\n\t\t\t\t<li *ngFor=\"let item of errorMessage\" class=\"error-msg\">{{item}}</li>\n\t\t\t</ng-container>\n\t\t\t\n\t\t\t<div *ngFor=\"let item of config.items\">\n\t\t\t\t<div class=\"menu-item\"\n\t\t\t\t\t *ngIf=\"isMenuIsVisible(item)\">\n\n\t\t\t\t\t<!-- Divider between two filter -->\n\t\t\t\t\t<div *ngIf=\"item.type === 'divider'\">\n\t\t\t\t\t\t<p class=\"filter-divider\"></p>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<!-- Boolean toggle -->\n\t\t\t\t\t<div *ngIf=\"item.type === 'toggle'\"\n\t\t\t\t\t\t class=\"action-item toggle-row\">\n\t\t\t\t\t\t<div>{{item.title}}</div>\n\t\t\t\t\t\t<zen-toggle-slide [(enabled)]=\"item.enabled\"></zen-toggle-slide>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<button class=\"action-item expander-item\"\n\t\t\t\t\t\t\t*ngIf=\"item.type != 'toggle' && item.type != 'divider' && !item.disableCollapse\"\n\t\t\t\t\t\t\t(click)=\"item.expanded = !item.expanded\"\n\t\t\t\t\t\t\t[ngClass]=\"{'active': isItemActive(item), 'expanded': item.expanded}\">\n\t\t\t\t\t\t<i class=\"material-icons expand-icon\"\n\t\t\t\t\t\t [ngClass]=\"{'active': item.expanded}\">expand_more</i>\n\t\t\t\t\t\t{{item.title}}\n\t\t\t\t\t</button>\n\n\t\t\t\t\t<ng-container *ngIf=\"item.expanded || item.disableCollapse\">\n\t\t\t\t\t\t<div [ngSwitch]=\"item.type\">\n\t\t\t\t\t\t\t<!-- Multiselect -->\n\t\t\t\t\t\t\t<div *ngSwitchCase=\"'multiselect'\">\n\t\t\t\t\t\t\t\t<div class=\"action-item-checkbox ds-item select-all\">\n\t\t\t\t\t\t\t\t\t<zen-checkbox *ngIf=\"item.dataSource.length === item.filteredDataSource.length\"\n\t\t\t\t\t\t\t\t\t\t\t\t [(checked)]=\"item.isSelectedAll\"\n\t\t\t\t\t\t\t\t\t\t\t\t [indeterminate]=\"isItemActive(item) && !item.isSelectedAll\"\n\t\t\t\t\t\t\t\t\t\t\t\t label=\"Select All\"\n\t\t\t\t\t\t\t\t\t\t\t\t (checkedChange)=\"onSelectAll(item)\">\n\t\t\t\t\t\t\t\t\t</zen-checkbox>\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t<div *ngFor=\"let dsItem of item.filteredDataSource\"\n\t\t\t\t\t\t\t\t\t class=\"action-item-checkbox ds-item\">\n\t\t\t\t\t\t\t\t\t<zen-checkbox [(checked)]=\"dsItem.checked\"\n\t\t\t\t\t\t\t\t\t\t\t\t [imageUrl]=\"dsItem.imageUrl\"\n\t\t\t\t\t\t\t\t\t\t\t\t [label]=\"dsItem.name\"></zen-checkbox>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Date range picker -->\n\t\t\t\t\t\t\t<div *ngSwitchCase=\"'dateRange'\">\n <!-- Options date range view -->\n <ng-container *ngIf=\"item.dateRangeOptions?.length\">\n <ng-container *ngFor=\"let option of item.dateRangeOptions\">\n <div class=\"action-item-radio ds-item\"\n [ngClass]=\"{'active': selectedDateRangeOptions[item.key] === option.name}\">\n <zen-radio [value]=\"option.name\"\n [label]=\"option.name\"\n [name]=\"item.key\"\n [selected]=\"selectedDateRangeOptions[item.key] === option.name\"\n (radioChange)=\"handleDateRangeOptionClick(item, option)\"\n ></zen-radio>\n </div>\n </ng-container>\n <div class=\"action-item-radio ds-item\"\n [ngClass]=\"{'active': selectedDateRangeOptions[item.key] === 'Custom'}\">\n <zen-radio [value]=\"'Custom'\"\n [label]=\"'Custom'\"\n [name]=\"item.key\"\n [selected]=\"selectedDateRangeOptions[item.key] === 'Custom'\"\n (radioChange)=\"handleCustomDateRangeClick(item)\"\n ></zen-radio>\n </div>\n <ng-container *ngIf=\"selectedDateRangeOptions[item.key] === 'Custom'\">\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">From:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.start\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\">\n </zen-datepicker>\n </div>\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">To:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.end\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\">\n </zen-datepicker>\n </div>\n </ng-container>\n </ng-container>\n\n <!-- Default date range view -->\n <ng-container *ngIf=\"!item.dateRangeOptions?.length\">\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">From:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.start\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\">\n </zen-datepicker>\n </div>\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">To:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.end\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\">\n </zen-datepicker>\n </div>\n </ng-container>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Date picker -->\n\t\t\t\t\t\t\t<div *ngSwitchCase=\"'date'\">\n\t\t\t\t\t\t\t\t<div class=\"ds-item filter-row\">\n\t\t\t\t\t\t\t\t\t<div class=\"lbl\">Date:</div>\n\t\t\t\t\t\t\t\t\t<zen-datepicker class=\"width-full\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[(date)]=\"item.date\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[showTime]=\"item.showTime\">\n\t\t\t\t\t\t\t\t\t</zen-datepicker>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Number range -->\n\t\t\t\t\t\t\t<div *ngSwitchCase=\"'numberRange'\"\n\t\t\t\t\t\t\t\t class=\"filter-row number-range-row\">\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<div class=\"lbl\">Min:</div>\n\t\t\t\t\t\t\t\t\t<input class=\"material-input\"\n\t\t\t\t\t\t\t\t\t\t [(ngModel)]=\"item.numberRange.from\"\n\t\t\t\t\t\t\t\t\t\t type=\"number\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<div class=\"lbl\">Max:</div>\n\t\t\t\t\t\t\t\t\t<input class=\"material-input\"\n\t\t\t\t\t\t\t\t\t\t [(ngModel)]=\"item.numberRange.to\"\n\t\t\t\t\t\t\t\t\t\t type=\"number\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Radio -->\n\t\t\t\t\t\t\t<div *ngSwitchCase=\"'radio'\">\n\t\t\t\t\t\t\t\t<div *ngFor=\"let option of item.radioOptions\"\n\t\t\t\t\t\t\t\t\t class=\"action-item-radio ds-item\"\n\t\t\t\t\t\t\t\t\t [ngClass]=\"{'active': option.selected}\">\n\t\t\t\t\t\t\t\t\t<zen-radio [value]=\"option.id\"\n\t\t\t\t\t\t\t\t\t\t\t [label]=\"option.name\"\n\t\t\t\t\t\t\t\t\t\t\t [name]=\"item.key\"\n\t\t\t\t\t\t\t\t\t\t\t [imageUrl]=\"option.imageUrl\"\n\t\t\t\t\t\t\t\t\t\t\t [selected]=\"option.selected\"\n\t\t\t\t\t\t\t\t\t\t\t (radioChange)=\"radioChanged($event, item)\"\n\t\t\t\t\t\t\t\t\t\t\t [disabled]=\"option.disabled\"></zen-radio>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</ng-container>\n\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<span *ngIf=\"showNoFilterResult\"\n\t\t\t\t class=\"no-item\">No Results Found..</span>\n\t\t</div>\n\n\t\t<div class=\"action-menu-footer\">\n\t\t\t<button (click)=\"reset()\"\n\t\t\t\t\tclass=\"button-stroked full-width\">\n\t\t\t\tReset\n\t\t\t</button>\n\t\t\t<button (click)=\"apply()\"\n\t\t\t\t\tclass=\"button-flat full-width\">\n\t\t\t\tApply\n\t\t\t</button>\n\t\t</div>\n\n\t</div>\n</div>\n", styles: [".filters-component{display:inline-block;position:relative}.filters-component .filter{color:#828282;position:relative;border-color:#ececed;padding:0 7px;height:38px}.filters-component .filter zen-icon{background:#828282}.filters-component .filter.applied{color:var(--color-primary, #2188d9);background:#f4f9fd;border:1px solid var(--color-primary, #2188d9)}.filters-component .filter.applied zen-icon{background:var(--color-primary, #2188d9)}.filters-component .filter .dot{background:var(--color-primary, #2188d9);width:4px;height:4px;position:absolute;border-radius:50%;left:42px;top:9px}.filters-component .menu-content{width:360px;white-space:initial;position:fixed}.filters-component .menu-content.customTrigger{top:30px}.filters-component .menu-content .items-wrapper{overflow-y:auto;max-height:calc(100vh - 407px);position:relative}.filters-component .menu-content .items-wrapper .expander-item{outline:none;border:none;display:flex;width:100%}.filters-component .menu-content .items-wrapper .action-item{color:#828282}.filters-component .menu-content .items-wrapper .action-item.expanded,.filters-component .menu-content .items-wrapper .action-item.active{background:#f4f9fd;color:#4f4f4f}.filters-component .menu-content .items-wrapper .expand-icon{transition:.3s}.filters-component .menu-content .items-wrapper .expand-icon.active{transform:rotate(180deg)}.filters-component .menu-content .items-wrapper .ds-item{padding-left:48px}.filters-component .menu-content .items-wrapper .no-item,.filters-component .menu-content .items-wrapper .error-msg{color:#dc3e33;display:flex;flex-direction:row;align-items:center;padding:10px 16px;font-weight:400;font-size:14px}.filters-component .menu-content .items-wrapper .select-all{font-weight:500}.filters-component .menu-content .items-wrapper .filter-row{padding:0 16px}.filters-component .menu-content .items-wrapper .filter-row:not(:last-of-type){margin-bottom:20px}.filters-component .menu-content .items-wrapper .filter-row .lbl{color:#60636c;font-size:14px;margin-bottom:8px}.filters-component .menu-content .items-wrapper .filter-row:focus-within .lbl{color:var(--color-primary, #2188d9)}.filters-component .menu-content .items-wrapper .number-range-row{display:flex;margin-left:32px;gap:16px;margin-bottom:10px}.filters-component .menu-content .items-wrapper .toggle-row{justify-content:space-between}.hidden{display:none}:host ::ng-deep zen-radio label{margin:0}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.ZenduCheckboxComponent, selector: "zen-checkbox", inputs: ["checked", "label", "disabled", "disableValueChange", "indeterminate", "imageUrl"], outputs: ["checkedChange"] }, { kind: "component", type: i4.ZenduToggleSlideComponent, selector: "zen-toggle-slide", inputs: ["enabled", "disabled"], outputs: ["enabledChange"] }, { kind: "component", type: i5.ZenduSearchBoxComponent, selector: "zen-search-box", inputs: ["text", "delay", "autoFocus", "placeholder"], outputs: ["textChange"] }, { kind: "component", type: i6.ZenduDatepickerComponent, selector: "zen-datepicker", inputs: ["date", "showTime", "showDate", "containerClass", "minDate", "maxDate", "boxDesign", "highlightDays", "autoConfirm", "hint", "highlightError", "disabled", "readonly", "xPosition", "yPosition"], outputs: ["dateChange"] }, { kind: "component", type: i7.ZenduRadioButtonComponent, selector: "zen-radio", inputs: ["selected", "label", "value", "name", "disabled", "imageUrl"], outputs: ["radioChange"] }, { kind: "component", type: i8.ZenduIconComponent, selector: "zen-icon", inputs: ["src"] }] });
|
|
479
|
+
ZenduFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduFilterComponent, selector: "zen-filter", inputs: { config: "config", filter: "filter", position: "position", resetBehavior: "resetBehavior", isVisible: "isVisible", customTrigger: "customTrigger", imageUrl: "imageUrl", label: "label", showOptions: "showOptions", customOptions: "customOptions" }, outputs: { filterChange: "filterChange", isVisibleChange: "isVisibleChange" }, host: { listeners: { "window:mousedown": "outsideHandling($event)", "window:resize": "windowSizeHandling($event)", "window:scroll": "windowScroll($event)", "window:wheel": "handleMouseScroll($event)", "window:keydown": "onWindowKeyDown($event)" } }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }, { propertyName: "_componentElement", first: true, predicate: ["mainComponent"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"filters-component\"\n\t #mainComponent\n\t click-out=\"isVisible && hide()\">\n\n\t<ng-container *ngIf=\"!customTrigger\">\n\t\t<button (click)=\"toggle()\"\n\t\t\t\tclass=\"button-stroked filter {{isApplied ? 'applied' : ''}}\">\n\t\t\t<zen-icon [src]=\"imageUrl\"\n\t\t\t\t\t *ngIf=\"imageUrl\"></zen-icon>\n\t\t\t<i class=\"filter-icon material-icons\"\n\t\t\t *ngIf=\"!imageUrl\">filter_list</i>\n\t\t\t<span *ngIf=\"label\">{{ label }}</span>\n\t\t</button>\n\t</ng-container>\n\n\t<ng-content *ngIf=\"customTrigger\"></ng-content>\n\n\t<div [hidden]=\"!isVisible\"\n\t\t class=\"action-menu menu-content\"\n\t\t [class.customTrigger]=\"customTrigger\"\n\t\t [ngStyle]=\"{ 'left': menuLeft, 'right': menuRight, 'top': menuTop, 'bottom': menuBottom }\">\n\t\t<div class=\"action-menu-header\">\n\t\t\t<zen-search-box [(text)]=\"searchText\"\n\t\t\t\t\t\t\t#searchBox\n\t\t\t\t\t\t\t(textChange)=\"searchTextChanged()\"></zen-search-box>\n\t\t</div>\n\n\t\t<div class=\"action-menu-body items-wrapper\">\n\t\t\t<ng-container *ngIf=\"errorMessage.length\">\n\t\t\t\t<li *ngFor=\"let item of errorMessage\" class=\"error-msg\">{{item}}</li>\n\t\t\t</ng-container>\n\t\t\t\n\t\t\t<div *ngFor=\"let item of config.items\">\n\t\t\t\t<div class=\"menu-item\"\n\t\t\t\t\t *ngIf=\"isMenuIsVisible(item)\">\n\n\t\t\t\t\t<!-- Divider between two filter -->\n\t\t\t\t\t<div *ngIf=\"item.type === 'divider'\">\n\t\t\t\t\t\t<p class=\"filter-divider\"></p>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<!-- Boolean toggle -->\n\t\t\t\t\t<div *ngIf=\"item.type === 'toggle'\"\n\t\t\t\t\t\t class=\"action-item toggle-row\">\n\t\t\t\t\t\t<div>{{item.title}}</div>\n\t\t\t\t\t\t<zen-toggle-slide [(enabled)]=\"item.enabled\"></zen-toggle-slide>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<button class=\"action-item expander-item\"\n\t\t\t\t\t\t\t*ngIf=\"item.type != 'toggle' && item.type != 'divider' && !item.disableCollapse\"\n\t\t\t\t\t\t\t(click)=\"item.expanded = !item.expanded\"\n\t\t\t\t\t\t\t[ngClass]=\"{'active': isItemActive(item), 'expanded': item.expanded}\">\n\t\t\t\t\t\t<i class=\"material-icons expand-icon\"\n\t\t\t\t\t\t [ngClass]=\"{'active': item.expanded}\">expand_more</i>\n\t\t\t\t\t\t{{item.title}}\n\t\t\t\t\t</button>\n\n\t\t\t\t\t<ng-container *ngIf=\"item.expanded || item.disableCollapse\">\n\t\t\t\t\t\t<div [ngSwitch]=\"item.type\">\n\t\t\t\t\t\t\t<!-- Multiselect -->\n\t\t\t\t\t\t\t<div *ngSwitchCase=\"'multiselect'\">\n\t\t\t\t\t\t\t\t<div class=\"action-item-checkbox ds-item select-all\">\n\t\t\t\t\t\t\t\t\t<zen-checkbox *ngIf=\"item.dataSource.length === item.filteredDataSource.length\"\n\t\t\t\t\t\t\t\t\t\t\t\t [(checked)]=\"item.isSelectedAll\"\n\t\t\t\t\t\t\t\t\t\t\t\t [indeterminate]=\"isItemActive(item) && !item.isSelectedAll\"\n\t\t\t\t\t\t\t\t\t\t\t\t label=\"Select All\"\n\t\t\t\t\t\t\t\t\t\t\t\t (checkedChange)=\"onSelectAll(item)\">\n\t\t\t\t\t\t\t\t\t</zen-checkbox>\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t<div *ngFor=\"let dsItem of item.filteredDataSource\"\n\t\t\t\t\t\t\t\t\t class=\"action-item-checkbox ds-item\">\n\t\t\t\t\t\t\t\t\t<zen-checkbox [(checked)]=\"dsItem.checked\"\n\t\t\t\t\t\t\t\t\t\t\t\t [imageUrl]=\"dsItem.imageUrl\"\n\t\t\t\t\t\t\t\t\t\t\t\t [label]=\"dsItem.name\"></zen-checkbox>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Date range picker -->\n\t\t\t\t\t\t\t<div *ngSwitchCase=\"'dateRange'\">\n <!-- Options date range view -->\n <ng-container *ngIf=\"item.dateRangeOptions?.length\">\n <ng-container *ngFor=\"let option of item.dateRangeOptions\">\n <div class=\"action-item-radio ds-item\"\n [ngClass]=\"{'active': selectedDateRangeOptions[item.key] === option.name}\">\n <zen-radio [value]=\"option.name\"\n [label]=\"option.name\"\n [name]=\"item.key\"\n [selected]=\"selectedDateRangeOptions[item.key] === option.name\"\n (radioChange)=\"handleDateRangeOptionClick(item, option)\"\n ></zen-radio>\n </div>\n </ng-container>\n <div class=\"action-item-radio ds-item\"\n [ngClass]=\"{'active': selectedDateRangeOptions[item.key] === 'Custom'}\">\n <zen-radio [value]=\"'Custom'\"\n [label]=\"'Custom'\"\n [name]=\"item.key\"\n [selected]=\"selectedDateRangeOptions[item.key] === 'Custom'\"\n (radioChange)=\"handleCustomDateRangeClick(item)\"\n ></zen-radio>\n </div>\n <ng-container *ngIf=\"selectedDateRangeOptions[item.key] === 'Custom'\">\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">From:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.start\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\">\n </zen-datepicker>\n </div>\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">To:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.end\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\"\n (dateChange)=\"handleEndDateChange(item)\">\n </zen-datepicker>\n </div>\n </ng-container>\n </ng-container>\n\n <!-- Default date range view -->\n <ng-container *ngIf=\"!item.dateRangeOptions?.length\">\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">From:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.start\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\">\n </zen-datepicker>\n </div>\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">To:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.end\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\"\n (dateChange)=\"handleEndDateChange(item)\">\n </zen-datepicker>\n </div>\n </ng-container>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Date picker -->\n\t\t\t\t\t\t\t<div *ngSwitchCase=\"'date'\">\n\t\t\t\t\t\t\t\t<div class=\"ds-item filter-row\">\n\t\t\t\t\t\t\t\t\t<div class=\"lbl\">Date:</div>\n\t\t\t\t\t\t\t\t\t<zen-datepicker class=\"width-full\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[(date)]=\"item.date\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[showTime]=\"item.showTime\">\n\t\t\t\t\t\t\t\t\t</zen-datepicker>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Number range -->\n\t\t\t\t\t\t\t<div *ngSwitchCase=\"'numberRange'\"\n\t\t\t\t\t\t\t\t class=\"filter-row number-range-row\">\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<div class=\"lbl\">Min:</div>\n\t\t\t\t\t\t\t\t\t<input class=\"material-input\"\n\t\t\t\t\t\t\t\t\t\t [(ngModel)]=\"item.numberRange.from\"\n\t\t\t\t\t\t\t\t\t\t type=\"number\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<div class=\"lbl\">Max:</div>\n\t\t\t\t\t\t\t\t\t<input class=\"material-input\"\n\t\t\t\t\t\t\t\t\t\t [(ngModel)]=\"item.numberRange.to\"\n\t\t\t\t\t\t\t\t\t\t type=\"number\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Radio -->\n\t\t\t\t\t\t\t<div *ngSwitchCase=\"'radio'\">\n\t\t\t\t\t\t\t\t<div *ngFor=\"let option of item.radioOptions\"\n\t\t\t\t\t\t\t\t\t class=\"action-item-radio ds-item\"\n\t\t\t\t\t\t\t\t\t [ngClass]=\"{'active': option.selected}\">\n\t\t\t\t\t\t\t\t\t<zen-radio [value]=\"option.id\"\n\t\t\t\t\t\t\t\t\t\t\t [label]=\"option.name\"\n\t\t\t\t\t\t\t\t\t\t\t [name]=\"item.key\"\n\t\t\t\t\t\t\t\t\t\t\t [imageUrl]=\"option.imageUrl\"\n\t\t\t\t\t\t\t\t\t\t\t [selected]=\"option.selected\"\n\t\t\t\t\t\t\t\t\t\t\t (radioChange)=\"radioChanged($event, item)\"\n\t\t\t\t\t\t\t\t\t\t\t [disabled]=\"option.disabled\"></zen-radio>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</ng-container>\n\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<span *ngIf=\"showNoFilterResult\"\n\t\t\t\t class=\"no-item\">No Results Found..</span>\n\t\t</div>\n\n\t\t<div class=\"action-menu-footer\">\n\t\t\t<button (click)=\"reset()\"\n\t\t\t\t\tclass=\"button-stroked full-width\">\n\t\t\t\tReset\n\t\t\t</button>\n\t\t\t<button (click)=\"apply()\"\n\t\t\t\t\tclass=\"button-flat full-width\">\n\t\t\t\tApply\n\t\t\t</button>\n\t\t</div>\n\n\t</div>\n</div>\n", styles: [".filters-component{display:inline-block;position:relative}.filters-component .filter{color:#828282;position:relative;border-color:#ececed;padding:0 7px;height:38px}.filters-component .filter zen-icon{background:#828282}.filters-component .filter.applied{color:var(--color-primary, #2188d9);background:#f4f9fd;border:1px solid var(--color-primary, #2188d9)}.filters-component .filter.applied zen-icon{background:var(--color-primary, #2188d9)}.filters-component .filter .dot{background:var(--color-primary, #2188d9);width:4px;height:4px;position:absolute;border-radius:50%;left:42px;top:9px}.filters-component .menu-content{width:360px;white-space:initial;position:fixed}.filters-component .menu-content.customTrigger{top:30px}.filters-component .menu-content .items-wrapper{overflow-y:auto;max-height:calc(100vh - 407px);position:relative}.filters-component .menu-content .items-wrapper .expander-item{outline:none;border:none;display:flex;width:100%}.filters-component .menu-content .items-wrapper .action-item{color:#828282}.filters-component .menu-content .items-wrapper .action-item.expanded,.filters-component .menu-content .items-wrapper .action-item.active{background:#f4f9fd;color:#4f4f4f}.filters-component .menu-content .items-wrapper .expand-icon{transition:.3s}.filters-component .menu-content .items-wrapper .expand-icon.active{transform:rotate(180deg)}.filters-component .menu-content .items-wrapper .ds-item{padding-left:48px}.filters-component .menu-content .items-wrapper .no-item,.filters-component .menu-content .items-wrapper .error-msg{color:#dc3e33;display:flex;flex-direction:row;align-items:center;padding:10px 16px;font-weight:400;font-size:14px}.filters-component .menu-content .items-wrapper .select-all{font-weight:500}.filters-component .menu-content .items-wrapper .filter-row{padding:0 16px}.filters-component .menu-content .items-wrapper .filter-row:not(:last-of-type){margin-bottom:20px}.filters-component .menu-content .items-wrapper .filter-row .lbl{color:#60636c;font-size:14px;margin-bottom:8px}.filters-component .menu-content .items-wrapper .filter-row:focus-within .lbl{color:var(--color-primary, #2188d9)}.filters-component .menu-content .items-wrapper .number-range-row{display:flex;margin-left:32px;gap:16px;margin-bottom:10px}.filters-component .menu-content .items-wrapper .toggle-row{justify-content:space-between}.hidden{display:none}:host ::ng-deep zen-radio label{margin:0}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.ZenduCheckboxComponent, selector: "zen-checkbox", inputs: ["checked", "label", "disabled", "disableValueChange", "indeterminate", "imageUrl"], outputs: ["checkedChange"] }, { kind: "component", type: i4.ZenduToggleSlideComponent, selector: "zen-toggle-slide", inputs: ["enabled", "disabled"], outputs: ["enabledChange"] }, { kind: "component", type: i5.ZenduSearchBoxComponent, selector: "zen-search-box", inputs: ["text", "delay", "autoFocus", "placeholder"], outputs: ["textChange"] }, { kind: "component", type: i6.ZenduDatepickerComponent, selector: "zen-datepicker", inputs: ["date", "showTime", "showDate", "containerClass", "minDate", "maxDate", "boxDesign", "highlightDays", "autoConfirm", "hint", "highlightError", "disabled", "readonly", "xPosition", "yPosition"], outputs: ["dateChange"] }, { kind: "component", type: i7.ZenduRadioButtonComponent, selector: "zen-radio", inputs: ["selected", "label", "value", "name", "disabled", "imageUrl"], outputs: ["radioChange"] }, { kind: "component", type: i8.ZenduIconComponent, selector: "zen-icon", inputs: ["src"] }] });
|
|
475
480
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduFilterComponent, decorators: [{
|
|
476
481
|
type: Component,
|
|
477
|
-
args: [{ selector: 'zen-filter', template: "<div class=\"filters-component\"\n\t #mainComponent\n\t click-out=\"isVisible && hide()\">\n\n\t<ng-container *ngIf=\"!customTrigger\">\n\t\t<button (click)=\"toggle()\"\n\t\t\t\tclass=\"button-stroked filter {{isApplied ? 'applied' : ''}}\">\n\t\t\t<zen-icon [src]=\"imageUrl\"\n\t\t\t\t\t *ngIf=\"imageUrl\"></zen-icon>\n\t\t\t<i class=\"filter-icon material-icons\"\n\t\t\t *ngIf=\"!imageUrl\">filter_list</i>\n\t\t\t<span *ngIf=\"label\">{{ label }}</span>\n\t\t</button>\n\t</ng-container>\n\n\t<ng-content *ngIf=\"customTrigger\"></ng-content>\n\n\t<div [hidden]=\"!isVisible\"\n\t\t class=\"action-menu menu-content\"\n\t\t [class.customTrigger]=\"customTrigger\"\n\t\t [ngStyle]=\"{ 'left': menuLeft, 'right': menuRight, 'top': menuTop, 'bottom': menuBottom }\">\n\t\t<div class=\"action-menu-header\">\n\t\t\t<zen-search-box [(text)]=\"searchText\"\n\t\t\t\t\t\t\t#searchBox\n\t\t\t\t\t\t\t(textChange)=\"searchTextChanged()\"></zen-search-box>\n\t\t</div>\n\n\t\t<div class=\"action-menu-body items-wrapper\">\n\t\t\t<ng-container *ngIf=\"errorMessage.length\">\n\t\t\t\t<li *ngFor=\"let item of errorMessage\" class=\"error-msg\">{{item}}</li>\n\t\t\t</ng-container>\n\t\t\t\n\t\t\t<div *ngFor=\"let item of config.items\">\n\t\t\t\t<div class=\"menu-item\"\n\t\t\t\t\t *ngIf=\"isMenuIsVisible(item)\">\n\n\t\t\t\t\t<!-- Divider between two filter -->\n\t\t\t\t\t<div *ngIf=\"item.type === 'divider'\">\n\t\t\t\t\t\t<p class=\"filter-divider\"></p>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<!-- Boolean toggle -->\n\t\t\t\t\t<div *ngIf=\"item.type === 'toggle'\"\n\t\t\t\t\t\t class=\"action-item toggle-row\">\n\t\t\t\t\t\t<div>{{item.title}}</div>\n\t\t\t\t\t\t<zen-toggle-slide [(enabled)]=\"item.enabled\"></zen-toggle-slide>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<button class=\"action-item expander-item\"\n\t\t\t\t\t\t\t*ngIf=\"item.type != 'toggle' && item.type != 'divider' && !item.disableCollapse\"\n\t\t\t\t\t\t\t(click)=\"item.expanded = !item.expanded\"\n\t\t\t\t\t\t\t[ngClass]=\"{'active': isItemActive(item), 'expanded': item.expanded}\">\n\t\t\t\t\t\t<i class=\"material-icons expand-icon\"\n\t\t\t\t\t\t [ngClass]=\"{'active': item.expanded}\">expand_more</i>\n\t\t\t\t\t\t{{item.title}}\n\t\t\t\t\t</button>\n\n\t\t\t\t\t<ng-container *ngIf=\"item.expanded || item.disableCollapse\">\n\t\t\t\t\t\t<div [ngSwitch]=\"item.type\">\n\t\t\t\t\t\t\t<!-- Multiselect -->\n\t\t\t\t\t\t\t<div *ngSwitchCase=\"'multiselect'\">\n\t\t\t\t\t\t\t\t<div class=\"action-item-checkbox ds-item select-all\">\n\t\t\t\t\t\t\t\t\t<zen-checkbox *ngIf=\"item.dataSource.length === item.filteredDataSource.length\"\n\t\t\t\t\t\t\t\t\t\t\t\t [(checked)]=\"item.isSelectedAll\"\n\t\t\t\t\t\t\t\t\t\t\t\t [indeterminate]=\"isItemActive(item) && !item.isSelectedAll\"\n\t\t\t\t\t\t\t\t\t\t\t\t label=\"Select All\"\n\t\t\t\t\t\t\t\t\t\t\t\t (checkedChange)=\"onSelectAll(item)\">\n\t\t\t\t\t\t\t\t\t</zen-checkbox>\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t<div *ngFor=\"let dsItem of item.filteredDataSource\"\n\t\t\t\t\t\t\t\t\t class=\"action-item-checkbox ds-item\">\n\t\t\t\t\t\t\t\t\t<zen-checkbox [(checked)]=\"dsItem.checked\"\n\t\t\t\t\t\t\t\t\t\t\t\t [imageUrl]=\"dsItem.imageUrl\"\n\t\t\t\t\t\t\t\t\t\t\t\t [label]=\"dsItem.name\"></zen-checkbox>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Date range picker -->\n\t\t\t\t\t\t\t<div *ngSwitchCase=\"'dateRange'\">\n <!-- Options date range view -->\n <ng-container *ngIf=\"item.dateRangeOptions?.length\">\n <ng-container *ngFor=\"let option of item.dateRangeOptions\">\n <div class=\"action-item-radio ds-item\"\n [ngClass]=\"{'active': selectedDateRangeOptions[item.key] === option.name}\">\n <zen-radio [value]=\"option.name\"\n [label]=\"option.name\"\n [name]=\"item.key\"\n [selected]=\"selectedDateRangeOptions[item.key] === option.name\"\n (radioChange)=\"handleDateRangeOptionClick(item, option)\"\n ></zen-radio>\n </div>\n </ng-container>\n <div class=\"action-item-radio ds-item\"\n [ngClass]=\"{'active': selectedDateRangeOptions[item.key] === 'Custom'}\">\n <zen-radio [value]=\"'Custom'\"\n [label]=\"'Custom'\"\n [name]=\"item.key\"\n [selected]=\"selectedDateRangeOptions[item.key] === 'Custom'\"\n (radioChange)=\"handleCustomDateRangeClick(item)\"\n ></zen-radio>\n </div>\n <ng-container *ngIf=\"selectedDateRangeOptions[item.key] === 'Custom'\">\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">From:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.start\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\">\n </zen-datepicker>\n </div>\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">To:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.end\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\">\n </zen-datepicker>\n </div>\n </ng-container>\n </ng-container>\n\n <!-- Default date range view -->\n <ng-container *ngIf=\"!item.dateRangeOptions?.length\">\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">From:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.start\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\">\n </zen-datepicker>\n </div>\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">To:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.end\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\">\n </zen-datepicker>\n </div>\n </ng-container>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Date picker -->\n\t\t\t\t\t\t\t<div *ngSwitchCase=\"'date'\">\n\t\t\t\t\t\t\t\t<div class=\"ds-item filter-row\">\n\t\t\t\t\t\t\t\t\t<div class=\"lbl\">Date:</div>\n\t\t\t\t\t\t\t\t\t<zen-datepicker class=\"width-full\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[(date)]=\"item.date\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[showTime]=\"item.showTime\">\n\t\t\t\t\t\t\t\t\t</zen-datepicker>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Number range -->\n\t\t\t\t\t\t\t<div *ngSwitchCase=\"'numberRange'\"\n\t\t\t\t\t\t\t\t class=\"filter-row number-range-row\">\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<div class=\"lbl\">Min:</div>\n\t\t\t\t\t\t\t\t\t<input class=\"material-input\"\n\t\t\t\t\t\t\t\t\t\t [(ngModel)]=\"item.numberRange.from\"\n\t\t\t\t\t\t\t\t\t\t type=\"number\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<div class=\"lbl\">Max:</div>\n\t\t\t\t\t\t\t\t\t<input class=\"material-input\"\n\t\t\t\t\t\t\t\t\t\t [(ngModel)]=\"item.numberRange.to\"\n\t\t\t\t\t\t\t\t\t\t type=\"number\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Radio -->\n\t\t\t\t\t\t\t<div *ngSwitchCase=\"'radio'\">\n\t\t\t\t\t\t\t\t<div *ngFor=\"let option of item.radioOptions\"\n\t\t\t\t\t\t\t\t\t class=\"action-item-radio ds-item\"\n\t\t\t\t\t\t\t\t\t [ngClass]=\"{'active': option.selected}\">\n\t\t\t\t\t\t\t\t\t<zen-radio [value]=\"option.id\"\n\t\t\t\t\t\t\t\t\t\t\t [label]=\"option.name\"\n\t\t\t\t\t\t\t\t\t\t\t [name]=\"item.key\"\n\t\t\t\t\t\t\t\t\t\t\t [imageUrl]=\"option.imageUrl\"\n\t\t\t\t\t\t\t\t\t\t\t [selected]=\"option.selected\"\n\t\t\t\t\t\t\t\t\t\t\t (radioChange)=\"radioChanged($event, item)\"\n\t\t\t\t\t\t\t\t\t\t\t [disabled]=\"option.disabled\"></zen-radio>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</ng-container>\n\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<span *ngIf=\"showNoFilterResult\"\n\t\t\t\t class=\"no-item\">No Results Found..</span>\n\t\t</div>\n\n\t\t<div class=\"action-menu-footer\">\n\t\t\t<button (click)=\"reset()\"\n\t\t\t\t\tclass=\"button-stroked full-width\">\n\t\t\t\tReset\n\t\t\t</button>\n\t\t\t<button (click)=\"apply()\"\n\t\t\t\t\tclass=\"button-flat full-width\">\n\t\t\t\tApply\n\t\t\t</button>\n\t\t</div>\n\n\t</div>\n</div>\n", styles: [".filters-component{display:inline-block;position:relative}.filters-component .filter{color:#828282;position:relative;border-color:#ececed;padding:0 7px;height:38px}.filters-component .filter zen-icon{background:#828282}.filters-component .filter.applied{color:var(--color-primary, #2188d9);background:#f4f9fd;border:1px solid var(--color-primary, #2188d9)}.filters-component .filter.applied zen-icon{background:var(--color-primary, #2188d9)}.filters-component .filter .dot{background:var(--color-primary, #2188d9);width:4px;height:4px;position:absolute;border-radius:50%;left:42px;top:9px}.filters-component .menu-content{width:360px;white-space:initial;position:fixed}.filters-component .menu-content.customTrigger{top:30px}.filters-component .menu-content .items-wrapper{overflow-y:auto;max-height:calc(100vh - 407px);position:relative}.filters-component .menu-content .items-wrapper .expander-item{outline:none;border:none;display:flex;width:100%}.filters-component .menu-content .items-wrapper .action-item{color:#828282}.filters-component .menu-content .items-wrapper .action-item.expanded,.filters-component .menu-content .items-wrapper .action-item.active{background:#f4f9fd;color:#4f4f4f}.filters-component .menu-content .items-wrapper .expand-icon{transition:.3s}.filters-component .menu-content .items-wrapper .expand-icon.active{transform:rotate(180deg)}.filters-component .menu-content .items-wrapper .ds-item{padding-left:48px}.filters-component .menu-content .items-wrapper .no-item,.filters-component .menu-content .items-wrapper .error-msg{color:#dc3e33;display:flex;flex-direction:row;align-items:center;padding:10px 16px;font-weight:400;font-size:14px}.filters-component .menu-content .items-wrapper .select-all{font-weight:500}.filters-component .menu-content .items-wrapper .filter-row{padding:0 16px}.filters-component .menu-content .items-wrapper .filter-row:not(:last-of-type){margin-bottom:20px}.filters-component .menu-content .items-wrapper .filter-row .lbl{color:#60636c;font-size:14px;margin-bottom:8px}.filters-component .menu-content .items-wrapper .filter-row:focus-within .lbl{color:var(--color-primary, #2188d9)}.filters-component .menu-content .items-wrapper .number-range-row{display:flex;margin-left:32px;gap:16px;margin-bottom:10px}.filters-component .menu-content .items-wrapper .toggle-row{justify-content:space-between}.hidden{display:none}:host ::ng-deep zen-radio label{margin:0}\n"] }]
|
|
482
|
+
args: [{ selector: 'zen-filter', template: "<div class=\"filters-component\"\n\t #mainComponent\n\t click-out=\"isVisible && hide()\">\n\n\t<ng-container *ngIf=\"!customTrigger\">\n\t\t<button (click)=\"toggle()\"\n\t\t\t\tclass=\"button-stroked filter {{isApplied ? 'applied' : ''}}\">\n\t\t\t<zen-icon [src]=\"imageUrl\"\n\t\t\t\t\t *ngIf=\"imageUrl\"></zen-icon>\n\t\t\t<i class=\"filter-icon material-icons\"\n\t\t\t *ngIf=\"!imageUrl\">filter_list</i>\n\t\t\t<span *ngIf=\"label\">{{ label }}</span>\n\t\t</button>\n\t</ng-container>\n\n\t<ng-content *ngIf=\"customTrigger\"></ng-content>\n\n\t<div [hidden]=\"!isVisible\"\n\t\t class=\"action-menu menu-content\"\n\t\t [class.customTrigger]=\"customTrigger\"\n\t\t [ngStyle]=\"{ 'left': menuLeft, 'right': menuRight, 'top': menuTop, 'bottom': menuBottom }\">\n\t\t<div class=\"action-menu-header\">\n\t\t\t<zen-search-box [(text)]=\"searchText\"\n\t\t\t\t\t\t\t#searchBox\n\t\t\t\t\t\t\t(textChange)=\"searchTextChanged()\"></zen-search-box>\n\t\t</div>\n\n\t\t<div class=\"action-menu-body items-wrapper\">\n\t\t\t<ng-container *ngIf=\"errorMessage.length\">\n\t\t\t\t<li *ngFor=\"let item of errorMessage\" class=\"error-msg\">{{item}}</li>\n\t\t\t</ng-container>\n\t\t\t\n\t\t\t<div *ngFor=\"let item of config.items\">\n\t\t\t\t<div class=\"menu-item\"\n\t\t\t\t\t *ngIf=\"isMenuIsVisible(item)\">\n\n\t\t\t\t\t<!-- Divider between two filter -->\n\t\t\t\t\t<div *ngIf=\"item.type === 'divider'\">\n\t\t\t\t\t\t<p class=\"filter-divider\"></p>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<!-- Boolean toggle -->\n\t\t\t\t\t<div *ngIf=\"item.type === 'toggle'\"\n\t\t\t\t\t\t class=\"action-item toggle-row\">\n\t\t\t\t\t\t<div>{{item.title}}</div>\n\t\t\t\t\t\t<zen-toggle-slide [(enabled)]=\"item.enabled\"></zen-toggle-slide>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<button class=\"action-item expander-item\"\n\t\t\t\t\t\t\t*ngIf=\"item.type != 'toggle' && item.type != 'divider' && !item.disableCollapse\"\n\t\t\t\t\t\t\t(click)=\"item.expanded = !item.expanded\"\n\t\t\t\t\t\t\t[ngClass]=\"{'active': isItemActive(item), 'expanded': item.expanded}\">\n\t\t\t\t\t\t<i class=\"material-icons expand-icon\"\n\t\t\t\t\t\t [ngClass]=\"{'active': item.expanded}\">expand_more</i>\n\t\t\t\t\t\t{{item.title}}\n\t\t\t\t\t</button>\n\n\t\t\t\t\t<ng-container *ngIf=\"item.expanded || item.disableCollapse\">\n\t\t\t\t\t\t<div [ngSwitch]=\"item.type\">\n\t\t\t\t\t\t\t<!-- Multiselect -->\n\t\t\t\t\t\t\t<div *ngSwitchCase=\"'multiselect'\">\n\t\t\t\t\t\t\t\t<div class=\"action-item-checkbox ds-item select-all\">\n\t\t\t\t\t\t\t\t\t<zen-checkbox *ngIf=\"item.dataSource.length === item.filteredDataSource.length\"\n\t\t\t\t\t\t\t\t\t\t\t\t [(checked)]=\"item.isSelectedAll\"\n\t\t\t\t\t\t\t\t\t\t\t\t [indeterminate]=\"isItemActive(item) && !item.isSelectedAll\"\n\t\t\t\t\t\t\t\t\t\t\t\t label=\"Select All\"\n\t\t\t\t\t\t\t\t\t\t\t\t (checkedChange)=\"onSelectAll(item)\">\n\t\t\t\t\t\t\t\t\t</zen-checkbox>\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t<div *ngFor=\"let dsItem of item.filteredDataSource\"\n\t\t\t\t\t\t\t\t\t class=\"action-item-checkbox ds-item\">\n\t\t\t\t\t\t\t\t\t<zen-checkbox [(checked)]=\"dsItem.checked\"\n\t\t\t\t\t\t\t\t\t\t\t\t [imageUrl]=\"dsItem.imageUrl\"\n\t\t\t\t\t\t\t\t\t\t\t\t [label]=\"dsItem.name\"></zen-checkbox>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Date range picker -->\n\t\t\t\t\t\t\t<div *ngSwitchCase=\"'dateRange'\">\n <!-- Options date range view -->\n <ng-container *ngIf=\"item.dateRangeOptions?.length\">\n <ng-container *ngFor=\"let option of item.dateRangeOptions\">\n <div class=\"action-item-radio ds-item\"\n [ngClass]=\"{'active': selectedDateRangeOptions[item.key] === option.name}\">\n <zen-radio [value]=\"option.name\"\n [label]=\"option.name\"\n [name]=\"item.key\"\n [selected]=\"selectedDateRangeOptions[item.key] === option.name\"\n (radioChange)=\"handleDateRangeOptionClick(item, option)\"\n ></zen-radio>\n </div>\n </ng-container>\n <div class=\"action-item-radio ds-item\"\n [ngClass]=\"{'active': selectedDateRangeOptions[item.key] === 'Custom'}\">\n <zen-radio [value]=\"'Custom'\"\n [label]=\"'Custom'\"\n [name]=\"item.key\"\n [selected]=\"selectedDateRangeOptions[item.key] === 'Custom'\"\n (radioChange)=\"handleCustomDateRangeClick(item)\"\n ></zen-radio>\n </div>\n <ng-container *ngIf=\"selectedDateRangeOptions[item.key] === 'Custom'\">\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">From:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.start\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\">\n </zen-datepicker>\n </div>\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">To:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.end\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\"\n (dateChange)=\"handleEndDateChange(item)\">\n </zen-datepicker>\n </div>\n </ng-container>\n </ng-container>\n\n <!-- Default date range view -->\n <ng-container *ngIf=\"!item.dateRangeOptions?.length\">\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">From:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.start\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\">\n </zen-datepicker>\n </div>\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">To:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.end\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\"\n (dateChange)=\"handleEndDateChange(item)\">\n </zen-datepicker>\n </div>\n </ng-container>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Date picker -->\n\t\t\t\t\t\t\t<div *ngSwitchCase=\"'date'\">\n\t\t\t\t\t\t\t\t<div class=\"ds-item filter-row\">\n\t\t\t\t\t\t\t\t\t<div class=\"lbl\">Date:</div>\n\t\t\t\t\t\t\t\t\t<zen-datepicker class=\"width-full\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[(date)]=\"item.date\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[showTime]=\"item.showTime\">\n\t\t\t\t\t\t\t\t\t</zen-datepicker>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Number range -->\n\t\t\t\t\t\t\t<div *ngSwitchCase=\"'numberRange'\"\n\t\t\t\t\t\t\t\t class=\"filter-row number-range-row\">\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<div class=\"lbl\">Min:</div>\n\t\t\t\t\t\t\t\t\t<input class=\"material-input\"\n\t\t\t\t\t\t\t\t\t\t [(ngModel)]=\"item.numberRange.from\"\n\t\t\t\t\t\t\t\t\t\t type=\"number\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<div class=\"lbl\">Max:</div>\n\t\t\t\t\t\t\t\t\t<input class=\"material-input\"\n\t\t\t\t\t\t\t\t\t\t [(ngModel)]=\"item.numberRange.to\"\n\t\t\t\t\t\t\t\t\t\t type=\"number\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Radio -->\n\t\t\t\t\t\t\t<div *ngSwitchCase=\"'radio'\">\n\t\t\t\t\t\t\t\t<div *ngFor=\"let option of item.radioOptions\"\n\t\t\t\t\t\t\t\t\t class=\"action-item-radio ds-item\"\n\t\t\t\t\t\t\t\t\t [ngClass]=\"{'active': option.selected}\">\n\t\t\t\t\t\t\t\t\t<zen-radio [value]=\"option.id\"\n\t\t\t\t\t\t\t\t\t\t\t [label]=\"option.name\"\n\t\t\t\t\t\t\t\t\t\t\t [name]=\"item.key\"\n\t\t\t\t\t\t\t\t\t\t\t [imageUrl]=\"option.imageUrl\"\n\t\t\t\t\t\t\t\t\t\t\t [selected]=\"option.selected\"\n\t\t\t\t\t\t\t\t\t\t\t (radioChange)=\"radioChanged($event, item)\"\n\t\t\t\t\t\t\t\t\t\t\t [disabled]=\"option.disabled\"></zen-radio>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</ng-container>\n\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<span *ngIf=\"showNoFilterResult\"\n\t\t\t\t class=\"no-item\">No Results Found..</span>\n\t\t</div>\n\n\t\t<div class=\"action-menu-footer\">\n\t\t\t<button (click)=\"reset()\"\n\t\t\t\t\tclass=\"button-stroked full-width\">\n\t\t\t\tReset\n\t\t\t</button>\n\t\t\t<button (click)=\"apply()\"\n\t\t\t\t\tclass=\"button-flat full-width\">\n\t\t\t\tApply\n\t\t\t</button>\n\t\t</div>\n\n\t</div>\n</div>\n", styles: [".filters-component{display:inline-block;position:relative}.filters-component .filter{color:#828282;position:relative;border-color:#ececed;padding:0 7px;height:38px}.filters-component .filter zen-icon{background:#828282}.filters-component .filter.applied{color:var(--color-primary, #2188d9);background:#f4f9fd;border:1px solid var(--color-primary, #2188d9)}.filters-component .filter.applied zen-icon{background:var(--color-primary, #2188d9)}.filters-component .filter .dot{background:var(--color-primary, #2188d9);width:4px;height:4px;position:absolute;border-radius:50%;left:42px;top:9px}.filters-component .menu-content{width:360px;white-space:initial;position:fixed}.filters-component .menu-content.customTrigger{top:30px}.filters-component .menu-content .items-wrapper{overflow-y:auto;max-height:calc(100vh - 407px);position:relative}.filters-component .menu-content .items-wrapper .expander-item{outline:none;border:none;display:flex;width:100%}.filters-component .menu-content .items-wrapper .action-item{color:#828282}.filters-component .menu-content .items-wrapper .action-item.expanded,.filters-component .menu-content .items-wrapper .action-item.active{background:#f4f9fd;color:#4f4f4f}.filters-component .menu-content .items-wrapper .expand-icon{transition:.3s}.filters-component .menu-content .items-wrapper .expand-icon.active{transform:rotate(180deg)}.filters-component .menu-content .items-wrapper .ds-item{padding-left:48px}.filters-component .menu-content .items-wrapper .no-item,.filters-component .menu-content .items-wrapper .error-msg{color:#dc3e33;display:flex;flex-direction:row;align-items:center;padding:10px 16px;font-weight:400;font-size:14px}.filters-component .menu-content .items-wrapper .select-all{font-weight:500}.filters-component .menu-content .items-wrapper .filter-row{padding:0 16px}.filters-component .menu-content .items-wrapper .filter-row:not(:last-of-type){margin-bottom:20px}.filters-component .menu-content .items-wrapper .filter-row .lbl{color:#60636c;font-size:14px;margin-bottom:8px}.filters-component .menu-content .items-wrapper .filter-row:focus-within .lbl{color:var(--color-primary, #2188d9)}.filters-component .menu-content .items-wrapper .number-range-row{display:flex;margin-left:32px;gap:16px;margin-bottom:10px}.filters-component .menu-content .items-wrapper .toggle-row{justify-content:space-between}.hidden{display:none}:host ::ng-deep zen-radio label{margin:0}\n"] }]
|
|
478
483
|
}], ctorParameters: function () { return []; }, propDecorators: { config: [{
|
|
479
484
|
type: Input
|
|
480
485
|
}], filter: [{
|
|
@@ -521,4 +526,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
521
526
|
type: HostListener,
|
|
522
527
|
args: ['window:keydown', ['$event']]
|
|
523
528
|
}] } });
|
|
524
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9maWx0ZXIvemVuZHUtZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9maWx0ZXIvemVuZHUtZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEksT0FBTyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ25DLE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUVuQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7O0FBUS9ELE1BQU0sT0FBTyxvQkFBb0I7SUFzRGhDO1FBcERTLFdBQU0sR0FBa0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFJdEMsYUFBUSxHQUFHLE9BQU8sQ0FBQztRQUVuQixrQkFBYSxHQUF3QixPQUFPLENBQUM7UUFFNUMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRTNDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFakIsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRS9DLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBVXhCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFFaEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVqQixzQkFBaUIsR0FBUSxFQUFFLENBQUM7UUFJN0IsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxC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c0JBQS9ELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkErQzdDLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF1QjVDLGtCQUFrQjtzQkFEakIsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVXpDLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVXpDLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxjQUFjLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBbUJ4QyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmlsdGVyc0NvbmZpZywgRmlsdGVyc0NvbmZpZ0l0ZW0gfSBmcm9tICcuL2ZpbHRlcnNDb25maWcnO1xuaW1wb3J0IHVuaXFCeSBmcm9tICdsb2Rhc2gudW5pcWJ5JztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50L21vbWVudCc7XG5pbXBvcnQgeyBaZW5kdVNlYXJjaEJveENvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1ib3gvemVuZHUtc2VhcmNoLWJveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHsgREFURVBJQ0tFUl9QT1NJVElPTiB9IGZyb20gJy4uL2RhdGVwaWNrZXIvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tIFwiLi9kYXRlUmFuZ2VcIjtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnemVuLWZpbHRlcicsXG5cdHRlbXBsYXRlVXJsOiAnLi96ZW5kdS1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi96ZW5kdS1maWx0ZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBaZW5kdUZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG5cblx0QElucHV0KCkgY29uZmlnOiBGaWx0ZXJzQ29uZmlnID0geyBpdGVtczogW10gfTtcblxuXHRASW5wdXQoKSBmaWx0ZXI6IG9iamVjdDtcblxuXHRASW5wdXQoKSBwb3NpdGlvbiA9ICdyaWdodCc7XG5cblx0QElucHV0KCkgcmVzZXRCZWhhdmlvcjogXCJzZXRfYWxsXCIgfCBcImNsZWFyXCIgPSAnY2xlYXInO1xuXG5cdEBPdXRwdXQoKSBmaWx0ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcblxuXHRASW5wdXQoKSBpc1Zpc2libGUgPSBmYWxzZTtcblxuXHRAT3V0cHV0KCkgaXNWaXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG5cdEBJbnB1dCgpIGN1c3RvbVRyaWdnZXIgPSBmYWxzZTtcblxuXHRASW5wdXQoKSBpbWFnZVVybDogc3RyaW5nO1xuXG5cdEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XG5cblx0QElucHV0KCkgc2hvd09wdGlvbnM6IGJvb2xlYW47XG5cblx0QElucHV0KCkgY3VzdG9tT3B0aW9uczogc3RyaW5nO1xuXG5cdHB1YmxpYyBzZWFyY2hUZXh0ID0gJyc7XG5cblx0cHVibGljIGlzQXBwbGllZCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgbGFzdEFwcGxpZWRGaWx0ZXI6IGFueSA9IHt9O1xuXG5cdHByaXZhdGUgcmVzZXRlZEZpbHRlcjogYW55O1xuXG5cdHB1YmxpYyBtZW51TGVmdCA9IFwiMHB4XCI7XG5cblx0cHVibGljIG1lbnVSaWdodCA9IFwiMHB4XCI7XG5cblx0cHVibGljIG1lbnVUb3AgPSBcIjBweFwiO1xuXG5cdHB1YmxpYyBtZW51Qm90dG9tID0gXCIwcHhcIjtcblxuXHRwdWJsaWMgc2hvd05vRmlsdGVyUmVzdWx0OiBib29sZWFuO1xuXG5cdHB1YmxpYyBlcnJvck1lc3NhZ2U6IHN0cmluZ1tdID0gW11cblxuXHRwdWJsaWMgZGF0ZXBpY2tlclBvc2l0aW9uID0gREFURVBJQ0tFUl9QT1NJVElPTjtcblxuXHRwdWJsaWMgc2VsZWN0ZWREYXRlUmFuZ2VPcHRpb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cblx0QFZpZXdDaGlsZCgnc2VhcmNoQm94JywgeyBzdGF0aWM6IGZhbHNlIH0pIHNlYXJjaEJveDogWmVuZHVTZWFyY2hCb3hDb21wb25lbnQ7XG5cblx0QFZpZXdDaGlsZCgnbWFpbkNvbXBvbmVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBfY29tcG9uZW50RWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cblx0Y29uc3RydWN0b3IoKSB7IH1cblxuXHRwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogYW55KTogdm9pZCB7XG5cdFx0aWYgKGNoYW5nZXMuY29uZmlnICYmIGNoYW5nZXMuY29uZmlnLmN1cnJlbnRWYWx1ZSkge1xuXG5cdFx0XHQvLyBpbml0IHZhbHVlc1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIHRoaXMuY29uZmlnLml0ZW1zKSB7XG5cdFx0XHRcdGlmIChpdGVtLnR5cGUgPT09ICdtdWx0aXNlbGVjdCcpIHtcblx0XHRcdFx0XHRpdGVtLmRhdGFTb3VyY2UgPSBpdGVtLmRhdGFTb3VyY2UgPyB0aGlzLmV4dHJhY3RVbmlxdWVEYXRhU291cmNlKGl0ZW0uZGF0YVNvdXJjZSkgOiBbXTtcblx0XHRcdFx0fSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdkYXRlUmFuZ2UnICYmICFpdGVtLmRhdGVSYW5nZSkge1xuXHRcdFx0XHRcdGl0ZW0uZGF0ZVJhbmdlID0geyBzdGFydDogbnVsbCwgZW5kOiBudWxsIH07XG5cblx0XHRcdFx0XHQvLyBpbml0IGRhdGUgcmFuZ2Ugb3B0aW9uc1xuXHRcdFx0XHRcdGlmIChpdGVtLnNob3dEYXRlUmFuZ2VPcHRpb25zICYmICFpdGVtLmRhdGVSYW5nZU9wdGlvbnM/Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0aXRlbS5kYXRlUmFuZ2VPcHRpb25zID0gdGhpcy5nZXREZWZhdWx0RGF0ZVJhbmdlT3B0aW9ucygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdudW1iZXJSYW5nZScgJiYgIWl0ZW0ubnVtYmVyUmFuZ2UpIHtcblx0XHRcdFx0XHRpdGVtLm51bWJlclJhbmdlID0ge307XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodHlwZW9mIGl0ZW0uc2hvd1RpbWUgIT09ICdib29sZWFuJykge1xuXHRcdFx0XHRcdGl0ZW0uc2hvd1RpbWUgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuZmlsdGVySXRlbXMoKTtcblxuXHRcdFx0dGhpcy5yZXNldGVkRmlsdGVyID0gdGhpcy5nZXRGaWx0ZXJPYmplY3QoKTtcblx0XHRcdHRoaXMuZmlsdGVyID0gdGhpcy5nZXRGaWx0ZXJPYmplY3QoKTtcblx0XHRcdHRoaXMubGFzdEFwcGxpZWRGaWx0ZXIgPSBVdGlsLmNsb25lKHRoaXMuZmlsdGVyKTtcblx0XHR9XG5cblx0XHRpZiAoY2hhbmdlcy5maWx0ZXIgJiYgY2hhbmdlcy5maWx0ZXIuY3VycmVudFZhbHVlKSB7XG5cdFx0XHR0aGlzLmxhc3RBcHBsaWVkRmlsdGVyID0gVXRpbC5jbG9uZShjaGFuZ2VzLmZpbHRlci5jdXJyZW50VmFsdWUpO1xuXG5cdFx0XHR0aGlzLnVwZGF0ZUFwcGxpZWRTdGF0ZSgpO1xuXHRcdH1cblxuXHRcdGlmIChjaGFuZ2VzLmlzVmlzaWJsZSAmJiBjaGFuZ2VzLmlzVmlzaWJsZS5jdXJyZW50VmFsdWUpIHtcblx0XHRcdHRoaXMudXBkYXRlUGxhY2VtZW50KCk7XG5cdFx0XHR0aGlzLmZvY3VzU2VhcmNoQm94KCk7XG5cdFx0fVxuXHR9XG5cdFxuXHRASG9zdExpc3RlbmVyKCd3aW5kb3c6bW91c2Vkb3duJywgWyckZXZlbnQnXSlcblx0b3V0c2lkZUhhbmRsaW5nKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG5cdFx0aWYgKCF0aGlzLmlzVmlzaWJsZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcblx0XHRpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnModGFyZ2V0KSkge1xuXHRcdFx0Ly8gZWxlbWVudCBub3QgaW4gdGhlIERPTVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodGhpcy5fY29tcG9uZW50RWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBoaWRlIHRoZSBtZW51IGZvciBvdXRzaWRlIGNsaWNrXG5cdFx0dGhpcy5oaWRlKCk7XG5cblx0XHQvLyByZXN0b3JlIHZhbHVlc1xuXHRcdHRoaXMucmVzdG9yZVByZXZpb3VzQXBwbGllZCgpO1xuXHR9XG5cblx0QEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG5cdHdpbmRvd1NpemVIYW5kbGluZygpIHtcblx0XHRpZiAoIXRoaXMuaXNWaXNpYmxlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy51cGRhdGVQbGFjZW1lbnQoKTtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnLCBbJyRldmVudCddKVxuXHR3aW5kb3dTY3JvbGwoKSB7XG5cdFx0aWYgKCF0aGlzLmlzVmlzaWJsZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMudXBkYXRlUGxhY2VtZW50KCk7XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKCd3aW5kb3c6d2hlZWwnLCBbJyRldmVudCddKVxuXHRoYW5kbGVNb3VzZVNjcm9sbChldmVudDogV2hlZWxFdmVudCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5pc1Zpc2libGUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cdFx0aWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKHRhcmdldCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRoaXMuX2NvbXBvbmVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyh0YXJnZXQpICYmICF0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdidXR0b24tc3Ryb2tlZCcpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5oaWRlKCk7XG5cdFx0dGhpcy5yZXN0b3JlUHJldmlvdXNBcHBsaWVkKCk7XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bicsIFsnJGV2ZW50J10pXG5cdG9uV2luZG93S2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuXHRcdGlmICghdGhpcy5pc1Zpc2libGUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyB8fCBldmVudC5rZXkgPT09ICdQYWdlVXAnIHx8IGV2ZW50LmtleSA9PT0gJ1BhZ2VEb3duJyB8fCBldmVudC5rZXkgPT09ICdIb21lJyB8fCBldmVudC5rZXkgPT09ICdFbmQnKSB7XG5cblx0XHRcdGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcblx0XHRcdGlmICghZG9jdW1lbnQuYm9keS5jb250YWlucyh0YXJnZXQpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuX2NvbXBvbmVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyh0YXJnZXQpICYmICF0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdidXR0b24tc3Ryb2tlZCcpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRoaXMuaGlkZSgpO1xuXHRcdFx0dGhpcy5yZXN0b3JlUHJldmlvdXNBcHBsaWVkKCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGZvY3VzU2VhcmNoQm94KCkge1xuXHRcdHRoaXMuc2VhcmNoQm94LmRvRm9jdXMoKTtcblx0fVxuXG5cdHB1YmxpYyBpc01lbnVJc1Zpc2libGUoaXRlbTogRmlsdGVyc0NvbmZpZ0l0ZW0pIHtcblx0XHRpZiAoaXRlbS5maWx0ZXJlZERhdGFTb3VyY2UgJiYgdGhpcy5zZWFyY2hUZXh0KSB7XG5cdFx0XHRpZiAoIWl0ZW0uZmlsdGVyZWREYXRhU291cmNlLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRwcml2YXRlIGV4dHJhY3RVbmlxdWVEYXRhU291cmNlKFxuXHRcdGFycmF5OiB7XG5cdFx0XHRpZDogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdFx0bmFtZTogc3RyaW5nIHwgbnVtYmVyXG5cdFx0fVtdXG5cdCk6IHtcblx0XHRpZDogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdG5hbWU6IHN0cmluZyB8IG51bWJlclxuXHR9W10ge1xuXHRcdGNvbnN0IGl0ZW1zID0gYXJyYXkuZmlsdGVyKGVsID0+IHtcblx0XHRcdHJldHVybiBCb29sZWFuKFxuXHRcdFx0XHR0eXBlb2YgZWwuaWQgPT09ICdudW1iZXInID8gdHlwZW9mIGVsLmlkICE9PSB1bmRlZmluZWQgOiBlbC5pZCAmJlxuXHRcdFx0XHRcdHR5cGVvZiBlbC5uYW1lID09PSAnbnVtYmVyJyA/IHR5cGVvZiBlbC5uYW1lICE9PSB1bmRlZmluZWQgOiBlbC5uYW1lXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHRcdHJldHVybiB1bmlxQnkoaXRlbXMsIChlbCkgPT4gZWwuaWQpO1xuXHR9XG5cblx0cHVibGljIG9uU2VsZWN0QWxsKGl0ZW06IEZpbHRlcnNDb25maWdJdGVtKSB7XG5cdFx0aXRlbS5kYXRhU291cmNlLmZvckVhY2goZCA9PiBkLmNoZWNrZWQgPSBpdGVtLmlzU2VsZWN0ZWRBbGwpO1xuXHR9XG5cblx0cHVibGljIGlzSXRlbUFjdGl2ZShpdGVtOiBGaWx0ZXJzQ29uZmlnSXRlbSk6IGJvb2xlYW4ge1xuXHRcdGlmIChpdGVtLnR5cGUgPT09ICdtdWx0aXNlbGVjdCcpIHtcblx0XHRcdGNvbnN0IGNoZWNrZWRJdGVtcyA9IGl0ZW0uZGF0YVNvdXJjZS5maWx0ZXIoZWwgPT4gZWwuY2hlY2tlZCk7XG5cdFx0XHRpdGVtLmlzU2VsZWN0ZWRBbGwgPSBjaGVja2VkSXRlbXMubGVuZ3RoID09PSBpdGVtLmRhdGFTb3VyY2UubGVuZ3RoXG5cdFx0XHRyZXR1cm4gY2hlY2tlZEl0ZW1zLmxlbmd0aCA+IDA7XG5cdFx0fSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdyYWRpbycpIHtcblx0XHRcdHJldHVybiBpdGVtLnJhZGlvT3B0aW9ucy5zb21lKHJvID0+IHJvLnNlbGVjdGVkKTtcblx0XHR9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gJ251bWJlclJhbmdlJykge1xuXHRcdFx0cmV0dXJuIEJvb2xlYW4oaXRlbS5udW1iZXJSYW5nZS5mcm9tIHx8IGl0ZW0ubnVtYmVyUmFuZ2UudG8pO1xuXHRcdH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAnZGF0ZVJhbmdlJykge1xuXHRcdFx0cmV0dXJuIEJvb2xlYW4oaXRlbS5kYXRlUmFuZ2Uuc3RhcnQgfHwgaXRlbS5kYXRlUmFuZ2UuZW5kKTtcblx0XHR9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gJ2RhdGUnKSB7XG5cdFx0XHRyZXR1cm4gQm9vbGVhbihpdGVtLmRhdGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNlYXJjaFRleHRDaGFuZ2VkKCkge1xuXHRcdHRoaXMuZmlsdGVySXRlbXMoKTtcblx0fVxuXG5cdHB1YmxpYyBmaWx0ZXJJdGVtcygpIHtcblx0XHRsZXQgZmlsdGVyZWRJdGVtc0NvdW50ID0gMDsgLy8gSW5pdGlhbGl6ZSB3aXRoIDBcblxuXHRcdGZvciAoY29uc3QgY29uZmlnSXRlbSBvZiB0aGlzLmNvbmZpZy5pdGVtcykge1xuXHRcdFx0aWYgKGNvbmZpZ0l0ZW0udHlwZSA9PT0gJ211bHRpc2VsZWN0Jykge1xuXHRcdFx0XHRjb25maWdJdGVtLmZpbHRlcmVkRGF0YVNvdXJjZSA9IGNvbmZpZ0l0ZW0uZGF0YVNvdXJjZS5maWx0ZXIoZWwgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHByZXBhcmVkTmFtZSA9IHR5cGVvZiBlbC5uYW1lID09PSAnbnVtYmVyJyA/IGVsLm5hbWUudG9TdHJpbmcoKSA6IGVsLm5hbWU7XG5cdFx0XHRcdFx0cmV0dXJuIHByZXBhcmVkTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0ZmlsdGVyZWRJdGVtc0NvdW50ICs9IGNvbmZpZ0l0ZW0uZmlsdGVyZWREYXRhU291cmNlLmxlbmd0aDsgLy8gSW5jcmVtZW50IHRoZSBjb3VudCBieSB0aGUgbGVuZ3RoIG9mIGZpbHRlcmVkRGF0YVNvdXJjZVxuXHRcdFx0fSBlbHNlIGlmIChjb25maWdJdGVtLnR5cGUgPT09ICdkYXRlUmFuZ2UnKSB7XG5cdFx0XHRcdGlmICh0aGlzLnNlYXJjaFRleHQgJiYgIUJvb2xlYW4oY29uZmlnSXRlbS5kYXRlUmFuZ2Uuc3RhcnQgfHwgY29uZmlnSXRlbS5kYXRlUmFuZ2UuZW5kKSkge1xuXHRcdFx0XHRcdGNvbmZpZ0l0ZW0uZmlsdGVyZWREYXRhU291cmNlID0gW107XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoY29uZmlnSXRlbS50eXBlID09PSAnbnVtYmVyUmFuZ2UnKSB7XG5cdFx0XHRcdGlmICh0aGlzLnNlYXJjaFRleHQgJiYgIUJvb2xlYW4oY29uZmlnSXRlbS5udW1iZXJSYW5nZS5mcm9tIHx8IGNvbmZpZ0l0ZW0ubnVtYmVyUmFuZ2UudG8pKSB7XG5cdFx0XHRcdFx0Y29uZmlnSXRlbS5maWx0ZXJlZERhdGFTb3VyY2UgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLnNob3dOb0ZpbHRlclJlc3VsdCA9IHRoaXMuc2VhcmNoVGV4dCAmJiBmaWx0ZXJlZEl0ZW1zQ291bnQgPT09IDA7XG5cblx0fVxuXG5cdHByaXZhdGUgcmVzZXRGaWx0ZXJzKCkge1xuXHRcdGxldCBzZWxlY3RBbGwgPSB0aGlzLnJlc2V0QmVoYXZpb3IgPT09IFwic2V0X2FsbFwiO1xuXHRcdHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2VPcHRpb25zID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5jb25maWcuaXRlbXMpIHtcblx0XHRcdGlmIChpdGVtLmRhdGFTb3VyY2UpIHtcblx0XHRcdFx0aXRlbS5pc1NlbGVjdGVkQWxsID0gc2VsZWN0QWxsO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgZHNJdGVtIG9mIGl0ZW0uZGF0YVNvdXJjZSkge1xuXHRcdFx0XHRcdGRzSXRlbS5jaGVja2VkID0gc2VsZWN0QWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpdGVtLmRhdGVSYW5nZSkge1xuXHRcdFx0XHRpdGVtLmRhdGVSYW5nZSA9IHsgc3RhcnQ6IG51bGwsIGVuZDogbnVsbCB9O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXRlbS5udW1iZXJSYW5nZSkge1xuXHRcdFx0XHRpdGVtLm51bWJlclJhbmdlID0geyBmcm9tOiBudWxsLCB0bzogbnVsbCB9O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXRlbS5kYXRlKSB7XG5cdFx0XHRcdGl0ZW0uZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaXRlbS50eXBlID09PSAndG9nZ2xlJykge1xuXHRcdFx0XHRpdGVtLmVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGlmIChpdGVtLnR5cGUgPT09ICdyYWRpbycpIHtcblx0XHRcdFx0aXRlbS5yYWRpb09wdGlvbnMuZm9yRWFjaChlID0+IHtcblx0XHRcdFx0XHRpZiAoZS5pZCA9PT0gaXRlbS5zZWxlY3RlZFJhZGlvKSB7XG5cdFx0XHRcdFx0XHRlLnNlbGVjdGVkID0gdHJ1ZVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRlLnNlbGVjdGVkID0gZmFsc2Vcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSByZXN0b3JlUHJldmlvdXNBcHBsaWVkKCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmNvbmZpZy5pdGVtcykge1xuXHRcdFx0c3dpdGNoIChpdGVtLnR5cGUpIHtcblx0XHRcdFx0Y2FzZSAnbXVsdGlzZWxlY3QnOlxuXHRcdFx0XHRcdGlmIChpdGVtLmRhdGFTb3VyY2UpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMubGFzdEFwcGxpZWRGaWx0ZXJbaXRlbS5rZXldO1xuXG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGRhdGFJdGVtIG9mIGl0ZW0uZGF0YVNvdXJjZSkge1xuXHRcdFx0XHRcdFx0XHRkYXRhSXRlbS5jaGVja2VkID0gc2VsZWN0aW9uID8gc2VsZWN0aW9uLmluY2x1ZGVzKGRhdGFJdGVtLmlkKSA6IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnZGF0ZVJhbmdlJzpcblx0XHRcdFx0XHRpdGVtLmRhdGVSYW5nZSA9IHRoaXMubGFzdEFwcGxpZWRGaWx0ZXJbaXRlbS5rZXldIHx8IHsgc3RhcnQ6IG51bGwsIGVuZDogbnVsbCB9O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdudW1iZXJSYW5nZSc6XG5cdFx0XHRcdFx0aXRlbS5udW1iZXJSYW5nZSA9IHRoaXMubGFzdEFwcGxpZWRGaWx0ZXJbaXRlbS5rZXldIHx8IHt9O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd0b2dnbGUnOlxuXHRcdFx0XHRcdGl0ZW0uZGF0ZVJhbmdlID0gdGhpcy5sYXN0QXBwbGllZEZpbHRlcltpdGVtLmtleV07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0XHRcdGl0ZW0uZGF0ZSA9IHRoaXMubGFzdEFwcGxpZWRGaWx0ZXJbaXRlbS5rZXldO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdyYWRpbyc6XG5cdFx0XHRcdFx0aXRlbS5zZWxlY3RlZFJhZGlvID0gdGhpcy5sYXN0QXBwbGllZEZpbHRlcltpdGVtLmtleV07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHJlc2V0KCkge1xuXHRcdHRoaXMucmVzZXRGaWx0ZXJzKCk7XG5cblx0XHR0aGlzLmZpbHRlciA9IHRoaXMuZ2V0RmlsdGVyT2JqZWN0KCk7XG5cdFx0dGhpcy5yZXNldGVkRmlsdGVyID0gdGhpcy5nZXRGaWx0ZXJPYmplY3QoKTtcblx0fVxuXG5cdHB1YmxpYyBhcHBseSgpIHtcblx0XHR0aGlzLmZpbHRlciA9IHRoaXMuZ2V0RmlsdGVyT2JqZWN0KCk7XG5cdFx0bGV0IGhhc0Vycm9yID0gZmFsc2U7XG5cdFx0Zm9yIChjb25zdCBpdGVyYXRvciBvZiB0aGlzLmNvbmZpZy5pdGVtcykge1xuXHRcdFx0Y29uc3QgaXRlbUZsYWcgPSB0aGlzLm9uQ2hlY2tWYWxpZGl0eShpdGVyYXRvcik7XG5cdFx0XHRpZiAoIWl0ZW1GbGFnKSB7XG5cdFx0XHRcdGhhc0Vycm9yID0gdHJ1ZVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoaGFzRXJyb3IpIHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4gdGhpcy5lcnJvck1lc3NhZ2UgPSBbXSwgNTAwMCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZXJyb3JNZXNzYWdlID0gW107XG5cdFx0fVxuXHRcdHRoaXMubGFzdEFwcGxpZWRGaWx0ZXIgPSBVdGlsLmNsb25lKHRoaXMuZmlsdGVyKTtcblxuXHRcdHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIpO1xuXG5cdFx0Ly8gdXBkYXRlIHRoZSBhcHBseSBzdGF0ZVxuXHRcdHRoaXMudXBkYXRlQXBwbGllZFN0YXRlKCk7XG5cblx0XHR0aGlzLmhpZGUoKTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlQXBwbGllZFN0YXRlKCkge1xuXHRcdHRoaXMuaXNBcHBsaWVkID0gZmFsc2U7XG5cdFx0aWYgKE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRpZiAodGhpcy5yZXNldGVkRmlsdGVyKSB7XG5cdFx0XHRcdC8vIEZpbHRlciB3YXMgcmVzZXQsIHNvIGNvbXBhcmUgdGhlIHJlc2V0IGZpbHRlciBvYmplY3Qgd2l0aCB0aGUgY3VycmVudCBmaWx0ZXJcblx0XHRcdFx0Ly8gV2hlbiB1c2VyIGNsaWNrIG9uIFJlc2V0IGFuZCBUaGVuIEFwcGx5LCBmaWx0ZXIgbXVzdCB1bmhpZ2hsaWdodGVkXG5cdFx0XHRcdGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLnJlc2V0ZWRGaWx0ZXIpICE9PSBKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlcikpIHtcblx0XHRcdFx0XHR0aGlzLmlzQXBwbGllZCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuaXNBcHBsaWVkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldEZpbHRlck9iamVjdCgpIHtcblx0XHRjb25zdCBmaWx0ZXIgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmNvbmZpZy5pdGVtcykge1xuXHRcdFx0c3dpdGNoIChpdGVtLnR5cGUpIHtcblx0XHRcdFx0Y2FzZSAnbXVsdGlzZWxlY3QnOlxuXHRcdFx0XHRcdGlmIChpdGVtLmRhdGFTb3VyY2UgJiYgaXRlbS5kYXRhU291cmNlLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgY2hlY2tlZElkcyA9IGl0ZW0uZGF0YVNvdXJjZVxuXHRcdFx0XHRcdFx0XHQuZmlsdGVyKGkgPT4gaS5jaGVja2VkKVxuXHRcdFx0XHRcdFx0XHQubWFwKGkgPT4gaS5pZCk7XG5cblx0XHRcdFx0XHRcdGlmIChjaGVja2VkSWRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRmaWx0ZXJbaXRlbS5rZXldID0gY2hlY2tlZElkcztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2RhdGVSYW5nZSc6XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0aXRlbS5kYXRlUmFuZ2UgJiZcblx0XHRcdFx0XHRcdGl0ZW0uZGF0ZVJhbmdlLnN0YXJ0ICYmXG5cdFx0XHRcdFx0XHRpdGVtLmRhdGVSYW5nZS5lbmRcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGZpbHRlcltpdGVtLmtleV0gPSBpdGVtLmRhdGVSYW5nZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ251bWJlclJhbmdlJzpcblx0XHRcdFx0XHRpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm51bWJlclJhbmdlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbT8ubnVtYmVyUmFuZ2U/LmZyb20gPT09ICdudW1iZXInICYmXG5cdFx0XHRcdFx0XHR0eXBlb2YgaXRlbT8ubnVtYmVyUmFuZ2U/LnRvID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcltpdGVtLmtleV0gPSBpdGVtLm51bWJlclJhbmdlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3RvZ2dsZSc6XG5cdFx0XHRcdFx0ZmlsdGVyW2l0ZW0ua2V5XSA9IGl0ZW0uZW5hYmxlZCB8fCBmYWxzZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRcdFx0aWYgKGl0ZW0uZGF0ZSkge1xuXHRcdFx0XHRcdFx0ZmlsdGVyW2l0ZW0ua2V5XSA9IGl0ZW0uZGF0ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3JhZGlvJzpcblx0XHRcdFx0XHRmaWx0ZXJbaXRlbS5rZXldID0gaXRlbS5yYWRpb09wdGlvbnMuZmluZChybyA9PiByby5zZWxlY3RlZCk/LmlkO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmaWx0ZXI7XG5cdH1cblxuXHRwdWJsaWMgaGlkZSgpIHtcblx0XHR0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xuXHRcdHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xuXHRcdHRoaXMuZmlsdGVySXRlbXMoKTtcblxuXHRcdHRoaXMuaXNWaXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xuXHR9XG5cblx0cHVibGljIHJhZGlvQ2hhbmdlZCh2YWx1ZTogc3RyaW5nLCBpdGVtOiBGaWx0ZXJzQ29uZmlnSXRlbSk6IHZvaWQge1xuXHRcdGl0ZW0ucmFkaW9PcHRpb25zLmZvckVhY2gob3B0ID0+IG9wdC5zZWxlY3RlZCA9IG9wdC5pZCA9PT0gdmFsdWUpO1xuXHR9XG5cblx0cHVibGljIHRvZ2dsZSgpIHtcblx0XHR0aGlzLmlzVmlzaWJsZSA9ICF0aGlzLmlzVmlzaWJsZTtcblx0XHR0aGlzLnVwZGF0ZVBsYWNlbWVudCgpO1xuXHRcdHRoaXMuZm9jdXNTZWFyY2hCb3goKVxuXHR9XG5cblx0cHVibGljIG9uQ2hlY2tWYWxpZGl0eShpdGVtOiBGaWx0ZXJzQ29uZmlnSXRlbSkge1xuXHRcdGlmIChpdGVtLnR5cGUgPT09ICdudW1iZXJSYW5nZScpIHtcblx0XHRcdGlmICh0eXBlb2YgaXRlbS5udW1iZXJSYW5nZS5mcm9tID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgaXRlbS5udW1iZXJSYW5nZS50byA9PT0gJ251bWJlcicgJiYgaXRlbS5udW1iZXJSYW5nZS5mcm9tID49IGl0ZW0ubnVtYmVyUmFuZ2UudG8pIHtcblx0XHRcdFx0dGhpcy5lcnJvck1lc3NhZ2UucHVzaChgSW52YWxpZCBOdW1iZXIgcmFuZ2UsIE1pbiBudW1iZXIgc2hvdWxkIGJlIGxlc3MgdGhhbiBNYXggbnVtYmVyLmApOyBcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoaXRlbS50eXBlID09PSAnZGF0ZVJhbmdlJykge1xuXHRcdFx0aWYgKGl0ZW0uZGF0ZVJhbmdlLnN0YXJ0ICYmIGl0ZW0uZGF0ZVJhbmdlLmVuZCAmJiBuZXcgRGF0ZShpdGVtLmRhdGVSYW5nZS5zdGFydCkgPj0gbmV3IERhdGUoaXRlbS5kYXRlUmFuZ2UuZW5kKSkge1xuXHRcdFx0XHR0aGlzLmVycm9yTWVzc2FnZS5wdXNoKGBJbnZhbGlkIERhdGUgcmFuZ2UsIFN0YXJ0IGRhdGUgc2hvdWxkIGJlIGxlc3MgdGhhbiBFbmQgZGF0ZS5gKTsgXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWVcblx0fVxuXG5cdHB1YmxpYyB1cGRhdGVQbGFjZW1lbnQoKSB7XG5cdFx0Y29uc3QgY29udGFpbmVyID0gdGhpcy5fY29tcG9uZW50RWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuXHRcdGNvbnN0IHJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0Y29uc3QgbGVmdCA9IHJlY3QubGVmdDtcblx0XHRjb25zdCByaWdodCA9IHJlY3QucmlnaHQ7XG5cdFx0Y29uc3QgdG9wID0gcmVjdC50b3A7XG5cdFx0Y29uc3QgYm90dG9tID0gd2luZG93LmlubmVySGVpZ2h0IC0gdG9wO1xuXG5cdFx0Ly9VcGRhdGUgbGVmdC1yaWdodCBwb3NpdGlvbiBcblx0XHRpZiAodGhpcy5wb3NpdGlvbi5pbmNsdWRlcyhcImF1dG9cIikpIHtcblx0XHRcdGNvbnN0IGhvcml6b250YWxQb3NpdGlvbiA9IHRoaXMuZ2V0SG9yaXpvbnRhbFBvc2l0aW9uKCk7XG5cdFx0XHR0aGlzLm1lbnVSaWdodCA9IGhvcml6b250YWxQb3NpdGlvbiA9PT0gXCJsZWZ0XCIgPyBgJHt3aW5kb3cuaW5uZXJXaWR0aCAtIHJpZ2h0fXB4YCA6IFwidW5zZXRcIjtcblx0XHRcdHRoaXMubWVudUxlZnQgPSBob3Jpem9udGFsUG9zaXRpb24gPT09IFwicmlnaHRcIiA/IGAke2xlZnR9cHhgIDogXCJ1bnNldFwiO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5wb3NpdGlvbi5pbmNsdWRlcyhcImxlZnRcIikpIHtcblx0XHRcdHRoaXMubWVudVJpZ2h0ID0gYCR7d2luZG93LmlubmVyV2lkdGggLSByaWdodH1weGA7XG5cdFx0XHR0aGlzLm1lbnVMZWZ0ID0gXCJ1bnNldFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm1lbnVMZWZ0ID0gYCR7bGVmdH1weGA7XG5cdFx0XHR0aGlzLm1lbnVSaWdodCA9IFwidW5zZXRcIjtcblx0XHR9XG5cblx0XHQvL1VwZGF0ZSB0b3AtYm90dG9tIHBvc2l0aW9uIFxuXHRcdGlmICh0aGlzLnBvc2l0aW9uLmluY2x1ZGVzKFwiYXV0b1wiKSkge1xuXHRcdFx0Y29uc3QgdmVydGljYWxQb3NpdGlvbiA9IHRoaXMuZ2V0VmVydGljYWxQb3NpdGlvbigpO1xuXHRcdFx0dGhpcy5tZW51VG9wID0gdmVydGljYWxQb3NpdGlvbiA9PT0gXCJib3R0b21cIiA/IGAke3RvcCArIDQyfXB4YCA6IFwidW5zZXRcIjtcblx0XHRcdHRoaXMubWVudUJvdHRvbSA9IHZlcnRpY2FsUG9zaXRpb24gPT09IFwidG9wXCIgPyBgJHtib3R0b219cHhgIDogXCJ1bnNldFwiO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5wb3NpdGlvbi5pbmNsdWRlcyhcInRvcFwiKSkge1xuXHRcdFx0dGhpcy5tZW51VG9wID0gXCJ1bnNldFwiO1xuXHRcdFx0dGhpcy5tZW51Qm90dG9tID0gYCR7Ym90dG9tICsgMTB9cHhgO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm1lbnVUb3AgPSBgJHt0b3AgKyA1NX1weGA7XG5cdFx0XHR0aGlzLm1lbnVCb3R0b20gPSBcInVuc2V0XCI7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRWZXJ0aWNhbFBvc2l0aW9uKCk6IFwiYm90dG9tXCIgfCBcInRvcFwiIHtcblx0XHRjb25zdCB0b3AgPSB0aGlzLl9jb21wb25lbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuXHRcdHJldHVybiB0b3AgPiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyID8gXCJ0b3BcIiA6IFwiYm90dG9tXCI7XG5cdH1cblxuXHRwcml2YXRlIGdldEhvcml6b250YWxQb3NpdGlvbigpOiBcInJpZ2h0XCIgfCBcImxlZnRcIiB7XG5cdFx0Y29uc3QgbGVmdCA9IHRoaXMuX2NvbXBvbmVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXHRcdHJldHVybiBsZWZ0ID4gd2luZG93LmlubmVyV2lkdGggLyAyID8gXCJsZWZ0XCIgOiBcInJpZ2h0XCI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RGVmYXVsdERhdGVSYW5nZU9wdGlvbnMoKTogeyBuYW1lOiBzdHJpbmcsIGRhdGVSYW5nZTogRGF0ZVJhbmdlIH1bXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogJ1RvZGF5Jyxcblx0XHRcdFx0ZGF0ZVJhbmdlOiB7XG5cdFx0XHRcdFx0c3RhcnQ6IG1vbWVudCgpLnN0YXJ0T2YoXCJkYXlcIikudG9EYXRlKCksXG5cdFx0XHRcdFx0ZW5kOiBtb21lbnQoKS5lbmRPZihcImRheVwiKS50b0RhdGUoKVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiAnWWVzdGVyZGF5Jyxcblx0XHRcdFx0ZGF0ZVJhbmdlOiB7XG5cdFx0XHRcdFx0c3RhcnQ6IG1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXlzJykuc3RhcnRPZihcImRheVwiKS50b0RhdGUoKSxcblx0XHRcdFx0XHRlbmQ6IG1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXlzJykuZW5kT2YoXCJkYXlcIikudG9EYXRlKClcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogJ1RoaXMgV2VlaycsXG5cdFx0XHRcdGRhdGVSYW5nZToge1xuXHRcdFx0XHRcdHN0YXJ0OiBtb21lbnQoKS5zdGFydE9mKCd3ZWVrJykudG9EYXRlKCksXG5cdFx0XHRcdFx0ZW5kOiBtb21lbnQoKS5lbmRPZihcIndlZWtcIikudG9EYXRlKClcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogJ0xhc3QgV2VlaycsXG5cdFx0XHRcdGRhdGVSYW5nZToge1xuXHRcdFx0XHRcdHN0YXJ0OiBtb21lbnQoKS5zdWJ0cmFjdCg3LCAnZGF5cycpLnN0YXJ0T2YoJ3dlZWsnKS50b0RhdGUoKSxcblx0XHRcdFx0XHRlbmQ6IG1vbWVudCgpLnN1YnRyYWN0KDcsICdkYXlzJykuZW5kT2YoJ3dlZWsnKS50b0RhdGUoKVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiAnVGhpcyBNb250aCcsXG5cdFx0XHRcdGRhdGVSYW5nZToge1xuXHRcdFx0XHRcdHN0YXJ0OiBtb21lbnQoKS5zdGFydE9mKCdtb250aCcpLnRvRGF0ZSgpLFxuXHRcdFx0XHRcdGVuZDogbW9tZW50KCkuZW5kT2YoXCJtb250aFwiKS50b0RhdGUoKVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiAnTGFzdCBNb250aCcsXG5cdFx0XHRcdGRhdGVSYW5nZToge1xuXHRcdFx0XHRcdHN0YXJ0OiBtb21lbnQoKS5zdWJ0cmFjdCgxLCAnbW9udGgnKS5zdGFydE9mKCdtb250aCcpLnRvRGF0ZSgpLFxuXHRcdFx0XHRcdGVuZDogbW9tZW50KCkuc3VidHJhY3QoMSwgJ21vbnRoJykuZW5kT2YoJ21vbnRoJykudG9EYXRlKClcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF1cblx0fVxuXG5cdHB1YmxpYyBoYW5kbGVEYXRlUmFuZ2VPcHRpb25DbGljayhpdGVtLCBvcHRpb24pIHtcblx0XHRpdGVtLmRhdGVSYW5nZSA9IG9wdGlvbi5kYXRlUmFuZ2U7XG5cdFx0dGhpcy5zZWxlY3RlZERhdGVSYW5nZU9wdGlvbnNbaXRlbS5rZXldID0gb3B0aW9uLm5hbWU7XG5cdH1cblxuXHRwdWJsaWMgaGFuZGxlQ3VzdG9tRGF0ZVJhbmdlQ2xpY2soaXRlbSkge1xuXHRcdHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2VPcHRpb25zW2l0ZW0ua2V5XSA9IFwiQ3VzdG9tXCI7XG5cdH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmaWx0ZXJzLWNvbXBvbmVudFwiXG5cdCAjbWFpbkNvbXBvbmVudFxuXHQgY2xpY2stb3V0PVwiaXNWaXNpYmxlICYmIGhpZGUoKVwiPlxuXG5cdDxuZy1jb250YWluZXIgKm5nSWY9XCIhY3VzdG9tVHJpZ2dlclwiPlxuXHRcdDxidXR0b24gKGNsaWNrKT1cInRvZ2dsZSgpXCJcblx0XHRcdFx0Y2xhc3M9XCJidXR0b24tc3Ryb2tlZCBmaWx0ZXIge3tpc0FwcGxpZWQgPyAnYXBwbGllZCcgOiAnJ319XCI+XG5cdFx0XHQ8emVuLWljb24gW3NyY109XCJpbWFnZVVybFwiXG5cdFx0XHRcdFx0ICAqbmdJZj1cImltYWdlVXJsXCI+PC96ZW4taWNvbj5cblx0XHRcdDxpIGNsYXNzPVwiZmlsdGVyLWljb24gbWF0ZXJpYWwtaWNvbnNcIlxuXHRcdFx0ICAgKm5nSWY9XCIhaW1hZ2VVcmxcIj5maWx0ZXJfbGlzdDwvaT5cblx0XHRcdDxzcGFuICpuZ0lmPVwibGFiZWxcIj57eyBsYWJlbCB9fTwvc3Bhbj5cblx0XHQ8L2J1dHRvbj5cblx0PC9uZy1jb250YWluZXI+XG5cblx0PG5nLWNvbnRlbnQgKm5nSWY9XCJjdXN0b21UcmlnZ2VyXCI+PC9uZy1jb250ZW50PlxuXG5cdDxkaXYgW2hpZGRlbl09XCIhaXNWaXNpYmxlXCJcblx0XHQgY2xhc3M9XCJhY3Rpb24tbWVudSBtZW51LWNvbnRlbnRcIlxuXHRcdCBbY2xhc3MuY3VzdG9tVHJpZ2dlcl09XCJjdXN0b21UcmlnZ2VyXCJcblx0XHQgW25nU3R5bGVdPVwieyAnbGVmdCc6IG1lbnVMZWZ0LCAncmlnaHQnOiBtZW51UmlnaHQsICd0b3AnOiBtZW51VG9wLCAnYm90dG9tJzogbWVudUJvdHRvbSAgfVwiPlxuXHRcdDxkaXYgY2xhc3M9XCJhY3Rpb24tbWVudS1oZWFkZXJcIj5cblx0XHRcdDx6ZW4tc2VhcmNoLWJveCBbKHRleHQpXT1cInNlYXJjaFRleHRcIlxuXHRcdFx0XHRcdFx0XHQjc2VhcmNoQm94XG5cdFx0XHRcdFx0XHRcdCh0ZXh0Q2hhbmdlKT1cInNlYXJjaFRleHRDaGFuZ2VkKClcIj48L3plbi1zZWFyY2gtYm94PlxuXHRcdDwvZGl2PlxuXG5cdFx0PGRpdiBjbGFzcz1cImFjdGlvbi1tZW51LWJvZHkgaXRlbXMtd3JhcHBlclwiPlxuXHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImVycm9yTWVzc2FnZS5sZW5ndGhcIj5cblx0XHRcdFx0PGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mIGVycm9yTWVzc2FnZVwiIGNsYXNzPVwiZXJyb3ItbXNnXCI+e3tpdGVtfX08L2xpPlxuXHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHRcblx0XHRcdDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29uZmlnLml0ZW1zXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJtZW51LWl0ZW1cIlxuXHRcdFx0XHRcdCAqbmdJZj1cImlzTWVudUlzVmlzaWJsZShpdGVtKVwiPlxuXG5cdFx0XHRcdFx0PCEtLSBEaXZpZGVyIGJldHdlZW4gdHdvIGZpbHRlciAtLT5cblx0XHRcdFx0XHQ8ZGl2ICpuZ0lmPVwiaXRlbS50eXBlID09PSAnZGl2aWRlcidcIj5cblx0XHRcdFx0XHRcdDxwIGNsYXNzPVwiZmlsdGVyLWRpdmlkZXJcIj48L3A+XG5cdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHQ8IS0tIEJvb2xlYW4gdG9nZ2xlIC0tPlxuXHRcdFx0XHRcdDxkaXYgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICd0b2dnbGUnXCJcblx0XHRcdFx0XHRcdCBjbGFzcz1cImFjdGlvbi1pdGVtIHRvZ2dsZS1yb3dcIj5cblx0XHRcdFx0XHRcdDxkaXY+e3tpdGVtLnRpdGxlfX08L2Rpdj5cblx0XHRcdFx0XHRcdDx6ZW4tdG9nZ2xlLXNsaWRlIFsoZW5hYmxlZCldPVwiaXRlbS5lbmFibGVkXCI+PC96ZW4tdG9nZ2xlLXNsaWRlPlxuXHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0PGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1pdGVtIGV4cGFuZGVyLWl0ZW1cIlxuXHRcdFx0XHRcdFx0XHQqbmdJZj1cIml0ZW0udHlwZSAhPSAndG9nZ2xlJyAmJiBpdGVtLnR5cGUgIT0gJ2RpdmlkZXInICYmICFpdGVtLmRpc2FibGVDb2xsYXBzZVwiXG5cdFx0XHRcdFx0XHRcdChjbGljayk9XCJpdGVtLmV4cGFuZGVkID0gIWl0ZW0uZXhwYW5kZWRcIlxuXHRcdFx0XHRcdFx0XHRbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGlzSXRlbUFjdGl2ZShpdGVtKSwgJ2V4cGFuZGVkJzogaXRlbS5leHBhbmRlZH1cIj5cblx0XHRcdFx0XHRcdDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgZXhwYW5kLWljb25cIlxuXHRcdFx0XHRcdFx0ICAgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBpdGVtLmV4cGFuZGVkfVwiPmV4cGFuZF9tb3JlPC9pPlxuXHRcdFx0XHRcdFx0e3tpdGVtLnRpdGxlfX1cblx0XHRcdFx0XHQ8L2J1dHRvbj5cblxuXHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLmV4cGFuZGVkIHx8IGl0ZW0uZGlzYWJsZUNvbGxhcHNlXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IFtuZ1N3aXRjaF09XCJpdGVtLnR5cGVcIj5cblx0XHRcdFx0XHRcdFx0PCEtLSBNdWx0aXNlbGVjdCAtLT5cblx0XHRcdFx0XHRcdFx0PGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ211bHRpc2VsZWN0J1wiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJhY3Rpb24taXRlbS1jaGVja2JveCBkcy1pdGVtIHNlbGVjdC1hbGxcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDx6ZW4tY2hlY2tib3ggKm5nSWY9XCJpdGVtLmRhdGFTb3VyY2UubGVuZ3RoID09PSBpdGVtLmZpbHRlcmVkRGF0YVNvdXJjZS5sZW5ndGhcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBbKGNoZWNrZWQpXT1cIml0ZW0uaXNTZWxlY3RlZEFsbFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIFtpbmRldGVybWluYXRlXT1cImlzSXRlbUFjdGl2ZShpdGVtKSAmJiAhaXRlbS5pc1NlbGVjdGVkQWxsXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgbGFiZWw9XCJTZWxlY3QgQWxsXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgKGNoZWNrZWRDaGFuZ2UpPVwib25TZWxlY3RBbGwoaXRlbSlcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDwvemVuLWNoZWNrYm94PlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiAqbmdGb3I9XCJsZXQgZHNJdGVtIG9mIGl0ZW0uZmlsdGVyZWREYXRhU291cmNlXCJcblx0XHRcdFx0XHRcdFx0XHRcdCBjbGFzcz1cImFjdGlvbi1pdGVtLWNoZWNrYm94IGRzLWl0ZW1cIj5cblx0XHRcdFx0XHRcdFx0XHRcdDx6ZW4tY2hlY2tib3ggWyhjaGVja2VkKV09XCJkc0l0ZW0uY2hlY2tlZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIFtpbWFnZVVybF09XCJkc0l0ZW0uaW1hZ2VVcmxcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBbbGFiZWxdPVwiZHNJdGVtLm5hbWVcIj48L3plbi1jaGVja2JveD5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdFx0PCEtLSBEYXRlIHJhbmdlIHBpY2tlciAtLT5cblx0XHRcdFx0XHRcdFx0PGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGVSYW5nZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAgT3B0aW9ucyBkYXRlIHJhbmdlIHZpZXcgIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5kYXRlUmFuZ2VPcHRpb25zPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBpdGVtLmRhdGVSYW5nZU9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWl0ZW0tcmFkaW8gZHMtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IHNlbGVjdGVkRGF0ZVJhbmdlT3B0aW9uc1tpdGVtLmtleV0gPT09IG9wdGlvbi5uYW1lfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLXJhZGlvIFt2YWx1ZV09XCJvcHRpb24ubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbi5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJpdGVtLmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkRGF0ZVJhbmdlT3B0aW9uc1tpdGVtLmtleV0gPT09IG9wdGlvbi5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmFkaW9DaGFuZ2UpPVwiaGFuZGxlRGF0ZVJhbmdlT3B0aW9uQ2xpY2soaXRlbSwgb3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3plbi1yYWRpbz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1pdGVtLXJhZGlvIGRzLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IHNlbGVjdGVkRGF0ZVJhbmdlT3B0aW9uc1tpdGVtLmtleV0gPT09ICdDdXN0b20nfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx6ZW4tcmFkaW8gW3ZhbHVlXT1cIidDdXN0b20nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQ3VzdG9tJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJpdGVtLmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWREYXRlUmFuZ2VPcHRpb25zW2l0ZW0ua2V5XSA9PT0gJ0N1c3RvbSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJhZGlvQ2hhbmdlKT1cImhhbmRsZUN1c3RvbURhdGVSYW5nZUNsaWNrKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC96ZW4tcmFkaW8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZERhdGVSYW5nZU9wdGlvbnNbaXRlbS5rZXldID09PSAnQ3VzdG9tJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcy1pdGVtIGZpbHRlci1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxibFwiPkZyb206PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx6ZW4tZGF0ZXBpY2tlciBjbGFzcz1cIndpZHRoLWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhkYXRlKV09XCJpdGVtLmRhdGVSYW5nZS5zdGFydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RpbWVdPVwiaXRlbS5zaG93VGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbeVBvc2l0aW9uXT1cIml0ZW0uY29uZmlnPy55UG9zaXRpb24gPz8gZGF0ZXBpY2tlclBvc2l0aW9uLkFVVE9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC96ZW4tZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHMtaXRlbSBmaWx0ZXItcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYmxcIj5Ubzo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHplbi1kYXRlcGlja2VyIGNsYXNzPVwid2lkdGgtZnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGRhdGUpXT1cIml0ZW0uZGF0ZVJhbmdlLmVuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RpbWVdPVwiaXRlbS5zaG93VGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbeVBvc2l0aW9uXT1cIml0ZW0uY29uZmlnPy55UG9zaXRpb24gPz8gZGF0ZXBpY2tlclBvc2l0aW9uLkFVVE9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC96ZW4tZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tICBEZWZhdWx0IGRhdGUgcmFuZ2UgdmlldyAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS5kYXRlUmFuZ2VPcHRpb25zPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcy1pdGVtIGZpbHRlci1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGJsXCI+RnJvbTo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLWRhdGVwaWNrZXIgY2xhc3M9XCJ3aWR0aC1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhkYXRlKV09XCJpdGVtLmRhdGVSYW5nZS5zdGFydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VGltZV09XCJpdGVtLnNob3dUaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3lQb3NpdGlvbl09XCJpdGVtLmNvbmZpZz8ueVBvc2l0aW9uID8/IGRhdGVwaWNrZXJQb3NpdGlvbi5BVVRPXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC96ZW4tZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRzLWl0ZW0gZmlsdGVyLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYmxcIj5Ubzo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLWRhdGVwaWNrZXIgY2xhc3M9XCJ3aWR0aC1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhkYXRlKV09XCJpdGVtLmRhdGVSYW5nZS5lbmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RpbWVdPVwiaXRlbS5zaG93VGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt5UG9zaXRpb25dPVwiaXRlbS5jb25maWc/LnlQb3NpdGlvbiA/PyBkYXRlcGlja2VyUG9zaXRpb24uQVVUT1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvemVuLWRhdGVwaWNrZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHRcdDwhLS0gRGF0ZSBwaWNrZXIgLS0+XG5cdFx0XHRcdFx0XHRcdDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkcy1pdGVtIGZpbHRlci1yb3dcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJsYmxcIj5EYXRlOjwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0PHplbi1kYXRlcGlja2VyIGNsYXNzPVwid2lkdGgtZnVsbFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFsoZGF0ZSldPVwiaXRlbS5kYXRlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W3Nob3dUaW1lXT1cIml0ZW0uc2hvd1RpbWVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDwvemVuLWRhdGVwaWNrZXI+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHRcdDwhLS0gTnVtYmVyIHJhbmdlIC0tPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2ICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyUmFuZ2UnXCJcblx0XHRcdFx0XHRcdFx0XHQgY2xhc3M9XCJmaWx0ZXItcm93IG51bWJlci1yYW5nZS1yb3dcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImxibFwiPk1pbjo8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBjbGFzcz1cIm1hdGVyaWFsLWlucHV0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgWyhuZ01vZGVsKV09XCJpdGVtLm51bWJlclJhbmdlLmZyb21cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICB0eXBlPVwibnVtYmVyXCIgLz5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImxibFwiPk1heDo8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBjbGFzcz1cIm1hdGVyaWFsLWlucHV0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgWyhuZ01vZGVsKV09XCJpdGVtLm51bWJlclJhbmdlLnRvXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgdHlwZT1cIm51bWJlclwiIC8+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHRcdDwhLS0gUmFkaW8gLS0+XG5cdFx0XHRcdFx0XHRcdDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidyYWRpbydcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2ICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgaXRlbS5yYWRpb09wdGlvbnNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0IGNsYXNzPVwiYWN0aW9uLWl0ZW0tcmFkaW8gZHMtaXRlbVwiXG5cdFx0XHRcdFx0XHRcdFx0XHQgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBvcHRpb24uc2VsZWN0ZWR9XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8emVuLXJhZGlvIFt2YWx1ZV09XCJvcHRpb24uaWRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgIFtsYWJlbF09XCJvcHRpb24ubmFtZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgW25hbWVdPVwiaXRlbS5rZXlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgIFtpbWFnZVVybF09XCJvcHRpb24uaW1hZ2VVcmxcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgIFtzZWxlY3RlZF09XCJvcHRpb24uc2VsZWN0ZWRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgIChyYWRpb0NoYW5nZSk9XCJyYWRpb0NoYW5nZWQoJGV2ZW50LCBpdGVtKVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgW2Rpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiPjwvemVuLXJhZGlvPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxuXG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8c3BhbiAqbmdJZj1cInNob3dOb0ZpbHRlclJlc3VsdFwiXG5cdFx0XHRcdCAgY2xhc3M9XCJuby1pdGVtXCI+Tm8gUmVzdWx0cyBGb3VuZC4uPC9zcGFuPlxuXHRcdDwvZGl2PlxuXG5cdFx0PGRpdiBjbGFzcz1cImFjdGlvbi1tZW51LWZvb3RlclwiPlxuXHRcdFx0PGJ1dHRvbiAoY2xpY2spPVwicmVzZXQoKVwiXG5cdFx0XHRcdFx0Y2xhc3M9XCJidXR0b24tc3Ryb2tlZCBmdWxsLXdpZHRoXCI+XG5cdFx0XHRcdFJlc2V0XG5cdFx0XHQ8L2J1dHRvbj5cblx0XHRcdDxidXR0b24gKGNsaWNrKT1cImFwcGx5KClcIlxuXHRcdFx0XHRcdGNsYXNzPVwiYnV0dG9uLWZsYXQgZnVsbC13aWR0aFwiPlxuXHRcdFx0XHRBcHBseVxuXHRcdFx0PC9idXR0b24+XG5cdFx0PC9kaXY+XG5cblx0PC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
529
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9maWx0ZXIvemVuZHUtZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9maWx0ZXIvemVuZHUtZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEksT0FBTyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ25DLE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUVuQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7O0FBUS9ELE1BQU0sT0FBTyxvQkFBb0I7SUFzRGhDO1FBcERTLFdBQU0sR0FBa0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFJdEMsYUFBUSxHQUFHLE9BQU8sQ0FBQztRQUVuQixrQkFBYSxHQUF3QixPQUFPLENBQUM7UUFFNUMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRTNDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFakIsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRS9DLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBVXhCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFFaEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVqQixzQkFBaUIsR0FBUSxFQUFFLENBQUM7UUFJN0IsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxC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TTtnQkFFRSxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkEwQnFDLFNBQVM7c0JBQW5ELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFFTSxpQkFBaUI7c0JBQS9ELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkErQzdDLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF1QjVDLGtCQUFrQjtzQkFEakIsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVXpDLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVXpDLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxjQUFjLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBbUJ4QyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmlsdGVyc0NvbmZpZywgRmlsdGVyc0NvbmZpZ0l0ZW0gfSBmcm9tICcuL2ZpbHRlcnNDb25maWcnO1xuaW1wb3J0IHVuaXFCeSBmcm9tICdsb2Rhc2gudW5pcWJ5JztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50L21vbWVudCc7XG5pbXBvcnQgeyBaZW5kdVNlYXJjaEJveENvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1ib3gvemVuZHUtc2VhcmNoLWJveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHsgREFURVBJQ0tFUl9QT1NJVElPTiB9IGZyb20gJy4uL2RhdGVwaWNrZXIvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tIFwiLi9kYXRlUmFuZ2VcIjtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnemVuLWZpbHRlcicsXG5cdHRlbXBsYXRlVXJsOiAnLi96ZW5kdS1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi96ZW5kdS1maWx0ZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBaZW5kdUZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG5cblx0QElucHV0KCkgY29uZmlnOiBGaWx0ZXJzQ29uZmlnID0geyBpdGVtczogW10gfTtcblxuXHRASW5wdXQoKSBmaWx0ZXI6IG9iamVjdDtcblxuXHRASW5wdXQoKSBwb3NpdGlvbiA9ICdyaWdodCc7XG5cblx0QElucHV0KCkgcmVzZXRCZWhhdmlvcjogXCJzZXRfYWxsXCIgfCBcImNsZWFyXCIgPSAnY2xlYXInO1xuXG5cdEBPdXRwdXQoKSBmaWx0ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcblxuXHRASW5wdXQoKSBpc1Zpc2libGUgPSBmYWxzZTtcblxuXHRAT3V0cHV0KCkgaXNWaXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG5cdEBJbnB1dCgpIGN1c3RvbVRyaWdnZXIgPSBmYWxzZTtcblxuXHRASW5wdXQoKSBpbWFnZVVybDogc3RyaW5nO1xuXG5cdEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XG5cblx0QElucHV0KCkgc2hvd09wdGlvbnM6IGJvb2xlYW47XG5cblx0QElucHV0KCkgY3VzdG9tT3B0aW9uczogc3RyaW5nO1xuXG5cdHB1YmxpYyBzZWFyY2hUZXh0ID0gJyc7XG5cblx0cHVibGljIGlzQXBwbGllZCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgbGFzdEFwcGxpZWRGaWx0ZXI6IGFueSA9IHt9O1xuXG5cdHByaXZhdGUgcmVzZXRlZEZpbHRlcjogYW55O1xuXG5cdHB1YmxpYyBtZW51TGVmdCA9IFwiMHB4XCI7XG5cblx0cHVibGljIG1lbnVSaWdodCA9IFwiMHB4XCI7XG5cblx0cHVibGljIG1lbnVUb3AgPSBcIjBweFwiO1xuXG5cdHB1YmxpYyBtZW51Qm90dG9tID0gXCIwcHhcIjtcblxuXHRwdWJsaWMgc2hvd05vRmlsdGVyUmVzdWx0OiBib29sZWFuO1xuXG5cdHB1YmxpYyBlcnJvck1lc3NhZ2U6IHN0cmluZ1tdID0gW11cblxuXHRwdWJsaWMgZGF0ZXBpY2tlclBvc2l0aW9uID0gREFURVBJQ0tFUl9QT1NJVElPTjtcblxuXHRwdWJsaWMgc2VsZWN0ZWREYXRlUmFuZ2VPcHRpb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cblx0QFZpZXdDaGlsZCgnc2VhcmNoQm94JywgeyBzdGF0aWM6IGZhbHNlIH0pIHNlYXJjaEJveDogWmVuZHVTZWFyY2hCb3hDb21wb25lbnQ7XG5cblx0QFZpZXdDaGlsZCgnbWFpbkNvbXBvbmVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBfY29tcG9uZW50RWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cblx0Y29uc3RydWN0b3IoKSB7IH1cblxuXHRwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogYW55KTogdm9pZCB7XG5cdFx0aWYgKGNoYW5nZXMuY29uZmlnICYmIGNoYW5nZXMuY29uZmlnLmN1cnJlbnRWYWx1ZSkge1xuXG5cdFx0XHQvLyBpbml0IHZhbHVlc1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIHRoaXMuY29uZmlnLml0ZW1zKSB7XG5cdFx0XHRcdGlmIChpdGVtLnR5cGUgPT09ICdtdWx0aXNlbGVjdCcpIHtcblx0XHRcdFx0XHRpdGVtLmRhdGFTb3VyY2UgPSBpdGVtLmRhdGFTb3VyY2UgPyB0aGlzLmV4dHJhY3RVbmlxdWVEYXRhU291cmNlKGl0ZW0uZGF0YVNvdXJjZSkgOiBbXTtcblx0XHRcdFx0fSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdkYXRlUmFuZ2UnICYmICFpdGVtLmRhdGVSYW5nZSkge1xuXHRcdFx0XHRcdGl0ZW0uZGF0ZVJhbmdlID0geyBzdGFydDogbnVsbCwgZW5kOiBudWxsIH07XG5cblx0XHRcdFx0XHQvLyBpbml0IGRhdGUgcmFuZ2Ugb3B0aW9uc1xuXHRcdFx0XHRcdGlmIChpdGVtLnNob3dEYXRlUmFuZ2VPcHRpb25zICYmICFpdGVtLmRhdGVSYW5nZU9wdGlvbnM/Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0aXRlbS5kYXRlUmFuZ2VPcHRpb25zID0gdGhpcy5nZXREZWZhdWx0RGF0ZVJhbmdlT3B0aW9ucygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdudW1iZXJSYW5nZScgJiYgIWl0ZW0ubnVtYmVyUmFuZ2UpIHtcblx0XHRcdFx0XHRpdGVtLm51bWJlclJhbmdlID0ge307XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodHlwZW9mIGl0ZW0uc2hvd1RpbWUgIT09ICdib29sZWFuJykge1xuXHRcdFx0XHRcdGl0ZW0uc2hvd1RpbWUgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuZmlsdGVySXRlbXMoKTtcblxuXHRcdFx0dGhpcy5yZXNldGVkRmlsdGVyID0gdGhpcy5nZXRGaWx0ZXJPYmplY3QoKTtcblx0XHRcdHRoaXMuZmlsdGVyID0gdGhpcy5nZXRGaWx0ZXJPYmplY3QoKTtcblx0XHRcdHRoaXMubGFzdEFwcGxpZWRGaWx0ZXIgPSBVdGlsLmNsb25lKHRoaXMuZmlsdGVyKTtcblx0XHR9XG5cblx0XHRpZiAoY2hhbmdlcy5maWx0ZXIgJiYgY2hhbmdlcy5maWx0ZXIuY3VycmVudFZhbHVlKSB7XG5cdFx0XHR0aGlzLmxhc3RBcHBsaWVkRmlsdGVyID0gVXRpbC5jbG9uZShjaGFuZ2VzLmZpbHRlci5jdXJyZW50VmFsdWUpO1xuXG5cdFx0XHR0aGlzLnVwZGF0ZUFwcGxpZWRTdGF0ZSgpO1xuXHRcdH1cblxuXHRcdGlmIChjaGFuZ2VzLmlzVmlzaWJsZSAmJiBjaGFuZ2VzLmlzVmlzaWJsZS5jdXJyZW50VmFsdWUpIHtcblx0XHRcdHRoaXMudXBkYXRlUGxhY2VtZW50KCk7XG5cdFx0XHR0aGlzLmZvY3VzU2VhcmNoQm94KCk7XG5cdFx0fVxuXHR9XG5cdFxuXHRASG9zdExpc3RlbmVyKCd3aW5kb3c6bW91c2Vkb3duJywgWyckZXZlbnQnXSlcblx0b3V0c2lkZUhhbmRsaW5nKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG5cdFx0aWYgKCF0aGlzLmlzVmlzaWJsZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcblx0XHRpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnModGFyZ2V0KSkge1xuXHRcdFx0Ly8gZWxlbWVudCBub3QgaW4gdGhlIERPTVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodGhpcy5fY29tcG9uZW50RWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBoaWRlIHRoZSBtZW51IGZvciBvdXRzaWRlIGNsaWNrXG5cdFx0dGhpcy5oaWRlKCk7XG5cblx0XHQvLyByZXN0b3JlIHZhbHVlc1xuXHRcdHRoaXMucmVzdG9yZVByZXZpb3VzQXBwbGllZCgpO1xuXHR9XG5cblx0QEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG5cdHdpbmRvd1NpemVIYW5kbGluZygpIHtcblx0XHRpZiAoIXRoaXMuaXNWaXNpYmxlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy51cGRhdGVQbGFjZW1lbnQoKTtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnLCBbJyRldmVudCddKVxuXHR3aW5kb3dTY3JvbGwoKSB7XG5cdFx0aWYgKCF0aGlzLmlzVmlzaWJsZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMudXBkYXRlUGxhY2VtZW50KCk7XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKCd3aW5kb3c6d2hlZWwnLCBbJyRldmVudCddKVxuXHRoYW5kbGVNb3VzZVNjcm9sbChldmVudDogV2hlZWxFdmVudCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5pc1Zpc2libGUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cdFx0aWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKHRhcmdldCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRoaXMuX2NvbXBvbmVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyh0YXJnZXQpICYmICF0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdidXR0b24tc3Ryb2tlZCcpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5oaWRlKCk7XG5cdFx0dGhpcy5yZXN0b3JlUHJldmlvdXNBcHBsaWVkKCk7XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bicsIFsnJGV2ZW50J10pXG5cdG9uV2luZG93S2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuXHRcdGlmICghdGhpcy5pc1Zpc2libGUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyB8fCBldmVudC5rZXkgPT09ICdQYWdlVXAnIHx8IGV2ZW50LmtleSA9PT0gJ1BhZ2VEb3duJyB8fCBldmVudC5rZXkgPT09ICdIb21lJyB8fCBldmVudC5rZXkgPT09ICdFbmQnKSB7XG5cblx0XHRcdGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcblx0XHRcdGlmICghZG9jdW1lbnQuYm9keS5jb250YWlucyh0YXJnZXQpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuX2NvbXBvbmVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyh0YXJnZXQpICYmICF0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdidXR0b24tc3Ryb2tlZCcpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRoaXMuaGlkZSgpO1xuXHRcdFx0dGhpcy5yZXN0b3JlUHJldmlvdXNBcHBsaWVkKCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGZvY3VzU2VhcmNoQm94KCkge1xuXHRcdHRoaXMuc2VhcmNoQm94LmRvRm9jdXMoKTtcblx0fVxuXG5cdHB1YmxpYyBpc01lbnVJc1Zpc2libGUoaXRlbTogRmlsdGVyc0NvbmZpZ0l0ZW0pIHtcblx0XHRpZiAoaXRlbS5maWx0ZXJlZERhdGFTb3VyY2UgJiYgdGhpcy5zZWFyY2hUZXh0KSB7XG5cdFx0XHRpZiAoIWl0ZW0uZmlsdGVyZWREYXRhU291cmNlLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRwcml2YXRlIGV4dHJhY3RVbmlxdWVEYXRhU291cmNlKFxuXHRcdGFycmF5OiB7XG5cdFx0XHRpZDogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdFx0bmFtZTogc3RyaW5nIHwgbnVtYmVyXG5cdFx0fVtdXG5cdCk6IHtcblx0XHRpZDogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdG5hbWU6IHN0cmluZyB8IG51bWJlclxuXHR9W10ge1xuXHRcdGNvbnN0IGl0ZW1zID0gYXJyYXkuZmlsdGVyKGVsID0+IHtcblx0XHRcdHJldHVybiBCb29sZWFuKFxuXHRcdFx0XHR0eXBlb2YgZWwuaWQgPT09ICdudW1iZXInID8gdHlwZW9mIGVsLmlkICE9PSB1bmRlZmluZWQgOiBlbC5pZCAmJlxuXHRcdFx0XHRcdHR5cGVvZiBlbC5uYW1lID09PSAnbnVtYmVyJyA/IHR5cGVvZiBlbC5uYW1lICE9PSB1bmRlZmluZWQgOiBlbC5uYW1lXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHRcdHJldHVybiB1bmlxQnkoaXRlbXMsIChlbCkgPT4gZWwuaWQpO1xuXHR9XG5cblx0cHVibGljIG9uU2VsZWN0QWxsKGl0ZW06IEZpbHRlcnNDb25maWdJdGVtKSB7XG5cdFx0aXRlbS5kYXRhU291cmNlLmZvckVhY2goZCA9PiBkLmNoZWNrZWQgPSBpdGVtLmlzU2VsZWN0ZWRBbGwpO1xuXHR9XG5cblx0cHVibGljIGlzSXRlbUFjdGl2ZShpdGVtOiBGaWx0ZXJzQ29uZmlnSXRlbSk6IGJvb2xlYW4ge1xuXHRcdGlmIChpdGVtLnR5cGUgPT09ICdtdWx0aXNlbGVjdCcpIHtcblx0XHRcdGNvbnN0IGNoZWNrZWRJdGVtcyA9IGl0ZW0uZGF0YVNvdXJjZS5maWx0ZXIoZWwgPT4gZWwuY2hlY2tlZCk7XG5cdFx0XHRpdGVtLmlzU2VsZWN0ZWRBbGwgPSBjaGVja2VkSXRlbXMubGVuZ3RoID09PSBpdGVtLmRhdGFTb3VyY2UubGVuZ3RoXG5cdFx0XHRyZXR1cm4gY2hlY2tlZEl0ZW1zLmxlbmd0aCA+IDA7XG5cdFx0fSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdyYWRpbycpIHtcblx0XHRcdHJldHVybiBpdGVtLnJhZGlvT3B0aW9ucy5zb21lKHJvID0+IHJvLnNlbGVjdGVkKTtcblx0XHR9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gJ251bWJlclJhbmdlJykge1xuXHRcdFx0cmV0dXJuIEJvb2xlYW4oaXRlbS5udW1iZXJSYW5nZS5mcm9tIHx8IGl0ZW0ubnVtYmVyUmFuZ2UudG8pO1xuXHRcdH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAnZGF0ZVJhbmdlJykge1xuXHRcdFx0cmV0dXJuIEJvb2xlYW4oaXRlbS5kYXRlUmFuZ2Uuc3RhcnQgfHwgaXRlbS5kYXRlUmFuZ2UuZW5kKTtcblx0XHR9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gJ2RhdGUnKSB7XG5cdFx0XHRyZXR1cm4gQm9vbGVhbihpdGVtLmRhdGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNlYXJjaFRleHRDaGFuZ2VkKCkge1xuXHRcdHRoaXMuZmlsdGVySXRlbXMoKTtcblx0fVxuXG5cdHB1YmxpYyBmaWx0ZXJJdGVtcygpIHtcblx0XHRsZXQgZmlsdGVyZWRJdGVtc0NvdW50ID0gMDsgLy8gSW5pdGlhbGl6ZSB3aXRoIDBcblxuXHRcdGZvciAoY29uc3QgY29uZmlnSXRlbSBvZiB0aGlzLmNvbmZpZy5pdGVtcykge1xuXHRcdFx0aWYgKGNvbmZpZ0l0ZW0udHlwZSA9PT0gJ211bHRpc2VsZWN0Jykge1xuXHRcdFx0XHRjb25maWdJdGVtLmZpbHRlcmVkRGF0YVNvdXJjZSA9IGNvbmZpZ0l0ZW0uZGF0YVNvdXJjZS5maWx0ZXIoZWwgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHByZXBhcmVkTmFtZSA9IHR5cGVvZiBlbC5uYW1lID09PSAnbnVtYmVyJyA/IGVsLm5hbWUudG9TdHJpbmcoKSA6IGVsLm5hbWU7XG5cdFx0XHRcdFx0cmV0dXJuIHByZXBhcmVkTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0ZmlsdGVyZWRJdGVtc0NvdW50ICs9IGNvbmZpZ0l0ZW0uZmlsdGVyZWREYXRhU291cmNlLmxlbmd0aDsgLy8gSW5jcmVtZW50IHRoZSBjb3VudCBieSB0aGUgbGVuZ3RoIG9mIGZpbHRlcmVkRGF0YVNvdXJjZVxuXHRcdFx0fSBlbHNlIGlmIChjb25maWdJdGVtLnR5cGUgPT09ICdkYXRlUmFuZ2UnKSB7XG5cdFx0XHRcdGlmICh0aGlzLnNlYXJjaFRleHQgJiYgIUJvb2xlYW4oY29uZmlnSXRlbS5kYXRlUmFuZ2Uuc3RhcnQgfHwgY29uZmlnSXRlbS5kYXRlUmFuZ2UuZW5kKSkge1xuXHRcdFx0XHRcdGNvbmZpZ0l0ZW0uZmlsdGVyZWREYXRhU291cmNlID0gW107XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoY29uZmlnSXRlbS50eXBlID09PSAnbnVtYmVyUmFuZ2UnKSB7XG5cdFx0XHRcdGlmICh0aGlzLnNlYXJjaFRleHQgJiYgIUJvb2xlYW4oY29uZmlnSXRlbS5udW1iZXJSYW5nZS5mcm9tIHx8IGNvbmZpZ0l0ZW0ubnVtYmVyUmFuZ2UudG8pKSB7XG5cdFx0XHRcdFx0Y29uZmlnSXRlbS5maWx0ZXJlZERhdGFTb3VyY2UgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLnNob3dOb0ZpbHRlclJlc3VsdCA9IHRoaXMuc2VhcmNoVGV4dCAmJiBmaWx0ZXJlZEl0ZW1zQ291bnQgPT09IDA7XG5cblx0fVxuXG5cdHByaXZhdGUgcmVzZXRGaWx0ZXJzKCkge1xuXHRcdGxldCBzZWxlY3RBbGwgPSB0aGlzLnJlc2V0QmVoYXZpb3IgPT09IFwic2V0X2FsbFwiO1xuXHRcdHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2VPcHRpb25zID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5jb25maWcuaXRlbXMpIHtcblx0XHRcdGlmIChpdGVtLmRhdGFTb3VyY2UpIHtcblx0XHRcdFx0aXRlbS5pc1NlbGVjdGVkQWxsID0gc2VsZWN0QWxsO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgZHNJdGVtIG9mIGl0ZW0uZGF0YVNvdXJjZSkge1xuXHRcdFx0XHRcdGRzSXRlbS5jaGVja2VkID0gc2VsZWN0QWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpdGVtLmRhdGVSYW5nZSkge1xuXHRcdFx0XHRpdGVtLmRhdGVSYW5nZSA9IHsgc3RhcnQ6IG51bGwsIGVuZDogbnVsbCB9O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXRlbS5udW1iZXJSYW5nZSkge1xuXHRcdFx0XHRpdGVtLm51bWJlclJhbmdlID0geyBmcm9tOiBudWxsLCB0bzogbnVsbCB9O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXRlbS5kYXRlKSB7XG5cdFx0XHRcdGl0ZW0uZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaXRlbS50eXBlID09PSAndG9nZ2xlJykge1xuXHRcdFx0XHRpdGVtLmVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGlmIChpdGVtLnR5cGUgPT09ICdyYWRpbycpIHtcblx0XHRcdFx0aXRlbS5yYWRpb09wdGlvbnMuZm9yRWFjaChlID0+IHtcblx0XHRcdFx0XHRpZiAoZS5pZCA9PT0gaXRlbS5zZWxlY3RlZFJhZGlvKSB7XG5cdFx0XHRcdFx0XHRlLnNlbGVjdGVkID0gdHJ1ZVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRlLnNlbGVjdGVkID0gZmFsc2Vcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSByZXN0b3JlUHJldmlvdXNBcHBsaWVkKCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmNvbmZpZy5pdGVtcykge1xuXHRcdFx0c3dpdGNoIChpdGVtLnR5cGUpIHtcblx0XHRcdFx0Y2FzZSAnbXVsdGlzZWxlY3QnOlxuXHRcdFx0XHRcdGlmIChpdGVtLmRhdGFTb3VyY2UpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMubGFzdEFwcGxpZWRGaWx0ZXJbaXRlbS5rZXldO1xuXG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGRhdGFJdGVtIG9mIGl0ZW0uZGF0YVNvdXJjZSkge1xuXHRcdFx0XHRcdFx0XHRkYXRhSXRlbS5jaGVja2VkID0gc2VsZWN0aW9uID8gc2VsZWN0aW9uLmluY2x1ZGVzKGRhdGFJdGVtLmlkKSA6IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnZGF0ZVJhbmdlJzpcblx0XHRcdFx0XHRpdGVtLmRhdGVSYW5nZSA9IHRoaXMubGFzdEFwcGxpZWRGaWx0ZXJbaXRlbS5rZXldIHx8IHsgc3RhcnQ6IG51bGwsIGVuZDogbnVsbCB9O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdudW1iZXJSYW5nZSc6XG5cdFx0XHRcdFx0aXRlbS5udW1iZXJSYW5nZSA9IHRoaXMubGFzdEFwcGxpZWRGaWx0ZXJbaXRlbS5rZXldIHx8IHt9O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd0b2dnbGUnOlxuXHRcdFx0XHRcdGl0ZW0uZGF0ZVJhbmdlID0gdGhpcy5sYXN0QXBwbGllZEZpbHRlcltpdGVtLmtleV07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0XHRcdGl0ZW0uZGF0ZSA9IHRoaXMubGFzdEFwcGxpZWRGaWx0ZXJbaXRlbS5rZXldO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdyYWRpbyc6XG5cdFx0XHRcdFx0aXRlbS5zZWxlY3RlZFJhZGlvID0gdGhpcy5sYXN0QXBwbGllZEZpbHRlcltpdGVtLmtleV07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHJlc2V0KCkge1xuXHRcdHRoaXMucmVzZXRGaWx0ZXJzKCk7XG5cblx0XHR0aGlzLmZpbHRlciA9IHRoaXMuZ2V0RmlsdGVyT2JqZWN0KCk7XG5cdFx0dGhpcy5yZXNldGVkRmlsdGVyID0gdGhpcy5nZXRGaWx0ZXJPYmplY3QoKTtcblx0fVxuXG5cdHB1YmxpYyBhcHBseSgpIHtcblx0XHR0aGlzLmZpbHRlciA9IHRoaXMuZ2V0RmlsdGVyT2JqZWN0KCk7XG5cdFx0bGV0IGhhc0Vycm9yID0gZmFsc2U7XG5cdFx0Zm9yIChjb25zdCBpdGVyYXRvciBvZiB0aGlzLmNvbmZpZy5pdGVtcykge1xuXHRcdFx0Y29uc3QgaXRlbUZsYWcgPSB0aGlzLm9uQ2hlY2tWYWxpZGl0eShpdGVyYXRvcik7XG5cdFx0XHRpZiAoIWl0ZW1GbGFnKSB7XG5cdFx0XHRcdGhhc0Vycm9yID0gdHJ1ZVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoaGFzRXJyb3IpIHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4gdGhpcy5lcnJvck1lc3NhZ2UgPSBbXSwgNTAwMCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZXJyb3JNZXNzYWdlID0gW107XG5cdFx0fVxuXHRcdHRoaXMubGFzdEFwcGxpZWRGaWx0ZXIgPSBVdGlsLmNsb25lKHRoaXMuZmlsdGVyKTtcblxuXHRcdHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIpO1xuXG5cdFx0Ly8gdXBkYXRlIHRoZSBhcHBseSBzdGF0ZVxuXHRcdHRoaXMudXBkYXRlQXBwbGllZFN0YXRlKCk7XG5cblx0XHR0aGlzLmhpZGUoKTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlQXBwbGllZFN0YXRlKCkge1xuXHRcdHRoaXMuaXNBcHBsaWVkID0gZmFsc2U7XG5cdFx0aWYgKE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRpZiAodGhpcy5yZXNldGVkRmlsdGVyKSB7XG5cdFx0XHRcdC8vIEZpbHRlciB3YXMgcmVzZXQsIHNvIGNvbXBhcmUgdGhlIHJlc2V0IGZpbHRlciBvYmplY3Qgd2l0aCB0aGUgY3VycmVudCBmaWx0ZXJcblx0XHRcdFx0Ly8gV2hlbiB1c2VyIGNsaWNrIG9uIFJlc2V0IGFuZCBUaGVuIEFwcGx5LCBmaWx0ZXIgbXVzdCB1bmhpZ2hsaWdodGVkXG5cdFx0XHRcdGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLnJlc2V0ZWRGaWx0ZXIpICE9PSBKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlcikpIHtcblx0XHRcdFx0XHR0aGlzLmlzQXBwbGllZCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuaXNBcHBsaWVkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldEZpbHRlck9iamVjdCgpIHtcblx0XHRjb25zdCBmaWx0ZXIgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmNvbmZpZy5pdGVtcykge1xuXHRcdFx0c3dpdGNoIChpdGVtLnR5cGUpIHtcblx0XHRcdFx0Y2FzZSAnbXVsdGlzZWxlY3QnOlxuXHRcdFx0XHRcdGlmIChpdGVtLmRhdGFTb3VyY2UgJiYgaXRlbS5kYXRhU291cmNlLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgY2hlY2tlZElkcyA9IGl0ZW0uZGF0YVNvdXJjZVxuXHRcdFx0XHRcdFx0XHQuZmlsdGVyKGkgPT4gaS5jaGVja2VkKVxuXHRcdFx0XHRcdFx0XHQubWFwKGkgPT4gaS5pZCk7XG5cblx0XHRcdFx0XHRcdGlmIChjaGVja2VkSWRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRmaWx0ZXJbaXRlbS5rZXldID0gY2hlY2tlZElkcztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2RhdGVSYW5nZSc6XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0aXRlbS5kYXRlUmFuZ2UgJiZcblx0XHRcdFx0XHRcdGl0ZW0uZGF0ZVJhbmdlLnN0YXJ0ICYmXG5cdFx0XHRcdFx0XHRpdGVtLmRhdGVSYW5nZS5lbmRcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGZpbHRlcltpdGVtLmtleV0gPSBpdGVtLmRhdGVSYW5nZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ251bWJlclJhbmdlJzpcblx0XHRcdFx0XHRpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm51bWJlclJhbmdlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbT8ubnVtYmVyUmFuZ2U/LmZyb20gPT09ICdudW1iZXInICYmXG5cdFx0XHRcdFx0XHR0eXBlb2YgaXRlbT8ubnVtYmVyUmFuZ2U/LnRvID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcltpdGVtLmtleV0gPSBpdGVtLm51bWJlclJhbmdlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3RvZ2dsZSc6XG5cdFx0XHRcdFx0ZmlsdGVyW2l0ZW0ua2V5XSA9IGl0ZW0uZW5hYmxlZCB8fCBmYWxzZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRcdFx0aWYgKGl0ZW0uZGF0ZSkge1xuXHRcdFx0XHRcdFx0ZmlsdGVyW2l0ZW0ua2V5XSA9IGl0ZW0uZGF0ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3JhZGlvJzpcblx0XHRcdFx0XHRmaWx0ZXJbaXRlbS5rZXldID0gaXRlbS5yYWRpb09wdGlvbnMuZmluZChybyA9PiByby5zZWxlY3RlZCk/LmlkO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmaWx0ZXI7XG5cdH1cblxuXHRwdWJsaWMgaGlkZSgpIHtcblx0XHR0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xuXHRcdHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xuXHRcdHRoaXMuZmlsdGVySXRlbXMoKTtcblxuXHRcdHRoaXMuaXNWaXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xuXHR9XG5cblx0cHVibGljIHJhZGlvQ2hhbmdlZCh2YWx1ZTogc3RyaW5nLCBpdGVtOiBGaWx0ZXJzQ29uZmlnSXRlbSk6IHZvaWQge1xuXHRcdGl0ZW0ucmFkaW9PcHRpb25zLmZvckVhY2gob3B0ID0+IG9wdC5zZWxlY3RlZCA9IG9wdC5pZCA9PT0gdmFsdWUpO1xuXHR9XG5cblx0cHVibGljIHRvZ2dsZSgpIHtcblx0XHR0aGlzLmlzVmlzaWJsZSA9ICF0aGlzLmlzVmlzaWJsZTtcblx0XHR0aGlzLnVwZGF0ZVBsYWNlbWVudCgpO1xuXHRcdHRoaXMuZm9jdXNTZWFyY2hCb3goKVxuXHR9XG5cblx0cHVibGljIG9uQ2hlY2tWYWxpZGl0eShpdGVtOiBGaWx0ZXJzQ29uZmlnSXRlbSkge1xuXHRcdGlmIChpdGVtLnR5cGUgPT09ICdudW1iZXJSYW5nZScpIHtcblx0XHRcdGlmICh0eXBlb2YgaXRlbS5udW1iZXJSYW5nZS5mcm9tID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgaXRlbS5udW1iZXJSYW5nZS50byA9PT0gJ251bWJlcicgJiYgaXRlbS5udW1iZXJSYW5nZS5mcm9tID49IGl0ZW0ubnVtYmVyUmFuZ2UudG8pIHtcblx0XHRcdFx0dGhpcy5lcnJvck1lc3NhZ2UucHVzaChgSW52YWxpZCBOdW1iZXIgcmFuZ2UsIE1pbiBudW1iZXIgc2hvdWxkIGJlIGxlc3MgdGhhbiBNYXggbnVtYmVyLmApOyBcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoaXRlbS50eXBlID09PSAnZGF0ZVJhbmdlJykge1xuXHRcdFx0aWYgKGl0ZW0uZGF0ZVJhbmdlLnN0YXJ0ICYmIGl0ZW0uZGF0ZVJhbmdlLmVuZCAmJiBuZXcgRGF0ZShpdGVtLmRhdGVSYW5nZS5zdGFydCkgPj0gbmV3IERhdGUoaXRlbS5kYXRlUmFuZ2UuZW5kKSkge1xuXHRcdFx0XHR0aGlzLmVycm9yTWVzc2FnZS5wdXNoKGBJbnZhbGlkIERhdGUgcmFuZ2UsIFN0YXJ0IGRhdGUgc2hvdWxkIGJlIGxlc3MgdGhhbiBFbmQgZGF0ZS5gKTsgXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWVcblx0fVxuXG5cdHB1YmxpYyB1cGRhdGVQbGFjZW1lbnQoKSB7XG5cdFx0Y29uc3QgY29udGFpbmVyID0gdGhpcy5fY29tcG9uZW50RWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuXHRcdGNvbnN0IHJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0Y29uc3QgbGVmdCA9IHJlY3QubGVmdDtcblx0XHRjb25zdCByaWdodCA9IHJlY3QucmlnaHQ7XG5cdFx0Y29uc3QgdG9wID0gcmVjdC50b3A7XG5cdFx0Y29uc3QgYm90dG9tID0gd2luZG93LmlubmVySGVpZ2h0IC0gdG9wO1xuXG5cdFx0Ly9VcGRhdGUgbGVmdC1yaWdodCBwb3NpdGlvbiBcblx0XHRpZiAodGhpcy5wb3NpdGlvbi5pbmNsdWRlcyhcImF1dG9cIikpIHtcblx0XHRcdGNvbnN0IGhvcml6b250YWxQb3NpdGlvbiA9IHRoaXMuZ2V0SG9yaXpvbnRhbFBvc2l0aW9uKCk7XG5cdFx0XHR0aGlzLm1lbnVSaWdodCA9IGhvcml6b250YWxQb3NpdGlvbiA9PT0gXCJsZWZ0XCIgPyBgJHt3aW5kb3cuaW5uZXJXaWR0aCAtIHJpZ2h0fXB4YCA6IFwidW5zZXRcIjtcblx0XHRcdHRoaXMubWVudUxlZnQgPSBob3Jpem9udGFsUG9zaXRpb24gPT09IFwicmlnaHRcIiA/IGAke2xlZnR9cHhgIDogXCJ1bnNldFwiO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5wb3NpdGlvbi5pbmNsdWRlcyhcImxlZnRcIikpIHtcblx0XHRcdHRoaXMubWVudVJpZ2h0ID0gYCR7d2luZG93LmlubmVyV2lkdGggLSByaWdodH1weGA7XG5cdFx0XHR0aGlzLm1lbnVMZWZ0ID0gXCJ1bnNldFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm1lbnVMZWZ0ID0gYCR7bGVmdH1weGA7XG5cdFx0XHR0aGlzLm1lbnVSaWdodCA9IFwidW5zZXRcIjtcblx0XHR9XG5cblx0XHQvL1VwZGF0ZSB0b3AtYm90dG9tIHBvc2l0aW9uIFxuXHRcdGlmICh0aGlzLnBvc2l0aW9uLmluY2x1ZGVzKFwiYXV0b1wiKSkge1xuXHRcdFx0Y29uc3QgdmVydGljYWxQb3NpdGlvbiA9IHRoaXMuZ2V0VmVydGljYWxQb3NpdGlvbigpO1xuXHRcdFx0dGhpcy5tZW51VG9wID0gdmVydGljYWxQb3NpdGlvbiA9PT0gXCJib3R0b21cIiA/IGAke3RvcCArIDQyfXB4YCA6IFwidW5zZXRcIjtcblx0XHRcdHRoaXMubWVudUJvdHRvbSA9IHZlcnRpY2FsUG9zaXRpb24gPT09IFwidG9wXCIgPyBgJHtib3R0b219cHhgIDogXCJ1bnNldFwiO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5wb3NpdGlvbi5pbmNsdWRlcyhcInRvcFwiKSkge1xuXHRcdFx0dGhpcy5tZW51VG9wID0gXCJ1bnNldFwiO1xuXHRcdFx0dGhpcy5tZW51Qm90dG9tID0gYCR7Ym90dG9tICsgMTB9cHhgO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm1lbnVUb3AgPSBgJHt0b3AgKyA1NX1weGA7XG5cdFx0XHR0aGlzLm1lbnVCb3R0b20gPSBcInVuc2V0XCI7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRWZXJ0aWNhbFBvc2l0aW9uKCk6IFwiYm90dG9tXCIgfCBcInRvcFwiIHtcblx0XHRjb25zdCB0b3AgPSB0aGlzLl9jb21wb25lbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuXHRcdHJldHVybiB0b3AgPiB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyID8gXCJ0b3BcIiA6IFwiYm90dG9tXCI7XG5cdH1cblxuXHRwcml2YXRlIGdldEhvcml6b250YWxQb3NpdGlvbigpOiBcInJpZ2h0XCIgfCBcImxlZnRcIiB7XG5cdFx0Y29uc3QgbGVmdCA9IHRoaXMuX2NvbXBvbmVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXHRcdHJldHVybiBsZWZ0ID4gd2luZG93LmlubmVyV2lkdGggLyAyID8gXCJsZWZ0XCIgOiBcInJpZ2h0XCI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RGVmYXVsdERhdGVSYW5nZU9wdGlvbnMoKTogeyBuYW1lOiBzdHJpbmcsIGRhdGVSYW5nZTogRGF0ZVJhbmdlIH1bXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogJ1RvZGF5Jyxcblx0XHRcdFx0ZGF0ZVJhbmdlOiB7XG5cdFx0XHRcdFx0c3RhcnQ6IG1vbWVudCgpLnN0YXJ0T2YoXCJkYXlcIikudG9EYXRlKCksXG5cdFx0XHRcdFx0ZW5kOiBtb21lbnQoKS5lbmRPZihcImRheVwiKS50b0RhdGUoKVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiAnWWVzdGVyZGF5Jyxcblx0XHRcdFx0ZGF0ZVJhbmdlOiB7XG5cdFx0XHRcdFx0c3RhcnQ6IG1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXlzJykuc3RhcnRPZihcImRheVwiKS50b0RhdGUoKSxcblx0XHRcdFx0XHRlbmQ6IG1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXlzJykuZW5kT2YoXCJkYXlcIikudG9EYXRlKClcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogJ1RoaXMgV2VlaycsXG5cdFx0XHRcdGRhdGVSYW5nZToge1xuXHRcdFx0XHRcdHN0YXJ0OiBtb21lbnQoKS5zdGFydE9mKCd3ZWVrJykudG9EYXRlKCksXG5cdFx0XHRcdFx0ZW5kOiBtb21lbnQoKS5lbmRPZihcIndlZWtcIikudG9EYXRlKClcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogJ0xhc3QgV2VlaycsXG5cdFx0XHRcdGRhdGVSYW5nZToge1xuXHRcdFx0XHRcdHN0YXJ0OiBtb21lbnQoKS5zdWJ0cmFjdCg3LCAnZGF5cycpLnN0YXJ0T2YoJ3dlZWsnKS50b0RhdGUoKSxcblx0XHRcdFx0XHRlbmQ6IG1vbWVudCgpLnN1YnRyYWN0KDcsICdkYXlzJykuZW5kT2YoJ3dlZWsnKS50b0RhdGUoKVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiAnVGhpcyBNb250aCcsXG5cdFx0XHRcdGRhdGVSYW5nZToge1xuXHRcdFx0XHRcdHN0YXJ0OiBtb21lbnQoKS5zdGFydE9mKCdtb250aCcpLnRvRGF0ZSgpLFxuXHRcdFx0XHRcdGVuZDogbW9tZW50KCkuZW5kT2YoXCJtb250aFwiKS50b0RhdGUoKVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiAnTGFzdCBNb250aCcsXG5cdFx0XHRcdGRhdGVSYW5nZToge1xuXHRcdFx0XHRcdHN0YXJ0OiBtb21lbnQoKS5zdWJ0cmFjdCgxLCAnbW9udGgnKS5zdGFydE9mKCdtb250aCcpLnRvRGF0ZSgpLFxuXHRcdFx0XHRcdGVuZDogbW9tZW50KCkuc3VidHJhY3QoMSwgJ21vbnRoJykuZW5kT2YoJ21vbnRoJykudG9EYXRlKClcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF1cblx0fVxuXG5cdHB1YmxpYyBoYW5kbGVEYXRlUmFuZ2VPcHRpb25DbGljayhpdGVtLCBvcHRpb24pIHtcblx0XHRpdGVtLmRhdGVSYW5nZSA9IG9wdGlvbi5kYXRlUmFuZ2U7XG5cdFx0dGhpcy5zZWxlY3RlZERhdGVSYW5nZU9wdGlvbnNbaXRlbS5rZXldID0gb3B0aW9uLm5hbWU7XG5cdH1cblxuXHRwdWJsaWMgaGFuZGxlQ3VzdG9tRGF0ZVJhbmdlQ2xpY2soaXRlbSkge1xuXHRcdHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2VPcHRpb25zW2l0ZW0ua2V5XSA9IFwiQ3VzdG9tXCI7XG5cdH1cblxuXHRwdWJsaWMgaGFuZGxlRW5kRGF0ZUNoYW5nZShpdGVtKSB7XG5cdFx0aWYgKCFpdGVtLnNob3dUaW1lKSB7XG5cdFx0XHRpdGVtLmRhdGVSYW5nZS5lbmQgPSBtb21lbnQoaXRlbS5kYXRlUmFuZ2UuZW5kKS5lbmRPZignZGF5JykudG9EYXRlKCk7XG5cdFx0fVxuXHR9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmlsdGVycy1jb21wb25lbnRcIlxuXHQgI21haW5Db21wb25lbnRcblx0IGNsaWNrLW91dD1cImlzVmlzaWJsZSAmJiBoaWRlKClcIj5cblxuXHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWN1c3RvbVRyaWdnZXJcIj5cblx0XHQ8YnV0dG9uIChjbGljayk9XCJ0b2dnbGUoKVwiXG5cdFx0XHRcdGNsYXNzPVwiYnV0dG9uLXN0cm9rZWQgZmlsdGVyIHt7aXNBcHBsaWVkID8gJ2FwcGxpZWQnIDogJyd9fVwiPlxuXHRcdFx0PHplbi1pY29uIFtzcmNdPVwiaW1hZ2VVcmxcIlxuXHRcdFx0XHRcdCAgKm5nSWY9XCJpbWFnZVVybFwiPjwvemVuLWljb24+XG5cdFx0XHQ8aSBjbGFzcz1cImZpbHRlci1pY29uIG1hdGVyaWFsLWljb25zXCJcblx0XHRcdCAgICpuZ0lmPVwiIWltYWdlVXJsXCI+ZmlsdGVyX2xpc3Q8L2k+XG5cdFx0XHQ8c3BhbiAqbmdJZj1cImxhYmVsXCI+e3sgbGFiZWwgfX08L3NwYW4+XG5cdFx0PC9idXR0b24+XG5cdDwvbmctY29udGFpbmVyPlxuXG5cdDxuZy1jb250ZW50ICpuZ0lmPVwiY3VzdG9tVHJpZ2dlclwiPjwvbmctY29udGVudD5cblxuXHQ8ZGl2IFtoaWRkZW5dPVwiIWlzVmlzaWJsZVwiXG5cdFx0IGNsYXNzPVwiYWN0aW9uLW1lbnUgbWVudS1jb250ZW50XCJcblx0XHQgW2NsYXNzLmN1c3RvbVRyaWdnZXJdPVwiY3VzdG9tVHJpZ2dlclwiXG5cdFx0IFtuZ1N0eWxlXT1cInsgJ2xlZnQnOiBtZW51TGVmdCwgJ3JpZ2h0JzogbWVudVJpZ2h0LCAndG9wJzogbWVudVRvcCwgJ2JvdHRvbSc6IG1lbnVCb3R0b20gIH1cIj5cblx0XHQ8ZGl2IGNsYXNzPVwiYWN0aW9uLW1lbnUtaGVhZGVyXCI+XG5cdFx0XHQ8emVuLXNlYXJjaC1ib3ggWyh0ZXh0KV09XCJzZWFyY2hUZXh0XCJcblx0XHRcdFx0XHRcdFx0I3NlYXJjaEJveFxuXHRcdFx0XHRcdFx0XHQodGV4dENoYW5nZSk9XCJzZWFyY2hUZXh0Q2hhbmdlZCgpXCI+PC96ZW4tc2VhcmNoLWJveD5cblx0XHQ8L2Rpdj5cblxuXHRcdDxkaXYgY2xhc3M9XCJhY3Rpb24tbWVudS1ib2R5IGl0ZW1zLXdyYXBwZXJcIj5cblx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJlcnJvck1lc3NhZ2UubGVuZ3RoXCI+XG5cdFx0XHRcdDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBlcnJvck1lc3NhZ2VcIiBjbGFzcz1cImVycm9yLW1zZ1wiPnt7aXRlbX19PC9saT5cblx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdFx0XG5cdFx0XHQ8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbmZpZy5pdGVtc1wiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwibWVudS1pdGVtXCJcblx0XHRcdFx0XHQgKm5nSWY9XCJpc01lbnVJc1Zpc2libGUoaXRlbSlcIj5cblxuXHRcdFx0XHRcdDwhLS0gRGl2aWRlciBiZXR3ZWVuIHR3byBmaWx0ZXIgLS0+XG5cdFx0XHRcdFx0PGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2RpdmlkZXInXCI+XG5cdFx0XHRcdFx0XHQ8cCBjbGFzcz1cImZpbHRlci1kaXZpZGVyXCI+PC9wPlxuXHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0PCEtLSBCb29sZWFuIHRvZ2dsZSAtLT5cblx0XHRcdFx0XHQ8ZGl2ICpuZ0lmPVwiaXRlbS50eXBlID09PSAndG9nZ2xlJ1wiXG5cdFx0XHRcdFx0XHQgY2xhc3M9XCJhY3Rpb24taXRlbSB0b2dnbGUtcm93XCI+XG5cdFx0XHRcdFx0XHQ8ZGl2Pnt7aXRlbS50aXRsZX19PC9kaXY+XG5cdFx0XHRcdFx0XHQ8emVuLXRvZ2dsZS1zbGlkZSBbKGVuYWJsZWQpXT1cIml0ZW0uZW5hYmxlZFwiPjwvemVuLXRvZ2dsZS1zbGlkZT5cblx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdDxidXR0b24gY2xhc3M9XCJhY3Rpb24taXRlbSBleHBhbmRlci1pdGVtXCJcblx0XHRcdFx0XHRcdFx0Km5nSWY9XCJpdGVtLnR5cGUgIT0gJ3RvZ2dsZScgJiYgaXRlbS50eXBlICE9ICdkaXZpZGVyJyAmJiAhaXRlbS5kaXNhYmxlQ29sbGFwc2VcIlxuXHRcdFx0XHRcdFx0XHQoY2xpY2spPVwiaXRlbS5leHBhbmRlZCA9ICFpdGVtLmV4cGFuZGVkXCJcblx0XHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwieydhY3RpdmUnOiBpc0l0ZW1BY3RpdmUoaXRlbSksICdleHBhbmRlZCc6IGl0ZW0uZXhwYW5kZWR9XCI+XG5cdFx0XHRcdFx0XHQ8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGV4cGFuZC1pY29uXCJcblx0XHRcdFx0XHRcdCAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXRlbS5leHBhbmRlZH1cIj5leHBhbmRfbW9yZTwvaT5cblx0XHRcdFx0XHRcdHt7aXRlbS50aXRsZX19XG5cdFx0XHRcdFx0PC9idXR0b24+XG5cblx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5leHBhbmRlZCB8fCBpdGVtLmRpc2FibGVDb2xsYXBzZVwiPlxuXHRcdFx0XHRcdFx0PGRpdiBbbmdTd2l0Y2hdPVwiaXRlbS50eXBlXCI+XG5cdFx0XHRcdFx0XHRcdDwhLS0gTXVsdGlzZWxlY3QgLS0+XG5cdFx0XHRcdFx0XHRcdDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidtdWx0aXNlbGVjdCdcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYWN0aW9uLWl0ZW0tY2hlY2tib3ggZHMtaXRlbSBzZWxlY3QtYWxsXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8emVuLWNoZWNrYm94ICpuZ0lmPVwiaXRlbS5kYXRhU291cmNlLmxlbmd0aCA9PT0gaXRlbS5maWx0ZXJlZERhdGFTb3VyY2UubGVuZ3RoXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgWyhjaGVja2VkKV09XCJpdGVtLmlzU2VsZWN0ZWRBbGxcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBbaW5kZXRlcm1pbmF0ZV09XCJpc0l0ZW1BY3RpdmUoaXRlbSkgJiYgIWl0ZW0uaXNTZWxlY3RlZEFsbFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIGxhYmVsPVwiU2VsZWN0IEFsbFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIChjaGVja2VkQ2hhbmdlKT1cIm9uU2VsZWN0QWxsKGl0ZW0pXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3plbi1jaGVja2JveD5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgKm5nRm9yPVwibGV0IGRzSXRlbSBvZiBpdGVtLmZpbHRlcmVkRGF0YVNvdXJjZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHQgY2xhc3M9XCJhY3Rpb24taXRlbS1jaGVja2JveCBkcy1pdGVtXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8emVuLWNoZWNrYm94IFsoY2hlY2tlZCldPVwiZHNJdGVtLmNoZWNrZWRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICBbaW1hZ2VVcmxdPVwiZHNJdGVtLmltYWdlVXJsXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgW2xhYmVsXT1cImRzSXRlbS5uYW1lXCI+PC96ZW4tY2hlY2tib3g+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHRcdDwhLS0gRGF0ZSByYW5nZSBwaWNrZXIgLS0+XG5cdFx0XHRcdFx0XHRcdDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidkYXRlUmFuZ2UnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gIE9wdGlvbnMgZGF0ZSByYW5nZSB2aWV3ICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uZGF0ZVJhbmdlT3B0aW9ucz8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgaXRlbS5kYXRlUmFuZ2VPcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1pdGVtLXJhZGlvIGRzLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBzZWxlY3RlZERhdGVSYW5nZU9wdGlvbnNbaXRlbS5rZXldID09PSBvcHRpb24ubmFtZX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHplbi1yYWRpbyBbdmFsdWVdPVwib3B0aW9uLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJvcHRpb24ubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiaXRlbS5rZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZERhdGVSYW5nZU9wdGlvbnNbaXRlbS5rZXldID09PSBvcHRpb24ubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJhZGlvQ2hhbmdlKT1cImhhbmRsZURhdGVSYW5nZU9wdGlvbkNsaWNrKGl0ZW0sIG9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC96ZW4tcmFkaW8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24taXRlbS1yYWRpbyBkcy1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBzZWxlY3RlZERhdGVSYW5nZU9wdGlvbnNbaXRlbS5rZXldID09PSAnQ3VzdG9tJ31cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLXJhZGlvIFt2YWx1ZV09XCInQ3VzdG9tJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0N1c3RvbSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiaXRlbS5rZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkRGF0ZVJhbmdlT3B0aW9uc1tpdGVtLmtleV0gPT09ICdDdXN0b20nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyYWRpb0NoYW5nZSk9XCJoYW5kbGVDdXN0b21EYXRlUmFuZ2VDbGljayhpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvemVuLXJhZGlvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWREYXRlUmFuZ2VPcHRpb25zW2l0ZW0ua2V5XSA9PT0gJ0N1c3RvbSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHMtaXRlbSBmaWx0ZXItcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYmxcIj5Gcm9tOjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLWRhdGVwaWNrZXIgY2xhc3M9XCJ3aWR0aC1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoZGF0ZSldPVwiaXRlbS5kYXRlUmFuZ2Uuc3RhcnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dUaW1lXT1cIml0ZW0uc2hvd1RpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3lQb3NpdGlvbl09XCJpdGVtLmNvbmZpZz8ueVBvc2l0aW9uID8/IGRhdGVwaWNrZXJQb3NpdGlvbi5BVVRPXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvemVuLWRhdGVwaWNrZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRzLWl0ZW0gZmlsdGVyLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGJsXCI+VG86PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx6ZW4tZGF0ZXBpY2tlciBjbGFzcz1cIndpZHRoLWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhkYXRlKV09XCJpdGVtLmRhdGVSYW5nZS5lbmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dUaW1lXT1cIml0ZW0uc2hvd1RpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3lQb3NpdGlvbl09XCJpdGVtLmNvbmZpZz8ueVBvc2l0aW9uID8/IGRhdGVwaWNrZXJQb3NpdGlvbi5BVVRPXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cImhhbmRsZUVuZERhdGVDaGFuZ2UoaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC96ZW4tZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tICBEZWZhdWx0IGRhdGUgcmFuZ2UgdmlldyAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS5kYXRlUmFuZ2VPcHRpb25zPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcy1pdGVtIGZpbHRlci1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGJsXCI+RnJvbTo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLWRhdGVwaWNrZXIgY2xhc3M9XCJ3aWR0aC1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhkYXRlKV09XCJpdGVtLmRhdGVSYW5nZS5zdGFydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VGltZV09XCJpdGVtLnNob3dUaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3lQb3NpdGlvbl09XCJpdGVtLmNvbmZpZz8ueVBvc2l0aW9uID8/IGRhdGVwaWNrZXJQb3NpdGlvbi5BVVRPXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC96ZW4tZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRzLWl0ZW0gZmlsdGVyLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYmxcIj5Ubzo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLWRhdGVwaWNrZXIgY2xhc3M9XCJ3aWR0aC1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhkYXRlKV09XCJpdGVtLmRhdGVSYW5nZS5lbmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RpbWVdPVwiaXRlbS5zaG93VGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt5UG9zaXRpb25dPVwiaXRlbS5jb25maWc/LnlQb3NpdGlvbiA/PyBkYXRlcGlja2VyUG9zaXRpb24uQVVUT1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cImhhbmRsZUVuZERhdGVDaGFuZ2UoaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3plbi1kYXRlcGlja2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0XHQ8IS0tIERhdGUgcGlja2VyIC0tPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2ICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHMtaXRlbSBmaWx0ZXItcm93XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibGJsXCI+RGF0ZTo8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdDx6ZW4tZGF0ZXBpY2tlciBjbGFzcz1cIndpZHRoLWZ1bGxcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbKGRhdGUpXT1cIml0ZW0uZGF0ZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtzaG93VGltZV09XCJpdGVtLnNob3dUaW1lXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3plbi1kYXRlcGlja2VyPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0XHQ8IS0tIE51bWJlciByYW5nZSAtLT5cblx0XHRcdFx0XHRcdFx0PGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlclJhbmdlJ1wiXG5cdFx0XHRcdFx0XHRcdFx0IGNsYXNzPVwiZmlsdGVyLXJvdyBudW1iZXItcmFuZ2Utcm93XCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJsYmxcIj5NaW46PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgY2xhc3M9XCJtYXRlcmlhbC1pbnB1dFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgIFsobmdNb2RlbCldPVwiaXRlbS5udW1iZXJSYW5nZS5mcm9tXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICAgdHlwZT1cIm51bWJlclwiIC8+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJsYmxcIj5NYXg6PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgY2xhc3M9XCJtYXRlcmlhbC1pbnB1dFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgIFsobmdNb2RlbCldPVwiaXRlbS5udW1iZXJSYW5nZS50b1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgIHR5cGU9XCJudW1iZXJcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0XHQ8IS0tIFJhZGlvIC0tPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2ICpuZ1N3aXRjaENhc2U9XCIncmFkaW8nXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGl0ZW0ucmFkaW9PcHRpb25zXCJcblx0XHRcdFx0XHRcdFx0XHRcdCBjbGFzcz1cImFjdGlvbi1pdGVtLXJhZGlvIGRzLWl0ZW1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0IFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogb3B0aW9uLnNlbGVjdGVkfVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PHplbi1yYWRpbyBbdmFsdWVdPVwib3B0aW9uLmlkXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICBbbGFiZWxdPVwib3B0aW9uLm5hbWVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgIFtuYW1lXT1cIml0ZW0ua2V5XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICBbaW1hZ2VVcmxdPVwib3B0aW9uLmltYWdlVXJsXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICBbc2VsZWN0ZWRdPVwib3B0aW9uLnNlbGVjdGVkXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICAocmFkaW9DaGFuZ2UpPVwicmFkaW9DaGFuZ2VkKCRldmVudCwgaXRlbSlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgIFtkaXNhYmxlZF09XCJvcHRpb24uZGlzYWJsZWRcIj48L3plbi1yYWRpbz5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PHNwYW4gKm5nSWY9XCJzaG93Tm9GaWx0ZXJSZXN1bHRcIlxuXHRcdFx0XHQgIGNsYXNzPVwibm8taXRlbVwiPk5vIFJlc3VsdHMgRm91bmQuLjwvc3Bhbj5cblx0XHQ8L2Rpdj5cblxuXHRcdDxkaXYgY2xhc3M9XCJhY3Rpb24tbWVudS1mb290ZXJcIj5cblx0XHRcdDxidXR0b24gKGNsaWNrKT1cInJlc2V0KClcIlxuXHRcdFx0XHRcdGNsYXNzPVwiYnV0dG9uLXN0cm9rZWQgZnVsbC13aWR0aFwiPlxuXHRcdFx0XHRSZXNldFxuXHRcdFx0PC9idXR0b24+XG5cdFx0XHQ8YnV0dG9uIChjbGljayk9XCJhcHBseSgpXCJcblx0XHRcdFx0XHRjbGFzcz1cImJ1dHRvbi1mbGF0IGZ1bGwtd2lkdGhcIj5cblx0XHRcdFx0QXBwbHlcblx0XHRcdDwvYnV0dG9uPlxuXHRcdDwvZGl2PlxuXG5cdDwvZGl2PlxuPC9kaXY+XG4iXX0=
|