@qbs-origin/origin-form 0.6.2 → 0.6.5
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/esm2022/lib/formly/formly-checkboxes/formly-checkboxes.component.mjs +73 -0
- package/esm2022/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.mjs +52 -12
- package/esm2022/lib/formly/formly-field-stepper/formly-field-stepper.component.mjs +15 -3
- package/esm2022/lib/model-population.helper.mjs +45 -1
- package/esm2022/lib/models/forms.model.mjs +4 -2
- package/esm2022/lib/origin-form.component.mjs +61 -13
- package/esm2022/lib/origin-form.module.mjs +6 -1
- package/esm2022/lib/services/proxy.service.mjs +2 -2
- package/esm2022/lib/shared-components/dictionaries-tree.component.mjs +10 -3
- package/esm2022/lib/shared-components/treeview/treeview.component.mjs +19 -3
- package/fesm2022/qbs-origin-origin-form.mjs +268 -31
- package/fesm2022/qbs-origin-origin-form.mjs.map +1 -1
- package/lib/formly/formly-checkboxes/formly-checkboxes.component.d.ts +17 -0
- package/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.d.ts +3 -0
- package/lib/model-population.helper.d.ts +1 -0
- package/lib/models/forms.model.d.ts +7 -1
- package/lib/origin-form.module.d.ts +64 -63
- package/lib/shared-components/treeview/treeview.component.d.ts +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { FieldType } from '@ngx-formly/core';
|
|
3
|
+
import { FormControl } from '@angular/forms';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
import * as i2 from "ngx-markdown";
|
|
7
|
+
import * as i3 from "@angular/material/checkbox";
|
|
8
|
+
import * as i4 from "@ngx-formly/core";
|
|
9
|
+
import * as i5 from "../../others/external-link.directive";
|
|
10
|
+
export class FormlyCheckboxesComponent extends FieldType {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this.checkboxOptionsList = [];
|
|
14
|
+
this.title = '';
|
|
15
|
+
this.langIso = 'en';
|
|
16
|
+
this.selectedValues = [];
|
|
17
|
+
}
|
|
18
|
+
ngOnInit() {
|
|
19
|
+
this.langIso = this.props['currentLanguageIso'];
|
|
20
|
+
this.title = this.props['label'] || '';
|
|
21
|
+
if (this.props.required) {
|
|
22
|
+
this.title += ' *';
|
|
23
|
+
}
|
|
24
|
+
if (Array.isArray(this.to.options)) {
|
|
25
|
+
this.checkboxOptionsList = this.to.options;
|
|
26
|
+
}
|
|
27
|
+
// Initialize selected values from form control
|
|
28
|
+
const currentValue = this.formControl.value;
|
|
29
|
+
if (Array.isArray(currentValue)) {
|
|
30
|
+
this.selectedValues = currentValue;
|
|
31
|
+
}
|
|
32
|
+
else if (currentValue && currentValue.id) {
|
|
33
|
+
this.selectedValues = [currentValue];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
get formControl() {
|
|
37
|
+
if (this.field.key) {
|
|
38
|
+
const keyPath = typeof this.field.key === 'string' || Array.isArray(this.field.key)
|
|
39
|
+
? this.field.key
|
|
40
|
+
: String(this.field.key);
|
|
41
|
+
return this.form.get(keyPath);
|
|
42
|
+
}
|
|
43
|
+
return new FormControl();
|
|
44
|
+
}
|
|
45
|
+
isChecked(option) {
|
|
46
|
+
return this.selectedValues.some((v) => v.id === option.value.id);
|
|
47
|
+
}
|
|
48
|
+
onCheckboxChange(event, option) {
|
|
49
|
+
if (event.checked) {
|
|
50
|
+
// Add to selection
|
|
51
|
+
if (!this.isChecked(option)) {
|
|
52
|
+
this.selectedValues = [...this.selectedValues, option.value];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// Remove from selection
|
|
57
|
+
this.selectedValues = this.selectedValues.filter((v) => v.id !== option.value.id);
|
|
58
|
+
}
|
|
59
|
+
// Update form control with array of values
|
|
60
|
+
this.formControl.setValue(this.selectedValues);
|
|
61
|
+
// Notify parent component
|
|
62
|
+
if (this.props['onSelectedValuesChanged']) {
|
|
63
|
+
this.props['onSelectedValuesChanged'](this.selectedValues);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyCheckboxesComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
67
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FormlyCheckboxesComponent, selector: "formly-checkboxes", usesInheritance: true, ngImport: i0, template: "<div class=\"mat-mdc-text-field-wrapper mdc-checkbox-field\" appExternalLink>\n <label class=\"checkbox-label\">\n <markdown [data]=\"title\"></markdown>\n </label>\n <div *ngIf=\"checkboxOptionsList.length > 0\" class=\"checkbox-list\">\n <ng-container *ngFor=\"let option of checkboxOptionsList\">\n <div class=\"checkbox-item\">\n <mat-checkbox\n [checked]=\"isChecked(option)\"\n (change)=\"onCheckboxChange($event, option)\"\n color=\"primary\">\n {{ option.label }}\n </mat-checkbox>\n </div>\n </ng-container>\n </div>\n <div *ngIf=\"showError\" class=\"validation-error\">\n <formly-validation-message [field]=\"field\"></formly-validation-message>\n </div>\n</div>\n", styles: [".mdc-checkbox-field .checkbox-label{display:block;margin-bottom:8px}.mdc-checkbox-field .checkbox-list{display:flex;flex-direction:column;gap:4px}.mdc-checkbox-field .checkbox-item{padding:4px 0}.mdc-checkbox-field .validation-error{color:red;font-size:12px;margin-top:4px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "disableSanitizer", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }, { kind: "component", type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i4.ɵFormlyValidationMessage, selector: "formly-validation-message", inputs: ["field"] }, { kind: "directive", type: i5.ExternalLinkDirective, selector: "[appExternalLink]" }] }); }
|
|
68
|
+
}
|
|
69
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyCheckboxesComponent, decorators: [{
|
|
70
|
+
type: Component,
|
|
71
|
+
args: [{ selector: 'formly-checkboxes', template: "<div class=\"mat-mdc-text-field-wrapper mdc-checkbox-field\" appExternalLink>\n <label class=\"checkbox-label\">\n <markdown [data]=\"title\"></markdown>\n </label>\n <div *ngIf=\"checkboxOptionsList.length > 0\" class=\"checkbox-list\">\n <ng-container *ngFor=\"let option of checkboxOptionsList\">\n <div class=\"checkbox-item\">\n <mat-checkbox\n [checked]=\"isChecked(option)\"\n (change)=\"onCheckboxChange($event, option)\"\n color=\"primary\">\n {{ option.label }}\n </mat-checkbox>\n </div>\n </ng-container>\n </div>\n <div *ngIf=\"showError\" class=\"validation-error\">\n <formly-validation-message [field]=\"field\"></formly-validation-message>\n </div>\n</div>\n", styles: [".mdc-checkbox-field .checkbox-label{display:block;margin-bottom:8px}.mdc-checkbox-field .checkbox-list{display:flex;flex-direction:column;gap:4px}.mdc-checkbox-field .checkbox-item{padding:4px 0}.mdc-checkbox-field .validation-error{color:red;font-size:12px;margin-top:4px}\n"] }]
|
|
72
|
+
}] });
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWNoZWNrYm94ZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LWNoZWNrYm94ZXMvZm9ybWx5LWNoZWNrYm94ZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LWNoZWNrYm94ZXMvZm9ybWx5LWNoZWNrYm94ZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBUTdDLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxTQUFTO0lBTHhEOztRQU1FLHdCQUFtQixHQUFVLEVBQUUsQ0FBQztRQUNoQyxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLFlBQU8sR0FBVyxJQUFJLENBQUM7UUFDdkIsbUJBQWMsR0FBVSxFQUFFLENBQUM7S0F5RDVCO0lBdkRDLFFBQVE7UUFDTixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztRQUNyQixDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFDN0MsQ0FBQztRQUVELCtDQUErQztRQUMvQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUM1QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsY0FBYyxHQUFHLFlBQVksQ0FBQztRQUNyQyxDQUFDO2FBQU0sSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQWEsV0FBVztRQUN0QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDbkIsTUFBTSxPQUFPLEdBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztnQkFDakUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRztnQkFDaEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFnQixDQUFDO1FBQy9DLENBQUM7UUFDRCxPQUFPLElBQUksV0FBVyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFXO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBd0IsRUFBRSxNQUFXO1FBQ3BELElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLG1CQUFtQjtZQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvRCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTix3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FDOUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQ2hDLENBQUM7UUFDSixDQUFDO1FBRUQsMkNBQTJDO1FBQzNDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUUvQywwQkFBMEI7UUFDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDOytHQTVEVSx5QkFBeUI7bUdBQXpCLHlCQUF5QixnRkNWdEMsbXZCQW9CQTs7NEZEVmEseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Zvcm1seS1jaGVja2JveGVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm1seS1jaGVja2JveGVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybWx5LWNoZWNrYm94ZXMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybWx5Q2hlY2tib3hlc0NvbXBvbmVudCBleHRlbmRzIEZpZWxkVHlwZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGNoZWNrYm94T3B0aW9uc0xpc3Q6IGFueVtdID0gW107XG4gIHRpdGxlOiBzdHJpbmcgPSAnJztcbiAgbGFuZ0lzbzogc3RyaW5nID0gJ2VuJztcbiAgc2VsZWN0ZWRWYWx1ZXM6IGFueVtdID0gW107XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sYW5nSXNvID0gdGhpcy5wcm9wc1snY3VycmVudExhbmd1YWdlSXNvJ107XG4gICAgdGhpcy50aXRsZSA9IHRoaXMucHJvcHNbJ2xhYmVsJ10gfHwgJyc7XG4gICAgaWYgKHRoaXMucHJvcHMucmVxdWlyZWQpIHtcbiAgICAgIHRoaXMudGl0bGUgKz0gJyAqJztcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy50by5vcHRpb25zKSkge1xuICAgICAgdGhpcy5jaGVja2JveE9wdGlvbnNMaXN0ID0gdGhpcy50by5vcHRpb25zO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgc2VsZWN0ZWQgdmFsdWVzIGZyb20gZm9ybSBjb250cm9sXG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gY3VycmVudFZhbHVlO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudFZhbHVlICYmIGN1cnJlbnRWYWx1ZS5pZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IFtjdXJyZW50VmFsdWVdO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIGdldCBmb3JtQ29udHJvbCgpOiBGb3JtQ29udHJvbCB7XG4gICAgaWYgKHRoaXMuZmllbGQua2V5KSB7XG4gICAgICBjb25zdCBrZXlQYXRoID1cbiAgICAgICAgdHlwZW9mIHRoaXMuZmllbGQua2V5ID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KHRoaXMuZmllbGQua2V5KVxuICAgICAgICAgID8gdGhpcy5maWVsZC5rZXlcbiAgICAgICAgICA6IFN0cmluZyh0aGlzLmZpZWxkLmtleSk7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtLmdldChrZXlQYXRoKSBhcyBGb3JtQ29udHJvbDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBGb3JtQ29udHJvbCgpO1xuICB9XG5cbiAgaXNDaGVja2VkKG9wdGlvbjogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuc29tZSgodikgPT4gdi5pZCA9PT0gb3B0aW9uLnZhbHVlLmlkKTtcbiAgfVxuXG4gIG9uQ2hlY2tib3hDaGFuZ2UoZXZlbnQ6IE1hdENoZWNrYm94Q2hhbmdlLCBvcHRpb246IGFueSk6IHZvaWQge1xuICAgIGlmIChldmVudC5jaGVja2VkKSB7XG4gICAgICAvLyBBZGQgdG8gc2VsZWN0aW9uXG4gICAgICBpZiAoIXRoaXMuaXNDaGVja2VkKG9wdGlvbikpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IFsuLi50aGlzLnNlbGVjdGVkVmFsdWVzLCBvcHRpb24udmFsdWVdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZW1vdmUgZnJvbSBzZWxlY3Rpb25cbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSB0aGlzLnNlbGVjdGVkVmFsdWVzLmZpbHRlcihcbiAgICAgICAgKHYpID0+IHYuaWQgIT09IG9wdGlvbi52YWx1ZS5pZFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgZm9ybSBjb250cm9sIHdpdGggYXJyYXkgb2YgdmFsdWVzXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWVzKTtcblxuICAgIC8vIE5vdGlmeSBwYXJlbnQgY29tcG9uZW50XG4gICAgaWYgKHRoaXMucHJvcHNbJ29uU2VsZWN0ZWRWYWx1ZXNDaGFuZ2VkJ10pIHtcbiAgICAgIHRoaXMucHJvcHNbJ29uU2VsZWN0ZWRWYWx1ZXNDaGFuZ2VkJ10odGhpcy5zZWxlY3RlZFZhbHVlcyk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIgbWRjLWNoZWNrYm94LWZpZWxkXCIgYXBwRXh0ZXJuYWxMaW5rPlxuICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveC1sYWJlbFwiPlxuICAgIDxtYXJrZG93biBbZGF0YV09XCJ0aXRsZVwiPjwvbWFya2Rvd24+XG4gIDwvbGFiZWw+XG4gIDxkaXYgKm5nSWY9XCJjaGVja2JveE9wdGlvbnNMaXN0Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImNoZWNrYm94LWxpc3RcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY2hlY2tib3hPcHRpb25zTGlzdFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94LWl0ZW1cIj5cbiAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgIFtjaGVja2VkXT1cImlzQ2hlY2tlZChvcHRpb24pXCJcbiAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hlY2tib3hDaGFuZ2UoJGV2ZW50LCBvcHRpb24pXCJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cbiAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJzaG93RXJyb3JcIiBjbGFzcz1cInZhbGlkYXRpb24tZXJyb3JcIj5cbiAgICA8Zm9ybWx5LXZhbGlkYXRpb24tbWVzc2FnZSBbZmllbGRdPVwiZmllbGRcIj48L2Zvcm1seS12YWxpZGF0aW9uLW1lc3NhZ2U+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -28,6 +28,9 @@ export class FormlyDictionaryDropdownTreeComponent extends FieldType {
|
|
|
28
28
|
this.valuesIdsToShow = [];
|
|
29
29
|
this.selectedRelatedDictionaries = [];
|
|
30
30
|
this.dictionaryLabels = {};
|
|
31
|
+
// Multiple selection support
|
|
32
|
+
this.allowMultipleSelection = false;
|
|
33
|
+
this.selectedValues = [];
|
|
31
34
|
// NEW: Properties for preloaded dictionary data
|
|
32
35
|
this.preloadedDictionary = null;
|
|
33
36
|
this.preloadedDictionaries = null;
|
|
@@ -50,6 +53,10 @@ export class FormlyDictionaryDropdownTreeComponent extends FieldType {
|
|
|
50
53
|
if (this.props['dictionaryLabels']) {
|
|
51
54
|
this.dictionaryLabels = this.props['dictionaryLabels'];
|
|
52
55
|
}
|
|
56
|
+
// Initialize multiple selection
|
|
57
|
+
if (this.props['allowMultipleSelection']) {
|
|
58
|
+
this.allowMultipleSelection = this.props['allowMultipleSelection'];
|
|
59
|
+
}
|
|
53
60
|
// NEW: Initialize preloaded dictionary data
|
|
54
61
|
if (this.props['dictionaryData']) {
|
|
55
62
|
this.preloadedDictionary = this.props['dictionaryData'];
|
|
@@ -178,11 +185,24 @@ export class FormlyDictionaryDropdownTreeComponent extends FieldType {
|
|
|
178
185
|
}
|
|
179
186
|
onSelectedDictionaryValuesChanged(values) {
|
|
180
187
|
if (values && values.length > 0) {
|
|
181
|
-
this.
|
|
182
|
-
|
|
183
|
-
this.
|
|
188
|
+
if (this.allowMultipleSelection) {
|
|
189
|
+
// Multiple selection mode
|
|
190
|
+
this.selectedValues = values;
|
|
191
|
+
this.selectedValueIds = values.map(v => v.id);
|
|
192
|
+
this.formControl.setValue(values);
|
|
193
|
+
this.updateSelectedValueText();
|
|
194
|
+
if (this.props['onSelectedValuesChanged']) {
|
|
195
|
+
this.props['onSelectedValuesChanged'](values);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
// Single selection mode
|
|
200
|
+
this.selectedValue = values[0];
|
|
201
|
+
if (this.autocompleteTrigger) {
|
|
202
|
+
this.autocompleteTrigger.closePanel();
|
|
203
|
+
}
|
|
204
|
+
this.onSelectedValueChanged(this.selectedValue);
|
|
184
205
|
}
|
|
185
|
-
this.onSelectedValueChanged(this.selectedValue);
|
|
186
206
|
if (this.autoInput) {
|
|
187
207
|
this.autoInput.nativeElement.value = this.filteredText = '';
|
|
188
208
|
}
|
|
@@ -213,6 +233,23 @@ export class FormlyDictionaryDropdownTreeComponent extends FieldType {
|
|
|
213
233
|
}
|
|
214
234
|
}
|
|
215
235
|
updateSelectedValueText() {
|
|
236
|
+
if (this.allowMultipleSelection) {
|
|
237
|
+
// Multiple selection mode - show comma-separated values
|
|
238
|
+
const formValue = this.formControl?.value;
|
|
239
|
+
if (Array.isArray(formValue) && formValue.length > 0) {
|
|
240
|
+
this.selectedValues = formValue;
|
|
241
|
+
this.selectedValueIds = formValue.map(v => v.id);
|
|
242
|
+
const texts = formValue.map(v => this.getValueDisplayText(v));
|
|
243
|
+
this.selectedValueText = texts.join(', ');
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
this.selectedValueText = '';
|
|
247
|
+
this.selectedValues = [];
|
|
248
|
+
this.selectedValueIds = [];
|
|
249
|
+
}
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
// Single selection mode
|
|
216
253
|
if (!this.selectedValue) {
|
|
217
254
|
const formValue = this.formControl?.value;
|
|
218
255
|
if (formValue && typeof formValue === 'object' && formValue.id) {
|
|
@@ -229,24 +266,27 @@ export class FormlyDictionaryDropdownTreeComponent extends FieldType {
|
|
|
229
266
|
return;
|
|
230
267
|
}
|
|
231
268
|
}
|
|
232
|
-
|
|
269
|
+
this.selectedValueText = this.getValueDisplayText(this.selectedValue);
|
|
270
|
+
}
|
|
271
|
+
getValueDisplayText(value) {
|
|
272
|
+
if (!value)
|
|
273
|
+
return '';
|
|
274
|
+
const translation = value.translations?.find((t) => t.languageId === this.currentLanguageId ||
|
|
233
275
|
t.languageIso === this.currentLanguageIso);
|
|
234
276
|
if (translation) {
|
|
235
|
-
|
|
236
|
-
}
|
|
237
|
-
else {
|
|
238
|
-
this.selectedValueText = this.selectedValue.name || '';
|
|
277
|
+
return translation.value;
|
|
239
278
|
}
|
|
279
|
+
return value.name || '';
|
|
240
280
|
}
|
|
241
281
|
getDictionaryLabel(dictionaryId) {
|
|
242
282
|
return this.dictionaryLabels[dictionaryId] || '';
|
|
243
283
|
}
|
|
244
284
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyDictionaryDropdownTreeComponent, deps: [{ token: i1.DictionaryService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
245
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FormlyDictionaryDropdownTreeComponent, selector: "formly-dictionary-dropdown-tree", inputs: { dictionaryId: "dictionaryId" }, outputs: { selectedValue: "selectedValue" }, viewQueries: [{ propertyName: "autocompleteTrigger", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "autoInput", first: true, predicate: ["autoInput"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<form>\n <mat-label class=\"component-data-label m-l-2\" [ngStyle]=\"labelStyle\">\n {{ label }}</mat-label\n >\n <mat-form-field class=\"full-width\">\n <input\n type=\"text\"\n placeholder=\"{{ selectedValueText }}\"\n #autoInput\n aria-label=\"Text\"\n matInput\n [matAutocomplete]=\"auto\"\n (input)=\"filterChanged($event)\"\n (focus)=\"openAutocomplete()\"\n />\n <mat-icon matSuffix (click)=\"toggleAutocomplete($event)\"\n >keyboard_arrow_down</mat-icon\n >\n <mat-autocomplete\n #matAutocomplete=\"matAutocomplete\"\n #auto=\"matAutocomplete\"\n autoActiveFirstOption\n (optionSelected)=\"\n onSelectedDictionaryValuesChanged([$event.option.value])\n \"\n >\n <mat-option disabled>{{\n formlyKeys.selectAnItem | translate\n }}</mat-option>\n <app-dictionaries-tree\n [allowCheckItems]=\"
|
|
285
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FormlyDictionaryDropdownTreeComponent, selector: "formly-dictionary-dropdown-tree", inputs: { dictionaryId: "dictionaryId" }, outputs: { selectedValue: "selectedValue" }, viewQueries: [{ propertyName: "autocompleteTrigger", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "autoInput", first: true, predicate: ["autoInput"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<form>\n <mat-label class=\"component-data-label m-l-2\" [ngStyle]=\"labelStyle\">\n {{ label }}</mat-label\n >\n <mat-form-field class=\"full-width\">\n <input\n type=\"text\"\n placeholder=\"{{ selectedValueText }}\"\n #autoInput\n aria-label=\"Text\"\n matInput\n [matAutocomplete]=\"auto\"\n (input)=\"filterChanged($event)\"\n (focus)=\"openAutocomplete()\"\n />\n <mat-icon matSuffix (click)=\"toggleAutocomplete($event)\"\n >keyboard_arrow_down</mat-icon\n >\n <mat-autocomplete\n #matAutocomplete=\"matAutocomplete\"\n #auto=\"matAutocomplete\"\n autoActiveFirstOption\n (optionSelected)=\"\n onSelectedDictionaryValuesChanged([$event.option.value])\n \"\n >\n <mat-option disabled>{{\n formlyKeys.selectAnItem | translate\n }}</mat-option>\n <app-dictionaries-tree\n [allowCheckItems]=\"allowMultipleSelection\"\n [drawReferenceDictionariesAsSeparateNode]=\"false\"\n [drawChildDictionariesAsSeparateNode]=\"false\"\n [drawRootNode]=\"false\"\n [filterText]=\"filteredText\"\n [allowSelectNonLeafNodes]=\"true\"\n [selectedValueIds]=\"selectedValueIds\"\n [languageId]=\"currentLanguageId\"\n [valuesIdsToShow]=\"valuesIdsToShow\"\n [selectedRelatedDictionaries]=\"selectedRelatedDictionaries\"\n [dictionaryLabels]=\"dictionaryLabels\"\n [preloadedDictionary]=\"preloadedDictionary\"\n [preloadedDictionaries]=\"preloadedDictionaries\"\n [usePreloadedData]=\"usePreloadedData\"\n (selectedDictionaryValuesChanged)=\"\n onSelectedDictionaryValuesChanged($event)\n \"\n >\n </app-dictionaries-tree>\n </mat-autocomplete>\n </mat-form-field>\n\n <formly-validation-message *ngIf=\"showError\" [field]=\"field\">\n </formly-validation-message>\n</form>\n", styles: ["formly-validation-message{color:red;font-size:12px}::ng-deep .mat-mdc-autocomplete-panel>app-dictionaries-tree>app-treeview>cdk-virtual-scroll-viewport{overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { 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: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.ɵFormlyValidationMessage, selector: "formly-validation-message", inputs: ["field"] }, { kind: "component", type: i10.DictionariesTreeComponent, selector: "app-dictionaries-tree", inputs: ["dictionaryId", "selectedValueIds", "allowCheckItems", "allowFilter", "drawReferenceDictionariesAsSeparateNode", "drawChildDictionariesAsSeparateNode", "drawRootNode", "filterText", "allowSelectNonLeafNodes", "languageId", "valuesIdsToShow", "hideParentArrow", "preloadedDictionary", "preloadedDictionaries", "usePreloadedData"], outputs: ["selectedDictionaryValuesChanged"] }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }] }); }
|
|
246
286
|
}
|
|
247
287
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlyDictionaryDropdownTreeComponent, decorators: [{
|
|
248
288
|
type: Component,
|
|
249
|
-
args: [{ selector: 'formly-dictionary-dropdown-tree', template: "<form>\n <mat-label class=\"component-data-label m-l-2\" [ngStyle]=\"labelStyle\">\n {{ label }}</mat-label\n >\n <mat-form-field class=\"full-width\">\n <input\n type=\"text\"\n placeholder=\"{{ selectedValueText }}\"\n #autoInput\n aria-label=\"Text\"\n matInput\n [matAutocomplete]=\"auto\"\n (input)=\"filterChanged($event)\"\n (focus)=\"openAutocomplete()\"\n />\n <mat-icon matSuffix (click)=\"toggleAutocomplete($event)\"\n >keyboard_arrow_down</mat-icon\n >\n <mat-autocomplete\n #matAutocomplete=\"matAutocomplete\"\n #auto=\"matAutocomplete\"\n autoActiveFirstOption\n (optionSelected)=\"\n onSelectedDictionaryValuesChanged([$event.option.value])\n \"\n >\n <mat-option disabled>{{\n formlyKeys.selectAnItem | translate\n }}</mat-option>\n <app-dictionaries-tree\n [allowCheckItems]=\"
|
|
289
|
+
args: [{ selector: 'formly-dictionary-dropdown-tree', template: "<form>\n <mat-label class=\"component-data-label m-l-2\" [ngStyle]=\"labelStyle\">\n {{ label }}</mat-label\n >\n <mat-form-field class=\"full-width\">\n <input\n type=\"text\"\n placeholder=\"{{ selectedValueText }}\"\n #autoInput\n aria-label=\"Text\"\n matInput\n [matAutocomplete]=\"auto\"\n (input)=\"filterChanged($event)\"\n (focus)=\"openAutocomplete()\"\n />\n <mat-icon matSuffix (click)=\"toggleAutocomplete($event)\"\n >keyboard_arrow_down</mat-icon\n >\n <mat-autocomplete\n #matAutocomplete=\"matAutocomplete\"\n #auto=\"matAutocomplete\"\n autoActiveFirstOption\n (optionSelected)=\"\n onSelectedDictionaryValuesChanged([$event.option.value])\n \"\n >\n <mat-option disabled>{{\n formlyKeys.selectAnItem | translate\n }}</mat-option>\n <app-dictionaries-tree\n [allowCheckItems]=\"allowMultipleSelection\"\n [drawReferenceDictionariesAsSeparateNode]=\"false\"\n [drawChildDictionariesAsSeparateNode]=\"false\"\n [drawRootNode]=\"false\"\n [filterText]=\"filteredText\"\n [allowSelectNonLeafNodes]=\"true\"\n [selectedValueIds]=\"selectedValueIds\"\n [languageId]=\"currentLanguageId\"\n [valuesIdsToShow]=\"valuesIdsToShow\"\n [selectedRelatedDictionaries]=\"selectedRelatedDictionaries\"\n [dictionaryLabels]=\"dictionaryLabels\"\n [preloadedDictionary]=\"preloadedDictionary\"\n [preloadedDictionaries]=\"preloadedDictionaries\"\n [usePreloadedData]=\"usePreloadedData\"\n (selectedDictionaryValuesChanged)=\"\n onSelectedDictionaryValuesChanged($event)\n \"\n >\n </app-dictionaries-tree>\n </mat-autocomplete>\n </mat-form-field>\n\n <formly-validation-message *ngIf=\"showError\" [field]=\"field\">\n </formly-validation-message>\n</form>\n", styles: ["formly-validation-message{color:red;font-size:12px}::ng-deep .mat-mdc-autocomplete-panel>app-dictionaries-tree>app-treeview>cdk-virtual-scroll-viewport{overflow:hidden}\n"] }]
|
|
250
290
|
}], ctorParameters: () => [{ type: i1.DictionaryService }, { type: i0.ChangeDetectorRef }], propDecorators: { autocompleteTrigger: [{
|
|
251
291
|
type: ViewChild,
|
|
252
292
|
args: [MatAutocompleteTrigger]
|
|
@@ -258,4 +298,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
258
298
|
}], selectedValue: [{
|
|
259
299
|
type: Output
|
|
260
300
|
}] } });
|
|
261
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWRpY3Rpb25hcnktZHJvcGRvd24tdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL2Zvcm1seS9mb3JtbHktZGljdGlvbmFyeS1kcm9wZG93bi10cmVlL2Zvcm1seS1kaWN0aW9uYXJ5LWRyb3Bkb3duLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LWRpY3Rpb25hcnktZHJvcGRvd24tdHJlZS9mb3JtbHktZGljdGlvbmFyeS1kcm9wZG93bi10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVFuRCxNQUFNLE9BQU8scUNBQ1gsU0FBUSxTQUFTO0lBeUJqQixZQUNVLGlCQUFvQyxFQUNwQyxLQUF3QjtRQUVoQyxLQUFLLEVBQUUsQ0FBQztRQUhBLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFsQmxDLGVBQVUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBSTlCLHNCQUFpQixHQUFXLEVBQUUsQ0FBQztRQUMvQixlQUFV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TUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUN2RCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0osQ0FBQyxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsaUJBQWlCO1lBQ3ZDLENBQUMsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLGtCQUFrQixDQUM1QyxDQUFDO1FBQ0YsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUM3QyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDekQsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxZQUFvQjtRQUNyQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkQsQ0FBQzsrR0EvUlUscUNBQXFDO21HQUFyQyxxQ0FBcUMsbU5BSXJDLHNCQUFzQixxTEM3Qm5DLGkzREF1REE7OzRGRDlCYSxxQ0FBcUM7a0JBTGpELFNBQVM7K0JBQ0UsaUNBQWlDO3NIQVMzQyxtQkFBbUI7c0JBRGxCLFNBQVM7dUJBQUMsc0JBQXNCO2dCQUVULFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDYixZQUFZO3NCQUFwQixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGljdGlvbmFyeVZhbHVlLCBUcmFuc2xhdGlvbkR0bywgVHJhbnNsYXRpb24sIERpY3Rpb25hcnlWYWx1ZUR0bywgRGljdGlvbmFyeUR0byB9IGZyb20gJy4uLy4uL21vZGVscy9kaWN0aW9uYXJ5Lm1vZGVsJztcbmltcG9ydCB7IExhbmd1YWdlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2xhbmd1YWdlLm1vZGVsJztcbmltcG9ydCB7IEVudmlyb25tZW50VHlwZSB9IGZyb20gJy4uLy4uL290aGVycy9lbnZpcm9ubWVudC10eXBlJztcbmltcG9ydCB7IERpY3Rpb25hcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGljdGlvbmFyeS5zZXJ2aWNlJztcbmltcG9ydCB7IExhYmVsS2V5cyB9IGZyb20gJy4uLy4uL2VudW1zL2xhYmVsLmtleXMnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Zvcm1seS1kaWN0aW9uYXJ5LWRyb3Bkb3duLXRyZWUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybWx5LWRpY3Rpb25hcnktZHJvcGRvd24tdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm1seS1kaWN0aW9uYXJ5LWRyb3Bkb3duLXRyZWUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybWx5RGljdGlvbmFyeURyb3Bkb3duVHJlZUNvbXBvbmVudFxuICBleHRlbmRzIEZpZWxkVHlwZVxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICBAVmlld0NoaWxkKE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIpXG4gIGF1dG9jb21wbGV0ZVRyaWdnZXI6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXI7XG4gIEBWaWV3Q2hpbGQoJ2F1dG9JbnB1dCcpIGF1dG9JbnB1dDogRWxlbWVudFJlZjtcbiAgQElucHV0KCkgZGljdGlvbmFyeUlkOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBzZWxlY3RlZFZhbHVlOiBEaWN0aW9uYXJ5VmFsdWU7XG4gIGZpbHRlcmVkVGV4dDogc3RyaW5nO1xuICBmb3JtbHlLZXlzID0gTGFiZWxLZXlzLmZvcm1seTtcbiAgbGFiZWw6IHN0cmluZztcbiAgY3VycmVudExhbmd1YWdlSXNvOiBzdHJpbmc7XG4gIGN1cnJlbnRMYW5ndWFnZUlkOiBudW1iZXI7XG4gIHNlbGVjdGVkVmFsdWVUZXh0OiBzdHJpbmcgPSAnJztcbiAgbGFiZWxTdHlsZTogYW55ID0ge307XG4gIHNlbGVjdGVkVmFsdWVJZHM6IG51bWJlcltdID0gW107XG4gIHZhbHVlc0lkc1RvU2hvdzogbnVtYmVyW10gPSBbXTtcbiAgc2VsZWN0ZWRSZWxhdGVkRGljdGlvbmFyaWVzOiBzdHJpbmdbXSA9IFtdO1xuICBkaWN0aW9uYXJ5TGFiZWxzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgLy8gTkVXOiBQcm9wZXJ0aWVzIGZvciBwcmVsb2FkZWQgZGljdGlvbmFyeSBkYXRhXG4gIHByZWxvYWRlZERpY3Rpb25hcnk6IERpY3Rpb25hcnlEdG8gfCBudWxsID0gbnVsbDtcbiAgcHJlbG9hZGVkRGljdGlvbmFyaWVzOiBNYXA8c3RyaW5nLCBEaWN0aW9uYXJ5RHRvPiB8IG51bGwgPSBudWxsO1xuICB1c2VQcmVsb2FkZWREYXRhOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkaWN0aW9uYXJ5U2VydmljZTogRGljdGlvbmFyeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BzWydkaWN0aW9uYXJ5SWQnXSkge1xuICAgICAgdGhpcy5kaWN0aW9uYXJ5SWQgPSB0aGlzLnByb3BzWydkaWN0aW9uYXJ5SWQnXTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHNbJ3ZhbHVlc0lkc1RvU2hvdyddKSB7XG4gICAgICB0aGlzLnZhbHVlc0lkc1RvU2hvdyA9IHRoaXMucHJvcHNbJ3ZhbHVlc0lkc1RvU2hvdyddO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wc1sndmFsdWUnXSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlVGV4dCA9IHRoaXMucHJvcHNbJ3ZhbHVlJ107XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzWydzZWxlY3RlZFJlbGF0ZWREaWN0aW9uYXJpZXMnXSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJlbGF0ZWREaWN0aW9uYXJpZXMgPVxuICAgICAgICB0aGlzLnByb3BzWydzZWxlY3RlZFJlbGF0ZWREaWN0aW9uYXJpZXMnXTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHNbJ2RpY3Rpb25hcnlMYWJlbHMnXSkge1xuICAgICAgdGhpcy5kaWN0aW9uYXJ5TGFiZWxzID0gdGhpcy5wcm9wc1snZGljdGlvbmFyeUxhYmVscyddO1xuICAgIH1cblxuICAgIC8vIE5FVzogSW5pdGlhbGl6ZSBwcmVsb2FkZWQgZGljdGlvbmFyeSBkYXRhXG4gICAgaWYgKHRoaXMucHJvcHNbJ2RpY3Rpb25hcnlEYXRhJ10pIHtcbiAgICAgIHRoaXMucHJlbG9hZGVkRGljdGlvbmFyeSA9IHRoaXMucHJvcHNbJ2RpY3Rpb25hcnlEYXRhJ107XG4gICAgICB0aGlzLnVzZVByZWxvYWRlZERhdGEgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wc1sncHJlbG9hZGVkRGljdGlvbmFyaWVzJ10pIHtcbiAgICAgIHRoaXMucHJlbG9hZGVkRGljdGlvbmFyaWVzID0gdGhpcy5wcm9wc1sncHJlbG9hZGVkRGljdGlvbmFyaWVzJ107XG4gICAgfVxuXG4gICAgdGhpcy5sYWJlbCA9IHRoaXMucHJvcHNbJ2xhYmVsJ10gYXMgc3RyaW5nO1xuICAgIGlmICh0aGlzLnByb3BzLnJlcXVpcmVkKSB7XG4gICAgICB0aGlzLmxhYmVsICs9ICcgKic7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvID0gdGhpcy5wcm9wc1snY3VycmVudExhbmd1YWdlSXNvJ10gYXMgc3RyaW5nO1xuICAgIHRoaXMuY3VycmVudExhbmd1YWdlSWQgPSB0aGlzLnByb3BzWydjdXJyZW50TGFuZ3VhZ2VJZCddIGFzIG51bWJlcjtcblxuICAgIGlmICh0aGlzLnByb3BzWydkZXNpZ24nXSkge1xuICAgICAgdGhpcy5sYWJlbFN0eWxlID0gdGhpcy5wcm9wc1snZGVzaWduJ11bJy5jb21wb25lbnQtZGF0YS1sYWJlbCddIHx8IHt9O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnByb3BzWydzZWxlY3RlZFZhbHVlSWRzJ10gJiZcbiAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5wcm9wc1snc2VsZWN0ZWRWYWx1ZUlkcyddKVxuICAgICkge1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlSWRzID0gdGhpcy5wcm9wc1snc2VsZWN0ZWRWYWx1ZUlkcyddO1xuICAgIH1cblxuICAgIGNvbnN0IGluaXRpYWxDb250cm9sVmFsdWUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xuICAgIGNvbnN0IGRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZCA9IHRoaXMucHJvcHNbJ2RpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZCddIGFzXG4gICAgICB8IG51bWJlclxuICAgICAgfCBudWxsO1xuXG4gICAgaWYgKFxuICAgICAgaW5pdGlhbENvbnRyb2xWYWx1ZSA9PSBudWxsICYmXG4gICAgICBkaWN0aW9uYXJ5RGVmYXVsdFZhbHVlSWQgIT0gbnVsbCAmJlxuICAgICAgdGhpcy5kaWN0aW9uYXJ5SWRcbiAgICApIHtcbiAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSB0aGlzLnByb3BzWydkaWN0aW9uYXJ5RGF0YSddO1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShkaWN0aW9uYXJ5RGVmYXVsdFZhbHVlSWQsIHtcbiAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZGljdGlvbmFyeSkge1xuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWVEdG8gPSBkaWN0aW9uYXJ5LnZhbHVlcz8uZmluZChcbiAgICAgICAgICAodjogRGljdGlvbmFyeVZhbHVlRHRvKSA9PiB2LmlkID09PSBkaWN0aW9uYXJ5RGVmYXVsdFZhbHVlSWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZUR0bykge1xuICAgICAgICAgIGNvbnN0IHZhbHVlVG9TZXQ6IERpY3Rpb25hcnlWYWx1ZSA9IHtcbiAgICAgICAgICAgIGlkOiBkZWZhdWx0VmFsdWVEdG8uaWQsXG4gICAgICAgICAgICBuYW1lOiBkZWZhdWx0VmFsdWVEdG8ubmFtZSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uczpcbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlRHRvLnZhbHVlVHJhbnNsYXRpb25zPy5tYXAoXG4gICAgICAgICAgICAgICAgKHQ6IFRyYW5zbGF0aW9uRHRvKTogVHJhbnNsYXRpb24gPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgbGFuZ3VhZ2VzID0gdGhpcy5wcm9wc1snbGFuZ3VhZ2VzJ10gYXNcbiAgICAgICAgICAgICAgICAgICAgfCBMYW5ndWFnZVtdXG4gICAgICAgICAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbGFuZyA9IGxhbmd1YWdlcz8uZmluZCgobCkgPT4gbC5pZCA9PT0gdC5sYW5ndWFnZUlkKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlSWQ6IHQubGFuZ3VhZ2VJZCxcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VJc286IGxhbmc/LmlzbyA/PyAnJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHQudmFsdWUsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKSB8fCBbXSxcbiAgICAgICAgICAgIGFjdGl2ZTogZGVmYXVsdFZhbHVlRHRvLmFjdGl2ZSxcbiAgICAgICAgICAgIGxvY2tlZDogZGVmYXVsdFZhbHVlRHRvLmxvY2tlZCxcbiAgICAgICAgICAgIGNoaWxkRGljdGlvbmFyeUlkOiBkZWZhdWx0VmFsdWVEdG8uY2hpbGREaWN0aW9uYXJ5SWQsXG4gICAgICAgICAgICBjaGlsZERpY3Rpb25hcnlVVUlEOiBkZWZhdWx0VmFsdWVEdG8uY2hpbGREaWN0aW9uYXJ5VVVJRCxcbiAgICAgICAgICAgIHJlZmVyZW5jZVZhbHVlczogW10sXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWVUb1NldCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUlkcyA9IFtkZWZhdWx0VmFsdWVEdG8uaWRdO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlVG9TZXQ7XG4gICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlVGV4dCgpO1xuICAgICAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlVGV4dCgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ0RpY3Rpb25hcnkgZGF0YSBub3QgcHJlbG9hZGVkLCBmYWxsaW5nIGJhY2sgdG8gQVBJIGNhbGwgZm9yOicsXG4gICAgICAgICAgdGhpcy5kaWN0aW9uYXJ5SWRcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmRpY3Rpb25hcnlTZXJ2aWNlXG4gICAgICAgICAgLmdldERpY3Rpb25hcnkodGhpcy5kaWN0aW9uYXJ5SWQsIEVudmlyb25tZW50VHlwZS5Db25maWcpXG4gICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKGR0bykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWVEdG8gPSBkdG8udmFsdWVzPy5maW5kKFxuICAgICAgICAgICAgICAgICh2OiBEaWN0aW9uYXJ5VmFsdWVEdG8pID0+IHYuaWQgPT09IGRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoZGVmYXVsdFZhbHVlRHRvKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVUb1NldDogRGljdGlvbmFyeVZhbHVlID0ge1xuICAgICAgICAgICAgICAgICAgaWQ6IGRlZmF1bHRWYWx1ZUR0by5pZCxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGRlZmF1bHRWYWx1ZUR0by5uYW1lLFxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zOlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWVEdG8udmFsdWVUcmFuc2xhdGlvbnM/Lm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAodDogVHJhbnNsYXRpb25EdG8pOiBUcmFuc2xhdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYW5ndWFnZXMgPSB0aGlzLnByb3BzWydsYW5ndWFnZXMnXSBhc1xuICAgICAgICAgICAgICAgICAgICAgICAgICB8IExhbmd1YWdlW11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYW5nID0gbGFuZ3VhZ2VzPy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAobCkgPT4gbC5pZCA9PT0gdC5sYW5ndWFnZUlkXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VJZDogdC5sYW5ndWFnZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUlzbzogbGFuZz8uaXNvID8/ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApIHx8IFtdLFxuICAgICAgICAgICAgICAgICAgYWN0aXZlOiBkZWZhdWx0VmFsdWVEdG8uYWN0aXZlLFxuICAgICAgICAgICAgICAgICAgbG9ja2VkOiBkZWZhdWx0VmFsdWVEdG8ubG9ja2VkLFxuICAgICAgICAgICAgICAgICAgY2hpbGREaWN0aW9uYXJ5SWQ6IGRlZmF1bHRWYWx1ZUR0by5jaGlsZERpY3Rpb25hcnlJZCxcbiAgICAgICAgICAgICAgICAgIGNoaWxkRGljdGlvbmFyeVVVSUQ6IGRlZmF1bHRWYWx1ZUR0by5jaGlsZERpY3Rpb25hcnlVVUlELFxuICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlVmFsdWVzOiBbXSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZVRvU2V0LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlSWRzID0gW2RlZmF1bHRWYWx1ZUR0by5pZF07XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWVUb1NldDtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWVUZXh0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWVUZXh0KCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAnRm9ybWx5IERpY3Q6IEZhaWxlZCB0byBmZXRjaCBkZXRhaWxzIGZvciBkZWZhdWx0IHZhbHVlJyxcbiAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWVUZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlVGV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snbW9kZWwnXSB8fCBjaGFuZ2VzWydmb3JtQ29udHJvbCddKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWVJZHMoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVTZWxlY3RlZFZhbHVlSWRzKCk6IHZvaWQge1xuICAgIGNvbnN0IG1vZGVsVmFsdWUgPSB0aGlzLmZvcm1Db250cm9sPy52YWx1ZTtcblxuICAgIGlmIChtb2RlbFZhbHVlICYmIEFycmF5LmlzQXJyYXkobW9kZWxWYWx1ZS5zZWxlY3RlZFZhbHVlSWRzKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlSWRzID0gbW9kZWxWYWx1ZS5zZWxlY3RlZFZhbHVlSWRzO1xuICAgIH0gZWxzZSBpZiAobW9kZWxWYWx1ZSAmJiBtb2RlbFZhbHVlLmlkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVJZHMgPSBbbW9kZWxWYWx1ZS5pZF07XG4gICAgfVxuICB9XG5cbiAgb25TZWxlY3RlZFZhbHVlQ2hhbmdlZChkaWN0aW9uYXJ5VmFsdWU6IERpY3Rpb25hcnlWYWx1ZSkge1xuICAgIGlmICh0aGlzLnByb3BzWydvblNlbGVjdGVkVmFsdWVDaGFuZ2VkJ10pIHtcbiAgICAgIHRoaXMucHJvcHNbJ29uU2VsZWN0ZWRWYWx1ZUNoYW5nZWQnXShkaWN0aW9uYXJ5VmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWVUZXh0KCk7XG4gIH1cblxuICBvblNlbGVjdGVkRGljdGlvbmFyeVZhbHVlc0NoYW5nZWQodmFsdWVzOiBEaWN0aW9uYXJ5VmFsdWVbXSkge1xuICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlc1swXTtcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVRyaWdnZXIpIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVUcmlnZ2VyLmNsb3NlUGFuZWwoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub25TZWxlY3RlZFZhbHVlQ2hhbmdlZCh0aGlzLnNlbGVjdGVkVmFsdWUpO1xuXG4gICAgICBpZiAodGhpcy5hdXRvSW5wdXQpIHtcbiAgICAgICAgdGhpcy5hdXRvSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuZmlsdGVyZWRUZXh0ID0gJyc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyQ2hhbmdlZCgkZXZlbnQ6IGFueSkge1xuICAgIGlmICgkZXZlbnQudGFyZ2V0KSB7XG4gICAgICB0aGlzLmZpbHRlcmVkVGV4dCA9ICRldmVudC50YXJnZXQudmFsdWU7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlQXV0b2NvbXBsZXRlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlcikge1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlci5wYW5lbE9wZW4pIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVUcmlnZ2VyLmNsb3NlUGFuZWwoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlci5vcGVuUGFuZWwoKTtcbiAgICAgICAgaWYgKHRoaXMuYXV0b0lucHV0KSB7XG4gICAgICAgICAgdGhpcy5hdXRvSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb3BlbkF1dG9jb21wbGV0ZSgpIHtcbiAgICBpZiAodGhpcy5hdXRvY29tcGxldGVUcmlnZ2VyICYmICF0aGlzLmF1dG9jb21wbGV0ZVRyaWdnZXIucGFuZWxPcGVuKSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVRyaWdnZXIub3BlblBhbmVsKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWxlY3RlZFZhbHVlVGV4dCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5mb3JtQ29udHJvbD8udmFsdWU7XG4gICAgICBpZiAoZm9ybVZhbHVlICYmIHR5cGVvZiBmb3JtVmFsdWUgPT09ICdvYmplY3QnICYmIGZvcm1WYWx1ZS5pZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBmb3JtVmFsdWUgYXMgRGljdGlvbmFyeVZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3BlY2lmaWNEYXRhID0gdGhpcy5wcm9wcz8uWydzcGVjaWZpY0RhdGEnXTtcbiAgICAgICAgaWYgKHNwZWNpZmljRGF0YSAmJiBzcGVjaWZpY0RhdGEuaXNNYW5kYXRvcnkgIT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLnByb3BzWydyZXF1aXJlZCddID0gc3BlY2lmaWNEYXRhLmlzTWFuZGF0b3J5O1xuICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZVRleHQgPSAnJztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdGhpcy5zZWxlY3RlZFZhbHVlLnRyYW5zbGF0aW9ucz8uZmluZChcbiAgICAgICh0KSA9PlxuICAgICAgICB0Lmxhbmd1YWdlSWQgPT09IHRoaXMuY3VycmVudExhbmd1YWdlSWQgfHxcbiAgICAgICAgdC5sYW5ndWFnZUlzbyA9PT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICApO1xuICAgIGlmICh0cmFuc2xhdGlvbikge1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlVGV4dCA9IHRyYW5zbGF0aW9uLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVUZXh0ID0gdGhpcy5zZWxlY3RlZFZhbHVlLm5hbWUgfHwgJyc7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGljdGlvbmFyeUxhYmVsKGRpY3Rpb25hcnlJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaWN0aW9uYXJ5TGFiZWxzW2RpY3Rpb25hcnlJZF0gfHwgJyc7XG4gIH1cbn1cbiIsIjxmb3JtPlxuICA8bWF0LWxhYmVsIGNsYXNzPVwiY29tcG9uZW50LWRhdGEtbGFiZWwgbS1sLTJcIiBbbmdTdHlsZV09XCJsYWJlbFN0eWxlXCI+XG4gICAge3sgbGFiZWwgfX08L21hdC1sYWJlbFxuICA+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIj5cbiAgICA8aW5wdXRcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIHBsYWNlaG9sZGVyPVwie3sgc2VsZWN0ZWRWYWx1ZVRleHQgfX1cIlxuICAgICAgI2F1dG9JbnB1dFxuICAgICAgYXJpYS1sYWJlbD1cIlRleHRcIlxuICAgICAgbWF0SW5wdXRcbiAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICAoaW5wdXQpPVwiZmlsdGVyQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgIChmb2N1cyk9XCJvcGVuQXV0b2NvbXBsZXRlKClcIlxuICAgIC8+XG4gICAgPG1hdC1pY29uIG1hdFN1ZmZpeCAoY2xpY2spPVwidG9nZ2xlQXV0b2NvbXBsZXRlKCRldmVudClcIlxuICAgICAgPmtleWJvYXJkX2Fycm93X2Rvd248L21hdC1pY29uXG4gICAgPlxuICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAjbWF0QXV0b2NvbXBsZXRlPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgIGF1dG9BY3RpdmVGaXJzdE9wdGlvblxuICAgICAgKG9wdGlvblNlbGVjdGVkKT1cIlxuICAgICAgICBvblNlbGVjdGVkRGljdGlvbmFyeVZhbHVlc0NoYW5nZWQoWyRldmVudC5vcHRpb24udmFsdWVdKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8bWF0LW9wdGlvbiBkaXNhYmxlZD57e1xuICAgICAgICBmb3JtbHlLZXlzLnNlbGVjdEFuSXRlbSB8IHRyYW5zbGF0ZVxuICAgICAgfX08L21hdC1vcHRpb24+XG4gICAgICA8YXBwLWRpY3Rpb25hcmllcy10cmVlXG4gICAgICAgIFthbGxvd0NoZWNrSXRlbXNdPVwiZmFsc2VcIlxuICAgICAgICBbZHJhd1JlZmVyZW5jZURpY3Rpb25hcmllc0FzU2VwYXJhdGVOb2RlXT1cImZhbHNlXCJcbiAgICAgICAgW2RyYXdDaGlsZERpY3Rpb25hcmllc0FzU2VwYXJhdGVOb2RlXT1cImZhbHNlXCJcbiAgICAgICAgW2RyYXdSb290Tm9kZV09XCJmYWxzZVwiXG4gICAgICAgIFtmaWx0ZXJUZXh0XT1cImZpbHRlcmVkVGV4dFwiXG4gICAgICAgIFthbGxvd1NlbGVjdE5vbkxlYWZOb2Rlc109XCJ0cnVlXCJcbiAgICAgICAgW3NlbGVjdGVkVmFsdWVJZHNdPVwic2VsZWN0ZWRWYWx1ZUlkc1wiXG4gICAgICAgIFtsYW5ndWFnZUlkXT1cImN1cnJlbnRMYW5ndWFnZUlkXCJcbiAgICAgICAgW3ZhbHVlc0lkc1RvU2hvd109XCJ2YWx1ZXNJZHNUb1Nob3dcIlxuICAgICAgICBbc2VsZWN0ZWRSZWxhdGVkRGljdGlvbmFyaWVzXT1cInNlbGVjdGVkUmVsYXRlZERpY3Rpb25hcmllc1wiXG4gICAgICAgIFtkaWN0aW9uYXJ5TGFiZWxzXT1cImRpY3Rpb25hcnlMYWJlbHNcIlxuICAgICAgICBbcHJlbG9hZGVkRGljdGlvbmFyeV09XCJwcmVsb2FkZWREaWN0aW9uYXJ5XCJcbiAgICAgICAgW3ByZWxvYWRlZERpY3Rpb25hcmllc109XCJwcmVsb2FkZWREaWN0aW9uYXJpZXNcIlxuICAgICAgICBbdXNlUHJlbG9hZGVkRGF0YV09XCJ1c2VQcmVsb2FkZWREYXRhXCJcbiAgICAgICAgKHNlbGVjdGVkRGljdGlvbmFyeVZhbHVlc0NoYW5nZWQpPVwiXG4gICAgICAgICAgb25TZWxlY3RlZERpY3Rpb25hcnlWYWx1ZXNDaGFuZ2VkKCRldmVudClcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgIDwvYXBwLWRpY3Rpb25hcmllcy10cmVlPlxuICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8Zm9ybWx5LXZhbGlkYXRpb24tbWVzc2FnZSAqbmdJZj1cInNob3dFcnJvclwiIFtmaWVsZF09XCJmaWVsZFwiPlxuICA8L2Zvcm1seS12YWxpZGF0aW9uLW1lc3NhZ2U+XG48L2Zvcm0+XG4iXX0=
|
|
301
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWRpY3Rpb25hcnktZHJvcGRvd24tdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL2Zvcm1seS9mb3JtbHktZGljdGlvbmFyeS1kcm9wZG93bi10cmVlL2Zvcm1seS1kaWN0aW9uYXJ5LWRyb3Bkb3duLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LWRpY3Rpb25hcnktZHJvcGRvd24tdHJlZS9mb3JtbHktZGljdGlvbmFyeS1kcm9wZG93bi10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVFuRCxNQUFNLE9BQU8scUNBQ1gsU0FBUSxTQUFTO0lBNkJqQixZQUNVLGlCQUFvQyxFQUNwQyxLQUF3QjtRQUVoQyxLQUFLLEVBQUUsQ0FBQztRQUhBLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUF0QmxDLGVBQVUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBSTlCLHNCQUFpQixHQUFXLEVBQUUsQ0FBQztRQUMvQixlQUFV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QUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkQsQ0FBQzsrR0EzVVUscUNBQXFDO21HQUFyQyxxQ0FBcUMsbU5BSXJDLHNCQUFzQixxTEM3Qm5DLGs0REF1REE7OzRGRDlCYSxxQ0FBcUM7a0JBTGpELFNBQVM7K0JBQ0UsaUNBQWlDO3NIQVMzQyxtQkFBbUI7c0JBRGxCLFNBQVM7dUJBQUMsc0JBQXNCO2dCQUVULFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDYixZQUFZO3NCQUFwQixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGljdGlvbmFyeVZhbHVlLCBUcmFuc2xhdGlvbkR0bywgVHJhbnNsYXRpb24sIERpY3Rpb25hcnlWYWx1ZUR0bywgRGljdGlvbmFyeUR0byB9IGZyb20gJy4uLy4uL21vZGVscy9kaWN0aW9uYXJ5Lm1vZGVsJztcbmltcG9ydCB7IExhbmd1YWdlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2xhbmd1YWdlLm1vZGVsJztcbmltcG9ydCB7IEVudmlyb25tZW50VHlwZSB9IGZyb20gJy4uLy4uL290aGVycy9lbnZpcm9ubWVudC10eXBlJztcbmltcG9ydCB7IERpY3Rpb25hcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGljdGlvbmFyeS5zZXJ2aWNlJztcbmltcG9ydCB7IExhYmVsS2V5cyB9IGZyb20gJy4uLy4uL2VudW1zL2xhYmVsLmtleXMnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Zvcm1seS1kaWN0aW9uYXJ5LWRyb3Bkb3duLXRyZWUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybWx5LWRpY3Rpb25hcnktZHJvcGRvd24tdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm1seS1kaWN0aW9uYXJ5LWRyb3Bkb3duLXRyZWUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybWx5RGljdGlvbmFyeURyb3Bkb3duVHJlZUNvbXBvbmVudFxuICBleHRlbmRzIEZpZWxkVHlwZVxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICBAVmlld0NoaWxkKE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIpXG4gIGF1dG9jb21wbGV0ZVRyaWdnZXI6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXI7XG4gIEBWaWV3Q2hpbGQoJ2F1dG9JbnB1dCcpIGF1dG9JbnB1dDogRWxlbWVudFJlZjtcbiAgQElucHV0KCkgZGljdGlvbmFyeUlkOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBzZWxlY3RlZFZhbHVlOiBEaWN0aW9uYXJ5VmFsdWU7XG4gIGZpbHRlcmVkVGV4dDogc3RyaW5nO1xuICBmb3JtbHlLZXlzID0gTGFiZWxLZXlzLmZvcm1seTtcbiAgbGFiZWw6IHN0cmluZztcbiAgY3VycmVudExhbmd1YWdlSXNvOiBzdHJpbmc7XG4gIGN1cnJlbnRMYW5ndWFnZUlkOiBudW1iZXI7XG4gIHNlbGVjdGVkVmFsdWVUZXh0OiBzdHJpbmcgPSAnJztcbiAgbGFiZWxTdHlsZTogYW55ID0ge307XG4gIHNlbGVjdGVkVmFsdWVJZHM6IG51bWJlcltdID0gW107XG4gIHZhbHVlc0lkc1RvU2hvdzogbnVtYmVyW10gPSBbXTtcbiAgc2VsZWN0ZWRSZWxhdGVkRGljdGlvbmFyaWVzOiBzdHJpbmdbXSA9IFtdO1xuICBkaWN0aW9uYXJ5TGFiZWxzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgLy8gTXVsdGlwbGUgc2VsZWN0aW9uIHN1cHBvcnRcbiAgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZFZhbHVlczogRGljdGlvbmFyeVZhbHVlW10gPSBbXTtcblxuICAvLyBORVc6IFByb3BlcnRpZXMgZm9yIHByZWxvYWRlZCBkaWN0aW9uYXJ5IGRhdGFcbiAgcHJlbG9hZGVkRGljdGlvbmFyeTogRGljdGlvbmFyeUR0byB8IG51bGwgPSBudWxsO1xuICBwcmVsb2FkZWREaWN0aW9uYXJpZXM6IE1hcDxzdHJpbmcsIERpY3Rpb25hcnlEdG8+IHwgbnVsbCA9IG51bGw7XG4gIHVzZVByZWxvYWRlZERhdGE6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRpY3Rpb25hcnlTZXJ2aWNlOiBEaWN0aW9uYXJ5U2VydmljZSxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHNbJ2RpY3Rpb25hcnlJZCddKSB7XG4gICAgICB0aGlzLmRpY3Rpb25hcnlJZCA9IHRoaXMucHJvcHNbJ2RpY3Rpb25hcnlJZCddO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wc1sndmFsdWVzSWRzVG9TaG93J10pIHtcbiAgICAgIHRoaXMudmFsdWVzSWRzVG9TaG93ID0gdGhpcy5wcm9wc1sndmFsdWVzSWRzVG9TaG93J107XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzWyd2YWx1ZSddKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVUZXh0ID0gdGhpcy5wcm9wc1sndmFsdWUnXTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHNbJ3NlbGVjdGVkUmVsYXRlZERpY3Rpb25hcmllcyddKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUmVsYXRlZERpY3Rpb25hcmllcyA9XG4gICAgICAgIHRoaXMucHJvcHNbJ3NlbGVjdGVkUmVsYXRlZERpY3Rpb25hcmllcyddO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wc1snZGljdGlvbmFyeUxhYmVscyddKSB7XG4gICAgICB0aGlzLmRpY3Rpb25hcnlMYWJlbHMgPSB0aGlzLnByb3BzWydkaWN0aW9uYXJ5TGFiZWxzJ107XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBtdWx0aXBsZSBzZWxlY3Rpb25cbiAgICBpZiAodGhpcy5wcm9wc1snYWxsb3dNdWx0aXBsZVNlbGVjdGlvbiddKSB7XG4gICAgICB0aGlzLmFsbG93TXVsdGlwbGVTZWxlY3Rpb24gPSB0aGlzLnByb3BzWydhbGxvd011bHRpcGxlU2VsZWN0aW9uJ107XG4gICAgfVxuXG4gICAgLy8gTkVXOiBJbml0aWFsaXplIHByZWxvYWRlZCBkaWN0aW9uYXJ5IGRhdGFcbiAgICBpZiAodGhpcy5wcm9wc1snZGljdGlvbmFyeURhdGEnXSkge1xuICAgICAgdGhpcy5wcmVsb2FkZWREaWN0aW9uYXJ5ID0gdGhpcy5wcm9wc1snZGljdGlvbmFyeURhdGEnXTtcbiAgICAgIHRoaXMudXNlUHJlbG9hZGVkRGF0YSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzWydwcmVsb2FkZWREaWN0aW9uYXJpZXMnXSkge1xuICAgICAgdGhpcy5wcmVsb2FkZWREaWN0aW9uYXJpZXMgPSB0aGlzLnByb3BzWydwcmVsb2FkZWREaWN0aW9uYXJpZXMnXTtcbiAgICB9XG5cbiAgICB0aGlzLmxhYmVsID0gdGhpcy5wcm9wc1snbGFiZWwnXSBhcyBzdHJpbmc7XG4gICAgaWYgKHRoaXMucHJvcHMucmVxdWlyZWQpIHtcbiAgICAgIHRoaXMubGFiZWwgKz0gJyAqJztcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28gPSB0aGlzLnByb3BzWydjdXJyZW50TGFuZ3VhZ2VJc28nXSBhcyBzdHJpbmc7XG4gICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJZCA9IHRoaXMucHJvcHNbJ2N1cnJlbnRMYW5ndWFnZUlkJ10gYXMgbnVtYmVyO1xuXG4gICAgaWYgKHRoaXMucHJvcHNbJ2Rlc2lnbiddKSB7XG4gICAgICB0aGlzLmxhYmVsU3R5bGUgPSB0aGlzLnByb3BzWydkZXNpZ24nXVsnLmNvbXBvbmVudC1kYXRhLWxhYmVsJ10gfHwge307XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMucHJvcHNbJ3NlbGVjdGVkVmFsdWVJZHMnXSAmJlxuICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzWydzZWxlY3RlZFZhbHVlSWRzJ10pXG4gICAgKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVJZHMgPSB0aGlzLnByb3BzWydzZWxlY3RlZFZhbHVlSWRzJ107XG4gICAgfVxuXG4gICAgY29uc3QgaW5pdGlhbENvbnRyb2xWYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgY29uc3QgZGljdGlvbmFyeURlZmF1bHRWYWx1ZUlkID0gdGhpcy5wcm9wc1snZGljdGlvbmFyeURlZmF1bHRWYWx1ZUlkJ10gYXNcbiAgICAgIHwgbnVtYmVyXG4gICAgICB8IG51bGw7XG5cbiAgICBpZiAoXG4gICAgICBpbml0aWFsQ29udHJvbFZhbHVlID09IG51bGwgJiZcbiAgICAgIGRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZCAhPSBudWxsICYmXG4gICAgICB0aGlzLmRpY3Rpb25hcnlJZFxuICAgICkge1xuICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHRoaXMucHJvcHNbJ2RpY3Rpb25hcnlEYXRhJ107XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZCwge1xuICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChkaWN0aW9uYXJ5KSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZUR0byA9IGRpY3Rpb25hcnkudmFsdWVzPy5maW5kKFxuICAgICAgICAgICh2OiBEaWN0aW9uYXJ5VmFsdWVEdG8pID0+IHYuaWQgPT09IGRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZFxuICAgICAgICApO1xuICAgICAgICBpZiAoZGVmYXVsdFZhbHVlRHRvKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWVUb1NldDogRGljdGlvbmFyeVZhbHVlID0ge1xuICAgICAgICAgICAgaWQ6IGRlZmF1bHRWYWx1ZUR0by5pZCxcbiAgICAgICAgICAgIG5hbWU6IGRlZmF1bHRWYWx1ZUR0by5uYW1lLFxuICAgICAgICAgICAgdHJhbnNsYXRpb25zOlxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWVEdG8udmFsdWVUcmFuc2xhdGlvbnM/Lm1hcChcbiAgICAgICAgICAgICAgICAodDogVHJhbnNsYXRpb25EdG8pOiBUcmFuc2xhdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBsYW5ndWFnZXMgPSB0aGlzLnByb3BzWydsYW5ndWFnZXMnXSBhc1xuICAgICAgICAgICAgICAgICAgICB8IExhbmd1YWdlW11cbiAgICAgICAgICAgICAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICBjb25zdCBsYW5nID0gbGFuZ3VhZ2VzPy5maW5kKChsKSA9PiBsLmlkID09PSB0Lmxhbmd1YWdlSWQpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VJZDogdC5sYW5ndWFnZUlkLFxuICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUlzbzogbGFuZz8uaXNvID8/ICcnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApIHx8IFtdLFxuICAgICAgICAgICAgYWN0aXZlOiBkZWZhdWx0VmFsdWVEdG8uYWN0aXZlLFxuICAgICAgICAgICAgbG9ja2VkOiBkZWZhdWx0VmFsdWVEdG8ubG9ja2VkLFxuICAgICAgICAgICAgY2hpbGREaWN0aW9uYXJ5SWQ6IGRlZmF1bHRWYWx1ZUR0by5jaGlsZERpY3Rpb25hcnlJZCxcbiAgICAgICAgICAgIGNoaWxkRGljdGlvbmFyeVVVSUQ6IGRlZmF1bHRWYWx1ZUR0by5jaGlsZERpY3Rpb25hcnlVVUlELFxuICAgICAgICAgICAgcmVmZXJlbmNlVmFsdWVzOiBbXSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZVRvU2V0LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlSWRzID0gW2RlZmF1bHRWYWx1ZUR0by5pZF07XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWVUb1NldDtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWVUZXh0KCk7XG4gICAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWVUZXh0KCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnRGljdGlvbmFyeSBkYXRhIG5vdCBwcmVsb2FkZWQsIGZhbGxpbmcgYmFjayB0byBBUEkgY2FsbCBmb3I6JyxcbiAgICAgICAgICB0aGlzLmRpY3Rpb25hcnlJZFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuZGljdGlvbmFyeVNlcnZpY2VcbiAgICAgICAgICAuZ2V0RGljdGlvbmFyeSh0aGlzLmRpY3Rpb25hcnlJZCwgRW52aXJvbm1lbnRUeXBlLkNvbmZpZylcbiAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoZHRvKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZUR0byA9IGR0by52YWx1ZXM/LmZpbmQoXG4gICAgICAgICAgICAgICAgKHY6IERpY3Rpb25hcnlWYWx1ZUR0bykgPT4gdi5pZCA9PT0gZGljdGlvbmFyeURlZmF1bHRWYWx1ZUlkXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChkZWZhdWx0VmFsdWVEdG8pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZVRvU2V0OiBEaWN0aW9uYXJ5VmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgICBpZDogZGVmYXVsdFZhbHVlRHRvLmlkLFxuICAgICAgICAgICAgICAgICAgbmFtZTogZGVmYXVsdFZhbHVlRHRvLm5hbWUsXG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM6XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZUR0by52YWx1ZVRyYW5zbGF0aW9ucz8ubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICh0OiBUcmFuc2xhdGlvbkR0byk6IFRyYW5zbGF0aW9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhbmd1YWdlcyA9IHRoaXMucHJvcHNbJ2xhbmd1YWdlcyddIGFzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHwgTGFuZ3VhZ2VbXVxuICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhbmcgPSBsYW5ndWFnZXM/LmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChsKSA9PiBsLmlkID09PSB0Lmxhbmd1YWdlSWRcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUlkOiB0Lmxhbmd1YWdlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlSXNvOiBsYW5nPy5pc28gPz8gJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICkgfHwgW10sXG4gICAgICAgICAgICAgICAgICBhY3RpdmU6IGRlZmF1bHRWYWx1ZUR0by5hY3RpdmUsXG4gICAgICAgICAgICAgICAgICBsb2NrZWQ6IGRlZmF1bHRWYWx1ZUR0by5sb2NrZWQsXG4gICAgICAgICAgICAgICAgICBjaGlsZERpY3Rpb25hcnlJZDogZGVmYXVsdFZhbHVlRHRvLmNoaWxkRGljdGlvbmFyeUlkLFxuICAgICAgICAgICAgICAgICAgY2hpbGREaWN0aW9uYXJ5VVVJRDogZGVmYXVsdFZhbHVlRHRvLmNoaWxkRGljdGlvbmFyeVVVSUQsXG4gICAgICAgICAgICAgICAgICByZWZlcmVuY2VWYWx1ZXM6IFtdLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlVG9TZXQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVJZHMgPSBbZGVmYXVsdFZhbHVlRHRvLmlkXTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZVRvU2V0O1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZVRleHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZVRleHQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICdGb3JtbHkgRGljdDogRmFpbGVkIHRvIGZldGNoIGRldGFpbHMgZm9yIGRlZmF1bHQgdmFsdWUnLFxuICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZVRleHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWVUZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydtb2RlbCddIHx8IGNoYW5nZXNbJ2Zvcm1Db250cm9sJ10pIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZUlkcygpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVNlbGVjdGVkVmFsdWVJZHMoKTogdm9pZCB7XG4gICAgY29uc3QgbW9kZWxWYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2w/LnZhbHVlO1xuXG4gICAgaWYgKG1vZGVsVmFsdWUgJiYgQXJyYXkuaXNBcnJheShtb2RlbFZhbHVlLnNlbGVjdGVkVmFsdWVJZHMpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVJZHMgPSBtb2RlbFZhbHVlLnNlbGVjdGVkVmFsdWVJZHM7XG4gICAgfSBlbHNlIGlmIChtb2RlbFZhbHVlICYmIG1vZGVsVmFsdWUuaWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUlkcyA9IFttb2RlbFZhbHVlLmlkXTtcbiAgICB9XG4gIH1cblxuICBvblNlbGVjdGVkVmFsdWVDaGFuZ2VkKGRpY3Rpb25hcnlWYWx1ZTogRGljdGlvbmFyeVZhbHVlKSB7XG4gICAgaWYgKHRoaXMucHJvcHNbJ29uU2VsZWN0ZWRWYWx1ZUNoYW5nZWQnXSkge1xuICAgICAgdGhpcy5wcm9wc1snb25TZWxlY3RlZFZhbHVlQ2hhbmdlZCddKGRpY3Rpb25hcnlWYWx1ZSk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZVRleHQoKTtcbiAgfVxuXG4gIG9uU2VsZWN0ZWREaWN0aW9uYXJ5VmFsdWVzQ2hhbmdlZCh2YWx1ZXM6IERpY3Rpb25hcnlWYWx1ZVtdKSB7XG4gICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHRoaXMuYWxsb3dNdWx0aXBsZVNlbGVjdGlvbikge1xuICAgICAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb24gbW9kZVxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gdmFsdWVzO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVJZHMgPSB2YWx1ZXMubWFwKHYgPT4gdi5pZCk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWVzKTtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlVGV4dCgpO1xuXG4gICAgICAgIGlmICh0aGlzLnByb3BzWydvblNlbGVjdGVkVmFsdWVzQ2hhbmdlZCddKSB7XG4gICAgICAgICAgdGhpcy5wcm9wc1snb25TZWxlY3RlZFZhbHVlc0NoYW5nZWQnXSh2YWx1ZXMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTaW5nbGUgc2VsZWN0aW9uIG1vZGVcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWVzWzBdO1xuICAgICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVUcmlnZ2VyKSB7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVUcmlnZ2VyLmNsb3NlUGFuZWwoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uU2VsZWN0ZWRWYWx1ZUNoYW5nZWQodGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuYXV0b0lucHV0KSB7XG4gICAgICAgIHRoaXMuYXV0b0lucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLmZpbHRlcmVkVGV4dCA9ICcnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpbHRlckNoYW5nZWQoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoJGV2ZW50LnRhcmdldCkge1xuICAgICAgdGhpcy5maWx0ZXJlZFRleHQgPSAkZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUF1dG9jb21wbGV0ZShldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVRyaWdnZXIpIHtcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVRyaWdnZXIucGFuZWxPcGVuKSB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlci5jbG9zZVBhbmVsKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVRyaWdnZXIub3BlblBhbmVsKCk7XG4gICAgICAgIGlmICh0aGlzLmF1dG9JbnB1dCkge1xuICAgICAgICAgIHRoaXMuYXV0b0lucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9wZW5BdXRvY29tcGxldGUoKSB7XG4gICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlciAmJiAhdGhpcy5hdXRvY29tcGxldGVUcmlnZ2VyLnBhbmVsT3Blbikge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVUcmlnZ2VyLm9wZW5QYW5lbCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0ZWRWYWx1ZVRleHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWxsb3dNdWx0aXBsZVNlbGVjdGlvbikge1xuICAgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9uIG1vZGUgLSBzaG93IGNvbW1hLXNlcGFyYXRlZCB2YWx1ZXNcbiAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2w/LnZhbHVlO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZm9ybVZhbHVlKSAmJiBmb3JtVmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gZm9ybVZhbHVlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVJZHMgPSBmb3JtVmFsdWUubWFwKHYgPT4gdi5pZCk7XG4gICAgICAgIGNvbnN0IHRleHRzID0gZm9ybVZhbHVlLm1hcCh2ID0+IHRoaXMuZ2V0VmFsdWVEaXNwbGF5VGV4dCh2KSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZVRleHQgPSB0ZXh0cy5qb2luKCcsICcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUlkcyA9IFtdO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNpbmdsZSBzZWxlY3Rpb24gbW9kZVxuICAgIGlmICghdGhpcy5zZWxlY3RlZFZhbHVlKSB7XG4gICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmZvcm1Db250cm9sPy52YWx1ZTtcbiAgICAgIGlmIChmb3JtVmFsdWUgJiYgdHlwZW9mIGZvcm1WYWx1ZSA9PT0gJ29iamVjdCcgJiYgZm9ybVZhbHVlLmlkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IGZvcm1WYWx1ZSBhcyBEaWN0aW9uYXJ5VmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzcGVjaWZpY0RhdGEgPSB0aGlzLnByb3BzPy5bJ3NwZWNpZmljRGF0YSddO1xuICAgICAgICBpZiAoc3BlY2lmaWNEYXRhICYmIHNwZWNpZmljRGF0YS5pc01hbmRhdG9yeSAhPT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMucHJvcHNbJ3JlcXVpcmVkJ10gPSBzcGVjaWZpY0RhdGEuaXNNYW5kYXRvcnk7XG4gICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRFcnJvcnMobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlVGV4dCA9ICcnO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlVGV4dCA9IHRoaXMuZ2V0VmFsdWVEaXNwbGF5VGV4dCh0aGlzLnNlbGVjdGVkVmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWx1ZURpc3BsYXlUZXh0KHZhbHVlOiBEaWN0aW9uYXJ5VmFsdWUpOiBzdHJpbmcge1xuICAgIGlmICghdmFsdWUpIHJldHVybiAnJztcblxuICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdmFsdWUudHJhbnNsYXRpb25zPy5maW5kKFxuICAgICAgKHQpID0+XG4gICAgICAgIHQubGFuZ3VhZ2VJZCA9PT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2VJZCB8fFxuICAgICAgICB0Lmxhbmd1YWdlSXNvID09PSB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICk7XG4gICAgaWYgKHRyYW5zbGF0aW9uKSB7XG4gICAgICByZXR1cm4gdHJhbnNsYXRpb24udmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS5uYW1lIHx8ICcnO1xuICB9XG5cbiAgZ2V0RGljdGlvbmFyeUxhYmVsKGRpY3Rpb25hcnlJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaWN0aW9uYXJ5TGFiZWxzW2RpY3Rpb25hcnlJZF0gfHwgJyc7XG4gIH1cbn1cbiIsIjxmb3JtPlxuICA8bWF0LWxhYmVsIGNsYXNzPVwiY29tcG9uZW50LWRhdGEtbGFiZWwgbS1sLTJcIiBbbmdTdHlsZV09XCJsYWJlbFN0eWxlXCI+XG4gICAge3sgbGFiZWwgfX08L21hdC1sYWJlbFxuICA+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIj5cbiAgICA8aW5wdXRcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIHBsYWNlaG9sZGVyPVwie3sgc2VsZWN0ZWRWYWx1ZVRleHQgfX1cIlxuICAgICAgI2F1dG9JbnB1dFxuICAgICAgYXJpYS1sYWJlbD1cIlRleHRcIlxuICAgICAgbWF0SW5wdXRcbiAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICAoaW5wdXQpPVwiZmlsdGVyQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgIChmb2N1cyk9XCJvcGVuQXV0b2NvbXBsZXRlKClcIlxuICAgIC8+XG4gICAgPG1hdC1pY29uIG1hdFN1ZmZpeCAoY2xpY2spPVwidG9nZ2xlQXV0b2NvbXBsZXRlKCRldmVudClcIlxuICAgICAgPmtleWJvYXJkX2Fycm93X2Rvd248L21hdC1pY29uXG4gICAgPlxuICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAjbWF0QXV0b2NvbXBsZXRlPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgIGF1dG9BY3RpdmVGaXJzdE9wdGlvblxuICAgICAgKG9wdGlvblNlbGVjdGVkKT1cIlxuICAgICAgICBvblNlbGVjdGVkRGljdGlvbmFyeVZhbHVlc0NoYW5nZWQoWyRldmVudC5vcHRpb24udmFsdWVdKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8bWF0LW9wdGlvbiBkaXNhYmxlZD57e1xuICAgICAgICBmb3JtbHlLZXlzLnNlbGVjdEFuSXRlbSB8IHRyYW5zbGF0ZVxuICAgICAgfX08L21hdC1vcHRpb24+XG4gICAgICA8YXBwLWRpY3Rpb25hcmllcy10cmVlXG4gICAgICAgIFthbGxvd0NoZWNrSXRlbXNdPVwiYWxsb3dNdWx0aXBsZVNlbGVjdGlvblwiXG4gICAgICAgIFtkcmF3UmVmZXJlbmNlRGljdGlvbmFyaWVzQXNTZXBhcmF0ZU5vZGVdPVwiZmFsc2VcIlxuICAgICAgICBbZHJhd0NoaWxkRGljdGlvbmFyaWVzQXNTZXBhcmF0ZU5vZGVdPVwiZmFsc2VcIlxuICAgICAgICBbZHJhd1Jvb3ROb2RlXT1cImZhbHNlXCJcbiAgICAgICAgW2ZpbHRlclRleHRdPVwiZmlsdGVyZWRUZXh0XCJcbiAgICAgICAgW2FsbG93U2VsZWN0Tm9uTGVhZk5vZGVzXT1cInRydWVcIlxuICAgICAgICBbc2VsZWN0ZWRWYWx1ZUlkc109XCJzZWxlY3RlZFZhbHVlSWRzXCJcbiAgICAgICAgW2xhbmd1YWdlSWRdPVwiY3VycmVudExhbmd1YWdlSWRcIlxuICAgICAgICBbdmFsdWVzSWRzVG9TaG93XT1cInZhbHVlc0lkc1RvU2hvd1wiXG4gICAgICAgIFtzZWxlY3RlZFJlbGF0ZWREaWN0aW9uYXJpZXNdPVwic2VsZWN0ZWRSZWxhdGVkRGljdGlvbmFyaWVzXCJcbiAgICAgICAgW2RpY3Rpb25hcnlMYWJlbHNdPVwiZGljdGlvbmFyeUxhYmVsc1wiXG4gICAgICAgIFtwcmVsb2FkZWREaWN0aW9uYXJ5XT1cInByZWxvYWRlZERpY3Rpb25hcnlcIlxuICAgICAgICBbcHJlbG9hZGVkRGljdGlvbmFyaWVzXT1cInByZWxvYWRlZERpY3Rpb25hcmllc1wiXG4gICAgICAgIFt1c2VQcmVsb2FkZWREYXRhXT1cInVzZVByZWxvYWRlZERhdGFcIlxuICAgICAgICAoc2VsZWN0ZWREaWN0aW9uYXJ5VmFsdWVzQ2hhbmdlZCk9XCJcbiAgICAgICAgICBvblNlbGVjdGVkRGljdGlvbmFyeVZhbHVlc0NoYW5nZWQoJGV2ZW50KVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgPC9hcHAtZGljdGlvbmFyaWVzLXRyZWU+XG4gICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDxmb3JtbHktdmFsaWRhdGlvbi1tZXNzYWdlICpuZ0lmPVwic2hvd0Vycm9yXCIgW2ZpZWxkXT1cImZpZWxkXCI+XG4gIDwvZm9ybWx5LXZhbGlkYXRpb24tbWVzc2FnZT5cbjwvZm9ybT5cbiJdfQ==
|