fx-form-builder-wrapper 2.0.98 → 2.0.100
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/components/customize-dropdown/customize-dropdown.component.mjs +398 -0
- package/esm2022/lib/components/dropdown-with-other/dropdown-with-other.component.mjs +6 -3
- package/esm2022/lib/components/fx-form-component/fx-form-component.component.mjs +3 -3
- package/esm2022/lib/components/radio-group/radio-group.component.mjs +6 -3
- package/esm2022/lib/components/summary/summary.component.mjs +14 -95
- package/esm2022/lib/components/uploader/uploader.component.mjs +2 -2
- package/esm2022/lib/fx-builder-wrapper.component.mjs +5 -5
- package/fesm2022/fx-form-builder-wrapper.mjs +414 -104
- package/fesm2022/fx-form-builder-wrapper.mjs.map +1 -1
- package/lib/components/customize-dropdown/customize-dropdown.component.d.ts +65 -0
- package/lib/components/dropdown-with-other/dropdown-with-other.component.d.ts +1 -0
- package/lib/components/radio-group/radio-group.component.d.ts +1 -0
- package/lib/components/summary/summary.component.d.ts +0 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
|
2
2
|
import { Component, inject, ViewChild } from '@angular/core';
|
|
3
3
|
import { ReactiveFormsModule, FormsModule, FormBuilder } from '@angular/forms';
|
|
4
|
-
import { FxBaseComponent, FxComponent, FxStringSetting
|
|
4
|
+
import { FxBaseComponent, FxComponent, FxStringSetting } from '@instantsys-labs/fx';
|
|
5
5
|
import { Subject, takeUntil } from 'rxjs';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
import * as i1 from "@angular/common/http";
|
|
@@ -21,7 +21,7 @@ export class SummaryComponent extends FxBaseComponent {
|
|
|
21
21
|
summaryForm = this.fb.group({
|
|
22
22
|
summary: [''],
|
|
23
23
|
});
|
|
24
|
-
dynamicText = '
|
|
24
|
+
dynamicText = '';
|
|
25
25
|
constructor(cdr, http, fxBuilderWrapperService) {
|
|
26
26
|
super(cdr);
|
|
27
27
|
this.cdr = cdr;
|
|
@@ -32,141 +32,60 @@ export class SummaryComponent extends FxBaseComponent {
|
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
34
|
ngOnInit() {
|
|
35
|
+
this.dynamicText = this.setting('summaryText') || '';
|
|
35
36
|
this.fxBuilderWrapperService.variables$
|
|
36
37
|
.pipe(takeUntil(this.destroy$))
|
|
37
38
|
.subscribe((variables) => {
|
|
38
39
|
if (!variables)
|
|
39
40
|
return;
|
|
40
|
-
this.datePickerMap = new Map();
|
|
41
|
-
// for (const [key, value] of Object.entries(variables) as [string, any][]) {
|
|
42
|
-
// if (key.includes('lib-date-picker')) {
|
|
43
|
-
// this.datePickerMap.set(key, value);
|
|
44
|
-
// }
|
|
45
|
-
// }
|
|
46
|
-
for (const [key, value] of Object.entries(variables)) {
|
|
47
|
-
if (value &&
|
|
48
|
-
typeof value === 'object' &&
|
|
49
|
-
'date' in value) {
|
|
50
|
-
this.datePickerMap.set(key, value);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
41
|
});
|
|
54
|
-
// const today = new Date();
|
|
55
|
-
// this.minDate = new Date(today);
|
|
56
|
-
// this.minDate.setDate(today.getDate() - 30);
|
|
57
|
-
// this.maxDate = new Date(today);
|
|
58
|
-
// this.maxDate.setDate(today.getDate() + 30);
|
|
59
|
-
// this.minDate = this.formatDate(new Date(this.today.setDate(new Date().getDate() - 30)));
|
|
60
|
-
// this.maxDate = this.formatDate(new Date(this.today.setDate(new Date().getDate() + 31)));
|
|
61
|
-
const today = new Date();
|
|
62
|
-
const min = new Date();
|
|
63
|
-
min.setDate(today.getDate() - 30);
|
|
64
|
-
const max = new Date();
|
|
65
|
-
max.setDate(today.getDate());
|
|
66
|
-
this.minDate = this.formatDate(min);
|
|
67
|
-
this.maxDate = this.formatDate(max);
|
|
68
|
-
// this.getRangeValues();
|
|
69
42
|
}
|
|
70
|
-
// get dateControl() {
|
|
71
|
-
// return this.datePickerForm.get('date');
|
|
72
|
-
// }
|
|
73
43
|
ngAfterViewInit() {
|
|
74
44
|
const key = this.fxComponent?.fxData?.name;
|
|
75
45
|
if (key) {
|
|
76
|
-
const datePatch = this.datePickerMap.get(key);
|
|
77
|
-
const finalDate = datePatch || this.formatDate(new Date());
|
|
78
|
-
if (datePatch) {
|
|
79
|
-
this.minDate = datePatch;
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
this.minDate = this.formatDate(new Date(this.today.setDate(new Date().getDate() - 30)));
|
|
83
|
-
}
|
|
84
|
-
// this.datePickerForm.patchValue({date:finalDate});
|
|
85
46
|
}
|
|
86
47
|
this.getContextBaseId();
|
|
87
48
|
}
|
|
88
|
-
getRangeValues() {
|
|
89
|
-
this.http.get(this.setting('apiURL')).subscribe(response => {
|
|
90
|
-
const today = new Date();
|
|
91
|
-
const minOffset = response[this.setting('minDateKey')] || this.setting('minValidation');
|
|
92
|
-
const maxOffset = response[this.setting('maxDateKey')] || this.setting('maxValidation');
|
|
93
|
-
// this.minDate = new Date(today);
|
|
94
|
-
// this.minDate.setDate(today.getDate() + minOffset);
|
|
95
|
-
// this.maxDate = new Date(today);
|
|
96
|
-
// this.maxDate.setDate(today.getDate() + maxOffset);
|
|
97
|
-
this.minDate = this.formatDate(new Date(this.today.setDate(new Date().getDate() + minOffset)));
|
|
98
|
-
this.maxDate = this.formatDate(new Date(this.today.setDate(new Date().getDate() + maxOffset)));
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
49
|
formatDate(date) {
|
|
102
50
|
return date.toISOString().split('T')[0];
|
|
103
51
|
}
|
|
104
52
|
settings() {
|
|
105
53
|
return [
|
|
106
|
-
new FxStringSetting({ key: '
|
|
107
|
-
new FxStringSetting({ key: '
|
|
108
|
-
new FxStringSetting({ key: 'apiURL', $title: 'API Url', value: '' }),
|
|
109
|
-
new FxStringSetting({ key: 'minDateKey', $title: 'Min Range API Key', value: '' }),
|
|
110
|
-
new FxStringSetting({ key: 'maxDateKey', $title: 'Max Range API Key', value: '' }),
|
|
111
|
-
new FxStringSetting({ key: 'placeHolder', $title: 'Placeholder', value: 'Select Date' }),
|
|
112
|
-
new FxStringSetting({ key: 'label', $title: 'Label', value: '' }),
|
|
113
|
-
new FxStringSetting({ key: 'datePickerErrorMessage', $title: 'Error Message', value: 'Please fill out the field' }),
|
|
54
|
+
new FxStringSetting({ key: 'summaryText', $title: 'Summary Text', value: '' }),
|
|
55
|
+
new FxStringSetting({ key: 'summaryLabel', $title: 'Label', value: '' }),
|
|
114
56
|
];
|
|
115
57
|
}
|
|
116
58
|
validations() {
|
|
117
|
-
return [
|
|
59
|
+
return [];
|
|
118
60
|
}
|
|
119
61
|
updateTextArea() {
|
|
120
|
-
// Get all the form control values
|
|
121
|
-
console.log('Updating text area with dynamic values', this.fxComponent);
|
|
122
62
|
const formValues = this.fxComponent?.fxData?.$formGroup?.value;
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
console.log('Form Values:', formValues);
|
|
126
|
-
this.dynamicText = this.replacePlaceholders(this.dynamicText, formValues);
|
|
127
|
-
console.log('Replaced dynamic text:', this.dynamicText);
|
|
128
|
-
this.summaryForm.patchValue({ summary: this.dynamicText });
|
|
63
|
+
const dynamicText = this.replacePlaceholders(this.dynamicText, formValues);
|
|
64
|
+
this.summaryForm.patchValue({ summary: dynamicText });
|
|
129
65
|
this.cdr.detectChanges();
|
|
130
66
|
}
|
|
131
|
-
// // Method to replace placeholders in the string based on form control values
|
|
132
|
-
// replacePlaceholders(template: string, values: any): string {
|
|
133
|
-
// // Use a regular expression to find placeholders like {name}, {age}, etc.
|
|
134
|
-
// return template.replace(/{(.*?)}/g, (match, placeholder) => {
|
|
135
|
-
// // For each placeholder, look it up in the form control values
|
|
136
|
-
// return values[placeholder] !== undefined ? values[placeholder] : match;
|
|
137
|
-
// });
|
|
138
|
-
// }
|
|
139
67
|
replacePlaceholders(template, values) {
|
|
140
|
-
// Log the values to debug
|
|
141
|
-
console.log('Values:', values);
|
|
142
|
-
// Use a regular expression to find placeholders like {name}, {age}, etc.
|
|
143
68
|
return template.replace(/{(.*?)}/g, (match, placeholder) => {
|
|
144
|
-
// Log each placeholder being processed
|
|
145
|
-
console.log('Processing placeholder:', placeholder);
|
|
146
|
-
// Check if the placeholder exists in values
|
|
147
69
|
if (values[placeholder] !== undefined) {
|
|
148
|
-
|
|
149
|
-
return values[placeholder]; // Replace placeholder with its value
|
|
70
|
+
return values[placeholder];
|
|
150
71
|
}
|
|
151
72
|
else {
|
|
152
|
-
|
|
153
|
-
return match; // Keep placeholder if no value found
|
|
73
|
+
return match;
|
|
154
74
|
}
|
|
155
75
|
});
|
|
156
76
|
}
|
|
157
77
|
ngAfterViewChecked() {
|
|
158
|
-
// After the view has been checked, update text area if needed
|
|
159
78
|
this.updateTextArea();
|
|
160
|
-
this.cdr.detectChanges();
|
|
79
|
+
this.cdr.detectChanges();
|
|
161
80
|
}
|
|
162
81
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SummaryComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.HttpClient }, { token: i2.FxBuilderWrapperService }], target: i0.ɵɵFactoryTarget.Component });
|
|
163
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SummaryComponent, isStandalone: true, selector: "lib-summary", viewQueries: [{ propertyName: "fxComponent", first: true, predicate: ["fxComponent"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div class=\"custom-date-picker relative\">\r\n <form [formGroup]=\"summaryForm\">\r\n\r\n <label
|
|
82
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SummaryComponent, isStandalone: true, selector: "lib-summary", viewQueries: [{ propertyName: "fxComponent", first: true, predicate: ["fxComponent"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div class=\"custom-date-picker relative\">\r\n <form [formGroup]=\"summaryForm\">\r\n\r\n <label class=\"summary-label\">{{ setting('summaryLabel') }}</label>\r\n <div class=\"relative\">\r\n <textarea formControlName=\"summary\" readonly class=\"w-full\"></textarea>\r\n </div>\r\n <!-- <div>\r\n <small *ngIf=\"datePickerForm.get('date')?.touched && datePickerForm.get('date')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n {{ setting('datePickerErrorMessage') }}\r\n </small>\r\n </div> -->\r\n </form>\r\n </div>\r\n\r\n</fx-component>", styles: [".summary-label{color:#4682b4;font-weight:600;margin-bottom:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: FxComponent, selector: "fx-component", inputs: ["fxData"] }] });
|
|
164
83
|
}
|
|
165
84
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SummaryComponent, decorators: [{
|
|
166
85
|
type: Component,
|
|
167
|
-
args: [{ selector: 'lib-summary', standalone: true, imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent], template: "<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div class=\"custom-date-picker relative\">\r\n <form [formGroup]=\"summaryForm\">\r\n\r\n <label
|
|
86
|
+
args: [{ selector: 'lib-summary', standalone: true, imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent], template: "<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div class=\"custom-date-picker relative\">\r\n <form [formGroup]=\"summaryForm\">\r\n\r\n <label class=\"summary-label\">{{ setting('summaryLabel') }}</label>\r\n <div class=\"relative\">\r\n <textarea formControlName=\"summary\" readonly class=\"w-full\"></textarea>\r\n </div>\r\n <!-- <div>\r\n <small *ngIf=\"datePickerForm.get('date')?.touched && datePickerForm.get('date')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n {{ setting('datePickerErrorMessage') }}\r\n </small>\r\n </div> -->\r\n </form>\r\n </div>\r\n\r\n</fx-component>", styles: [".summary-label{color:#4682b4;font-weight:600;margin-bottom:10px}\n"] }]
|
|
168
87
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.HttpClient }, { type: i2.FxBuilderWrapperService }], propDecorators: { fxComponent: [{
|
|
169
88
|
type: ViewChild,
|
|
170
89
|
args: ['fxComponent']
|
|
171
90
|
}] } });
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VtbWFyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL3N1bW1hcnkvc3VtbWFyeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL3N1bW1hcnkvc3VtbWFyeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUF1QyxTQUFTLEVBQUUsTUFBTSxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBeUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RyxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBYSxlQUFlLEVBQWdCLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHakksT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBUzFDLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxlQUFlO0lBa0I5QjtJQUErQjtJQUF5QjtJQWpCckUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVuQyxPQUFPLENBQVU7SUFDakIsT0FBTyxDQUFVO0lBQ2QsS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDTyxXQUFXLENBQWU7SUFDNUMsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7SUFDekMsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7SUFLaEMsV0FBVyxHQUFjLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQzNDLE9BQU8sRUFBRSxD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QUE0QztZQUM1QyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLFdBQVcsU0FBUyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUNyRSxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFFLHFDQUFxQztZQUNwRSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsV0FBVyw2QkFBNkIsQ0FBQyxDQUFDO2dCQUM3RSxPQUFPLEtBQUssQ0FBQyxDQUFFLHFDQUFxQztZQUN0RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0Msa0JBQWtCO1FBQ2hCLDhEQUE4RDtRQUM5RCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFFLG9DQUFvQztJQUNqRSxDQUFDO3dHQW5NVSxnQkFBZ0I7NEZBQWhCLGdCQUFnQiwwTUNoQjdCLDRxQkFpQmUseURETEgsWUFBWSw4QkFBRSxtQkFBbUIsNDhCQUFFLFdBQVcsK0JBQUUsV0FBVzs7NEZBSTFELGdCQUFnQjtrQkFQNUIsU0FBUzsrQkFDRSxhQUFhLGNBQ1gsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUM7cUpBVTNDLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEFmdGVyVmlld0NoZWNrZWQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIGluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybXNNb2R1bGUsIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEZ4QmFzZUNvbXBvbmVudCwgRnhDb21wb25lbnQsIEZ4U2V0dGluZywgRnhTdHJpbmdTZXR0aW5nLCBGeFZhbGlkYXRpb24sIEZ4VmFsaWRhdG9yU2VydmljZSB9IGZyb20gJ0BpbnN0YW50c3lzLWxhYnMvZngnO1xyXG5pbXBvcnQgeyBDYWxlbmRhck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvY2FsZW5kYXInO1xyXG5pbXBvcnQgeyBGeEJ1aWxkZXJXcmFwcGVyU2VydmljZSB9IGZyb20gJy4uLy4uL2Z4LWJ1aWxkZXItd3JhcHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1zdW1tYXJ5JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1zTW9kdWxlLCBGeENvbXBvbmVudF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3N1bW1hcnkuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9zdW1tYXJ5LmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTdW1tYXJ5Q29tcG9uZW50IGV4dGVuZHMgRnhCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdDaGVja2Vke1xyXG4gIHByaXZhdGUgZmIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xyXG5cclxubWluRGF0ZSE6IHN0cmluZztcclxubWF4RGF0ZSE6IHN0cmluZztcclxuICAgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICBAVmlld0NoaWxkKCdmeENvbXBvbmVudCcpIGZ4Q29tcG9uZW50ITogRnhDb21wb25lbnQ7XHJcbiAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxCb29sZWFuPigpO1xyXG4gICAgZGF0ZVBpY2tlck1hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XHJcbiAgXHJcbiAgIFxyXG5cclxuXHJcbiAgICBwdWJsaWMgc3VtbWFyeUZvcm06IEZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgc3VtbWFyeTogWycnXSxcclxuICAgICB9KVxyXG5cclxuICAgICAgZHluYW1pY1RleHQ6IHN0cmluZyA9ICdNeSBuYW1lIGlzIHtuYW1lfSBhbmQgSSBhbSB7YWdlfSB5ZWFycyBvbGQnO1xyXG4gICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYscHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LHByaXZhdGUgZnhCdWlsZGVyV3JhcHBlclNlcnZpY2U6IEZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlKSB7XHJcbiAgICAgIHN1cGVyKGNkcilcclxuICAgICAgdGhpcy5vbkluaXQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9yZWdpc3Rlcih0aGlzLnN1bW1hcnlGb3JtKTtcclxuICAgICAgfSk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgIHRoaXMuZnhCdWlsZGVyV3JhcHBlclNlcnZpY2UudmFyaWFibGVzJFxyXG4gIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAuc3Vic2NyaWJlKCh2YXJpYWJsZXM6IGFueSkgPT4ge1xyXG4gICAgaWYgKCF2YXJpYWJsZXMpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmRhdGVQaWNrZXJNYXAgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xyXG5cclxuICAgIC8vIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykgYXMgW3N0cmluZywgYW55XVtdKSB7XHJcbiAgICAvLyAgIGlmIChrZXkuaW5jbHVkZXMoJ2xpYi1kYXRlLXBpY2tlcicpKSB7XHJcbiAgICAvLyAgICAgdGhpcy5kYXRlUGlja2VyTWFwLnNldChrZXksIHZhbHVlKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG5cclxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykgYXMgW3N0cmluZywgYW55XVtdKSB7XHJcbiAgaWYgKFxyXG4gICAgdmFsdWUgJiZcclxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcclxuICAgICdkYXRlJyBpbiB2YWx1ZVxyXG4gICkge1xyXG4gICAgdGhpcy5kYXRlUGlja2VyTWFwLnNldChrZXksIHZhbHVlKTtcclxuICB9XHJcbn1cclxuICB9KTtcclxuXHJcblxyXG4gICAgLy8gY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgLy8gdGhpcy5taW5EYXRlID0gbmV3IERhdGUodG9kYXkpO1xyXG4gICAgLy8gdGhpcy5taW5EYXRlLnNldERhdGUodG9kYXkuZ2V0RGF0ZSgpIC0gMzApO1xyXG5cclxuICAgIC8vIHRoaXMubWF4RGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcclxuICAgIC8vIHRoaXMubWF4RGF0ZS5zZXREYXRlKHRvZGF5LmdldERhdGUoKSArIDMwKTtcclxuXHJcbiAgLy8gdGhpcy5taW5EYXRlID0gdGhpcy5mb3JtYXREYXRlKG5ldyBEYXRlKHRoaXMudG9kYXkuc2V0RGF0ZShuZXcgRGF0ZSgpLmdldERhdGUoKSAtIDMwKSkpO1xyXG4gIC8vIHRoaXMubWF4RGF0ZSA9IHRoaXMuZm9ybWF0RGF0ZShuZXcgRGF0ZSh0aGlzLnRvZGF5LnNldERhdGUobmV3IERhdGUoKS5nZXREYXRlKCkgKyAzMSkpKTtcclxuXHJcbiAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG5cclxuY29uc3QgbWluID0gbmV3IERhdGUoKTtcclxubWluLnNldERhdGUodG9kYXkuZ2V0RGF0ZSgpIC0gMzApO1xyXG5cclxuY29uc3QgbWF4ID0gbmV3IERhdGUoKTtcclxubWF4LnNldERhdGUodG9kYXkuZ2V0RGF0ZSgpKTtcclxuXHJcbnRoaXMubWluRGF0ZSA9IHRoaXMuZm9ybWF0RGF0ZShtaW4pO1xyXG50aGlzLm1heERhdGUgPSB0aGlzLmZvcm1hdERhdGUobWF4KTtcclxuXHJcbiAgICAvLyB0aGlzLmdldFJhbmdlVmFsdWVzKCk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIC8vIGdldCBkYXRlQ29udHJvbCgpIHtcclxuICAvLyAgIHJldHVybiB0aGlzLmRhdGVQaWNrZXJGb3JtLmdldCgnZGF0ZScpO1xyXG4gIC8vIH1cclxuXHJcbiAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZnhDb21wb25lbnQ/LmZ4RGF0YT8ubmFtZTtcclxuICAgIGlmKGtleSl7XHJcbiAgICAgICAgY29uc3QgZGF0ZVBhdGNoID0gdGhpcy5kYXRlUGlja2VyTWFwLmdldChrZXkpXHJcbiAgICAgICAgY29uc3QgZmluYWxEYXRlID0gZGF0ZVBhdGNoIHx8IHRoaXMuZm9ybWF0RGF0ZShuZXcgRGF0ZSgpKVxyXG4gICAgICAgIGlmKGRhdGVQYXRjaCl7XHJcbiAgICAgICAgICAgIHRoaXMubWluRGF0ZSA9IGRhdGVQYXRjaFxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICB0aGlzLm1pbkRhdGUgPSB0aGlzLmZvcm1hdERhdGUobmV3IERhdGUodGhpcy50b2RheS5zZXREYXRlKG5ldyBEYXRlKCkuZ2V0RGF0ZSgpIC0gMzApKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgLy8gdGhpcy5kYXRlUGlja2VyRm9ybS5wYXRjaFZhbHVlKHtkYXRlOmZpbmFsRGF0ZX0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRDb250ZXh0QmFzZUlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXRSYW5nZVZhbHVlcygpIHtcclxuICAgIHRoaXMuaHR0cC5nZXQ8YW55Pih0aGlzLnNldHRpbmcoJ2FwaVVSTCcpKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XHJcbiAgXHJcbiAgICAgIGNvbnN0IG1pbk9mZnNldCA9IHJlc3BvbnNlW3RoaXMuc2V0dGluZygnbWluRGF0ZUtleScpXSB8fCB0aGlzLnNldHRpbmcoJ21pblZhbGlkYXRpb24nKTtcclxuICAgICAgY29uc3QgbWF4T2Zmc2V0ID0gcmVzcG9uc2VbdGhpcy5zZXR0aW5nKCdtYXhEYXRlS2V5JyldIHx8IHRoaXMuc2V0dGluZygnbWF4VmFsaWRhdGlvbicpO1xyXG4gIFxyXG4gICAgICAvLyB0aGlzLm1pbkRhdGUgPSBuZXcgRGF0ZSh0b2RheSk7XHJcbiAgICAgIC8vIHRoaXMubWluRGF0ZS5zZXREYXRlKHRvZGF5LmdldERhdGUoKSArIG1pbk9mZnNldCk7XHJcbiAgXHJcbiAgICAgIC8vIHRoaXMubWF4RGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcclxuICAgICAgLy8gdGhpcy5tYXhEYXRlLnNldERhdGUodG9kYXkuZ2V0RGF0ZSgpICsgbWF4T2Zmc2V0KTtcclxuXHJcbiAgICB0aGlzLm1pbkRhdGUgPSB0aGlzLmZvcm1hdERhdGUobmV3IERhdGUodGhpcy50b2RheS5zZXREYXRlKG5ldyBEYXRlKCkuZ2V0RGF0ZSgpICsgbWluT2Zmc2V0KSkpO1xyXG4gIHRoaXMubWF4RGF0ZSA9IHRoaXMuZm9ybWF0RGF0ZShuZXcgRGF0ZSh0aGlzLnRvZGF5LnNldERhdGUobmV3IERhdGUoKS5nZXREYXRlKCkgKyBtYXhPZmZzZXQpKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0RGF0ZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07IFxyXG59XHJcbiAgXHJcblxyXG5cclxuICAgIHByb3RlY3RlZCBzZXR0aW5ncygpOiBGeFNldHRpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdtaW5WYWxpZGF0aW9uJywgJHRpdGxlOiAnTWluIFZhbGlkYXRpb24nLCB2YWx1ZTogJycgfSksXHJcbiAgICAgICAgICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAnbWF4VmFsaWRhdGlvbicsICR0aXRsZTogJ01heCBWYWxpZGF0aW9uJywgdmFsdWU6ICcnIH0pLFxyXG4gICAgICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ2FwaVVSTCcsICR0aXRsZTogJ0FQSSBVcmwnLCB2YWx1ZTogJycgfSksXHJcbiAgICAgICAgICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAnbWluRGF0ZUtleScsICR0aXRsZTogJ01pbiBSYW5nZSBBUEkgS2V5JywgdmFsdWU6ICcnIH0pLFxyXG4gICAgICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ21heERhdGVLZXknLCAkdGl0bGU6ICdNYXggUmFuZ2UgQVBJIEtleScsIHZhbHVlOiAnJyB9KSxcclxuICAgICAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdwbGFjZUhvbGRlcicsICR0aXRsZTogJ1BsYWNlaG9sZGVyJywgdmFsdWU6ICdTZWxlY3QgRGF0ZScgfSksXHJcbiAgICAgICAgICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAnbGFiZWwnLCAkdGl0bGU6ICdMYWJlbCcsIHZhbHVlOiAnJyB9KSxcclxuICAgICAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdkYXRlUGlja2VyRXJyb3JNZXNzYWdlJywgJHRpdGxlOiAnRXJyb3IgTWVzc2FnZScsIHZhbHVlOiAnUGxlYXNlIGZpbGwgb3V0IHRoZSBmaWVsZCcgfSksXHJcbiAgICAgICAgIFxyXG4gICAgICAgIF07XHJcbiAgICAgIH1cclxuICAgIFxyXG4gICAgICBwcm90ZWN0ZWQgdmFsaWRhdGlvbnMoKTogRnhWYWxpZGF0aW9uW10ge1xyXG4gICAgICAgIHJldHVybiBbRnhWYWxpZGF0b3JTZXJ2aWNlLnJlcXVpcmVkXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdXBkYXRlVGV4dEFyZWEoKTogdm9pZCB7XHJcbiAgICAvLyBHZXQgYWxsIHRoZSBmb3JtIGNvbnRyb2wgdmFsdWVzXHJcbiAgICBjb25zb2xlLmxvZygnVXBkYXRpbmcgdGV4dCBhcmVhIHdpdGggZHluYW1pYyB2YWx1ZXMnLHRoaXMuZnhDb21wb25lbnQpO1xyXG5cclxuICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSB0aGlzLmZ4Q29tcG9uZW50Py5meERhdGE/LiRmb3JtR3JvdXA/LnZhbHVlO1xyXG5cclxuICAgIC8vIGNvbnN0IGZvcm1WYWx1ZXMgPSB7bmFtZTogJ0pvaG4nLCBhZ2U6IDMwfTsgLy8gRXhhbXBsZSB2YWx1ZXMsIHJlcGxhY2Ugd2l0aCBhY3R1YWwgZm9ybSBjb250cm9sIHZhbHVlc1xyXG4gICAgXHJcbiAgICAvLyBSZXBsYWNlIHBsYWNlaG9sZGVycyBpbiB0aGUgdGV4dCB0ZW1wbGF0ZSB3aXRoIGNvcnJlc3BvbmRpbmcgZm9ybSBjb250cm9sIHZhbHVlc1xyXG4gICAgY29uc29sZS5sb2coJ0Zvcm0gVmFsdWVzOicsIGZvcm1WYWx1ZXMpO1xyXG4gICAgdGhpcy5keW5hbWljVGV4dCA9IHRoaXMucmVwbGFjZVBsYWNlaG9sZGVycyh0aGlzLmR5bmFtaWNUZXh0LCBmb3JtVmFsdWVzKTtcclxuICAgIGNvbnNvbGUubG9nKCdSZXBsYWNlZCBkeW5hbWljIHRleHQ6JywgdGhpcy5keW5hbWljVGV4dCk7XHJcbiAgICB0aGlzLnN1bW1hcnlGb3JtLnBhdGNoVmFsdWUoeyBzdW1tYXJ5OiB0aGlzLmR5bmFtaWNUZXh0IH0pO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLy8gLy8gTWV0aG9kIHRvIHJlcGxhY2UgcGxhY2Vob2xkZXJzIGluIHRoZSBzdHJpbmcgYmFzZWQgb24gZm9ybSBjb250cm9sIHZhbHVlc1xyXG4gIC8vIHJlcGxhY2VQbGFjZWhvbGRlcnModGVtcGxhdGU6IHN0cmluZywgdmFsdWVzOiBhbnkpOiBzdHJpbmcge1xyXG4gIC8vICAgLy8gVXNlIGEgcmVndWxhciBleHByZXNzaW9uIHRvIGZpbmQgcGxhY2Vob2xkZXJzIGxpa2Uge25hbWV9LCB7YWdlfSwgZXRjLlxyXG4gIC8vICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoL3soLio/KX0vZywgKG1hdGNoLCBwbGFjZWhvbGRlcikgPT4ge1xyXG4gIC8vICAgICAvLyBGb3IgZWFjaCBwbGFjZWhvbGRlciwgbG9vayBpdCB1cCBpbiB0aGUgZm9ybSBjb250cm9sIHZhbHVlc1xyXG4gIC8vICAgICByZXR1cm4gdmFsdWVzW3BsYWNlaG9sZGVyXSAhPT0gdW5kZWZpbmVkID8gdmFsdWVzW3BsYWNlaG9sZGVyXSA6IG1hdGNoO1xyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG5cclxuXHJcbiAgcmVwbGFjZVBsYWNlaG9sZGVycyh0ZW1wbGF0ZTogc3RyaW5nLCB2YWx1ZXM6IGFueSk6IHN0cmluZyB7XHJcbiAgLy8gTG9nIHRoZSB2YWx1ZXMgdG8gZGVidWdcclxuICBjb25zb2xlLmxvZygnVmFsdWVzOicsIHZhbHVlcyk7XHJcbiAgXHJcbiAgLy8gVXNlIGEgcmVndWxhciBleHByZXNzaW9uIHRvIGZpbmQgcGxhY2Vob2xkZXJzIGxpa2Uge25hbWV9LCB7YWdlfSwgZXRjLlxyXG4gIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC97KC4qPyl9L2csIChtYXRjaCwgcGxhY2Vob2xkZXIpID0+IHtcclxuICAgIC8vIExvZyBlYWNoIHBsYWNlaG9sZGVyIGJlaW5nIHByb2Nlc3NlZFxyXG4gICAgY29uc29sZS5sb2coJ1Byb2Nlc3NpbmcgcGxhY2Vob2xkZXI6JywgcGxhY2Vob2xkZXIpO1xyXG4gICAgXHJcbiAgICAvLyBDaGVjayBpZiB0aGUgcGxhY2Vob2xkZXIgZXhpc3RzIGluIHZhbHVlc1xyXG4gICAgaWYgKHZhbHVlc1twbGFjZWhvbGRlcl0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhgUmVwbGFjaW5nIHske3BsYWNlaG9sZGVyfX0gd2l0aDpgLCB2YWx1ZXNbcGxhY2Vob2xkZXJdKTtcclxuICAgICAgcmV0dXJuIHZhbHVlc1twbGFjZWhvbGRlcl07ICAvLyBSZXBsYWNlIHBsYWNlaG9sZGVyIHdpdGggaXRzIHZhbHVlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZyhgTm8gdmFsdWUgZm91bmQgZm9yIHske3BsYWNlaG9sZGVyfX0sIGtlZXBpbmcgdGhlIHBsYWNlaG9sZGVyLmApO1xyXG4gICAgICByZXR1cm4gbWF0Y2g7ICAvLyBLZWVwIHBsYWNlaG9sZGVyIGlmIG5vIHZhbHVlIGZvdW5kXHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcblxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgIC8vIEFmdGVyIHRoZSB2aWV3IGhhcyBiZWVuIGNoZWNrZWQsIHVwZGF0ZSB0ZXh0IGFyZWEgaWYgbmVlZGVkXHJcbiAgICB0aGlzLnVwZGF0ZVRleHRBcmVhKCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7ICAvLyBNYW51YWxseSB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb25cclxuICB9XHJcbn1cclxuIiwiPGZ4LWNvbXBvbmVudCBbZnhEYXRhXT1cImZ4RGF0YVwiICNmeENvbXBvbmVudD5cclxuICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWRhdGUtcGlja2VyIHJlbGF0aXZlXCI+XHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInN1bW1hcnlGb3JtXCI+XHJcblxyXG4gICAgICAgIDxsYWJlbCBmb3I9XCJkYXRlXCIgY2xhc3M9XCJpbnB1dC1sYWJlbFwiPnt7IHNldHRpbmcoJ2xhYmVsJykgfX08c3BhbiBjbGFzcz1cImZpZWxkLXJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZVwiPlxyXG4gICAgICAgIDx0ZXh0YXJlYSBmb3JtQ29udHJvbE5hbWU9XCJzdW1tYXJ5XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwhLS0gPGRpdj5cclxuICAgICAgPHNtYWxsICpuZ0lmPVwiZGF0ZVBpY2tlckZvcm0uZ2V0KCdkYXRlJyk/LnRvdWNoZWQgJiYgZGF0ZVBpY2tlckZvcm0uZ2V0KCdkYXRlJyk/LmVycm9ycz8uWydyZXF1aXJlZCddXCJcclxuICAgICAgICBjbGFzcz1cInRleHQtcmVkLTUwMFwiPlxyXG4gICAgICB7eyBzZXR0aW5nKCdkYXRlUGlja2VyRXJyb3JNZXNzYWdlJykgfX1cclxuICAgICAgPC9zbWFsbD5cclxuICAgIDwvZGl2PiAtLT5cclxuICAgIDwvZm9ybT5cclxuICA8L2Rpdj5cclxuXHJcbjwvZngtY29tcG9uZW50PiJdfQ==
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VtbWFyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL3N1bW1hcnkvc3VtbWFyeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL3N1bW1hcnkvc3VtbWFyeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUF1QyxTQUFTLEVBQUUsTUFBTSxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBeUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RyxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBYSxlQUFlLEVBQW9DLE1BQU0scUJBQXFCLENBQUM7QUFHakksT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBUzFDLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxlQUFlO0lBa0I5QjtJQUErQjtJQUF5QjtJQWpCckUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVuQyxPQUFPLENBQVU7SUFDakIsT0FBTyxDQUFVO0lBQ2QsS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDTyxXQUFXLENBQWU7SUFDNUMsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7SUFDMUMsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7SUFLL0IsV0FBVyxHQUFjLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQzNDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FB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LDJIRExILFlBQVksOEJBQUUsbUJBQW1CLDQ4QkFBRSxXQUFXLCtCQUFFLFdBQVc7OzRGQUkxRCxnQkFBZ0I7a0JBUDVCLFNBQVM7K0JBQ0UsYUFBYSxjQUNYLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDO3FKQVUzQyxXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdDaGVja2VkLCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBpbmplY3QsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1zTW9kdWxlLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGeEJhc2VDb21wb25lbnQsIEZ4Q29tcG9uZW50LCBGeFNldHRpbmcsIEZ4U3RyaW5nU2V0dGluZywgRnhWYWxpZGF0aW9uLCBGeFZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICdAaW5zdGFudHN5cy1sYWJzL2Z4JztcclxuaW1wb3J0IHsgQ2FsZW5kYXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NhbGVuZGFyJztcclxuaW1wb3J0IHsgRnhCdWlsZGVyV3JhcHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9meC1idWlsZGVyLXdyYXBwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItc3VtbWFyeScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3Jtc01vZHVsZSwgRnhDb21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zdW1tYXJ5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vc3VtbWFyeS5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU3VtbWFyeUNvbXBvbmVudCBleHRlbmRzIEZ4QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZHtcclxuICBwcml2YXRlIGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcclxuXHJcbm1pbkRhdGUhOiBzdHJpbmc7XHJcbm1heERhdGUhOiBzdHJpbmc7XHJcbiAgIHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgQFZpZXdDaGlsZCgnZnhDb21wb25lbnQnKSBmeENvbXBvbmVudCE6IEZ4Q29tcG9uZW50O1xyXG4gICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Qm9vbGVhbj4oKTtcclxuICAgZGF0ZVBpY2tlck1hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XHJcbiAgXHJcbiAgIFxyXG5cclxuXHJcbiAgICBwdWJsaWMgc3VtbWFyeUZvcm06IEZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgc3VtbWFyeTogWycnXSxcclxuICAgICB9KVxyXG5cclxuICAgICAgZHluYW1pY1RleHQ6IHN0cmluZyA9ICcnO1xyXG4gICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYscHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LHByaXZhdGUgZnhCdWlsZGVyV3JhcHBlclNlcnZpY2U6IEZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlKSB7XHJcbiAgICAgIHN1cGVyKGNkcilcclxuICAgICAgdGhpcy5vbkluaXQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9yZWdpc3Rlcih0aGlzLnN1bW1hcnlGb3JtKTtcclxuICAgICAgfSk7XHJcbiAgICAgXHJcbiAgICB9XHJcblxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZHluYW1pY1RleHQgPSB0aGlzLnNldHRpbmcoJ3N1bW1hcnlUZXh0JykgfHwgJyc7XHJcbiAgIHRoaXMuZnhCdWlsZGVyV3JhcHBlclNlcnZpY2UudmFyaWFibGVzJFxyXG4gIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAuc3Vic2NyaWJlKCh2YXJpYWJsZXM6IGFueSkgPT4ge1xyXG4gICAgaWYgKCF2YXJpYWJsZXMpIHJldHVybjtcclxuICB9KTtcclxuICB9XHJcblxyXG4gICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmZ4Q29tcG9uZW50Py5meERhdGE/Lm5hbWU7XHJcbiAgICBpZihrZXkpe1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRDb250ZXh0QmFzZUlkKCk7XHJcbiAgfVxyXG5cclxuICBcclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXREYXRlKGRhdGU6IERhdGUpOiBzdHJpbmcge1xyXG4gIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTsgXHJcbn1cclxuICBcclxuXHJcblxyXG4gICAgcHJvdGVjdGVkIHNldHRpbmdzKCk6IEZ4U2V0dGluZ1tdIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ3N1bW1hcnlUZXh0JywgJHRpdGxlOiAnU3VtbWFyeSBUZXh0JywgdmFsdWU6ICcnIH0pLFxyXG4gICAgICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ3N1bW1hcnlMYWJlbCcsICR0aXRsZTogJ0xhYmVsJywgdmFsdWU6ICcnIH0pLFxyXG4gICAgICAgIF07XHJcbiAgICAgIH1cclxuICAgIFxyXG4gICAgICBwcm90ZWN0ZWQgdmFsaWRhdGlvbnMoKTogRnhWYWxpZGF0aW9uW10ge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgICAgfVxyXG5cclxuICAgIHVwZGF0ZVRleHRBcmVhKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZm9ybVZhbHVlcyA9IHRoaXMuZnhDb21wb25lbnQ/LmZ4RGF0YT8uJGZvcm1Hcm91cD8udmFsdWU7XHJcbiAgICBjb25zdCBkeW5hbWljVGV4dCA9IHRoaXMucmVwbGFjZVBsYWNlaG9sZGVycyh0aGlzLmR5bmFtaWNUZXh0LCBmb3JtVmFsdWVzKTtcclxuICAgIHRoaXMuc3VtbWFyeUZvcm0ucGF0Y2hWYWx1ZSh7IHN1bW1hcnk6IGR5bmFtaWNUZXh0IH0pO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcmVwbGFjZVBsYWNlaG9sZGVycyh0ZW1wbGF0ZTogc3RyaW5nLCB2YWx1ZXM6IGFueSk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoL3soLio/KX0vZywgKG1hdGNoLCBwbGFjZWhvbGRlcikgPT4ge1xyXG4gICAgaWYgKHZhbHVlc1twbGFjZWhvbGRlcl0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdmFsdWVzW3BsYWNlaG9sZGVyXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBtYXRjaDtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVUZXh0QXJlYSgpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxufVxyXG4iLCI8ZngtY29tcG9uZW50IFtmeERhdGFdPVwiZnhEYXRhXCIgI2Z4Q29tcG9uZW50PlxyXG4gIDxkaXYgY2xhc3M9XCJjdXN0b20tZGF0ZS1waWNrZXIgcmVsYXRpdmVcIj5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwic3VtbWFyeUZvcm1cIj5cclxuXHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwic3VtbWFyeS1sYWJlbFwiPnt7IHNldHRpbmcoJ3N1bW1hcnlMYWJlbCcpIH19PC9sYWJlbD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmVcIj5cclxuICAgICAgICA8dGV4dGFyZWEgZm9ybUNvbnRyb2xOYW1lPVwic3VtbWFyeVwiIHJlYWRvbmx5IGNsYXNzPVwidy1mdWxsXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwhLS0gPGRpdj5cclxuICAgICAgPHNtYWxsICpuZ0lmPVwiZGF0ZVBpY2tlckZvcm0uZ2V0KCdkYXRlJyk/LnRvdWNoZWQgJiYgZGF0ZVBpY2tlckZvcm0uZ2V0KCdkYXRlJyk/LmVycm9ycz8uWydyZXF1aXJlZCddXCJcclxuICAgICAgICBjbGFzcz1cInRleHQtcmVkLTUwMFwiPlxyXG4gICAgICB7eyBzZXR0aW5nKCdkYXRlUGlja2VyRXJyb3JNZXNzYWdlJykgfX1cclxuICAgICAgPC9zbWFsbD5cclxuICAgIDwvZGl2PiAtLT5cclxuICAgIDwvZm9ybT5cclxuICA8L2Rpdj5cclxuXHJcbjwvZngtY29tcG9uZW50PiJdfQ==
|