UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

223 lines 30.4 kB
import { __decorate, __metadata } from "tslib"; import { Component, EventEmitter, Injector, Input, Output } from '@angular/core'; import { SmeSchemaProperty } from '../../../schema/schema-decorator'; import { SimplePropertySchemaFieldLoaderComponent } from '../../../schema/schema-field-host.component'; import { SchemaPrimitiveType } from '../../../schema/schema-models'; import { SmeInternalFormFieldComponent } from '../form-field.component'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; import * as i2 from "../form-field-accessor.directive"; import * as i3 from "../form-field-validator.directive"; import * as i4 from "../form-field-async-validator.directive"; import * as i5 from "@angular/common"; import * as i6 from "../../../../directives/disabled/disabled.directive"; import * as i7 from "../../validation-alert/validation-alert.component"; import * as i8 from "../../form-field-layout/form-field-layout.component"; const _c0 = ["type", "text"]; function TextFormFieldComponent_div_1_button_2_Template(rf, ctx) { if (rf & 1) { const _r6 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "button", 8); i0.ɵɵlistener("click", function TextFormFieldComponent_div_1_button_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r5 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r5.onFieldAction()); }); i0.ɵɵelement(1, "span"); i0.ɵɵelementStart(2, "span"); i0.ɵɵtext(3); i0.ɵɵelementEnd()(); } if (rf & 2) { const ctx_r4 = i0.ɵɵnextContext(2); i0.ɵɵproperty("smeDisabled", ctx_r4.loadingOrDisabled || ctx_r4.pending || !ctx_r4.isValid()); i0.ɵɵattribute("aria-label", ctx_r4.fieldActionAriaLabel || ctx_r4.fieldActionText); i0.ɵɵadvance(1); i0.ɵɵclassMapInterpolate1("sme-icon ", ctx_r4.fieldActionIconClass, ""); i0.ɵɵclassProp("sme-margin-right-xs", !!ctx_r4.fieldActionText); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r4.fieldActionText); } } function TextFormFieldComponent_div_1_Template(rf, ctx) { if (rf & 1) { const _r8 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div", 5)(1, "input", 6); i0.ɵɵlistener("ngModelChange", function TextFormFieldComponent_div_1_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r7 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r7.value = $event); })("keydown.enter", function TextFormFieldComponent_div_1_Template_input_keydown_enter_1_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r9 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r9.onEnterKey($event)); }); i0.ɵɵelementEnd(); i0.ɵɵtemplate(2, TextFormFieldComponent_div_1_button_2_Template, 4, 8, "button", 7); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵclassProp("sme-actionable-textbox", ctx_r0.showFieldAction)("sme-disabled", ctx_r0.loadingOrDisabled); i0.ɵɵadvance(1); i0.ɵɵproperty("required", ctx_r0.required)("disabled", ctx_r0.loadingOrDisabled)("ngModel", ctx_r0.value)("placeholder", ctx_r0.placeholder); i0.ɵɵattribute("aria-label", ctx_r0.label); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r0.showFieldAction); } } function TextFormFieldComponent_textarea_2_Template(rf, ctx) { if (rf & 1) { const _r11 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "textarea", 9); i0.ɵɵlistener("ngModelChange", function TextFormFieldComponent_textarea_2_Template_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r10 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r10.value = $event); }); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵproperty("required", ctx_r1.required)("disabled", ctx_r1.loadingOrDisabled)("ngModel", ctx_r1.value)("rows", ctx_r1.rows)("cols", ctx_r1.columns)("placeholder", ctx_r1.placeholder); i0.ɵɵattribute("aria-label", ctx_r1.label); } } function TextFormFieldComponent_span_3_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); i0.ɵɵtextInterpolate(ctx_r2.value); } } function TextFormFieldComponent_sme_validation_alert_4_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "sme-validation-alert", 10); } if (rf & 2) { const ctx_r3 = i0.ɵɵnextContext(); i0.ɵɵproperty("alert", ctx_r3.alert); } } /* eslint-disable max-len */ /* eslint-enable max-len */ export class TextFormFieldLoaderComponent extends SimplePropertySchemaFieldLoaderComponent { } /** @nocollapse */ TextFormFieldLoaderComponent.ɵfac = /** @pureOrBreakMyCode */ function () { let ɵTextFormFieldLoaderComponent_BaseFactory; return function TextFormFieldLoaderComponent_Factory(t) { return (ɵTextFormFieldLoaderComponent_BaseFactory || (ɵTextFormFieldLoaderComponent_BaseFactory = i0.ɵɵgetInheritedFactory(TextFormFieldLoaderComponent)))(t || TextFormFieldLoaderComponent); }; }(); /** @nocollapse */ TextFormFieldLoaderComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: TextFormFieldLoaderComponent, selectors: [["ng-component"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 12, consts: [["type", "text", 3, "ngModel", "name", "label", "multiline", "required", "description", "readonly", "disabled", "placeholder", "pendingMessage", "customAsyncValidateDisabled", "customAsyncValidateDebounceTime", "ngModelChange", "customValidate", "customAsyncValidate"], ["field", ""]], template: function TextFormFieldLoaderComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "sme-form-field", 0, 1); i0.ɵɵlistener("ngModelChange", function TextFormFieldLoaderComponent_Template_sme_form_field_ngModelChange_0_listener($event) { return ctx.data = $event; })("customValidate", function TextFormFieldLoaderComponent_Template_sme_form_field_customValidate_0_listener($event) { return ctx.resolveFunction(ctx.propertySchema.customValidation)($event); })("customAsyncValidate", function TextFormFieldLoaderComponent_Template_sme_form_field_customAsyncValidate_0_listener($event) { return ctx.propertySchema.customAsyncValidation && ctx.resolveFunction(ctx.propertySchema.customAsyncValidation.handler)($event); }); i0.ɵɵelementEnd(); } if (rf & 2) { i0.ɵɵproperty("ngModel", ctx.data)("name", ctx.propertySchema.name)("label", ctx.localize(ctx.propertySchema.label))("multiline", ctx.propertySchema.options && ctx.propertySchema.options.multipleline)("required", ctx.propertySchema.required)("description", ctx.localize(ctx.propertySchema.description))("readonly", !!ctx.evalExpression(ctx.propertySchema.readonlyCondition))("disabled", !!(ctx.propertySchema.disabledCondition && ctx.evalExpression(ctx.propertySchema.disabledCondition)))("placeholder", ctx.localize(ctx.propertySchema.options && ctx.propertySchema.options.placeholder))("pendingMessage", ctx.propertySchema.customAsyncValidation && ctx.localize(ctx.propertySchema.customAsyncValidation.pendingMessage))("customAsyncValidateDisabled", ctx.shouldCustomAsyncValidationBeDisabled())("customAsyncValidateDebounceTime", ctx.propertySchema.customAsyncValidation && +ctx.propertySchema.customAsyncValidation.handler); } }, dependencies: function () { return [i1.NgControlStatus, i1.RequiredValidator, i1.NgModel, TextFormFieldComponent, i2.FormFieldAccessorDirective, i3.FormFieldValidatorDirective, i4.FormFieldAsyncValidatorDirective]; }, encapsulation: 2 }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TextFormFieldLoaderComponent, [{ type: Component, args: [{ template: ` <sme-form-field #field type="text" [(ngModel)]="data" [name]="propertySchema.name" [label]="localize(propertySchema.label)" [multiline]="propertySchema.options && propertySchema.options.multipleline" [required]="propertySchema.required" [description]="localize(propertySchema.description)" [readonly]="!!evalExpression(propertySchema.readonlyCondition)" [disabled]="!!(propertySchema.disabledCondition && evalExpression(propertySchema.disabledCondition))" [placeholder]="localize(propertySchema.options && propertySchema.options.placeholder)" (customValidate)="resolveFunction(propertySchema.customValidation)($event)" (customAsyncValidate)="propertySchema.customAsyncValidation && resolveFunction(propertySchema.customAsyncValidation.handler)($event)" [pendingMessage]="propertySchema.customAsyncValidation && localize(propertySchema.customAsyncValidation.pendingMessage)" [customAsyncValidateDisabled]="shouldCustomAsyncValidationBeDisabled()" [customAsyncValidateDebounceTime]="propertySchema.customAsyncValidation && +propertySchema.customAsyncValidation.handler" ></sme-form-field> ` }] }], null, null); })(); /** * Accessible text field implementation */ let TextFormFieldComponent = class TextFormFieldComponent extends SmeInternalFormFieldComponent { /** * Initializes a new instance of the TextFormFieldComponent */ constructor(injector) { super(injector); /** * The output for when the field action is activated */ this.fieldAction = new EventEmitter(); // set initial values for field this.multiline = false; this.columns = 40; this.rows = 5; this.fieldActionIconClass = 'sme-icon-add'; } /** * The source name to use for logging */ get logSourceName() { return 'TextFormFieldComponent'; } /** * Executes the field action */ onFieldAction() { this.fieldAction.emit(this.value); } /** * Executes the field action */ onEnterKey(event) { if (this.showFieldAction) { this.onFieldAction(); event.stopPropagation(); event.preventDefault(); } } /** * Creates the idBag used by this component to store unique element ids. * id values will be assigned be the @see BaseComponent super class. */ createIdBag() { return { detailsSpan: '' }; } }; /** @nocollapse */ TextFormFieldComponent.ɵfac = function TextFormFieldComponent_Factory(t) { return new (t || TextFormFieldComponent)(i0.ɵɵdirectiveInject(i0.Injector)); }; /** @nocollapse */ TextFormFieldComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: TextFormFieldComponent, selectors: [["sme-form-field", "type", "text"]], inputs: { multiline: "multiline", rows: "rows", columns: "columns", showFieldAction: "showFieldAction", fieldActionText: "fieldActionText", fieldActionIconClass: "fieldActionIconClass", fieldActionAriaLabel: "fieldActionAriaLabel" }, outputs: { fieldAction: "fieldAction" }, features: [i0.ɵɵInheritDefinitionFeature], attrs: _c0, decls: 5, vars: 5, consts: [[3, "formField"], ["class", "sme-arrange-stack-h sme-form-field-editor", 3, "sme-actionable-textbox", "sme-disabled", 4, "ngIf"], ["class", "sme-form-field-editor", 3, "required", "disabled", "ngModel", "rows", "cols", "placeholder", "ngModelChange", 4, "ngIf"], [4, "ngIf"], [3, "alert", 4, "ngIf"], [1, "sme-arrange-stack-h", "sme-form-field-editor"], ["type", "text", "spellcheck", "false", 1, "sme-position-flex-auto", 3, "required", "disabled", "ngModel", "placeholder", "ngModelChange", "keydown.enter"], ["type", "button", "class", "sme-button-primary sme-position-flex-none sme-button-auto-width sme-form-field-height", 3, "smeDisabled", "click", 4, "ngIf"], ["type", "button", 1, "sme-button-primary", "sme-position-flex-none", "sme-button-auto-width", "sme-form-field-height", 3, "smeDisabled", "click"], [1, "sme-form-field-editor", 3, "required", "disabled", "ngModel", "rows", "cols", "placeholder", "ngModelChange"], [3, "alert"]], template: function TextFormFieldComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "sme-form-field-layout", 0); i0.ɵɵtemplate(1, TextFormFieldComponent_div_1_Template, 3, 10, "div", 1); i0.ɵɵtemplate(2, TextFormFieldComponent_textarea_2_Template, 1, 7, "textarea", 2); i0.ɵɵtemplate(3, TextFormFieldComponent_span_3_Template, 2, 1, "span", 3); i0.ɵɵtemplate(4, TextFormFieldComponent_sme_validation_alert_4_Template, 1, 1, "sme-validation-alert", 4); i0.ɵɵelementEnd(); } if (rf & 2) { i0.ɵɵproperty("formField", ctx); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", !ctx.readonly && !ctx.multiline); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", !ctx.readonly && ctx.multiline); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", !ctx.compact && ctx.readonly); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", !ctx.compact); } }, dependencies: [i5.NgIf, i1.DefaultValueAccessor, i1.NgControlStatus, i1.RequiredValidator, i1.NgModel, i6.DisabledDirective, i7.ValidationAlertComponent, i8.FormFieldLayoutComponent], encapsulation: 2 }); TextFormFieldComponent = __decorate([ SmeSchemaProperty({ type: SchemaPrimitiveType.String, format: 'textbox', isDefaultFormat: true, description: 'A single line text box binding to string data.', loaderComponent: TextFormFieldLoaderComponent, optionProperties: [ { type: SchemaPrimitiveType.Boolean, format: 'checkbox', name: 'multipleline', label: 'resources:strings:MsftSmeShell.Angular.SchemaForm.Editor.PropertyForm.MultipleLine.Title' }, { type: SchemaPrimitiveType.String, format: 'resource-string-picker', name: 'placeholder', defaultValue: '', label: 'actual_string:Placeholder' } ] }), __metadata("design:paramtypes", [Injector]) ], TextFormFieldComponent); export { TextFormFieldComponent }; (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TextFormFieldComponent, [{ type: Component, args: [{ selector: 'sme-form-field[type="text"]', template: "<sme-form-field-layout [formField]=\"this\">\r\n <!-- Single Line -->\r\n <div class=\"sme-arrange-stack-h sme-form-field-editor\" [class.sme-actionable-textbox]=\"showFieldAction\"\r\n *ngIf=\"!readonly && !multiline\" [class.sme-disabled]=\"loadingOrDisabled\">\r\n <input class=\" sme-position-flex-auto\" type=\"text\" [attr.aria-label]=\"label\"\r\n [required]=\"required\" [disabled]=\"loadingOrDisabled\"\r\n [(ngModel)]=\"value\" [placeholder]=\"placeholder\" spellcheck=\"false\" (keydown.enter)=\"onEnterKey($event)\">\r\n\r\n <button *ngIf=\"showFieldAction\" type=\"button\" [attr.aria-label]=\"fieldActionAriaLabel || fieldActionText\"\r\n class=\"sme-button-primary sme-position-flex-none sme-button-auto-width sme-form-field-height\"\r\n (click)=\"onFieldAction()\" [smeDisabled]=\"loadingOrDisabled || pending || !isValid()\">\r\n <span class=\"sme-icon {{fieldActionIconClass}}\" [class.sme-margin-right-xs]=\"!!fieldActionText\"></span>\r\n <span>{{ fieldActionText }}</span>\r\n </button>\r\n </div>\r\n <!-- Multiple Line -->\r\n <textarea *ngIf=\"!readonly && multiline\" class=\"sme-form-field-editor\" [attr.aria-label]=\"label\"\r\n [required]=\"required\" [disabled]=\"loadingOrDisabled\"\r\n [(ngModel)]=\"value\" [rows]=\"rows\" [cols]=\"columns\" [placeholder]=\"placeholder\"></textarea>\r\n <span *ngIf=\"!compact && readonly\">{{ value }}</span>\r\n <sme-validation-alert *ngIf=\"!compact\" [alert]=\"alert\"></sme-validation-alert>\r\n</sme-form-field-layout>\r\n" }] }], function () { return [{ type: i0.Injector }]; }, { multiline: [{ type: Input }], rows: [{ type: Input }], columns: [{ type: Input }], showFieldAction: [{ type: Input }], fieldActionText: [{ type: Input }], fieldActionIconClass: [{ type: Input }], fieldActionAriaLabel: [{ type: Input }], fieldAction: [{ type: Output }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1mb3JtLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2Zvcm0vZm9ybS1maWVsZC90ZXh0L3RleHQtZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvdGV4dC90ZXh0LWZvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7O0lDSXBFLGlDQUU2RjtJQUFyRiw2S0FBUyxlQUFBLHNCQUFlLENBQUEsSUFBQztJQUMvQix1QkFBdUc7SUFDdkcsNEJBQU07SUFBQSxZQUFxQjtJQUFBLGlCQUFPLEVBQUE7OztJQUZGLDZGQUEwRDtJQUY5QyxtRkFBMkQ7SUFHakcsZUFBeUM7SUFBekMsdUVBQXlDO0lBQUMsK0RBQStDO0lBQ3pGLGVBQXFCO0lBQXJCLDRDQUFxQjs7OztJQVYvQiw4QkFDOEUsZUFBQTtJQUdyRSxpT0FBbUIsMktBQWlFLGVBQUEseUJBQWtCLENBQUEsSUFBbkY7SUFGMUIsaUJBRStHO0lBRS9HLG1GQUtTO0lBQ1gsaUJBQU07OztJQVppRCxnRUFBZ0QsMENBQUE7SUFHN0YsZUFB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VTtnQkFDbEIsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLEtBQUssRUFBRSwwRkFBMEY7YUFDcEc7WUFDRDtnQkFDSSxJQUFJLEVBQUUsbUJBQW1CLENBQUMsTUFBTTtnQkFDaEMsTUFBTSxFQUFFLHdCQUF3QjtnQkFDaEMsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLFlBQVksRUFBRSxFQUFFO2dCQUNoQixLQUFLLEVBQUUsMkJBQTJCO2FBQ3JDO1NBQ0o7S0FDSixDQUFDO3FDQW9FZ0IsUUFBUTtHQS9EYixzQkFBc0IsQ0FvR2xDO1NBcEdZLHNCQUFzQjt1RkFBdEIsc0JBQXNCO2NBSmxDLFNBQVM7MkJBQ0ksNkJBQTZCOzJEQWdCaEMsU0FBUztrQkFEZixLQUFLO1lBUUMsSUFBSTtrQkFEVixLQUFLO1lBUUMsT0FBTztrQkFEYixLQUFLO1lBT0MsZUFBZTtrQkFEckIsS0FBSztZQU9DLGVBQWU7a0JBRHJCLEtBQUs7WUFPQyxvQkFBb0I7a0JBRDFCLEtBQUs7WUFPQyxvQkFBb0I7a0JBRDFCLEtBQUs7WUFPQyxXQUFXO2tCQURqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU21lU2NoZW1hUHJvcGVydHkgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLWRlY29yYXRvcic7XHJcbmltcG9ydCB7IFNpbXBsZVByb3BlcnR5U2NoZW1hRmllbGRMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLWZpZWxkLWhvc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2NoZW1hUHJpbWl0aXZlVHlwZSB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtbW9kZWxzJztcclxuaW1wb3J0IHsgU21lSW50ZXJuYWxGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgIDxzbWUtZm9ybS1maWVsZCAjZmllbGQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cImRhdGFcIiBbbmFtZV09XCJwcm9wZXJ0eVNjaGVtYS5uYW1lXCIgW2xhYmVsXT1cImxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmxhYmVsKVwiXHJcbiAgICAgICAgW211bHRpbGluZV09XCJwcm9wZXJ0eVNjaGVtYS5vcHRpb25zICYmIHByb3BlcnR5U2NoZW1hLm9wdGlvbnMubXVsdGlwbGVsaW5lXCJcclxuICAgICAgICBbcmVxdWlyZWRdPVwicHJvcGVydHlTY2hlbWEucmVxdWlyZWRcIiBbZGVzY3JpcHRpb25dPVwibG9jYWxpemUocHJvcGVydHlTY2hlbWEuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICBbcmVhZG9ubHldPVwiISFldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5yZWFkb25seUNvbmRpdGlvbilcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhIShwcm9wZXJ0eVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbiAmJiBldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbikpXCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwibG9jYWxpemUocHJvcGVydHlTY2hlbWEub3B0aW9ucyAmJiBwcm9wZXJ0eVNjaGVtYS5vcHRpb25zLnBsYWNlaG9sZGVyKVwiXHJcbiAgICAgICAgKGN1c3RvbVZhbGlkYXRlKT1cInJlc29sdmVGdW5jdGlvbihwcm9wZXJ0eVNjaGVtYS5jdXN0b21WYWxpZGF0aW9uKSgkZXZlbnQpXCJcclxuICAgICAgICAoY3VzdG9tQXN5bmNWYWxpZGF0ZSk9XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgcmVzb2x2ZUZ1bmN0aW9uKHByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbi5oYW5kbGVyKSgkZXZlbnQpXCJcclxuICAgICAgICBbcGVuZGluZ01lc3NhZ2VdPVwicHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uICYmIGxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbi5wZW5kaW5nTWVzc2FnZSlcIlxyXG4gICAgICAgIFtjdXN0b21Bc3luY1ZhbGlkYXRlRGlzYWJsZWRdPVwic2hvdWxkQ3VzdG9tQXN5bmNWYWxpZGF0aW9uQmVEaXNhYmxlZCgpXCJcclxuICAgICAgICBbY3VzdG9tQXN5bmNWYWxpZGF0ZURlYm91bmNlVGltZV09XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgK3Byb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbi5oYW5kbGVyXCJcclxuICAgICAgICA+PC9zbWUtZm9ybS1maWVsZD5cclxuICAgIGBcclxufSlcclxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuICovXHJcbmV4cG9ydCBjbGFzcyBUZXh0Rm9ybUZpZWxkTG9hZGVyQ29tcG9uZW50IGV4dGVuZHMgU2ltcGxlUHJvcGVydHlTY2hlbWFGaWVsZExvYWRlckNvbXBvbmVudCB7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBY2Nlc3NpYmxlIHRleHQgZmllbGQgaW1wbGVtZW50YXRpb25cclxuICovXHJcbkBTbWVTY2hlbWFQcm9wZXJ0eSh7XHJcbiAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgIGZvcm1hdDogJ3RleHRib3gnLFxyXG4gICAgaXNEZWZhdWx0Rm9ybWF0OiB0cnVlLFxyXG4gICAgZGVzY3JpcHRpb246ICdBIHNpbmdsZSBsaW5lIHRleHQgYm94IGJpbmRpbmcgdG8gc3RyaW5nIGRhdGEuJyxcclxuICAgIGxvYWRlckNvbXBvbmVudDogVGV4dEZvcm1GaWVsZExvYWRlckNvbXBvbmVudCxcclxuICAgIG9wdGlvblByb3BlcnRpZXM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuQm9vbGVhbixcclxuICAgICAgICAgICAgZm9ybWF0OiAnY2hlY2tib3gnLFxyXG4gICAgICAgICAgICBuYW1lOiAnbXVsdGlwbGVsaW5lJyxcclxuICAgICAgICAgICAgbGFiZWw6ICdyZXNvdXJjZXM6c3RyaW5nczpNc2Z0U21lU2hlbGwuQW5ndWxhci5TY2hlbWFGb3JtLkVkaXRvci5Qcm9wZXJ0eUZvcm0uTXVsdGlwbGVMaW5lLlRpdGxlJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgZm9ybWF0OiAncmVzb3VyY2Utc3RyaW5nLXBpY2tlcicsXHJcbiAgICAgICAgICAgIG5hbWU6ICdwbGFjZWhvbGRlcicsXHJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJycsXHJcbiAgICAgICAgICAgIGxhYmVsOiAnYWN0dWFsX3N0cmluZzpQbGFjZWhvbGRlcidcclxuICAgICAgICB9XHJcbiAgICBdXHJcbn0pXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtZm9ybS1maWVsZFt0eXBlPVwidGV4dFwiXScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGV4dEZvcm1GaWVsZENvbXBvbmVudCBleHRlbmRzIFNtZUludGVybmFsRm9ybUZpZWxkQ29tcG9uZW50PGFueT4gaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNvdXJjZSBuYW1lIHRvIHVzZSBmb3IgbG9nZ2luZ1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGxvZ1NvdXJjZU5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuICdUZXh0Rm9ybUZpZWxkQ29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGF0IG11bHRpcGxlIGxpbmVzIHNob3VsZCBiZSBhY2NlcHRlZFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG11bHRpbGluZTogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGUgbnVtYmVyIG9mIHZpc2libGUgcm93cyBmb3IgbXVsdGlsaW5lIHRleHQgZmllbGRzXHJcbiAgICAgKiBOb3QgYXBwbGljYWJsZSB0byBzaW5nbGUgbGluZSB0ZXh0XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgcm93czogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgdmlzaWJsZSBjb2x1bW5zIGZvciBtdWx0aWxpbmUgdGV4dCBmaWVsZHNcclxuICAgICAqIE5vdCBhcHBsaWNhYmxlIHRvIHNpbmdsZSBsaW5lIHRleHRcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjb2x1bW5zOiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZmllbGQgYWN0aW9uIHNob3VsZCBiZSBzaG93blxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3dGaWVsZEFjdGlvbjogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0ZXh0IGZvciB0aGUgZmllbGQgYWN0aW9uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZmllbGRBY3Rpb25UZXh0OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaWNvbiBjbGFzcyBmb3IgdGhlIGZpZWxkIGFjdGlvblxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGZpZWxkQWN0aW9uSWNvbkNsYXNzOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYXJpYSBsYWJlbCBmb3IgdGhlIGFjdGlvbiBidXR0b25cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBmaWVsZEFjdGlvbkFyaWFMYWJlbD86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBvdXRwdXQgZm9yIHdoZW4gdGhlIGZpZWxkIGFjdGlvbiBpcyBhY3RpdmF0ZWRcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgZmllbGRBY3Rpb246IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgVGV4dEZvcm1GaWVsZENvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3JcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgICAgICAvLyBzZXQgaW5pdGlhbCB2YWx1ZXMgZm9yIGZpZWxkXHJcbiAgICAgICAgdGhpcy5tdWx0aWxpbmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvbHVtbnMgPSA0MDtcclxuICAgICAgICB0aGlzLnJvd3MgPSA1O1xyXG4gICAgICAgIHRoaXMuZmllbGRBY3Rpb25JY29uQ2xhc3MgPSAnc21lLWljb24tYWRkJztcclxuXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEV4ZWN1dGVzIHRoZSBmaWVsZCBhY3Rpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uRmllbGRBY3Rpb24oKSB7XHJcbiAgICAgICAgdGhpcy5maWVsZEFjdGlvbi5lbWl0KHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXhlY3V0ZXMgdGhlIGZpZWxkIGFjdGlvblxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25FbnRlcktleShldmVudDogRXZlbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5zaG93RmllbGRBY3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5vbkZpZWxkQWN0aW9uKCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIGlkQmFnIHVzZWQgYnkgdGhpcyBjb21wb25lbnQgdG8gc3RvcmUgdW5pcXVlIGVsZW1lbnQgaWRzLlxyXG4gICAgICogaWQgdmFsdWVzIHdpbGwgYmUgYXNzaWduZWQgYmUgdGhlIEBzZWUgQmFzZUNvbXBvbmVudCBzdXBlciBjbGFzcy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUlkQmFnKCk6IE1zZnRTbWUuU3RyaW5nTWFwPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRldGFpbHNTcGFuOiAnJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuIiwiPHNtZS1mb3JtLWZpZWxkLWxheW91dCBbZm9ybUZpZWxkXT1cInRoaXNcIj5cclxuICA8IS0tIFNpbmdsZSBMaW5lIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJzbWUtYXJyYW5nZS1zdGFjay1oIHNtZS1mb3JtLWZpZWxkLWVkaXRvclwiIFtjbGFzcy5zbWUtYWN0aW9uYWJsZS10ZXh0Ym94XT1cInNob3dGaWVsZEFjdGlvblwiXHJcbiAgICAgICAqbmdJZj1cIiFyZWFkb25seSAmJiAhbXVsdGlsaW5lXCIgW2NsYXNzLnNtZS1kaXNhYmxlZF09XCJsb2FkaW5nT3JEaXNhYmxlZFwiPlxyXG4gICAgPGlucHV0IGNsYXNzPVwiIHNtZS1wb3NpdGlvbi1mbGV4LWF1dG9cIiB0eXBlPVwidGV4dFwiIFthdHRyLmFyaWEtbGFiZWxdPVwibGFiZWxcIlxyXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIiBbZGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWRcIlxyXG4gICAgICAgICAgIFsobmdNb2RlbCldPVwidmFsdWVcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiAoa2V5ZG93bi5lbnRlcik9XCJvbkVudGVyS2V5KCRldmVudClcIj5cclxuXHJcbiAgICA8YnV0dG9uICpuZ0lmPVwic2hvd0ZpZWxkQWN0aW9uXCIgdHlwZT1cImJ1dHRvblwiIFthdHRyLmFyaWEtbGFiZWxdPVwiZmllbGRBY3Rpb25BcmlhTGFiZWwgfHwgZmllbGRBY3Rpb25UZXh0XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzbWUtYnV0dG9uLXByaW1hcnkgc21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtYnV0dG9uLWF1dG8td2lkdGggc21lLWZvcm0tZmllbGQtaGVpZ2h0XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRmllbGRBY3Rpb24oKVwiIFtzbWVEaXNhYmxlZF09XCJsb2FkaW5nT3JEaXNhYmxlZCB8fCBwZW5kaW5nIHx8ICFpc1ZhbGlkKClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvbiB7e2ZpZWxkQWN0aW9uSWNvbkNsYXNzfX1cIiBbY2xhc3Muc21lLW1hcmdpbi1yaWdodC14c109XCIhIWZpZWxkQWN0aW9uVGV4dFwiPjwvc3Bhbj5cclxuICAgICAgPHNwYW4+e3sgZmllbGRBY3Rpb25UZXh0IH19PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLSBNdWx0aXBsZSBMaW5lIC0tPlxyXG4gIDx0ZXh0YXJlYSAqbmdJZj1cIiFyZWFkb25seSAmJiBtdWx0aWxpbmVcIiBjbGFzcz1cInNtZS1mb3JtLWZpZWxkLWVkaXRvclwiIFthdHRyLmFyaWEtbGFiZWxdPVwibGFiZWxcIlxyXG4gICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCIgW2Rpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIFtyb3dzXT1cInJvd3NcIiBbY29sc109XCJjb2x1bW5zXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCI+PC90ZXh0YXJlYT5cclxuICA8c3BhbiAqbmdJZj1cIiFjb21wYWN0ICYmIHJlYWRvbmx5XCI+e3sgdmFsdWUgfX08L3NwYW4+XHJcbiAgPHNtZS12YWxpZGF0aW9uLWFsZXJ0ICpuZ0lmPVwiIWNvbXBhY3RcIiBbYWxlcnRdPVwiYWxlcnRcIj48L3NtZS12YWxpZGF0aW9uLWFsZXJ0PlxyXG48L3NtZS1mb3JtLWZpZWxkLWxheW91dD5cclxuIl19