UNPKG

@c-standard/angular-devui-extension

Version:

an extensional components lib for devui

90 lines 25.1 kB
import { Component, ContentChildren, forwardRef, Input, ViewEncapsulation, } from '@angular/core'; import { FormField } from './form-field'; import { TemplateDirective } from '@c-standard/angular-devui-extension/template'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; import * as i2 from "ng-devui"; import * as i3 from "@c-standard/angular-devui-extension/radio"; import * as i4 from "@c-standard/angular-devui-extension/select"; import * as i5 from "@angular/common"; export class FormPlusItemComponent extends FormField { constructor(fb) { super(); this.fb = fb; this.showLabel = true; this.helpText = ''; this.option = {}; this.required = false; this.disabled = false; this.validateRules = []; this.disableAll = false; this.showContent = false; // default value this.control = fb.control(''); } ngOnInit() { if (this.disabled) { this.control.disable(); } else { this.control.enable(); } } /** * todo 父子组件或者树型结构组件存在组件循环导入的问题 * 1. 使用中间服务来提供数据的共享(推荐) 使用@self注入装饰器 * 2. 创建注射器token来实现父组件的注入 */ get templates() { if (this.itemDefinitions != null) { const itemTemplates = {}; for (const definition of this.itemDefinitions.toArray()) { itemTemplates[definition.template] = definition.templateRef; } return itemTemplates; } else { return {}; } } } FormPlusItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: FormPlusItemComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); FormPlusItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: FormPlusItemComponent, selector: "d-form-plus-item", inputs: { showLabel: "showLabel", label: "label", field: "field", dataType: "dataType", helpText: "helpText", option: "option", required: "required", disabled: "disabled", template: "template", validateRules: "validateRules" }, providers: [ { provide: FormField, useExisting: forwardRef(() => FormPlusItemComponent), }, ], queries: [{ propertyName: "itemDefinitions", predicate: TemplateDirective }], usesInheritance: true, ngImport: i0, template: "<d-form-item [dHasFeedback]=\"false\">\r\n <d-form-label\r\n *ngIf=\"showLabel\"\r\n [hasHelp]=\"!!helpText\"\r\n [helpTips]=\"helpText\"\r\n [required]=\"required\"\r\n >\r\n {{ label }}\r\n </d-form-label>\r\n <d-form-control style=\"margin-left: 0\">\r\n <ng-container *ngIf=\"!showContent\">\r\n <ng-container\r\n *ngIf=\"template; else itemTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: {\r\n control: control,\r\n disabled: disabled,\r\n option: option\r\n }\r\n }\"\r\n [ngTemplateOutlet]=\"templates[template || ''] || defaultItemTemplate\"\r\n >\r\n </ng-container>\r\n <ng-template #defaultItemTemplate> tmpl:{{ option['value'] }} </ng-template>\r\n <ng-template #itemTemplate>\r\n <ng-container [ngSwitch]=\"dataType\">\r\n <input\r\n *ngSwitchDefault\r\n dTextInput\r\n [formControl]=\"control\"\r\n [name]=\"field\"\r\n [dValidateRules]=\"validateRules\"\r\n [placeholder]=\"option['placeholder']\"\r\n [disabled]=\"!!option['disabled'] || disableAll\"\r\n />\r\n <textarea\r\n *ngSwitchCase=\"'text'\"\r\n dTextarea\r\n [formControl]=\"control\"\r\n [dValidateRules]=\"validateRules\"\r\n [placeholder]=\"option['placeholder'] || ''\"\r\n ></textarea>\r\n <d-input-number\r\n *ngSwitchCase=\"'number'\"\r\n [style.min-width]=\"'120px'\"\r\n [formControl]=\"control\"\r\n [dValidateRules]=\"validateRules\"\r\n [allowEmpty]=\"option['allowEmpty']\"\r\n [decimalLimit]=\"option['decimalLimit']\"\r\n [maxLength]=\"option['maxLength']\"\r\n [placeholder]=\"option['placeholder']\"\r\n [step]=\"option['step']\"\r\n ></d-input-number>\r\n <d-toggle\r\n *ngSwitchCase=\"'boolean'\"\r\n [formControl]=\"control\"\r\n [dValidateRules]=\"validateRules\"\r\n ></d-toggle>\r\n <d-radio-plus-group\r\n *ngSwitchCase=\"'enum'\"\r\n [name]=\"field\"\r\n [control]=\"control\"\r\n [dataSource]=\"option['dataSource']\"\r\n >\r\n </d-radio-plus-group>\r\n <d-select-box\r\n *ngSwitchCase=\"'items'\"\r\n [allowClear]=\"option['allowClear']\"\r\n [dataSource]=\"option['dataSource']\"\r\n [displayExpr]=\"option['displayExpr']\"\r\n [multiple]=\"option['multiple']\"\r\n [formControl]=\"control\"\r\n [placeholder]=\"option['placeholder']\"\r\n [valueExpr]=\"option['valueExpr']\"\r\n >\r\n </d-select-box>\r\n </ng-container>\r\n </ng-template>\r\n </ng-container>\r\n <ng-content></ng-content>\r\n </d-form-control>\r\n</d-form-item>\r\n", components: [{ type: i2.FormItemComponent, selector: "d-form-item", inputs: ["dFeedbackType", "dHasFeedback"] }, { type: i2.FormLabelComponent, selector: "d-form-label", inputs: ["required", "hasHelp", "helpTips"] }, { type: i2.FormControlComponent, selector: "d-form-control", inputs: ["extraInfo", "feedbackStatus", "suffixTemplate"] }, { type: i2.InputNumberComponent, selector: "d-input-number", inputs: ["step", "disabled", "size", "decimalLimit", "autoFocus", "allowEmpty", "placeholder", "maxLength", "reg", "min", "max"], outputs: ["afterValueChanged", "whileValueChanging"] }, { type: i2.ToggleComponent, selector: "d-toggle", inputs: ["size", "color", "beforeChange", "checkedContent", "uncheckedContent", "checked", "disabled"], outputs: ["change"], exportAs: ["toggle"] }, { type: i3.RadioPlusGroupComponent, selector: "d-radio-plus-group", inputs: ["dataSource", "name", "value", "control", "valueExpr", "displayExpr", "disabled", "align", "validateRules"], outputs: ["checkedValueChange"] }, { type: i4.SelectBoxComponent, selector: "d-select-box", inputs: ["dataSource", "valueExpr", "displayExpr", "placeholder", "multiple", "allowClear", "allowSearch", "disabled", "validateRules"], outputs: ["selectedOptionChange", "expandChange", "initialized"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2.DFormControlRuleDirective, selector: "[dValidateRules][formControlName],[dValidateRules][ngModel],[dValidateRules][formControl]", inputs: ["dValidateRules", "dValidatePopConfig"], outputs: ["dRulesStatusChange"], exportAs: ["dValidateRules"] }, { type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], encapsulation: i0.ViewEncapsulation.None }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: FormPlusItemComponent, decorators: [{ type: Component, args: [{ selector: 'd-form-plus-item', encapsulation: ViewEncapsulation.None, providers: [ { provide: FormField, useExisting: forwardRef(() => FormPlusItemComponent), }, ], template: "<d-form-item [dHasFeedback]=\"false\">\r\n <d-form-label\r\n *ngIf=\"showLabel\"\r\n [hasHelp]=\"!!helpText\"\r\n [helpTips]=\"helpText\"\r\n [required]=\"required\"\r\n >\r\n {{ label }}\r\n </d-form-label>\r\n <d-form-control style=\"margin-left: 0\">\r\n <ng-container *ngIf=\"!showContent\">\r\n <ng-container\r\n *ngIf=\"template; else itemTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: {\r\n control: control,\r\n disabled: disabled,\r\n option: option\r\n }\r\n }\"\r\n [ngTemplateOutlet]=\"templates[template || ''] || defaultItemTemplate\"\r\n >\r\n </ng-container>\r\n <ng-template #defaultItemTemplate> tmpl:{{ option['value'] }} </ng-template>\r\n <ng-template #itemTemplate>\r\n <ng-container [ngSwitch]=\"dataType\">\r\n <input\r\n *ngSwitchDefault\r\n dTextInput\r\n [formControl]=\"control\"\r\n [name]=\"field\"\r\n [dValidateRules]=\"validateRules\"\r\n [placeholder]=\"option['placeholder']\"\r\n [disabled]=\"!!option['disabled'] || disableAll\"\r\n />\r\n <textarea\r\n *ngSwitchCase=\"'text'\"\r\n dTextarea\r\n [formControl]=\"control\"\r\n [dValidateRules]=\"validateRules\"\r\n [placeholder]=\"option['placeholder'] || ''\"\r\n ></textarea>\r\n <d-input-number\r\n *ngSwitchCase=\"'number'\"\r\n [style.min-width]=\"'120px'\"\r\n [formControl]=\"control\"\r\n [dValidateRules]=\"validateRules\"\r\n [allowEmpty]=\"option['allowEmpty']\"\r\n [decimalLimit]=\"option['decimalLimit']\"\r\n [maxLength]=\"option['maxLength']\"\r\n [placeholder]=\"option['placeholder']\"\r\n [step]=\"option['step']\"\r\n ></d-input-number>\r\n <d-toggle\r\n *ngSwitchCase=\"'boolean'\"\r\n [formControl]=\"control\"\r\n [dValidateRules]=\"validateRules\"\r\n ></d-toggle>\r\n <d-radio-plus-group\r\n *ngSwitchCase=\"'enum'\"\r\n [name]=\"field\"\r\n [control]=\"control\"\r\n [dataSource]=\"option['dataSource']\"\r\n >\r\n </d-radio-plus-group>\r\n <d-select-box\r\n *ngSwitchCase=\"'items'\"\r\n [allowClear]=\"option['allowClear']\"\r\n [dataSource]=\"option['dataSource']\"\r\n [displayExpr]=\"option['displayExpr']\"\r\n [multiple]=\"option['multiple']\"\r\n [formControl]=\"control\"\r\n [placeholder]=\"option['placeholder']\"\r\n [valueExpr]=\"option['valueExpr']\"\r\n >\r\n </d-select-box>\r\n </ng-container>\r\n </ng-template>\r\n </ng-container>\r\n <ng-content></ng-content>\r\n </d-form-control>\r\n</d-form-item>\r\n" }] }], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { showLabel: [{ type: Input }], label: [{ type: Input }], field: [{ type: Input }], dataType: [{ type: Input }], helpText: [{ type: Input }], option: [{ type: Input }], required: [{ type: Input }], disabled: [{ type: Input }], template: [{ type: Input }], validateRules: [{ type: Input }], itemDefinitions: [{ type: ContentChildren, args: [TemplateDirective] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1wbHVzLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9mb3JtL2Zvcm0tcGx1cy1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvZm9ybS9mb3JtLXBsdXMtaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFrQyxpQkFBaUIsR0FBRyxNQUFNLGVBQWUsQ0FBQztBQUlsSSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFBOzs7Ozs7O0FBZWhGLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxTQUFTO0lBbUJoRCxZQUFvQixFQUFlO1FBQy9CLEtBQUssRUFBRSxDQUFDO1FBRFEsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQWxCMUIsY0FBUyxHQUFhLElBQUksQ0FBQztRQUkzQixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLFdBQU0sR0FBeUIsRUFBRSxDQUFDO1FBQ2xDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUUxQixrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFJNUMsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQU16QixnQkFBZ0I7UUFDaEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMxQjthQUFNO1lBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUN6QjtJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBVyxTQUFTO1FBQ2hCLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLEVBQUU7WUFDOUIsTUFBTSxhQUFhLEdBQXdDLEVBQUUsQ0FBQztZQUM5RCxLQUFLLE1BQU0sVUFBVSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3JELGFBQWEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQzthQUMvRDtZQUNELE9BQU8sYUFBYSxDQUFDO1NBQ3hCO2FBQU07WUFDSCxPQUFPLEVBQUUsQ0FBQztTQUNiO0lBQ0wsQ0FBQzs7a0hBaERRLHFCQUFxQjtzR0FBckIscUJBQXFCLCtRQVBuQjtRQUNQO1lBQ0ksT0FBTyxFQUFFLFNBQVM7WUFDbEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztTQUN2RDtLQUNKLDBEQW1CZ0IsaUJBQWlCLG9EQ3JDdEMsb3NIQWtGQTsyRkQ5RGEscUJBQXFCO2tCQWJqQyxTQUFTOytCQUNJLGtCQUFrQixpQkFFYixpQkFBaUIsQ0FBQyxJQUFJLGFBRzFCO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxTQUFTOzRCQUNsQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzt5QkFDdkQ7cUJBQ0o7a0dBR1EsU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFPOEIsZUFBZTtzQkFBbEQsZUFBZTt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uSW5pdCwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0VuY2Fwc3VsYXRpb24sIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRFZhbGlkYXRlUnVsZXMgfSBmcm9tICduZy1kZXZ1aSc7XHJcbmltcG9ydCB7IERGb3JtSXRlbVR5cGUgfSBmcm9tICcuL2Zvcm0nO1xyXG5pbXBvcnQgeyBGb3JtRmllbGQgfSBmcm9tICcuL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BjLXN0YW5kYXJkL2FuZ3VsYXItZGV2dWktZXh0ZW5zaW9uL3RlbXBsYXRlJ1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2QtZm9ybS1wbHVzLWl0ZW0nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tcGx1cy1pdGVtLmNvbXBvbmVudC5odG1sJyxcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgICAvLyB0b2RvIOS9v+eUqENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaOWBmue7hOS7tuWPmOabtOajgOafpSxcclxuICAgIC8vIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBGb3JtRmllbGQsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZvcm1QbHVzSXRlbUNvbXBvbmVudCksXHJcbiAgICAgICAgfSxcclxuICAgIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtUGx1c0l0ZW1Db21wb25lbnQgZXh0ZW5kcyBGb3JtRmllbGQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgQElucHV0KCkgc2hvd0xhYmVsPzogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBsYWJlbD86IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGZpZWxkITogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgZGF0YVR5cGU/OiBERm9ybUl0ZW1UeXBlO1xyXG4gICAgQElucHV0KCkgaGVscFRleHQ6IHN0cmluZyA9ICcnO1xyXG4gICAgQElucHV0KCkgb3B0aW9uOiB7IFtwOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG4gICAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSB0ZW1wbGF0ZT86IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHZhbGlkYXRlUnVsZXM6IERWYWxpZGF0ZVJ1bGVzID0gW107XHJcbiAgICAvLyBmaWVsZCDljZXkuKrlgLzmlLnlj5jnmoTmg4XlhrVcclxuXHJcbiAgICBjb250cm9sOiBGb3JtQ29udHJvbDtcclxuICAgIGRpc2FibGVBbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHNob3dDb250ZW50OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZURpcmVjdGl2ZSkgaXRlbURlZmluaXRpb25zITogUXVlcnlMaXN0PFRlbXBsYXRlRGlyZWN0aXZlPjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZVxyXG4gICAgICAgIHRoaXMuY29udHJvbCA9IGZiLmNvbnRyb2woJycpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLmVuYWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHRvZG8g54i25a2Q57uE5Lu25oiW6ICF5qCR5Z6L57uT5p6E57uE5Lu25a2Y5Zyo57uE5Lu25b6q546v5a+85YWl55qE6Zeu6aKYXHJcbiAgICAgKiAxLiDkvb/nlKjkuK3pl7TmnI3liqHmnaXmj5DkvpvmlbDmja7nmoTlhbHkuqvvvIjmjqjojZDvvIkg5L2/55SoQHNlbGbms6jlhaXoo4XppbDlmahcclxuICAgICAqIDIuIOWIm+W7uuazqOWwhOWZqHRva2Vu5p2l5a6e546w54i257uE5Lu255qE5rOo5YWlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgdGVtcGxhdGVzKCk6IHsgW2tleTogc3RyaW5nXTogVGVtcGxhdGVSZWY8YW55PiB9IHtcclxuICAgICAgICBpZiAodGhpcy5pdGVtRGVmaW5pdGlvbnMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtVGVtcGxhdGVzOiB7IFtrZXk6IHN0cmluZ106IFRlbXBsYXRlUmVmPGFueT4gfSA9IHt9O1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRlZmluaXRpb24gb2YgdGhpcy5pdGVtRGVmaW5pdGlvbnMudG9BcnJheSgpKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtVGVtcGxhdGVzW2RlZmluaXRpb24udGVtcGxhdGVdID0gZGVmaW5pdGlvbi50ZW1wbGF0ZVJlZjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gaXRlbVRlbXBsYXRlcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4ge307XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjxkLWZvcm0taXRlbSBbZEhhc0ZlZWRiYWNrXT1cImZhbHNlXCI+XHJcbiAgICA8ZC1mb3JtLWxhYmVsXHJcbiAgICAgICAgKm5nSWY9XCJzaG93TGFiZWxcIlxyXG4gICAgICAgIFtoYXNIZWxwXT1cIiEhaGVscFRleHRcIlxyXG4gICAgICAgIFtoZWxwVGlwc109XCJoZWxwVGV4dFwiXHJcbiAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcclxuICAgID5cclxuICAgICAgICB7eyBsYWJlbCB9fVxyXG4gICAgPC9kLWZvcm0tbGFiZWw+XHJcbiAgICA8ZC1mb3JtLWNvbnRyb2wgc3R5bGU9XCJtYXJnaW4tbGVmdDogMFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2hvd0NvbnRlbnRcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0ZW1wbGF0ZTsgZWxzZSBpdGVtVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcclxuICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbDogY29udHJvbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb246IG9wdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVzW3RlbXBsYXRlIHx8ICcnXSB8fCBkZWZhdWx0SXRlbVRlbXBsYXRlXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0SXRlbVRlbXBsYXRlPiB0bXBsOnt7IG9wdGlvblsndmFsdWUnXSB9fSA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2l0ZW1UZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImRhdGFUeXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaERlZmF1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgZFRleHRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2RWYWxpZGF0ZVJ1bGVzXT1cInZhbGlkYXRlUnVsZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwib3B0aW9uWydwbGFjZWhvbGRlciddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEhb3B0aW9uWydkaXNhYmxlZCddIHx8IGRpc2FibGVBbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkVGV4dGFyZWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZFZhbGlkYXRlUnVsZXNdPVwidmFsaWRhdGVSdWxlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJvcHRpb25bJ3BsYWNlaG9sZGVyJ10gfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkLWlucHV0LW51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cIicxMjBweCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkVmFsaWRhdGVSdWxlc109XCJ2YWxpZGF0ZVJ1bGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2FsbG93RW1wdHldPVwib3B0aW9uWydhbGxvd0VtcHR5J11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGVjaW1hbExpbWl0XT1cIm9wdGlvblsnZGVjaW1hbExpbWl0J11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF4TGVuZ3RoXT1cIm9wdGlvblsnbWF4TGVuZ3RoJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwib3B0aW9uWydwbGFjZWhvbGRlciddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0ZXBdPVwib3B0aW9uWydzdGVwJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgID48L2QtaW5wdXQtbnVtYmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkLXRvZ2dsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2Jvb2xlYW4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZFZhbGlkYXRlUnVsZXNdPVwidmFsaWRhdGVSdWxlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvZC10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGQtcmFkaW8tcGx1cy1ncm91cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2VudW0nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29udHJvbF09XCJjb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwib3B0aW9uWydkYXRhU291cmNlJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8L2QtcmFkaW8tcGx1cy1ncm91cD5cclxuICAgICAgICAgICAgICAgICAgICA8ZC1zZWxlY3QtYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInaXRlbXMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2FsbG93Q2xlYXJdPVwib3B0aW9uWydhbGxvd0NsZWFyJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJvcHRpb25bJ2RhdGFTb3VyY2UnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5RXhwcl09XCJvcHRpb25bJ2Rpc3BsYXlFeHByJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwib3B0aW9uWydtdWx0aXBsZSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwib3B0aW9uWydwbGFjZWhvbGRlciddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlRXhwcl09XCJvcHRpb25bJ3ZhbHVlRXhwciddXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kLXNlbGVjdC1ib3g+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICA8L2QtZm9ybS1jb250cm9sPlxyXG48L2QtZm9ybS1pdGVtPlxyXG4iXX0=