ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
52 lines • 17.8 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Component, ViewEncapsulation } from '@angular/core';
import { BooleanInputConverter } from '../../../decorators/input-converter';
import { OPercentPipe } from '../../../pipes/o-percentage.pipe';
import { Util } from '../../../util/util';
import { ORealInputComponent } from '../real-input/o-real-input.component';
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/forms";
import * as i4 from "../../../directives/o-mat-error.directive";
import * as i5 from "@angular/material/button";
import * as i6 from "@angular/material/icon";
import * as i7 from "@angular/material/input";
import * as i8 from "@angular/material/form-field";
import * as i9 from "@angular/material/tooltip";
import * as i10 from "../../../pipes/o-translate.pipe";
export const DEFAULT_INPUTS_O_PERCENT_INPUT = [
'valueBase: value-base'
];
export const DEFAULT_OUTPUTS_O_PERCENT_INPUT = [];
export class OPercentInputComponent extends ORealInputComponent {
constructor() {
super(...arguments);
this.grouping = true;
this.valueBase = 1;
}
ngOnInit() {
if (!Util.isDefined(this.min)) {
this.min = 0;
}
if (!Util.isDefined(this.max)) {
this.max = 100;
}
super.ngOnInit();
this.pipeArguments.valueBase = this.valueBase;
}
setComponentPipe() {
this.componentPipe = new OPercentPipe(this.injector);
}
}
OPercentInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OPercentInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
OPercentInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OPercentInputComponent, selector: "o-percent-input", inputs: { valueBase: ["value-base", "valueBase"] }, usesInheritance: true, ngImport: i0, template: "<div [formGroup]=\"getFormGroup()\" [matTooltip]=\"tooltip\" [matTooltipClass]=\"tooltipClass\" [matTooltipPosition]=\"tooltipPosition\"\n [matTooltipShowDelay]=\"tooltipShowDelay\" [matTooltipHideDelay]=\"tooltipHideDelay\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\n <mat-form-field [appearance]=\"appearance\" [floatLabel]=\"floatLabel\" [hideRequiredMarker]=\"hideRequiredMarker\" [class.custom-width]=\"hasCustomWidth\"\n class=\"icon-field\" fxFlexFill [subscriptSizing]=\"subscriptSizing\">\n <mat-label *ngIf=\"labelVisible\">{{ olabel | oTranslate }}</mat-label>\n <input matInput [type]=\"inputType\" [id]=\"getAttribute()\" [formControlName]=\"getAttribute()\" [placeholder]=\"placeHolder\"\n (focus)=\"innerOnFocus($event)\" (blur)=\"innerOnBlur($event)\" [readonly]=\"isReadOnly\" (change)=\"onChangeEvent($event)\" [min]=\"min\" [max]=\"max\"\n [step]=\"step\" [required]=\"isRequired\">\n <button type=\"button\" *ngIf=\"showClearButton\" matSuffix mat-icon-button (click)=\"onClickClearValue($event)\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n <mat-icon svgIcon=\"ontimize:PERCENT\" matSuffix class=\"svg-icon\" [class.mat-disabled]=\"!enabled\"></mat-icon>\n <mat-error *oMatError=\"hasError('required')\">\n {{ 'FORM_VALIDATION.REQUIRED' | oTranslate }}\n </mat-error>\n <mat-error *oMatError=\"hasError('min')\">\n {{ 'FORM_VALIDATION.MIN_VALUE' | oTranslate }}: {{ getErrorValue('min', 'min') }}\n </mat-error>\n <mat-error *oMatError=\"hasError('max')\">\n {{ 'FORM_VALIDATION.MAX_VALUE' | oTranslate }}: {{ getErrorValue('max', 'max') }}\n </mat-error>\n <mat-error *oMatError=\"hasError('minDecimaldigits')\">\n {{ 'FORM_VALIDATION.MIN_DECIMAL_DIGITS' | oTranslate }}: {{ getErrorValue('minDecimaldigits', 'requiredMinDecimaldigits') }}\n </mat-error>\n <mat-error *oMatError=\"hasError('maxDecimaldigits')\">\n {{ 'FORM_VALIDATION.MAX_DECIMAL_DIGITS' | oTranslate }}: {{ getErrorValue('maxDecimaldigits', 'requiredMaxDecimaldigits') }}\n </mat-error>\n <mat-error *ngFor=\"let oError of getActiveOErrors()\">\n {{ oError.text | oTranslate }}\n </mat-error>\n </mat-form-field>\n</div>\n", dependencies: [{ 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: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.OMatErrorDirective, selector: "[oMatError]", inputs: ["oMatError"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i8.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i10.OTranslatePipe, name: "oTranslate" }], encapsulation: i0.ViewEncapsulation.None });
__decorate([
BooleanInputConverter(),
__metadata("design:type", Boolean)
], OPercentInputComponent.prototype, "grouping", void 0);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OPercentInputComponent, decorators: [{
type: Component,
args: [{ selector: 'o-percent-input', inputs: DEFAULT_INPUTS_O_PERCENT_INPUT, outputs: DEFAULT_OUTPUTS_O_PERCENT_INPUT, encapsulation: ViewEncapsulation.None, template: "<div [formGroup]=\"getFormGroup()\" [matTooltip]=\"tooltip\" [matTooltipClass]=\"tooltipClass\" [matTooltipPosition]=\"tooltipPosition\"\n [matTooltipShowDelay]=\"tooltipShowDelay\" [matTooltipHideDelay]=\"tooltipHideDelay\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\n <mat-form-field [appearance]=\"appearance\" [floatLabel]=\"floatLabel\" [hideRequiredMarker]=\"hideRequiredMarker\" [class.custom-width]=\"hasCustomWidth\"\n class=\"icon-field\" fxFlexFill [subscriptSizing]=\"subscriptSizing\">\n <mat-label *ngIf=\"labelVisible\">{{ olabel | oTranslate }}</mat-label>\n <input matInput [type]=\"inputType\" [id]=\"getAttribute()\" [formControlName]=\"getAttribute()\" [placeholder]=\"placeHolder\"\n (focus)=\"innerOnFocus($event)\" (blur)=\"innerOnBlur($event)\" [readonly]=\"isReadOnly\" (change)=\"onChangeEvent($event)\" [min]=\"min\" [max]=\"max\"\n [step]=\"step\" [required]=\"isRequired\">\n <button type=\"button\" *ngIf=\"showClearButton\" matSuffix mat-icon-button (click)=\"onClickClearValue($event)\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n <mat-icon svgIcon=\"ontimize:PERCENT\" matSuffix class=\"svg-icon\" [class.mat-disabled]=\"!enabled\"></mat-icon>\n <mat-error *oMatError=\"hasError('required')\">\n {{ 'FORM_VALIDATION.REQUIRED' | oTranslate }}\n </mat-error>\n <mat-error *oMatError=\"hasError('min')\">\n {{ 'FORM_VALIDATION.MIN_VALUE' | oTranslate }}: {{ getErrorValue('min', 'min') }}\n </mat-error>\n <mat-error *oMatError=\"hasError('max')\">\n {{ 'FORM_VALIDATION.MAX_VALUE' | oTranslate }}: {{ getErrorValue('max', 'max') }}\n </mat-error>\n <mat-error *oMatError=\"hasError('minDecimaldigits')\">\n {{ 'FORM_VALIDATION.MIN_DECIMAL_DIGITS' | oTranslate }}: {{ getErrorValue('minDecimaldigits', 'requiredMinDecimaldigits') }}\n </mat-error>\n <mat-error *oMatError=\"hasError('maxDecimaldigits')\">\n {{ 'FORM_VALIDATION.MAX_DECIMAL_DIGITS' | oTranslate }}: {{ getErrorValue('maxDecimaldigits', 'requiredMaxDecimaldigits') }}\n </mat-error>\n <mat-error *ngFor=\"let oError of getActiveOErrors()\">\n {{ oError.text | oTranslate }}\n </mat-error>\n </mat-form-field>\n</div>\n" }]
}], propDecorators: { grouping: [] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1wZXJjZW50LWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2lucHV0L3BlcmNlbnQtaW5wdXQvby1wZXJjZW50LWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2lucHV0L3BlcmNlbnQtaW5wdXQvby1wZXJjZW50LWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzVFLE9BQU8sRUFBa0QsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDaEgsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7Ozs7Ozs7QUFHM0UsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUc7SUFDNUMsdUJBQXVCO0NBQ3hCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBRyxFQUM5QyxDQUFDO0FBU0YsTUFBTSxPQUFPLHNCQUF1QixTQUFRLG1CQUFtQjtJQVAvRDs7UUFVRSxhQUFRLEdBQVksSUFBSSxDQUFDO1FBRXpCLGNBQVMsR0FBNkIsQ0FBQyxDQUFDO0tBb0J6QztJQWZRLFFBQVE7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FDZDtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM3QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztTQUNoQjtRQUNELEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVqQixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ2hELENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2RCxDQUFDOztvSEF4QlUsc0JBQXNCO3dHQUF0QixzQkFBc0Isa0lDdEJuQyw2c0VBZ0NBO0FEUkU7SUFBQyxxQkFBcUIsRUFBRTs7d0RBQ0M7NEZBSGQsc0JBQXNCO2tCQVBsQyxTQUFTOytCQUNFLGlCQUFpQixVQUVuQiw4QkFBOEIsV0FDN0IsK0JBQStCLGlCQUN6QixpQkFBaUIsQ0FBQyxJQUFJOzhCQUtyQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJvb2xlYW5JbnB1dENvbnZlcnRlciB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvcnMvaW5wdXQtY29udmVydGVyJztcbmltcG9ydCB7IElQZXJjZW50UGlwZUFyZ3VtZW50LCBPUGVyY2VudGFnZVZhbHVlQmFzZVR5cGUsIE9QZXJjZW50UGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzL28tcGVyY2VudGFnZS5waXBlJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgT1JlYWxJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL3JlYWwtaW5wdXQvby1yZWFsLWlucHV0LmNvbXBvbmVudCc7XG5cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5QVVRTX09fUEVSQ0VOVF9JTlBVVCA9IFtcbiAgJ3ZhbHVlQmFzZTogdmFsdWUtYmFzZSdcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVFBVVFNfT19QRVJDRU5UX0lOUFVUID0gW1xuXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnby1wZXJjZW50LWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL28tcGVyY2VudC1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19QRVJDRU5UX0lOUFVULFxuICBvdXRwdXRzOiBERUZBVUxUX09VVFBVVFNfT19QRVJDRU5UX0lOUFVULFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIE9QZXJjZW50SW5wdXRDb21wb25lbnQgZXh0ZW5kcyBPUmVhbElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZ3JvdXBpbmc6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHZhbHVlQmFzZTogT1BlcmNlbnRhZ2VWYWx1ZUJhc2VUeXBlID0gMTtcblxuICBwcm90ZWN0ZWQgY29tcG9uZW50UGlwZTogT1BlcmNlbnRQaXBlO1xuICBwcm90ZWN0ZWQgcGlwZUFyZ3VtZW50czogSVBlcmNlbnRQaXBlQXJndW1lbnQ7XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5taW4pKSB7XG4gICAgICB0aGlzLm1pbiA9IDA7XG4gICAgfVxuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5tYXgpKSB7XG4gICAgICB0aGlzLm1heCA9IDEwMDtcbiAgICB9XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIHRoaXMucGlwZUFyZ3VtZW50cy52YWx1ZUJhc2UgPSB0aGlzLnZhbHVlQmFzZTtcbiAgfVxuXG4gIHNldENvbXBvbmVudFBpcGUoKTogdm9pZCB7XG4gICAgdGhpcy5jb21wb25lbnRQaXBlID0gbmV3IE9QZXJjZW50UGlwZSh0aGlzLmluamVjdG9yKTtcbiAgfVxufVxuIiwiPGRpdiBbZm9ybUdyb3VwXT1cImdldEZvcm1Hcm91cCgpXCIgW21hdFRvb2x0aXBdPVwidG9vbHRpcFwiIFttYXRUb29sdGlwQ2xhc3NdPVwidG9vbHRpcENsYXNzXCIgW21hdFRvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxuICBbbWF0VG9vbHRpcFNob3dEZWxheV09XCJ0b29sdGlwU2hvd0RlbGF5XCIgW21hdFRvb2x0aXBIaWRlRGVsYXldPVwidG9vbHRpcEhpZGVEZWxheVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XG4gIDxtYXQtZm9ybS1maWVsZCBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCIgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiIFtoaWRlUmVxdWlyZWRNYXJrZXJdPVwiaGlkZVJlcXVpcmVkTWFya2VyXCIgW2NsYXNzLmN1c3RvbS13aWR0aF09XCJoYXNDdXN0b21XaWR0aFwiXG4gICAgY2xhc3M9XCJpY29uLWZpZWxkXCIgZnhGbGV4RmlsbCBbc3Vic2NyaXB0U2l6aW5nXT1cInN1YnNjcmlwdFNpemluZ1wiPlxuICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJsYWJlbFZpc2libGVcIj57eyBvbGFiZWwgfCBvVHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IFt0eXBlXT1cImlucHV0VHlwZVwiIFtpZF09XCJnZXRBdHRyaWJ1dGUoKVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiZ2V0QXR0cmlidXRlKClcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2VIb2xkZXJcIlxuICAgICAgKGZvY3VzKT1cImlubmVyT25Gb2N1cygkZXZlbnQpXCIgKGJsdXIpPVwiaW5uZXJPbkJsdXIoJGV2ZW50KVwiIFtyZWFkb25seV09XCJpc1JlYWRPbmx5XCIgKGNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KCRldmVudClcIiBbbWluXT1cIm1pblwiIFttYXhdPVwibWF4XCJcbiAgICAgIFtzdGVwXT1cInN0ZXBcIiBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwic2hvd0NsZWFyQnV0dG9uXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwib25DbGlja0NsZWFyVmFsdWUoJGV2ZW50KVwiPlxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTpjbG9zZVwiPjwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTpQRVJDRU5UXCIgbWF0U3VmZml4IGNsYXNzPVwic3ZnLWljb25cIiBbY2xhc3MubWF0LWRpc2FibGVkXT1cIiFlbmFibGVkXCI+PC9tYXQtaWNvbj5cbiAgICA8bWF0LWVycm9yICpvTWF0RXJyb3I9XCJoYXNFcnJvcigncmVxdWlyZWQnKVwiPlxuICAgICAge3sgJ0ZPUk1fVkFMSURBVElPTi5SRVFVSVJFRCcgfCBvVHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gICAgPG1hdC1lcnJvciAqb01hdEVycm9yPVwiaGFzRXJyb3IoJ21pbicpXCI+XG4gICAgICB7eyAnRk9STV9WQUxJREFUSU9OLk1JTl9WQUxVRScgfCBvVHJhbnNsYXRlIH19OiB7eyBnZXRFcnJvclZhbHVlKCdtaW4nLCAnbWluJykgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgICA8bWF0LWVycm9yICpvTWF0RXJyb3I9XCJoYXNFcnJvcignbWF4JylcIj5cbiAgICAgIHt7ICdGT1JNX1ZBTElEQVRJT04uTUFYX1ZBTFVFJyB8IG9UcmFuc2xhdGUgfX06IHt7IGdldEVycm9yVmFsdWUoJ21heCcsICdtYXgnKSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICAgIDxtYXQtZXJyb3IgKm9NYXRFcnJvcj1cImhhc0Vycm9yKCdtaW5EZWNpbWFsZGlnaXRzJylcIj5cbiAgICAgIHt7ICdGT1JNX1ZBTElEQVRJT04uTUlOX0RFQ0lNQUxfRElHSVRTJyB8IG9UcmFuc2xhdGUgfX06IHt7IGdldEVycm9yVmFsdWUoJ21pbkRlY2ltYWxkaWdpdHMnLCAncmVxdWlyZWRNaW5EZWNpbWFsZGlnaXRzJykgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgICA8bWF0LWVycm9yICpvTWF0RXJyb3I9XCJoYXNFcnJvcignbWF4RGVjaW1hbGRpZ2l0cycpXCI+XG4gICAgICB7eyAnRk9STV9WQUxJREFUSU9OLk1BWF9ERUNJTUFMX0RJR0lUUycgfCBvVHJhbnNsYXRlIH19OiB7eyBnZXRFcnJvclZhbHVlKCdtYXhEZWNpbWFsZGlnaXRzJywgJ3JlcXVpcmVkTWF4RGVjaW1hbGRpZ2l0cycpIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gICAgPG1hdC1lcnJvciAqbmdGb3I9XCJsZXQgb0Vycm9yIG9mIGdldEFjdGl2ZU9FcnJvcnMoKVwiPlxuICAgICAge3sgb0Vycm9yLnRleHQgfCBvVHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L2Rpdj5cbiJdfQ==