UNPKG

ontimize-web-ngx

Version:
101 lines 26 kB
import { __decorate, __metadata } from "tslib"; import { Component, EventEmitter, Injector, ViewEncapsulation } from '@angular/core'; import { BooleanInputConverter } from '../../decorators/input-converter'; import { Codes } from '../../util/codes'; import { ActivatedRoute } from '@angular/router'; import { PermissionsService } from '../../services'; import { Util } from '../../util'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; import * as i2 from "@angular/common"; import * as i3 from "@angular/material/button"; import * as i4 from "@angular/material/icon"; import * as i5 from "../../pipes/o-translate.pipe"; export const DEFAULT_INPUTS_O_BUTTON = [ 'oattr: attr', 'olabel: label', 'otype: type', 'icon', 'svgIcon : svg-icon', 'iconPosition: icon-position', 'image', 'enabled', 'color' ]; export const DEFAULT_OUTPUTS_O_BUTTON = [ 'onClick', 'click' ]; export class OButtonComponent { constructor(injector, actRoute) { this.injector = injector; this.actRoute = actRoute; this.iconPosition = Codes.ICON_POSITION_LEFT; this.enabled = true; this.visible = true; this.onClick = new EventEmitter(); this.click = new EventEmitter(); this.otype = OButtonComponent.DEFAULT_TYPE; this.permissionsService = this.injector.get(PermissionsService); } ngOnInit() { if (this.otype) { this.otype = this.otype.toUpperCase(); } this.permissions = this.permissionsService.getOButtonPermissions(this.oattr, this.actRoute); if (Util.isDefined(this.permissions)) { this.enabled = this.permissions.enabled; this.visible = this.permissions.visible; } } onButtonClick(event) { event.stopPropagation(); if (this.enabled) { this.click.emit(event); this.onClick.emit(event); } } get needsIconButtonClass() { return (this.icon !== undefined || this.svgIcon !== undefined) && (this.olabel === undefined || this.olabel === ''); } isFab() { return this.otype === 'FAB'; } isRaised() { return this.otype === 'RAISED'; } isFlat() { return this.otype === 'FLAT'; } isStroked() { return (this.otype === 'STROKED' || !this.otype); } isBasic() { return this.otype === 'BASIC'; } isMiniFab() { return this.otype === 'FAB-MINI'; } isIconButton() { return this.otype === 'ICON'; } isVisible() { return this.visible; } } OButtonComponent.DEFAULT_TYPE = 'STROKED'; OButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OButtonComponent, deps: [{ token: i0.Injector }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); OButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OButtonComponent, selector: "o-button", inputs: { oattr: ["attr", "oattr"], olabel: ["label", "olabel"], otype: ["type", "otype"], icon: "icon", svgIcon: ["svg-icon", "svgIcon"], iconPosition: ["icon-position", "iconPosition"], image: "image", enabled: "enabled", color: "color" }, outputs: { onClick: "onClick", click: "click" }, host: { properties: { "class.o-button": "true", "class.o-button-icon-position-top": "iconPosition===\"top\"", "class.o-button-icon-position-bottom": "iconPosition===\"bottom\"" } }, ngImport: i0, template: "<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isBasic() && isVisible()\" mat-button [class.mat-icon-button]=\"needsIconButtonClass\"\n [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isRaised() && isVisible()\" mat-raised-button class=\"mat-raised-button\"\n [class.mat-icon-button]=\"needsIconButtonClass\" [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isStroked() && isVisible()\" mat-stroked-button\n [class.mat-icon-button]=\"needsIconButtonClass\" [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isFlat() && isVisible()\" mat-flat-button [class.mat-icon-button]=\"needsIconButtonClass\"\n [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isIconButton() && isVisible()\" mat-icon-button\n [class.mat-icon-button]=\"needsIconButtonClass\" [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isFab() && isVisible()\" mat-fab [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isMiniFab() && isVisible()\" mat-mini-fab [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n\n<ng-template #iconTemplate>\n <img src=\"{{ image }}\" class=\"o-button-image\" *ngIf=\"image!=undefined\" alt=\"button image\" />\n <mat-icon class=\"material-icons o-button-icon\" *ngIf=\"icon!==undefined\" style=\"vertical-align:middle\">{{ icon }}\n </mat-icon>\n <mat-icon class=\"material-icons o-button-icon\" *ngIf=\"svgIcon!==undefined\" style=\"vertical-align:middle\" [svgIcon]=\"svgIcon\"></mat-icon>\n</ng-template>\n\n<ng-template #buttonTemplate>\n\n <ng-container *ngIf=\"iconPosition==='left' || iconPosition==='top' \">\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n </ng-container>\n\n <br *ngIf=\"iconPosition==='top'\" />\n\n {{ olabel | oTranslate }}\n\n <br *ngIf=\"iconPosition==='bottom'\" />\n\n <ng-container *ngIf=\"iconPosition==='right' || iconPosition==='bottom'\">\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n </ng-container>\n</ng-template>\n", styles: [".o-button{display:inline-block;pointer-events:none}.o-button.o-button-icon-position-bottom .mat-mdc-button,.o-button.o-button-icon-position-bottom .mat-mdc-unelevated-button,.o-button.o-button-icon-position-bottom .mat-mdc-raised-button,.o-button.o-button-icon-position-bottom .mat-mdc-outlined-button,.o-button.o-button-icon-position-top .mat-mdc-button,.o-button.o-button-icon-position-top .mat-mdc-unelevated-button,.o-button.o-button-icon-position-top .mat-mdc-raised-button,.o-button.o-button-icon-position-top .mat-mdc-outlined-button{height:auto;line-height:normal}.o-button button{pointer-events:auto}.o-button button.mat-mdc-button,.o-button button.mat-mdc-unelevated-button,.o-button button.mat-mdc-raised-button,.o-button button.mat-mdc-outlined-button{width:100%}.o-button button *{pointer-events:none}.o-button button .o-button-image{max-height:24px;vertical-align:middle}.o-button button .mdc-button__label{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatMiniFabButton, selector: "button[mat-mini-fab]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatFabButton, selector: "button[mat-fab]", inputs: ["disabled", "disableRipple", "color", "tabIndex", "extended"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i5.OTranslatePipe, name: "oTranslate" }], encapsulation: i0.ViewEncapsulation.None }); __decorate([ BooleanInputConverter(), __metadata("design:type", Boolean) ], OButtonComponent.prototype, "enabled", void 0); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OButtonComponent, decorators: [{ type: Component, args: [{ selector: 'o-button', inputs: DEFAULT_INPUTS_O_BUTTON, outputs: DEFAULT_OUTPUTS_O_BUTTON, encapsulation: ViewEncapsulation.None, host: { '[class.o-button]': 'true', '[class.o-button-icon-position-top]': 'iconPosition==="top"', '[class.o-button-icon-position-bottom]': 'iconPosition==="bottom"' }, template: "<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isBasic() && isVisible()\" mat-button [class.mat-icon-button]=\"needsIconButtonClass\"\n [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isRaised() && isVisible()\" mat-raised-button class=\"mat-raised-button\"\n [class.mat-icon-button]=\"needsIconButtonClass\" [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isStroked() && isVisible()\" mat-stroked-button\n [class.mat-icon-button]=\"needsIconButtonClass\" [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isFlat() && isVisible()\" mat-flat-button [class.mat-icon-button]=\"needsIconButtonClass\"\n [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isIconButton() && isVisible()\" mat-icon-button\n [class.mat-icon-button]=\"needsIconButtonClass\" [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isFab() && isVisible()\" mat-fab [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isMiniFab() && isVisible()\" mat-mini-fab [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n\n<ng-template #iconTemplate>\n <img src=\"{{ image }}\" class=\"o-button-image\" *ngIf=\"image!=undefined\" alt=\"button image\" />\n <mat-icon class=\"material-icons o-button-icon\" *ngIf=\"icon!==undefined\" style=\"vertical-align:middle\">{{ icon }}\n </mat-icon>\n <mat-icon class=\"material-icons o-button-icon\" *ngIf=\"svgIcon!==undefined\" style=\"vertical-align:middle\" [svgIcon]=\"svgIcon\"></mat-icon>\n</ng-template>\n\n<ng-template #buttonTemplate>\n\n <ng-container *ngIf=\"iconPosition==='left' || iconPosition==='top' \">\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n </ng-container>\n\n <br *ngIf=\"iconPosition==='top'\" />\n\n {{ olabel | oTranslate }}\n\n <br *ngIf=\"iconPosition==='bottom'\" />\n\n <ng-container *ngIf=\"iconPosition==='right' || iconPosition==='bottom'\">\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n </ng-container>\n</ng-template>\n", styles: [".o-button{display:inline-block;pointer-events:none}.o-button.o-button-icon-position-bottom .mat-mdc-button,.o-button.o-button-icon-position-bottom .mat-mdc-unelevated-button,.o-button.o-button-icon-position-bottom .mat-mdc-raised-button,.o-button.o-button-icon-position-bottom .mat-mdc-outlined-button,.o-button.o-button-icon-position-top .mat-mdc-button,.o-button.o-button-icon-position-top .mat-mdc-unelevated-button,.o-button.o-button-icon-position-top .mat-mdc-raised-button,.o-button.o-button-icon-position-top .mat-mdc-outlined-button{height:auto;line-height:normal}.o-button button{pointer-events:auto}.o-button button.mat-mdc-button,.o-button button.mat-mdc-unelevated-button,.o-button button.mat-mdc-raised-button,.o-button button.mat-mdc-outlined-button{width:100%}.o-button button *{pointer-events:none}.o-button button .o-button-image{max-height:24px;vertical-align:middle}.o-button button .mdc-button__label{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\n"] }] }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.ActivatedRoute }]; }, propDecorators: { enabled: [] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvYnV0dG9uL28tYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2J1dHRvbi9vLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFnQixpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7QUFFbEMsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUc7SUFDckMsYUFBYTtJQUNiLGVBQWU7SUFFZixhQUFhO0lBRWIsTUFBTTtJQUNOLG9CQUFvQjtJQUNwQiw2QkFBNkI7SUFDN0IsT0FBTztJQUVQLFNBQVM7SUFFVCxPQUFPO0NBQ1IsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHO0lBQ3RDLFNBQVM7SUFDVCxPQUFPO0NBQ1IsQ0FBQztBQWVGLE1BQU0sT0FBTyxnQkFBZ0I7SUFxQjNCLFlBQXNCLFFBQWtCLEVBQVksUUFBd0I7UUFBdEQsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFZLGFBQVEsR0FBUixRQUFRLENBQWdCO1FBWnJFLGlCQUFZLEdBQVcs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b0MsRUFBRSxzQkFBc0I7d0JBQzVELHVDQUF1QyxFQUFFLHlCQUF5QjtxQkFFbkU7NEhBYXdCLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIE9uSW5pdCwgVHlwZSwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRoZW1lUGFsZXR0ZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuXG5pbXBvcnQgeyBCb29sZWFuSW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uLy4uL3V0aWwvY29kZXMnO1xuXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBQZXJtaXNzaW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBPUGVybWlzc2lvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX0JVVFRPTiA9IFtcbiAgJ29hdHRyOiBhdHRyJyxcbiAgJ29sYWJlbDogbGFiZWwnLFxuICAvLyB0eXBlIFtCQVNJQ3xSQUlTRUR8U1RST0tFRHxGTEFUfElDT058RkFCfE1JTkktRkFCXTogVGhlIHR5cGUgb2YgYnV0dG9uLiBEZWZhdWx0OiBTVFJPS0VELlxuICAnb3R5cGU6IHR5cGUnLFxuICAvLyBpY29uIFtzdHJpbmddOiBOYW1lIG9mIGdvb2dsZSBpY29uIChzZWUgaHR0cHM6Ly9kZXNpZ24uZ29vZ2xlLmNvbS9pY29ucy8pXG4gICdpY29uJyxcbiAgJ3N2Z0ljb24gOiBzdmctaWNvbicsXG4gICdpY29uUG9zaXRpb246IGljb24tcG9zaXRpb24nLFxuICAnaW1hZ2UnLFxuICAvLyBlbmFibGVkIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IFdoZXRoZXIgdGhlIGJ1dHRvbiBpcyBlbmFibGVkLiBEZWZhdWx0OiB5ZXNcbiAgJ2VuYWJsZWQnLFxuICAvLyBjb2xvcjogVGhlbWUgY29sb3IgcGFsZXR0ZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgJ2NvbG9yJ1xuXTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVFBVVFNfT19CVVRUT04gPSBbXG4gICdvbkNsaWNrJyxcbiAgJ2NsaWNrJ1xuXTtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tYnV0dG9uJyxcbiAgaW5wdXRzOiBERUZBVUxUX0lOUFVUU19PX0JVVFRPTixcbiAgb3V0cHV0czogREVGQVVMVF9PVVRQVVRTX09fQlVUVE9OLFxuICB0ZW1wbGF0ZVVybDogJy4vby1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vLWJ1dHRvbi5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5vLWJ1dHRvbl0nOiAndHJ1ZScsXG4gICAgJ1tjbGFzcy5vLWJ1dHRvbi1pY29uLXBvc2l0aW9uLXRvcF0nOiAnaWNvblBvc2l0aW9uPT09XCJ0b3BcIicsXG4gICAgJ1tjbGFzcy5vLWJ1dHRvbi1pY29uLXBvc2l0aW9uLWJvdHRvbV0nOiAnaWNvblBvc2l0aW9uPT09XCJib3R0b21cIidcblxuICB9XG59KVxuZXhwb3J0IGNsYXNzIE9CdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHByb3RlY3RlZCBzdGF0aWMgREVGQVVMVF9UWVBFID0gJ1NUUk9LRUQnO1xuXG4gIHByb3RlY3RlZCBvYXR0cjogc3RyaW5nO1xuICBwdWJsaWMgb2xhYmVsOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBvdHlwZTogc3RyaW5nO1xuICBwdWJsaWMgaWNvbjogc3RyaW5nO1xuICBwdWJsaWMgc3ZnSWNvbjogc3RyaW5nO1xuICBwdWJsaWMgaWNvblBvc2l0aW9uOiBzdHJpbmcgPSBDb2Rlcy5JQ09OX1BPU0lUSU9OX0xFRlQ7IC8vIGxlZnQgKGRlZmF1bHQpXG4gIHB1YmxpYyBpbWFnZTogc3RyaW5nO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKCkgZW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBjb2xvcjogVGhlbWVQYWxldHRlO1xuICBwdWJsaWMgdmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyogT3V0cHV0cyAqL1xuICBwdWJsaWMgb25DbGljazogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIHB1YmxpYyBjbGljazogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIHByb3RlY3RlZCBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZTtcbiAgcHJvdGVjdGVkIHBlcm1pc3Npb25zOiBPUGVybWlzc2lvbnM7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvciwgcHJvdGVjdGVkIGFjdFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge1xuICAgIHRoaXMub3R5cGUgPSBPQnV0dG9uQ29tcG9uZW50LkRFRkFVTFRfVFlQRTtcbiAgICB0aGlzLnBlcm1pc3Npb25zU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0PFBlcm1pc3Npb25zU2VydmljZT4oUGVybWlzc2lvbnNTZXJ2aWNlIGFzIFR5cGU8UGVybWlzc2lvbnNTZXJ2aWNlPik7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vdHlwZSkge1xuICAgICAgdGhpcy5vdHlwZSA9IHRoaXMub3R5cGUudG9VcHBlckNhc2UoKTtcbiAgICB9XG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldE9CdXR0b25QZXJtaXNzaW9ucyh0aGlzLm9hdHRyLCB0aGlzLmFjdFJvdXRlKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5wZXJtaXNzaW9ucykpIHtcbiAgICAgIHRoaXMuZW5hYmxlZCA9IHRoaXMucGVybWlzc2lvbnMuZW5hYmxlZDtcbiAgICAgIHRoaXMudmlzaWJsZSA9IHRoaXMucGVybWlzc2lvbnMudmlzaWJsZTtcbiAgICB9XG4gIH1cblxuICBvbkJ1dHRvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuZW5hYmxlZCkge1xuICAgICAgdGhpcy5jbGljay5lbWl0KGV2ZW50KTtcbiAgICAgIHRoaXMub25DbGljay5lbWl0KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBnZXQgbmVlZHNJY29uQnV0dG9uQ2xhc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLmljb24gIT09IHVuZGVmaW5lZCB8fCB0aGlzLnN2Z0ljb24gIT09IHVuZGVmaW5lZCkgJiYgKHRoaXMub2xhYmVsID09PSB1bmRlZmluZWQgfHwgdGhpcy5vbGFiZWwgPT09ICcnKTtcbiAgfVxuXG4gIGlzRmFiKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm90eXBlID09PSAnRkFCJztcbiAgfVxuXG4gIGlzUmFpc2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm90eXBlID09PSAnUkFJU0VEJztcbiAgfVxuXG4gIGlzRmxhdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vdHlwZSA9PT0gJ0ZMQVQnO1xuICB9XG5cbiAgaXNTdHJva2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5vdHlwZSA9PT0gJ1NUUk9LRUQnIHx8ICF0aGlzLm90eXBlKTtcbiAgfVxuXG4gIGlzQmFzaWMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3R5cGUgPT09ICdCQVNJQyc7XG4gIH1cblxuICBpc01pbmlGYWIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3R5cGUgPT09ICdGQUItTUlOSSc7XG4gIH1cblxuICBpc0ljb25CdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3R5cGUgPT09ICdJQ09OJztcbiAgfVxuICBpc1Zpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZTtcbiAgfVxufVxuIiwiPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQnV0dG9uQ2xpY2soJGV2ZW50KVwiICpuZ0lmPVwiaXNCYXNpYygpICYmIGlzVmlzaWJsZSgpXCIgbWF0LWJ1dHRvbiBbY2xhc3MubWF0LWljb24tYnV0dG9uXT1cIm5lZWRzSWNvbkJ1dHRvbkNsYXNzXCJcbiAgW2Rpc2FibGVkXT1cIiFlbmFibGVkXCIgW2NvbG9yXT1cImNvbG9yXCI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuPC9idXR0b24+XG5cbjxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkJ1dHRvbkNsaWNrKCRldmVudClcIiAqbmdJZj1cImlzUmFpc2VkKCkgJiYgaXNWaXNpYmxlKClcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cIm1hdC1yYWlzZWQtYnV0dG9uXCJcbiAgW2NsYXNzLm1hdC1pY29uLWJ1dHRvbl09XCJuZWVkc0ljb25CdXR0b25DbGFzc1wiIFtkaXNhYmxlZF09XCIhZW5hYmxlZFwiIFtjb2xvcl09XCJjb2xvclwiPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvYnV0dG9uPlxuXG48YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25CdXR0b25DbGljaygkZXZlbnQpXCIgKm5nSWY9XCJpc1N0cm9rZWQoKSAmJiBpc1Zpc2libGUoKVwiIG1hdC1zdHJva2VkLWJ1dHRvblxuICBbY2xhc3MubWF0LWljb24tYnV0dG9uXT1cIm5lZWRzSWNvbkJ1dHRvbkNsYXNzXCIgW2Rpc2FibGVkXT1cIiFlbmFibGVkXCIgW2NvbG9yXT1cImNvbG9yXCI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuPC9idXR0b24+XG5cbjxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkJ1dHRvbkNsaWNrKCRldmVudClcIiAqbmdJZj1cImlzRmxhdCgpICYmIGlzVmlzaWJsZSgpXCIgbWF0LWZsYXQtYnV0dG9uIFtjbGFzcy5tYXQtaWNvbi1idXR0b25dPVwibmVlZHNJY29uQnV0dG9uQ2xhc3NcIlxuICBbZGlzYWJsZWRdPVwiIWVuYWJsZWRcIiBbY29sb3JdPVwiY29sb3JcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG48L2J1dHRvbj5cblxuPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQnV0dG9uQ2xpY2soJGV2ZW50KVwiICpuZ0lmPVwiaXNJY29uQnV0dG9uKCkgJiYgaXNWaXNpYmxlKClcIiBtYXQtaWNvbi1idXR0b25cbiAgW2NsYXNzLm1hdC1pY29uLWJ1dHRvbl09XCJuZWVkc0ljb25CdXR0b25DbGFzc1wiIFtkaXNhYmxlZF09XCIhZW5hYmxlZFwiIFtjb2xvcl09XCJjb2xvclwiPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvYnV0dG9uPlxuXG48YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25CdXR0b25DbGljaygkZXZlbnQpXCIgKm5nSWY9XCJpc0ZhYigpICYmIGlzVmlzaWJsZSgpXCIgbWF0LWZhYiBbZGlzYWJsZWRdPVwiIWVuYWJsZWRcIiBbY29sb3JdPVwiY29sb3JcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG48L2J1dHRvbj5cblxuPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQnV0dG9uQ2xpY2soJGV2ZW50KVwiICpuZ0lmPVwiaXNNaW5pRmFiKCkgJiYgaXNWaXNpYmxlKClcIiBtYXQtbWluaS1mYWIgW2Rpc2FibGVkXT1cIiFlbmFibGVkXCIgW2NvbG9yXT1cImNvbG9yXCI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuPC9idXR0b24+XG5cblxuPG5nLXRlbXBsYXRlICNpY29uVGVtcGxhdGU+XG4gIDxpbWcgc3JjPVwie3sgaW1hZ2UgfX1cIiBjbGFzcz1cIm8tYnV0dG9uLWltYWdlXCIgKm5nSWY9XCJpbWFnZSE9dW5kZWZpbmVkXCIgYWx0PVwiYnV0dG9uIGltYWdlXCIgLz5cbiAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgby1idXR0b24taWNvblwiICpuZ0lmPVwiaWNvbiE9PXVuZGVmaW5lZFwiIHN0eWxlPVwidmVydGljYWwtYWxpZ246bWlkZGxlXCI+e3sgaWNvbiB9fVxuICA8L21hdC1pY29uPlxuICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBvLWJ1dHRvbi1pY29uXCIgKm5nSWY9XCJzdmdJY29uIT09dW5kZWZpbmVkXCIgc3R5bGU9XCJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGVcIiBbc3ZnSWNvbl09XCJzdmdJY29uXCI+PC9tYXQtaWNvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9uVGVtcGxhdGU+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImljb25Qb3NpdGlvbj09PSdsZWZ0JyB8fCBpY29uUG9zaXRpb249PT0ndG9wJyBcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaWNvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxiciAqbmdJZj1cImljb25Qb3NpdGlvbj09PSd0b3AnXCIgLz5cblxuICB7eyBvbGFiZWwgfCBvVHJhbnNsYXRlIH19XG5cbiAgPGJyICpuZ0lmPVwiaWNvblBvc2l0aW9uPT09J2JvdHRvbSdcIiAvPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpY29uUG9zaXRpb249PT0ncmlnaHQnIHx8IGljb25Qb3NpdGlvbj09PSdib3R0b20nXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImljb25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=