@3kles/kles-material-dynamicforms 1.1.0 → 1.1.4
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/3kles-kles-material-dynamicforms.d.ts +5 -5
- package/3kles-kles-material-dynamicforms.metadata.json +1 -1
- package/bundles/3kles-kles-material-dynamicforms.umd.js +1478 -1457
- package/bundles/3kles-kles-material-dynamicforms.umd.js.map +1 -1
- package/bundles/3kles-kles-material-dynamicforms.umd.min.js +2 -2
- package/bundles/3kles-kles-material-dynamicforms.umd.min.js.map +1 -1
- package/esm2015/3kles-kles-material-dynamicforms.js +5 -5
- package/esm2015/lib/directive/dynamic-component.directive.js +50 -46
- package/esm2015/lib/directive/dynamic-field.directive.js +94 -94
- package/esm2015/lib/dynamic-form.component.js +238 -234
- package/esm2015/lib/fields/badge.component.js +20 -20
- package/esm2015/lib/fields/button-form.component.js +28 -28
- package/esm2015/lib/fields/button-submit.component.js +20 -20
- package/esm2015/lib/fields/button-toogle-group.component.js +37 -37
- package/esm2015/lib/fields/buttonchecker-form.component.js +28 -28
- package/esm2015/lib/fields/buttonfile-form.component.js +27 -27
- package/esm2015/lib/fields/checkbox.component.js +24 -24
- package/esm2015/lib/fields/chip.component.js +23 -23
- package/esm2015/lib/fields/color.component.js +58 -58
- package/esm2015/lib/fields/date.component.js +28 -28
- package/esm2015/lib/fields/field.abstract.js +40 -40
- package/esm2015/lib/fields/group.component.js +27 -27
- package/esm2015/lib/fields/icon.component.js +18 -18
- package/esm2015/lib/fields/input.clearable.component.js +56 -56
- package/esm2015/lib/fields/input.component.js +101 -101
- package/esm2015/lib/fields/label.component.js +23 -23
- package/esm2015/lib/fields/line-break.component.js +19 -19
- package/esm2015/lib/fields/link.component.js +20 -20
- package/esm2015/lib/fields/list-field.component.js +83 -83
- package/esm2015/lib/fields/radio.component.js +27 -27
- package/esm2015/lib/fields/select.component.js +120 -114
- package/esm2015/lib/fields/select.search.component.js +205 -199
- package/esm2015/lib/fields/selection-list.component.js +40 -41
- package/esm2015/lib/fields/slide-toggle.component.js +24 -24
- package/esm2015/lib/fields/text.component.js +20 -20
- package/esm2015/lib/fields/textarea.component.js +32 -32
- package/esm2015/lib/forms/button-control.component.js +102 -102
- package/esm2015/lib/forms/buttonchecker-control.component.js +53 -53
- package/esm2015/lib/forms/buttonfile-control.component.js +107 -107
- package/esm2015/lib/interfaces/component.interface.js +1 -1
- package/esm2015/lib/interfaces/field.config.interface.js +1 -1
- package/esm2015/lib/interfaces/field.interface.js +1 -1
- package/esm2015/lib/interfaces/validator.interface.js +1 -1
- package/esm2015/lib/kles-material-dynamicforms.module.js +114 -114
- package/esm2015/lib/matcher/form-error.matcher.js +9 -9
- package/esm2015/lib/modules/material.module.js +129 -129
- package/esm2015/lib/pipe/array.pipe.js +20 -20
- package/esm2015/lib/pipe/transform.pipe.js +25 -25
- package/esm2015/lib/validators/autocomplete.validator.js +23 -23
- package/esm2015/public-api.js +48 -48
- package/esm5/3kles-kles-material-dynamicforms.js +5 -5
- package/esm5/lib/directive/dynamic-component.directive.js +51 -47
- package/esm5/lib/directive/dynamic-field.directive.js +95 -95
- package/esm5/lib/dynamic-form.component.js +240 -236
- package/esm5/lib/fields/badge.component.js +21 -21
- package/esm5/lib/fields/button-form.component.js +21 -21
- package/esm5/lib/fields/button-submit.component.js +21 -21
- package/esm5/lib/fields/button-toogle-group.component.js +33 -33
- package/esm5/lib/fields/buttonchecker-form.component.js +21 -21
- package/esm5/lib/fields/buttonfile-form.component.js +21 -21
- package/esm5/lib/fields/checkbox.component.js +19 -19
- package/esm5/lib/fields/chip.component.js +19 -19
- package/esm5/lib/fields/color.component.js +46 -46
- package/esm5/lib/fields/date.component.js +19 -19
- package/esm5/lib/fields/field.abstract.js +45 -45
- package/esm5/lib/fields/group.component.js +25 -25
- package/esm5/lib/fields/icon.component.js +19 -19
- package/esm5/lib/fields/input.clearable.component.js +19 -19
- package/esm5/lib/fields/input.component.js +70 -70
- package/esm5/lib/fields/label.component.js +22 -22
- package/esm5/lib/fields/line-break.component.js +20 -20
- package/esm5/lib/fields/link.component.js +21 -21
- package/esm5/lib/fields/list-field.component.js +63 -63
- package/esm5/lib/fields/radio.component.js +19 -19
- package/esm5/lib/fields/select.component.js +52 -45
- package/esm5/lib/fields/select.search.component.js +119 -113
- package/esm5/lib/fields/selection-list.component.js +29 -29
- package/esm5/lib/fields/slide-toggle.component.js +19 -19
- package/esm5/lib/fields/text.component.js +21 -21
- package/esm5/lib/fields/textarea.component.js +22 -22
- package/esm5/lib/forms/button-control.component.js +95 -95
- package/esm5/lib/forms/buttonchecker-control.component.js +37 -37
- package/esm5/lib/forms/buttonfile-control.component.js +123 -123
- package/esm5/lib/interfaces/component.interface.js +1 -1
- package/esm5/lib/interfaces/field.config.interface.js +1 -1
- package/esm5/lib/interfaces/field.interface.js +1 -1
- package/esm5/lib/interfaces/validator.interface.js +1 -1
- package/esm5/lib/kles-material-dynamicforms.module.js +117 -117
- package/esm5/lib/matcher/form-error.matcher.js +11 -11
- package/esm5/lib/modules/material.module.js +132 -132
- package/esm5/lib/pipe/array.pipe.js +23 -23
- package/esm5/lib/pipe/transform.pipe.js +28 -28
- package/esm5/lib/validators/autocomplete.validator.js +23 -23
- package/esm5/public-api.js +48 -48
- package/fesm2015/3kles-kles-material-dynamicforms.js +1795 -1776
- package/fesm2015/3kles-kles-material-dynamicforms.js.map +1 -1
- package/fesm5/3kles-kles-material-dynamicforms.js +1482 -1461
- package/fesm5/3kles-kles-material-dynamicforms.js.map +1 -1
- package/lib/directive/dynamic-component.directive.d.ts +14 -12
- package/lib/directive/dynamic-field.directive.d.ts +16 -16
- package/lib/dynamic-form.component.d.ts +28 -28
- package/lib/fields/badge.component.d.ts +5 -5
- package/lib/fields/button-form.component.d.ts +5 -5
- package/lib/fields/button-submit.component.d.ts +5 -5
- package/lib/fields/button-toogle-group.component.d.ts +7 -7
- package/lib/fields/buttonchecker-form.component.d.ts +5 -5
- package/lib/fields/buttonfile-form.component.d.ts +5 -5
- package/lib/fields/checkbox.component.d.ts +5 -5
- package/lib/fields/chip.component.d.ts +5 -5
- package/lib/fields/color.component.d.ts +6 -6
- package/lib/fields/date.component.d.ts +5 -5
- package/lib/fields/field.abstract.d.ts +12 -12
- package/lib/fields/group.component.d.ts +7 -7
- package/lib/fields/icon.component.d.ts +5 -5
- package/lib/fields/input.clearable.component.d.ts +4 -4
- package/lib/fields/input.component.d.ts +11 -11
- package/lib/fields/label.component.d.ts +5 -5
- package/lib/fields/line-break.component.d.ts +5 -5
- package/lib/fields/link.component.d.ts +5 -5
- package/lib/fields/list-field.component.d.ts +14 -14
- package/lib/fields/radio.component.d.ts +5 -5
- package/lib/fields/select.component.d.ts +14 -13
- package/lib/fields/select.search.component.d.ts +20 -19
- package/lib/fields/selection-list.component.d.ts +7 -7
- package/lib/fields/slide-toggle.component.d.ts +5 -5
- package/lib/fields/text.component.d.ts +5 -5
- package/lib/fields/textarea.component.d.ts +5 -5
- package/lib/forms/button-control.component.d.ts +33 -33
- package/lib/forms/buttonchecker-control.component.d.ts +11 -11
- package/lib/forms/buttonfile-control.component.d.ts +17 -17
- package/lib/interfaces/component.interface.d.ts +5 -5
- package/lib/interfaces/field.config.interface.d.ts +52 -51
- package/lib/interfaces/field.interface.d.ts +7 -7
- package/lib/interfaces/validator.interface.d.ts +5 -5
- package/lib/kles-material-dynamicforms.module.d.ts +2 -2
- package/lib/matcher/form-error.matcher.d.ts +6 -6
- package/lib/modules/material.module.d.ts +2 -2
- package/lib/pipe/array.pipe.d.ts +4 -4
- package/lib/pipe/transform.pipe.d.ts +7 -7
- package/lib/validators/autocomplete.validator.d.ts +3 -3
- package/package.json +1 -1
- package/public-api.d.ts +48 -48
|
@@ -1,236 +1,240 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
3
|
-
import { FormGroup, FormBuilder, Validators, ValidatorFn, AsyncValidatorFn, ValidationErrors, AsyncValidator, AbstractControl } from '@angular/forms';
|
|
4
|
-
var KlesDynamicFormComponent = /** @class */ (function () {
|
|
5
|
-
function KlesDynamicFormComponent(fb) {
|
|
6
|
-
this.fb = fb;
|
|
7
|
-
this.fields = [];
|
|
8
|
-
this.validators = [];
|
|
9
|
-
this.asyncValidators = [];
|
|
10
|
-
// tslint:disable-next-line: no-output-native
|
|
11
|
-
this.submit = new EventEmitter();
|
|
12
|
-
this._onLoaded = new EventEmitter();
|
|
13
|
-
this.direction = 'column';
|
|
14
|
-
this.orientationClass = 'dynamic-form-column';
|
|
15
|
-
this.orientationItemClass = 'dynamic-form-column-item';
|
|
16
|
-
}
|
|
17
|
-
Object.defineProperty(KlesDynamicFormComponent.prototype, "value", {
|
|
18
|
-
get: function () {
|
|
19
|
-
return this.form.value;
|
|
20
|
-
},
|
|
21
|
-
enumerable: true,
|
|
22
|
-
configurable: true
|
|
23
|
-
});
|
|
24
|
-
KlesDynamicFormComponent.prototype.ngOnInit = function () {
|
|
25
|
-
this.form = this.createForm();
|
|
26
|
-
this.orientationClass = this.direction === 'row' ? 'dynamic-form-row' : 'dynamic-form-column';
|
|
27
|
-
this.orientationItemClass = this.direction === 'row' ? 'dynamic-form-row-item' : 'dynamic-form-column-item';
|
|
28
|
-
this._onLoaded.emit();
|
|
29
|
-
};
|
|
30
|
-
KlesDynamicFormComponent.prototype.ngOnChanges = function (changes) {
|
|
31
|
-
var _a, _b, _c, _d;
|
|
32
|
-
if (!((_a = changes.fields) === null || _a === void 0 ? void 0 : _a.firstChange)) {
|
|
33
|
-
this.updateForm();
|
|
34
|
-
// this.form = this.createControl();
|
|
35
|
-
// this.form.controls = {};
|
|
36
|
-
this._onLoaded.emit();
|
|
37
|
-
}
|
|
38
|
-
if (!((_b = changes.validators) === null || _b === void 0 ? void 0 : _b.firstChange) && this.form) {
|
|
39
|
-
this.form.setValidators(this.validators.map(function (v) { return v.validator; }));
|
|
40
|
-
}
|
|
41
|
-
if (!((_c = changes.asyncValidators) === null || _c === void 0 ? void 0 : _c.firstChange) && this.form) {
|
|
42
|
-
this.form.setAsyncValidators(this.asyncValidators.map(function (v) { return v.validator; }));
|
|
43
|
-
}
|
|
44
|
-
if (!((_d = changes.direction) === null || _d === void 0 ? void 0 : _d.firstChange)) {
|
|
45
|
-
this.orientationClass = this.direction === 'row' ? 'dynamic-form-row' : 'dynamic-form-column';
|
|
46
|
-
this.orientationItemClass = this.direction === 'row' ? 'dynamic-form-row-item' : 'dynamic-form-column-item';
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
KlesDynamicFormComponent.prototype.onSubmit = function (event) {
|
|
50
|
-
event.preventDefault();
|
|
51
|
-
event.stopPropagation();
|
|
52
|
-
if (this.form.valid) {
|
|
53
|
-
this.submit.emit(this.form.value);
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
this.validateAllFormFields(this.form);
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
KlesDynamicFormComponent.prototype.reset = function () {
|
|
60
|
-
this.form.reset();
|
|
61
|
-
};
|
|
62
|
-
KlesDynamicFormComponent.prototype.updateForm = function () {
|
|
63
|
-
var _this = this;
|
|
64
|
-
Object.keys(this.form.controls).filter(function (key) {
|
|
65
|
-
return !_this.fields.map(function (field) { return field.name; }).includes(key);
|
|
66
|
-
}).forEach(function (key) {
|
|
67
|
-
_this.form.removeControl(key);
|
|
68
|
-
});
|
|
69
|
-
this.fields
|
|
70
|
-
.filter(function (field) { return !_this.form.controls[field.name]; })
|
|
71
|
-
.forEach(function (field) {
|
|
72
|
-
if (field.type === 'lineBreak') {
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
var control = _this.createControl(field);
|
|
76
|
-
_this.form.addControl(field.name, control);
|
|
77
|
-
});
|
|
78
|
-
};
|
|
79
|
-
KlesDynamicFormComponent.prototype.createControl = function (field) {
|
|
80
|
-
var _this = this;
|
|
81
|
-
if (field.type === 'listField') {
|
|
82
|
-
var array_1 = this.fb.array([]);
|
|
83
|
-
field.value.forEach(function (data) {
|
|
84
|
-
var subGroup = _this.fb.group({});
|
|
85
|
-
field.collections.forEach(function (subfield) {
|
|
86
|
-
var control = _this.createControl(subfield);
|
|
87
|
-
subGroup.addControl(subfield.name, control);
|
|
88
|
-
});
|
|
89
|
-
array_1.push(subGroup);
|
|
90
|
-
});
|
|
91
|
-
return array_1;
|
|
92
|
-
}
|
|
93
|
-
else if (field.type === 'group') {
|
|
94
|
-
var subGroup_1 = this.fb.group({});
|
|
95
|
-
if (field.collections && Array.isArray(field.collections)) {
|
|
96
|
-
field.collections.forEach(function (subfield) {
|
|
97
|
-
var control = _this.createControl(subfield);
|
|
98
|
-
subGroup_1.addControl(subfield.name, control);
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
return subGroup_1;
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
var control = this.fb.control(field.value,
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
//
|
|
116
|
-
//
|
|
117
|
-
//
|
|
118
|
-
//
|
|
119
|
-
//
|
|
120
|
-
//
|
|
121
|
-
//
|
|
122
|
-
//
|
|
123
|
-
//
|
|
124
|
-
//
|
|
125
|
-
//
|
|
126
|
-
//
|
|
127
|
-
//
|
|
128
|
-
//
|
|
129
|
-
//
|
|
130
|
-
//
|
|
131
|
-
//
|
|
132
|
-
//
|
|
133
|
-
//
|
|
134
|
-
//
|
|
135
|
-
//
|
|
136
|
-
//
|
|
137
|
-
//
|
|
138
|
-
//
|
|
139
|
-
//
|
|
140
|
-
//
|
|
141
|
-
//
|
|
142
|
-
//
|
|
143
|
-
//
|
|
144
|
-
//
|
|
145
|
-
//
|
|
146
|
-
//
|
|
147
|
-
//
|
|
148
|
-
//
|
|
149
|
-
//
|
|
150
|
-
//
|
|
151
|
-
//
|
|
152
|
-
//
|
|
153
|
-
//
|
|
154
|
-
//
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
KlesDynamicFormComponent
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
'.dynamic-form
|
|
227
|
-
'.dynamic-form
|
|
228
|
-
'.dynamic-form
|
|
229
|
-
'.dynamic-form-
|
|
230
|
-
'.dynamic-form-column
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Aza2xlcy9rbGVzLW1hdGVyaWFsLWR5bmFtaWNmb3Jtcy8iLCJzb3VyY2VzIjpbImxpYi9keW5hbWljLWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQVUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUE4QyxNQUFNLGVBQWUsQ0FBQztBQUMzSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQTZCdEo7SUFrQkksa0NBQW9CLEVBQWU7UUFBZixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBakIxQixXQUFNLEdBQXVCLEVBQUUsQ0FBQztRQUNoQyxlQUFVLEdBQWtDLEVBQUUsQ0FBQztRQUMvQyxvQkFBZSxHQUF1QyxFQUFFLENBQUM7UUFDbEUsNkNBQTZDO1FBQ25DLFdBQU0sR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNwRCxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVoQyxjQUFTLEdBQXFCLFFBQVEsQ0FBQztRQUdoRCxxQkFBZ0IsR0FBK0MscUJBQXFCLENBQUM7UUFDckYseUJBQW9CLEdBQXlELDBCQUEwQixDQUFDO0lBTWpFLENBQUM7SUFKeEMsc0JBQUksMkNBQUs7YUFBVDtZQUNJLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDM0IsQ0FBQzs7O09BQUE7SUFLRCwyQ0FBUSxHQUFSO1FBQ0ksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxrQkFBa0Is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Z0Q7SUFDL0M7UUFBUixLQUFLLEVBQUU7cUVBQTBEO0lBRXhEO1FBQVQsTUFBTSxFQUFFOzREQUFxRDtJQUNwRDtRQUFULE1BQU0sRUFBRTsrREFBZ0M7SUFFaEM7UUFBUixLQUFLLEVBQUU7K0RBQXdDO0lBUnZDLHdCQUF3QjtRQXZCcEMsU0FBUyxDQUFDO1lBQ1AsUUFBUSxFQUFFLGlCQUFpQjtZQUMzQixRQUFRLEVBQUUsdUJBQXVCO1lBQ2pDLFFBQVEsRUFBRSxxWkFNVDs7Z0JBRUcsNERBQTREO2dCQUM1RCxtQ0FBbUM7Z0JBQ25DLG1DQUFtQztnQkFDbkMsZ0VBQWdFO2dCQUNoRSwyQ0FBMkM7Z0JBQzNDLG9FQUFvRTtnQkFDcEUsd0NBQXdDO2dCQUN4QyxnREFBZ0Q7Z0JBQ2hELG9EQUFvRDtTQUczRCxDQUFDO09BQ1csd0JBQXdCLENBaU9wQztJQUFELCtCQUFDO0NBQUEsQUFqT0QsSUFpT0M7U0FqT1ksd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT25Jbml0LCBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQWZ0ZXJDb250ZW50SW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMsIFZhbGlkYXRvckZuLCBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0aW9uRXJyb3JzLCBBc3luY1ZhbGlkYXRvciwgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBLbGVzRm9ybUdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi9maWVsZHMvZ3JvdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgS2xlc0Zvcm1MaXN0RmllbGRDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkcy9saXN0LWZpZWxkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElLbGVzRmllbGRDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvZmllbGQuY29uZmlnLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IElLbGVzVmFsaWRhdG9yIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3ZhbGlkYXRvci5pbnRlcmZhY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBleHBvcnRBczogJ2tsZXNEeW5hbWljRm9ybScsXHJcbiAgICBzZWxlY3RvcjogJ2FwcC1rbGVzLWR5bmFtaWMtZm9ybScsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgPGZvcm0gY2xhc3M9XCJ7e29yaWVudGF0aW9uQ2xhc3N9fVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChzdWJtaXQpPVwib25TdWJtaXQoJGV2ZW50KVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZpZWxkcztcIiBjbGFzcz1cInt7b3JpZW50YXRpb25JdGVtQ2xhc3N9fVwiIGtsZXNEeW5hbWljRmllbGQgW2ZpZWxkXT1cImZpZWxkXCIgW2dyb3VwXT1cImZvcm1cIiBbc2libGluZ0ZpZWxkc109XCJmaWVsZHNcIj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tPGJ1dHRvbiAoY2xpY2spPVwicmVzZXQoKVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiPlJFU0VUPC9idXR0b24+LS0+XHJcbiAgICA8L2Zvcm0+XHJcbiAgICBgLFxyXG4gICAgc3R5bGVzOiBbXHJcbiAgICAgICAgLy8gJy5keW5hbWljLWZvcm0ge2Rpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47fScsXHJcbiAgICAgICAgLy8nLmR5bmFtaWMtZm9ybSB7ZGlzcGxheTogZmxleDt9JyxcclxuICAgICAgICAvLycuZHluYW1pYy1mb3JtIHsgd2lkdGg6IDEwMCU7IH0nLFxyXG4gICAgICAgICcuZHluYW1pYy1mb3JtLWNvbHVtbiB7IGRpc3BsYXk6IGZsZXg7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfScsXHJcbiAgICAgICAgJy5keW5hbWljLWZvcm0tY29sdW1uID4gKiB7IHdpZHRoOiAxMDAlOyB9JyxcclxuICAgICAgICAnLmR5bmFtaWMtZm9ybS1yb3cgeyBkaXNwbGF5OiBpbmxpbmUtZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6MTBweCB9JyxcclxuICAgICAgICAnLmR5bmFtaWMtZm9ybS1yb3cgPiAqIHsgd2lkdGg6IDEwMCU7IH0nLFxyXG4gICAgICAgICcuZHluYW1pYy1mb3JtLXJvdy1pdGVtIHsgbWFyZ2luLXJpZ2h0OiAxMHB4OyB9JyxcclxuICAgICAgICAnLmR5bmFtaWMtZm9ybS1jb2x1bW4taXRlbSB7IG1hcmdpbi1ib3R0b206IDEwcHg7IH0nLFxyXG4gICAgXVxyXG5cclxufSlcclxuZXhwb3J0IGNsYXNzIEtsZXNEeW5hbWljRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICAgIEBJbnB1dCgpIGZpZWxkczogSUtsZXNGaWVsZENvbmZpZ1tdID0gW107XHJcbiAgICBASW5wdXQoKSB2YWxpZGF0b3JzOiBJS2xlc1ZhbGlkYXRvcjxWYWxpZGF0b3JGbj5bXSA9IFtdO1xyXG4gICAgQElucHV0KCkgYXN5bmNWYWxpZGF0b3JzOiBJS2xlc1ZhbGlkYXRvcjxBc3luY1ZhbGlkYXRvckZuPltdID0gW107XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLW91dHB1dC1uYXRpdmVcclxuICAgIEBPdXRwdXQoKSBzdWJtaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgX29uTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgIEBJbnB1dCgpIGRpcmVjdGlvbjogJ2NvbHVtbicgfCAncm93JyA9ICdjb2x1bW4nO1xyXG5cclxuICAgIGZvcm06IEZvcm1Hcm91cDtcclxuICAgIG9yaWVudGF0aW9uQ2xhc3M6ICdkeW5hbWljLWZvcm0tY29sdW1uJyB8ICdkeW5hbWljLWZvcm0tcm93JyA9ICdkeW5hbWljLWZvcm0tY29sdW1uJztcclxuICAgIG9yaWVudGF0aW9uSXRlbUNsYXNzOiAnZHluYW1pYy1mb3JtLWNvbHVtbi1pdGVtJyB8ICdkeW5hbWljLWZvcm0tcm93LWl0ZW0nID0gJ2R5bmFtaWMtZm9ybS1jb2x1bW4taXRlbSc7XHJcblxyXG4gICAgZ2V0IHZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIpIHsgfVxyXG5cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuICAgICAgICB0aGlzLm9yaWVudGF0aW9uQ2xhc3MgPSB0aGlzLmRpcmVjdGlvbiA9PT0gJ3JvdycgPyAnZHluYW1pYy1mb3JtLXJvdycgOiAnZHluYW1pYy1mb3JtLWNvbHVtbic7XHJcbiAgICAgICAgdGhpcy5vcmllbnRhdGlvbkl0ZW1DbGFzcyA9IHRoaXMuZGlyZWN0aW9uID09PSAncm93JyA/ICdkeW5hbWljLWZvcm0tcm93LWl0ZW0nIDogJ2R5bmFtaWMtZm9ybS1jb2x1bW4taXRlbSc7XHJcbiAgICAgICAgdGhpcy5fb25Mb2FkZWQuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWNoYW5nZXMuZmllbGRzPy5maXJzdENoYW5nZSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZvcm0oKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5mb3JtID0gdGhpcy5jcmVhdGVDb250cm9sKCk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuZm9ybS5jb250cm9scyA9IHt9O1xyXG4gICAgICAgICAgICB0aGlzLl9vbkxvYWRlZC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNoYW5nZXMudmFsaWRhdG9ycz8uZmlyc3RDaGFuZ2UgJiYgdGhpcy5mb3JtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5zZXRWYWxpZGF0b3JzKHRoaXMudmFsaWRhdG9ycy5tYXAodiA9PiB2LnZhbGlkYXRvcikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFjaGFuZ2VzLmFzeW5jVmFsaWRhdG9ycz8uZmlyc3RDaGFuZ2UgJiYgdGhpcy5mb3JtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5zZXRBc3luY1ZhbGlkYXRvcnModGhpcy5hc3luY1ZhbGlkYXRvcnMubWFwKHYgPT4gdi52YWxpZGF0b3IpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY2hhbmdlcy5kaXJlY3Rpb24/LmZpcnN0Q2hhbmdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3JpZW50YXRpb25DbGFzcyA9IHRoaXMuZGlyZWN0aW9uID09PSAncm93JyA/ICdkeW5hbWljLWZvcm0tcm93JyA6ICdkeW5hbWljLWZvcm0tY29sdW1uJztcclxuICAgICAgICAgICAgdGhpcy5vcmllbnRhdGlvbkl0ZW1DbGFzcyA9IHRoaXMuZGlyZWN0aW9uID09PSAncm93JyA/ICdkeW5hbWljLWZvcm0tcm93LWl0ZW0nIDogJ2R5bmFtaWMtZm9ybS1jb2x1bW4taXRlbSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvblN1Ym1pdChldmVudDogRXZlbnQpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm0udmFsaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJtaXQuZW1pdCh0aGlzLmZvcm0udmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGxGb3JtRmllbGRzKHRoaXMuZm9ybSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0KCkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUZvcm0oKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5mb3JtLmNvbnRyb2xzKS5maWx0ZXIoa2V5ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmZpZWxkcy5tYXAoZmllbGQgPT4gZmllbGQubmFtZSkuaW5jbHVkZXMoa2V5KTtcclxuICAgICAgICB9KS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5yZW1vdmVDb250cm9sKGtleSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkc1xyXG4gICAgICAgICAgICAuZmlsdGVyKGZpZWxkID0+ICF0aGlzLmZvcm0uY29udHJvbHNbZmllbGQubmFtZV0pXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnbGluZUJyZWFrJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNyZWF0ZUNvbnRyb2woZmllbGQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmFkZENvbnRyb2woZmllbGQubmFtZSwgY29udHJvbCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlQ29udHJvbChmaWVsZDogSUtsZXNGaWVsZENvbmZpZyk6IEFic3RyYWN0Q29udHJvbCB7XHJcblxyXG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnbGlzdEZpZWxkJykge1xyXG4gICAgICAgICAgICBjb25zdCBhcnJheSA9IHRoaXMuZmIuYXJyYXkoW10pO1xyXG5cclxuICAgICAgICAgICAgZmllbGQudmFsdWUuZm9yRWFjaCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJHcm91cCA9IHRoaXMuZmIuZ3JvdXAoe30pO1xyXG4gICAgICAgICAgICAgICAgZmllbGQuY29sbGVjdGlvbnMuZm9yRWFjaChzdWJmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbD10aGlzLmNyZWF0ZUNvbnRyb2woc3ViZmllbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHN1Ykdyb3VwLmFkZENvbnRyb2woc3ViZmllbGQubmFtZSwgY29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGFycmF5LnB1c2goc3ViR3JvdXApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ2dyb3VwJykge1xyXG4gICAgICAgICAgICBjb25zdCBzdWJHcm91cCA9IHRoaXMuZmIuZ3JvdXAoe30pO1xyXG4gICAgICAgICAgICBpZiAoZmllbGQuY29sbGVjdGlvbnMgJiYgQXJyYXkuaXNBcnJheShmaWVsZC5jb2xsZWN0aW9ucykpIHtcclxuICAgICAgICAgICAgICAgIGZpZWxkLmNvbGxlY3Rpb25zLmZvckVhY2goc3ViZmllbGQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2w9dGhpcy5jcmVhdGVDb250cm9sKHN1YmZpZWxkKTtcclxuICAgICAgICAgICAgICAgICAgICBzdWJHcm91cC5hZGRDb250cm9sKHN1YmZpZWxkLm5hbWUsIGNvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHN1Ykdyb3VwO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mYi5jb250cm9sKFxyXG4gICAgICAgICAgICAgICAgZmllbGQudmFsdWUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRWYWxpZGF0aW9ucyhmaWVsZC52YWxpZGF0aW9ucyB8fCBbXSksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRBc3luY1ZhbGlkYXRpb25zKGZpZWxkLmFzeW5jVmFsaWRhdGlvbnMgfHwgW10pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChmaWVsZC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2w7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgLy8gcHJpdmF0ZSBjcmVhdGVDb250cm9sKGZpZWxkOiBJS2xlc0ZpZWxkQ29uZmlnKTogQWJzdHJhY3RDb250cm9sIHtcclxuXHJcbiAgICAvLyAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdsaXN0RmllbGQnKSB7XHJcbiAgICAvLyAgICAgICAgIGNvbnN0IGFycmF5ID0gdGhpcy5mYi5hcnJheShbXSk7XHJcblxyXG4gICAgLy8gICAgICAgICBmaWVsZC52YWx1ZS5mb3JFYWNoKChkYXRhOiBhbnkpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgIGNvbnN0IHN1Ykdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XHJcbiAgICAvLyAgICAgICAgICAgICBmaWVsZC5jb2xsZWN0aW9ucy5mb3JFYWNoKHN1YmZpZWxkID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mYi5jb250cm9sKFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBkYXRhW3N1YmZpZWxkLm5hbWVdID8gZGF0YVtzdWJmaWVsZC5uYW1lXSA6IG51bGwsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmluZFZhbGlkYXRpb25zKHN1YmZpZWxkLnZhbGlkYXRpb25zIHx8IFtdKSxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5iaW5kQXN5bmNWYWxpZGF0aW9ucyhzdWJmaWVsZC5hc3luY1ZhbGlkYXRpb25zIHx8IFtdKVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgc3ViR3JvdXAuYWRkQ29udHJvbChzdWJmaWVsZC5uYW1lLCBjb250cm9sKTtcclxuICAgIC8vICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgYXJyYXkucHVzaChzdWJHcm91cCk7XHJcbiAgICAvLyAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gYXJyYXk7XHJcbiAgICAvLyAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAnZ3JvdXAnKSB7XHJcbiAgICAvLyAgICAgICAgIGNvbnN0IHN1Ykdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XHJcbiAgICAvLyAgICAgICAgIGlmIChmaWVsZC5jb2xsZWN0aW9ucyAmJiBBcnJheS5pc0FycmF5KGZpZWxkLmNvbGxlY3Rpb25zKSkge1xyXG4gICAgLy8gICAgICAgICAgICAgZmllbGQuY29sbGVjdGlvbnMuZm9yRWFjaChzdWJmaWVsZCA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZmIuY29udHJvbChcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgc3ViZmllbGQudmFsdWUsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmluZFZhbGlkYXRpb25zKHN1YmZpZWxkLnZhbGlkYXRpb25zIHx8IFtdKSxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5iaW5kQXN5bmNWYWxpZGF0aW9ucyhzdWJmaWVsZC5hc3luY1ZhbGlkYXRpb25zIHx8IFtdKVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHN1YmZpZWxkLmRpc2FibGVkKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICBzdWJHcm91cC5hZGRDb250cm9sKHN1YmZpZWxkLm5hbWUsIGNvbnRyb2wpO1xyXG4gICAgLy8gICAgICAgICAgICAgfSk7XHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgcmV0dXJuIHN1Ykdyb3VwO1xyXG5cclxuICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mYi5jb250cm9sKFxyXG4gICAgLy8gICAgICAgICAgICAgZmllbGQudmFsdWUsXHJcbiAgICAvLyAgICAgICAgICAgICB0aGlzLmJpbmRWYWxpZGF0aW9ucyhmaWVsZC52YWxpZGF0aW9ucyB8fCBbXSksXHJcbiAgICAvLyAgICAgICAgICAgICB0aGlzLmJpbmRBc3luY1ZhbGlkYXRpb25zKGZpZWxkLmFzeW5jVmFsaWRhdGlvbnMgfHwgW10pXHJcbiAgICAvLyAgICAgICAgICk7XHJcbiAgICAvLyAgICAgICAgIGlmIChmaWVsZC5kaXNhYmxlZCkge1xyXG4gICAgLy8gICAgICAgICAgICAgY29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgcmV0dXJuIGNvbnRyb2w7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfVxyXG5cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVGb3JtKCkge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG5cclxuICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdsaW5lQnJlYWsnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY3JlYXRlQ29udHJvbChmaWVsZCk7XHJcblxyXG4gICAgICAgICAgICBncm91cC5hZGRDb250cm9sKGZpZWxkLm5hbWUsIGNvbnRyb2wpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBncm91cC5zZXRWYWxpZGF0b3JzKHRoaXMudmFsaWRhdG9ycy5tYXAodiA9PiB2LnZhbGlkYXRvcikpO1xyXG4gICAgICAgIGdyb3VwLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLmFzeW5jVmFsaWRhdG9ycy5tYXAodiA9PiB2LnZhbGlkYXRvcikpO1xyXG5cclxuICAgICAgICByZXR1cm4gZ3JvdXA7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgYmluZFZhbGlkYXRpb25zKHZhbGlkYXRpb25zOiBJS2xlc1ZhbGlkYXRvcjxWYWxpZGF0b3JGbj5bXSk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICBpZiAodmFsaWRhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZExpc3QgPSBbXTtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbnMuZm9yRWFjaCh2YWxpZCA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZExpc3QucHVzaCh2YWxpZC52YWxpZGF0b3IpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMuY29tcG9zZSh2YWxpZExpc3QpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgYmluZEFzeW5jVmFsaWRhdGlvbnModmFsaWRhdGlvbnM6IElLbGVzVmFsaWRhdG9yPEFzeW5jVmFsaWRhdG9yRm4+W10pOiBBc3luY1ZhbGlkYXRvckZuIHtcclxuICAgICAgICBpZiAodmFsaWRhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZExpc3QgPSBbXTtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbnMuZm9yRWFjaCh2YWxpZCA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZExpc3QucHVzaCh2YWxpZC52YWxpZGF0b3IpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMuY29tcG9zZUFzeW5jKHZhbGlkTGlzdCk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHZhbGlkYXRlQWxsRm9ybUZpZWxkcyhmb3JtR3JvdXA6IEZvcm1Hcm91cCkge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZpZWxkKTtcclxuICAgICAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
3
|
+
import { FormGroup, FormBuilder, Validators, ValidatorFn, AsyncValidatorFn, ValidationErrors, AsyncValidator, AbstractControl } from '@angular/forms';
|
|
4
|
+
var KlesDynamicFormComponent = /** @class */ (function () {
|
|
5
|
+
function KlesDynamicFormComponent(fb) {
|
|
6
|
+
this.fb = fb;
|
|
7
|
+
this.fields = [];
|
|
8
|
+
this.validators = [];
|
|
9
|
+
this.asyncValidators = [];
|
|
10
|
+
// tslint:disable-next-line: no-output-native
|
|
11
|
+
this.submit = new EventEmitter();
|
|
12
|
+
this._onLoaded = new EventEmitter();
|
|
13
|
+
this.direction = 'column';
|
|
14
|
+
this.orientationClass = 'dynamic-form-column';
|
|
15
|
+
this.orientationItemClass = 'dynamic-form-column-item';
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(KlesDynamicFormComponent.prototype, "value", {
|
|
18
|
+
get: function () {
|
|
19
|
+
return this.form.value;
|
|
20
|
+
},
|
|
21
|
+
enumerable: true,
|
|
22
|
+
configurable: true
|
|
23
|
+
});
|
|
24
|
+
KlesDynamicFormComponent.prototype.ngOnInit = function () {
|
|
25
|
+
this.form = this.createForm();
|
|
26
|
+
this.orientationClass = this.direction === 'row' ? 'dynamic-form-row' : 'dynamic-form-column';
|
|
27
|
+
this.orientationItemClass = this.direction === 'row' ? 'dynamic-form-row-item' : 'dynamic-form-column-item';
|
|
28
|
+
this._onLoaded.emit();
|
|
29
|
+
};
|
|
30
|
+
KlesDynamicFormComponent.prototype.ngOnChanges = function (changes) {
|
|
31
|
+
var _a, _b, _c, _d;
|
|
32
|
+
if (!((_a = changes.fields) === null || _a === void 0 ? void 0 : _a.firstChange)) {
|
|
33
|
+
this.updateForm();
|
|
34
|
+
// this.form = this.createControl();
|
|
35
|
+
// this.form.controls = {};
|
|
36
|
+
this._onLoaded.emit();
|
|
37
|
+
}
|
|
38
|
+
if (!((_b = changes.validators) === null || _b === void 0 ? void 0 : _b.firstChange) && this.form) {
|
|
39
|
+
this.form.setValidators(this.validators.map(function (v) { return v.validator; }));
|
|
40
|
+
}
|
|
41
|
+
if (!((_c = changes.asyncValidators) === null || _c === void 0 ? void 0 : _c.firstChange) && this.form) {
|
|
42
|
+
this.form.setAsyncValidators(this.asyncValidators.map(function (v) { return v.validator; }));
|
|
43
|
+
}
|
|
44
|
+
if (!((_d = changes.direction) === null || _d === void 0 ? void 0 : _d.firstChange)) {
|
|
45
|
+
this.orientationClass = this.direction === 'row' ? 'dynamic-form-row' : 'dynamic-form-column';
|
|
46
|
+
this.orientationItemClass = this.direction === 'row' ? 'dynamic-form-row-item' : 'dynamic-form-column-item';
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
KlesDynamicFormComponent.prototype.onSubmit = function (event) {
|
|
50
|
+
event.preventDefault();
|
|
51
|
+
event.stopPropagation();
|
|
52
|
+
if (this.form.valid) {
|
|
53
|
+
this.submit.emit(this.form.value);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
this.validateAllFormFields(this.form);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
KlesDynamicFormComponent.prototype.reset = function () {
|
|
60
|
+
this.form.reset();
|
|
61
|
+
};
|
|
62
|
+
KlesDynamicFormComponent.prototype.updateForm = function () {
|
|
63
|
+
var _this = this;
|
|
64
|
+
Object.keys(this.form.controls).filter(function (key) {
|
|
65
|
+
return !_this.fields.map(function (field) { return field.name; }).includes(key);
|
|
66
|
+
}).forEach(function (key) {
|
|
67
|
+
_this.form.removeControl(key);
|
|
68
|
+
});
|
|
69
|
+
this.fields
|
|
70
|
+
.filter(function (field) { return !_this.form.controls[field.name]; })
|
|
71
|
+
.forEach(function (field) {
|
|
72
|
+
if (field.type === 'lineBreak') {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
var control = _this.createControl(field);
|
|
76
|
+
_this.form.addControl(field.name, control);
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
KlesDynamicFormComponent.prototype.createControl = function (field) {
|
|
80
|
+
var _this = this;
|
|
81
|
+
if (field.type === 'listField') {
|
|
82
|
+
var array_1 = this.fb.array([]);
|
|
83
|
+
field.value.forEach(function (data) {
|
|
84
|
+
var subGroup = _this.fb.group({});
|
|
85
|
+
field.collections.forEach(function (subfield) {
|
|
86
|
+
var control = _this.createControl(subfield);
|
|
87
|
+
subGroup.addControl(subfield.name, control);
|
|
88
|
+
});
|
|
89
|
+
array_1.push(subGroup);
|
|
90
|
+
});
|
|
91
|
+
return array_1;
|
|
92
|
+
}
|
|
93
|
+
else if (field.type === 'group') {
|
|
94
|
+
var subGroup_1 = this.fb.group({});
|
|
95
|
+
if (field.collections && Array.isArray(field.collections)) {
|
|
96
|
+
field.collections.forEach(function (subfield) {
|
|
97
|
+
var control = _this.createControl(subfield);
|
|
98
|
+
subGroup_1.addControl(subfield.name, control);
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return subGroup_1;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
var control = this.fb.control(field.value, {
|
|
105
|
+
validators: this.bindValidations(field.validations || []),
|
|
106
|
+
asyncValidators: this.bindAsyncValidations(field.asyncValidations || []),
|
|
107
|
+
updateOn: field.updateOn || 'change'
|
|
108
|
+
});
|
|
109
|
+
if (field.disabled) {
|
|
110
|
+
control.disable();
|
|
111
|
+
}
|
|
112
|
+
return control;
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
// private createControl(field: IKlesFieldConfig): AbstractControl {
|
|
116
|
+
// if (field.type === 'listField') {
|
|
117
|
+
// const array = this.fb.array([]);
|
|
118
|
+
// field.value.forEach((data: any) => {
|
|
119
|
+
// const subGroup = this.fb.group({});
|
|
120
|
+
// field.collections.forEach(subfield => {
|
|
121
|
+
// const control = this.fb.control(
|
|
122
|
+
// data[subfield.name] ? data[subfield.name] : null,
|
|
123
|
+
// this.bindValidations(subfield.validations || []),
|
|
124
|
+
// this.bindAsyncValidations(subfield.asyncValidations || [])
|
|
125
|
+
// );
|
|
126
|
+
// subGroup.addControl(subfield.name, control);
|
|
127
|
+
// });
|
|
128
|
+
// array.push(subGroup);
|
|
129
|
+
// });
|
|
130
|
+
// return array;
|
|
131
|
+
// } else if (field.type === 'group') {
|
|
132
|
+
// const subGroup = this.fb.group({});
|
|
133
|
+
// if (field.collections && Array.isArray(field.collections)) {
|
|
134
|
+
// field.collections.forEach(subfield => {
|
|
135
|
+
// const control = this.fb.control(
|
|
136
|
+
// subfield.value,
|
|
137
|
+
// this.bindValidations(subfield.validations || []),
|
|
138
|
+
// this.bindAsyncValidations(subfield.asyncValidations || [])
|
|
139
|
+
// );
|
|
140
|
+
// if (subfield.disabled) {
|
|
141
|
+
// control.disable();
|
|
142
|
+
// }
|
|
143
|
+
// subGroup.addControl(subfield.name, control);
|
|
144
|
+
// });
|
|
145
|
+
// }
|
|
146
|
+
// return subGroup;
|
|
147
|
+
// } else {
|
|
148
|
+
// const control = this.fb.control(
|
|
149
|
+
// field.value,
|
|
150
|
+
// this.bindValidations(field.validations || []),
|
|
151
|
+
// this.bindAsyncValidations(field.asyncValidations || [])
|
|
152
|
+
// );
|
|
153
|
+
// if (field.disabled) {
|
|
154
|
+
// control.disable();
|
|
155
|
+
// }
|
|
156
|
+
// return control;
|
|
157
|
+
// }
|
|
158
|
+
// }
|
|
159
|
+
KlesDynamicFormComponent.prototype.createForm = function () {
|
|
160
|
+
var _this = this;
|
|
161
|
+
var group = this.fb.group({});
|
|
162
|
+
this.fields.forEach(function (field) {
|
|
163
|
+
if (field.type === 'lineBreak') {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
var control = _this.createControl(field);
|
|
167
|
+
group.addControl(field.name, control);
|
|
168
|
+
});
|
|
169
|
+
group.setValidators(this.validators.map(function (v) { return v.validator; }));
|
|
170
|
+
group.setAsyncValidators(this.asyncValidators.map(function (v) { return v.validator; }));
|
|
171
|
+
return group;
|
|
172
|
+
};
|
|
173
|
+
KlesDynamicFormComponent.prototype.bindValidations = function (validations) {
|
|
174
|
+
if (validations.length > 0) {
|
|
175
|
+
var validList_1 = [];
|
|
176
|
+
validations.forEach(function (valid) {
|
|
177
|
+
validList_1.push(valid.validator);
|
|
178
|
+
});
|
|
179
|
+
return Validators.compose(validList_1);
|
|
180
|
+
}
|
|
181
|
+
return null;
|
|
182
|
+
};
|
|
183
|
+
KlesDynamicFormComponent.prototype.bindAsyncValidations = function (validations) {
|
|
184
|
+
if (validations.length > 0) {
|
|
185
|
+
var validList_2 = [];
|
|
186
|
+
validations.forEach(function (valid) {
|
|
187
|
+
validList_2.push(valid.validator);
|
|
188
|
+
});
|
|
189
|
+
return Validators.composeAsync(validList_2);
|
|
190
|
+
}
|
|
191
|
+
return null;
|
|
192
|
+
};
|
|
193
|
+
KlesDynamicFormComponent.prototype.validateAllFormFields = function (formGroup) {
|
|
194
|
+
Object.keys(formGroup.controls).forEach(function (field) {
|
|
195
|
+
var control = formGroup.get(field);
|
|
196
|
+
control.markAsTouched({ onlySelf: true });
|
|
197
|
+
});
|
|
198
|
+
};
|
|
199
|
+
KlesDynamicFormComponent.ctorParameters = function () { return [
|
|
200
|
+
{ type: FormBuilder }
|
|
201
|
+
]; };
|
|
202
|
+
__decorate([
|
|
203
|
+
Input()
|
|
204
|
+
], KlesDynamicFormComponent.prototype, "fields", void 0);
|
|
205
|
+
__decorate([
|
|
206
|
+
Input()
|
|
207
|
+
], KlesDynamicFormComponent.prototype, "validators", void 0);
|
|
208
|
+
__decorate([
|
|
209
|
+
Input()
|
|
210
|
+
], KlesDynamicFormComponent.prototype, "asyncValidators", void 0);
|
|
211
|
+
__decorate([
|
|
212
|
+
Output()
|
|
213
|
+
], KlesDynamicFormComponent.prototype, "submit", void 0);
|
|
214
|
+
__decorate([
|
|
215
|
+
Output()
|
|
216
|
+
], KlesDynamicFormComponent.prototype, "_onLoaded", void 0);
|
|
217
|
+
__decorate([
|
|
218
|
+
Input()
|
|
219
|
+
], KlesDynamicFormComponent.prototype, "direction", void 0);
|
|
220
|
+
KlesDynamicFormComponent = __decorate([
|
|
221
|
+
Component({
|
|
222
|
+
exportAs: 'klesDynamicForm',
|
|
223
|
+
selector: 'app-kles-dynamic-form',
|
|
224
|
+
template: "\n <form class=\"{{orientationClass}}\" [formGroup]=\"form\" (submit)=\"onSubmit($event)\">\n <ng-container *ngFor=\"let field of fields;\" class=\"{{orientationItemClass}}\" klesDynamicField [field]=\"field\" [group]=\"form\" [siblingFields]=\"fields\">\n </ng-container>\n <!--<button (click)=\"reset()\" mat-raised-button color=\"primary\">RESET</button>-->\n </form>\n ",
|
|
225
|
+
styles: [
|
|
226
|
+
// '.dynamic-form {display: flex; flex-direction: column;}',
|
|
227
|
+
//'.dynamic-form {display: flex;}',
|
|
228
|
+
//'.dynamic-form { width: 100%; }',
|
|
229
|
+
'.dynamic-form-column { display: flex;flex-direction: column; }',
|
|
230
|
+
'.dynamic-form-column > * { width: 100%; }',
|
|
231
|
+
'.dynamic-form-row { display: inline-flex;flex-wrap:wrap;gap:10px }',
|
|
232
|
+
'.dynamic-form-row > * { width: 100%; }',
|
|
233
|
+
'.dynamic-form-row-item { margin-right: 10px; }',
|
|
234
|
+
'.dynamic-form-column-item { margin-bottom: 10px; }']
|
|
235
|
+
})
|
|
236
|
+
], KlesDynamicFormComponent);
|
|
237
|
+
return KlesDynamicFormComponent;
|
|
238
|
+
}());
|
|
239
|
+
export { KlesDynamicFormComponent };
|
|
240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Aza2xlcy9rbGVzLW1hdGVyaWFsLWR5bmFtaWNmb3Jtcy8iLCJzb3VyY2VzIjpbImxpYi9keW5hbWljLWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQVUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUE4QyxNQUFNLGVBQWUsQ0FBQztBQUMzSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQTZCdEo7SUFrQkksa0NBQW9CLEVBQWU7UUFBZixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBakIxQixXQUFNLEdBQXVCLEVBQUUsQ0FBQztRQUNoQyxlQUFVLEdBQWtDLEVBQUUsQ0FBQztRQUMvQyxvQkFBZSxHQUF1QyxFQUFFLENBQUM7UUFDbEUsNkNBQTZDO1FBQ25DLFdBQU0sR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNwRCxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVoQyxjQUFTLEdBQXFCLFFBQVEsQ0FBQztRQUdoRCxxQkFBZ0IsR0FBK0MscUJBQXFCLENBQUM7UUFDckYseUJBQW9CLEdBQXlELDBCQUEwQixDQUFDO0lBTWpFLENBQUM7SUFKeEMsc0JBQUksMkNBQUs7YUFBVDtZQUNJLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDM0IsQ0FBQzs7O09BQUE7SUFLRCwyQ0FBUSxHQUFSO1FBQ0ksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxrQkFBa0Is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Q0FBQzs7Z0JBak51QixXQUFXOztJQWpCMUI7UUFBUixLQUFLLEVBQUU7NERBQWlDO0lBQ2hDO1FBQVIsS0FBSyxFQUFFO2dFQUFnRDtJQUMvQztRQUFSLEtBQUssRUFBRTtxRUFBMEQ7SUFFeEQ7UUFBVCxNQUFNLEVBQUU7NERBQXFEO0lBQ3BEO1FBQVQsTUFBTSxFQUFFOytEQUFnQztJQUVoQztRQUFSLEtBQUssRUFBRTsrREFBd0M7SUFSdkMsd0JBQXdCO1FBdkJwQyxTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsaUJBQWlCO1lBQzNCLFFBQVEsRUFBRSx1QkFBdUI7WUFDakMsUUFBUSxFQUFFLHFaQU1UOztnQkFFRyw0REFBNEQ7Z0JBQzVELG1DQUFtQztnQkFDbkMsbUNBQW1DO2dCQUNuQyxnRUFBZ0U7Z0JBQ2hFLDJDQUEyQztnQkFDM0Msb0VBQW9FO2dCQUNwRSx3Q0FBd0M7Z0JBQ3hDLGdEQUFnRDtnQkFDaEQsb0RBQW9EO1NBRzNELENBQUM7T0FDVyx3QkFBd0IsQ0FvT3BDO0lBQUQsK0JBQUM7Q0FBQSxBQXBPRCxJQW9PQztTQXBPWSx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPbkluaXQsIENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMsIFZhbGlkYXRvckZuLCBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0aW9uRXJyb3JzLCBBc3luY1ZhbGlkYXRvciwgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgS2xlc0Zvcm1Hcm91cENvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2dyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBLbGVzRm9ybUxpc3RGaWVsZENvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2xpc3QtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IElLbGVzRmllbGRDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvZmllbGQuY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJS2xlc1ZhbGlkYXRvciB9IGZyb20gJy4vaW50ZXJmYWNlcy92YWxpZGF0b3IuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgZXhwb3J0QXM6ICdrbGVzRHluYW1pY0Zvcm0nLFxuICAgIHNlbGVjdG9yOiAnYXBwLWtsZXMtZHluYW1pYy1mb3JtJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgIDxmb3JtIGNsYXNzPVwie3tvcmllbnRhdGlvbkNsYXNzfX1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIiAoc3VibWl0KT1cIm9uU3VibWl0KCRldmVudClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmllbGRzO1wiIGNsYXNzPVwie3tvcmllbnRhdGlvbkl0ZW1DbGFzc319XCIga2xlc0R5bmFtaWNGaWVsZCBbZmllbGRdPVwiZmllbGRcIiBbZ3JvdXBdPVwiZm9ybVwiIFtzaWJsaW5nRmllbGRzXT1cImZpZWxkc1wiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLTxidXR0b24gKGNsaWNrKT1cInJlc2V0KClcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIj5SRVNFVDwvYnV0dG9uPi0tPlxuICAgIDwvZm9ybT5cbiAgICBgLFxuICAgIHN0eWxlczogW1xuICAgICAgICAvLyAnLmR5bmFtaWMtZm9ybSB7ZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjt9JyxcbiAgICAgICAgLy8nLmR5bmFtaWMtZm9ybSB7ZGlzcGxheTogZmxleDt9JyxcbiAgICAgICAgLy8nLmR5bmFtaWMtZm9ybSB7IHdpZHRoOiAxMDAlOyB9JyxcbiAgICAgICAgJy5keW5hbWljLWZvcm0tY29sdW1uIHsgZGlzcGxheTogZmxleDtmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9JyxcbiAgICAgICAgJy5keW5hbWljLWZvcm0tY29sdW1uID4gKiB7IHdpZHRoOiAxMDAlOyB9JyxcbiAgICAgICAgJy5keW5hbWljLWZvcm0tcm93IHsgZGlzcGxheTogaW5saW5lLWZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjEwcHggfScsXG4gICAgICAgICcuZHluYW1pYy1mb3JtLXJvdyA+ICogeyB3aWR0aDogMTAwJTsgfScsXG4gICAgICAgICcuZHluYW1pYy1mb3JtLXJvdy1pdGVtIHsgbWFyZ2luLXJpZ2h0OiAxMHB4OyB9JyxcbiAgICAgICAgJy5keW5hbWljLWZvcm0tY29sdW1uLWl0ZW0geyBtYXJnaW4tYm90dG9tOiAxMHB4OyB9JyxcbiAgICBdXG5cbn0pXG5leHBvcnQgY2xhc3MgS2xlc0R5bmFtaWNGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpIGZpZWxkczogSUtsZXNGaWVsZENvbmZpZ1tdID0gW107XG4gICAgQElucHV0KCkgdmFsaWRhdG9yczogSUtsZXNWYWxpZGF0b3I8VmFsaWRhdG9yRm4+W10gPSBbXTtcbiAgICBASW5wdXQoKSBhc3luY1ZhbGlkYXRvcnM6IElLbGVzVmFsaWRhdG9yPEFzeW5jVmFsaWRhdG9yRm4+W10gPSBbXTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLW91dHB1dC1uYXRpdmVcbiAgICBAT3V0cHV0KCkgc3VibWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBfb25Mb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBASW5wdXQoKSBkaXJlY3Rpb246ICdjb2x1bW4nIHwgJ3JvdycgPSAnY29sdW1uJztcblxuICAgIGZvcm06IEZvcm1Hcm91cDtcbiAgICBvcmllbnRhdGlvbkNsYXNzOiAnZHluYW1pYy1mb3JtLWNvbHVtbicgfCAnZHluYW1pYy1mb3JtLXJvdycgPSAnZHluYW1pYy1mb3JtLWNvbHVtbic7XG4gICAgb3JpZW50YXRpb25JdGVtQ2xhc3M6ICdkeW5hbWljLWZvcm0tY29sdW1uLWl0ZW0nIHwgJ2R5bmFtaWMtZm9ybS1yb3ctaXRlbScgPSAnZHluYW1pYy1mb3JtLWNvbHVtbi1pdGVtJztcblxuICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS52YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikgeyB9XG5cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLmNyZWF0ZUZvcm0oKTtcbiAgICAgICAgdGhpcy5vcmllbnRhdGlvbkNsYXNzID0gdGhpcy5kaXJlY3Rpb24gPT09ICdyb3cnID8gJ2R5bmFtaWMtZm9ybS1yb3cnIDogJ2R5bmFtaWMtZm9ybS1jb2x1bW4nO1xuICAgICAgICB0aGlzLm9yaWVudGF0aW9uSXRlbUNsYXNzID0gdGhpcy5kaXJlY3Rpb24gPT09ICdyb3cnID8gJ2R5bmFtaWMtZm9ybS1yb3ctaXRlbScgOiAnZHluYW1pYy1mb3JtLWNvbHVtbi1pdGVtJztcbiAgICAgICAgdGhpcy5fb25Mb2FkZWQuZW1pdCgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFjaGFuZ2VzLmZpZWxkcz8uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9ybSgpO1xuICAgICAgICAgICAgLy8gdGhpcy5mb3JtID0gdGhpcy5jcmVhdGVDb250cm9sKCk7XG4gICAgICAgICAgICAvLyB0aGlzLmZvcm0uY29udHJvbHMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuX29uTG9hZGVkLmVtaXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hhbmdlcy52YWxpZGF0b3JzPy5maXJzdENoYW5nZSAmJiB0aGlzLmZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5zZXRWYWxpZGF0b3JzKHRoaXMudmFsaWRhdG9ycy5tYXAodiA9PiB2LnZhbGlkYXRvcikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjaGFuZ2VzLmFzeW5jVmFsaWRhdG9ycz8uZmlyc3RDaGFuZ2UgJiYgdGhpcy5mb3JtKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uc2V0QXN5bmNWYWxpZGF0b3JzKHRoaXMuYXN5bmNWYWxpZGF0b3JzLm1hcCh2ID0+IHYudmFsaWRhdG9yKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoYW5nZXMuZGlyZWN0aW9uPy5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5vcmllbnRhdGlvbkNsYXNzID0gdGhpcy5kaXJlY3Rpb24gPT09ICdyb3cnID8gJ2R5bmFtaWMtZm9ybS1yb3cnIDogJ2R5bmFtaWMtZm9ybS1jb2x1bW4nO1xuICAgICAgICAgICAgdGhpcy5vcmllbnRhdGlvbkl0ZW1DbGFzcyA9IHRoaXMuZGlyZWN0aW9uID09PSAncm93JyA/ICdkeW5hbWljLWZvcm0tcm93LWl0ZW0nIDogJ2R5bmFtaWMtZm9ybS1jb2x1bW4taXRlbSc7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIG9uU3VibWl0KGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5zdWJtaXQuZW1pdCh0aGlzLmZvcm0udmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHModGhpcy5mb3JtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLmZvcm0ucmVzZXQoKTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgdXBkYXRlRm9ybSgpIHtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5mb3JtLmNvbnRyb2xzKS5maWx0ZXIoa2V5ID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5maWVsZHMubWFwKGZpZWxkID0+IGZpZWxkLm5hbWUpLmluY2x1ZGVzKGtleSk7XG4gICAgICAgIH0pLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5yZW1vdmVDb250cm9sKGtleSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgdGhpcy5maWVsZHNcbiAgICAgICAgICAgIC5maWx0ZXIoZmllbGQgPT4gIXRoaXMuZm9ybS5jb250cm9sc1tmaWVsZC5uYW1lXSlcbiAgICAgICAgICAgIC5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2xpbmVCcmVhaycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jcmVhdGVDb250cm9sKGZpZWxkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uYWRkQ29udHJvbChmaWVsZC5uYW1lLCBjb250cm9sKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQ29udHJvbChmaWVsZDogSUtsZXNGaWVsZENvbmZpZyk6IEFic3RyYWN0Q29udHJvbCB7XG5cbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdsaXN0RmllbGQnKSB7XG4gICAgICAgICAgICBjb25zdCBhcnJheSA9IHRoaXMuZmIuYXJyYXkoW10pO1xuXG4gICAgICAgICAgICBmaWVsZC52YWx1ZS5mb3JFYWNoKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJHcm91cCA9IHRoaXMuZmIuZ3JvdXAoe30pO1xuICAgICAgICAgICAgICAgIGZpZWxkLmNvbGxlY3Rpb25zLmZvckVhY2goc3ViZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jcmVhdGVDb250cm9sKHN1YmZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgc3ViR3JvdXAuYWRkQ29udHJvbChzdWJmaWVsZC5uYW1lLCBjb250cm9sKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKHN1Ykdyb3VwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1Ykdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgICAgICAgICBpZiAoZmllbGQuY29sbGVjdGlvbnMgJiYgQXJyYXkuaXNBcnJheShmaWVsZC5jb2xsZWN0aW9ucykpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5jb2xsZWN0aW9ucy5mb3JFYWNoKHN1YmZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY3JlYXRlQ29udHJvbChzdWJmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgIHN1Ykdyb3VwLmFkZENvbnRyb2woc3ViZmllbGQubmFtZSwgY29udHJvbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3ViR3JvdXA7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgICAgICAgICAgZmllbGQudmFsdWUsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzOiB0aGlzLmJpbmRWYWxpZGF0aW9ucyhmaWVsZC52YWxpZGF0aW9ucyB8fCBbXSksXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdG9yczogdGhpcy5iaW5kQXN5bmNWYWxpZGF0aW9ucyhmaWVsZC5hc3luY1ZhbGlkYXRpb25zIHx8IFtdKSxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlT246IGZpZWxkLnVwZGF0ZU9uIHx8ICdjaGFuZ2UnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChmaWVsZC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2w7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG4gICAgLy8gcHJpdmF0ZSBjcmVhdGVDb250cm9sKGZpZWxkOiBJS2xlc0ZpZWxkQ29uZmlnKTogQWJzdHJhY3RDb250cm9sIHtcblxuICAgIC8vICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2xpc3RGaWVsZCcpIHtcbiAgICAvLyAgICAgICAgIGNvbnN0IGFycmF5ID0gdGhpcy5mYi5hcnJheShbXSk7XG5cbiAgICAvLyAgICAgICAgIGZpZWxkLnZhbHVlLmZvckVhY2goKGRhdGE6IGFueSkgPT4ge1xuICAgIC8vICAgICAgICAgICAgIGNvbnN0IHN1Ykdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgLy8gICAgICAgICAgICAgZmllbGQuY29sbGVjdGlvbnMuZm9yRWFjaChzdWJmaWVsZCA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBkYXRhW3N1YmZpZWxkLm5hbWVdID8gZGF0YVtzdWJmaWVsZC5uYW1lXSA6IG51bGwsXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmRWYWxpZGF0aW9ucyhzdWJmaWVsZC52YWxpZGF0aW9ucyB8fCBbXSksXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmRBc3luY1ZhbGlkYXRpb25zKHN1YmZpZWxkLmFzeW5jVmFsaWRhdGlvbnMgfHwgW10pXG4gICAgLy8gICAgICAgICAgICAgICAgICk7XG4gICAgLy8gICAgICAgICAgICAgICAgIHN1Ykdyb3VwLmFkZENvbnRyb2woc3ViZmllbGQubmFtZSwgY29udHJvbCk7XG4gICAgLy8gICAgICAgICAgICAgfSk7XG4gICAgLy8gICAgICAgICAgICAgYXJyYXkucHVzaChzdWJHcm91cCk7XG4gICAgLy8gICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgIHJldHVybiBhcnJheTtcbiAgICAvLyAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgLy8gICAgICAgICBjb25zdCBzdWJHcm91cCA9IHRoaXMuZmIuZ3JvdXAoe30pO1xuICAgIC8vICAgICAgICAgaWYgKGZpZWxkLmNvbGxlY3Rpb25zICYmIEFycmF5LmlzQXJyYXkoZmllbGQuY29sbGVjdGlvbnMpKSB7XG4gICAgLy8gICAgICAgICAgICAgZmllbGQuY29sbGVjdGlvbnMuZm9yRWFjaChzdWJmaWVsZCA9PiB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBzdWJmaWVsZC52YWx1ZSxcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmluZFZhbGlkYXRpb25zKHN1YmZpZWxkLnZhbGlkYXRpb25zIHx8IFtdKSxcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmluZEFzeW5jVmFsaWRhdGlvbnMoc3ViZmllbGQuYXN5bmNWYWxpZGF0aW9ucyB8fCBbXSlcbiAgICAvLyAgICAgICAgICAgICAgICAgKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHN1YmZpZWxkLmRpc2FibGVkKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjb250cm9sLmRpc2FibGUoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICBzdWJHcm91cC5hZGRDb250cm9sKHN1YmZpZWxkLm5hbWUsIGNvbnRyb2wpO1xuICAgIC8vICAgICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgICAgcmV0dXJuIHN1Ykdyb3VwO1xuXG4gICAgLy8gICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mYi5jb250cm9sKFxuICAgIC8vICAgICAgICAgICAgIGZpZWxkLnZhbHVlLFxuICAgIC8vICAgICAgICAgICAgIHRoaXMuYmluZFZhbGlkYXRpb25zKGZpZWxkLnZhbGlkYXRpb25zIHx8IFtdKSxcbiAgICAvLyAgICAgICAgICAgICB0aGlzLmJpbmRBc3luY1ZhbGlkYXRpb25zKGZpZWxkLmFzeW5jVmFsaWRhdGlvbnMgfHwgW10pXG4gICAgLy8gICAgICAgICApO1xuICAgIC8vICAgICAgICAgaWYgKGZpZWxkLmRpc2FibGVkKSB7XG4gICAgLy8gICAgICAgICAgICAgY29udHJvbC5kaXNhYmxlKCk7XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgICAgICByZXR1cm4gY29udHJvbDtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuXG5cbiAgICBwcml2YXRlIGNyZWF0ZUZvcm0oKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG5cbiAgICAgICAgdGhpcy5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnbGluZUJyZWFrJykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNyZWF0ZUNvbnRyb2woZmllbGQpO1xuXG4gICAgICAgICAgICBncm91cC5hZGRDb250cm9sKGZpZWxkLm5hbWUsIGNvbnRyb2wpO1xuICAgICAgICB9KTtcblxuICAgICAgICBncm91cC5zZXRWYWxpZGF0b3JzKHRoaXMudmFsaWRhdG9ycy5tYXAodiA9PiB2LnZhbGlkYXRvcikpO1xuICAgICAgICBncm91cC5zZXRBc3luY1ZhbGlkYXRvcnModGhpcy5hc3luY1ZhbGlkYXRvcnMubWFwKHYgPT4gdi52YWxpZGF0b3IpKTtcblxuICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIGJpbmRWYWxpZGF0aW9ucyh2YWxpZGF0aW9uczogSUtsZXNWYWxpZGF0b3I8VmFsaWRhdG9yRm4+W10pOiBWYWxpZGF0b3JGbiB7XG4gICAgICAgIGlmICh2YWxpZGF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZExpc3QgPSBbXTtcbiAgICAgICAgICAgIHZhbGlkYXRpb25zLmZvckVhY2godmFsaWQgPT4ge1xuICAgICAgICAgICAgICAgIHZhbGlkTGlzdC5wdXNoKHZhbGlkLnZhbGlkYXRvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRMaXN0KTtcblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBiaW5kQXN5bmNWYWxpZGF0aW9ucyh2YWxpZGF0aW9uczogSUtsZXNWYWxpZGF0b3I8QXN5bmNWYWxpZGF0b3JGbj5bXSk6IEFzeW5jVmFsaWRhdG9yRm4ge1xuICAgICAgICBpZiAodmFsaWRhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRMaXN0ID0gW107XG4gICAgICAgICAgICB2YWxpZGF0aW9ucy5mb3JFYWNoKHZhbGlkID0+IHtcbiAgICAgICAgICAgICAgICB2YWxpZExpc3QucHVzaCh2YWxpZC52YWxpZGF0b3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gVmFsaWRhdG9ycy5jb21wb3NlQXN5bmModmFsaWRMaXN0KTtcblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVBbGxGb3JtRmllbGRzKGZvcm1Hcm91cDogRm9ybUdyb3VwKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmdldChmaWVsZCk7XG4gICAgICAgICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|