UNPKG

ontimize-web-ngx

Version:
66 lines 17.7 kB
import { __decorate, __metadata } from "tslib"; import { ChangeDetectionStrategy, Component, forwardRef, Inject, ViewChild, ViewEncapsulation } from "@angular/core"; import { OTableBase } from "../../../o-table-base.class"; import { OMatSortHeader } from "../../sort/o-mat-sort-header"; import { BooleanInputConverter } from "../../../../../decorators/input-converter"; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@angular/flex-layout/flex"; import * as i3 from "@angular/material/icon"; import * as i4 from "@angular/material/tooltip"; import * as i5 from "../../sort/o-mat-sort-header"; import * as i6 from "../table-column-resizer/o-table-column-resizer.component"; import * as i7 from "../table-header-column-filter-icon/o-table-header-column-filter-icon.component"; import * as i8 from "../../../../../pipes/o-translate.pipe"; import * as i9 from "../../../o-table-base.class"; export const DEFAULT_INPUTS_O_TABLE_HEADER = [ 'column', 'columnFilters: column-filters', 'showHeaderTooltip: show-header-tooltip', ]; export class OTableHeaderComponent { set columnFilterIcon(value) { this._columnFilterIcon = value; } constructor(table) { this.table = table; this.columnFilters = []; this.showHeaderTooltip = false; this.resizable = this.table.resizable; } isModeColumnFilterable(column) { return this.table.isColumnFiltersActive && this.table.isColumnFilterable(column); } setFilterIconHintVisible(visible) { if (this._columnFilterIcon) { this._columnFilterIcon.filterIconHintVisible.next(visible); } } ngAfterViewInit() { this.table.registerTableHeaders(this); } } OTableHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableHeaderComponent, deps: [{ token: forwardRef(() => OTableBase) }], target: i0.ɵɵFactoryTarget.Component }); OTableHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OTableHeaderComponent, selector: "o-table-header", inputs: { column: "column", columnFilters: ["column-filters", "columnFilters"], showHeaderTooltip: ["show-header-tooltip", "showHeaderTooltip"] }, host: { listeners: { "mouseenter": "setFilterIconHintVisible(true)", "mouseleave": "setFilterIconHintVisible(false)" }, properties: { "class.o-table-header": "true" } }, viewQueries: [{ propertyName: "columnFilterIcon", first: true, predicate: ["columnFilterIcon"], descendants: true }, { propertyName: "matSortHeader", first: true, predicate: OMatSortHeader, descendants: true }], ngImport: i0, template: "<o-table-header-column-filter-icon #columnFilterIcon *ngIf=\"isModeColumnFilterable(column)\" [column]=\"column\" [column-filters]=\"columnFilters\">\n</o-table-header-column-filter-icon>\n\n<ng-container *ngIf=\"column.orderable\">\n <span o-mat-sort-header [matTooltip]=\"showHeaderTooltip && !column.headerTooltip ? (column.title | oTranslate) :\n (column.headerTooltip && !column.headerTooltipIcon) ? (column.headerTooltip | oTranslate) : null\" matTooltipPosition=\"below\"\n [matTooltipClass]=\"column.headerTooltipClass\">\n {{ column.title | oTranslate }}\n <mat-icon *ngIf=\"column.headerTooltip && column.headerTooltipIcon\" class=\"o-table-header-icon\" [matTooltip]=\"column.headerTooltip | oTranslate\"\n matTooltipPosition=\"below\" [matTooltipClass]=\"column.headerTooltipClass\">\n {{ column.headerTooltipIcon }}\n </mat-icon>\n </span>\n</ng-container>\n\n<ng-container *ngIf=\"!column.orderable\">\n <span class=\"header-title-container\" fxFlex [matTooltip]=\"showHeaderTooltip && !column.headerTooltip ? (column.title | oTranslate) :\n (column.headerTooltip && !column.headerTooltipIcon) ? (column.headerTooltip | oTranslate) : null\" matTooltipPosition=\"below\"\n [matTooltipClass]=\"column.headerTooltipClass\">\n {{ column.title | oTranslate }}\n <mat-icon *ngIf=\"column.headerTooltip && column.headerTooltipIcon\" class=\"o-table-header-icon\" [matTooltip]=\"column.headerTooltip | oTranslate\"\n matTooltipPosition=\"below\" [matTooltipClass]=\"column.headerTooltipClass\">\n {{ column.headerTooltipIcon }}\n </mat-icon>\n </span>\n</ng-container>\n\n<o-table-column-resizer *ngIf=\"resizable\" [column]=\"column\"></o-table-column-resizer>\n", styles: [".o-table-header{display:flex;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.o-table-header .o-table-header-icon{color:#0009;width:18px;height:18px;font-size:18px;cursor:pointer;vertical-align:middle;margin-left:8px;margin-right:8px}.o-table-header span[o-mat-sort-header]{flex:1;min-width:0}.o-table-header span[o-mat-sort-header]:not(:has(+ .o-table-column-resizer)){padding-right:6px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i5.OMatSortHeader, selector: "[o-mat-sort-header]", inputs: ["disabled"], exportAs: ["oMatSortHeader"] }, { kind: "component", type: i6.OTableColumnResizerComponent, selector: "o-table-column-resizer", inputs: ["column"] }, { kind: "component", type: i7.OTableHeaderColumnFilterIconComponent, selector: "o-table-header-column-filter-icon", inputs: ["column", "column-filters"] }, { kind: "pipe", type: i8.OTranslatePipe, name: "oTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); __decorate([ BooleanInputConverter(), __metadata("design:type", Boolean) ], OTableHeaderComponent.prototype, "showHeaderTooltip", void 0); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableHeaderComponent, decorators: [{ type: Component, args: [{ selector: 'o-table-header', inputs: DEFAULT_INPUTS_O_TABLE_HEADER, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { '[class.o-table-header]': 'true', '(mouseenter)': 'setFilterIconHintVisible(true)', '(mouseleave)': 'setFilterIconHintVisible(false)' }, template: "<o-table-header-column-filter-icon #columnFilterIcon *ngIf=\"isModeColumnFilterable(column)\" [column]=\"column\" [column-filters]=\"columnFilters\">\n</o-table-header-column-filter-icon>\n\n<ng-container *ngIf=\"column.orderable\">\n <span o-mat-sort-header [matTooltip]=\"showHeaderTooltip && !column.headerTooltip ? (column.title | oTranslate) :\n (column.headerTooltip && !column.headerTooltipIcon) ? (column.headerTooltip | oTranslate) : null\" matTooltipPosition=\"below\"\n [matTooltipClass]=\"column.headerTooltipClass\">\n {{ column.title | oTranslate }}\n <mat-icon *ngIf=\"column.headerTooltip && column.headerTooltipIcon\" class=\"o-table-header-icon\" [matTooltip]=\"column.headerTooltip | oTranslate\"\n matTooltipPosition=\"below\" [matTooltipClass]=\"column.headerTooltipClass\">\n {{ column.headerTooltipIcon }}\n </mat-icon>\n </span>\n</ng-container>\n\n<ng-container *ngIf=\"!column.orderable\">\n <span class=\"header-title-container\" fxFlex [matTooltip]=\"showHeaderTooltip && !column.headerTooltip ? (column.title | oTranslate) :\n (column.headerTooltip && !column.headerTooltipIcon) ? (column.headerTooltip | oTranslate) : null\" matTooltipPosition=\"below\"\n [matTooltipClass]=\"column.headerTooltipClass\">\n {{ column.title | oTranslate }}\n <mat-icon *ngIf=\"column.headerTooltip && column.headerTooltipIcon\" class=\"o-table-header-icon\" [matTooltip]=\"column.headerTooltip | oTranslate\"\n matTooltipPosition=\"below\" [matTooltipClass]=\"column.headerTooltipClass\">\n {{ column.headerTooltipIcon }}\n </mat-icon>\n </span>\n</ng-container>\n\n<o-table-column-resizer *ngIf=\"resizable\" [column]=\"column\"></o-table-column-resizer>\n", styles: [".o-table-header{display:flex;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.o-table-header .o-table-header-icon{color:#0009;width:18px;height:18px;font-size:18px;cursor:pointer;vertical-align:middle;margin-left:8px;margin-right:8px}.o-table-header span[o-mat-sort-header]{flex:1;min-width:0}.o-table-header span[o-mat-sort-header]:not(:has(+ .o-table-column-resizer)){padding-right:6px}\n"] }] }], ctorParameters: function () { return [{ type: i9.OTableBase, decorators: [{ type: Inject, args: [forwardRef(() => OTableBase)] }] }]; }, propDecorators: { columnFilterIcon: [{ type: ViewChild, args: ['columnFilterIcon'] }], matSortHeader: [{ type: ViewChild, args: [OMatSortHeader] }], showHeaderTooltip: [] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtaGVhZGVyL28tdGFibGUtaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLWhlYWRlci9vLXRhYmxlLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVySCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRzlELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOzs7Ozs7Ozs7OztBQUVsRixNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRztJQUMzQyxRQUFRO0lBRVIsK0JBQStCO0lBRS9CLHdDQUF3QztDQUN6QyxDQUFBO0FBY0QsTUFBTSxPQUFPLHFCQUFxQjtJQVNoQyxJQUFtQyxnQkFBZ0IsQ0FBQyxLQUE0QztRQUM5RixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQ2pDLENBQUM7SUFPRCxZQUNrRCxLQUFpQjtRQUFqQixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBZjVELGtCQUFhLEdBQXlCLEVBQUUsQ0FBQztRQVloRCxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFLakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUN4QyxDQUFDO0lBR0Qsc0JBQXNCLENBQUMsTUFBZTtRQUNwQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQsd0JBQXdCLENBQUMsT0FBZ0I7UUFDdkMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM1RDtJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDOzttSEFyQ1UscUJBQXFCLGtCQW1CdEIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQzt1R0FuQjNCLHFCQUFxQix5Z0JBYXJCLGNBQWMsZ0RDekMzQix5dERBNEJBO0FEZUU7SUFBQyxxQkFBcUIsRUFBRTs7Z0VBQ1c7NEZBaEJ4QixxQkFBcUI7a0JBYmpDLFNBQVM7K0JBQ0UsZ0JBQWdCLFVBQ2xCLDZCQUE2QixpQkFHdEIsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDSix3QkFBd0IsRUFBRSxNQUFNO3dCQUNoQyxjQUFjLEVBQUUsZ0NBQWdDO3dCQUNoRCxjQUFjLEVBQUUsaUNBQWlDO3FCQUNsRDs7MEJBcUJFLE1BQU07MkJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQzs0Q0FWSCxnQkFBZ0I7c0JBQWxELFNBQVM7dUJBQUMsa0JBQWtCO2dCQUlGLGFBQWE7c0JBQXZDLFNBQVM7dUJBQUMsY0FBYztnQkFHekIsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5qZWN0LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB0eXBlIHsgT0NvbHVtbiB9IGZyb20gXCIuLi8uLi8uLi9jb2x1bW4vby1jb2x1bW4uY2xhc3NcIjtcbmltcG9ydCB7IE9UYWJsZUJhc2UgfSBmcm9tIFwiLi4vLi4vLi4vby10YWJsZS1iYXNlLmNsYXNzXCI7XG5pbXBvcnQgeyBPTWF0U29ydEhlYWRlciB9IGZyb20gXCIuLi8uLi9zb3J0L28tbWF0LXNvcnQtaGVhZGVyXCI7XG5pbXBvcnQgdHlwZSB7IE9UYWJsZUhlYWRlckNvbHVtbkZpbHRlckljb25Db21wb25lbnQgfSBmcm9tIFwiLi4vdGFibGUtaGVhZGVyLWNvbHVtbi1maWx0ZXItaWNvbi9vLXRhYmxlLWhlYWRlci1jb2x1bW4tZmlsdGVyLWljb24uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBPQ29sdW1uVmFsdWVGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdHlwZXMvdGFibGUvby1jb2x1bW4tdmFsdWUtZmlsdGVyLnR5cGVcIjtcbmltcG9ydCB7IEJvb2xlYW5JbnB1dENvbnZlcnRlciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlclwiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlBVVFNfT19UQUJMRV9IRUFERVIgPSBbXG4gICdjb2x1bW4nLFxuICAvLyBjb2x1bW5GaWx0ZXJzOiBBY3RpdmUgZmlsdGVycyBhcHBsaWVkIHRvIHRhYmxlIGNvbHVtbnNcbiAgJ2NvbHVtbkZpbHRlcnM6IGNvbHVtbi1maWx0ZXJzJyxcbiAgLy8gc2hvdy1oZWFkZXItdG9vbHRpcCBbeWVzfG5vfHRydWV8ZmFsc2VdOiBJbmhlcml0ZWQgZnJvbSBvLXRhYmxlLCBzaG93cyBjb2x1bW4gdGl0bGUgYXMgdG9vbHRpcC4gRGVmYXVsdDogZmFsc2UuXG4gICdzaG93SGVhZGVyVG9vbHRpcDogc2hvdy1oZWFkZXItdG9vbHRpcCcsXG5dXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLXRhYmxlLWhlYWRlcicsXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19UQUJMRV9IRUFERVIsXG4gIHRlbXBsYXRlVXJsOiAnLi9vLXRhYmxlLWhlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL28tdGFibGUtaGVhZGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5vLXRhYmxlLWhlYWRlcl0nOiAndHJ1ZScsXG4gICAgJyhtb3VzZWVudGVyKSc6ICdzZXRGaWx0ZXJJY29uSGludFZpc2libGUodHJ1ZSknLFxuICAgICcobW91c2VsZWF2ZSknOiAnc2V0RmlsdGVySWNvbkhpbnRWaXNpYmxlKGZhbHNlKSdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBPVGFibGVIZWFkZXJDb21wb25lbnQge1xuXG4gIHB1YmxpYyBjb2x1bW46IE9Db2x1bW47XG5cbiAgcHVibGljIGNvbHVtbkZpbHRlcnM6IE9Db2x1bW5WYWx1ZUZpbHRlcltdID0gW107XG5cbiAgcHVibGljIHJlc2l6YWJsZTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIF9jb2x1bW5GaWx0ZXJJY29uOiBPVGFibGVIZWFkZXJDb2x1bW5GaWx0ZXJJY29uQ29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ2NvbHVtbkZpbHRlckljb24nKSBzZXQgY29sdW1uRmlsdGVySWNvbih2YWx1ZTogT1RhYmxlSGVhZGVyQ29sdW1uRmlsdGVySWNvbkNvbXBvbmVudCkge1xuICAgIHRoaXMuX2NvbHVtbkZpbHRlckljb24gPSB2YWx1ZTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoT01hdFNvcnRIZWFkZXIpIG1hdFNvcnRIZWFkZXI6IE9NYXRTb3J0SGVhZGVyO1xuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzaG93SGVhZGVyVG9vbHRpcDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBPVGFibGVCYXNlKSkgcHJvdGVjdGVkIHRhYmxlOiBPVGFibGVCYXNlXG4gICkge1xuICAgIHRoaXMucmVzaXphYmxlID0gdGhpcy50YWJsZS5yZXNpemFibGU7XG4gIH1cblxuXG4gIGlzTW9kZUNvbHVtbkZpbHRlcmFibGUoY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlICYmIHRoaXMudGFibGUuaXNDb2x1bW5GaWx0ZXJhYmxlKGNvbHVtbik7XG4gIH1cblxuICBzZXRGaWx0ZXJJY29uSGludFZpc2libGUodmlzaWJsZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLl9jb2x1bW5GaWx0ZXJJY29uKSB7XG4gICAgICB0aGlzLl9jb2x1bW5GaWx0ZXJJY29uLmZpbHRlckljb25IaW50VmlzaWJsZS5uZXh0KHZpc2libGUpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlLnJlZ2lzdGVyVGFibGVIZWFkZXJzKHRoaXMpO1xuICB9XG5cbn1cbiIsIjxvLXRhYmxlLWhlYWRlci1jb2x1bW4tZmlsdGVyLWljb24gI2NvbHVtbkZpbHRlckljb24gKm5nSWY9XCJpc01vZGVDb2x1bW5GaWx0ZXJhYmxlKGNvbHVtbilcIiBbY29sdW1uXT1cImNvbHVtblwiIFtjb2x1bW4tZmlsdGVyc109XCJjb2x1bW5GaWx0ZXJzXCI+XG48L28tdGFibGUtaGVhZGVyLWNvbHVtbi1maWx0ZXItaWNvbj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5vcmRlcmFibGVcIj5cbiAgPHNwYW4gby1tYXQtc29ydC1oZWFkZXIgW21hdFRvb2x0aXBdPVwic2hvd0hlYWRlclRvb2x0aXAgJiYgIWNvbHVtbi5oZWFkZXJUb29sdGlwID8gKGNvbHVtbi50aXRsZSB8IG9UcmFuc2xhdGUpIDpcbiAgICAgICAgICAgICAgICAgIChjb2x1bW4uaGVhZGVyVG9vbHRpcCAmJiAhY29sdW1uLmhlYWRlclRvb2x0aXBJY29uKSA/IChjb2x1bW4uaGVhZGVyVG9vbHRpcCB8IG9UcmFuc2xhdGUpIDogbnVsbFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCJcbiAgICBbbWF0VG9vbHRpcENsYXNzXT1cImNvbHVtbi5oZWFkZXJUb29sdGlwQ2xhc3NcIj5cbiAgICB7eyBjb2x1bW4udGl0bGUgfCBvVHJhbnNsYXRlIH19XG4gICAgPG1hdC1pY29uICpuZ0lmPVwiY29sdW1uLmhlYWRlclRvb2x0aXAgJiYgY29sdW1uLmhlYWRlclRvb2x0aXBJY29uXCIgY2xhc3M9XCJvLXRhYmxlLWhlYWRlci1pY29uXCIgW21hdFRvb2x0aXBdPVwiY29sdW1uLmhlYWRlclRvb2x0aXAgfCBvVHJhbnNsYXRlXCJcbiAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCIgW21hdFRvb2x0aXBDbGFzc109XCJjb2x1bW4uaGVhZGVyVG9vbHRpcENsYXNzXCI+XG4gICAgICB7eyBjb2x1bW4uaGVhZGVyVG9vbHRpcEljb24gfX1cbiAgICA8L21hdC1pY29uPlxuICA8L3NwYW4+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2x1bW4ub3JkZXJhYmxlXCI+XG4gIDxzcGFuIGNsYXNzPVwiaGVhZGVyLXRpdGxlLWNvbnRhaW5lclwiIGZ4RmxleCBbbWF0VG9vbHRpcF09XCJzaG93SGVhZGVyVG9vbHRpcCAmJiAhY29sdW1uLmhlYWRlclRvb2x0aXAgPyAoY29sdW1uLnRpdGxlIHwgb1RyYW5zbGF0ZSkgOlxuICAgICAgICAgICAgICAgICAgKGNvbHVtbi5oZWFkZXJUb29sdGlwICYmICFjb2x1bW4uaGVhZGVyVG9vbHRpcEljb24pID8gKGNvbHVtbi5oZWFkZXJUb29sdGlwIHwgb1RyYW5zbGF0ZSkgOiBudWxsXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYmVsb3dcIlxuICAgIFttYXRUb29sdGlwQ2xhc3NdPVwiY29sdW1uLmhlYWRlclRvb2x0aXBDbGFzc1wiPlxuICAgIHt7IGNvbHVtbi50aXRsZSB8IG9UcmFuc2xhdGUgfX1cbiAgICA8bWF0LWljb24gKm5nSWY9XCJjb2x1bW4uaGVhZGVyVG9vbHRpcCAmJiBjb2x1bW4uaGVhZGVyVG9vbHRpcEljb25cIiBjbGFzcz1cIm8tdGFibGUtaGVhZGVyLWljb25cIiBbbWF0VG9vbHRpcF09XCJjb2x1bW4uaGVhZGVyVG9vbHRpcCB8IG9UcmFuc2xhdGVcIlxuICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYmVsb3dcIiBbbWF0VG9vbHRpcENsYXNzXT1cImNvbHVtbi5oZWFkZXJUb29sdGlwQ2xhc3NcIj5cbiAgICAgIHt7IGNvbHVtbi5oZWFkZXJUb29sdGlwSWNvbiB9fVxuICAgIDwvbWF0LWljb24+XG4gIDwvc3Bhbj5cbjwvbmctY29udGFpbmVyPlxuXG48by10YWJsZS1jb2x1bW4tcmVzaXplciAqbmdJZj1cInJlc2l6YWJsZVwiIFtjb2x1bW5dPVwiY29sdW1uXCI+PC9vLXRhYmxlLWNvbHVtbi1yZXNpemVyPlxuIl19