UNPKG

ontimize-web-ngx

Version:
130 lines 21.4 kB
import { ChangeDetectionStrategy, Component, Injector, TemplateRef, ViewChild } from '@angular/core'; import { OTranslateService } from '../../../../../services/translate/o-translate.service'; import { Util } from '../../../../../util/util'; import { OBaseTableCellRenderer } from '../o-base-table-cell-renderer.class'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@angular/material/icon"; import * as i3 from "../../../../../pipes/o-translate.pipe"; export const DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_BOOLEAN = [ 'trueValue: true-value', 'falseValue: false-value', 'booleanType: boolean-type', 'renderTrueValue: render-true-value', 'renderFalseValue: render-false-value', 'renderType: render-type' ]; export class OTableCellRendererBooleanComponent extends OBaseTableCellRenderer { constructor(injector) { super(injector); this.injector = injector; this._renderType = 'string'; this._booleanType = 'boolean'; this.tableColumn.type = 'boolean'; this.translateService = this.injector.get(OTranslateService); } initialize() { super.initialize(); this.parseInputs(); } parseInputs() { switch (this.booleanType) { case 'string': this.parseStringInputs(); break; case 'number': this.parseNumberInputs(); break; default: this.trueValue = true; this.falseValue = false; break; } } parseStringInputs() { if ((this.trueValue || '').length === 0) { this.trueValue = undefined; } if ((this.falseValue || '').length === 0) { this.falseValue = undefined; } } parseNumberInputs() { this.trueValue = parseInt(this.trueValue, 10); if (isNaN(this.trueValue)) { this.trueValue = 1; } this.falseValue = parseInt(this.falseValue, 10); if (isNaN(this.falseValue)) { this.falseValue = 0; } } hasCellDataTrueValue(cellData) { let result; if (Util.isDefined(cellData)) { result = (cellData === this.trueValue); if (this.booleanType === 'string' && !Util.isDefined(this.trueValue)) { result = Util.parseBoolean(cellData, false); } } return result; } getCellData(cellvalue, rowvalue) { let result = cellvalue; const cellIsTrue = this.hasCellDataTrueValue(cellvalue); const value = cellIsTrue ? this.trueValue : this.falseValue; switch (this.renderType) { case 'string': result = this.translateService.get(value); break; case 'number': result = value; break; default: break; } return result; } get booleanType() { return this._booleanType; } set booleanType(arg) { arg = (arg || '').toLowerCase(); if (['number', 'boolean', 'string'].indexOf(arg) === -1) { arg = 'boolean'; } this._booleanType = arg; } get renderType() { return this._renderType; } set renderType(arg) { arg = (arg || '').toLowerCase(); if (['string', 'number', 'icon', 'image'].indexOf(arg) === -1) { arg = 'string'; } this._renderType = arg; } get renderTrueValue() { return this._renderTrueValue || this.trueValue; } set renderTrueValue(arg) { this._renderTrueValue = arg; } get renderFalseValue() { return this._renderFalseValue || this.falseValue; } set renderFalseValue(arg) { this._renderFalseValue = arg; } } OTableCellRendererBooleanComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableCellRendererBooleanComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); OTableCellRendererBooleanComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OTableCellRendererBooleanComponent, selector: "o-table-cell-renderer-boolean", inputs: { trueValue: ["true-value", "trueValue"], falseValue: ["false-value", "falseValue"], booleanType: ["boolean-type", "booleanType"], renderTrueValue: ["render-true-value", "renderTrueValue"], renderFalseValue: ["render-false-value", "renderFalseValue"], renderType: ["render-type", "renderType"] }, viewQueries: [{ propertyName: "templateref", first: true, predicate: ["templateref"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #templateref let-cellvalue=\"cellvalue\">\n <ng-container *ngIf=\"hasCellDataTrueValue(cellvalue)\">\n <ng-container [ngSwitch]=\"renderType\">\n <ng-container *ngSwitchCase=\"'number'\">{{ renderTrueValue }}</ng-container>\n <ng-container *ngSwitchCase=\"'icon'\">\n <mat-icon class=\"material-icons\"> {{ renderTrueValue }}</mat-icon>\n </ng-container>\n <ng-container *ngSwitchCase=\"'image'\">\n <img [src]=\"renderTrueValue\" alt=\"image for true value\"/>\n </ng-container>\n <span *ngSwitchDefault>{{ renderTrueValue | oTranslate }}</span>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!hasCellDataTrueValue(cellvalue)\">\n <ng-container [ngSwitch]=\"renderType\">\n <ng-container *ngSwitchCase=\"'number'\">{{ renderFalseValue }}</ng-container>\n <ng-container *ngSwitchCase=\"'icon'\">\n <mat-icon class=\"material-icons\"> {{ renderFalseValue }}</mat-icon>\n </ng-container>\n <ng-container *ngSwitchCase=\"'image'\">\n <img [src]=\"renderFalseValue\" alt=\"image for false value\" />\n </ng-container>\n <ng-container *ngSwitchDefault>{{ renderFalseValue | oTranslate}}</ng-container>\n </ng-container>\n </ng-container>\n</ng-template>", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i3.OTranslatePipe, name: "oTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableCellRendererBooleanComponent, decorators: [{ type: Component, args: [{ selector: 'o-table-cell-renderer-boolean', changeDetection: ChangeDetectionStrategy.OnPush, inputs: DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_BOOLEAN, template: "<ng-template #templateref let-cellvalue=\"cellvalue\">\n <ng-container *ngIf=\"hasCellDataTrueValue(cellvalue)\">\n <ng-container [ngSwitch]=\"renderType\">\n <ng-container *ngSwitchCase=\"'number'\">{{ renderTrueValue }}</ng-container>\n <ng-container *ngSwitchCase=\"'icon'\">\n <mat-icon class=\"material-icons\"> {{ renderTrueValue }}</mat-icon>\n </ng-container>\n <ng-container *ngSwitchCase=\"'image'\">\n <img [src]=\"renderTrueValue\" alt=\"image for true value\"/>\n </ng-container>\n <span *ngSwitchDefault>{{ renderTrueValue | oTranslate }}</span>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!hasCellDataTrueValue(cellvalue)\">\n <ng-container [ngSwitch]=\"renderType\">\n <ng-container *ngSwitchCase=\"'number'\">{{ renderFalseValue }}</ng-container>\n <ng-container *ngSwitchCase=\"'icon'\">\n <mat-icon class=\"material-icons\"> {{ renderFalseValue }}</mat-icon>\n </ng-container>\n <ng-container *ngSwitchCase=\"'image'\">\n <img [src]=\"renderFalseValue\" alt=\"image for false value\" />\n </ng-container>\n <ng-container *ngSwitchDefault>{{ renderFalseValue | oTranslate}}</ng-container>\n </ng-container>\n </ng-container>\n</ng-template>" }] }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { templateref: [{ type: ViewChild, args: ['templateref', { read: TemplateRef, static: true }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1jZWxsLXJlbmRlcmVyLWJvb2xlYW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvY29sdW1uL2NlbGwtcmVuZGVyZXIvYm9vbGVhbi9vLXRhYmxlLWNlbGwtcmVuZGVyZXItYm9vbGVhbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9jb2x1bW4vY2VsbC1yZW5kZXJlci9ib29sZWFuL28tdGFibGUtY2VsbC1yZW5kZXJlci1ib29sZWFuLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFVLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0csT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDMUYsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7OztBQUU3RSxNQUFNLENBQUMsTUFBTSw0Q0FBNEMsR0FBRztJQUUxRCx1QkFBdUI7SUFFdkIseUJBQXlCO0lBRXpCLDJCQUEyQjtJQUUzQixvQ0FBb0M7SUFDcEMsc0NBQXNDO0lBRXRDLHlCQUF5QjtDQUMxQixDQUFDO0FBUUYsTUFBTSxPQUFPLGtDQUFtQyxTQUFRLHNCQUFzQjtJQWM1RSxZQUFzQixRQUFrQjtRQUN0QyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFESSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBUDlCLGdCQUFXLEdBQVcsUUFBUSxDQUFDO1FBQy9CLGlC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SSxDQUFDLFVBQVUsQ0FBQztJQUNuRCxDQUFDO0lBRUQsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFXO1FBQzlCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUM7SUFDL0IsQ0FBQzs7Z0lBOUhVLGtDQUFrQztvSEFBbEMsa0NBQWtDLDZjQVdYLFdBQVcsa0VDckMvQyxnd0NBeUJjOzRGRENELGtDQUFrQztrQkFOOUMsU0FBUzsrQkFDRSwrQkFBK0IsbUJBRXhCLHVCQUF1QixDQUFDLE1BQU0sVUFDdkMsNENBQTRDOytGQWNwRCxXQUFXO3NCQURWLFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5qZWN0b3IsIE9uSW5pdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBPVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS9vLXRyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgT0Jhc2VUYWJsZUNlbGxSZW5kZXJlciB9IGZyb20gJy4uL28tYmFzZS10YWJsZS1jZWxsLXJlbmRlcmVyLmNsYXNzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5QVVRTX09fVEFCTEVfQ0VMTF9SRU5ERVJFUl9CT09MRUFOID0gW1xuICAvLyB0cnVlLXZhbHVlIFtzdHJpbmddOiB0cnVlIHZhbHVlLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3RydWVWYWx1ZTogdHJ1ZS12YWx1ZScsXG4gIC8vIGZhbHNlLXZhbHVlIFtzdHJpbmddOiBmYWxzZSB2YWx1ZS4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdmYWxzZVZhbHVlOiBmYWxzZS12YWx1ZScsXG4gIC8vIGZhbHNlLXZhbHVlIFtudW1iZXJ8Ym9vbGVhbnxzdHJpbmddOiBjZWxsRGF0YSB2YWx1ZSB0eXBlLiBEZWZhdWx0OiBib29sZWFuXG4gICdib29sZWFuVHlwZTogYm9vbGVhbi10eXBlJyxcblxuICAncmVuZGVyVHJ1ZVZhbHVlOiByZW5kZXItdHJ1ZS12YWx1ZScsXG4gICdyZW5kZXJGYWxzZVZhbHVlOiByZW5kZXItZmFsc2UtdmFsdWUnLFxuICAvLyBbc3RyaW5nfG51bWJlcnxpY29ufGltYWdlXVxuICAncmVuZGVyVHlwZTogcmVuZGVyLXR5cGUnXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLXRhYmxlLWNlbGwtcmVuZGVyZXItYm9vbGVhbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9vLXRhYmxlLWNlbGwtcmVuZGVyZXItYm9vbGVhbi5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbnB1dHM6IERFRkFVTFRfSU5QVVRTX09fVEFCTEVfQ0VMTF9SRU5ERVJFUl9CT09MRUFOXG59KVxuZXhwb3J0IGNsYXNzIE9UYWJsZUNlbGxSZW5kZXJlckJvb2xlYW5Db21wb25lbnQgZXh0ZW5kcyBPQmFzZVRhYmxlQ2VsbFJlbmRlcmVyIGltcGxlbWVudHMgT25Jbml0IHtcblxuICB0cnVlVmFsdWU6IGFueTtcbiAgZmFsc2VWYWx1ZTogYW55O1xuICBwcm90ZWN0ZWQgX3JlbmRlclRydWVWYWx1ZTogYW55O1xuICBwcm90ZWN0ZWQgX3JlbmRlckZhbHNlVmFsdWU6IGFueTtcblxuICBwcm90ZWN0ZWQgX3JlbmRlclR5cGU6IHN0cmluZyA9ICdzdHJpbmcnO1xuICBwcm90ZWN0ZWQgX2Jvb2xlYW5UeXBlOiBzdHJpbmcgPSAnYm9vbGVhbic7XG4gIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBPVHJhbnNsYXRlU2VydmljZTtcblxuICBAVmlld0NoaWxkKCd0ZW1wbGF0ZXJlZicsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICB0ZW1wbGF0ZXJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIHRoaXMudGFibGVDb2x1bW4udHlwZSA9ICdib29sZWFuJztcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChPVHJhbnNsYXRlU2VydmljZSk7XG4gIH1cblxuICBpbml0aWFsaXplKCkge1xuICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICB0aGlzLnBhcnNlSW5wdXRzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VJbnB1dHMoKSB7XG4gICAgc3dpdGNoICh0aGlzLmJvb2xlYW5UeXBlKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICB0aGlzLnBhcnNlU3RyaW5nSW5wdXRzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgdGhpcy5wYXJzZU51bWJlcklucHV0cygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMudHJ1ZVZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mYWxzZVZhbHVlID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVN0cmluZ0lucHV0cygpIHtcbiAgICBpZiAoKHRoaXMudHJ1ZVZhbHVlIHx8ICcnKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMudHJ1ZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoKHRoaXMuZmFsc2VWYWx1ZSB8fCAnJykubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmZhbHNlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTnVtYmVySW5wdXRzKCkge1xuICAgIHRoaXMudHJ1ZVZhbHVlID0gcGFyc2VJbnQodGhpcy50cnVlVmFsdWUsIDEwKTtcbiAgICBpZiAoaXNOYU4odGhpcy50cnVlVmFsdWUpKSB7XG4gICAgICB0aGlzLnRydWVWYWx1ZSA9IDE7XG4gICAgfVxuICAgIHRoaXMuZmFsc2VWYWx1ZSA9IHBhcnNlSW50KHRoaXMuZmFsc2VWYWx1ZSwgMTApO1xuICAgIGlmIChpc05hTih0aGlzLmZhbHNlVmFsdWUpKSB7XG4gICAgICB0aGlzLmZhbHNlVmFsdWUgPSAwO1xuICAgIH1cbiAgfVxuXG4gIGhhc0NlbGxEYXRhVHJ1ZVZhbHVlKGNlbGxEYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjZWxsRGF0YSkpIHtcbiAgICAgIHJlc3VsdCA9IChjZWxsRGF0YSA9PT0gdGhpcy50cnVlVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuYm9vbGVhblR5cGUgPT09ICdzdHJpbmcnICYmICFVdGlsLmlzRGVmaW5lZCh0aGlzLnRydWVWYWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0ID0gVXRpbC5wYXJzZUJvb2xlYW4oY2VsbERhdGEsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldENlbGxEYXRhKGNlbGx2YWx1ZTogYW55LCByb3d2YWx1ZT86IGFueSkge1xuICAgIGxldCByZXN1bHQgPSBjZWxsdmFsdWU7XG4gICAgY29uc3QgY2VsbElzVHJ1ZSA9IHRoaXMuaGFzQ2VsbERhdGFUcnVlVmFsdWUoY2VsbHZhbHVlKTtcbiAgICBjb25zdCB2YWx1ZSA9IGNlbGxJc1RydWUgPyB0aGlzLnRydWVWYWx1ZSA6IHRoaXMuZmFsc2VWYWx1ZTtcbiAgICBzd2l0Y2ggKHRoaXMucmVuZGVyVHlwZSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmVzdWx0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXQgYm9vbGVhblR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYm9vbGVhblR5cGU7XG4gIH1cblxuICBzZXQgYm9vbGVhblR5cGUoYXJnOiBzdHJpbmcpIHtcbiAgICBhcmcgPSAoYXJnIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChbJ251bWJlcicsICdib29sZWFuJywgJ3N0cmluZyddLmluZGV4T2YoYXJnKSA9PT0gLTEpIHtcbiAgICAgIGFyZyA9ICdib29sZWFuJztcbiAgICB9XG4gICAgdGhpcy5fYm9vbGVhblR5cGUgPSBhcmc7XG4gIH1cblxuICBnZXQgcmVuZGVyVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9yZW5kZXJUeXBlO1xuICB9XG5cbiAgc2V0IHJlbmRlclR5cGUoYXJnOiBzdHJpbmcpIHtcbiAgICBhcmcgPSAoYXJnIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChbJ3N0cmluZycsICdudW1iZXInLCAnaWNvbicsICdpbWFnZSddLmluZGV4T2YoYXJnKSA9PT0gLTEpIHtcbiAgICAgIGFyZyA9ICdzdHJpbmcnO1xuICAgIH1cbiAgICB0aGlzLl9yZW5kZXJUeXBlID0gYXJnO1xuICB9XG5cbiAgZ2V0IHJlbmRlclRydWVWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9yZW5kZXJUcnVlVmFsdWUgfHwgdGhpcy50cnVlVmFsdWU7XG4gIH1cblxuICBzZXQgcmVuZGVyVHJ1ZVZhbHVlKGFyZzogc3RyaW5nKSB7XG4gICAgdGhpcy5fcmVuZGVyVHJ1ZVZhbHVlID0gYXJnO1xuICB9XG5cbiAgZ2V0IHJlbmRlckZhbHNlVmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcmVuZGVyRmFsc2VWYWx1ZSB8fCB0aGlzLmZhbHNlVmFsdWU7XG4gIH1cblxuICBzZXQgcmVuZGVyRmFsc2VWYWx1ZShhcmc6IHN0cmluZykge1xuICAgIHRoaXMuX3JlbmRlckZhbHNlVmFsdWUgPSBhcmc7XG4gIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVyZWYgbGV0LWNlbGx2YWx1ZT1cImNlbGx2YWx1ZVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzQ2VsbERhdGFUcnVlVmFsdWUoY2VsbHZhbHVlKVwiPlxuICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInJlbmRlclR5cGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+e3sgcmVuZGVyVHJ1ZVZhbHVlIH19PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaWNvbidcIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj4ge3sgcmVuZGVyVHJ1ZVZhbHVlIH19PC9tYXQtaWNvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ltYWdlJ1wiPlxuICAgICAgICA8aW1nIFtzcmNdPVwicmVuZGVyVHJ1ZVZhbHVlXCIgYWx0PVwiaW1hZ2UgZm9yIHRydWUgdmFsdWVcIi8+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+e3sgcmVuZGVyVHJ1ZVZhbHVlIHwgb1RyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGFzQ2VsbERhdGFUcnVlVmFsdWUoY2VsbHZhbHVlKVwiPlxuICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInJlbmRlclR5cGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+e3sgcmVuZGVyRmFsc2VWYWx1ZSB9fTwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ljb24nXCI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+IHt7IHJlbmRlckZhbHNlVmFsdWUgfX08L21hdC1pY29uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaW1hZ2UnXCI+XG4gICAgICAgIDxpbWcgW3NyY109XCJyZW5kZXJGYWxzZVZhbHVlXCIgYWx0PVwiaW1hZ2UgZm9yIGZhbHNlIHZhbHVlXCIgLz5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0Pnt7IHJlbmRlckZhbHNlVmFsdWUgfCBvVHJhbnNsYXRlfX08L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPiJdfQ==