sf-crud 12.3.3 → 13.0.1
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/fesm2022/sf-crud.mjs +3254 -0
- package/fesm2022/sf-crud.mjs.map +1 -0
- package/{sf-crud.d.ts → index.d.ts} +5 -5
- package/lib/components/control/control.component.d.ts +67 -67
- package/lib/components/file-upload/file-upload.component.d.ts +34 -34
- package/lib/components/form/form.component.d.ts +63 -63
- package/lib/components/registro/registro.component.d.ts +109 -109
- package/lib/components/step/step.component.d.ts +27 -27
- package/lib/components/tablero/tablero.component.d.ts +53 -52
- package/lib/directives/format-address.pipe.d.ts +7 -7
- package/lib/sf-crud.component.d.ts +8 -8
- package/lib/sf-crud.module.d.ts +94 -90
- package/lib/sf-crud.routing.module.d.ts +7 -7
- package/lib/sf-crud.service.d.ts +135 -135
- package/lib/shared/models/Conditions.model.d.ts +32 -32
- package/lib/shared/models/Empresa.model.d.ts +11 -11
- package/lib/shared/models/Reason.model.d.ts +5 -5
- package/lib/shared/models/crud-config.model.d.ts +109 -110
- package/lib/shared/models/shema.model.d.ts +37 -37
- package/lib/shared/services/general.service.d.ts +20 -20
- package/lib/shared/services/notification.service.d.ts +26 -27
- package/lib/shared/services/step.service.d.ts +27 -27
- package/package.json +20 -15
- package/public-api.d.ts +12 -12
- package/bundles/sf-crud.umd.js +0 -3795
- package/bundles/sf-crud.umd.js.map +0 -1
- package/esm2015/lib/components/control/control.component.js +0 -403
- package/esm2015/lib/components/file-upload/file-upload.component.js +0 -143
- package/esm2015/lib/components/form/form.component.js +0 -289
- package/esm2015/lib/components/registro/registro.component.js +0 -757
- package/esm2015/lib/components/step/step.component.js +0 -79
- package/esm2015/lib/components/tablero/tablero.component.js +0 -220
- package/esm2015/lib/directives/format-address.pipe.js +0 -22
- package/esm2015/lib/sf-crud.component.js +0 -26
- package/esm2015/lib/sf-crud.module.js +0 -359
- package/esm2015/lib/sf-crud.routing.module.js +0 -23
- package/esm2015/lib/sf-crud.service.js +0 -531
- package/esm2015/lib/shared/models/Conditions.model.js +0 -81
- package/esm2015/lib/shared/models/Empresa.model.js +0 -2
- package/esm2015/lib/shared/models/Reason.model.js +0 -7
- package/esm2015/lib/shared/models/crud-config.model.js +0 -76
- package/esm2015/lib/shared/models/shema.model.js +0 -11
- package/esm2015/lib/shared/services/general.service.js +0 -74
- package/esm2015/lib/shared/services/notification.service.js +0 -83
- package/esm2015/lib/shared/services/step.service.js +0 -63
- package/esm2015/public-api.js +0 -16
- package/esm2015/sf-crud.js +0 -5
- package/fesm2015/sf-crud.js +0 -3143
- package/fesm2015/sf-crud.js.map +0 -1
|
@@ -1,403 +0,0 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewChildren } from '@angular/core';
|
|
2
|
-
import { Shema } from '../../shared/models/shema.model';
|
|
3
|
-
import { RequestChecking } from '../../shared/models/crud-config.model';
|
|
4
|
-
import { Tooltip } from 'primeng/tooltip';
|
|
5
|
-
import * as moment from 'moment';
|
|
6
|
-
import * as jsonpath from 'jsonpath';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "../../shared/services/general.service";
|
|
9
|
-
import * as i2 from "../../sf-crud.service";
|
|
10
|
-
import * as i3 from "../../shared/services/notification.service";
|
|
11
|
-
import * as i4 from "primeng/inputmask";
|
|
12
|
-
import * as i5 from "primeng/dropdown";
|
|
13
|
-
import * as i6 from "primeng/autocomplete";
|
|
14
|
-
import * as i7 from "../file-upload/file-upload.component";
|
|
15
|
-
import * as i8 from "primeng/calendar";
|
|
16
|
-
import * as i9 from "primeng/inputnumber";
|
|
17
|
-
import * as i10 from "primeng/multiselect";
|
|
18
|
-
import * as i11 from "primeng/inputswitch";
|
|
19
|
-
import * as i12 from "@angular/common";
|
|
20
|
-
import * as i13 from "primeng/tooltip";
|
|
21
|
-
import * as i14 from "@angular/forms";
|
|
22
|
-
import * as i15 from "primeng/inputtext";
|
|
23
|
-
import * as i16 from "primeng/inputtextarea";
|
|
24
|
-
import * as i17 from "primeng/button";
|
|
25
|
-
import * as i18 from "../../directives/format-address.pipe";
|
|
26
|
-
export class ControlComponent {
|
|
27
|
-
constructor(generalService, crudService, cdr, notificationService) {
|
|
28
|
-
this.generalService = generalService;
|
|
29
|
-
this.crudService = crudService;
|
|
30
|
-
this.cdr = cdr;
|
|
31
|
-
this.notificationService = notificationService;
|
|
32
|
-
this.showTempValue = false;
|
|
33
|
-
this.control = new Shema();
|
|
34
|
-
this.label = '';
|
|
35
|
-
this.setValue = new EventEmitter();
|
|
36
|
-
this.sendObject = new EventEmitter();
|
|
37
|
-
this.addressClicked = new EventEmitter();
|
|
38
|
-
this.isLoading = false;
|
|
39
|
-
this.dataFromService = [];
|
|
40
|
-
this.uploadedFiles = [];
|
|
41
|
-
this.displayAdd = false;
|
|
42
|
-
this.clicked = false;
|
|
43
|
-
this.maskDate = "99/99/9999";
|
|
44
|
-
this.uploadingFiles = false;
|
|
45
|
-
}
|
|
46
|
-
ngOnChanges(changes) {
|
|
47
|
-
}
|
|
48
|
-
ngOnInit() {
|
|
49
|
-
var _a, _b;
|
|
50
|
-
this.loadDefaultValues();
|
|
51
|
-
if ((_b = (_a = this.control) === null || _a === void 0 ? void 0 : _a.config) === null || _b === void 0 ? void 0 : _b.depends) {
|
|
52
|
-
this.crudService.changeData$.subscribe(res => {
|
|
53
|
-
var _a, _b;
|
|
54
|
-
if (res) {
|
|
55
|
-
let registro = this.crudService.getRegistro(this.crudService.index);
|
|
56
|
-
let keyFound = (_a = registro.keys) === null || _a === void 0 ? void 0 : _a.find(k => k.scope === res.scope
|
|
57
|
-
&& this.control.config.depends.includes(k.key) &&
|
|
58
|
-
(res.index === k.indexData || res.index === k.indexAnswer));
|
|
59
|
-
if (keyFound === null || keyFound === void 0 ? void 0 : keyFound.overrideControl) {
|
|
60
|
-
let override = keyFound.overrideControl;
|
|
61
|
-
let completed = this.crudService.isConditionsCompleted((_b = override.conditions) !== null && _b !== void 0 ? _b : [], registro.conditions || [], this.crudService.getData(this.crudService.index));
|
|
62
|
-
jsonpath.value(this.control, override.property, completed ? override.value : override.elseValue);
|
|
63
|
-
this.value = this.getNewValue(override, completed);
|
|
64
|
-
this.tempValue = null;
|
|
65
|
-
this.sendValue();
|
|
66
|
-
if (this.control.subtype == 'dropdown' || this.control.subtype == 'multiselect')
|
|
67
|
-
this.loadDataFromService();
|
|
68
|
-
//this.cdr.detectChanges()
|
|
69
|
-
}
|
|
70
|
-
else if (keyFound) {
|
|
71
|
-
this.value = null;
|
|
72
|
-
this.sendValue();
|
|
73
|
-
this.loadDefaultValues();
|
|
74
|
-
//this.cdr.detectChanges()
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
getNewValue(override, completed) {
|
|
81
|
-
const newValue = completed ? override.newPropertyValue : override.elseNewPropertyValue;
|
|
82
|
-
if (newValue && typeof (newValue) == "string") {
|
|
83
|
-
if (!newValue.startsWith('$') && !newValue.startsWith('@')) {
|
|
84
|
-
return newValue;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
loadDefaultValues() {
|
|
90
|
-
var _a, _b, _c, _d, _e;
|
|
91
|
-
if (((_a = this.control) === null || _a === void 0 ? void 0 : _a.config) && this.control.subtype == 'dropdown' || this.control.subtype == 'multiselect')
|
|
92
|
-
this.loadDataFromService();
|
|
93
|
-
if (((_b = this.control) === null || _b === void 0 ? void 0 : _b.subtype) == 'autocomplete')
|
|
94
|
-
this.extracValueFromControlBusqueda();
|
|
95
|
-
if (this.value && this.control.type == 'date')
|
|
96
|
-
this.instanceDate();
|
|
97
|
-
if (((_c = this.control) === null || _c === void 0 ? void 0 : _c.subtype) == "file") {
|
|
98
|
-
this.loadFiles();
|
|
99
|
-
}
|
|
100
|
-
if (((_d = this.control) === null || _d === void 0 ? void 0 : _d.type) == 'string')
|
|
101
|
-
this.lenghtWord = this.value ? this.value.length : 0;
|
|
102
|
-
if (((_e = this.control) === null || _e === void 0 ? void 0 : _e.subtype) == 'switch')
|
|
103
|
-
this.instanceBoolField();
|
|
104
|
-
}
|
|
105
|
-
instanceBoolField() {
|
|
106
|
-
this.tempValue = this.value;
|
|
107
|
-
if (this.value == true && this.control.trueValue !== undefined) {
|
|
108
|
-
this.value = this.control.trueValue;
|
|
109
|
-
this.sendValue();
|
|
110
|
-
}
|
|
111
|
-
else if (this.value == false && this.control.falseValue !== undefined) {
|
|
112
|
-
this.value = this.control.falseValue;
|
|
113
|
-
this.sendValue();
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
onChangeSwitch() {
|
|
117
|
-
this.value = this.tempValue;
|
|
118
|
-
this.sendValue();
|
|
119
|
-
}
|
|
120
|
-
loadFiles() {
|
|
121
|
-
this.isLoading = true;
|
|
122
|
-
this.uploadedFiles = [];
|
|
123
|
-
if (!this.value) {
|
|
124
|
-
this.isLoading = false;
|
|
125
|
-
this.cdr.detectChanges();
|
|
126
|
-
}
|
|
127
|
-
else if (this.control.config.namePattern && this.control.type == "string") {
|
|
128
|
-
let urls = this.control.config.separator ? this.value.split(",") : [this.value];
|
|
129
|
-
urls.forEach(url => this.uploadedFiles.push({ url: url, name: this.getNameFile(this.control.config.namePattern, url) }));
|
|
130
|
-
this.isLoading = false;
|
|
131
|
-
this.cdr.detectChanges();
|
|
132
|
-
}
|
|
133
|
-
else if (this.control.config.namePattern && this.control.type == "array") {
|
|
134
|
-
this.value.forEach((url) => this.uploadedFiles.push({ url: url, name: this.getNameFile(this.control.config.namePattern, url) }));
|
|
135
|
-
this.isLoading = false;
|
|
136
|
-
this.cdr.detectChanges();
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
onDeleteFile(index) {
|
|
140
|
-
var _a, _b;
|
|
141
|
-
if ((!((_a = this.control.config) === null || _a === void 0 ? void 0 : _a.limit) || ((_b = this.control.config) === null || _b === void 0 ? void 0 : _b.limit) == 1) && this.control.type == "string")
|
|
142
|
-
this.value = null;
|
|
143
|
-
else if (this.control.type == "array")
|
|
144
|
-
this.value.splice(index, 1);
|
|
145
|
-
}
|
|
146
|
-
getNameFile(namePattern, url) {
|
|
147
|
-
const regexObj = new RegExp(namePattern);
|
|
148
|
-
const match = regexObj.exec(url);
|
|
149
|
-
if (!match)
|
|
150
|
-
throw new Error("El pattern no coincide con la url. " + url);
|
|
151
|
-
return match[0];
|
|
152
|
-
}
|
|
153
|
-
sendValue() {
|
|
154
|
-
var _a;
|
|
155
|
-
if (this.control.type == "string" && this.value == "" && ((_a = this.control.config) === null || _a === void 0 ? void 0 : _a.allowEmpty) == false)
|
|
156
|
-
this.value = null;
|
|
157
|
-
this.setValue.emit(this.value);
|
|
158
|
-
}
|
|
159
|
-
sendNumberValue($event) {
|
|
160
|
-
this.value = $event.value;
|
|
161
|
-
this.sendValue();
|
|
162
|
-
}
|
|
163
|
-
onInputEmail(force) {
|
|
164
|
-
const aux = Math.abs(this.lenghtWord - this.value.length);
|
|
165
|
-
this.lenghtWord = this.value.length;
|
|
166
|
-
if (aux > 1 || force) {
|
|
167
|
-
const regex = new RegExp(/([\w\.\-_]+)?\w+@[\w-_]+(\.\w+){1,}/igm);
|
|
168
|
-
if (regex.test(this.value))
|
|
169
|
-
this.sendValue();
|
|
170
|
-
else {
|
|
171
|
-
this.value = null;
|
|
172
|
-
this.sendValue();
|
|
173
|
-
this.notificationService.addNotification({ severity: 'warn', detail: 'El correo no es válido' }, this.primeChecking());
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
sendValueFromObject(event) {
|
|
178
|
-
switch (typeof (this.control.config.optionValue)) {
|
|
179
|
-
case 'object':
|
|
180
|
-
this.control.config.optionValue.forEach((op) => op['value'] = event[op.key]);
|
|
181
|
-
this.setValue.emit(this.control.config.optionValue);
|
|
182
|
-
break;
|
|
183
|
-
default:
|
|
184
|
-
this.setValue.emit(event[this.control.config.optionValue]);
|
|
185
|
-
break;
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
loadDataFromService() {
|
|
189
|
-
var _a;
|
|
190
|
-
this.isLoading = true;
|
|
191
|
-
this.dataFromService = [];
|
|
192
|
-
const op = this.control.config;
|
|
193
|
-
const url = this.crudService.getURL(op, undefined, undefined);
|
|
194
|
-
if ((_a = this.control.config) === null || _a === void 0 ? void 0 : _a.customOptions) {
|
|
195
|
-
this.dataFromService = this.control.config.customOptions;
|
|
196
|
-
}
|
|
197
|
-
else {
|
|
198
|
-
this.generalService.genericRequest(this.control.config.method, url)
|
|
199
|
-
.then((res) => {
|
|
200
|
-
this.dataFromService = res.data;
|
|
201
|
-
}).finally(() => {
|
|
202
|
-
this.isLoading = false;
|
|
203
|
-
this.cdr.detectChanges();
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
loadDataFromControlBusquedaService(event) {
|
|
208
|
-
this.isLoading = true;
|
|
209
|
-
const op = this.control.config;
|
|
210
|
-
let url = this.crudService.getURL(op);
|
|
211
|
-
url = url.replace('@query', (event === null || event === void 0 ? void 0 : event.query) || '');
|
|
212
|
-
this.generalService.genericRequest(this.control.config.method, url)
|
|
213
|
-
.then((res) => {
|
|
214
|
-
var _a;
|
|
215
|
-
this.dataFromService = res.data;
|
|
216
|
-
if (((_a = this.dataFromService) === null || _a === void 0 ? void 0 : _a.length) == 0 && this.control.allowCustomOption) {
|
|
217
|
-
//agregar un campo que el usuario haya digitado
|
|
218
|
-
let newItem = {};
|
|
219
|
-
newItem[this.control.field] = this.tempValue;
|
|
220
|
-
newItem[this.control.config.optionValue] = this.tempValue;
|
|
221
|
-
this.dataFromService.push(newItem);
|
|
222
|
-
}
|
|
223
|
-
}).finally(() => {
|
|
224
|
-
this.isLoading = false;
|
|
225
|
-
this.cdr.detectChanges();
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
extracValueFromControlBusqueda() {
|
|
229
|
-
const op = this.control.config;
|
|
230
|
-
let url = this.crudService.getURL(op);
|
|
231
|
-
url = url.replace('@query', this.value);
|
|
232
|
-
this.generalService.genericRequest(this.control.config.method, url)
|
|
233
|
-
.then((res) => {
|
|
234
|
-
var _a;
|
|
235
|
-
if (((_a = res.data) === null || _a === void 0 ? void 0 : _a.length) == 1 && res.data[0][this.control.field]) {
|
|
236
|
-
this.tempValue = res.data[0];
|
|
237
|
-
this.value = res.data[0][this.control.field];
|
|
238
|
-
}
|
|
239
|
-
else
|
|
240
|
-
this.setDefaultValue();
|
|
241
|
-
}).finally(() => {
|
|
242
|
-
this.cdr.detectChanges();
|
|
243
|
-
}).catch(() => {
|
|
244
|
-
this.setDefaultValue();
|
|
245
|
-
});
|
|
246
|
-
}
|
|
247
|
-
onUpload(event) {
|
|
248
|
-
this.uploadingFiles = true;
|
|
249
|
-
const formData = new FormData();
|
|
250
|
-
const path = this.control.config.path || 'Imagenes/CRUD/temp';
|
|
251
|
-
formData.append('Ruta', `/${path}`);
|
|
252
|
-
for (let i = 0; i < event.length; i++)
|
|
253
|
-
formData.append(`uploadFile_${i}`, event[i]);
|
|
254
|
-
const op = this.control.config;
|
|
255
|
-
const url = this.crudService.getURL(op);
|
|
256
|
-
this.generalService.genericRequest(this.control.config.method, url, formData)
|
|
257
|
-
.then(() => {
|
|
258
|
-
var _a;
|
|
259
|
-
let separator = ((_a = this.control.config) === null || _a === void 0 ? void 0 : _a.separator) || ",";
|
|
260
|
-
//se asume que viene namePattern
|
|
261
|
-
if (this.control.type == "string")
|
|
262
|
-
this.value = event.map(f => `${this.generalService.jsonConfig.Server}${path}/${f.name}`).join(separator);
|
|
263
|
-
else if (this.control.type == "array")
|
|
264
|
-
this.value = event.map(f => `${this.generalService.jsonConfig.Server}${path}/${f.name}`);
|
|
265
|
-
// SI NO TRAE namePattern, debe retornar un objeto con el nombre y href
|
|
266
|
-
//else if (this.control.config.namePattern && this.control.type == "array") this.value = event.map(x => x.name)
|
|
267
|
-
//else if (!this.control.config.namePattern && this.control.type == "array") this.value = event.map(f => `${this.generalService.jsonConfig.Server}${path}/${f.name}`)
|
|
268
|
-
this.sendValue();
|
|
269
|
-
let msg = !this.control.config.limit || this.control.config.limit == 1 ? "Archivo cargado correctamente!" : "Archivos cargados correctamente!";
|
|
270
|
-
this.notificationService.addNotification({ severity: 'info', detail: msg }, this.primeChecking());
|
|
271
|
-
})
|
|
272
|
-
.catch(() => this.notificationService.addNotification({ severity: 'error', detail: `Error al cargar el archivo!` }, this.primeChecking()))
|
|
273
|
-
.finally(() => this.uploadingFiles = false);
|
|
274
|
-
}
|
|
275
|
-
refresData() {
|
|
276
|
-
var _a, _b;
|
|
277
|
-
if ((_b = (_a = this.control) === null || _a === void 0 ? void 0 : _a.config) === null || _b === void 0 ? void 0 : _b.endpointtemp)
|
|
278
|
-
this.loadDataFromService();
|
|
279
|
-
}
|
|
280
|
-
setDefaultValue() {
|
|
281
|
-
this.tempValue = {};
|
|
282
|
-
if (!this.control.config.optionLabel)
|
|
283
|
-
console.error("No esta bien configurado el control ", this.control);
|
|
284
|
-
else
|
|
285
|
-
this.tempValue[this.control.config.optionLabel] = this.value ? this.value : "";
|
|
286
|
-
}
|
|
287
|
-
searchValue(value) {
|
|
288
|
-
const op = this.control.config;
|
|
289
|
-
let url = this.crudService.getURL(op, undefined, undefined);
|
|
290
|
-
url = url.replace('@id', value);
|
|
291
|
-
this.generalService.genericRequest(this.control.config.method, url)
|
|
292
|
-
.then((res) => {
|
|
293
|
-
var _a;
|
|
294
|
-
if (((_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
295
|
-
this.sendObject.emit({ data: res.data[0], optionValue: this.control.config.optionValue });
|
|
296
|
-
}
|
|
297
|
-
else {
|
|
298
|
-
this.notificationService.addNotification({ severity: 'warn', detail: `Valor no encontrado.` }, this.primeChecking());
|
|
299
|
-
this.sendObject.emit({ data: null, optionValue: this.control.config.optionValue });
|
|
300
|
-
}
|
|
301
|
-
})
|
|
302
|
-
.catch(err => {
|
|
303
|
-
this.notificationService.addNotification({ severity: 'error', detail: `Error al consumir el servicio.` }, this.primeChecking());
|
|
304
|
-
});
|
|
305
|
-
}
|
|
306
|
-
primeChecking() {
|
|
307
|
-
return new RequestChecking(undefined, undefined, false, undefined, undefined, false, undefined);
|
|
308
|
-
}
|
|
309
|
-
instanceDate() {
|
|
310
|
-
const format = this.control.formatMoment;
|
|
311
|
-
if (this.value) {
|
|
312
|
-
if (typeof (this.value) == "string" && this.value.includes("T"))
|
|
313
|
-
this.value = new Date(this.value);
|
|
314
|
-
else if (typeof (this.value) == "string")
|
|
315
|
-
this.value = moment(this.value, format).toDate();
|
|
316
|
-
this.tempValue = moment(this.value).format("DD/MM/YYYY");
|
|
317
|
-
}
|
|
318
|
-
else {
|
|
319
|
-
this.tempValue = null;
|
|
320
|
-
this.value = null;
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
/**
|
|
324
|
-
* Cast tempValue to date
|
|
325
|
-
*/
|
|
326
|
-
onChangeSDate($event) {
|
|
327
|
-
console.log($event);
|
|
328
|
-
console.log(this.tempValue);
|
|
329
|
-
console.log(this.value);
|
|
330
|
-
const aux = moment(this.tempValue, "DD/MM/YYYY");
|
|
331
|
-
if (this.tempValue == this.maskDate.replaceAll("9", "_")) {
|
|
332
|
-
this.value = null;
|
|
333
|
-
this.sendValue();
|
|
334
|
-
}
|
|
335
|
-
else if (aux.isValid()) {
|
|
336
|
-
this.value = aux.toDate();
|
|
337
|
-
this.sendValue();
|
|
338
|
-
}
|
|
339
|
-
else {
|
|
340
|
-
this.tempValue = null;
|
|
341
|
-
this.notificationService.addNotification({ severity: 'warn', detail: 'La fecha no es válida' }, this.primeChecking());
|
|
342
|
-
}
|
|
343
|
-
this.cdr.detectChanges();
|
|
344
|
-
}
|
|
345
|
-
onChangeDate() {
|
|
346
|
-
this.tempValue = moment(this.value).format("DD/MM/YYYY");
|
|
347
|
-
this.sendValue();
|
|
348
|
-
}
|
|
349
|
-
onTouchDescription() {
|
|
350
|
-
var _a;
|
|
351
|
-
try {
|
|
352
|
-
(_a = this.tooltips.get(0)) === null || _a === void 0 ? void 0 : _a.activate();
|
|
353
|
-
}
|
|
354
|
-
catch (ex) { }
|
|
355
|
-
}
|
|
356
|
-
onUnTouchDescription() {
|
|
357
|
-
var _a;
|
|
358
|
-
try {
|
|
359
|
-
(_a = this.tooltips.get(0)) === null || _a === void 0 ? void 0 : _a.deactivate();
|
|
360
|
-
}
|
|
361
|
-
catch (ex) { }
|
|
362
|
-
}
|
|
363
|
-
doFocusOut() {
|
|
364
|
-
if (document.activeElement) {
|
|
365
|
-
document.activeElement.blur();
|
|
366
|
-
}
|
|
367
|
-
this.cdr.detectChanges();
|
|
368
|
-
}
|
|
369
|
-
onClickedAddres() {
|
|
370
|
-
this.addressClicked.emit();
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
ControlComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ControlComponent, deps: [{ token: i1.GeneralService }, { token: i2.SfCrudService }, { token: i0.ChangeDetectorRef }, { token: i3.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
374
|
-
ControlComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ControlComponent, selector: "sf-control", inputs: { showTempValue: "showTempValue", control: "control", label: "label", value: "value", appendTo: "appendTo" }, outputs: { setValue: "setValue", sendObject: "sendObject", addressClicked: "addressClicked" }, viewQueries: [{ propertyName: "tooltips", predicate: Tooltip, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"showTempValue\"><p *ngIf=\"tempValue\">{{tempValue[control.field]}}</p></ng-container>\r\n\r\n<div *ngIf=\"!showTempValue\" [ngSwitch]=\"control.type\" #cc class=\"control-container\">\r\n <div class=\"label-container\">\r\n <label [for]=\"label\">{{label}}</label>\r\n <i #tooltip *ngIf=\"control.tooltip\" class=\"pi pi-question-circle\"\r\n [tooltipPosition]=\"control.tooltipPosition || 'top'\" [pTooltip]=\"control.tooltip\"\r\n (touchstart)=\"onTouchDescription()\" (touchend)=\"onUnTouchDescription()\"></i>\r\n </div>\r\n\r\n <ng-container *ngSwitchCase=\"'string'\" >\r\n <ng-container [ngSwitch]=\"control.subtype\">\r\n <ng-container *ngSwitchCase=\"'input'\">\r\n <input pInputText [name]=\"label\" type=\"text\" [(ngModel)]=\"value\" (input)=\"sendValue()\"\r\n [disabled]=\"control.disabled || false\" [autocomplete]=\"control.autocomplete || 'off'\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <textarea [rows]=\"control.config?.rows ? control.config.rows : 4\" [(ngModel)]=\"value\"\r\n (input)=\"sendValue()\" pInputTextarea [disabled]=\"control.config?.disabled || false\"\r\n [autoResize]=\"control.config?.autoresize || false\"></textarea>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'password'\">\r\n <input pInputText type=\"password\" [(ngModel)]=\"value\" (input)=\"sendValue()\"\r\n [disabled]=\"control.disabled || false\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'email'\">\r\n <input pInputText type=\"text\" [(ngModel)]=\"value\" placeholder=\"email@example.com\"\r\n [disabled]=\"control.disabled || false\" autocomplete=\"email\" (input)=\"onInputEmail(false)\"\r\n (focusout)=\"onInputEmail(true)\" (keyup.enter)=\"doFocusOut()\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'phone'\">\r\n <p-inputMask mask=\"(999) 999-9999\" [(ngModel)]=\"value\" placeholder=\"(999) 999-9999\"\r\n [disabled]=\"control.disabled || false\" autocomplete=\"tel-national\"\r\n [unmask]=\"control.unmask || false\" (onComplete)=\"sendValue()\"></p-inputMask>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'address'\">\r\n <input pInputText type=\"text\" [value]=\"value | formatAddress: control.separador\" autocomplete=\"off\" [disabled]=\"clicked\" (keydown)=\"onClickedAddres()\" (focus)=\"onClickedAddres()\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'enum'\">\r\n <p-dropdown [options]=\"control.enum\" [(ngModel)]=\"value\" (onChange)=\"sendValue()\" appendTo=\"body\"\r\n placeholder=\"Seleccione una opci\u00F3n\" [disabled]=\"control.disabled || false\"></p-dropdown>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <p-dropdown [lazy]=\"isLoading\" [options]=\"dataFromService\" [(ngModel)]=\"value\" (onChange)=\"sendValue()\"\r\n [optionLabel]=\"control.config.optionLabel\" [showClear]=\"control.config.showClear\"\r\n [optionValue]=\"control.field || control.config.optionValue\" appendTo=\"body\"\r\n placeholder=\"Seleccione una opci\u00F3n\" [disabled]=\"control.disabled || false\"></p-dropdown>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dropdown:replace'\">\r\n <p-dropdown [lazy]=\"isLoading\" [options]=\"dataFromService\"\r\n (onChange)=\"sendValueFromObject($event)\" [optionLabel]=\"control.config.optionLabel\"\r\n appendTo=\"body\" placeholder=\"Seleccione una opci\u00F3n\"\r\n [disabled]=\"control.disabled || false\"></p-dropdown>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'autocomplete'\">\r\n <p-autoComplete [showEmptyMessage]=\"true\" [suggestions]=\"dataFromService\" appendTo=\"body\"\r\n (completeMethod)=\"loadDataFromControlBusquedaService($event)\" [field]=\"control.field\"\r\n [minLength]=\"1\" (onSelect)=\"sendValueFromObject($event)\" [(ngModel)]=\"tempValue\"\r\n [disabled]=\"control.disabled || false\"></p-autoComplete>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'input:search'\">\r\n <div class=\"p-inputgroup\">\r\n <input type=\"text\" pInputText [(ngModel)]=\"value\" (focusout)=\"sendValue()\"\r\n (keyup.enter)=\"doFocusOut()\" />\r\n <button type=\"button\" pButton icon=\"pi pi-search\" (click)=\"searchValue(value)\"></button>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'file'\">\r\n <sf-file-upload *ngIf=\"!isLoading\" [accept]=\"control.config?.accept || 'image/*,application/pdf'\"\r\n [loading]=\"uploadingFiles\" [files]=\"uploadedFiles\" [configName]=\"control.config?.configName\"\r\n [limit]=\"control.config?.limit || 1\" (onUpload)=\"onUpload($event)\"\r\n (onDeleteFile)=\"onDeleteFile($event)\"></sf-file-upload>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ng-container [ngSwitch]=\"control.subtype\">\r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-inputgroup\">\r\n <p-inputMask [(ngModel)]=\"tempValue\" [mask]=\"maskDate\" [placeholder]=\"control.placeholder\"\r\n (onBlur)=\"onChangeSDate($event)\" [disabled]=\"control.disabled || false\"></p-inputMask>\r\n <p-calendar [(ngModel)]=\"value\" class=\"only-icon\" [monthNavigator]=\"true\" [yearNavigator]=\"true\" yearRange=\"1900:2035\"\r\n [dateFormat]=\"control.format || 'yy-mm-dd'\" appendTo=\"body\" [disabled]=\"control.disabled || false\"\r\n [showOnFocus]=\"!control.hide\" [placeholder]=\"control.placeholder || 'aaaa-mm-dd'\"\r\n [touchUI]=\"control.touchUI || false\" [showIcon]=\"control.showIcon || false\" (onSelect)=\"onChangeDate()\"\r\n (onBlur)=\"onChangeDate()\"></p-calendar>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'numeric'\">\r\n <ng-container [ngSwitch]=\"control.subtype\">\r\n <ng-container *ngSwitchCase=\"'currency'\">\r\n <p-inputNumber [ngModel]=\"value\" (ngModelChange)=\"value = $event; sendValue()\" mode=\"decimal\" [minFractionDigits]=\"control.minFractionDigits || 0\"\r\n [min]=\"control.min || null\" [max]=\"control.max || null\" (onInput)=\"sendNumberValue($event)\"\r\n [prefix]=\"control.currency || '$ '\" [disabled]=\"control.disabled || false\"></p-inputNumber>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'decimal'\">\r\n <p-inputNumber [ngModel]=\"value\" mode=\"decimal\" (ngModelChange)=\"value = $event; sendValue()\" [min]=\"control.min || null\"\r\n [max]=\"control.max || null\" [minFractionDigits]=\"control.minFractionDigits || 0\"\r\n [locale]=\"control.locale || undefined\" [useGrouping]=\"control.useGrouping || false\"\r\n [disabled]=\"control.disabled || false\"></p-inputNumber>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'percentage'\">\r\n <p-inputNumber [ngModel]=\"value\" suffix=\" %\" (ngModelChange)=\"value = $event; sendValue()\" (onInput)=\"sendValue()\" [min]=\"control.min || null\"\r\n [max]=\"control.max || null\" [minFractionDigits]=\"control.minFractionDigits || 2\"\r\n [locale]=\"control.locale || undefined\" [disabled]=\"control.disabled || false\"></p-inputNumber>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'decimal:search'\">\r\n <div class=\"p-inputgroup\">\r\n <input type=\"number\" pInputText [(ngModel)]=\"value\" (focusout)=\"sendValue()\"\r\n (keyup.enter)=\"doFocusOut()\" />\r\n <button type=\"button\" pButton icon=\"pi pi-search\" (click)=\"searchValue(value)\"></button>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'array'\">\r\n <ng-container [ngSwitch]=\"control.subtype\">\r\n <ng-container *ngSwitchCase=\"'file'\">\r\n <sf-file-upload *ngIf=\"!isLoading\" [loading]=\"uploadingFiles\" [files]=\"uploadedFiles\"\r\n [configName]=\"control.config?.configName\" [limit]=\"control.config?.limit || 1\"\r\n [accept]=\"control.config?.accept || 'image/*,application/pdf'\" (onUpload)=\"onUpload($event)\"\r\n (onDeleteFile)=\"onDeleteFile($event)\"></sf-file-upload>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'multiselect'\">\r\n <p-multiSelect [options]=\"dataFromService\" [(ngModel)]=\"value\" (onChange)=\"sendValue()\"\r\n [optionLabel]=\"control.config?.optionLabel\" [optionValue]=\"control.config?.optionValue\"\r\n [placeholder]=\"control.config?.placeholder\"\r\n [display]=\"control.config?.display || 'chip'\"></p-multiSelect>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'boolean'\">\r\n <ng-container [ngSwitch]=\"control.subtype\">\r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <p-inputSwitch [(ngModel)]=\"tempValue\" (onChange)=\"onChangeSwitch()\" [id]=\"label\"\r\n [trueValue]=\"control?.trueValue !== undefined ? control?.trueValue: null\"\r\n [falseValue]=\"control?.falseValue !== undefined ? control?.falseValue: null\"></p-inputSwitch>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</div>\r\n", styles: ["::ng-deep .label-container{& label{margin-right:10px;color:#55585b;font-size:17px}& i{font-size:1.1rem}}::ng-deep .p-tooltip{max-width:15rem;font-size:.85rem;text-align:center}.control-container ::ng-deep .p-button:hover{background:var(--secondary-color)!important;border-color:var(--secondary-color)!important;filter:brightness(85%)}.control-container ::ng-deep .p-component,.control-container ::ng-deep .p-component *{border-radius:6px}.control-container ::ng-deep .p-inputtext{font-size:17px;border:1px solid #d1d5db;border-radius:6px}.control-container ::ng-deep .p-inputtext:focus,.control-container ::ng-deep .p-inputtext:active,.control-container ::ng-deep .p-inputwrapper:focus,.control-container ::ng-deep .p-inputwrapper:active{border-color:var(--button-color)}.control-container ::ng-deep .p-inputtext:enabled:focus{border-color:var(--secondary-color)!important;box-shadow:inset 0 0 0 1px #fff}.control-container ::ng-deep input.p-inputtext::placeholder{color:#6b7280;font-family:sans-serif;font-size:18px}.control-container ::ng-deep .p-dropdown{background:#ffffff;border:1px solid #d1d5db;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s;border-radius:6px}.control-container ::ng-deep .p-dropdown:not(.p-disabled):hover{border-color:var(--secondary-color)!important}.control-container ::ng-deep .p-dropdown:not(.p-disabled).p-focus{border-color:var(--secondary-color)!important;box-shadow:inset 0 0 0 1px #fff}.control-container ::ng-deep .p-dropdown .p-inputtext{border:none}.control-container ::ng-deep .p-dropdown .p-dropdown-label.p-placeholder{font-family:sans-serif;color:#6b7280}.control-container ::ng-deep .p-button.p-button-danger,.control-container ::ng-deep .p-buttonset.p-button-danger>.p-button,.control-container ::ng-deep .p-splitbutton.p-button-danger>.p-button{border-color:var(--secondary-color)!important;background:var(--secondary-color)!important}.control-container ::ng-deep .p-inputgroup button:last-child{border-top-right-radius:6px;border-bottom-right-radius:6px}.control-container ::ng-deep .p-inputgroup input:last-child{border-top-right-radius:0;border-bottom-right-radius:0}.control-container ::ng-deep .p-inputgroup input:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}.control-container ::ng-deep .p-datepicker-touch-ui .p-datepicker-title{padding:3px}.control-container ::ng-deep .p-datepicker-month,.control-container ::ng-deep .p-datepicker-month:focus,.control-container ::ng-deep .p-datepicker-year:focus,.control-container ::ng-deep .p-datepicker-year{border:none}.p-inputgroup{& p-calendar{display:contents;& input{display:none}& .p-button-icon-only{border-top-left-radius:0;border-bottom-left-radius:0}}& p-inputMask{display:contents;& ::ng-deep input{border-top-right-radius:0;border-bottom-right-radius:0}}}@media (max-width <=768px){:host{font-size:14px}}\n"], components: [{ type: i4.InputMask, selector: "p-inputMask", inputs: ["type", "slotChar", "autoClear", "style", "inputId", "styleClass", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabel", "ariaRequired", "disabled", "readonly", "unmask", "name", "required", "characterPattern", "autoFocus", "autocomplete", "mask"], outputs: ["onComplete", "onFocus", "onBlur", "onInput", "onKeydown"] }, { type: i5.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "virtualScroll", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaFilterLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "disabled", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide"] }, { type: i6.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "virtualScroll", "itemSize", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "field", "scrollHeight", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "suggestions"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide"] }, { type: i7.FileUploadComponent, selector: "sf-file-upload", inputs: ["limit", "files", "loading", "configName", "accept"], outputs: ["onUpload", "onDeleteFile"] }, { type: i8.Calendar, selector: "p-calendar", inputs: ["style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "numberOfMonths", "view", "touchUI", "timeSeparator", "focusTrap", "firstDayOfWeek", "showTransitionOptions", "hideTransitionOptions", "tabindex", "defaultDate", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "locale"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { type: i9.InputNumber, selector: "p-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "step", "inputStyle", "inputStyleClass", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown"] }, { type: i10.MultiSelect, selector: "p-multiSelect", inputs: ["style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "autoZIndex", "baseZIndex", "filterBy", "virtualScroll", "itemSize", "showTransitionOptions", "hideTransitionOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "scrollHeight", "defaultLabel", "placeholder", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onPanelShow", "onPanelHide"] }, { type: i11.InputSwitch, selector: "p-inputSwitch", inputs: ["style", "styleClass", "tabindex", "inputId", "name", "disabled", "readonly", "ariaLabelledBy"], outputs: ["onChange"] }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i13.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i12.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i14.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i15.InputText, selector: "[pInputText]" }, { type: i14.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i14.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i16.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize"], outputs: ["onResize"] }, { type: i17.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i14.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }], pipes: { "formatAddress": i18.FormatAddressPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
375
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ControlComponent, decorators: [{
|
|
376
|
-
type: Component,
|
|
377
|
-
args: [{
|
|
378
|
-
selector: 'sf-control',
|
|
379
|
-
templateUrl: './control.component.html',
|
|
380
|
-
styleUrls: ['./control.component.css'],
|
|
381
|
-
changeDetection: ChangeDetectionStrategy.OnPush
|
|
382
|
-
}]
|
|
383
|
-
}], ctorParameters: function () { return [{ type: i1.GeneralService }, { type: i2.SfCrudService }, { type: i0.ChangeDetectorRef }, { type: i3.NotificationService }]; }, propDecorators: { showTempValue: [{
|
|
384
|
-
type: Input
|
|
385
|
-
}], control: [{
|
|
386
|
-
type: Input
|
|
387
|
-
}], label: [{
|
|
388
|
-
type: Input
|
|
389
|
-
}], value: [{
|
|
390
|
-
type: Input
|
|
391
|
-
}], appendTo: [{
|
|
392
|
-
type: Input
|
|
393
|
-
}], setValue: [{
|
|
394
|
-
type: Output
|
|
395
|
-
}], sendObject: [{
|
|
396
|
-
type: Output
|
|
397
|
-
}], addressClicked: [{
|
|
398
|
-
type: Output
|
|
399
|
-
}], tooltips: [{
|
|
400
|
-
type: ViewChildren,
|
|
401
|
-
args: [Tooltip]
|
|
402
|
-
}] } });
|
|
403
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZi1jcnVkL3NyYy9saWIvY29tcG9uZW50cy9jb250cm9sL2NvbnRyb2wuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2YtY3J1ZC9zcmMvbGliL2NvbXBvbmVudHMvY29udHJvbC9jb250cm9sLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQXFCLFlBQVksRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFFOUssT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hELE9BQU8sRUFBNkIsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFbkcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBR2pDLE9BQU8sS0FBSyxRQUFRLE1BQU0sVUFBVSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFyQyxNQUFNLE9BQU8sZ0JBQWdCO0lBd0IzQixZQUNVLGNBQThCLEVBQzlCLFdBQTBCLEVBQzFCLEdBQXNCLEVBQ3RCLG1CQUF3QztRQUh4QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWU7UUFDMUIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQTFCekMsa0JBQWEsR0FBVyxLQUFLLENBQUM7UUFDOUIsWUFBTyxHQUFVLElBQUksS0FBSyxFQUFFLENBQUM7UUFDN0IsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUdsQixhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7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Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNnQixRQUFRO3NCQUE5QixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIFZpZXdDaGlsZHJlbiwgUXVlcnlMaXN0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgR2VuZXJhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvZ2VuZXJhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2hlbWEgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL3NoZW1hLm1vZGVsJztcclxuaW1wb3J0IHsgT3BlcmF0aW9uLCBPdmVycmlkZUNvbmZpZywgUmVxdWVzdENoZWNraW5nIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9jcnVkLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IFNmQ3J1ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZi1jcnVkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcclxuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IEFyY2hpdm8gfSBmcm9tICcuLi9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0ICogYXMganNvbnBhdGggZnJvbSAnanNvbnBhdGgnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZi1jb250cm9sJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29udHJvbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29udHJvbC5jb21wb25lbnQuY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbnRyb2xDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBJbnB1dCgpIHNob3dUZW1wVmFsdWU6Qm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNvbnRyb2w6IFNoZW1hID0gbmV3IFNoZW1hKCk7XHJcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIHZhbHVlOiBhbnk7XHJcbiAgQElucHV0KCkgYXBwZW5kVG86IGFueTtcclxuICBAT3V0cHV0KCkgc2V0VmFsdWU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHNlbmRPYmplY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGFkZHJlc3NDbGlja2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBWaWV3Q2hpbGRyZW4oVG9vbHRpcCkgdG9vbHRpcHMhOiBRdWVyeUxpc3QgPFRvb2x0aXA+O1xyXG5cclxuICBwcml2YXRlIGxlbmdodFdvcmQhOiBudW1iZXI7XHJcbiAgcHVibGljIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkYXRhRnJvbVNlcnZpY2U6IGFueVtdID0gW107XHJcbiAgcHVibGljIHVwbG9hZGVkRmlsZXM6IEFyY2hpdm9bXSA9IFtdO1xyXG4gIHB1YmxpYyBkaXNwbGF5QWRkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHRlbXBWYWx1ZTogYW55O1xyXG4gIHB1YmxpYyBjbGlja2VkID0gZmFsc2U7XHJcbiAgcHVibGljIG1hc2tEYXRlID0gXCI5OS85OS85OTk5XCJcclxuXHJcbiAgcHVibGljIHVwbG9hZGluZ0ZpbGVzID0gZmFsc2U7XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZ2VuZXJhbFNlcnZpY2U6IEdlbmVyYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjcnVkU2VydmljZTogU2ZDcnVkU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubG9hZERlZmF1bHRWYWx1ZXMoKVxyXG4gICAgaWYgKHRoaXMuY29udHJvbD8uY29uZmlnPy5kZXBlbmRzKXtcclxuICAgICAgdGhpcy5jcnVkU2VydmljZS5jaGFuZ2VEYXRhJC5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICBpZiAocmVzKXtcclxuICAgICAgICAgIGxldCByZWdpc3RybyA9IHRoaXMuY3J1ZFNlcnZpY2UuZ2V0UmVnaXN0cm8odGhpcy5jcnVkU2VydmljZS5pbmRleClcclxuICAgICAgICAgIGxldCBrZXlGb3VuZCA9IHJlZ2lzdHJvLmtleXM/LmZpbmQoayA9PiBrLnNjb3BlID09PSByZXMuc2NvcGVcclxuICAgICAgICAgICYmICAodGhpcy5jb250cm9sLmNvbmZpZy5kZXBlbmRzIGFzIHN0cmluZ1tdKS5pbmNsdWRlcyhrLmtleSkgJiZcclxuICAgICAgICAgIChyZXMuaW5kZXggPT09IGsuaW5kZXhEYXRhIHx8IHJlcy5pbmRleCA9PT0gay5pbmRleEFuc3dlcikpXHJcbiAgICAgICAgICBpZiAoa2V5Rm91bmQ/Lm92ZXJyaWRlQ29udHJvbCl7XHJcbiAgICAgICAgICAgIGxldCBvdmVycmlkZSA9IGtleUZvdW5kLm92ZXJyaWRlQ29udHJvbFxyXG4gICAgICAgICAgICBsZXQgY29tcGxldGVkID0gdGhpcy5jcnVkU2VydmljZS5pc0NvbmRpdGlvbnNDb21wbGV0ZWQob3ZlcnJpZGUuY29uZGl0aW9ucyA/PyBbXSwgcmVnaXN0cm8uY29uZGl0aW9ucyB8fCBbXSwgdGhpcy5jcnVkU2VydmljZS5nZXREYXRhKHRoaXMuY3J1ZFNlcnZpY2UuaW5kZXgpKVxyXG4gICAgICAgICAgICBqc29ucGF0aC52YWx1ZSh0aGlzLmNvbnRyb2wsIG92ZXJyaWRlLnByb3BlcnR5LCBjb21wbGV0ZWQgPyBvdmVycmlkZS52YWx1ZSA6IG92ZXJyaWRlLmVsc2VWYWx1ZSlcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0TmV3VmFsdWUob3ZlcnJpZGUsIGNvbXBsZXRlZCk7XHJcbiAgICAgICAgICAgIHRoaXMudGVtcFZhbHVlID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLnNlbmRWYWx1ZSgpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuc3VidHlwZSA9PSAnZHJvcGRvd24nIHx8IHRoaXMuY29udHJvbC5zdWJ0eXBlID09ICdtdWx0aXNlbGVjdCcpIHRoaXMubG9hZERhdGFGcm9tU2VydmljZSgpXHJcbiAgICAgICAgICAgIC8vdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChrZXlGb3VuZCkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbFxyXG4gICAgICAgICAgICB0aGlzLnNlbmRWYWx1ZSgpXHJcbiAgICAgICAgICAgIHRoaXMubG9hZERlZmF1bHRWYWx1ZXMoKVxyXG4gICAgICAgICAgICAvL3RoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE5ld1ZhbHVlKG92ZXJyaWRlOiBPdmVycmlkZUNvbmZpZywgY29tcGxldGVkOiBib29sZWFuKTogYW55IHtcclxuICAgIGNvbnN0IG5ld1ZhbHVlID0gY29tcGxldGVkID8gb3ZlcnJpZGUubmV3UHJvcGVydHlWYWx1ZTogb3ZlcnJpZGUuZWxzZU5ld1Byb3BlcnR5VmFsdWU7XHJcbiAgICBpZiAobmV3VmFsdWUgJiYgdHlwZW9mKG5ld1ZhbHVlKSA9PSBcInN0cmluZ1wiKXtcclxuICAgICAgaWYgKCFuZXdWYWx1ZS5zdGFydHNXaXRoKCckJykgJiYgIW5ld1ZhbHVlLnN0YXJ0c1dpdGgoJ0AnKSl7XHJcbiAgICAgICAgcmV0dXJuIG5ld1ZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGxvYWREZWZhdWx0VmFsdWVzKCl7XHJcbiAgICBpZiAodGhpcy5jb250cm9sPy5jb25maWcgJiYgdGhpcy5jb250cm9sLnN1YnR5cGUgPT0gJ2Ryb3Bkb3duJyB8fCB0aGlzLmNvbnRyb2wuc3VidHlwZSA9PSAnbXVsdGlzZWxlY3QnKSB0aGlzLmxvYWREYXRhRnJvbVNlcnZpY2UoKTtcclxuICAgIGlmICh0aGlzLmNvbnRyb2w/LnN1YnR5cGUgPT0gJ2F1dG9jb21wbGV0ZScpIHRoaXMuZXh0cmFjVmFsdWVGcm9tQ29udHJvbEJ1c3F1ZWRhKCk7XHJcbiAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLmNvbnRyb2wudHlwZSA9PSAnZGF0ZScpIHRoaXMuaW5zdGFuY2VEYXRlKCk7XHJcbiAgICBpZiAodGhpcy5jb250cm9sPy5zdWJ0eXBlID09IFwiZmlsZVwiKSB7XHJcbiAgICAgIHRoaXMubG9hZEZpbGVzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb250cm9sPy50eXBlID09ICdzdHJpbmcnKSB0aGlzLmxlbmdodFdvcmQgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZS5sZW5ndGggOiAwXHJcbiAgICBpZiAodGhpcy5jb250cm9sPy5zdWJ0eXBlID09ICdzd2l0Y2gnKSB0aGlzLmluc3RhbmNlQm9vbEZpZWxkKClcclxuICB9XHJcbiAgaW5zdGFuY2VCb29sRmllbGQoKSB7XHJcbiAgICB0aGlzLnRlbXBWYWx1ZSA9IHRoaXMudmFsdWVcclxuICAgIGlmICh0aGlzLnZhbHVlID09IHRydWUgJiYgdGhpcy5jb250cm9sLnRydWVWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNvbnRyb2wudHJ1ZVZhbHVlXHJcbiAgICAgIHRoaXMuc2VuZFZhbHVlKClcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMudmFsdWUgPT0gZmFsc2UgJiYgdGhpcy5jb250cm9sLmZhbHNlVmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5jb250cm9sLmZhbHNlVmFsdWVcclxuICAgICAgdGhpcy5zZW5kVmFsdWUoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VTd2l0Y2goKXtcclxuICAgIHRoaXMudmFsdWUgPSB0aGlzLnRlbXBWYWx1ZVxyXG4gICAgdGhpcy5zZW5kVmFsdWUoKVxyXG4gIH1cclxuXHJcbiAgbG9hZEZpbGVzKCl7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWVcclxuICAgIHRoaXMudXBsb2FkZWRGaWxlcyA9IFtdXHJcbiAgICBpZiAoIXRoaXMudmFsdWUpIHtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuY29udHJvbC5jb25maWcubmFtZVBhdHRlcm4gJiYgdGhpcy5jb250cm9sLnR5cGUgPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICBsZXQgdXJsczogc3RyaW5nW10gPSB0aGlzLmNvbnRyb2wuY29uZmlnLnNlcGFyYXRvciA/IHRoaXMudmFsdWUuc3BsaXQoXCIsXCIpIDogW3RoaXMudmFsdWVdXHJcbiAgICAgIHVybHMuZm9yRWFjaCh1cmwgPT4gdGhpcy51cGxvYWRlZEZpbGVzLnB1c2goe3VybDp1cmwsICBuYW1lOnRoaXMuZ2V0TmFtZUZpbGUodGhpcy5jb250cm9sLmNvbmZpZy5uYW1lUGF0dGVybiwgdXJsKX0pKVxyXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5jb250cm9sLmNvbmZpZy5uYW1lUGF0dGVybiAmJiB0aGlzLmNvbnRyb2wudHlwZSA9PSBcImFycmF5XCIpIHtcclxuICAgICAgdGhpcy52YWx1ZS5mb3JFYWNoKCh1cmw6c3RyaW5nKSA9PiB0aGlzLnVwbG9hZGVkRmlsZXMucHVzaCh7dXJsOnVybCwgIG5hbWU6dGhpcy5nZXROYW1lRmlsZSh0aGlzLmNvbnRyb2wuY29uZmlnLm5hbWVQYXR0ZXJuLCB1cmwpfSkpXHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkRlbGV0ZUZpbGUoaW5kZXg6IG51bWJlcil7XHJcbiAgICBpZiAoKCF0aGlzLmNvbnRyb2wuY29uZmlnPy5saW1pdCB8fCB0aGlzLmNvbnRyb2wuY29uZmlnPy5saW1pdCA9PSAxKSAmJiB0aGlzLmNvbnRyb2wudHlwZSA9PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gbnVsbFxyXG4gICAgZWxzZSBpZiAodGhpcy5jb250cm9sLnR5cGUgPT0gXCJhcnJheVwiKSB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcclxuICB9XHJcblxyXG4gIGdldE5hbWVGaWxlKG5hbWVQYXR0ZXJuOiBzdHJpbmcsIHVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlZ2V4T2JqID0gbmV3IFJlZ0V4cChuYW1lUGF0dGVybik7XHJcbiAgICBjb25zdCBtYXRjaCA9IHJlZ2V4T2JqLmV4ZWModXJsKTtcclxuICAgIGlmICghbWF0Y2gpIHRocm93IG5ldyBFcnJvcihcIkVsIHBhdHRlcm4gbm8gY29pbmNpZGUgY29uIGxhIHVybC4gXCIgKyB1cmwpO1xyXG4gICAgcmV0dXJuIG1hdGNoWzBdO1xyXG4gIH1cclxuXHJcbiAgc2VuZFZhbHVlKCkge1xyXG4gICAgaWYgKHRoaXMuY29udHJvbC50eXBlID09IFwic3RyaW5nXCIgJiYgdGhpcy52YWx1ZSA9PSBcIlwiICYmIHRoaXMuY29udHJvbC5jb25maWc/LmFsbG93RW1wdHkgPT0gZmFsc2UpIHRoaXMudmFsdWUgPSBudWxsXHJcbiAgICB0aGlzLnNldFZhbHVlLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBzZW5kTnVtYmVyVmFsdWUoJGV2ZW50OiBhbnkpe1xyXG4gICAgdGhpcy52YWx1ZSA9ICRldmVudC52YWx1ZVxyXG4gICAgdGhpcy5zZW5kVmFsdWUoKVxyXG4gIH1cclxuXHJcbiAgb25JbnB1dEVtYWlsKGZvcmNlOmJvb2xlYW4pe1xyXG4gICAgY29uc3QgYXV4ID0gTWF0aC5hYnModGhpcy5sZW5naHRXb3JkIC0gdGhpcy52YWx1ZS5sZW5ndGgpXHJcbiAgICB0aGlzLmxlbmdodFdvcmQgPSB0aGlzLnZhbHVlLmxlbmd0aFxyXG4gICAgaWYgKGF1eCA+IDEgfHwgZm9yY2Upe1xyXG4gICAgICAgIGNvbnN0IHJlZ2V4OiBSZWdFeHAgPSBuZXcgUmVnRXhwKC8oW1xcd1xcLlxcLV9dKyk/XFx3K0BbXFx3LV9dKyhcXC5cXHcrKXsxLH0vaWdtKTtcclxuICAgICAgICBpZiAocmVnZXgudGVzdCh0aGlzLnZhbHVlKSkgdGhpcy5zZW5kVmFsdWUoKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5zZW5kVmFsdWUoKVxyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZE5vdGlmaWNhdGlvbih7IHNldmVyaXR5OiAnd2FybicsIGRldGFpbDogJ0VsIGNvcnJlbyBubyBlcyB2w6FsaWRvJyB9LCB0aGlzLnByaW1lQ2hlY2tpbmcoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VuZFZhbHVlRnJvbU9iamVjdChldmVudDogYW55KSB7XHJcbiAgICBzd2l0Y2ggKHR5cGVvZiAodGhpcy5jb250cm9sLmNvbmZpZy5vcHRpb25WYWx1ZSkpIHtcclxuICAgICAgY2FzZSAnb2JqZWN0JzpcclxuICAgICAgICB0aGlzLmNvbnRyb2wuY29uZmlnLm9wdGlvblZhbHVlLmZvckVhY2goKG9wOiBhbnkpID0+IG9wWyd2YWx1ZSddID0gZXZlbnRbb3Aua2V5XSlcclxuICAgICAgICB0aGlzLnNldFZhbHVlLmVtaXQodGhpcy5jb250cm9sLmNvbmZpZy5vcHRpb25WYWx1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZS5lbWl0KGV2ZW50W3RoaXMuY29udHJvbC5jb25maWcub3B0aW9uVmFsdWVdKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWREYXRhRnJvbVNlcnZpY2UoKSB7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmRhdGFGcm9tU2VydmljZSA9IFtdO1xyXG4gICAgY29uc3Qgb3A6IE9wZXJhdGlvbiA9IHRoaXMuY29udHJvbC5jb25maWdcclxuICAgIGNvbnN0IHVybCA9IHRoaXMuY3J1ZFNlcnZpY2UuZ2V0VVJMKG9wLCB1bmRlZmluZWQsIHVuZGVmaW5lZClcclxuICAgIGlmICh0aGlzLmNvbnRyb2wuY29uZmlnPy5jdXN0b21PcHRpb25zKXtcclxuICAgICAgdGhpcy5kYXRhRnJvbVNlcnZpY2UgPSB0aGlzLmNvbnRyb2wuY29uZmlnLmN1c3RvbU9wdGlvbnNcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmdlbmVyaWNSZXF1ZXN0KHRoaXMuY29udHJvbC5jb25maWcubWV0aG9kLCB1cmwpXHJcbiAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFGcm9tU2VydmljZSA9IHJlcy5kYXRhO1xyXG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkRGF0YUZyb21Db250cm9sQnVzcXVlZGFTZXJ2aWNlKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IG9wOiBPcGVyYXRpb24gPSB0aGlzLmNvbnRyb2wuY29uZmlnXHJcbiAgICBsZXQgdXJsID0gdGhpcy5jcnVkU2VydmljZS5nZXRVUkwob3ApXHJcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgnQHF1ZXJ5JywgZXZlbnQ/LnF1ZXJ5IHx8ICcnKVxyXG4gICAgdGhpcy5nZW5lcmFsU2VydmljZS5nZW5lcmljUmVxdWVzdCh0aGlzLmNvbnRyb2wuY29uZmlnLm1ldGhvZCwgdXJsKVxyXG4gICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmRhdGFGcm9tU2VydmljZSA9IHJlcy5kYXRhO1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGFGcm9tU2VydmljZT8ubGVuZ3RoID09IDAgJiYgdGhpcy5jb250cm9sLmFsbG93Q3VzdG9tT3B0aW9uKSB7XHJcbiAgICAgICAgICAvL2FncmVnYXIgdW4gY2FtcG8gcXVlIGVsIHVzdWFyaW8gaGF5YSBkaWdpdGFkb1xyXG4gICAgICAgICAgbGV0IG5ld0l0ZW06IGFueSA9IHt9XHJcbiAgICAgICAgICBuZXdJdGVtW3RoaXMuY29udHJvbC5maWVsZF0gPSB0aGlzLnRlbXBWYWx1ZVxyXG4gICAgICAgICAgbmV3SXRlbVt0aGlzLmNvbnRyb2wuY29uZmlnLm9wdGlvblZhbHVlXSA9IHRoaXMudGVtcFZhbHVlXHJcbiAgICAgICAgICB0aGlzLmRhdGFGcm9tU2VydmljZS5wdXNoKG5ld0l0ZW0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgZXh0cmFjVmFsdWVGcm9tQ29udHJvbEJ1c3F1ZWRhKCl7XHJcbiAgICBjb25zdCBvcDogT3BlcmF0aW9uID0gdGhpcy5jb250cm9sLmNvbmZpZ1xyXG4gICAgbGV0IHVybCA9IHRoaXMuY3J1ZFNlcnZpY2UuZ2V0VVJMKG9wKVxyXG4gICAgdXJsID0gdXJsLnJlcGxhY2UoJ0BxdWVyeScsIHRoaXMudmFsdWUpXHJcbiAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmdlbmVyaWNSZXF1ZXN0KHRoaXMuY29udHJvbC5jb25maWcubWV0aG9kLCB1cmwpXHJcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMuZGF0YT8ubGVuZ3RoID09IDEgJiYgcmVzLmRhdGFbMF1bdGhpcy5jb250cm9sLmZpZWxkXSl7XHJcbiAgICAgICAgICB0aGlzLnRlbXBWYWx1ZSA9IHJlcy5kYXRhWzBdXHJcbiAgICAgICAgICB0aGlzLnZhbHVlID0gcmVzLmRhdGFbMF1bdGhpcy5jb250cm9sLmZpZWxkXVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuc2V0RGVmYXVsdFZhbHVlKClcclxuICAgICAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlKClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcbiAgb25VcGxvYWQoZXZlbnQ6IEZpbGVbXSkge1xyXG4gICAgdGhpcy51cGxvYWRpbmdGaWxlcyA9IHRydWVcclxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBjb25zdCBwYXRoID0gdGhpcy5jb250cm9sLmNvbmZpZy5wYXRoIHx8ICdJbWFnZW5lcy9DUlVEL3RlbXAnO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdSdXRhJywgYC8ke3BhdGh9YCk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBldmVudC5sZW5ndGg7IGkrKykgZm9ybURhdGEuYXBwZW5kKGB1cGxvYWRGaWxlXyR7aX1gLCBldmVudFtpXSk7XHJcbiAgICBjb25zdCBvcDogT3BlcmF0aW9uID0gdGhpcy5jb250cm9sLmNvbmZpZ1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5jcnVkU2VydmljZS5nZXRVUkwob3ApXHJcbiAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmdlbmVyaWNSZXF1ZXN0KHRoaXMuY29udHJvbC5jb25maWcubWV0aG9kLCB1cmwsIGZvcm1EYXRhKVxyXG4gICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICBsZXQgc2VwYXJhdG9yID0gdGhpcy5jb250cm9sLmNvbmZpZz8uc2VwYXJhdG9yIHx8IFwiLFwiXHJcbiAgICAgIC8vc2UgYXN1bWUgcXVlIHZpZW5lIG5hbWVQYXR0ZXJuXHJcbiAgICAgIGlmICh0aGlzLmNvbnRyb2wudHlwZSA9PSBcInN0cmluZ1wiKSB0aGlzLnZhbHVlID0gZXZlbnQubWFwKGYgPT4gYCR7dGhpcy5nZW5lcmFsU2VydmljZS5qc29uQ29uZmlnLlNlcnZlcn0ke3BhdGh9LyR7Zi5uYW1lfWApLmpvaW4oc2VwYXJhdG9yKVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmNvbnRyb2wudHlwZSA9PSBcImFycmF5XCIpIHRoaXMudmFsdWUgPSBldmVudC5tYXAoZiA9PiBgJHt0aGlzLmdlbmVyYWxTZXJ2aWNlLmpzb25Db25maWcuU2VydmVyfSR7cGF0aH0vJHtmLm5hbWV9YClcclxuICAgICAgLy8gU0kgTk8gVFJBRSBuYW1lUGF0dGVybiwgZGViZSByZXRvcm5hciB1biBvYmpldG8gY29uIGVsIG5vbWJyZSB5IGhyZWZcclxuICAgICAgLy9lbHNlIGlmICh0aGlzLmNvbnRyb2wuY29uZmlnLm5hbWVQYXR0ZXJuICYmIHRoaXMuY29udHJvbC50eXBlID09IFwiYXJyYXlcIikgdGhpcy52YWx1ZSA9IGV2ZW50Lm1hcCh4ID0+IHgubmFtZSlcclxuICAgICAgLy9lbHNlIGlmICghdGhpcy5jb250cm9sLmNvbmZpZy5uYW1lUGF0dGVybiAmJiB0aGlzLmNvbnRyb2wudHlwZSA9PSBcImFycmF5XCIpIHRoaXMudmFsdWUgPSBldmVudC5tYXAoZiA9PiBgJHt0aGlzLmdlbmVyYWxTZXJ2aWNlLmpzb25Db25maWcuU2VydmVyfSR7cGF0aH0vJHtmLm5hbWV9YClcclxuICAgICAgdGhpcy5zZW5kVmFsdWUoKVxyXG4gICAgICBsZXQgbXNnID0gIXRoaXMuY29udHJvbC5jb25maWcubGltaXQgfHwgdGhpcy5jb250cm9sLmNvbmZpZy5saW1pdCA9PSAxID8gXCJBcmNoaXZvIGNhcmdhZG8gY29ycmVjdGFtZW50ZSFcIjogXCJBcmNoaXZvcyBjYXJnYWRvcyBjb3JyZWN0YW1lbnRlIVwiXHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGROb3RpZmljYXRpb24oeyBzZXZlcml0eTogJ2luZm8nLCBkZXRhaWw6IG1zZyB9LCB0aGlzLnByaW1lQ2hlY2tpbmcoKSlcclxuICAgIH0pXHJcbiAgICAuY2F0Y2goKCkgPT4gdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZE5vdGlmaWNhdGlvbih7IHNldmVyaXR5OiAnZXJyb3InLCBkZXRhaWw6IGBFcnJvciBhbCBjYXJnYXIgZWwgYXJjaGl2byFgIH0sIHRoaXMucHJpbWVDaGVja2luZygpKSlcclxuICAgIC5maW5hbGx5KCgpID0+IHRoaXMudXBsb2FkaW5nRmlsZXMgPSBmYWxzZSlcclxuXHJcbiAgfVxyXG5cclxuICByZWZyZXNEYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuY29udHJvbD8uY29uZmlnPy5lbmRwb2ludHRlbXApIHRoaXMubG9hZERhdGFGcm9tU2VydmljZSgpO1xyXG4gIH1cclxuICBzZXREZWZhdWx0VmFsdWUoKXtcclxuICAgIHRoaXMudGVtcFZhbHVlID0ge31cclxuICAgIGlmICghdGhpcy5jb250cm9sLmNvbmZpZy5vcHRpb25MYWJlbCkgY29uc29sZS5lcnJvcihcIk5vIGVzdGEgYmllbiBjb25maWd1cmFkbyBlbCBjb250cm9sIFwiLCB0aGlzLmNvbnRyb2wpXHJcbiAgICBlbHNlIHRoaXMudGVtcFZhbHVlW3RoaXMuY29udHJvbC5jb25maWcub3B0aW9uTGFiZWxdID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWU6IFwiXCJcclxuXHJcbiAgfVxyXG5cclxuICBzZWFyY2hWYWx1ZSh2YWx1ZTogc3RyaW5nKXtcclxuICAgIGNvbnN0IG9wOiBPcGVyYXRpb24gPSB0aGlzLmNvbnRyb2wuY29uZmlnXHJcbiAgICBsZXQgdXJsID0gdGhpcy5jcnVkU2VydmljZS5nZXRVUkwob3AsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKVxyXG4gICAgdXJsID0gdXJsLnJlcGxhY2UoJ0BpZCcsIHZhbHVlKVxyXG5cclxuXHJcbiAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmdlbmVyaWNSZXF1ZXN0KHRoaXMuY29udHJvbC5jb25maWcubWV0aG9kLCB1cmwpXHJcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXM/LmRhdGE/Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgdGhpcy5zZW5kT2JqZWN0LmVtaXQoeyBkYXRhOiByZXMuZGF0YVswXSwgb3B0aW9uVmFsdWU6IHRoaXMuY29udHJvbC5jb25maWcub3B0aW9uVmFsdWUgfSApXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkTm90aWZpY2F0aW9uKHtzZXZlcml0eTogJ3dhcm4nLCBkZXRhaWw6YFZhbG9yIG5vIGVuY29udHJhZG8uYH0sIHRoaXMucHJpbWVDaGVja2luZygpKVxyXG4gICAgICAgICAgdGhpcy5zZW5kT2JqZWN0LmVtaXQoeyBkYXRhOiBudWxsLCBvcHRpb25WYWx1ZTogdGhpcy5jb250cm9sLmNvbmZpZy5vcHRpb25WYWx1ZSB9IClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlcnI9PiB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZE5vdGlmaWNhdGlvbih7c2V2ZXJpdHk6ICdlcnJvcicsIGRldGFpbDpgRXJyb3IgYWwgY29uc3VtaXIgZWwgc2VydmljaW8uYH0sdGhpcy5wcmltZUNoZWNraW5nKCkpXHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcmltZUNoZWNraW5nKCl7XHJcbiAgICByZXR1cm4gbmV3IFJlcXVlc3RDaGVja2luZyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmYWxzZSwgdW5kZWZpbmVkKVxyXG4gIH1cclxuXHJcbiAgaW5zdGFuY2VEYXRlKCl7XHJcbiAgICBjb25zdCBmb3JtYXQgPSAodGhpcy5jb250cm9sIGFzIGFueSkuZm9ybWF0TW9tZW50XHJcblxyXG4gICAgaWYgKHRoaXMudmFsdWUpe1xyXG4gICAgICBpZiAodHlwZW9mKHRoaXMudmFsdWUpID09IFwic3RyaW5nXCIgJiYgKHRoaXMudmFsdWUgYXMgc3RyaW5nKS5pbmNsdWRlcyhcIlRcIikpIHRoaXMudmFsdWUgPSBuZXcgRGF0ZSh0aGlzLnZhbHVlKVxyXG4gICAgICBlbHNlIGlmICh0eXBlb2YodGhpcy52YWx1ZSkgPT0gXCJzdHJpbmdcIikgdGhpcy52YWx1ZSA9IG1vbWVudCh0aGlzLnZhbHVlLCBmb3JtYXQpLnRvRGF0ZSgpO1xyXG4gICAgICB0aGlzLnRlbXBWYWx1ZSA9IG1vbWVudCh0aGlzLnZhbHVlKS5mb3JtYXQoXCJERC9NTS9ZWVlZXCIpXHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIHRoaXMudGVtcFZhbHVlID0gbnVsbFxyXG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIENhc3QgdGVtcFZhbHVlIHRvIGRhdGVcclxuICAgKi9cclxuICBvbkNoYW5nZVNEYXRlKCRldmVudDogYW55KXtcclxuICAgIGNvbnNvbGUubG9nKCRldmVudClcclxuICAgIGNvbnNvbGUubG9nKHRoaXMudGVtcFZhbHVlKVxyXG4gICAgY29uc29sZS5sb2codGhpcy52YWx1ZSlcclxuICAgIGNvbnN0IGF1eCA9IG1vbWVudCh0aGlzLnRlbXBWYWx1ZSwgXCJERC9NTS9ZWVlZXCIpXHJcbiAgICBpZiAodGhpcy50ZW1wVmFsdWUgPT0gdGhpcy5tYXNrRGF0ZS5yZXBsYWNlQWxsKFwiOVwiLCBcIl9cIikpe1xyXG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxyXG4gICAgICB0aGlzLnNlbmRWYWx1ZSgpXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChhdXguaXNWYWxpZCgpKXtcclxuICAgICAgdGhpcy52YWx1ZSA9IGF1eC50b0RhdGUoKTtcclxuICAgICAgdGhpcy5zZW5kVmFsdWUoKVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMudGVtcFZhbHVlID0gbnVsbDtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZE5vdGlmaWNhdGlvbih7IHNldmVyaXR5OiAnd2FybicsIGRldGFpbDogJ0xhIGZlY2hhIG5vIGVzIHbDoWxpZGEnIH0sIHRoaXMucHJpbWVDaGVja2luZygpKVxyXG4gICAgfVxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgfVxyXG5cclxuXHJcbiAgb25DaGFuZ2VEYXRlKCl7XHJcbiAgICB0aGlzLnRlbXBWYWx1ZSA9IG1vbWVudCh0aGlzLnZhbHVlKS5mb3JtYXQoXCJERC9NTS9ZWVlZXCIpXHJcbiAgICB0aGlzLnNlbmRWYWx1ZSgpXHJcbiAgfVxyXG5cclxuICAgIG9uVG91Y2hEZXNjcmlwdGlvbigpIHtcclxuICAgICAgdHJ5e1xyXG4gICAgICAgIHRoaXMudG9vbHRpcHMuZ2V0KDApPy5hY3RpdmF0ZSgpXHJcbiAgICAgIH1jYXRjaChleCl7fVxyXG5cclxuICB9XHJcblxyXG4gIG9uVW5Ub3VjaERlc2NyaXB0aW9uKCkge1xyXG4gICAgICB0cnl7XHJcbiAgICAgICAgdGhpcy50b29sdGlwcy5nZXQoMCk/LmRlYWN0aXZhdGUoKVxyXG4gICAgICB9Y2F0Y2goZXgpe31cclxufVxyXG5cclxuICBkb0ZvY3VzT3V0KCl7XHJcbiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgIChkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5ibHVyKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tlZEFkZHJlcygpe1xyXG4gICAgdGhpcy5hZGRyZXNzQ2xpY2tlZC5lbWl0KClcclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dUZW1wVmFsdWVcIj48cCAqbmdJZj1cInRlbXBWYWx1ZVwiPnt7dGVtcFZhbHVlW2NvbnRyb2wuZmllbGRdfX08L3A+PC9uZy1jb250YWluZXI+XHJcblxyXG48ZGl2ICpuZ0lmPVwiIXNob3dUZW1wVmFsdWVcIiBbbmdTd2l0Y2hdPVwiY29udHJvbC50eXBlXCIgI2NjIGNsYXNzPVwiY29udHJvbC1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jb250YWluZXJcIj5cclxuICAgICAgICA8bGFiZWwgW2Zvcl09XCJsYWJlbFwiPnt7bGFiZWx9fTwvbGFiZWw+XHJcbiAgICAgICAgPGkgI3Rvb2x0aXAgKm5nSWY9XCJjb250cm9sLnRvb2x0aXBcIiBjbGFzcz1cInBpIHBpLXF1ZXN0aW9uLWNpcmNsZVwiXHJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiY29udHJvbC50b29sdGlwUG9zaXRpb24gfHwgJ3RvcCdcIiBbcFRvb2x0aXBdPVwiY29udHJvbC50b29sdGlwXCJcclxuICAgICAgICAgICAgKHRvdWNoc3RhcnQpPVwib25Ub3VjaERlc2NyaXB0aW9uKClcIiAodG91Y2hlbmQpPVwib25VblRvdWNoRGVzY3JpcHRpb24oKVwiPjwvaT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzdHJpbmcnXCIgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbnRyb2wuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaW5wdXQnXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCBbbmFtZV09XCJsYWJlbFwiIHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIChpbnB1dCk9XCJzZW5kVmFsdWUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbnRyb2wuZGlzYWJsZWQgfHwgZmFsc2VcIiBbYXV0b2NvbXBsZXRlXT1cImNvbnRyb2wuYXV0b2NvbXBsZXRlIHx8ICdvZmYnXCI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dGFyZWEnXCI+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgW3Jvd3NdPVwiY29udHJvbC5jb25maWc/LnJvd3MgPyBjb250cm9sLmNvbmZpZy5yb3dzIDogNFwiIFsobmdNb2RlbCldPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJzZW5kVmFsdWUoKVwiIHBJbnB1dFRleHRhcmVhIFtkaXNhYmxlZF09XCJjb250cm9sLmNvbmZpZz8uZGlzYWJsZWQgfHwgZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthdXRvUmVzaXplXT1cImNvbnRyb2wuY29uZmlnPy5hdXRvcmVzaXplIHx8IGZhbHNlXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncGFzc3dvcmQnXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCB0eXBlPVwicGFzc3dvcmRcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgKGlucHV0KT1cInNlbmRWYWx1ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29udHJvbC5kaXNhYmxlZCB8fCBmYWxzZVwiPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2VtYWlsJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHBJbnB1dFRleHQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgcGxhY2Vob2xkZXI9XCJlbWFpbEBleGFtcGxlLmNvbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbnRyb2wuZGlzYWJsZWQgfHwgZmFsc2VcIiBhdXRvY29tcGxldGU9XCJlbWFpbFwiIChpbnB1dCk9XCJvbklucHV0RW1haWwoZmFsc2UpXCJcclxuICAgICAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwib25JbnB1dEVtYWlsKHRydWUpXCIgKGtleXVwLmVudGVyKT1cImRvRm9jdXNPdXQoKVwiPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3Bob25lJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHAtaW5wdXRNYXNrIG1hc2s9XCIoOTk5KSA5OTktOTk5OVwiIFsobmdNb2RlbCldPVwidmFsdWVcIiBwbGFjZWhvbGRlcj1cIig5OTkpIDk5OS05OTk5XCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29udHJvbC5kaXNhYmxlZCB8fCBmYWxzZVwiIGF1dG9jb21wbGV0ZT1cInRlbC1uYXRpb25hbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3VubWFza109XCJjb250cm9sLnVubWFzayB8fCBmYWxzZVwiIChvbkNvbXBsZXRlKT1cInNlbmRWYWx1ZSgpXCI+PC9wLWlucHV0TWFzaz5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhZGRyZXNzJ1wiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IHR5cGU9XCJ0ZXh0XCIgW3ZhbHVlXT1cInZhbHVlIHwgZm9ybWF0QWRkcmVzczogY29udHJvbC5zZXBhcmFkb3JcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBbZGlzYWJsZWRdPVwiY2xpY2tlZFwiIChrZXlkb3duKT1cIm9uQ2xpY2tlZEFkZHJlcygpXCIgKGZvY3VzKT1cIm9uQ2xpY2tlZEFkZHJlcygpXCI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZW51bSdcIj5cclxuICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFtvcHRpb25zXT1cImNvbnRyb2wuZW51bVwiIFsobmdNb2RlbCldPVwidmFsdWVcIiAob25DaGFuZ2UpPVwic2VuZFZhbHVlKClcIiBhcHBlbmRUbz1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWNjaW9uZSB1bmEgb3BjacOzblwiIFtkaXNhYmxlZF09XCJjb250cm9sLmRpc2FibGVkIHx8IGZhbHNlXCI+PC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Ryb3Bkb3duJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW2xhenldPVwiaXNMb2FkaW5nXCIgW29wdGlvbnNdPVwiZGF0YUZyb21TZXJ2aWNlXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIChvbkNoYW5nZSk9XCJzZW5kVmFsdWUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXT1cImNvbnRyb2wuY29uZmlnLm9wdGlvbkxhYmVsXCIgW3Nob3dDbGVhcl09XCJjb250cm9sLmNvbmZpZy5zaG93Q2xlYXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV09XCJjb250cm9sLmZpZWxkIHx8IGNvbnRyb2wuY29uZmlnLm9wdGlvblZhbHVlXCIgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjY2lvbmUgdW5hIG9wY2nDs25cIiBbZGlzYWJsZWRdPVwiY29udHJvbC5kaXNhYmxlZCB8fCBmYWxzZVwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bjpyZXBsYWNlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW2xhenldPVwiaXNMb2FkaW5nXCIgW29wdGlvbnNdPVwiZGF0YUZyb21TZXJ2aWNlXCJcclxuICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwic2VuZFZhbHVlRnJvbU9iamVjdCgkZXZlbnQpXCIgW29wdGlvbkxhYmVsXT1cImNvbnRyb2wuY29uZmlnLm9wdGlvbkxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIiBwbGFjZWhvbGRlcj1cIlNlbGVjY2lvbmUgdW5hIG9wY2nDs25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb250cm9sLmRpc2FibGVkIHx8IGZhbHNlXCI+PC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2F1dG9jb21wbGV0ZSdcIj5cclxuICAgICAgICAgICAgICAgIDxwLWF1dG9Db21wbGV0ZSBbc2hvd0VtcHR5TWVzc2FnZV09XCJ0cnVlXCIgW3N1Z2dlc3Rpb25zXT1cImRhdGFGcm9tU2VydmljZVwiIGFwcGVuZFRvPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNvbXBsZXRlTWV0aG9kKT1cImxvYWREYXRhRnJvbUNvbnRyb2xCdXNxdWVkYVNlcnZpY2UoJGV2ZW50KVwiIFtmaWVsZF09XCJjb250cm9sLmZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICBbbWluTGVuZ3RoXT1cIjFcIiAob25TZWxlY3QpPVwic2VuZFZhbHVlRnJvbU9iamVjdCgkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJ0ZW1wVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb250cm9sLmRpc2FibGVkIHx8IGZhbHNlXCI+PC9wLWF1dG9Db21wbGV0ZT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpbnB1dDpzZWFyY2gnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1pbnB1dGdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcElucHV0VGV4dCBbKG5nTW9kZWwpXT1cInZhbHVlXCIgKGZvY3Vzb3V0KT1cInNlbmRWYWx1ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImRvRm9jdXNPdXQoKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBpY29uPVwicGkgcGktc2VhcmNoXCIgKGNsaWNrKT1cInNlYXJjaFZhbHVlKHZhbHVlKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZmlsZSdcIj5cclxuICAgICAgICAgICAgICAgIDxzZi1maWxlLXVwbG9hZCAqbmdJZj1cIiFpc0xvYWRpbmdcIiBbYWNjZXB0XT1cImNvbnRyb2wuY29uZmlnPy5hY2NlcHQgfHwgJ2ltYWdlLyosYXBwbGljYXRpb24vcGRmJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwidXBsb2FkaW5nRmlsZXNcIiBbZmlsZXNdPVwidXBsb2FkZWRGaWxlc1wiIFtjb25maWdOYW1lXT1cImNvbnRyb2wuY29uZmlnPy5jb25maWdOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBbbGltaXRdPVwiY29udHJvbC5jb25maWc/LmxpbWl0IHx8IDFcIiAob25VcGxvYWQpPVwib25VcGxvYWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG9uRGVsZXRlRmlsZSk9XCJvbkRlbGV0ZUZpbGUoJGV2ZW50KVwiPjwvc2YtZmlsZS11cGxvYWQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb250cm9sLnN1YnR5cGVcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NhbGVuZGFyJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtY29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtaW5wdXRncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1pbnB1dE1hc2sgWyhuZ01vZGVsKV09XCJ0ZW1wVmFsdWVcIiBbbWFza109XCJtYXNrRGF0ZVwiIFtwbGFjZWhvbGRlcl09XCJjb250cm9sLnBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkJsdXIpPVwib25DaGFuZ2VTRGF0ZSgkZXZlbnQpXCIgW2Rpc2FibGVkXT1cImNvbnRyb2wuZGlzYWJsZWQgfHwgZmFsc2VcIj48L3AtaW5wdXRNYXNrPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1jYWxlbmRhciBbKG5nTW9kZWwpXT1cInZhbHVlXCIgY2xhc3M9XCJvbmx5LWljb25cIiBbbW9udGhOYXZpZ2F0b3JdPVwidHJ1ZVwiIFt5ZWFyTmF2aWdhdG9yXT1cInRydWVcIiB5ZWFyUmFuZ2U9XCIxOTAwOjIwMzVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGVGb3JtYXRdPVwiY29udHJvbC5mb3JtYXQgfHwgJ3l5LW1tLWRkJ1wiIGFwcGVuZFRvPVwiYm9keVwiIFtkaXNhYmxlZF09XCJjb250cm9sLmRpc2FibGVkIHx8IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93T25Gb2N1c109XCIhY29udHJvbC5oaWRlXCIgW3BsYWNlaG9sZGVyXT1cImNvbnRyb2wucGxhY2Vob2xkZXIgfHwgJ2FhYWEtbW0tZGQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b3VjaFVJXT1cImNvbnRyb2wudG91Y2hVSSB8fCBmYWxzZVwiIFtzaG93SWNvbl09XCJjb250cm9sLnNob3dJY29uIHx8IGZhbHNlXCIgKG9uU2VsZWN0KT1cIm9uQ2hhbmdlRGF0ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkJsdXIpPVwib25DaGFuZ2VEYXRlKClcIj48L3AtY2FsZW5kYXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidudW1lcmljJ1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbnRyb2wuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY3VycmVuY3knXCI+XHJcbiAgICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBbbmdNb2RlbF09XCJ2YWx1ZVwiICAobmdNb2RlbENoYW5nZSk9XCJ2YWx1ZSA9ICRldmVudDsgc2VuZFZhbHVlKClcIiBtb2RlPVwiZGVjaW1hbFwiIFttaW5GcmFjdGlvbkRpZ2l0c109XCJjb250cm9sLm1pbkZyYWN0aW9uRGlnaXRzIHx8IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFttaW5dPVwiY29udHJvbC5taW4gfHwgbnVsbFwiIFttYXhdPVwiY29udHJvbC5tYXggfHwgbnVsbFwiIChvbklucHV0KT1cInNlbmROdW1iZXJWYWx1ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbcHJlZml4XT1cImNvbnRyb2wuY3VycmVuY3kgfHwgJyQgJ1wiIFtkaXNhYmxlZF09XCJjb250cm9sLmRpc2FibGVkIHx8IGZhbHNlXCI+PC9wLWlucHV0TnVtYmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RlY2ltYWwnXCI+XHJcbiAgICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBbbmdNb2RlbF09XCJ2YWx1ZVwiIG1vZGU9XCJkZWNpbWFsXCIgKG5nTW9kZWxDaGFuZ2UpPVwidmFsdWUgPSAkZXZlbnQ7IHNlbmRWYWx1ZSgpXCIgW21pbl09XCJjb250cm9sLm1pbiB8fCBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBbbWF4XT1cImNvbnRyb2wubWF4IHx8IG51bGxcIiBbbWluRnJhY3Rpb25EaWdpdHNdPVwiY29udHJvbC5taW5GcmFjdGlvbkRpZ2l0cyB8fCAwXCJcclxuICAgICAgICAgICAgICAgICAgICBbbG9jYWxlXT1cImNvbnRyb2wubG9jYWxlIHx8IHVuZGVmaW5lZFwiIFt1c2VHcm91cGluZ109XCJjb250cm9sLnVzZUdyb3VwaW5nIHx8IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29udHJvbC5kaXNhYmxlZCB8fCBmYWxzZVwiPjwvcC1pbnB1dE51bWJlcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidwZXJjZW50YWdlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHAtaW5wdXROdW1iZXIgW25nTW9kZWxdPVwidmFsdWVcIiBzdWZmaXg9XCIgJVwiIChuZ01vZGVsQ2hhbmdlKT1cInZhbHVlID0gJGV2ZW50OyBzZW5kVmFsdWUoKVwiIChvbklucHV0KT1cInNlbmRWYWx1ZSgpXCIgW21pbl09XCJjb250cm9sLm1pbiB8fCBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBbbWF4XT1cImNvbnRyb2wubWF4IHx8IG51bGxcIiBbbWluRnJhY3Rpb25EaWdpdHNdPVwiY29udHJvbC5taW5GcmFjdGlvbkRpZ2l0cyB8fCAyXCJcclxuICAgICAgICAgICAgICAgICAgICBbbG9jYWxlXT1cImNvbnRyb2wubG9jYWxlIHx8IHVuZGVmaW5lZFwiIFtkaXNhYmxlZF09XCJjb250cm9sLmRpc2FibGVkIHx8IGZhbHNlXCI+PC9wLWlucHV0TnVtYmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RlY2ltYWw6c2VhcmNoJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtaW5wdXRncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgcElucHV0VGV4dCBbKG5nTW9kZWwpXT1cInZhbHVlXCIgKGZvY3Vzb3V0KT1cInNlbmRWYWx1ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImRvRm9jdXNPdXQoKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBpY29uPVwicGkgcGktc2VhcmNoXCIgKGNsaWNrKT1cInNlYXJjaFZhbHVlKHZhbHVlKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYXJyYXknXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29udHJvbC5zdWJ0eXBlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidmaWxlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHNmLWZpbGUtdXBsb2FkICpuZ0lmPVwiIWlzTG9hZGluZ1wiIFtsb2FkaW5nXT1cInVwbG9hZGluZ0ZpbGVzXCIgW2ZpbGVzXT1cInVwbG9hZGVkRmlsZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjb25maWdOYW1lXT1cImNvbnRyb2wuY29uZmlnPy5jb25maWdOYW1lXCIgW2xpbWl0XT1cImNvbnRyb2wuY29uZmlnPy5saW1pdCB8fCAxXCJcclxuICAgICAgICAgICAgICAgICAgICBbYWNjZXB0XT1cImNvbnRyb2wuY29uZmlnPy5hY2NlcHQgfHwgJ2ltYWdlLyosYXBwbGljYXRpb24vcGRmJ1wiIChvblVwbG9hZCk9XCJvblVwbG9hZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAob25EZWxldGVGaWxlKT1cIm9uRGVsZXRlRmlsZSgkZXZlbnQpXCI+PC9zZi1maWxlLXVwbG9hZD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidtdWx0aXNlbGVjdCdcIj5cclxuICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFtvcHRpb25zXT1cImRhdGFGcm9tU2VydmljZVwiIFsobmdNb2RlbCldPVwidmFsdWVcIiAob25DaGFuZ2UpPVwic2VuZFZhbHVlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25MYWJlbF09XCJjb250cm9sLmNvbmZpZz8ub3B0aW9uTGFiZWxcIiBbb3B0aW9uVmFsdWVdPVwiY29udHJvbC5jb25maWc/Lm9wdGlvblZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29udHJvbC5jb25maWc/LnBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzcGxheV09XCJjb250cm9sLmNvbmZpZz8uZGlzcGxheSB8fCAnY2hpcCdcIj48L3AtbXVsdGlTZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbidcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb250cm9sLnN1YnR5cGVcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3N3aXRjaCdcIj5cclxuICAgICAgICAgICAgICAgIDxwLWlucHV0U3dpdGNoICBbKG5nTW9kZWwpXT1cInRlbXBWYWx1ZVwiIChvbkNoYW5nZSk9XCJvbkNoYW5nZVN3aXRjaCgpXCIgW2lkXT1cImxhYmVsXCJcclxuICAgICAgICAgICAgICAgIFt0cnVlVmFsdWVdPVwiY29udHJvbD8udHJ1ZVZhbHVlICE9PSB1bmRlZmluZWQgPyBjb250cm9sPy50cnVlVmFsdWU6IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgW2ZhbHNlVmFsdWVdPVwiY29udHJvbD8uZmFsc2VWYWx1ZSAhPT0gdW5kZWZpbmVkID8gY29udHJvbD8uZmFsc2VWYWx1ZTogbnVsbFwiPjwvcC1pbnB1dFN3aXRjaD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcbiJdfQ==
|