@eqproject/eqp-dynamic-module 2.10.34 → 2.10.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +1 -1
- package/esm2020/lib/components/private/action-button-creator/action-button-creator.component.mjs +11 -4
- package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +3 -3
- package/esm2020/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.mjs +1 -1
- package/esm2020/lib/components/private/field-templates/action-button-field-template/action-button-field-template.component.mjs +36 -15
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +48 -20
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +48 -20
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/private/action-button-creator/action-button-creator.component.d.ts +2 -1
- package/lib/components/private/field-templates/action-button-field-template/action-button-field-template.component.d.ts +6 -1
- package/package.json +1 -1
package/esm2020/lib/components/private/action-button-creator/action-button-creator.component.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Component, Input, EventEmitter, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import { ActionButton, ActionFlagEnum, TriggerPropertyTypeEnum } from '../../../models/trigger.model';
|
|
2
|
+
import { ActionButton, ActionFlagEnum, TriggerProperty, TriggerPropertyTypeEnum } from '../../../models/trigger.model';
|
|
3
3
|
import { ParamTypeEnum } from '../../../models/endPointConfiguration.model';
|
|
4
4
|
import { FieldTypeEnum } from '../../../models/baseField.model';
|
|
5
5
|
import { GlobalService } from '../../../services/global.service';
|
|
@@ -23,6 +23,7 @@ export class ActionButtonCreatorComponent {
|
|
|
23
23
|
this.actionButtonField = null;
|
|
24
24
|
this.formulas = null;
|
|
25
25
|
this.InField = false;
|
|
26
|
+
this.formulaObject = {};
|
|
26
27
|
this.onSaveRecord = new EventEmitter();
|
|
27
28
|
this.onChangeSomething = new EventEmitter();
|
|
28
29
|
this.FieldTypeEnum = FieldTypeEnum;
|
|
@@ -74,6 +75,9 @@ export class ActionButtonCreatorComponent {
|
|
|
74
75
|
this.actionButton = new ActionButton();
|
|
75
76
|
}
|
|
76
77
|
var executeGetModules = false;
|
|
78
|
+
// aggiungo un elemento monoformula da eseguire solo all'azione per il modulo
|
|
79
|
+
this.formulas.execute_formula = {};
|
|
80
|
+
this.formulas.execute_formula.formula = new TriggerProperty(TriggerPropertyTypeEnum.STRING);
|
|
77
81
|
if (this.formulas) {
|
|
78
82
|
Object.keys(this.formulas).forEach((res) => {
|
|
79
83
|
this.formulaKeys.push({ "key": res });
|
|
@@ -95,7 +99,8 @@ export class ActionButtonCreatorComponent {
|
|
|
95
99
|
width: "75%",
|
|
96
100
|
data: {
|
|
97
101
|
formula: this.formulaFieldsStructure.find(x => x.key == formulaField.key).value,
|
|
98
|
-
fields: this.form.Fields
|
|
102
|
+
fields: this.form.Fields,
|
|
103
|
+
formulaObject: this.formulaObject
|
|
99
104
|
},
|
|
100
105
|
});
|
|
101
106
|
this.dialogFormulaRef.afterClosed().subscribe((result) => {
|
|
@@ -219,7 +224,7 @@ export class ActionButtonCreatorComponent {
|
|
|
219
224
|
}
|
|
220
225
|
}
|
|
221
226
|
ActionButtonCreatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ActionButtonCreatorComponent, deps: [{ token: i1.MatDialog }, { token: i2.UtilityHelperService }], target: i0.ɵɵFactoryTarget.Component });
|
|
222
|
-
ActionButtonCreatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ActionButtonCreatorComponent, selector: "action-button-creator", inputs: { form: "form", actionButton: "actionButton", actionButtonField: "actionButtonField", formulas: "formulas", endPointConfiguration: "endPointConfiguration", InField: "InField" }, outputs: { onSaveRecord: "onSaveRecord", onChangeSomething: "onChangeSomething" }, viewQueries: [{ propertyName: "dialogFormula", first: true, predicate: ["dialogFormula"], descendants: true, static: true }], ngImport: i0, template: "\r\n<mat-card class=\"add-form-field\">\r\n <mat-card-header *ngIf=\"!InField\">\r\n <mat-card-title>\r\n {{actionButton != null ? \"Modifica\" : \"Aggiungi\"}} bottone azione\r\n </mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n\r\n <div class=\"container-fluid containerContent padder\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-3\">Tipo Action Button</div>\r\n <div class=\"col-9\">\r\n <eqp-select [arrayData]=\"formulaKeys\" [(ngModelInput)]=\"selectedFormula\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'key'\" [showCancelButton]=\"true\" (ngModelInputChange)=\"onChangeFormula($event)\">\r\n </eqp-select> \r\n </div>\r\n </div>\r\n \r\n <div class=\"row\">\r\n <div class=\"col-3\">Etichetta</div>\r\n <div class=\"col-9\">\r\n <mat-form-field>\r\n <mat-label class=\"pt-1\"> Etichetta </mat-label>\r\n <input matInput [(ngModel)]=\"actionButton.ButtonLabel\" [readonly]=\"false\" (keyup)=\"changeSomething()\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n \r\n <div class=\"row\">\r\n <div class=\"col-3\">Icona (<a href='https://www.angularjswiki.com/angular/angular-material-icons-list-mat-icon-list' target=\"_blank\">lista</a>)</div>\r\n <div class=\"col-9\">\r\n <mat-form-field>\r\n <mat-label class=\"pt-1\"> Icona Material (<a href='https://www.angularjswiki.com/angular/angular-material-icons-list-mat-icon-list' target=\"_blank\">lista</a>) </mat-label>\r\n <input matInput [(ngModel)]=\"actionButton.Icon\" [readonly]=\"false\" (keyup)=\"changeSomething()\">\r\n </mat-form-field>\r\n </div>\r\n </div> \r\n \r\n <div class=\"row\" *ngIf=\"!InField\">\r\n <div class=\"col-3\">Sezioni</div>\r\n <div class=\"col-9\">\r\n <mat-label class=\"pt-1\"> Sezioni </mat-label>\r\n <eqp-select\r\n [enumData]=\"actionsFlag\"\r\n [isSearchable]=\"true\"\r\n [isMultiSelect] = \"true\"\r\n [(ngModelInput)]=\"actionButton.ShowIn\" \r\n (ngModelInputChange)=\"changeSomething()\" \r\n >\r\n </eqp-select>\r\n </div>\r\n </div> \r\n\r\n <div class=\"row\" *ngFor=\"let formulaField of formulaFieldsStructure\">\r\n <div class=\"col-3\">{{formulaField.key}}</div>\r\n <div class=\"col-9\" *ngIf=\"formulaField.type == triggerPropertyType.STRING\">\r\n <mat-form-field>\r\n <mat-label class=\"pt-1\"> {{formulaField.key}}</mat-label>\r\n <input matInput [readonly]=\"false\" [required]=\"false\" [matTooltip]=\"formulaField.tooltip\" (click)=\"openFormulaDialog(formulaField)\" [(ngModel)]=\"formulaField.value\" (ngModelChange)=\"onFormulaFieldChange(formulaField)\">\r\n </mat-form-field>\r\n </div>\r\n <!-- i campi con valori(non calcolati) vincolati li mostro in una select-->\r\n\r\n <div class=\"col-9\" *ngIf=\"formulaField.type == triggerPropertyType.DROPDOWN_LIST\">\r\n \r\n <eqp-select\r\n [placeholder]=\"'Seleziona valore'\"\r\n [arrayData]=\"formulaField.allowedValues\"\r\n (ngModelInputChange)=\"onDropDownSelection($event)\"\r\n [(ngModelInput)]=\"formulaField.selectedAllowedValue\"\r\n [arrayKeyProperty]=\"'key'\"\r\n [arrayValueProperty]=\"'value'\"\r\n [isRequired]=\"false\"\r\n class=\"eqp-form-field eqp-coloured\">\r\n </eqp-select>\r\n \r\n </div>\r\n \r\n <!-- fine gestione liste-->\r\n <div class=\"col-9\" *ngIf=\"formulaField.type == triggerPropertyType.DMMODULE\">\r\n <eqp-select [placeholder]=\"'Seleziona modulo'\" [arrayData]=\"forms\" [(ngModelInput)]=\"formulaField.object\" [isSearchable]=\"true\"\r\n [arrayKeyProperty]=\"'ID'\" [arrayValueProperty]=\"'Name'\" [ngModelOptions]=\"{ standalone: true }\" (ngModelInputChange)=\"onEqpSelectModule($event, formulaField)\">\r\n </eqp-select>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </mat-card-content>\r\n <mat-card-footer *ngIf=\"!InField\">\r\n <div class=\"d-flex justify-content-end mt-2 mb-1 me-3\"> \r\n <button class=\"mr-2\" mat-raised-button type=\"button\" (click)=\"saveOrExitForm(true)\">\r\n Annulla\r\n </button>\r\n <button class=\"mr-2\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"saveOrExitForm(false)\" [disabled]=\"isSaving\">\r\n <span *ngIf=\"!isSaving\">Salva</span>\r\n <span *ngIf=\"isSaving\">Salvataggio in Corso...</span>\r\n </button>\r\n </div>\r\n </mat-card-footer>\r\n\r\n</mat-card>\r\n\r\n<!--DIALOG PER SEMPLIFICARE LA SCRITTURA DEL CAMPO FORMULA-->\r\n<ng-template #dialogFormula>\r\n <eqp-dynamic-module-add-formula-component>\r\n </eqp-dynamic-module-add-formula-component>\r\n</ng-template>", styles: [""], dependencies: [{ 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: "directive", type: i4.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: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "component", type: i6.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i6.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i6.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: i6.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i6.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i8.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: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i10.EqpSelectComponent, selector: "eqp-select", inputs: ["placeholder", "enumData", "enumDataToExclude", "arrayData", "arrayKeyProperty", "arrayValueProperty", "ngModelOptions", "ngModelInput", "formGroupInput", "formControlNameInput", "isRequired", "isDisabled", "isMultiLanguage", "multilanguagePrefixKey", "isAlphabeticalOrderable", "suffixIcon", "prefixIcon", "isMultiSelect", "includeFullObject", "showCancelButton", "isSearchable", "searchText", "noResultSearchText", "data"], outputs: ["ngModelInputChange"] }, { kind: "component", type: i11.AddFormulaComponent, selector: "eqp-dynamic-module-add-formula-component" }] });
|
|
227
|
+
ActionButtonCreatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ActionButtonCreatorComponent, selector: "action-button-creator", inputs: { form: "form", actionButton: "actionButton", actionButtonField: "actionButtonField", formulas: "formulas", endPointConfiguration: "endPointConfiguration", InField: "InField", formulaObject: "formulaObject" }, outputs: { onSaveRecord: "onSaveRecord", onChangeSomething: "onChangeSomething" }, viewQueries: [{ propertyName: "dialogFormula", first: true, predicate: ["dialogFormula"], descendants: true, static: true }], ngImport: i0, template: "\r\n<mat-card class=\"add-form-field\">\r\n <mat-card-header *ngIf=\"!InField\">\r\n <mat-card-title>\r\n {{actionButton != null ? \"Modifica\" : \"Aggiungi\"}} bottone azione\r\n </mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n\r\n <div class=\"container-fluid containerContent padder\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-3\">Tipo Action Button</div>\r\n <div class=\"col-9\">\r\n <eqp-select [arrayData]=\"formulaKeys\" [(ngModelInput)]=\"selectedFormula\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'key'\" [showCancelButton]=\"true\" (ngModelInputChange)=\"onChangeFormula($event)\">\r\n </eqp-select> \r\n </div>\r\n </div>\r\n \r\n <div class=\"row\">\r\n <div class=\"col-3\">Etichetta</div>\r\n <div class=\"col-9\">\r\n <mat-form-field>\r\n <mat-label class=\"pt-1\"> Etichetta </mat-label>\r\n <input matInput [(ngModel)]=\"actionButton.ButtonLabel\" [readonly]=\"false\" (keyup)=\"changeSomething()\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n \r\n <div class=\"row\">\r\n <div class=\"col-3\">Icona (<a href='https://www.angularjswiki.com/angular/angular-material-icons-list-mat-icon-list' target=\"_blank\">lista</a>)</div>\r\n <div class=\"col-9\">\r\n <mat-form-field>\r\n <mat-label class=\"pt-1\"> Icona Material (<a href='https://www.angularjswiki.com/angular/angular-material-icons-list-mat-icon-list' target=\"_blank\">lista</a>) </mat-label>\r\n <input matInput [(ngModel)]=\"actionButton.Icon\" [readonly]=\"false\" (keyup)=\"changeSomething()\">\r\n </mat-form-field>\r\n </div>\r\n </div> \r\n \r\n <div class=\"row\" *ngIf=\"!InField\">\r\n <div class=\"col-3\">Sezioni</div>\r\n <div class=\"col-9\">\r\n <mat-label class=\"pt-1\"> Sezioni </mat-label>\r\n <eqp-select\r\n [enumData]=\"actionsFlag\"\r\n [isSearchable]=\"true\"\r\n [isMultiSelect] = \"true\"\r\n [(ngModelInput)]=\"actionButton.ShowIn\" \r\n (ngModelInputChange)=\"changeSomething()\" \r\n >\r\n </eqp-select>\r\n </div>\r\n </div> \r\n\r\n <div class=\"row\" *ngFor=\"let formulaField of formulaFieldsStructure\">\r\n <div class=\"col-3\">{{formulaField.key}}</div>\r\n <div class=\"col-9\" *ngIf=\"formulaField.type == triggerPropertyType.STRING\">\r\n <mat-form-field>\r\n <mat-label class=\"pt-1\"> {{formulaField.key}}</mat-label>\r\n <input matInput [readonly]=\"false\" [required]=\"false\" [matTooltip]=\"formulaField.tooltip\" (click)=\"openFormulaDialog(formulaField)\" [(ngModel)]=\"formulaField.value\" (ngModelChange)=\"onFormulaFieldChange(formulaField)\">\r\n </mat-form-field>\r\n </div>\r\n <!-- i campi con valori(non calcolati) vincolati li mostro in una select-->\r\n\r\n <div class=\"col-9\" *ngIf=\"formulaField.type == triggerPropertyType.DROPDOWN_LIST\">\r\n \r\n <eqp-select\r\n [placeholder]=\"'Seleziona valore'\"\r\n [arrayData]=\"formulaField.allowedValues\"\r\n (ngModelInputChange)=\"onDropDownSelection($event)\"\r\n [(ngModelInput)]=\"formulaField.selectedAllowedValue\"\r\n [arrayKeyProperty]=\"'key'\"\r\n [arrayValueProperty]=\"'value'\"\r\n [isRequired]=\"false\"\r\n class=\"eqp-form-field eqp-coloured\">\r\n </eqp-select>\r\n \r\n </div>\r\n \r\n <!-- fine gestione liste-->\r\n <div class=\"col-9\" *ngIf=\"formulaField.type == triggerPropertyType.DMMODULE\">\r\n <eqp-select [placeholder]=\"'Seleziona modulo'\" [arrayData]=\"forms\" [(ngModelInput)]=\"formulaField.object\" [isSearchable]=\"true\"\r\n [arrayKeyProperty]=\"'ID'\" [arrayValueProperty]=\"'Name'\" [ngModelOptions]=\"{ standalone: true }\" (ngModelInputChange)=\"onEqpSelectModule($event, formulaField)\">\r\n </eqp-select>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </mat-card-content>\r\n <mat-card-footer *ngIf=\"!InField\">\r\n <div class=\"d-flex justify-content-end mt-2 mb-1 me-3\"> \r\n <button class=\"mr-2\" mat-raised-button type=\"button\" (click)=\"saveOrExitForm(true)\">\r\n Annulla\r\n </button>\r\n <button class=\"mr-2\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"saveOrExitForm(false)\" [disabled]=\"isSaving\">\r\n <span *ngIf=\"!isSaving\">Salva</span>\r\n <span *ngIf=\"isSaving\">Salvataggio in Corso...</span>\r\n </button>\r\n </div>\r\n </mat-card-footer>\r\n\r\n</mat-card>\r\n\r\n<!--DIALOG PER SEMPLIFICARE LA SCRITTURA DEL CAMPO FORMULA-->\r\n<ng-template #dialogFormula>\r\n <eqp-dynamic-module-add-formula-component>\r\n </eqp-dynamic-module-add-formula-component>\r\n</ng-template>", styles: [""], dependencies: [{ 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: "directive", type: i4.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: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "component", type: i6.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i6.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i6.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: i6.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i6.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i8.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: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i10.EqpSelectComponent, selector: "eqp-select", inputs: ["placeholder", "enumData", "enumDataToExclude", "arrayData", "arrayKeyProperty", "arrayValueProperty", "ngModelOptions", "ngModelInput", "formGroupInput", "formControlNameInput", "isRequired", "isDisabled", "isMultiLanguage", "multilanguagePrefixKey", "isAlphabeticalOrderable", "suffixIcon", "prefixIcon", "isMultiSelect", "includeFullObject", "showCancelButton", "isSearchable", "searchText", "noResultSearchText", "data"], outputs: ["ngModelInputChange"] }, { kind: "component", type: i11.AddFormulaComponent, selector: "eqp-dynamic-module-add-formula-component" }] });
|
|
223
228
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ActionButtonCreatorComponent, decorators: [{
|
|
224
229
|
type: Component,
|
|
225
230
|
args: [{ selector: 'action-button-creator', template: "\r\n<mat-card class=\"add-form-field\">\r\n <mat-card-header *ngIf=\"!InField\">\r\n <mat-card-title>\r\n {{actionButton != null ? \"Modifica\" : \"Aggiungi\"}} bottone azione\r\n </mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n\r\n <div class=\"container-fluid containerContent padder\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-3\">Tipo Action Button</div>\r\n <div class=\"col-9\">\r\n <eqp-select [arrayData]=\"formulaKeys\" [(ngModelInput)]=\"selectedFormula\"\r\n [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'key'\" [showCancelButton]=\"true\" (ngModelInputChange)=\"onChangeFormula($event)\">\r\n </eqp-select> \r\n </div>\r\n </div>\r\n \r\n <div class=\"row\">\r\n <div class=\"col-3\">Etichetta</div>\r\n <div class=\"col-9\">\r\n <mat-form-field>\r\n <mat-label class=\"pt-1\"> Etichetta </mat-label>\r\n <input matInput [(ngModel)]=\"actionButton.ButtonLabel\" [readonly]=\"false\" (keyup)=\"changeSomething()\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n \r\n <div class=\"row\">\r\n <div class=\"col-3\">Icona (<a href='https://www.angularjswiki.com/angular/angular-material-icons-list-mat-icon-list' target=\"_blank\">lista</a>)</div>\r\n <div class=\"col-9\">\r\n <mat-form-field>\r\n <mat-label class=\"pt-1\"> Icona Material (<a href='https://www.angularjswiki.com/angular/angular-material-icons-list-mat-icon-list' target=\"_blank\">lista</a>) </mat-label>\r\n <input matInput [(ngModel)]=\"actionButton.Icon\" [readonly]=\"false\" (keyup)=\"changeSomething()\">\r\n </mat-form-field>\r\n </div>\r\n </div> \r\n \r\n <div class=\"row\" *ngIf=\"!InField\">\r\n <div class=\"col-3\">Sezioni</div>\r\n <div class=\"col-9\">\r\n <mat-label class=\"pt-1\"> Sezioni </mat-label>\r\n <eqp-select\r\n [enumData]=\"actionsFlag\"\r\n [isSearchable]=\"true\"\r\n [isMultiSelect] = \"true\"\r\n [(ngModelInput)]=\"actionButton.ShowIn\" \r\n (ngModelInputChange)=\"changeSomething()\" \r\n >\r\n </eqp-select>\r\n </div>\r\n </div> \r\n\r\n <div class=\"row\" *ngFor=\"let formulaField of formulaFieldsStructure\">\r\n <div class=\"col-3\">{{formulaField.key}}</div>\r\n <div class=\"col-9\" *ngIf=\"formulaField.type == triggerPropertyType.STRING\">\r\n <mat-form-field>\r\n <mat-label class=\"pt-1\"> {{formulaField.key}}</mat-label>\r\n <input matInput [readonly]=\"false\" [required]=\"false\" [matTooltip]=\"formulaField.tooltip\" (click)=\"openFormulaDialog(formulaField)\" [(ngModel)]=\"formulaField.value\" (ngModelChange)=\"onFormulaFieldChange(formulaField)\">\r\n </mat-form-field>\r\n </div>\r\n <!-- i campi con valori(non calcolati) vincolati li mostro in una select-->\r\n\r\n <div class=\"col-9\" *ngIf=\"formulaField.type == triggerPropertyType.DROPDOWN_LIST\">\r\n \r\n <eqp-select\r\n [placeholder]=\"'Seleziona valore'\"\r\n [arrayData]=\"formulaField.allowedValues\"\r\n (ngModelInputChange)=\"onDropDownSelection($event)\"\r\n [(ngModelInput)]=\"formulaField.selectedAllowedValue\"\r\n [arrayKeyProperty]=\"'key'\"\r\n [arrayValueProperty]=\"'value'\"\r\n [isRequired]=\"false\"\r\n class=\"eqp-form-field eqp-coloured\">\r\n </eqp-select>\r\n \r\n </div>\r\n \r\n <!-- fine gestione liste-->\r\n <div class=\"col-9\" *ngIf=\"formulaField.type == triggerPropertyType.DMMODULE\">\r\n <eqp-select [placeholder]=\"'Seleziona modulo'\" [arrayData]=\"forms\" [(ngModelInput)]=\"formulaField.object\" [isSearchable]=\"true\"\r\n [arrayKeyProperty]=\"'ID'\" [arrayValueProperty]=\"'Name'\" [ngModelOptions]=\"{ standalone: true }\" (ngModelInputChange)=\"onEqpSelectModule($event, formulaField)\">\r\n </eqp-select>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </mat-card-content>\r\n <mat-card-footer *ngIf=\"!InField\">\r\n <div class=\"d-flex justify-content-end mt-2 mb-1 me-3\"> \r\n <button class=\"mr-2\" mat-raised-button type=\"button\" (click)=\"saveOrExitForm(true)\">\r\n Annulla\r\n </button>\r\n <button class=\"mr-2\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"saveOrExitForm(false)\" [disabled]=\"isSaving\">\r\n <span *ngIf=\"!isSaving\">Salva</span>\r\n <span *ngIf=\"isSaving\">Salvataggio in Corso...</span>\r\n </button>\r\n </div>\r\n </mat-card-footer>\r\n\r\n</mat-card>\r\n\r\n<!--DIALOG PER SEMPLIFICARE LA SCRITTURA DEL CAMPO FORMULA-->\r\n<ng-template #dialogFormula>\r\n <eqp-dynamic-module-add-formula-component>\r\n </eqp-dynamic-module-add-formula-component>\r\n</ng-template>" }]
|
|
@@ -241,6 +246,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
241
246
|
}], InField: [{
|
|
242
247
|
type: Input,
|
|
243
248
|
args: ["InField"]
|
|
249
|
+
}], formulaObject: [{
|
|
250
|
+
type: Input
|
|
244
251
|
}], onSaveRecord: [{
|
|
245
252
|
type: Output
|
|
246
253
|
}], onChangeSomething: [{
|
|
@@ -249,4 +256,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
249
256
|
type: ViewChild,
|
|
250
257
|
args: ["dialogFormula", { static: true }]
|
|
251
258
|
}] } });
|
|
252
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWJ1dHRvbi1jcmVhdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9hY3Rpb24tYnV0dG9uLWNyZWF0b3IvYWN0aW9uLWJ1dHRvbi1jcmVhdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9hY3Rpb24tYnV0dG9uLWNyZWF0b3IvYWN0aW9uLWJ1dHRvbi1jcmVhdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFdEcsT0FBTyxFQUE2QyxhQUFhLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN2SCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7Ozs7O0FBU2pFLE1BQU0sT0FBTyw0QkFBNEI7SUF5QnJDLFlBQW9CLE1BQWlCLEVBQVUsb0JBQTBDO1FBQXJFLFdBQU0sR0FBTixNQUFNLENBQVc7UUFBVSx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBdEJwRSxpQkFBWSxHQUFpQixJQUFJLENBQUM7UUFDN0Isc0JBQWlCLEdBQXNCLElBQUksQ0FBQztRQUNyRCxhQUFRLEdBQVEsSUFBSSxDQUFDO1FBRXRCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFFakMsaUJBQVks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LENBQUMsUUFBUSxDQUFDLDBEQUEwRCxFQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO1FBRzlHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFtQixFQUFFLFFBQW9CO1FBQzFELElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDNUIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDOzswSEF0UFUsNEJBQTRCOzhHQUE1Qiw0QkFBNEIsd2NDaEJ6QyxxZ0xBK0djOzRGRC9GRCw0QkFBNEI7a0JBTHhDLFNBQVM7K0JBQ0UsdUJBQXVCO21JQU1sQixJQUFJO3NCQUFsQixLQUFLO3VCQUFDLE1BQU07Z0JBQ1UsWUFBWTtzQkFBbEMsS0FBSzt1QkFBQyxjQUFjO2dCQUNPLGlCQUFpQjtzQkFBNUMsS0FBSzt1QkFBQyxtQkFBbUI7Z0JBQ1AsUUFBUTtzQkFBMUIsS0FBSzt1QkFBQyxVQUFVO2dCQUNlLHFCQUFxQjtzQkFBcEQsS0FBSzt1QkFBQyx1QkFBdUI7Z0JBQ1osT0FBTztzQkFBeEIsS0FBSzt1QkFBQyxTQUFTO2dCQUVOLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQVd5QyxhQUFhO3NCQUExRCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3Rpb25CdXR0b24sIEFjdGlvbkZsYWdFbnVtLCBUcmlnZ2VyUHJvcGVydHlUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy90cmlnZ2VyLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsJztcclxuaW1wb3J0IHsgRW5kUG9pbnRDb25maWd1cmF0aW9uLCBFbmRQb2ludERhdGFQYXJhbXMsIFBhcmFtVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgRmllbGRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcblxyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMnO1xyXG5pbXBvcnQgeyBBY3Rpb25CdXR0b25GaWVsZCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9maWVsZHMvYWN0aW9uQnV0dG9uLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYWN0aW9uLWJ1dHRvbi1jcmVhdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uLWJ1dHRvbi1jcmVhdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hY3Rpb24tYnV0dG9uLWNyZWF0b3IuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWN0aW9uQnV0dG9uQ3JlYXRvckNvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dChcImZvcm1cIikgZm9ybTogRm9ybTtcclxuICBASW5wdXQoXCJhY3Rpb25CdXR0b25cIikgYWN0aW9uQnV0dG9uOiBBY3Rpb25CdXR0b24gPSBudWxsO1xyXG4gIEBJbnB1dChcImFjdGlvbkJ1dHRvbkZpZWxkXCIpIGFjdGlvbkJ1dHRvbkZpZWxkOiBBY3Rpb25CdXR0b25GaWVsZCA9IG51bGw7XHJcbiAgQElucHV0KFwiZm9ybXVsYXNcIikgZm9ybXVsYXM6IGFueSA9IG51bGw7XHJcbiAgQElucHV0KFwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCIpIGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gIEBJbnB1dChcIkluRmllbGRcIikgSW5GaWVsZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgb25TYXZlUmVjb3JkOiBFdmVudEVtaXR0ZXI8QWN0aW9uQnV0dG9uPiA9IG5ldyBFdmVudEVtaXR0ZXI8QWN0aW9uQnV0dG9uPigpO1xyXG4gIEBPdXRwdXQoKSBvbkNoYW5nZVNvbWV0aGluZzogRXZlbnRFbWl0dGVyPEFjdGlvbkJ1dHRvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFjdGlvbkJ1dHRvbj4oKTtcclxuXHJcbiAgICBGaWVsZFR5cGVFbnVtID0gRmllbGRUeXBlRW51bTtcclxuICAgIGlzU2F2aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBzZWxlY3RlZEZvcm11bGE6IGFueTtcclxuICAgIGZvcm11bGFLZXlzOiBBcnJheTxhbnk+ID0gbmV3IEFycmF5PGFueT4oKTtcclxuICAgIGZvcm11bGFGaWVsZHNTdHJ1Y3R1cmU6IEFycmF5PGFueT4gPSBuZXcgQXJyYXk8YW55PigpO1xyXG4gICAgYWN0aW9uc0ZsYWcgPSBBY3Rpb25GbGFnRW51bTtcclxuICAgIHRyaWdnZXJQcm9wZXJ0eVR5cGUgPSBUcmlnZ2VyUHJvcGVydHlUeXBlRW51bTtcclxuICBcclxuICAgIGRpYWxvZ0Zvcm11bGFSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICAgIEBWaWV3Q2hpbGQoXCJkaWFsb2dGb3JtdWxhXCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0Zvcm11bGE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgXHJcbiAgICBmb3JtczogQXJyYXk8Rm9ybT47XHJcbiAgXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLCBwcml2YXRlIHV0aWxpdHlIZWxwZXJTZXJ2aWNlOiBVdGlsaXR5SGVscGVyU2VydmljZSl7fVxyXG4gICAgXHJcbiAgICBuZ09uSW5pdCgpe1xyXG5cclxuICAgICAgLy8vXHJcbiAgICAgIC8vLyBRdWVzdG8gY29tcG9uZW50ZSBmdW56aW9uYSBzaWEgcGVyIGkgYm90dG9uaSBkZWkgZmllbGRzIHNpYSBwZXIgaSBib3R0b25pIHN1Z2xpIGhlYWRlciAoYWRkcmVjb3JkLCBsaXN0dmlldyBlY2NldGVyYSlcclxuICAgICAgLy8vIFNlIHNpIHN0YSBsYXZvcmFuZG8gc3VpIGZpZWxkcyDDqCBwb3BvbGF0byAndGhpcy5hY3Rpb25CdXR0b25GaWVsZCcgYWx0cmltZW50aSDDqCBudWxsLlxyXG4gICAgICAvLy9cclxuXHJcbiAgICAgIGlmICh0aGlzLmFjdGlvbkJ1dHRvbkZpZWxkICE9IG51bGwpe1xyXG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9uID0gPEFjdGlvbkJ1dHRvbj50aGlzLmFjdGlvbkJ1dHRvbkZpZWxkO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBpZiAodGhpcy5hY3Rpb25CdXR0b24gIT0gbnVsbCAmJiB0aGlzLmFjdGlvbkJ1dHRvbi5leGVjdXRpb24gIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGb3JtdWxhID0ge307XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZvcm11bGEua2V5ID0gdGhpcy5hY3Rpb25CdXR0b24uZXhlY3V0aW9uO1xyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgIGlmICh0aGlzLmFjdGlvbkJ1dHRvbkZpZWxkID09IG51bGwpe1xyXG4gICAgICAgICAgdGhpcy5mb3JtdWxhRmllbGRzU3RydWN0dXJlID0gbmV3IEFycmF5PGFueT4oKTtcclxuICAgICAgICAgIHRoaXMuZm9ybXVsYXMuZm9yRWFjaCgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybXVsYUZpZWxkc1N0cnVjdHVyZS5wdXNoKHtcImtleVwiOiByZXMua2V5LCBcInR5cGVcIjogdGhpcy5mb3JtdWxhc1t0aGlzLnNlbGVjdGVkRm9ybXVsYS5rZXldW3Jlc10udHlwZSwgXCJ0b29sdGlwXCI6IHRoaXMuZm9ybXVsYXNbdGhpcy5zZWxlY3RlZEZvcm11bGEua2V5XVtyZXNdLnRvb2x0aXB9KTtcclxuICAgICAgICAgIH0pOyAgIFxyXG5cclxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuYWN0aW9uQnV0dG9uLmZvcm11bGFzVGVtcCkuZm9yRWFjaCgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybXVsYUZpZWxkc1N0cnVjdHVyZS5maW5kKHggPT4geC5rZXkgPT0gcmVzKS52YWx1ZSA9IHRoaXMuYWN0aW9uQnV0dG9uLmZvcm11bGFzVGVtcFtyZXNdLnZhbHVlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZm9ybXVsYUZpZWxkc1N0cnVjdHVyZS5wdXNoKHRoaXMuYWN0aW9uQnV0dG9uLmZvcm11bGFzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICovXHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFjdGlvbkJ1dHRvbkZpZWxkID09IG51bGwpe1xyXG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5hY3Rpb25CdXR0b24uZm9ybXVsYXNUZW1wKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzQW5BY3Rpb25LZXkoa2V5LCB0aGlzLmFjdGlvbkJ1dHRvbiwgdGhpcy5mb3JtdWxhcykpeyByZXR1cm47IH1cclxuICAgICAgICAgICAgdGhpcy5mb3JtdWxhRmllbGRzU3RydWN0dXJlLnB1c2godGhpcy5hY3Rpb25CdXR0b24uZm9ybXVsYXNUZW1wW2tleV0pO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUgPSB0aGlzLmFjdGlvbkJ1dHRvbkZpZWxkLmZvcm11bGFzO1xyXG4gICAgICAgIH0gICAgICAgIFxyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuYWN0aW9uQnV0dG9uID09IG51bGwpe1xyXG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9uID0gbmV3IEFjdGlvbkJ1dHRvbigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgZXhlY3V0ZUdldE1vZHVsZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAgIGlmKHRoaXMuZm9ybXVsYXMpe1xyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm11bGFzKS5mb3JFYWNoKChyZXMpID0+IHtcclxuICAgICAgICB0aGlzLmZvcm11bGFLZXlzLnB1c2goe1wia2V5XCI6IHJlc30pO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybXVsYXNbcmVzXSkuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmZvcm11bGFzW3Jlc11bcHJvcGVydHldLnR5cGUgPT0gVHJpZ2dlclByb3BlcnR5VHlwZUVudW0uRE1NT0RVTEUpe1xyXG4gICAgICAgICAgICBleGVjdXRlR2V0TW9kdWxlcyA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgICAgaWYgKGV4ZWN1dGVHZXRNb2R1bGVzKXtcclxuICAgICAgICB0aGlzLmdldEFsbE1vZHVsZXMoKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvcGVuRm9ybXVsYURpYWxvZyhmb3JtdWxhRmllbGQ6IGFueSkge1xyXG4gICAgICB0aGlzLmRpYWxvZ0Zvcm11bGFSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuZGlhbG9nRm9ybXVsYSwge1xyXG4gICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgICB3aWR0aDogXCI3NSVcIixcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBmb3JtdWxhOiB0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUuZmluZCh4ID0+IHgua2V5ID09IGZvcm11bGFGaWVsZC5rZXkpLnZhbHVlLFxyXG4gICAgICAgICAgZmllbGRzOiB0aGlzLmZvcm0uRmllbGRzXHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZGlhbG9nRm9ybXVsYVJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgdmFyIGZvcm11bGFUb0NoYW5nZSA9IHRoaXMuZm9ybXVsYUZpZWxkc1N0cnVjdHVyZS5maW5kKHggPT4geC5rZXkgPT0gZm9ybXVsYUZpZWxkLmtleSk7XHJcbiAgICAgICAgZm9ybXVsYVRvQ2hhbmdlLnZhbHVlID0gcmVzdWx0LmZvcm11bGEudG9TdHJpbmcoKSA9PSBcIlwiID8gbnVsbCA6IHJlc3VsdC5mb3JtdWxhLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgdGhpcy5vbkZvcm11bGFGaWVsZENoYW5nZShmb3JtdWxhVG9DaGFuZ2UpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiphZ2dpb3JuYSAgc2VsZWN0ZWRGb3JtdWxhIGNvbiBpbCB2YWxvcmUgcmVzdGl0dWl0byBkYWxsYSBzZWxlY3RcclxuICAgICAqIHF1aSBub24gw6ggY2hpYXJvIHNlIGUgcXVhbmRvIHJpY2hpYW1hcmUgaWwgY2hhbmdlU29tZXRoaW5nIFxyXG4gICAgICogKi9cclxuICAgIG9uRHJvcERvd25TZWxlY3Rpb24oc2VsZWN0ZWRBbGxvd2VkVmFsdWUpe1xyXG4gICAgICBcclxuICAgICAgdGhpcy5jaGFuZ2VTb21ldGhpbmcoKTsgLy8gbm9uIHNpIGNhcGlzY2UgYSBjaGUgc2VydmUsIGFzc2VnbmEgY29zZVxyXG4gICAgICB0aGlzLnNlbGVjdGVkRm9ybXVsYS5zZWxlY3RlZEFsbG93ZWRWYWx1ZSA9IHNlbGVjdGVkQWxsb3dlZFZhbHVlLnZhbHVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbkZvcm11bGFGaWVsZENoYW5nZShmb3JtdWxhRmllbGQ6IGFueSl7XHJcbiAgICAgICB0aGlzLmNoYW5nZVNvbWV0aGluZygpO1xyXG4gICAgfSAgICBcclxuXHJcbiAgICBvbkVxcFNlbGVjdE1vZHVsZShldiwgZm9ybXVsYUZpZWxkKXtcclxuICAgICAgaWYgKGV2ICE9IG51bGwpe1xyXG4gICAgICAgIGZvcm11bGFGaWVsZC52YWx1ZSA9IGV2LklEOyAgICBcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3JtdWxhRmllbGQudmFsdWUgPSBcIlwiO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hhbmdlU29tZXRoaW5nKCk7XHJcbiAgICB9ICAgIFxyXG5cclxuICBzYXZlT3JFeGl0Rm9ybShleGl0OiBib29sZWFuKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdhZGQtZm9ybS1yZWNvcmQgc2F2ZVJlY29yZEV2ZW50JylcclxuICAgIGlmIChleGl0KSB7XHJcbiAgICAgIHRoaXMub25TYXZlUmVjb3JkLmVtaXQobnVsbCk7XHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgaWYgKHRoaXMuYWN0aW9uQnV0dG9uLkJ1dHRvblVuaXF1ZUlkID09IG51bGwpeyB0aGlzLmFjdGlvbkJ1dHRvbi5CdXR0b25VbmlxdWVJZCA9IHRoaXMuZ2VuZXJhdGVHVUlEKCk7IH1cclxuICAgICAgdGhpcy5hY3Rpb25CdXR0b24uQnV0dG9uQ29kZSA9IHRoaXMuc2VsZWN0ZWRGb3JtdWxhLmtleTtcclxuXHJcbiAgICAgIHRoaXMuZm9ybXVsYUZpZWxkc1N0cnVjdHVyZS5mb3JFYWNoKChmb3JtdWxhRmllbGQpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWN0aW9uQnV0dG9uLmZvcm11bGFzID09IFwidW5kZWZpbmVkXCIpeyB0aGlzLmFjdGlvbkJ1dHRvbi5mb3JtdWxhcyA9IHt9OyB9XHJcbiAgICAgICAgdGhpcy5hY3Rpb25CdXR0b24uZm9ybXVsYXNUZW1wW2Zvcm11bGFGaWVsZC5rZXldID0gZm9ybXVsYUZpZWxkO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9uLmV4ZWN1dGlvbiA9IHRoaXMuc2VsZWN0ZWRGb3JtdWxhLmtleTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkFjdGlvbkJ1dHRvbkNyZWF0b3JDb21wb25lbnQgc2F2ZU9yRXhpdEZvcm0oKVwiLCB0aGlzLmFjdGlvbkJ1dHRvbik7XHJcbiAgICAgIHRoaXMub25TYXZlUmVjb3JkLmVtaXQodGhpcy5hY3Rpb25CdXR0b24pO1xyXG4gICAgfVxyXG4gIH0gICAgXHJcblxyXG4gIGdlbmVyYXRlR1VJRCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICBjb25zdCByYW5kb21OdW0gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKTtcclxuICAgIHJldHVybiBgJHt0aW1lc3RhbXB9LSR7cmFuZG9tTnVtfWA7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VTb21ldGhpbmcoKXtcclxuICAgIHRoaXMuYWN0aW9uQnV0dG9uLkJ1dHRvbkNvZGUgPSB0aGlzLnNlbGVjdGVkRm9ybXVsYS5rZXk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmFjdGlvbkJ1dHRvbi5mb3JtdWxhc1RlbXApeyB0aGlzLmFjdGlvbkJ1dHRvbi5mb3JtdWxhc1RlbXAgPSB7fTsgfVxyXG5cclxuICAgIHRoaXMuZm9ybXVsYUZpZWxkc1N0cnVjdHVyZS5mb3JFYWNoKChmb3JtdWxhRmllbGQpID0+IHtcclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjdGlvbkJ1dHRvbi5mb3JtdWxhcyA9PSBcInVuZGVmaW5lZFwiKXsgdGhpcy5hY3Rpb25CdXR0b24uZm9ybXVsYXMgPSB7fTsgfVxyXG4gICAgICB0aGlzLmFjdGlvbkJ1dHRvbi5mb3JtdWxhc1RlbXBbZm9ybXVsYUZpZWxkLmtleV0gPSBmb3JtdWxhRmllbGQ7XHJcbiAgICAgIHRoaXMuYWN0aW9uQnV0dG9uLmV4ZWN1dGlvbiA9IHRoaXMuc2VsZWN0ZWRGb3JtdWxhLmtleTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMub25DaGFuZ2VTb21ldGhpbmcuZW1pdCh0aGlzLmFjdGlvbkJ1dHRvbik7XHJcbiAgfVxyXG5cclxuICBnZXRBbGxNb2R1bGVzKCl7XHJcblxyXG4gICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICBQYXJhbU5hbWU6IFwib3JnYWlkXCIsXHJcbiAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybS5PcmdhSUQsXHJcbiAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QWxsRm9ybUVuZFBvaW50LFxyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAocmVzOiBBcnJheTxGb3JtPikgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybXMgPSByZXM7XHJcbiAgICAgICAgdGhpcy5mb3JtcyA9IHRoaXMuZm9ybXMuc29ydCgodW5vLCBkdWUpID0+IHVuby5OYW1lLmxvY2FsZUNvbXBhcmUoZHVlLk5hbWUpKTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3JtdWxhRmllbGRzU3RydWN0dXJlLmZvckVhY2goKHJlcykgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy50eXBlID09IFRyaWdnZXJQcm9wZXJ0eVR5cGVFbnVtLkRNTU9EVUxFKXtcclxuICAgICAgICAgICAgcmVzLm9iamVjdCA9IHRoaXMuZm9ybXMuZmluZCh4ID0+IHguSUQgPT0gcmVzLnZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnIpID0+IHsgfVxyXG4gICAgKTsgICAgXHJcbiAgfSAgXHJcblxyXG4gIG9uQ2hhbmdlRm9ybXVsYShmb3JtdWxhOiBhbnkpe1xyXG5cclxuICAgIGlmIChmb3JtdWxhID09IG51bGwpeyAgXHJcbiAgICAgIHRoaXMuY2hhbmdlU29tZXRoaW5nKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdAQHRyaWdnZXItY3JlYXRvcjpvbkNoYW5nZUZvcm11bGEgc2VsZWN0ZWQgZm9ybXVsYScsZm9ybXVsYSlcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0BAdHJpZ2dlci1jcmVhdG9yOm9uQ2hhbmdlRm9ybXVsYSBmb3JtdWxhcycsdGhpcy5mb3JtdWxhcylcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJvbkNoYW5nZUZvcm11bGEgZm9ybXVsYS5rZXlcIiwgZm9ybXVsYS5rZXkpO1xyXG5cclxuICAgIHRoaXMuZm9ybXVsYUZpZWxkc1N0cnVjdHVyZSA9IG5ldyBBcnJheTxhbnk+KCk7XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tXHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm11bGFzW2Zvcm11bGEua2V5XSkuZm9yRWFjaCgocmVzKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUucHVzaCh7XHJcbiAgICAgICAgXCJrZXlcIjogcmVzLCBcclxuICAgICAgICBcInR5cGVcIjogdGhpcy5mb3JtdWxhc1tmb3JtdWxhLmtleV1bcmVzXS50eXBlLCBcclxuICAgICAgICBcInRvb2x0aXBcIjogdGhpcy5mb3JtdWxhc1tmb3JtdWxhLmtleV1bcmVzXS50b29sdGlwLFxyXG4gICAgICAgIFwidmFsdWVcIiA6IHRoaXMuZm9ybXVsYXNbZm9ybXVsYS5rZXldW3Jlc10udmFsdWUsXHJcbiAgICAgICAgLyoqIHBlciB2YWxvcmkgdmluY29sYXRpIGEgbGlzdGUgKi9cclxuICAgICAgICBcImFsbG93ZWRWYWx1ZXNcIiA6IHRoaXMuZm9ybXVsYXNbZm9ybXVsYS5rZXldW3Jlc10uYWxsb3dlZFZhbHVlcyxcclxuICAgICAgICBcInNlbGVjdGVkQWxsb3dlZFZhbHVlXCIgOiB0aGlzLmZvcm11bGFzW2Zvcm11bGEua2V5XVtyZXNdLnNlbGVjdGVkQWxsb3dlZFZhbHVlXHJcblxyXG4gICAgICB9KTsgXHJcbiAgICB9KTsgIFxyXG4gICAgLy8tLS0tLS0tLS0tLS1cclxuICAgIC8qICoqKiBvcmlnaW5hbGUgKioqXHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm11bGFzW2Zvcm11bGEua2V5XSkuZm9yRWFjaCgocmVzKSA9PiB7XHJcbiAgICAgIHRoaXMuZm9ybXVsYUZpZWxkc1N0cnVjdHVyZS5wdXNoKHtcImtleVwiOiByZXMsIFwidHlwZVwiOiB0aGlzLmZvcm11bGFzW2Zvcm11bGEua2V5XVtyZXNdLnR5cGVcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgICoqKiAqL1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnQEB0cmlnZ2VyLWNyZWF0b3I6b25DaGFuZ2VGb3JtdWxhIGZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUnLHRoaXMuZm9ybXVsYUZpZWxkc1N0cnVjdHVyZSlcclxuXHJcblxyXG4gICAgdGhpcy5jaGFuZ2VTb21ldGhpbmcoKTtcclxuICB9ICBcclxuICBcclxuICBpc0FuQWN0aW9uS2V5KGtleSwgZmllbGQ6IEFjdGlvbkJ1dHRvbiwgZm9ybXVsYXM6IEFycmF5PGFueT4pe1xyXG4gICAgdmFyIGNvZGUgPSBmaWVsZC5CdXR0b25Db2RlO1xyXG4gICAgdmFyIGVscyA9IGZvcm11bGFzW2NvZGVdO1xyXG4gICAgcmV0dXJuIChPYmplY3Qua2V5cyhlbHMpLmZpbmQoeCA9PiB4ID09IGtleSkgIT0gbnVsbCk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCJcclxuPG1hdC1jYXJkIGNsYXNzPVwiYWRkLWZvcm0tZmllbGRcIj5cclxuICAgIDxtYXQtY2FyZC1oZWFkZXIgKm5nSWY9XCIhSW5GaWVsZFwiPlxyXG4gICAgICAgIDxtYXQtY2FyZC10aXRsZT5cclxuICAgICAgICAgICAge3thY3Rpb25CdXR0b24gIT0gbnVsbCA/IFwiTW9kaWZpY2FcIiA6IFwiQWdnaXVuZ2lcIn19IGJvdHRvbmUgYXppb25lXHJcbiAgICAgICAgPC9tYXQtY2FyZC10aXRsZT5cclxuICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG5cclxuICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWQgY29udGFpbmVyQ29udGVudCBwYWRkZXJcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj5UaXBvIEFjdGlvbiBCdXR0b248L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBbYXJyYXlEYXRhXT1cImZvcm11bGFLZXlzXCIgWyhuZ01vZGVsSW5wdXQpXT1cInNlbGVjdGVkRm9ybXVsYVwiXHJcbiAgICAgICAgICAgICAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCIna2V5J1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ2tleSdcIiBbc2hvd0NhbmNlbEJ1dHRvbl09XCJ0cnVlXCIgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkNoYW5nZUZvcm11bGEoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+RXRpY2hldHRhPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgIGNsYXNzPVwicHQtMVwiPiBFdGljaGV0dGEgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwiYWN0aW9uQnV0dG9uLkJ1dHRvbkxhYmVsXCIgW3JlYWRvbmx5XT1cImZhbHNlXCIgKGtleXVwKT1cImNoYW5nZVNvbWV0aGluZygpXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj5JY29uYSAoPGEgaHJlZj0naHR0cHM6Ly93d3cuYW5ndWxhcmpzd2lraS5jb20vYW5ndWxhci9hbmd1bGFyLW1hdGVyaWFsLWljb25zLWxpc3QtbWF0LWljb24tbGlzdCcgdGFyZ2V0PVwiX2JsYW5rXCI+bGlzdGE8L2E+KTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsICBjbGFzcz1cInB0LTFcIj4gSWNvbmEgTWF0ZXJpYWwgKDxhIGhyZWY9J2h0dHBzOi8vd3d3LmFuZ3VsYXJqc3dpa2kuY29tL2FuZ3VsYXIvYW5ndWxhci1tYXRlcmlhbC1pY29ucy1saXN0LW1hdC1pY29uLWxpc3QnIHRhcmdldD1cIl9ibGFua1wiPmxpc3RhPC9hPikgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwiYWN0aW9uQnV0dG9uLkljb25cIiBbcmVhZG9ubHldPVwiZmFsc2VcIiAoa2V5dXApPVwiY2hhbmdlU29tZXRoaW5nKClcIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+ICAgXHJcbiAgICAgICAgICBcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIiFJbkZpZWxkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlNlemlvbmk8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsICBjbGFzcz1cInB0LTFcIj4gU2V6aW9uaSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgIFtlbnVtRGF0YV09XCJhY3Rpb25zRmxhZ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtpc1NlYXJjaGFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtpc011bHRpU2VsZWN0XSA9IFwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJhY3Rpb25CdXR0b24uU2hvd0luXCIgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbElucHV0Q2hhbmdlKT1cImNoYW5nZVNvbWV0aGluZygpXCIgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+ICAgXHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdGb3I9XCJsZXQgZm9ybXVsYUZpZWxkIG9mIGZvcm11bGFGaWVsZHNTdHJ1Y3R1cmVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+e3tmb3JtdWxhRmllbGQua2V5fX08L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCIgKm5nSWY9XCJmb3JtdWxhRmllbGQudHlwZSA9PSB0cmlnZ2VyUHJvcGVydHlUeXBlLlNUUklOR1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgIGNsYXNzPVwicHQtMVwiPiB7e2Zvcm11bGFGaWVsZC5rZXl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbcmVhZG9ubHldPVwiZmFsc2VcIiBbcmVxdWlyZWRdPVwiZmFsc2VcIiBbbWF0VG9vbHRpcF09XCJmb3JtdWxhRmllbGQudG9vbHRpcFwiIChjbGljayk9XCJvcGVuRm9ybXVsYURpYWxvZyhmb3JtdWxhRmllbGQpXCIgWyhuZ01vZGVsKV09XCJmb3JtdWxhRmllbGQudmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZvcm11bGFGaWVsZENoYW5nZShmb3JtdWxhRmllbGQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBpIGNhbXBpIGNvbiB2YWxvcmkobm9uIGNhbGNvbGF0aSkgdmluY29sYXRpIGxpIG1vc3RybyBpbiB1bmEgc2VsZWN0LS0+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIiAqbmdJZj1cImZvcm11bGFGaWVsZC50eXBlID09IHRyaWdnZXJQcm9wZXJ0eVR5cGUuRFJPUERPV05fTElTVFwiPlxyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGV6aW9uYSB2YWxvcmUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2FycmF5RGF0YV09XCJmb3JtdWxhRmllbGQuYWxsb3dlZFZhbHVlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25Ecm9wRG93blNlbGVjdGlvbigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cImZvcm11bGFGaWVsZC5zZWxlY3RlZEFsbG93ZWRWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidrZXknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2lzUmVxdWlyZWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVxcC1mb3JtLWZpZWxkIGVxcC1jb2xvdXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwhLS0gZmluZSBnZXN0aW9uZSBsaXN0ZS0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIiAqbmdJZj1cImZvcm11bGFGaWVsZC50eXBlID09IHRyaWdnZXJQcm9wZXJ0eVR5cGUuRE1NT0RVTEVcIj5cclxuICAgICAgICAgICAgICAgIDxlcXAtc2VsZWN0IFtwbGFjZWhvbGRlcl09XCInU2VsZXppb25hIG1vZHVsbydcIiBbYXJyYXlEYXRhXT1cImZvcm1zXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZvcm11bGFGaWVsZC5vYmplY3RcIiBbaXNTZWFyY2hhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ0lEJ1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ05hbWUnXCIgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCIgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkVxcFNlbGVjdE1vZHVsZSgkZXZlbnQsIGZvcm11bGFGaWVsZClcIj5cclxuICAgICAgICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPG1hdC1jYXJkLWZvb3RlciAqbmdJZj1cIiFJbkZpZWxkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG10LTIgbWItMSBtZS0zXCI+IFxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibXItMlwiIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2F2ZU9yRXhpdEZvcm0odHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgIEFubnVsbGFcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZU9yRXhpdEZvcm0oZmFsc2UpXCIgW2Rpc2FibGVkXT1cImlzU2F2aW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc1NhdmluZ1wiPlNhbHZhPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1NhdmluZ1wiPlNhbHZhdGFnZ2lvIGluIENvcnNvLi4uPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LWNhcmQtZm9vdGVyPlxyXG5cclxuPC9tYXQtY2FyZD5cclxuXHJcbjwhLS1ESUFMT0cgUEVSIFNFTVBMSUZJQ0FSRSBMQSBTQ1JJVFRVUkEgREVMIENBTVBPIEZPUk1VTEEtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dGb3JtdWxhPlxyXG4gICAgPGVxcC1keW5hbWljLW1vZHVsZS1hZGQtZm9ybXVsYS1jb21wb25lbnQ+XHJcbiAgICA8L2VxcC1keW5hbWljLW1vZHVsZS1hZGQtZm9ybXVsYS1jb21wb25lbnQ+XHJcbjwvbmctdGVtcGxhdGU+Il19
|
|
259
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWJ1dHRvbi1jcmVhdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9hY3Rpb24tYnV0dG9uLWNyZWF0b3IvYWN0aW9uLWJ1dHRvbi1jcmVhdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9hY3Rpb24tYnV0dG9uLWNyZWF0b3IvYWN0aW9uLWJ1dHRvbi1jcmVhdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXZILE9BQU8sRUFBNkMsYUFBYSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdkgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBR2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVNqRSxNQUFNLE9BQU8sNEJBQTRCO0lBMEJyQyxZQUFvQixNQUFpQixFQUFVLG9CQUEwQztRQUFyRSxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQVUseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQXZCcEUsaUJBQVksR0FBaUIsSUFBSSxDQUFDO1FBQzdCLHNCQUFpQixHQUFzQixJQUFJLENBQUM7UUFDckQsYUFBUSxHQUFRLElBQUksQ0FBQztRQUV0QixZQUFPLEdBQVksS0FBSyxDQUFDO1FB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QUFZO3NCQUFyQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFXeUMsYUFBYTtzQkFBMUQsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aW9uQnV0dG9uLCBBY3Rpb25GbGFnRW51bSwgVHJpZ2dlclByb3BlcnR5LCBUcmlnZ2VyUHJvcGVydHlUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy90cmlnZ2VyLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsJztcclxuaW1wb3J0IHsgRW5kUG9pbnRDb25maWd1cmF0aW9uLCBFbmRQb2ludERhdGFQYXJhbXMsIFBhcmFtVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgRmllbGRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcblxyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMnO1xyXG5pbXBvcnQgeyBBY3Rpb25CdXR0b25GaWVsZCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9maWVsZHMvYWN0aW9uQnV0dG9uLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYWN0aW9uLWJ1dHRvbi1jcmVhdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uLWJ1dHRvbi1jcmVhdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hY3Rpb24tYnV0dG9uLWNyZWF0b3IuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWN0aW9uQnV0dG9uQ3JlYXRvckNvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dChcImZvcm1cIikgZm9ybTogRm9ybTtcclxuICBASW5wdXQoXCJhY3Rpb25CdXR0b25cIikgYWN0aW9uQnV0dG9uOiBBY3Rpb25CdXR0b24gPSBudWxsO1xyXG4gIEBJbnB1dChcImFjdGlvbkJ1dHRvbkZpZWxkXCIpIGFjdGlvbkJ1dHRvbkZpZWxkOiBBY3Rpb25CdXR0b25GaWVsZCA9IG51bGw7XHJcbiAgQElucHV0KFwiZm9ybXVsYXNcIikgZm9ybXVsYXM6IGFueSA9IG51bGw7XHJcbiAgQElucHV0KFwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCIpIGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gIEBJbnB1dChcIkluRmllbGRcIikgSW5GaWVsZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGZvcm11bGFPYmplY3Q6IGFueSA9IHt9O1xyXG5cclxuICBAT3V0cHV0KCkgb25TYXZlUmVjb3JkOiBFdmVudEVtaXR0ZXI8QWN0aW9uQnV0dG9uPiA9IG5ldyBFdmVudEVtaXR0ZXI8QWN0aW9uQnV0dG9uPigpO1xyXG4gIEBPdXRwdXQoKSBvbkNoYW5nZVNvbWV0aGluZzogRXZlbnRFbWl0dGVyPEFjdGlvbkJ1dHRvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFjdGlvbkJ1dHRvbj4oKTtcclxuXHJcbiAgICBGaWVsZFR5cGVFbnVtID0gRmllbGRUeXBlRW51bTtcclxuICAgIGlzU2F2aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBzZWxlY3RlZEZvcm11bGE6IGFueTtcclxuICAgIGZvcm11bGFLZXlzOiBBcnJheTxhbnk+ID0gbmV3IEFycmF5PGFueT4oKTtcclxuICAgIGZvcm11bGFGaWVsZHNTdHJ1Y3R1cmU6IEFycmF5PGFueT4gPSBuZXcgQXJyYXk8YW55PigpO1xyXG4gICAgYWN0aW9uc0ZsYWcgPSBBY3Rpb25GbGFnRW51bTtcclxuICAgIHRyaWdnZXJQcm9wZXJ0eVR5cGUgPSBUcmlnZ2VyUHJvcGVydHlUeXBlRW51bTtcclxuICBcclxuICAgIGRpYWxvZ0Zvcm11bGFSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICAgIEBWaWV3Q2hpbGQoXCJkaWFsb2dGb3JtdWxhXCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0Zvcm11bGE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgXHJcbiAgICBmb3JtczogQXJyYXk8Rm9ybT47XHJcbiAgXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLCBwcml2YXRlIHV0aWxpdHlIZWxwZXJTZXJ2aWNlOiBVdGlsaXR5SGVscGVyU2VydmljZSl7fVxyXG4gICAgXHJcbiAgICBuZ09uSW5pdCgpe1xyXG5cclxuICAgICAgLy8vXHJcbiAgICAgIC8vLyBRdWVzdG8gY29tcG9uZW50ZSBmdW56aW9uYSBzaWEgcGVyIGkgYm90dG9uaSBkZWkgZmllbGRzIHNpYSBwZXIgaSBib3R0b25pIHN1Z2xpIGhlYWRlciAoYWRkcmVjb3JkLCBsaXN0dmlldyBlY2NldGVyYSlcclxuICAgICAgLy8vIFNlIHNpIHN0YSBsYXZvcmFuZG8gc3VpIGZpZWxkcyDDqCBwb3BvbGF0byAndGhpcy5hY3Rpb25CdXR0b25GaWVsZCcgYWx0cmltZW50aSDDqCBudWxsLlxyXG4gICAgICAvLy9cclxuXHJcbiAgICAgIGlmICh0aGlzLmFjdGlvbkJ1dHRvbkZpZWxkICE9IG51bGwpe1xyXG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9uID0gPEFjdGlvbkJ1dHRvbj50aGlzLmFjdGlvbkJ1dHRvbkZpZWxkO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBpZiAodGhpcy5hY3Rpb25CdXR0b24gIT0gbnVsbCAmJiB0aGlzLmFjdGlvbkJ1dHRvbi5leGVjdXRpb24gIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGb3JtdWxhID0ge307XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZvcm11bGEua2V5ID0gdGhpcy5hY3Rpb25CdXR0b24uZXhlY3V0aW9uO1xyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgIGlmICh0aGlzLmFjdGlvbkJ1dHRvbkZpZWxkID09IG51bGwpe1xyXG4gICAgICAgICAgdGhpcy5mb3JtdWxhRmllbGRzU3RydWN0dXJlID0gbmV3IEFycmF5PGFueT4oKTtcclxuICAgICAgICAgIHRoaXMuZm9ybXVsYXMuZm9yRWFjaCgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybXVsYUZpZWxkc1N0cnVjdHVyZS5wdXNoKHtcImtleVwiOiByZXMua2V5LCBcInR5cGVcIjogdGhpcy5mb3JtdWxhc1t0aGlzLnNlbGVjdGVkRm9ybXVsYS5rZXldW3Jlc10udHlwZSwgXCJ0b29sdGlwXCI6IHRoaXMuZm9ybXVsYXNbdGhpcy5zZWxlY3RlZEZvcm11bGEua2V5XVtyZXNdLnRvb2x0aXB9KTtcclxuICAgICAgICAgIH0pOyAgIFxyXG5cclxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuYWN0aW9uQnV0dG9uLmZvcm11bGFzVGVtcCkuZm9yRWFjaCgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybXVsYUZpZWxkc1N0cnVjdHVyZS5maW5kKHggPT4geC5rZXkgPT0gcmVzKS52YWx1ZSA9IHRoaXMuYWN0aW9uQnV0dG9uLmZvcm11bGFzVGVtcFtyZXNdLnZhbHVlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZm9ybXVsYUZpZWxkc1N0cnVjdHVyZS5wdXNoKHRoaXMuYWN0aW9uQnV0dG9uLmZvcm11bGFzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICovXHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFjdGlvbkJ1dHRvbkZpZWxkID09IG51bGwpe1xyXG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5hY3Rpb25CdXR0b24uZm9ybXVsYXNUZW1wKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzQW5BY3Rpb25LZXkoa2V5LCB0aGlzLmFjdGlvbkJ1dHRvbiwgdGhpcy5mb3JtdWxhcykpeyByZXR1cm47IH1cclxuICAgICAgICAgICAgdGhpcy5mb3JtdWxhRmllbGRzU3RydWN0dXJlLnB1c2godGhpcy5hY3Rpb25CdXR0b24uZm9ybXVsYXNUZW1wW2tleV0pO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUgPSB0aGlzLmFjdGlvbkJ1dHRvbkZpZWxkLmZvcm11bGFzO1xyXG4gICAgICAgIH0gICAgICAgIFxyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuYWN0aW9uQnV0dG9uID09IG51bGwpe1xyXG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9uID0gbmV3IEFjdGlvbkJ1dHRvbigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgZXhlY3V0ZUdldE1vZHVsZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAgIC8vIGFnZ2l1bmdvIHVuIGVsZW1lbnRvIG1vbm9mb3JtdWxhIGRhIGVzZWd1aXJlIHNvbG8gYWxsJ2F6aW9uZSBwZXIgaWwgbW9kdWxvXHJcbiAgICAgIHRoaXMuZm9ybXVsYXMuZXhlY3V0ZV9mb3JtdWxhID0ge307XHJcbiAgICAgIHRoaXMuZm9ybXVsYXMuZXhlY3V0ZV9mb3JtdWxhLmZvcm11bGEgPSBuZXcgVHJpZ2dlclByb3BlcnR5KFRyaWdnZXJQcm9wZXJ0eVR5cGVFbnVtLlNUUklORyk7XHJcblxyXG4gICAgICBpZih0aGlzLmZvcm11bGFzKXtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm11bGFzKS5mb3JFYWNoKChyZXMpID0+IHtcclxuICAgICAgICAgIHRoaXMuZm9ybXVsYUtleXMucHVzaCh7XCJrZXlcIjogcmVzfSk7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm11bGFzW3Jlc10pLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm11bGFzW3Jlc11bcHJvcGVydHldLnR5cGUgPT0gVHJpZ2dlclByb3BlcnR5VHlwZUVudW0uRE1NT0RVTEUpe1xyXG4gICAgICAgICAgICAgIGV4ZWN1dGVHZXRNb2R1bGVzID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChleGVjdXRlR2V0TW9kdWxlcyl7XHJcbiAgICAgICAgdGhpcy5nZXRBbGxNb2R1bGVzKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkZvcm11bGFEaWFsb2coZm9ybXVsYUZpZWxkOiBhbnkpIHtcclxuICAgICAgdGhpcy5kaWFsb2dGb3JtdWxhUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0Zvcm11bGEsIHtcclxuICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgICAgd2lkdGg6IFwiNzUlXCIsXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgZm9ybXVsYTogdGhpcy5mb3JtdWxhRmllbGRzU3RydWN0dXJlLmZpbmQoeCA9PiB4LmtleSA9PSBmb3JtdWxhRmllbGQua2V5KS52YWx1ZSxcclxuICAgICAgICAgIGZpZWxkczogdGhpcy5mb3JtLkZpZWxkcyxcclxuICAgICAgICAgIGZvcm11bGFPYmplY3Q6IHRoaXMuZm9ybXVsYU9iamVjdFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmRpYWxvZ0Zvcm11bGFSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIHZhciBmb3JtdWxhVG9DaGFuZ2UgPSB0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUuZmluZCh4ID0+IHgua2V5ID09IGZvcm11bGFGaWVsZC5rZXkpO1xyXG4gICAgICAgIGZvcm11bGFUb0NoYW5nZS52YWx1ZSA9IHJlc3VsdC5mb3JtdWxhLnRvU3RyaW5nKCkgPT0gXCJcIiA/IG51bGwgOiByZXN1bHQuZm9ybXVsYS50b1N0cmluZygpO1xyXG4gICAgICAgIHRoaXMub25Gb3JtdWxhRmllbGRDaGFuZ2UoZm9ybXVsYVRvQ2hhbmdlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqYWdnaW9ybmEgIHNlbGVjdGVkRm9ybXVsYSBjb24gaWwgdmFsb3JlIHJlc3RpdHVpdG8gZGFsbGEgc2VsZWN0XHJcbiAgICAgKiBxdWkgbm9uIMOoIGNoaWFybyBzZSBlIHF1YW5kbyByaWNoaWFtYXJlIGlsIGNoYW5nZVNvbWV0aGluZyBcclxuICAgICAqICovXHJcbiAgICBvbkRyb3BEb3duU2VsZWN0aW9uKHNlbGVjdGVkQWxsb3dlZFZhbHVlKXtcclxuICAgICAgXHJcbiAgICAgIHRoaXMuY2hhbmdlU29tZXRoaW5nKCk7IC8vIG5vbiBzaSBjYXBpc2NlIGEgY2hlIHNlcnZlLCBhc3NlZ25hIGNvc2VcclxuICAgICAgdGhpcy5zZWxlY3RlZEZvcm11bGEuc2VsZWN0ZWRBbGxvd2VkVmFsdWUgPSBzZWxlY3RlZEFsbG93ZWRWYWx1ZS52YWx1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25Gb3JtdWxhRmllbGRDaGFuZ2UoZm9ybXVsYUZpZWxkOiBhbnkpe1xyXG4gICAgICAgdGhpcy5jaGFuZ2VTb21ldGhpbmcoKTtcclxuICAgIH0gICAgXHJcblxyXG4gICAgb25FcXBTZWxlY3RNb2R1bGUoZXYsIGZvcm11bGFGaWVsZCl7XHJcbiAgICAgIGlmIChldiAhPSBudWxsKXtcclxuICAgICAgICBmb3JtdWxhRmllbGQudmFsdWUgPSBldi5JRDsgICAgXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9ybXVsYUZpZWxkLnZhbHVlID0gXCJcIjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoYW5nZVNvbWV0aGluZygpO1xyXG4gICAgfSAgICBcclxuXHJcbiAgc2F2ZU9yRXhpdEZvcm0oZXhpdDogYm9vbGVhbikge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnYWRkLWZvcm0tcmVjb3JkIHNhdmVSZWNvcmRFdmVudCcpXHJcbiAgICBpZiAoZXhpdCkge1xyXG4gICAgICB0aGlzLm9uU2F2ZVJlY29yZC5lbWl0KG51bGwpO1xyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIGlmICh0aGlzLmFjdGlvbkJ1dHRvbi5CdXR0b25VbmlxdWVJZCA9PSBudWxsKXsgdGhpcy5hY3Rpb25CdXR0b24uQnV0dG9uVW5pcXVlSWQgPSB0aGlzLmdlbmVyYXRlR1VJRCgpOyB9XHJcbiAgICAgIHRoaXMuYWN0aW9uQnV0dG9uLkJ1dHRvbkNvZGUgPSB0aGlzLnNlbGVjdGVkRm9ybXVsYS5rZXk7XHJcblxyXG4gICAgICB0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUuZm9yRWFjaCgoZm9ybXVsYUZpZWxkKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjdGlvbkJ1dHRvbi5mb3JtdWxhcyA9PSBcInVuZGVmaW5lZFwiKXsgdGhpcy5hY3Rpb25CdXR0b24uZm9ybXVsYXMgPSB7fTsgfVxyXG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9uLmZvcm11bGFzVGVtcFtmb3JtdWxhRmllbGQua2V5XSA9IGZvcm11bGFGaWVsZDtcclxuICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbi5leGVjdXRpb24gPSB0aGlzLnNlbGVjdGVkRm9ybXVsYS5rZXk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJBY3Rpb25CdXR0b25DcmVhdG9yQ29tcG9uZW50IHNhdmVPckV4aXRGb3JtKClcIiwgdGhpcy5hY3Rpb25CdXR0b24pO1xyXG4gICAgICB0aGlzLm9uU2F2ZVJlY29yZC5lbWl0KHRoaXMuYWN0aW9uQnV0dG9uKTtcclxuICAgIH1cclxuICB9ICAgIFxyXG5cclxuICBnZW5lcmF0ZUdVSUQoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgY29uc3QgcmFuZG9tTnVtID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMCk7XHJcbiAgICByZXR1cm4gYCR7dGltZXN0YW1wfS0ke3JhbmRvbU51bX1gO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlU29tZXRoaW5nKCl7XHJcbiAgICB0aGlzLmFjdGlvbkJ1dHRvbi5CdXR0b25Db2RlID0gdGhpcy5zZWxlY3RlZEZvcm11bGEua2V5O1xyXG5cclxuICAgIGlmICghdGhpcy5hY3Rpb25CdXR0b24uZm9ybXVsYXNUZW1wKXsgdGhpcy5hY3Rpb25CdXR0b24uZm9ybXVsYXNUZW1wID0ge307IH1cclxuXHJcbiAgICB0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUuZm9yRWFjaCgoZm9ybXVsYUZpZWxkKSA9PiB7XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5hY3Rpb25CdXR0b24uZm9ybXVsYXMgPT0gXCJ1bmRlZmluZWRcIil7IHRoaXMuYWN0aW9uQnV0dG9uLmZvcm11bGFzID0ge307IH1cclxuICAgICAgdGhpcy5hY3Rpb25CdXR0b24uZm9ybXVsYXNUZW1wW2Zvcm11bGFGaWVsZC5rZXldID0gZm9ybXVsYUZpZWxkO1xyXG4gICAgICB0aGlzLmFjdGlvbkJ1dHRvbi5leGVjdXRpb24gPSB0aGlzLnNlbGVjdGVkRm9ybXVsYS5rZXk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm9uQ2hhbmdlU29tZXRoaW5nLmVtaXQodGhpcy5hY3Rpb25CdXR0b24pO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsTW9kdWxlcygpe1xyXG5cclxuICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgUGFyYW1OYW1lOiBcIm9yZ2FpZFwiLFxyXG4gICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uT3JnYUlELFxyXG4gICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEFsbEZvcm1FbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKHJlczogQXJyYXk8Rm9ybT4pID0+IHtcclxuICAgICAgICB0aGlzLmZvcm1zID0gcmVzO1xyXG4gICAgICAgIHRoaXMuZm9ybXMgPSB0aGlzLmZvcm1zLnNvcnQoKHVubywgZHVlKSA9PiB1bm8uTmFtZS5sb2NhbGVDb21wYXJlKGR1ZS5OYW1lKSk7XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybXVsYUZpZWxkc1N0cnVjdHVyZS5mb3JFYWNoKChyZXMpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMudHlwZSA9PSBUcmlnZ2VyUHJvcGVydHlUeXBlRW51bS5ETU1PRFVMRSl7XHJcbiAgICAgICAgICAgIHJlcy5vYmplY3QgPSB0aGlzLmZvcm1zLmZpbmQoeCA9PiB4LklEID09IHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7IH1cclxuICAgICk7ICAgIFxyXG4gIH0gIFxyXG5cclxuICBvbkNoYW5nZUZvcm11bGEoZm9ybXVsYTogYW55KXtcclxuXHJcbiAgICBpZiAoZm9ybXVsYSA9PSBudWxsKXsgIFxyXG4gICAgICB0aGlzLmNoYW5nZVNvbWV0aGluZygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnQEB0cmlnZ2VyLWNyZWF0b3I6b25DaGFuZ2VGb3JtdWxhIHNlbGVjdGVkIGZvcm11bGEnLGZvcm11bGEpXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdAQHRyaWdnZXItY3JlYXRvcjpvbkNoYW5nZUZvcm11bGEgZm9ybXVsYXMnLHRoaXMuZm9ybXVsYXMpXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib25DaGFuZ2VGb3JtdWxhIGZvcm11bGEua2V5XCIsIGZvcm11bGEua2V5KTtcclxuXHJcbiAgICB0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUgPSBuZXcgQXJyYXk8YW55PigpO1xyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLVxyXG4gICAgT2JqZWN0LmtleXModGhpcy5mb3JtdWxhc1tmb3JtdWxhLmtleV0pLmZvckVhY2goKHJlcykgPT4ge1xyXG5cclxuICAgICAgdGhpcy5mb3JtdWxhRmllbGRzU3RydWN0dXJlLnB1c2goe1xyXG4gICAgICAgIFwia2V5XCI6IHJlcywgXHJcbiAgICAgICAgXCJ0eXBlXCI6IHRoaXMuZm9ybXVsYXNbZm9ybXVsYS5rZXldW3Jlc10udHlwZSwgXHJcbiAgICAgICAgXCJ0b29sdGlwXCI6IHRoaXMuZm9ybXVsYXNbZm9ybXVsYS5rZXldW3Jlc10udG9vbHRpcCxcclxuICAgICAgICBcInZhbHVlXCIgOiB0aGlzLmZvcm11bGFzW2Zvcm11bGEua2V5XVtyZXNdLnZhbHVlLFxyXG4gICAgICAgIC8qKiBwZXIgdmFsb3JpIHZpbmNvbGF0aSBhIGxpc3RlICovXHJcbiAgICAgICAgXCJhbGxvd2VkVmFsdWVzXCIgOiB0aGlzLmZvcm11bGFzW2Zvcm11bGEua2V5XVtyZXNdLmFsbG93ZWRWYWx1ZXMsXHJcbiAgICAgICAgXCJzZWxlY3RlZEFsbG93ZWRWYWx1ZVwiIDogdGhpcy5mb3JtdWxhc1tmb3JtdWxhLmtleV1bcmVzXS5zZWxlY3RlZEFsbG93ZWRWYWx1ZVxyXG5cclxuICAgICAgfSk7IFxyXG4gICAgfSk7ICBcclxuICAgIC8vLS0tLS0tLS0tLS0tXHJcbiAgICAvKiAqKiogb3JpZ2luYWxlICoqKlxyXG4gICAgT2JqZWN0LmtleXModGhpcy5mb3JtdWxhc1tmb3JtdWxhLmtleV0pLmZvckVhY2goKHJlcykgPT4ge1xyXG4gICAgICB0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUucHVzaCh7XCJrZXlcIjogcmVzLCBcInR5cGVcIjogdGhpcy5mb3JtdWxhc1tmb3JtdWxhLmtleV1bcmVzXS50eXBlXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICAqKiogKi9cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0BAdHJpZ2dlci1jcmVhdG9yOm9uQ2hhbmdlRm9ybXVsYSBmb3JtdWxhRmllbGRzU3RydWN0dXJlJyx0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUpXHJcblxyXG5cclxuICAgIHRoaXMuY2hhbmdlU29tZXRoaW5nKCk7XHJcbiAgfSAgXHJcbiAgXHJcbiAgaXNBbkFjdGlvbktleShrZXksIGZpZWxkOiBBY3Rpb25CdXR0b24sIGZvcm11bGFzOiBBcnJheTxhbnk+KXtcclxuICAgIHZhciBjb2RlID0gZmllbGQuQnV0dG9uQ29kZTtcclxuICAgIHZhciBlbHMgPSBmb3JtdWxhc1tjb2RlXTtcclxuICAgIHJldHVybiAoT2JqZWN0LmtleXMoZWxzKS5maW5kKHggPT4geCA9PSBrZXkpICE9IG51bGwpO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiXHJcbjxtYXQtY2FyZCBjbGFzcz1cImFkZC1mb3JtLWZpZWxkXCI+XHJcbiAgICA8bWF0LWNhcmQtaGVhZGVyICpuZ0lmPVwiIUluRmllbGRcIj5cclxuICAgICAgICA8bWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgICAgICAgIHt7YWN0aW9uQnV0dG9uICE9IG51bGwgPyBcIk1vZGlmaWNhXCIgOiBcIkFnZ2l1bmdpXCJ9fSBib3R0b25lIGF6aW9uZVxyXG4gICAgICAgIDwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICA8L21hdC1jYXJkLWhlYWRlcj5cclxuXHJcbiAgICA8bWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIGNvbnRhaW5lckNvbnRlbnQgcGFkZGVyXCI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+VGlwbyBBY3Rpb24gQnV0dG9uPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOVwiPlxyXG4gICAgICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2FycmF5RGF0YV09XCJmb3JtdWxhS2V5c1wiIFsobmdNb2RlbElucHV0KV09XCJzZWxlY3RlZEZvcm11bGFcIlxyXG4gICAgICAgICAgICAgICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ2tleSdcIiBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIidrZXknXCIgW3Nob3dDYW5jZWxCdXR0b25dPVwidHJ1ZVwiIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25DaGFuZ2VGb3JtdWxhKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDwvZXFwLXNlbGVjdD4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPkV0aWNoZXR0YTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsICBjbGFzcz1cInB0LTFcIj4gRXRpY2hldHRhIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImFjdGlvbkJ1dHRvbi5CdXR0b25MYWJlbFwiIFtyZWFkb25seV09XCJmYWxzZVwiIChrZXl1cCk9XCJjaGFuZ2VTb21ldGhpbmcoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+SWNvbmEgKDxhIGhyZWY9J2h0dHBzOi8vd3d3LmFuZ3VsYXJqc3dpa2kuY29tL2FuZ3VsYXIvYW5ndWxhci1tYXRlcmlhbC1pY29ucy1saXN0LW1hdC1pY29uLWxpc3QnIHRhcmdldD1cIl9ibGFua1wiPmxpc3RhPC9hPik8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCAgY2xhc3M9XCJwdC0xXCI+IEljb25hIE1hdGVyaWFsICg8YSBocmVmPSdodHRwczovL3d3dy5hbmd1bGFyanN3aWtpLmNvbS9hbmd1bGFyL2FuZ3VsYXItbWF0ZXJpYWwtaWNvbnMtbGlzdC1tYXQtaWNvbi1saXN0JyB0YXJnZXQ9XCJfYmxhbmtcIj5saXN0YTwvYT4pIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImFjdGlvbkJ1dHRvbi5JY29uXCIgW3JlYWRvbmx5XT1cImZhbHNlXCIgKGtleXVwKT1cImNoYW5nZVNvbWV0aGluZygpXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PiAgIFxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCIhSW5GaWVsZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj5TZXppb25pPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCAgY2xhc3M9XCJwdC0xXCI+IFNlemlvbmkgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICBbZW51bURhdGFdPVwiYWN0aW9uc0ZsYWdcIlxyXG4gICAgICAgICAgICAgICAgICBbaXNTZWFyY2hhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbaXNNdWx0aVNlbGVjdF0gPSBcInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwiYWN0aW9uQnV0dG9uLlNob3dJblwiICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJjaGFuZ2VTb21ldGhpbmcoKVwiICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PiAgIFxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nRm9yPVwibGV0IGZvcm11bGFGaWVsZCBvZiBmb3JtdWxhRmllbGRzU3RydWN0dXJlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPnt7Zm9ybXVsYUZpZWxkLmtleX19PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOVwiICpuZ0lmPVwiZm9ybXVsYUZpZWxkLnR5cGUgPT0gdHJpZ2dlclByb3BlcnR5VHlwZS5TVFJJTkdcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsICBjbGFzcz1cInB0LTFcIj4ge3tmb3JtdWxhRmllbGQua2V5fX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW3JlYWRvbmx5XT1cImZhbHNlXCIgW3JlcXVpcmVkXT1cImZhbHNlXCIgW21hdFRvb2x0aXBdPVwiZm9ybXVsYUZpZWxkLnRvb2x0aXBcIiAoY2xpY2spPVwib3BlbkZvcm11bGFEaWFsb2coZm9ybXVsYUZpZWxkKVwiIFsobmdNb2RlbCldPVwiZm9ybXVsYUZpZWxkLnZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25Gb3JtdWxhRmllbGRDaGFuZ2UoZm9ybXVsYUZpZWxkKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gaSBjYW1waSBjb24gdmFsb3JpKG5vbiBjYWxjb2xhdGkpIHZpbmNvbGF0aSBsaSBtb3N0cm8gaW4gdW5hIHNlbGVjdC0tPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCIgKm5nSWY9XCJmb3JtdWxhRmllbGQudHlwZSA9PSB0cmlnZ2VyUHJvcGVydHlUeXBlLkRST1BET1dOX0xJU1RcIj5cclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPGVxcC1zZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlemlvbmEgdmFsb3JlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheURhdGFdPVwiZm9ybXVsYUZpZWxkLmFsbG93ZWRWYWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbElucHV0Q2hhbmdlKT1cIm9uRHJvcERvd25TZWxlY3Rpb24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJmb3JtdWxhRmllbGQuc2VsZWN0ZWRBbGxvd2VkVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCIna2V5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ3ZhbHVlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc1JlcXVpcmVkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlcXAtZm9ybS1maWVsZCBlcXAtY29sb3VyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8IS0tIGZpbmUgZ2VzdGlvbmUgbGlzdGUtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCIgKm5nSWY9XCJmb3JtdWxhRmllbGQudHlwZSA9PSB0cmlnZ2VyUHJvcGVydHlUeXBlLkRNTU9EVUxFXCI+XHJcbiAgICAgICAgICAgICAgICA8ZXFwLXNlbGVjdCBbcGxhY2Vob2xkZXJdPVwiJ1NlbGV6aW9uYSBtb2R1bG8nXCIgW2FycmF5RGF0YV09XCJmb3Jtc1wiIFsobmdNb2RlbElucHV0KV09XCJmb3JtdWxhRmllbGQub2JqZWN0XCIgW2lzU2VhcmNoYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidJRCdcIiBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIidOYW1lJ1wiIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25FcXBTZWxlY3RNb2R1bGUoJGV2ZW50LCBmb3JtdWxhRmllbGQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgIDxtYXQtY2FyZC1mb290ZXIgKm5nSWY9XCIhSW5GaWVsZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBtdC0yIG1iLTEgbWUtM1wiPiBcclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1yLTJcIiBtYXQtcmFpc2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNhdmVPckV4aXRGb3JtKHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICBBbm51bGxhXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibXItMlwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVPckV4aXRGb3JtKGZhbHNlKVwiIFtkaXNhYmxlZF09XCJpc1NhdmluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNTYXZpbmdcIj5TYWx2YTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNTYXZpbmdcIj5TYWx2YXRhZ2dpbyBpbiBDb3Jzby4uLjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1jYXJkLWZvb3Rlcj5cclxuXHJcbjwvbWF0LWNhcmQ+XHJcblxyXG48IS0tRElBTE9HIFBFUiBTRU1QTElGSUNBUkUgTEEgU0NSSVRUVVJBIERFTCBDQU1QTyBGT1JNVUxBLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGlhbG9nRm9ybXVsYT5cclxuICAgIDxlcXAtZHluYW1pYy1tb2R1bGUtYWRkLWZvcm11bGEtY29tcG9uZW50PlxyXG4gICAgPC9lcXAtZHluYW1pYy1tb2R1bGUtYWRkLWZvcm11bGEtY29tcG9uZW50PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|