UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

208 lines 29.1 kB
import { ButtonModule, IconModule, InputModule, SelectModule, } from '@alauda/ui'; import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, forwardRef } from '@angular/core'; import { FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, } from '@angular/forms'; import { PurePipe, TaintEffect, createNestedFormControl, } from '../../core/public-api'; import { EffectDirectiveModule } from '../../effect-directive/module'; import { TranslateModule } from '../../translate/public-api'; import { ErrorsMapperModule } from '../errors-mapper/public-api'; import { ValidatorsModule } from '../validators/public-api'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "../../translate/translate.pipe"; import * as i3 from "@angular/forms"; import * as i4 from "@alauda/ui"; import * as i5 from "../validators/function-validator.directive"; import * as i6 from "../validators/maxlength-minlength-validator.directive"; import * as i7 from "../errors-mapper/errors-mapper-component/component"; import * as i8 from "../../effect-directive/e2e-attribute-binding.directive"; import * as i9 from "../../effect-directive/validators.directive"; function TaintsEditorComponent_tr_15_acl_errors_mapper_4_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "acl-errors-mapper", 22); } if (rf & 2) { i0.ɵɵnextContext(); const key_r4 = i0.ɵɵreference(3); i0.ɵɵproperty("errors", key_r4.errors); } } function TaintsEditorComponent_tr_15_acl_errors_mapper_8_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "acl-errors-mapper", 22); } if (rf & 2) { i0.ɵɵnextContext(); const value_r5 = i0.ɵɵreference(7); i0.ɵɵproperty("errors", value_r5.errors); } } function TaintsEditorComponent_tr_15_aui_option_11_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "aui-option", 23); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { const effect_r6 = ctx.$implicit; i0.ɵɵproperty("value", effect_r6); i0.ɵɵadvance(); i0.ɵɵtextInterpolate1(" ", effect_r6, " "); } } function TaintsEditorComponent_tr_15_Template(rf, ctx) { if (rf & 1) { const _r1 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "tr")(1, "td")(2, "input", 14, 0); i0.ɵɵlistener("ngModelChange", function TaintsEditorComponent_tr_15_Template_input_ngModelChange_2_listener($event) { const index_r2 = i0.ɵɵrestoreView(_r1).index; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.editTaint(index_r2, "key", $event)); }); i0.ɵɵelementEnd(); i0.ɵɵtemplate(4, TaintsEditorComponent_tr_15_acl_errors_mapper_4_Template, 1, 1, "acl-errors-mapper", 15); i0.ɵɵelementEnd(); i0.ɵɵelementStart(5, "td")(6, "input", 16, 1); i0.ɵɵlistener("ngModelChange", function TaintsEditorComponent_tr_15_Template_input_ngModelChange_6_listener($event) { const index_r2 = i0.ɵɵrestoreView(_r1).index; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.editTaint(index_r2, "value", $event)); }); i0.ɵɵelementEnd(); i0.ɵɵtemplate(8, TaintsEditorComponent_tr_15_acl_errors_mapper_8_Template, 1, 1, "acl-errors-mapper", 15); i0.ɵɵelementEnd(); i0.ɵɵelementStart(9, "td")(10, "aui-select", 17); i0.ɵɵlistener("ngModelChange", function TaintsEditorComponent_tr_15_Template_aui_select_ngModelChange_10_listener($event) { const index_r2 = i0.ɵɵrestoreView(_r1).index; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.editTaint(index_r2, "effect", $event)); }); i0.ɵɵtemplate(11, TaintsEditorComponent_tr_15_aui_option_11_Template, 2, 2, "aui-option", 18); i0.ɵɵelementEnd()(); i0.ɵɵelementStart(12, "td", 19)(13, "button", 20); i0.ɵɵlistener("click", function TaintsEditorComponent_tr_15_Template_button_click_13_listener() { const index_r2 = i0.ɵɵrestoreView(_r1).index; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.removeTaint(index_r2)); }); i0.ɵɵelement(14, "aui-icon", 21); i0.ɵɵelementEnd()()(); } if (rf & 2) { const taint_r7 = ctx.$implicit; const key_r4 = i0.ɵɵreference(3); const value_r5 = i0.ɵɵreference(7); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵadvance(2); i0.ɵɵproperty("ngModel", taint_r7.key)("aclValidateFn", ctx_r2.keyPattern); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", ctx_r2.submitted || key_r4.dirty); i0.ɵɵadvance(2); i0.ɵɵproperty("ngModel", taint_r7.value); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", ctx_r2.submitted || value_r5.dirty); i0.ɵɵadvance(2); i0.ɵɵproperty("ngModel", taint_r7.effect); i0.ɵɵadvance(); i0.ɵɵproperty("ngForOf", ctx_r2.effects); i0.ɵɵadvance(2); i0.ɵɵproperty("square", true)("plain", true); } } function TaintsEditorComponent_tr_16_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "tr")(1, "td", 10)(2, "div", 24); i0.ɵɵtext(3); i0.ɵɵpipe(4, "translate"); i0.ɵɵelementEnd()()(); } if (rf & 2) { i0.ɵɵadvance(3); i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 1, "no_taint")); } } export class TaintsEditorComponent extends createNestedFormControl() { constructor() { super(...arguments); this.effects = Object.values(TaintEffect); } addTaint() { this.model = this.model ?? []; this.model.push({ key: '', value: '', effect: TaintEffect.NoSchedule }); } editTaint(index, key, value) { this.model[index][key] = value; this.emitModel(); } removeTaint(index) { this.model.splice(index, 1); this.emitModel(); } keyPattern(control) { if (!control.value) { return null; } const [name, prefix = ''] = control.value.split('/').reverse(); if (name.length > 63 || /^(([\dA-Za-z][\w.-]*)?[\dA-Za-z])$/.test(name) === false) { return { pattern: true }; } if (!!prefix && (prefix.length > 253 || /^[\da-z]([\da-z-]*[\da-z])?(\.[\da-z]([\da-z-]*[\da-z])?)*$/.test(prefix) === false)) { return { pattern: true }; } return null; } static { this.ɵfac = /*@__PURE__*/ (() => { let ɵTaintsEditorComponent_BaseFactory; return function TaintsEditorComponent_Factory(t) { returnTaintsEditorComponent_BaseFactory ||TaintsEditorComponent_BaseFactory = i0.ɵɵgetInheritedFactory(TaintsEditorComponent)))(t || TaintsEditorComponent); }; })(); } static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TaintsEditorComponent, selectors: [["acl-taints-editor"]], standalone: true, features: [i0.ɵɵProvidersFeature([ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TaintsEditorComponent), multi: true, }, { provide: NG_VALIDATORS, useExisting: forwardRef(() => TaintsEditorComponent), multi: true, }, ]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], decls: 25, vars: 18, consts: [["key", "ngModel"], ["value", "ngModel"], [1, "acl-array-form-table", "mp-sticky-table-header", "mp-sticky-table-actions"], ["required", "", "width", "40%"], ["width", "40%"], ["width", "20%"], [2, "min-width", "44px"], [4, "ngFor", "ngForOf"], [4, "ngIf"], [1, "acl-array-form-table--row-action"], ["colspan", "100"], [1, "acl-array-form-table__bottom-control-buttons"], ["aui-button", "primary", "size", "mini", "type", "button", 3, "click", "plain", "disabled"], ["icon", "plus_circle"], ["aui-input", "", "size", "small", "name", "key", "required", "", 3, "ngModelChange", "ngModel", "aclValidateFn"], [3, "errors", 4, "ngIf"], ["aui-input", "", "size", "small", "name", "value", "aclMaxlength", "63", "pattern", "^(([\\dA-Za-z][\\w.-]*)?[\\dA-Za-z])?$", 3, "ngModelChange", "ngModel"], ["size", "small", "name", "effect", 3, "ngModelChange", "ngModel"], [3, "value", 4, "ngFor", "ngForOf"], [1, "acl-array-form-table__action-col"], ["aui-button", "text", "size", "small", "type", "button", 3, "click", "square", "plain"], ["icon", "minus_circle"], [3, "errors"], [3, "value"], [1, "placeholder"]], template: function TaintsEditorComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "table", 2)(1, "thead")(2, "tr")(3, "th", 3)(4, "span"); i0.ɵɵtext(5); i0.ɵɵpipe(6, "translate"); i0.ɵɵelementEnd()(); i0.ɵɵelementStart(7, "th", 4); i0.ɵɵtext(8); i0.ɵɵpipe(9, "translate"); i0.ɵɵelementEnd(); i0.ɵɵelementStart(10, "th", 5); i0.ɵɵtext(11); i0.ɵɵpipe(12, "translate"); i0.ɵɵelementEnd(); i0.ɵɵelement(13, "th", 6); i0.ɵɵelementEnd()(); i0.ɵɵelementStart(14, "tbody"); i0.ɵɵtemplate(15, TaintsEditorComponent_tr_15_Template, 15, 9, "tr", 7)(16, TaintsEditorComponent_tr_16_Template, 5, 3, "tr", 8); i0.ɵɵelementStart(17, "tr", 9)(18, "td", 10)(19, "div", 11)(20, "button", 12); i0.ɵɵlistener("click", function TaintsEditorComponent_Template_button_click_20_listener() { return ctx.addTaint(); }); i0.ɵɵelement(21, "aui-icon", 13); i0.ɵɵelementStart(22, "span"); i0.ɵɵtext(23); i0.ɵɵpipe(24, "translate"); i0.ɵɵelementEnd()()()()()()(); } if (rf & 2) { i0.ɵɵclassProp("submitted", ctx.submitted); i0.ɵɵadvance(5); i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(6, 10, "key")); i0.ɵɵadvance(3); i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(9, 12, "value")); i0.ɵɵadvance(3); i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(12, 14, "type")); i0.ɵɵadvance(4); i0.ɵɵproperty("ngForOf", ctx.model); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", !(ctx.model == null ? null : ctx.model.length)); i0.ɵɵadvance(4); i0.ɵɵproperty("plain", true)("disabled", (ctx.model == null ? null : ctx.model.length) >= 50); i0.ɵɵadvance(3); i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(24, 16, "add"), " "); } }, dependencies: [CommonModule, i1.NgForOf, i1.NgIf, TranslateModule, i2.TranslatePipe, FormsModule, i3.DefaultValueAccessor, i3.NgControlStatus, i3.RequiredValidator, i3.PatternValidator, i3.NgModel, InputModule, i4.InputComponent, SelectModule, i4.SelectComponent, i4.OptionComponent, ValidatorsModule, i5.FunctionValidatorDirective, i6.MaxLengthValidatorDirective, ErrorsMapperModule, i7.ErrorsMapperComponent, IconModule, i4.IconComponent, ButtonModule, i4.ButtonComponent, EffectDirectiveModule, i8.E2eAttributeBindingDirective, i9.ValidatorsDirective], styles: ["[_nghost-%COMP%] {display:block;width:100%}[_nghost-%COMP%] .acl-array-form-table tbody td{vertical-align:top;line-height:var(--aui-inline-height-s)}[_nghost-%COMP%] .acl-array-form-table tbody tr .placeholder{text-align:center;color:rgb(var(--aui-color-help-text))}"], changeDetection: 0 }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TaintsEditorComponent, [{ type: Component, args: [{ standalone: true, selector: 'acl-taints-editor', changeDetection: ChangeDetectionStrategy.OnPush, imports: [ CommonModule, TranslateModule, FormsModule, InputModule, SelectModule, ValidatorsModule, ErrorsMapperModule, IconModule, ButtonModule, PurePipe, EffectDirectiveModule, ], providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TaintsEditorComponent), multi: true, }, { provide: NG_VALIDATORS, useExisting: forwardRef(() => TaintsEditorComponent), multi: true, }, ], template: "<table\n class=\"acl-array-form-table mp-sticky-table-header mp-sticky-table-actions\"\n [class.submitted]=\"submitted\"\n>\n <thead>\n <tr>\n <th\n required\n width=\"40%\"\n >\n <span>{{ 'key' | translate }}</span>\n </th>\n <th width=\"40%\">{{ 'value' | translate }}</th>\n <th width=\"20%\">{{ 'type' | translate }}</th>\n <th style=\"min-width: 44px\"></th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let taint of model; let index = index\">\n <td>\n <input\n aui-input\n size=\"small\"\n name=\"key\"\n #key=\"ngModel\"\n [ngModel]=\"taint.key\"\n (ngModelChange)=\"editTaint(index, 'key', $event)\"\n required\n [aclValidateFn]=\"keyPattern\"\n />\n <acl-errors-mapper\n *ngIf=\"submitted || key.dirty\"\n [errors]=\"key.errors\"\n ></acl-errors-mapper>\n </td>\n <td>\n <input\n aui-input\n size=\"small\"\n name=\"value\"\n #value=\"ngModel\"\n [ngModel]=\"taint.value\"\n (ngModelChange)=\"editTaint(index, 'value', $event)\"\n aclMaxlength=\"63\"\n pattern=\"^(([\\dA-Za-z][\\w.-]*)?[\\dA-Za-z])?$\"\n />\n <acl-errors-mapper\n *ngIf=\"submitted || value.dirty\"\n [errors]=\"value.errors\"\n ></acl-errors-mapper>\n </td>\n <td>\n <aui-select\n size=\"small\"\n name=\"effect\"\n [ngModel]=\"taint.effect\"\n (ngModelChange)=\"editTaint(index, 'effect', $event)\"\n >\n <aui-option\n *ngFor=\"let effect of effects\"\n [value]=\"effect\"\n >\n {{ effect }}\n </aui-option>\n </aui-select>\n </td>\n <td class=\"acl-array-form-table__action-col\">\n <button\n aui-button=\"text\"\n size=\"small\"\n type=\"button\"\n [square]=\"true\"\n [plain]=\"true\"\n (click)=\"removeTaint(index)\"\n >\n <aui-icon icon=\"minus_circle\"></aui-icon>\n </button>\n </td>\n </tr>\n <tr *ngIf=\"!model?.length\">\n <td colspan=\"100\">\n <div class=\"placeholder\">{{ 'no_taint' | translate }}</div>\n </td>\n </tr>\n <tr class=\"acl-array-form-table--row-action\">\n <td colspan=\"100\">\n <div class=\"acl-array-form-table__bottom-control-buttons\">\n <button\n aui-button=\"primary\"\n [plain]=\"true\"\n size=\"mini\"\n type=\"button\"\n (click)=\"addTaint()\"\n [disabled]=\"model?.length >= 50\"\n >\n <aui-icon icon=\"plus_circle\"></aui-icon>\n <span>\n {{ 'add' | translate }}\n </span>\n </button>\n </div>\n </td>\n </tr>\n </tbody>\n</table>\n", styles: [":host::ng-deep{display:block;width:100%}:host::ng-deep .acl-array-form-table tbody td{vertical-align:top;line-height:var(--aui-inline-height-s)}:host::ng-deep .acl-array-form-table tbody tr .placeholder{text-align:center;color:rgb(var(--aui-color-help-text))}\n"] }] }], null, null); })(); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TaintsEditorComponent, { className: "TaintsEditorComponent" }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2Zvcm0vdGFpbnRzLWVkaXRvci9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvZm9ybS90YWludHMtZWRpdG9yL3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksR0FDYixNQUFNLFlBQVksQ0FBQztBQUNwQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUVMLFdBQVcsRUFDWCxhQUFhLEVBQ2IsaUJBQWlCLEdBQ2xCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNMLFFBQVEsRUFDUixXQUFXLEVBQ1gsdUJBQXVCLEdBQ3hCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7SUNPcEQsd0NBR3FCOzs7O0lBRG5CLHNDQUFxQjs7O0lBY3ZCLHdDQUdxQjs7OztJQURuQix3Q0FBdUI7OztJQVV2QixzQ0FHQztJQUNDLFlBQ0Y7SUFBQSxpQkFBYTs7O0lBSFgsaUNBQWdCO0lBRWhCLGNBQ0Y7SUFERSwwQ0FDRjs7OztJQTNDRixBQURGLEFBREYsMEJBQW1ELFNBQzdDLG1CQVVBO0lBSEEsNk5BQWlC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QWdCLGlFQUNoQixrQkFBa0IsNEJBQ2xCLFVBQVUsb0JBQ1YsWUFBWSxzQkFFWixxQkFBcUI7O2lGQWVaLHFCQUFxQjtjQWhDakMsU0FBUzs2QkFDSSxJQUFJLFlBQ04sbUJBQW1CLG1CQUdaLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7b0JBQ1AsWUFBWTtvQkFDWixlQUFlO29CQUNmLFdBQVc7b0JBQ1gsV0FBVztvQkFDWCxZQUFZO29CQUNaLGdCQUFnQjtvQkFDaEIsa0JBQWtCO29CQUNsQixVQUFVO29CQUNWLFlBQVk7b0JBQ1osUUFBUTtvQkFDUixxQkFBcUI7aUJBQ3RCLGFBQ1U7b0JBQ1Q7d0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjt3QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUM7d0JBQ3BELEtBQUssRUFBRSxJQUFJO3FCQUNaO29CQUNEO3dCQUNFLE9BQU8sRUFBRSxhQUFhO3dCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzt3QkFDcEQsS0FBSyxFQUFFLElBQUk7cUJBQ1o7aUJBQ0Y7O2tGQUVVLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJ1dHRvbk1vZHVsZSxcbiAgSWNvbk1vZHVsZSxcbiAgSW5wdXRNb2R1bGUsXG4gIFNlbGVjdE1vZHVsZSxcbn0gZnJvbSAnQGFsYXVkYS91aSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBGb3Jtc01vZHVsZSxcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtcbiAgUHVyZVBpcGUsXG4gIFRhaW50RWZmZWN0LFxuICBjcmVhdGVOZXN0ZWRGb3JtQ29udHJvbCxcbn0gZnJvbSAnLi4vLi4vY29yZS9wdWJsaWMtYXBpJztcbmltcG9ydCB7IEVmZmVjdERpcmVjdGl2ZU1vZHVsZSB9IGZyb20gJy4uLy4uL2VmZmVjdC1kaXJlY3RpdmUvbW9kdWxlJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJy4uLy4uL3RyYW5zbGF0ZS9wdWJsaWMtYXBpJztcbmltcG9ydCB7IEVycm9yc01hcHBlck1vZHVsZSB9IGZyb20gJy4uL2Vycm9ycy1tYXBwZXIvcHVibGljLWFwaSc7XG5pbXBvcnQgeyBWYWxpZGF0b3JzTW9kdWxlIH0gZnJvbSAnLi4vdmFsaWRhdG9ycy9wdWJsaWMtYXBpJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnYWNsLXRhaW50cy1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vdGVtcGxhdGUuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0eWxlLnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIElucHV0TW9kdWxlLFxuICAgIFNlbGVjdE1vZHVsZSxcbiAgICBWYWxpZGF0b3JzTW9kdWxlLFxuICAgIEVycm9yc01hcHBlck1vZHVsZSxcbiAgICBJY29uTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBQdXJlUGlwZSxcbiAgICBFZmZlY3REaXJlY3RpdmVNb2R1bGUsXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGFpbnRzRWRpdG9yQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRhaW50c0VkaXRvckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBUYWludHNFZGl0b3JDb21wb25lbnQgZXh0ZW5kcyBjcmVhdGVOZXN0ZWRGb3JtQ29udHJvbDxUYWludFtdPigpIHtcbiAgZWZmZWN0cyA9IE9iamVjdC52YWx1ZXMoVGFpbnRFZmZlY3QpO1xuXG4gIGFkZFRhaW50KCkge1xuICAgIHRoaXMubW9kZWwgPSB0aGlzLm1vZGVsID8/IFtdO1xuICAgIHRoaXMubW9kZWwucHVzaCh7IGtleTogJycsIHZhbHVlOiAnJywgZWZmZWN0OiBUYWludEVmZmVjdC5Ob1NjaGVkdWxlIH0pO1xuICB9XG5cbiAgZWRpdFRhaW50KFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAga2V5OiBrZXlvZiBPbWl0PFRhaW50LCAnZWZmZWN0Jz4sXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgKTogdm9pZDtcblxuICBlZGl0VGFpbnQoaW5kZXg6IG51bWJlciwga2V5OiAnZWZmZWN0JywgdmFsdWU6IFRhaW50RWZmZWN0KTogdm9pZDtcbiAgZWRpdFRhaW50KGluZGV4OiBudW1iZXIsIGtleToga2V5b2YgVGFpbnQsIHZhbHVlOiBzdHJpbmcgfCBUYWludEVmZmVjdCkge1xuICAgIHRoaXMubW9kZWxbaW5kZXhdW2tleV0gPSB2YWx1ZSBhcyBhbnk7XG4gICAgdGhpcy5lbWl0TW9kZWwoKTtcbiAgfVxuXG4gIHJlbW92ZVRhaW50KGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLm1vZGVsLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5lbWl0TW9kZWwoKTtcbiAgfVxuXG4gIGtleVBhdHRlcm4oY29udHJvbDogQWJzdHJhY3RDb250cm9sPHN0cmluZz4pIHtcbiAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBbbmFtZSwgcHJlZml4ID0gJyddID0gY29udHJvbC52YWx1ZS5zcGxpdCgnLycpLnJldmVyc2UoKTtcbiAgICBpZiAoXG4gICAgICBuYW1lLmxlbmd0aCA+IDYzIHx8XG4gICAgICAvXigoW1xcZEEtWmEtel1bXFx3Li1dKik/W1xcZEEtWmEtel0pJC8udGVzdChuYW1lKSA9PT0gZmFsc2VcbiAgICApIHtcbiAgICAgIHJldHVybiB7IHBhdHRlcm46IHRydWUgfTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhIXByZWZpeCAmJlxuICAgICAgKHByZWZpeC5sZW5ndGggPiAyNTMgfHxcbiAgICAgICAgL15bXFxkYS16XShbXFxkYS16LV0qW1xcZGEtel0pPyhcXC5bXFxkYS16XShbXFxkYS16LV0qW1xcZGEtel0pPykqJC8udGVzdChcbiAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICkgPT09IGZhbHNlKVxuICAgICkge1xuICAgICAgcmV0dXJuIHsgcGF0dGVybjogdHJ1ZSB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmludGVyZmFjZSBUYWludCB7XG4gIGtleTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBlZmZlY3Q6IFRhaW50RWZmZWN0O1xufVxuIiwiPHRhYmxlXG4gIGNsYXNzPVwiYWNsLWFycmF5LWZvcm0tdGFibGUgbXAtc3RpY2t5LXRhYmxlLWhlYWRlciBtcC1zdGlja3ktdGFibGUtYWN0aW9uc1wiXG4gIFtjbGFzcy5zdWJtaXR0ZWRdPVwic3VibWl0dGVkXCJcbj5cbiAgPHRoZWFkPlxuICAgIDx0cj5cbiAgICAgIDx0aFxuICAgICAgICByZXF1aXJlZFxuICAgICAgICB3aWR0aD1cIjQwJVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuPnt7ICdrZXknIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgPC90aD5cbiAgICAgIDx0aCB3aWR0aD1cIjQwJVwiPnt7ICd2YWx1ZScgfCB0cmFuc2xhdGUgfX08L3RoPlxuICAgICAgPHRoIHdpZHRoPVwiMjAlXCI+e3sgJ3R5cGUnIHwgdHJhbnNsYXRlIH19PC90aD5cbiAgICAgIDx0aCBzdHlsZT1cIm1pbi13aWR0aDogNDRweFwiPjwvdGg+XG4gICAgPC90cj5cbiAgPC90aGVhZD5cbiAgPHRib2R5PlxuICAgIDx0ciAqbmdGb3I9XCJsZXQgdGFpbnQgb2YgbW9kZWw7IGxldCBpbmRleCA9IGluZGV4XCI+XG4gICAgICA8dGQ+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGF1aS1pbnB1dFxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgbmFtZT1cImtleVwiXG4gICAgICAgICAgI2tleT1cIm5nTW9kZWxcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cInRhaW50LmtleVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZWRpdFRhaW50KGluZGV4LCAna2V5JywgJGV2ZW50KVwiXG4gICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICBbYWNsVmFsaWRhdGVGbl09XCJrZXlQYXR0ZXJuXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGFjbC1lcnJvcnMtbWFwcGVyXG4gICAgICAgICAgKm5nSWY9XCJzdWJtaXR0ZWQgfHwga2V5LmRpcnR5XCJcbiAgICAgICAgICBbZXJyb3JzXT1cImtleS5lcnJvcnNcIlxuICAgICAgICA+PC9hY2wtZXJyb3JzLW1hcHBlcj5cbiAgICAgIDwvdGQ+XG4gICAgICA8dGQ+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGF1aS1pbnB1dFxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgbmFtZT1cInZhbHVlXCJcbiAgICAgICAgICAjdmFsdWU9XCJuZ01vZGVsXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJ0YWludC52YWx1ZVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZWRpdFRhaW50KGluZGV4LCAndmFsdWUnLCAkZXZlbnQpXCJcbiAgICAgICAgICBhY2xNYXhsZW5ndGg9XCI2M1wiXG4gICAgICAgICAgcGF0dGVybj1cIl4oKFtcXGRBLVphLXpdW1xcdy4tXSopP1tcXGRBLVphLXpdKT8kXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGFjbC1lcnJvcnMtbWFwcGVyXG4gICAgICAgICAgKm5nSWY9XCJzdWJtaXR0ZWQgfHwgdmFsdWUuZGlydHlcIlxuICAgICAgICAgIFtlcnJvcnNdPVwidmFsdWUuZXJyb3JzXCJcbiAgICAgICAgPjwvYWNsLWVycm9ycy1tYXBwZXI+XG4gICAgICA8L3RkPlxuICAgICAgPHRkPlxuICAgICAgICA8YXVpLXNlbGVjdFxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgbmFtZT1cImVmZmVjdFwiXG4gICAgICAgICAgW25nTW9kZWxdPVwidGFpbnQuZWZmZWN0XCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJlZGl0VGFpbnQoaW5kZXgsICdlZmZlY3QnLCAkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxhdWktb3B0aW9uXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZWZmZWN0IG9mIGVmZmVjdHNcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImVmZmVjdFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgZWZmZWN0IH19XG4gICAgICAgICAgPC9hdWktb3B0aW9uPlxuICAgICAgICA8L2F1aS1zZWxlY3Q+XG4gICAgICA8L3RkPlxuICAgICAgPHRkIGNsYXNzPVwiYWNsLWFycmF5LWZvcm0tdGFibGVfX2FjdGlvbi1jb2xcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGF1aS1idXR0b249XCJ0ZXh0XCJcbiAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtzcXVhcmVdPVwidHJ1ZVwiXG4gICAgICAgICAgW3BsYWluXT1cInRydWVcIlxuICAgICAgICAgIChjbGljayk9XCJyZW1vdmVUYWludChpbmRleClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGF1aS1pY29uIGljb249XCJtaW51c19jaXJjbGVcIj48L2F1aS1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgICA8dHIgKm5nSWY9XCIhbW9kZWw/Lmxlbmd0aFwiPlxuICAgICAgPHRkIGNvbHNwYW49XCIxMDBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBsYWNlaG9sZGVyXCI+e3sgJ25vX3RhaW50JyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICAgIDx0ciBjbGFzcz1cImFjbC1hcnJheS1mb3JtLXRhYmxlLS1yb3ctYWN0aW9uXCI+XG4gICAgICA8dGQgY29sc3Bhbj1cIjEwMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWNsLWFycmF5LWZvcm0tdGFibGVfX2JvdHRvbS1jb250cm9sLWJ1dHRvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBhdWktYnV0dG9uPVwicHJpbWFyeVwiXG4gICAgICAgICAgICBbcGxhaW5dPVwidHJ1ZVwiXG4gICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhZGRUYWludCgpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtb2RlbD8ubGVuZ3RoID49IDUwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YXVpLWljb24gaWNvbj1cInBsdXNfY2lyY2xlXCI+PC9hdWktaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICB7eyAnYWRkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC90Ym9keT5cbjwvdGFibGU+XG4iXX0=