form-aurora-stefanini 0.1.0 → 0.1.3

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.
Files changed (46) hide show
  1. package/karma.conf.js +32 -0
  2. package/ng-package.json +7 -0
  3. package/package.json +17 -28
  4. package/src/lib/Components/from-aurora/form-aurora.component.css +117 -0
  5. package/src/lib/Components/from-aurora/form-aurora.component.html +343 -0
  6. package/src/lib/Components/from-aurora/form-aurora.component.spec.ts +25 -0
  7. package/src/lib/Components/from-aurora/form-aurora.component.ts +725 -0
  8. package/src/lib/Models/company-parameters.ts +16 -0
  9. package/src/lib/Models/company.ts +25 -0
  10. package/src/lib/Models/fill.ts +6 -0
  11. package/src/lib/Models/state.ts +5 -0
  12. package/src/lib/Models/step.ts +15 -0
  13. package/src/lib/Models/stepMethod.ts +9 -0
  14. package/src/lib/form-aurora.module.ts +18 -0
  15. package/src/lib/services/TemplateService.ts +84 -0
  16. package/src/lib/services/data.service.ts +83 -0
  17. package/src/lib/utils/regex.ts +51 -0
  18. package/src/public-api.ts +9 -0
  19. package/src/test.ts +21 -0
  20. package/tsconfig.lib.json +26 -0
  21. package/tsconfig.spec.json +17 -0
  22. package/tslint.json +17 -0
  23. package/bundles/form-aurora-stefanini.umd.js +0 -975
  24. package/bundles/form-aurora-stefanini.umd.js.map +0 -1
  25. package/bundles/form-aurora-stefanini.umd.min.js +0 -16
  26. package/bundles/form-aurora-stefanini.umd.min.js.map +0 -1
  27. package/esm2015/form-aurora-stefanini.js +0 -5
  28. package/esm2015/lib/fill.js +0 -3
  29. package/esm2015/lib/form-aurora.component.js +0 -681
  30. package/esm2015/lib/form-aurora.module.js +0 -22
  31. package/esm2015/public-api.js +0 -6
  32. package/esm5/form-aurora-stefanini.js +0 -5
  33. package/esm5/lib/fill.js +0 -7
  34. package/esm5/lib/form-aurora.component.js +0 -733
  35. package/esm5/lib/form-aurora.module.js +0 -25
  36. package/esm5/public-api.js +0 -6
  37. package/fesm2015/form-aurora-stefanini.js +0 -703
  38. package/fesm2015/form-aurora-stefanini.js.map +0 -1
  39. package/fesm5/form-aurora-stefanini.js +0 -758
  40. package/fesm5/form-aurora-stefanini.js.map +0 -1
  41. package/form-aurora-stefanini.d.ts +0 -4
  42. package/form-aurora-stefanini.metadata.json +0 -1
  43. package/lib/fill.d.ts +0 -6
  44. package/lib/form-aurora.component.d.ts +0 -106
  45. package/lib/form-aurora.module.d.ts +0 -2
  46. package/public-api.d.ts +0 -2
@@ -1,733 +0,0 @@
1
- import * as tslib_1 from "tslib";
2
- import { Component, Injectable, Input, ViewChild, Output, EventEmitter } from '@angular/core';
3
- import { FormGroup, FormControl } from '@angular/forms';
4
- import { HttpClient } from '@angular/common/http';
5
- // import moment from 'moment';
6
- import { NgbDateAdapter, NgbDateParserFormatter, NgbDatepickerI18n } from '@ng-bootstrap/ng-bootstrap';
7
- import * as moment_ from 'moment';
8
- var moment = moment_;
9
- // import { regexType } from "@app/_shared/_util/regex";
10
- // import { ExternalService } from '@app/_shared/_services/external.service';
11
- // import { AuroraService } from '@app/_shared/_services/aurora.service';
12
- /**
13
- * This Service handles how the date is represented in scripts i.e. ngModel.
14
- */
15
- var CustomAdapter = /** @class */ (function (_super) {
16
- tslib_1.__extends(CustomAdapter, _super);
17
- function CustomAdapter() {
18
- var _this = _super !== null && _super.apply(this, arguments) || this;
19
- _this.DELIMITER = '/';
20
- return _this;
21
- }
22
- CustomAdapter.prototype.fromModel = function (value) {
23
- if (value) {
24
- var date = value.split(this.DELIMITER);
25
- return {
26
- day: parseInt(date[0], 10),
27
- month: parseInt(date[1], 10),
28
- year: parseInt(date[2], 10)
29
- };
30
- }
31
- return null;
32
- };
33
- CustomAdapter.prototype.toModel = function (date) {
34
- //return date ? date.day + this.DELIMITER + date.month + this.DELIMITER + date.year : null;
35
- return date ? (date.day < 10 ? 0 + date.day : date.day) + this.DELIMITER + (date.month < 10 ? 0 + date.month : date.month) + this.DELIMITER + date.year : '';
36
- };
37
- CustomAdapter = tslib_1.__decorate([
38
- Injectable()
39
- ], CustomAdapter);
40
- return CustomAdapter;
41
- }(NgbDateAdapter));
42
- export { CustomAdapter };
43
- /**
44
- * This Service handles how the date is rendered and parsed from keyboard i.e. in the bound input field.
45
- */
46
- var CustomDateParserFormatter = /** @class */ (function (_super) {
47
- tslib_1.__extends(CustomDateParserFormatter, _super);
48
- function CustomDateParserFormatter() {
49
- var _this = _super !== null && _super.apply(this, arguments) || this;
50
- _this.DELIMITER = '/';
51
- return _this;
52
- }
53
- CustomDateParserFormatter.prototype.parse = function (value) {
54
- if (value) {
55
- var date = value.split(this.DELIMITER);
56
- return {
57
- day: parseInt(date[0], 10),
58
- month: parseInt(date[1], 10),
59
- year: parseInt(date[2], 10)
60
- };
61
- }
62
- return null;
63
- };
64
- CustomDateParserFormatter.prototype.format = function (date) {
65
- return date ? (date.day < 10 ? '0' + date.day : date.day) + this.DELIMITER + (date.month < 10 ? '0' + date.month : date.month) + this.DELIMITER + date.year : '';
66
- };
67
- CustomDateParserFormatter = tslib_1.__decorate([
68
- Injectable()
69
- ], CustomDateParserFormatter);
70
- return CustomDateParserFormatter;
71
- }(NgbDateParserFormatter));
72
- export { CustomDateParserFormatter };
73
- var I18N_VALUES = {
74
- 'es': {
75
- weekdays: ['Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa', 'Do'],
76
- months: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],
77
- weekLabel: 'sem'
78
- }
79
- // other languages you would support
80
- };
81
- var I18n = /** @class */ (function () {
82
- function I18n() {
83
- this.language = 'es';
84
- }
85
- I18n = tslib_1.__decorate([
86
- Injectable()
87
- ], I18n);
88
- return I18n;
89
- }());
90
- export { I18n };
91
- // Define custom service providing the months and weekdays translations
92
- var CustomDatepickerI18n = /** @class */ (function (_super) {
93
- tslib_1.__extends(CustomDatepickerI18n, _super);
94
- function CustomDatepickerI18n(_i18n) {
95
- var _this = _super.call(this) || this;
96
- _this._i18n = _i18n;
97
- return _this;
98
- }
99
- CustomDatepickerI18n.prototype.getWeekdayLabel = function (weekday) {
100
- return I18N_VALUES[this._i18n.language].weekdays[weekday - 1];
101
- };
102
- CustomDatepickerI18n.prototype.getWeekLabel = function () {
103
- return I18N_VALUES[this._i18n.language].weekLabel;
104
- };
105
- CustomDatepickerI18n.prototype.getMonthShortName = function (month) {
106
- return I18N_VALUES[this._i18n.language].months[month - 1];
107
- };
108
- CustomDatepickerI18n.prototype.getMonthFullName = function (month) {
109
- return this.getMonthShortName(month);
110
- };
111
- CustomDatepickerI18n.prototype.getDayAriaLabel = function (date) {
112
- return date.day + "-" + date.month + "-" + date.year;
113
- };
114
- CustomDatepickerI18n.prototype.getWeekdayShortName = function (weekday) {
115
- return I18N_VALUES[this._i18n.language].weekdays[weekday - 1];
116
- };
117
- ;
118
- CustomDatepickerI18n.ctorParameters = function () { return [
119
- { type: I18n }
120
- ]; };
121
- CustomDatepickerI18n = tslib_1.__decorate([
122
- Injectable()
123
- ], CustomDatepickerI18n);
124
- return CustomDatepickerI18n;
125
- }(NgbDatepickerI18n));
126
- export { CustomDatepickerI18n };
127
- var FormAuroraComponent = /** @class */ (function () {
128
- function FormAuroraComponent(http) {
129
- this.http = http;
130
- this.response = new EventEmitter();
131
- this.summit = new EventEmitter();
132
- this.setAcceptanceDocument = new EventEmitter();
133
- this.tipodocNumDoc = false;
134
- this.onSubmitEvent = false;
135
- this.countSubmit = 0;
136
- this.watchValid = false;
137
- this.watchRequired = false;
138
- this.captchaValid = false;
139
- this.displayMonths = 2;
140
- this.navigation = 'select';
141
- this.showWeekNumbers = false;
142
- this.outsideDays = 'visible';
143
- this.respServiceSegmentation = null;
144
- //emailPattern = "^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$";
145
- this.today = moment(new Date());
146
- this.maxYear = this.today.year();
147
- this.minYear = this.today.year() - 82;
148
- this.minDate = this.minYear.toString() + '-' + this.today.month().toString().padStart(2, '0') + '-' + this.today.date().toString().padStart(2, '0'); // {year: this.minYear, month: this.today.month(), day: this.today.date()};
149
- this.maxDate = this.maxYear.toString() + '-' + (this.today.month() + 1).toString().padStart(2, '0') + '-' + this.today.date().toString().padStart(2, '0'); // {year: this.maxYear, month: this.today.month() + 1, day: this.today.date()};
150
- //Revisar variables
151
- this.recharge = false;
152
- this.indicativo = '57';
153
- this.defaultDocType = 'Cédula de ciudadanía';
154
- this.range = new FormGroup({
155
- start: new FormControl(),
156
- end: new FormControl(),
157
- });
158
- }
159
- FormAuroraComponent.prototype.ngOnInit = function () {
160
- var _this = this;
161
- console.log('nueva version 0.1.0');
162
- this.minDate = new Date(this.minDate).toISOString().split('T')[0];
163
- setTimeout(function () {
164
- _this.startComponent();
165
- }, 2000);
166
- };
167
- FormAuroraComponent.prototype.startComponent = function () {
168
- var e_1, _a;
169
- var _this = this;
170
- //ordena los campos
171
- if (this.dataForm != null && this.dataForm.formQuestions != undefined) {
172
- //Same row fields
173
- this.tipodocNumDoc = (this.dataForm.formQuestions.some(function (question) { return question.question.value === 'tipoDoc'; }) && this.dataForm.formQuestions.some(function (question) { return question.question.value === 'numeroDoc'; })) ? true : false;
174
- this.dataForm.formQuestions = this.dataForm.formQuestions.sort(function (a, b) {
175
- return a.order - b.order;
176
- });
177
- var existcaptcha = this.dataForm.formQuestions.filter(function (item) { return item.question.questionType.id == 6; });
178
- if (existcaptcha.length == 0) {
179
- this.captchaValid = true;
180
- }
181
- var _loop_1 = function (item) {
182
- if (item.question.maxlength == null || item.question.maxlength == undefined || item.question.maxlength == 0) {
183
- item.question.maxlength = 524288; //defaultvalue
184
- }
185
- if (item.question.minLength == null || item.question.minLength == undefined) {
186
- item.question.minLength = 0;
187
- }
188
- this_1.dataReloadForm.forEach(function (element) {
189
- _this.filldata = element;
190
- if ((item.question.questionType.id === 2 || item.question.questionType.id === 1 ||
191
- item.question.questionType.id === 3) && (_this.filldata.data !== null &&
192
- _this.filldata.data !== undefined) && item.question.id === _this.filldata.id) {
193
- item.question.registred = _this.filldata.data;
194
- }
195
- });
196
- if (item.question.registred == null || item.question.minLength == undefined) {
197
- item.question.registred = '';
198
- }
199
- };
200
- var this_1 = this;
201
- try {
202
- for (var _b = tslib_1.__values(this.dataForm.formQuestions), _c = _b.next(); !_c.done; _c = _b.next()) {
203
- var item = _c.value;
204
- _loop_1(item);
205
- }
206
- }
207
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
208
- finally {
209
- try {
210
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
211
- }
212
- finally { if (e_1) throw e_1.error; }
213
- }
214
- }
215
- };
216
- FormAuroraComponent.prototype.resolvedCaptcha = function (captchaResponse) {
217
- this.captchaValid = true;
218
- if (!this.formDynamic.form.value.captcha) {
219
- this.formDynamic.controls.captcha.setValue(captchaResponse);
220
- this.formDynamic.form.value.captcha = captchaResponse;
221
- document.getElementById('btnIng').style.opacity = !this.formDynamic.valid ? '0.65' : '1';
222
- }
223
- };
224
- //Forms
225
- //Metodo para evitar el render de los items del for
226
- FormAuroraComponent.prototype.trackByIndex = function (index, obj) {
227
- return index;
228
- };
229
- FormAuroraComponent.prototype.onChangeValidPatter = function (event, question) {
230
- var _this = this;
231
- if (question.pattern != undefined) {
232
- var valid = true;
233
- var keyvalid = [8, 32, 37, 38, 39, 40, 46, 9];
234
- //diferente de Backpsace
235
- //se deja catch por error no controlable en otro tiempo de ejecucion
236
- try {
237
- if (!keyvalid.includes(event.keyCode)) {
238
- var regex = new RegExp(question.pattern);
239
- valid = regex.test(event.key);
240
- }
241
- }
242
- catch (error) {
243
- }
244
- return valid;
245
- }
246
- document.getElementById('char' + question.value).setAttribute('hidden', 'true');
247
- //if temporal mientras se migran todos los tipos de campos al foreach
248
- if (question.questionType.id != 11 && question.questionType.id != 7) {
249
- if (this.validMinLength(this.formDynamic, question)) {
250
- document.getElementById(question.value).style.borderColor = '#FF0000';
251
- document.getElementById('ml' + question.value).removeAttribute('hidden');
252
- }
253
- else {
254
- document.getElementById(question.value).style.borderColor = '#E4E4E4';
255
- document.getElementById('ml' + question.value).setAttribute('hidden', 'true');
256
- }
257
- if (this.validMaxLength(this.formDynamic, question)) {
258
- document.getElementById(question.value).style.borderColor = '#FF0000';
259
- document.getElementById('mxl' + question.value).removeAttribute('hidden');
260
- }
261
- else {
262
- document.getElementById(question.value).style.borderColor = '#E4E4E4';
263
- document.getElementById('mxl' + question.value).setAttribute('hidden', 'true');
264
- }
265
- }
266
- this.dataForm.formQuestions.forEach(function (formQuestion) {
267
- switch (formQuestion.question.questionType.id) {
268
- //se valida campo de tipo calendario
269
- case 7:
270
- if (question.questionType.id == 7)
271
- _this.calendarRulesValidate(formQuestion);
272
- break;
273
- //se valida campo de tipo email
274
- case 11:
275
- if (question.questionType.id == 11)
276
- _this.emailRulesValidate(formQuestion);
277
- break;
278
- }
279
- });
280
- document.getElementById('btnIng').style.opacity = !this.formDynamic.valid ? '0.65' : '1';
281
- };
282
- FormAuroraComponent.prototype.validOnlyText = function (event) {
283
- var regex = /^[a-zA-Z\u00C0-\u017F]+$/g;
284
- if (event.charCode == 32) {
285
- return true;
286
- }
287
- var valid = regex.test(event.key);
288
- return valid;
289
- };
290
- FormAuroraComponent.prototype.validDate = function (event) {
291
- /*let pattern = /(?:0[1-9]|[12][0-9]|3[01])\/(?:0[1-9]|1[0-2])\/(?:19|20)[0-9]{2}/;
292
- const regex = new RegExp(pattern);
293
- valid = regex.test(event.key);
294
- */
295
- var matches = String(event.key).match(this.regexType.date.exp);
296
- var valid = true;
297
- if (matches === null)
298
- valid = false;
299
- // alert(valid);
300
- return valid;
301
- };
302
- FormAuroraComponent.prototype.onChangeValidDate = function (event) {
303
- //let pattern = /(?:0[1-9]|1[0-2])\/(?:0[1-9]|[12][0-9]|3[01])\/(?:19|20)[0-9]{2}/;
304
- var dateN = /[0-9]|\//;
305
- var valid = true;
306
- var regex = new RegExp(dateN);
307
- valid = regex.test(event.key);
308
- return valid;
309
- };
310
- FormAuroraComponent.prototype.rediretoutside = function (event, question) {
311
- //se deja catch por error no controlable en otro tiempo de ejecucion
312
- try {
313
- event.preventDefault();
314
- window.open(question.value, '_blank');
315
- }
316
- catch (error) {
317
- }
318
- };
319
- /**
320
- * Dispatch submit event for validations exists
321
- * @param change
322
- */
323
- FormAuroraComponent.prototype.ngOnChanges = function (change) {
324
- this.countSubmit++;
325
- };
326
- //onSubmit(form: NgForm) {
327
- FormAuroraComponent.prototype.onSubmit = function () {
328
- var _this = this;
329
- var form = this.formDynamic;
330
- this.watchValid = true;
331
- this.watchRequired = true;
332
- if (form.valid) {
333
- if (!this.validRulesFields(form.controls['numeroDoc'].value.toString(), form.controls['celular'].value.toString(), form.controls['email'].value))
334
- return false;
335
- }
336
- if (this.validMinlenghtAllQuestions(form.value) && this.validMaxLengthAllQuestions(form.value) && form.valid) {
337
- if (this.dataForm.urlSend != '' && this.captchaValid) {
338
- this.http.post(this.dataForm.urlSend, form.value).subscribe(function (resp) { return _this.response.emit(resp); });
339
- }
340
- else if (form.valid && this.captchaValid) {
341
- this.summit.emit(form.value);
342
- }
343
- }
344
- };
345
- FormAuroraComponent.prototype.validRulesFields = function (numeroDoc, numeroCel, email) {
346
- var _this = this;
347
- // Validaciones para celular en caso de indicativo en Colombia
348
- var cel = document.getElementById('charcelular');
349
- var doc = document.getElementById('charnumeroDoc');
350
- var valOk = true;
351
- if (this.indicativo == '+57' || this.indicativo == '57') {
352
- var stringOrdenado = this.orderString(numeroDoc);
353
- if (this.nameCompany.toUpperCase() !== 'CLARO') { //claro acepta nro consecutivos
354
- if (numeroDoc == stringOrdenado) {
355
- doc.style.borderColor = '#FF0000';
356
- doc.removeAttribute('hidden');
357
- doc.textContent = 'El numero documento No debe contener caracteres consecutivos';
358
- valOk = false;
359
- //this.msgErrorCampo = "El numero documento No debe contener caracteres consecutivos";
360
- //return false;
361
- }
362
- }
363
- if (numeroCel.substring(0, 1) != '3') {
364
- cel.style.borderColor = '#FF0000';
365
- cel.removeAttribute('hidden');
366
- cel.textContent = 'El primer carácter del celular debe ser 3';
367
- valOk = false;
368
- //this.msgErrorCampo = "El primer carácter del celular debe ser 3";
369
- //return false;
370
- }
371
- /*
372
- if (parseInt(numeroCel.substring(0, 3)) > 350) {
373
- cel.style.borderColor = "#FF0000";
374
- cel.removeAttribute("hidden");
375
- cel.textContent = "El prefijo del celular no debe ser mayor a 350";
376
- valOk = false;
377
- //this.msgErrorCampo = "El prefijo del celular no debe ser mayor a 350";
378
- //return false;
379
- }
380
- */
381
- //En caso de que el número se repita, ejemplo 33333333
382
- var listnumber = numeroDoc.substring(0, 1);
383
- for (var index = 1; index < numeroDoc.length; index++) {
384
- listnumber = listnumber + numeroDoc.substring(0, 1);
385
- }
386
- if (numeroDoc == listnumber) {
387
- doc.style.borderColor = '#FF0000';
388
- doc.removeAttribute('hidden');
389
- doc.textContent = 'Caracteres numéricos no se pueden repetirse de manera continua ';
390
- valOk = false;
391
- //this.msgErrorCampo = "Caracteres numéricos no se pueden repetirse de manera continua ";
392
- //return false;
393
- }
394
- // En caso de que el número se repita, ejemplo 33333333
395
- var arrayPhoneRepeat = Array.from(String(numeroCel), Number);
396
- var arrayPhoneOutRepeat = tslib_1.__spread(new Set(arrayPhoneRepeat));
397
- if (arrayPhoneOutRepeat.length == 1) {
398
- cel.style.borderColor = '#FF0000';
399
- cel.removeAttribute('hidden');
400
- cel.textContent = 'El número que ingresa no es valido';
401
- valOk = false;
402
- //this.msgErrorCampo = "El número que ingresa no es valido";
403
- //return false;
404
- }
405
- }
406
- else if (this.indicativo == '+593' || this.indicativo == '593') {
407
- if (numeroCel.substring(0, 1) != '9') {
408
- cel.style.borderColor = '#FF0000';
409
- cel.removeAttribute('hidden');
410
- cel.textContent = 'El primer carácter del celular debe ser 9';
411
- valOk = false;
412
- //this.msgErrorCampo = "El primer carácter del celular debe ser 9";
413
- //return false;
414
- }
415
- }
416
- //se validan los campos por tipo de campo y no por value
417
- this.dataForm.formQuestions.forEach(function (formQuestion) {
418
- switch (formQuestion.question.questionType.id) {
419
- //se valida campo de tipo email
420
- case 11:
421
- valOk = _this.emailRulesValidate(formQuestion);
422
- break;
423
- }
424
- });
425
- return valOk;
426
- };
427
- FormAuroraComponent.prototype.orderString = function (value) {
428
- var arrayNumber = [];
429
- for (var index = 0; index < value.length; index++) {
430
- arrayNumber.push(parseInt(value.substring(index, index + 1)));
431
- }
432
- //ordena el array
433
- arrayNumber.sort(function (a, b) {
434
- return a - b;
435
- });
436
- var numberOrder = '';
437
- numberOrder = arrayNumber[0];
438
- for (var index = 1; index < arrayNumber.length; index++) {
439
- numberOrder = numberOrder + (arrayNumber[0] + index).toString();
440
- }
441
- return numberOrder;
442
- };
443
- FormAuroraComponent.prototype.validMinlenghtAllQuestions = function (form) {
444
- var e_2, _a;
445
- try {
446
- for (var _b = tslib_1.__values(this.dataForm.formQuestions), _c = _b.next(); !_c.done; _c = _b.next()) {
447
- var item = _c.value;
448
- if (item.question.questionType.id == 1 || item.question.questionType.id == 2) {
449
- var minLength = parseInt(item.question.minLength);
450
- var formValueLength = parseInt(form[item.question.value].toString().length);
451
- if (minLength > 0 && formValueLength != minLength && formValueLength < minLength)
452
- return false;
453
- }
454
- }
455
- }
456
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
457
- finally {
458
- try {
459
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
460
- }
461
- finally { if (e_2) throw e_2.error; }
462
- }
463
- return true;
464
- };
465
- FormAuroraComponent.prototype.validMaxLengthAllQuestions = function (form) {
466
- var e_3, _a;
467
- try {
468
- for (var _b = tslib_1.__values(this.dataForm.formQuestions), _c = _b.next(); !_c.done; _c = _b.next()) {
469
- var item = _c.value;
470
- if (item.question.questionType.id == 1 || item.question.questionType.id == 2) {
471
- var maxLength = parseInt(item.question.maxLength);
472
- var formValueLength = parseInt(form[item.question.value].toString().length);
473
- if (maxLength > 0 && formValueLength != maxLength && formValueLength > maxLength)
474
- return false;
475
- }
476
- }
477
- }
478
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
479
- finally {
480
- try {
481
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
482
- }
483
- finally { if (e_3) throw e_3.error; }
484
- }
485
- return true;
486
- };
487
- FormAuroraComponent.prototype.validRequired = function (form, question) {
488
- //se deja catch por error no controlable en otro tiempo de ejecucion
489
- try {
490
- if (question != undefined && question.value != undefined) {
491
- if (form.controls[question.value] != undefined &&
492
- form.controls[question.value].errors != null &&
493
- form.controls[question.value].errors.required) {
494
- return true;
495
- }
496
- }
497
- }
498
- catch (error) {
499
- }
500
- return false;
501
- };
502
- FormAuroraComponent.prototype.validMinLength = function (form, question) {
503
- //se deja catch por error no controlable en otro tiempo de ejecucion
504
- try {
505
- if (question != undefined && question.value != undefined) {
506
- if (question.minLength > form.controls[question.value].value.toLocaleString().length && question.minLength > 0) {
507
- return true;
508
- }
509
- }
510
- }
511
- catch (error) {
512
- }
513
- return false;
514
- };
515
- FormAuroraComponent.prototype.validMaxLength = function (form, question) {
516
- //se deja catch por error no controlable en otro tiempo de ejecucion
517
- try {
518
- if (question != undefined && question.value != undefined) {
519
- if (question.maxLength > 0) {
520
- if (question.maxLength + 1 <= form.controls[question.value].value.toString().replace(/\./g, '').length) {
521
- if (!this.formDynamic.controls[question.value].hasError('errorMaxLength')) {
522
- this.formDynamic.controls[question.value].setErrors({ 'errorMaxLength': true });
523
- }
524
- return true;
525
- }
526
- }
527
- }
528
- }
529
- catch (error) {
530
- }
531
- return false;
532
- };
533
- FormAuroraComponent.prototype.tycSelection = function (event) {
534
- event.preventDefault();
535
- var tyc = document.getElementById('txtPoliticas');
536
- tyc.style.color = '#A3AD32';
537
- // this.externalService.getTermsAndConditions().subscribe(resp => {
538
- var b64 = null;
539
- if (this.getTermsAndConditions && this.getTermsAndConditions.listaDocumentos) {
540
- b64 = this.getTermsAndConditions.listaDocumentos[0].contenidoDocumento;
541
- this.respServiceSegmentation = this.getTermsAndConditions.listaDocumentos[0];
542
- var pdfWindow = window.open('');
543
- pdfWindow.document.write('<iframe width=\'100%\' height=\'100%\' src=\'data:application/pdf;base64, ' +
544
- encodeURI(b64) + '\'></iframe>');
545
- }
546
- // })
547
- };
548
- FormAuroraComponent.prototype.openLabelUrl = function (event, question) {
549
- event.preventDefault();
550
- var tyc = document.getElementById('check' + question.id);
551
- tyc.style.color = '#A3AD32';
552
- window.open(question.urllabel, '_blank');
553
- };
554
- FormAuroraComponent.prototype.checkTermsAndConditions = function (value) {
555
- return tslib_1.__awaiter(this, void 0, void 0, function () {
556
- var ipAddress, objToSend, aceptaciones;
557
- return tslib_1.__generator(this, function (_a) {
558
- switch (_a.label) {
559
- case 0:
560
- if (!value) return [3 /*break*/, 2];
561
- return [4 /*yield*/, this.getIpAddress];
562
- case 1:
563
- ipAddress = _a.sent();
564
- objToSend = {
565
- 'idDocumento': this.respServiceSegmentation.idDocumento || '',
566
- // "idDocumento": this.respServiceSegmentation?.idDocumento || "",
567
- 'nombrePortafolio': '0',
568
- 'aplicacion': 'ZP_OF',
569
- 'ip': ipAddress.ip,
570
- 'tipoIdAfil': 'CC',
571
- 'numeroIdAfil': this.formDynamic.controls['numeroDoc'].value.toString(),
572
- 'numeroCuentaPI': '0',
573
- 'transaccion': 'INICIO DE SESION_OF',
574
- 'conceptoAceptacion': 'HABEAS_DATA_USO_APP',
575
- 'respuesta': 'SI',
576
- 'usuarioCreacion': this.formDynamic.controls['numeroDoc'].value.toString()
577
- };
578
- aceptaciones = { aceptaciones: [objToSend] };
579
- // this.externalService.setAcceptanceDocument(aceptaciones).subscribe(() => { })
580
- this.setAcceptanceDocument.emit(aceptaciones);
581
- _a.label = 2;
582
- case 2: return [2 /*return*/];
583
- }
584
- });
585
- });
586
- };
587
- FormAuroraComponent.prototype.cancellKeypress = function () {
588
- return false;
589
- };
590
- FormAuroraComponent.prototype.emailRulesValidate = function (formQuestion) {
591
- var valOk = true;
592
- try {
593
- var hasError = false;
594
- document.getElementById(formQuestion.question.id).setAttribute('hidden', 'true');
595
- var eml = document.getElementById(formQuestion.question.id);
596
- var email = formQuestion.question.registred;
597
- if (!hasError) {
598
- if (formQuestion.question.required && (email == '' || email == undefined || email == null)) {
599
- eml.style.borderColor = '#FF0000';
600
- eml.textContent = 'El correco eléctronico es requerido';
601
- eml.removeAttribute('hidden');
602
- valOk = false;
603
- hasError = true;
604
- }
605
- }
606
- if (!hasError) {
607
- if (this.validMinLength(undefined, formQuestion.question)) {
608
- eml.style.borderColor = '#FF0000';
609
- eml.textContent = 'Debe ser mínimo de ' + formQuestion.question.minLength + ' caracteres';
610
- document.getElementById(formQuestion.question.id).removeAttribute('hidden');
611
- valOk = false;
612
- hasError = true;
613
- }
614
- }
615
- if (!hasError) {
616
- if (this.validMaxLength(undefined, formQuestion.question)) {
617
- eml.style.borderColor = '#FF0000';
618
- eml.textContent = 'Debe ser maximo de ' + formQuestion.question.maxLength + ' caracteres';
619
- document.getElementById(formQuestion.question.id).removeAttribute('hidden');
620
- valOk = false;
621
- hasError = true;
622
- }
623
- }
624
- if (!hasError) {
625
- var matches = String(email).match(this.regexType.email.exp);
626
- if (matches == null) {
627
- eml.style.borderColor = '#FF0000';
628
- eml.textContent = 'Tu email es invalido';
629
- eml.removeAttribute('hidden');
630
- valOk = false;
631
- hasError = true;
632
- }
633
- }
634
- }
635
- catch (error) {
636
- }
637
- return valOk;
638
- };
639
- FormAuroraComponent.prototype.calendarRulesValidate = function (formQuestion) {
640
- var hasError = false;
641
- try {
642
- document.getElementById(formQuestion.question.id).setAttribute('hidden', 'true');
643
- var ecalendar = document.getElementById(formQuestion.question.id);
644
- //se valida que no sea null si es requerido
645
- var date = formQuestion.question.registred;
646
- if (formQuestion.question.required && (date == '' || date == undefined || date == null)) {
647
- ecalendar.style.borderColor = '#FF0000';
648
- ecalendar.textContent = 'La fecha es requerida';
649
- ecalendar.removeAttribute('hidden');
650
- }
651
- }
652
- catch (error) {
653
- }
654
- };
655
- FormAuroraComponent.prototype.validateNotSpace = function (event) {
656
- if (event.charCode == 32) {
657
- return false;
658
- }
659
- else {
660
- return true;
661
- }
662
- };
663
- FormAuroraComponent.ctorParameters = function () { return [
664
- { type: HttpClient }
665
- ]; };
666
- tslib_1.__decorate([
667
- Input()
668
- ], FormAuroraComponent.prototype, "dataClassCss", void 0);
669
- tslib_1.__decorate([
670
- Input()
671
- ], FormAuroraComponent.prototype, "dataForm", void 0);
672
- tslib_1.__decorate([
673
- Input()
674
- ], FormAuroraComponent.prototype, "clickSubmit", void 0);
675
- tslib_1.__decorate([
676
- Input()
677
- ], FormAuroraComponent.prototype, "dataReloadForm", void 0);
678
- tslib_1.__decorate([
679
- Input()
680
- ], FormAuroraComponent.prototype, "welcomeTitle", void 0);
681
- tslib_1.__decorate([
682
- Input()
683
- ], FormAuroraComponent.prototype, "welcomeDescription", void 0);
684
- tslib_1.__decorate([
685
- Input()
686
- ], FormAuroraComponent.prototype, "urlPdf", void 0);
687
- tslib_1.__decorate([
688
- Input()
689
- ], FormAuroraComponent.prototype, "nameCompany", void 0);
690
- tslib_1.__decorate([
691
- Input()
692
- ], FormAuroraComponent.prototype, "schedule", void 0);
693
- tslib_1.__decorate([
694
- Input()
695
- ], FormAuroraComponent.prototype, "getTermsAndConditions", void 0);
696
- tslib_1.__decorate([
697
- Input()
698
- ], FormAuroraComponent.prototype, "regexType", void 0);
699
- tslib_1.__decorate([
700
- Input()
701
- ], FormAuroraComponent.prototype, "getIpAddress", void 0);
702
- tslib_1.__decorate([
703
- ViewChild('formDynamic', { static: true })
704
- ], FormAuroraComponent.prototype, "formDynamic", void 0);
705
- tslib_1.__decorate([
706
- Output()
707
- ], FormAuroraComponent.prototype, "response", void 0);
708
- tslib_1.__decorate([
709
- Output()
710
- ], FormAuroraComponent.prototype, "summit", void 0);
711
- tslib_1.__decorate([
712
- Output()
713
- ], FormAuroraComponent.prototype, "setAcceptanceDocument", void 0);
714
- tslib_1.__decorate([
715
- ViewChild('modalTurns', { static: false })
716
- ], FormAuroraComponent.prototype, "myModal", void 0);
717
- FormAuroraComponent = tslib_1.__decorate([
718
- Component({
719
- selector: 'lib-FormAurora',
720
- template: "<script src=\"https://www.google.com/recaptcha/api.js\" async defer></script>\n<div class=\"card\">\n <span class=\"text-center mt-2 d-none d-sm-block\">\n <img style=\"width: 115px; height:96px;\" [class]=\"dataClassCss.logo\" id=\"logo\">\n </span>\n <div class=\"card-body pt-0\">\n <ng-container *ngIf=\"schedule\">\n <h4 class=\"card-title text-center mb-0\" [class]=\"dataClassCss.bienvenida2\" style=\"color: #EE7E0E;\">\n Horarios de atenci\u00F3n\n </h4>\n <small class=\"text-center d-block\">{{schedule}}</small>\n </ng-container>\n <form #formDynamic=\"ngForm\">\n <div *ngFor=\"let control of dataForm?.formQuestions; let index = index; trackBy: trackByIndex\">\n <div\n *ngIf=\"(index > 0 && (dataForm.formQuestions[index - 1].question.questionType.id == 3 && dataForm.formQuestions[index].question.questionType.id == 2)) || (index < dataForm.formQuestions.length && dataForm.formQuestions[index].question.questionType.id == 3 && dataForm.formQuestions[index + 1].question.questionType.id == 2); else switchTemp\">\n <div class=\"row\"\n *ngIf=\"(index > 0 && (dataForm.formQuestions[index - 1].question.questionType.id == 3 && dataForm.formQuestions[index].question.questionType.id == 2))\">\n <div class=\"col-lg-6 col-xs-12\">\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index - 1].question.value}}\" class=\"col-sm-12\"\n style=\"display: block; text-align: left;\">\n <span class=\"h6 small bg-white text-muted\">{{dataForm.formQuestions[index -\n 1].question.label}}</span>\n </label>\n <div class=\"selectContainer\">\n <select [name]=\"dataForm.formQuestions[index - 1].question.value\"\n [required]=\"dataForm.formQuestions[index - 1].question.required\"\n [class]=\"dataClassCss.formcontrol\"\n id=\"{{dataForm.formQuestions[index - 1].question.value}}\"\n style=\"margin-top: -1rem !important;\"\n [(ngModel)]=\"defaultDocType !== '' ? defaultDocType : dataForm.formQuestions[index - 1].question.registred\">\n <option value=\"\" selected disabled hidden>Selecciona</option>\n <ng-container\n *ngFor=\"let item of dataForm.formQuestions[index - 1].question.questionAnswers\">\n <option *ngIf=\"item.answer.state.id == 1\" [value]=\"item.answer.value\">\n {{ item.answer.field }}\n </option>\n </ng-container>\n </select>\n </div>\n </div>\n <div style=\"margin-left: 15px;\"\n *ngIf=\"dataForm.formQuestions[index].question.questionType.id != 5 && dataForm.formQuestions[index].question.questionType.id != 6\">\n <span class=\"error\" [id]=\"'char'+dataForm.formQuestions[index-1].question.value\"\n hidden></span>\n </div>\n </div>\n <div class=\"col-lg-6 col-xs-12\">\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index].question.value}}\"\n class=\"col-sm-12 p-sm-0 px-sm-1\" style=\"display: block; text-align: left;\">\n <span\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\n </label>\n <input type=\"text\" digitOnly id=\"{{dataForm.formQuestions[index].question.value}}\"\n style=\"margin-top: -1rem !important;\"\n [name]=\"dataForm.formQuestions[index].question.value\" placeholder=\"Escribe\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (keyup)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n onkeypress=\"return (event.charCode == 0) ? null : event.charCode >= 48 && event.charCode <= 57\"\n onkeyup=\"(this.value=(value.replace(/[.]*/g,'')))\"\n maxlength=\"dataForm.formQuestions[index].question.maxLength\"\n [minLength]=\"dataForm.formQuestions[index].question.minLength\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n [class]=\"dataClassCss.formcontrol\"/>\n\n </div>\n <div style=\"margin-left: 15px;\"\n *ngIf=\"dataForm.formQuestions[index].question.questionType.id != 5 && dataForm.formQuestions[index].question.questionType.id != 6\">\n <span class=\"error\" [id]=\"'rq'+dataForm.formQuestions[index].question.value\"\n *ngIf=\"validRequired(formDynamic,dataForm.formQuestions[index].question) && watchValid\">\n Este campo es obligatorio</span>\n <span class=\"error\" [id]=\"'ml'+dataForm.formQuestions[index].question.value\" hidden>\n Debe ser m\u00EDnimo de\n {{ dataForm.formQuestions[index].question.minLength }} caracteres</span>\n <span class=\"error\" [id]=\"'mxl'+dataForm.formQuestions[index].question.value\" hidden>\n Debe ser maximo de\n {{ dataForm.formQuestions[index].question.maxLength }} caracteres</span>\n <span class=\"error\" [id]=\"'char'+dataForm.formQuestions[index].question.value\"\n hidden></span>\n </div>\n </div>\n </div>\n </div>\n\n <ng-template #switchTemp>\n <div [ngSwitch]=\"dataForm.formQuestions[index].question.questionType.id\">\n <div *ngSwitchCase=\"1\">\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\n style=\"display: block; text-align: left; \">\n <span\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\n </label>\n <input type=\"text\" id=\"{{dataForm.formQuestions[index].question.value}}\"\n [class]=\"dataClassCss.formcontrol\" placeholder=\"Escribe\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [maxlength]=\"dataForm.formQuestions[index].question.maxLength\"\n [name]=\"dataForm.formQuestions[index].question.value\"\n (keydown)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n style=\"margin-top: -1rem !important;\"/>\n </div>\n </div>\n <div *ngSwitchCase=\"2\">\n\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\n style=\"display: block; text-align: left;\">\n <span\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\n </label>\n <input type=\"text\" digitOnly id=\"{{dataForm.formQuestions[index].question.value}}\"\n style=\"margin-top: -1rem !important;\"\n [name]=\"dataForm.formQuestions[index].question.value\" placeholder=\"Escribe\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n (keydown)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n onkeypress=\"return (event.charCode == 0) ? null : event.charCode >= 48 && event.charCode <= 57\"\n onkeyup=\"(this.value=(value.replace(/[.]*/g,'')))\"\n maxlength=\"dataForm.formQuestions[index].question.maxLength\"\n [minLength]=\"dataForm.formQuestions[index].question.minLength\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n [class]=\"dataClassCss.formcontrol\"/>\n </div>\n\n </div>\n <div *ngSwitchCase=\"3\">\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\n style=\"display: block; text-align: left;\">\n <span\n class=\"h6 small bg-white text-muted\">{{dataForm.formQuestions[index].question.label}}</span>\n </label>\n <select [name]=\"dataForm.formQuestions[index].question.value\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [class]=\"dataClassCss.formcontrol\"\n id=\"{{dataForm.formQuestions[index].question.value}}\"\n style=\"margin-top: -1rem !important;\"\n [(ngModel)]=\"defaultDocType !== '' ? defaultDocType : dataForm.formQuestions[index].question.registred\">\n <option value=\"\" selected disabled hidden>Selecciona</option>\n <ng-container\n *ngFor=\"let item of dataForm.formQuestions[index].question.questionAnswers\">\n <option *ngIf=\"item.answer.state.id == 1\" [value]=\"item.answer.value\">\n {{ item.answer.field }}\n </option>\n </ng-container>\n </select>\n </div>\n </div>\n <div *ngSwitchCase=\"4\">\n <select class=\"{{ dataClassCss.formcontrol }} select-checkbox\"\n style=\"overflow: hidden; border-style: hidden;\"\n [style.height.px]=\"dataForm.formQuestions[index].question.questionAnswers.length * 24\"\n [name]=\"dataForm.formQuestions[index].question.value\"\n [required]=\"dataForm.formQuestions[index].question.required\" ngModel multiple>\n <!-- todo: delete (mousedown)=\"onMouseDown($event, dataForm.formQuestions[index].question.value, formDynamic)\"-->\n <option\n (mousemove)=\"$event.preventDefault()\"\n *ngFor=\"let item of dataForm.formQuestions[index].question.questionAnswers\"\n [value]=\"item.answer.value\">\n {{ item.answer.field }}\n </option>\n </select>\n </div>\n <div *ngSwitchCase=\"5\">\n <a (click)=\"rediretoutside($event,dataForm.formQuestions[index].question)\" href=\"\">\n <span>{{ dataForm.formQuestions[index].question.label }}</span>\n </a>\n </div>\n <div *ngSwitchCase=\"6\">\n <div [class]=\"dataClassCss.cl12\" [id]=\"'reCaptcha'\">\n <div class=\"cnt-captcha\">\n <re-captcha (resolved)=\"resolvedCaptcha($event)\"\n siteKey=\"6LfQisEZAAAAAARuuKFEAgS-x4qJse5uBA_QCA7v\"></re-captcha>\n <input hidden type=\"text\" [name]=\"dataForm.formQuestions[index].question.value\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\">\n </div>\n <span class=\"error\" *ngIf=\"watchValid && !captchaValid\" style=\"margin-top: 0;\">\n Debe resolver la captcha para continuar\n </span>\n </div>\n </div>\n <div *ngSwitchCase=\"7\">\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\n style=\"display: block; text-align: left; margin-bottom: 0 ;\">\n <span\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\n </label>\n <input placeholder=\"dd/mm/aaaa\" style=\"margin-top: -0.4rem !important;\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [name]=\"dataForm.formQuestions[index].question.value\" type=\"date\" min=\"{{minDate}}\"\n max=\"{{maxDate}}\" [maxlength]=\"10\" (paste)=\"false\"\n id=\"{{dataForm.formQuestions[index].question.value}}\"\n [class]=\"dataClassCss.txtCalendar\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n (keydown)=\"cancellKeypress()\"\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\">\n\n <!-- for replace by id todo-->\n <button class=\"btn\" id=\"{{dataForm.formQuestions[index].question.value}}\" type=\"button\"\n style=\"width: 46px;\n top: 12px;\n color: white;\n right: 15px;\n position: absolute;\n background: #D25D42;\n pointer-events: none;\">\n <i class=\"fa fa-calendar\"></i>\n </button>\n\n </div>\n </div>\n <div *ngSwitchCase=\"8\">\n <div [class]=\"dataClassCss.cl12\" style=\"text-align: left; margin-bottom: 10px;\">\n <input [style]=\"'width: 4%; height: auto; display: inline;'\" type=\"checkbox\"\n [name]=\"dataForm.formQuestions[index].question.value\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n [class]=\"dataClassCss.formcontrol\"\n (change)=\"checkTermsAndConditions(dataForm.formQuestions[index].question.registred)\">\n <!-- <a href=\"{{urlPdf}}\" target=\"_blank\" style=\"text-decoration: underline;\"\n id=\"txtPoliticas\" (click)=\"tycSelection()\">\n {{dataForm.formQuestions[index].question.label}}\n </a> -->\n <a target=\"_blank\" style=\"text-decoration: underline;color:blue;cursor: pointer;\"\n id=\"txtPoliticas\" (click)=\"tycSelection($event)\">\n {{dataForm.formQuestions[index].question.label}}\n </a>\n </div>\n </div>\n <div *ngSwitchCase=\"9\">\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\n style=\"display: block; text-align: left; \">\n <span\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\n </label>\n <input type=\"text\" id=\"{{dataForm.formQuestions[index].question.value}}\"\n [class]=\"dataClassCss.formcontrol\" placeholder=\"Escribe\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [maxlength]=\"dataForm.formQuestions[index].question.maxLength\"\n [name]=\"dataForm.formQuestions[index].question.value\"\n (keydown)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (keypress)=\"validOnlyText($event)\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n style=\"margin-top: -1rem !important;\"/>\n </div>\n </div>\n <div *ngSwitchCase=\"10\">\n <div [class]=\"dataClassCss.cl12\" style=\"text-align: left; margin-bottom: 10px;\">\n <input [style]=\"'width: 4%; height: auto; display: inline;'\" type=\"checkbox\"\n [name]=\"dataForm.formQuestions[index].question.value\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n [class]=\"dataClassCss.formcontrol\">\n <a target=\"_blank\" style=\"text-decoration: underline;color:blue;cursor: pointer;\"\n id=\"check{{dataForm.formQuestions[index].question.id}}\"\n (click)=\"openLabelUrl($event,dataForm.formQuestions[index].question)\">\n {{dataForm.formQuestions[index].question.label}}\n </a>\n </div>\n </div>\n <div *ngSwitchCase=\"11\">\n <div [class]=\"dataClassCss.cl12\">\n <label for=\"{{dataForm.formQuestions[index].question.value}}\" class=\"col-sm-12\"\n style=\"display: block; text-align: left; \">\n <span\n class=\"h6 small bg-white text-muted pt-1 pl-2 pr-2\">{{dataForm.formQuestions[index].question.label}}</span>\n </label>\n <input type=\"text\" id=\"{{dataForm.formQuestions[index].question.value}}\"\n [class]=\"dataClassCss.formcontrol\" placeholder=\"Escribe\"\n [required]=\"dataForm.formQuestions[index].question.required\"\n [maxlength]=\"dataForm.formQuestions[index].question.maxLength\"\n [name]=\"dataForm.formQuestions[index].question.value\"\n (keydown)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (change)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (blur)=\"onChangeValidPatter($event, dataForm.formQuestions[index].question)\"\n (keypress)=\"validateNotSpace($event)\"\n [(ngModel)]=\"dataForm.formQuestions[index].question.registred\"\n style=\"margin-top: -1rem !important;\"/>\n </div>\n </div>\n <div *ngSwitchDefault>Tipo de control no detectado</div>\n <div style=\"margin-left: 15px;\"\n *ngIf=\"dataForm.formQuestions[index].question.questionType.id != 5 && dataForm.formQuestions[index].question.questionType.id != 6\">\n <span class=\"error\" [id]=\"'rq'+dataForm.formQuestions[index].question.value\"\n *ngIf=\"validRequired(formDynamic,dataForm.formQuestions[index].question) && watchValid\">\n Este campo es obligatorio</span>\n <span class=\"error\" [id]=\"'ml'+dataForm.formQuestions[index].question.value\" hidden>\n Debe ser m\u00EDnimo de\n {{ dataForm.formQuestions[index].question.minLength }} caracteres</span>\n <span class=\"error\" [id]=\"'mxl'+dataForm.formQuestions[index].question.value\" hidden>\n Debe ser maximo de\n {{ dataForm.formQuestions[index].question.maxLength }} caracteres</span>\n <span class=\"error\" [id]=\"'char'+dataForm.formQuestions[index].question.value\"\n hidden></span>\n <span class=\"error\" [id]=\"dataForm.formQuestions[index].question.id\" hidden></span>\n </div>\n </div>\n </ng-template>\n </div>\n <div class=\"mt-3 text-center\">\n <button type=\"button\" [class]=\"dataClassCss.btn\" (click)=\"onSubmit()\" [disabled]=\"!formDynamic.valid\"\n id=\"btnIng\">Ingresar\n </button>\n </div>\n </form>\n </div>\n</div>\n",
721
- providers: [
722
- { provide: NgbDateAdapter, useClass: CustomAdapter },
723
- { provide: NgbDateParserFormatter, useClass: CustomDateParserFormatter },
724
- { provide: NgbDatepickerI18n, useClass: CustomDatepickerI18n },
725
- I18n
726
- ],
727
- styles: [".select-checkbox option::before{content:\"\\2610\";width:1.3em;text-align:center;display:inline-block}.select-checkbox option:checked::before{content:\"\\2611\"}"]
728
- })
729
- ], FormAuroraComponent);
730
- return FormAuroraComponent;
731
- }());
732
- export { FormAuroraComponent };
733
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hdXJvcmEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZm9ybS1hdXJvcmEtc3RlZmFuaW5pLyIsInNvdXJjZXMiOlsibGliL2Zvcm0tYXVyb3JhLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUlMLFNBQVMsRUFHVCxNQUFNLEVBQ04sWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxTQUFTLEVBQUUsV0FBVyxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRWhELCtCQUErQjtBQUMvQixPQUFPLEVBQUMsY0FBYyxFQUFFLHNCQUFzQixFQUFpQixpQkFBaUIsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3BILE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBRWxDLElBQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUN2Qix3REFBd0Q7QUFDeEQsNkVBQTZFO0FBQzdFLHlFQUF5RTtBQUV6RTs7R0FFRztBQUVIO0lBQW1DLHlDQUFzQjtJQUR6RDtRQUFBLHFFQXFCQztRQWxCVSxlQUFTLEdBQUcsR0FBRyxDQUFDOztJQWtCM0IsQ0FBQztJQWhCQyxpQ0FBUyxHQUFULFVBQVUsS0FBb0I7UUFDNUIsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6QyxPQUFPO2dCQUNMLEdBQUcsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDMUIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUM1QixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FB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IEluamVjdGFibGUsXHJcbiAgSW5wdXQsXHJcbiAgRWxlbWVudFJlZixcclxuICBPbkluaXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFZpZXdDaGlsZCxcclxuICBPbkNoYW5nZXMsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Rm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgTmdGb3JtLCBGb3JtfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge0ZpbGx9IGZyb20gJy4vZmlsbCc7XHJcbi8vIGltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHtOZ2JEYXRlQWRhcHRlciwgTmdiRGF0ZVBhcnNlckZvcm1hdHRlciwgTmdiRGF0ZVN0cnVjdCwgTmdiRGF0ZXBpY2tlckkxOG59IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0ICogYXMgbW9tZW50XyBmcm9tICdtb21lbnQnO1xyXG5cclxuY29uc3QgbW9tZW50ID0gbW9tZW50XztcclxuLy8gaW1wb3J0IHsgcmVnZXhUeXBlIH0gZnJvbSBcIkBhcHAvX3NoYXJlZC9fdXRpbC9yZWdleFwiO1xyXG4vLyBpbXBvcnQgeyBFeHRlcm5hbFNlcnZpY2UgfSBmcm9tICdAYXBwL19zaGFyZWQvX3NlcnZpY2VzL2V4dGVybmFsLnNlcnZpY2UnO1xyXG4vLyBpbXBvcnQgeyBBdXJvcmFTZXJ2aWNlIH0gZnJvbSAnQGFwcC9fc2hhcmVkL19zZXJ2aWNlcy9hdXJvcmEuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogVGhpcyBTZXJ2aWNlIGhhbmRsZXMgaG93IHRoZSBkYXRlIGlzIHJlcHJlc2VudGVkIGluIHNjcmlwdHMgaS5lLiBuZ01vZGVsLlxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tQWRhcHRlciBleHRlbmRzIE5nYkRhdGVBZGFwdGVyPHN0cmluZz4ge1xyXG5cclxuICByZWFkb25seSBERUxJTUlURVIgPSAnLyc7XHJcblxyXG4gIGZyb21Nb2RlbCh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IE5nYkRhdGVTdHJ1Y3QgfCBudWxsIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBjb25zdCBkYXRlID0gdmFsdWUuc3BsaXQodGhpcy5ERUxJTUlURVIpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGRheTogcGFyc2VJbnQoZGF0ZVswXSwgMTApLFxyXG4gICAgICAgIG1vbnRoOiBwYXJzZUludChkYXRlWzFdLCAxMCksXHJcbiAgICAgICAgeWVhcjogcGFyc2VJbnQoZGF0ZVsyXSwgMTApXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHRvTW9kZWwoZGF0ZTogTmdiRGF0ZVN0cnVjdCB8IG51bGwpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIC8vcmV0dXJuIGRhdGUgPyBkYXRlLmRheSArIHRoaXMuREVMSU1JVEVSICsgZGF0ZS5tb250aCArIHRoaXMuREVMSU1JVEVSICsgZGF0ZS55ZWFyIDogbnVsbDtcclxuICAgIHJldHVybiBkYXRlID8gKGRhdGUuZGF5IDwgMTAgPyAwICsgZGF0ZS5kYXkgOiBkYXRlLmRheSkgKyB0aGlzLkRFTElNSVRFUiArIChkYXRlLm1vbnRoIDwgMTAgPyAwICsgZGF0ZS5tb250aCA6IGRhdGUubW9udGgpICsgdGhpcy5ERUxJTUlURVIgKyBkYXRlLnllYXIgOiAnJztcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGlzIFNlcnZpY2UgaGFuZGxlcyBob3cgdGhlIGRhdGUgaXMgcmVuZGVyZWQgYW5kIHBhcnNlZCBmcm9tIGtleWJvYXJkIGkuZS4gaW4gdGhlIGJvdW5kIGlucHV0IGZpZWxkLlxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tRGF0ZVBhcnNlckZvcm1hdHRlciBleHRlbmRzIE5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIge1xyXG5cclxuICByZWFkb25seSBERUxJTUlURVIgPSAnLyc7XHJcblxyXG4gIHBhcnNlKHZhbHVlOiBzdHJpbmcpOiBOZ2JEYXRlU3RydWN0IHwgbnVsbCB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgY29uc3QgZGF0ZSA9IHZhbHVlLnNwbGl0KHRoaXMuREVMSU1JVEVSKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBkYXk6IHBhcnNlSW50KGRhdGVbMF0sIDEwKSxcclxuICAgICAgICBtb250aDogcGFyc2VJbnQoZGF0ZVsxXSwgMTApLFxyXG4gICAgICAgIHllYXI6IHBhcnNlSW50KGRhdGVbMl0sIDEwKVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBmb3JtYXQoZGF0ZTogTmdiRGF0ZVN0cnVjdCB8IG51bGwpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGRhdGUgPyAoZGF0ZS5kYXkgPCAxMCA/ICcwJyArIGRhdGUuZGF5IDogZGF0ZS5kYXkpICsgdGhpcy5ERUxJTUlURVIgKyAoZGF0ZS5tb250aCA8IDEwID8gJzAnICsgZGF0ZS5tb250aCA6IGRhdGUubW9udGgpICsgdGhpcy5ERUxJTUlURVIgKyBkYXRlLnllYXIgOiAnJztcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IEkxOE5fVkFMVUVTID0ge1xyXG4gICdlcyc6IHtcclxuICAgIHdlZWtkYXlzOiBbJ0x1JywgJ01hJywgJ01pJywgJ0p1JywgJ1ZpJywgJ1NhJywgJ0RvJ10sXHJcbiAgICBtb250aHM6IFsnRW5lJywgJ0ZlYicsICdNYXInLCAnQWJyJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0FnbycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEaWMnXSxcclxuICAgIHdlZWtMYWJlbDogJ3NlbSdcclxuICB9XHJcbiAgLy8gb3RoZXIgbGFuZ3VhZ2VzIHlvdSB3b3VsZCBzdXBwb3J0XHJcbn07XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBJMThuIHtcclxuICBsYW5ndWFnZSA9ICdlcyc7XHJcbn1cclxuXHJcbi8vIERlZmluZSBjdXN0b20gc2VydmljZSBwcm92aWRpbmcgdGhlIG1vbnRocyBhbmQgd2Vla2RheXMgdHJhbnNsYXRpb25zXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEN1c3RvbURhdGVwaWNrZXJJMThuIGV4dGVuZHMgTmdiRGF0ZXBpY2tlckkxOG4ge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2kxOG46IEkxOG4pIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBnZXRXZWVrZGF5TGFiZWwod2Vla2RheTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBJMThOX1ZBTFVFU1t0aGlzLl9pMThuLmxhbmd1YWdlXS53ZWVrZGF5c1t3ZWVrZGF5IC0gMV07XHJcbiAgfVxyXG5cclxuICBnZXRXZWVrTGFiZWwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBJMThOX1ZBTFVFU1t0aGlzLl9pMThuLmxhbmd1YWdlXS53ZWVrTGFiZWw7XHJcbiAgfVxyXG5cclxuICBnZXRNb250aFNob3J0TmFtZShtb250aDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBJMThOX1ZBTFVFU1t0aGlzLl9pMThuLmxhbmd1YWdlXS5tb250aHNbbW9udGggLSAxXTtcclxuICB9XHJcblxyXG4gIGdldE1vbnRoRnVsbE5hbWUobW9udGg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRNb250aFNob3J0TmFtZShtb250aCk7XHJcbiAgfVxyXG5cclxuICBnZXREYXlBcmlhTGFiZWwoZGF0ZTogTmdiRGF0ZVN0cnVjdCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7ZGF0ZS5kYXl9LSR7ZGF0ZS5tb250aH0tJHtkYXRlLnllYXJ9YDtcclxuICB9XHJcblxyXG4gIGdldFdlZWtkYXlTaG9ydE5hbWUod2Vla2RheTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBJMThOX1ZBTFVFU1t0aGlzLl9pMThuLmxhbmd1YWdlXS53ZWVrZGF5c1t3ZWVrZGF5IC0gMV07XHJcbiAgfTtcclxufVxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLUZvcm1BdXJvcmEnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWF1cm9yYS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1hdXJvcmEuY29tcG9uZW50LmNzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge3Byb3ZpZGU6IE5nYkRhdGVBZGFwdGVyLCB1c2VDbGFzczogQ3VzdG9tQWRhcHRlcn0sXHJcbiAgICB7cHJvdmlkZTogTmdiRGF0ZVBhcnNlckZvcm1hdHRlciwgdXNlQ2xhc3M6IEN1c3RvbURhdGVQYXJzZXJGb3JtYXR0ZXJ9LFxyXG4gICAge3Byb3ZpZGU6IE5nYkRhdGVwaWNrZXJJMThuLCB1c2VDbGFzczogQ3VzdG9tRGF0ZXBpY2tlckkxOG59LFxyXG4gICAgSTE4blxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1BdXJvcmFDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBJbnB1dCgpIGRhdGFDbGFzc0NzczogYW55O1xyXG4gIEBJbnB1dCgpIGRhdGFGb3JtOiBhbnk7XHJcbiAgQElucHV0KCkgY2xpY2tTdWJtaXQ6IGFueTtcclxuICBASW5wdXQoKSBkYXRhUmVsb2FkRm9ybTogYW55O1xyXG4gIEBJbnB1dCgpIHdlbGNvbWVUaXRsZTogYW55O1xyXG4gIEBJbnB1dCgpIHdlbGNvbWVEZXNjcmlwdGlvbjogYW55O1xyXG4gIEBJbnB1dCgpIHVybFBkZjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG5hbWVDb21wYW55OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2NoZWR1bGU6IHN0cmluZztcclxuICBASW5wdXQoKSBnZXRUZXJtc0FuZENvbmRpdGlvbnM6IGFueTtcclxuICBASW5wdXQoKSByZWdleFR5cGU6IGFueTtcclxuICBASW5wdXQoKSBnZXRJcEFkZHJlc3M6IGFueTtcclxuICBAVmlld0NoaWxkKCdmb3JtRHluYW1pYycsIHtzdGF0aWM6IHRydWV9KSBmb3JtRHluYW1pYzogTmdGb3JtO1xyXG4gIEBPdXRwdXQoKSByZXNwb25zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBzdW1taXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgc2V0QWNjZXB0YW5jZURvY3VtZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIHRpcG9kb2NOdW1Eb2M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBvblN1Ym1pdEV2ZW50OiBhbnkgPSBmYWxzZTtcclxuICBjb3VudFN1Ym1pdCA9IDA7XHJcbiAgd2F0Y2hWYWxpZCA9IGZhbHNlO1xyXG4gIHdhdGNoUmVxdWlyZWQgPSBmYWxzZTtcclxuICBjYXB0Y2hhVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkaXNwbGF5TW9udGhzID0gMjtcclxuICBuYXZpZ2F0aW9uID0gJ3NlbGVjdCc7XHJcbiAgc2hvd1dlZWtOdW1iZXJzID0gZmFsc2U7XHJcbiAgb3V0c2lkZURheXMgPSAndmlzaWJsZSc7XHJcbiAgcmVzcFNlcnZpY2VTZWdtZW50YXRpb246IGFueSA9IG51bGw7XHJcblxyXG5cclxuICAvL2VtYWlsUGF0dGVybiA9IFwiXlthLXowLTkuXyUrLV0rQFthLXowLTkuLV0rXFwuW2Etel17Miw0fSRcIjtcclxuXHJcbiAgdG9kYXkgPSBtb21lbnQobmV3IERhdGUoKSk7XHJcbiAgbWF4WWVhciA9IHRoaXMudG9kYXkueWVhcigpO1xyXG4gIG1pblllYXIgPSB0aGlzLnRvZGF5LnllYXIoKSAtIDgyO1xyXG4gIG1pbkRhdGUgPSB0aGlzLm1pblllYXIudG9TdHJpbmcoKSArICctJyArIHRoaXMudG9kYXkubW9udGgoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJykgKyAnLScgKyB0aGlzLnRvZGF5LmRhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7Ly8ge3llYXI6IHRoaXMubWluWWVhciwgbW9udGg6IHRoaXMudG9kYXkubW9udGgoKSwgZGF5OiB0aGlzLnRvZGF5LmRhdGUoKX07XHJcbiAgbWF4RGF0ZSA9IHRoaXMubWF4WWVhci50b1N0cmluZygpICsgJy0nICsgKHRoaXMudG9kYXkubW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSArICctJyArIHRoaXMudG9kYXkuZGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTsvLyB7eWVhcjogdGhpcy5tYXhZZWFyLCBtb250aDogdGhpcy50b2RheS5tb250aCgpICsgMSwgZGF5OiB0aGlzLnRvZGF5LmRhdGUoKX07XHJcblxyXG4gIC8vUmV2aXNhciB2YXJpYWJsZXNcclxuICByZWNoYXJnZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGluZGljYXRpdm86IHN0cmluZyA9ICc1Nyc7XHJcbiAgLy8gQFZpZXdDaGlsZChcIm1vZGFsVHVybnNcIikgbXlNb2RhbDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdtb2RhbFR1cm5zJywge3N0YXRpYzogZmFsc2V9KSBteU1vZGFsOiBFbGVtZW50UmVmO1xyXG4gIGZpbGxkYXRhOiBGaWxsO1xyXG4gIGRlZmF1bHREb2NUeXBlOiBzdHJpbmcgPSAnQ8OpZHVsYSBkZSBjaXVkYWRhbsOtYSc7XHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ251ZXZhIHZlcnNpb24gMC4xLjAnKTtcclxuICAgIHRoaXMubWluRGF0ZSA9IG5ldyBEYXRlKHRoaXMubWluRGF0ZSkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc3RhcnRDb21wb25lbnQoKTtcclxuICAgIH0sIDIwMDApO1xyXG4gIH1cclxuXHJcblxyXG4gIHN0YXJ0Q29tcG9uZW50KCkge1xyXG4gICAgLy9vcmRlbmEgbG9zIGNhbXBvc1xyXG4gICAgaWYgKHRoaXMuZGF0YUZvcm0gIT0gbnVsbCAmJiB0aGlzLmRhdGFGb3JtLmZvcm1RdWVzdGlvbnMgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vU2FtZSByb3cgZmllbGRzXHJcbiAgICAgIHRoaXMudGlwb2RvY051bURvYyA9ICh0aGlzLmRhdGFGb3JtLmZvcm1RdWVzdGlvbnMuc29tZShxdWVzdGlvbiA9PiBxdWVzdGlvbi5xdWVzdGlvbi52YWx1ZSA9PT0gJ3RpcG9Eb2MnKSAmJiB0aGlzLmRhdGFGb3JtLmZvcm1RdWVzdGlvbnMuc29tZShxdWVzdGlvbiA9PiBxdWVzdGlvbi5xdWVzdGlvbi52YWx1ZSA9PT0gJ251bWVyb0RvYycpKSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuZGF0YUZvcm0uZm9ybVF1ZXN0aW9ucyA9IHRoaXMuZGF0YUZvcm0uZm9ybVF1ZXN0aW9ucy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgICAgICByZXR1cm4gYS5vcmRlciAtIGIub3JkZXI7XHJcbiAgICAgIH0pO1xyXG4gICAgICBsZXQgZXhpc3RjYXB0Y2hhID0gdGhpcy5kYXRhRm9ybS5mb3JtUXVlc3Rpb25zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5xdWVzdGlvbi5xdWVzdGlvblR5cGUuaWQgPT0gNik7XHJcblxyXG4gICAgICBpZiAoZXhpc3RjYXB0Y2hhLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgdGhpcy5jYXB0Y2hhVmFsaWQgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5kYXRhRm9ybS5mb3JtUXVlc3Rpb25zKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0ucXVlc3Rpb24ubWF4bGVuZ3RoID09IG51bGwgfHwgaXRlbS5xdWVzdGlvbi5tYXhsZW5ndGggPT0gdW5kZWZpbmVkIHx8IGl0ZW0ucXVlc3Rpb24ubWF4bGVuZ3RoID09IDApIHtcclxuICAgICAgICAgIGl0ZW0ucXVlc3Rpb24ubWF4bGVuZ3RoID0gNTI0Mjg4OyAvL2RlZmF1bHR2YWx1ZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGl0ZW0ucXVlc3Rpb24ubWluTGVuZ3RoID09IG51bGwgfHwgaXRlbS5xdWVzdGlvbi5taW5MZW5ndGggPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBpdGVtLnF1ZXN0aW9uLm1pbkxlbmd0aCA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRhdGFSZWxvYWRGb3JtLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpbGxkYXRhID0gZWxlbWVudDtcclxuXHJcbiAgICAgICAgICBpZiAoKGl0ZW0ucXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkID09PSAyIHx8IGl0ZW0ucXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkID09PSAxIHx8XHJcbiAgICAgICAgICAgIGl0ZW0ucXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkID09PSAzKSAmJiAodGhpcy5maWxsZGF0YS5kYXRhICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgIHRoaXMuZmlsbGRhdGEuZGF0YSAhPT0gdW5kZWZpbmVkKSAmJiBpdGVtLnF1ZXN0aW9uLmlkID09PSB0aGlzLmZpbGxkYXRhLmlkKSB7XHJcbiAgICAgICAgICAgIGl0ZW0ucXVlc3Rpb24ucmVnaXN0cmVkID0gdGhpcy5maWxsZGF0YS5kYXRhO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoaXRlbS5xdWVzdGlvbi5yZWdpc3RyZWQgPT0gbnVsbCB8fCBpdGVtLnF1ZXN0aW9uLm1pbkxlbmd0aCA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGl0ZW0ucXVlc3Rpb24ucmVnaXN0cmVkID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByYW5nZSA9IG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbCgpLFxyXG4gICAgZW5kOiBuZXcgRm9ybUNvbnRyb2woKSxcclxuICB9KTtcclxuXHJcbiAgcmVzb2x2ZWRDYXB0Y2hhKGNhcHRjaGFSZXNwb25zZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmNhcHRjaGFWYWxpZCA9IHRydWU7XHJcbiAgICBpZiAoIXRoaXMuZm9ybUR5bmFtaWMuZm9ybS52YWx1ZS5jYXB0Y2hhKSB7XHJcbiAgICAgIHRoaXMuZm9ybUR5bmFtaWMuY29udHJvbHMuY2FwdGNoYS5zZXRWYWx1ZShjYXB0Y2hhUmVzcG9uc2UpO1xyXG4gICAgICB0aGlzLmZvcm1EeW5hbWljLmZvcm0udmFsdWUuY2FwdGNoYSA9IGNhcHRjaGFSZXNwb25zZTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bkluZycpLnN0eWxlLm9wYWNpdHkgPSAhdGhpcy5mb3JtRHluYW1pYy52YWxpZCA/ICcwLjY1JyA6ICcxJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vRm9ybXNcclxuICAvL01ldG9kbyBwYXJhIGV2aXRhciBlbCByZW5kZXIgZGUgbG9zIGl0ZW1zIGRlbCBmb3JcclxuICBwdWJsaWMgdHJhY2tCeUluZGV4KGluZGV4OiBudW1iZXIsIG9iajogYW55KTogYW55IHtcclxuICAgIHJldHVybiBpbmRleDtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlVmFsaWRQYXR0ZXIoZXZlbnQsIHF1ZXN0aW9uKSB7XHJcbiAgICBpZiAocXVlc3Rpb24ucGF0dGVybiAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcclxuICAgICAgbGV0IGtleXZhbGlkID0gWzgsIDMyLCAzNywgMzgsIDM5LCA0MCwgNDYsIDldO1xyXG4gICAgICAvL2RpZmVyZW50ZSBkZSBCYWNrcHNhY2VcclxuICAgICAgLy9zZSBkZWphIGNhdGNoIHBvciBlcnJvciBubyBjb250cm9sYWJsZSBlbiBvdHJvIHRpZW1wbyBkZSBlamVjdWNpb25cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAoIWtleXZhbGlkLmluY2x1ZGVzKGV2ZW50LmtleUNvZGUpKSB7XHJcbiAgICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAocXVlc3Rpb24ucGF0dGVybik7XHJcbiAgICAgICAgICB2YWxpZCA9IHJlZ2V4LnRlc3QoZXZlbnQua2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHZhbGlkO1xyXG4gICAgfVxyXG5cclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGFyJyArIHF1ZXN0aW9uLnZhbHVlKS5zZXRBdHRyaWJ1dGUoJ2hpZGRlbicsICd0cnVlJyk7XHJcblxyXG4gICAgLy9pZiB0ZW1wb3JhbCBtaWVudHJhcyBzZSBtaWdyYW4gdG9kb3MgbG9zIHRpcG9zIGRlIGNhbXBvcyBhbCBmb3JlYWNoXHJcbiAgICBpZiAocXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkICE9IDExICYmIHF1ZXN0aW9uLnF1ZXN0aW9uVHlwZS5pZCAhPSA3KSB7XHJcbiAgICAgIGlmICh0aGlzLnZhbGlkTWluTGVuZ3RoKHRoaXMuZm9ybUR5bmFtaWMsIHF1ZXN0aW9uKSkge1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHF1ZXN0aW9uLnZhbHVlKS5zdHlsZS5ib3JkZXJDb2xvciA9ICcjRkYwMDAwJztcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWwnICsgcXVlc3Rpb24udmFsdWUpLnJlbW92ZUF0dHJpYnV0ZSgnaGlkZGVuJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocXVlc3Rpb24udmFsdWUpLnN0eWxlLmJvcmRlckNvbG9yID0gJyNFNEU0RTQnO1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtbCcgKyBxdWVzdGlvbi52YWx1ZSkuc2V0QXR0cmlidXRlKCdoaWRkZW4nLCAndHJ1ZScpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnZhbGlkTWF4TGVuZ3RoKHRoaXMuZm9ybUR5bmFtaWMsIHF1ZXN0aW9uKSkge1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHF1ZXN0aW9uLnZhbHVlKS5zdHlsZS5ib3JkZXJDb2xvciA9ICcjRkYwMDAwJztcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXhsJyArIHF1ZXN0aW9uLnZhbHVlKS5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHF1ZXN0aW9uLnZhbHVlKS5zdHlsZS5ib3JkZXJDb2xvciA9ICcjRTRFNEU0JztcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXhsJyArIHF1ZXN0aW9uLnZhbHVlKS5zZXRBdHRyaWJ1dGUoJ2hpZGRlbicsICd0cnVlJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5kYXRhRm9ybS5mb3JtUXVlc3Rpb25zLmZvckVhY2goZm9ybVF1ZXN0aW9uID0+IHtcclxuICAgICAgc3dpdGNoIChmb3JtUXVlc3Rpb24ucXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkKSB7XHJcbiAgICAgICAgLy9zZSB2YWxpZGEgIGNhbXBvIGRlIHRpcG8gY2FsZW5kYXJpb1xyXG4gICAgICAgIGNhc2UgNzpcclxuICAgICAgICAgIGlmIChxdWVzdGlvbi5xdWVzdGlvblR5cGUuaWQgPT0gNylcclxuICAgICAgICAgICAgdGhpcy5jYWxlbmRhclJ1bGVzVmFsaWRhdGUoZm9ybVF1ZXN0aW9uKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vc2UgdmFsaWRhICBjYW1wbyBkZSB0aXBvIGVtYWlsXHJcbiAgICAgICAgY2FzZSAxMTpcclxuICAgICAgICAgIGlmIChxdWVzdGlvbi5xdWVzdGlvblR5cGUuaWQgPT0gMTEpXHJcbiAgICAgICAgICAgIHRoaXMuZW1haWxSdWxlc1ZhbGlkYXRlKGZvcm1RdWVzdGlvbik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bkluZycpLnN0eWxlLm9wYWNpdHkgPSAhdGhpcy5mb3JtRHluYW1pYy52YWxpZCA/ICcwLjY1JyA6ICcxJztcclxuICB9XHJcblxyXG4gIHZhbGlkT25seVRleHQoZXZlbnQpIHtcclxuICAgIGxldCByZWdleCA9IC9eW2EtekEtWlxcdTAwQzAtXFx1MDE3Rl0rJC9nO1xyXG4gICAgaWYgKGV2ZW50LmNoYXJDb2RlID09IDMyKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgbGV0IHZhbGlkID0gcmVnZXgudGVzdChldmVudC5rZXkpO1xyXG5cclxuICAgIHJldHVybiB2YWxpZDtcclxuICB9XHJcblxyXG4gIHZhbGlkRGF0ZShldmVudCkge1xyXG4gICAgLypsZXQgcGF0dGVybiA9IC8oPzowWzEtOV18WzEyXVswLTldfDNbMDFdKVxcLyg/OjBbMS05XXwxWzAtMl0pXFwvKD86MTl8MjApWzAtOV17Mn0vO1xyXG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHBhdHRlcm4pO1xyXG4gICAgdmFsaWQgPSByZWdleC50ZXN0KGV2ZW50LmtleSk7XHJcbiAgICAqL1xyXG4gICAgY29uc3QgbWF0Y2hlcyA9IFN0cmluZyhldmVudC5rZXkpLm1hdGNoKHRoaXMucmVnZXhUeXBlLmRhdGUuZXhwKTtcclxuICAgIGxldCB2YWxpZCA9IHRydWU7XHJcbiAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbClcclxuICAgICAgdmFsaWQgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBhbGVydCh2YWxpZCk7XHJcblxyXG4gICAgcmV0dXJuIHZhbGlkO1xyXG5cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlVmFsaWREYXRlKGV2ZW50KSB7XHJcblxyXG4gICAgLy9sZXQgcGF0dGVybiA9IC8oPzowWzEtOV18MVswLTJdKVxcLyg/OjBbMS05XXxbMTJdWzAtOV18M1swMV0pXFwvKD86MTl8MjApWzAtOV17Mn0vO1xyXG4gICAgbGV0IGRhdGVOID0gL1swLTldfFxcLy87XHJcbiAgICBsZXQgdmFsaWQgPSB0cnVlO1xyXG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGRhdGVOKTtcclxuICAgIHZhbGlkID0gcmVnZXgudGVzdChldmVudC5rZXkpO1xyXG4gICAgcmV0dXJuIHZhbGlkO1xyXG5cclxuICB9XHJcblxyXG4gIHJlZGlyZXRvdXRzaWRlKGV2ZW50LCBxdWVzdGlvbikge1xyXG4gICAgLy9zZSBkZWphIGNhdGNoIHBvciBlcnJvciBubyBjb250cm9sYWJsZSBlbiBvdHJvIHRpZW1wbyBkZSBlamVjdWNpb25cclxuICAgIHRyeSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHdpbmRvdy5vcGVuKHF1ZXN0aW9uLnZhbHVlLCAnX2JsYW5rJyk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGF0Y2ggc3VibWl0IGV2ZW50IGZvciB2YWxpZGF0aW9ucyBleGlzdHNcclxuICAgKiBAcGFyYW0gY2hhbmdlXHJcbiAgICovXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICB0aGlzLmNvdW50U3VibWl0Kys7XHJcbiAgfVxyXG5cclxuICAvL29uU3VibWl0KGZvcm06IE5nRm9ybSkge1xyXG4gIG9uU3VibWl0KCkge1xyXG4gICAgbGV0IGZvcm0gPSB0aGlzLmZvcm1EeW5hbWljO1xyXG4gICAgdGhpcy53YXRjaFZhbGlkID0gdHJ1ZTtcclxuICAgIHRoaXMud2F0Y2hSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgaWYgKGZvcm0udmFsaWQpIHtcclxuICAgICAgaWYgKCF0aGlzLnZhbGlkUnVsZXNGaWVsZHMoZm9ybS5jb250cm9sc1snbnVtZXJvRG9jJ10udmFsdWUudG9TdHJpbmcoKSwgZm9ybS5jb250cm9sc1snY2VsdWxhciddLnZhbHVlLnRvU3RyaW5nKCksIGZvcm0uY29udHJvbHNbJ2VtYWlsJ10udmFsdWUpKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy52YWxpZE1pbmxlbmdodEFsbFF1ZXN0aW9ucyhmb3JtLnZhbHVlKSAmJiB0aGlzLnZhbGlkTWF4TGVuZ3RoQWxsUXVlc3Rpb25zKGZvcm0udmFsdWUpICYmIGZvcm0udmFsaWQpIHtcclxuICAgICAgaWYgKHRoaXMuZGF0YUZvcm0udXJsU2VuZCAhPSAnJyAmJiB0aGlzLmNhcHRjaGFWYWxpZCkge1xyXG4gICAgICAgIHRoaXMuaHR0cC5wb3N0PGFueT4odGhpcy5kYXRhRm9ybS51cmxTZW5kLCBmb3JtLnZhbHVlKS5zdWJzY3JpYmUoKHJlc3ApID0+IHRoaXMucmVzcG9uc2UuZW1pdChyZXNwKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZm9ybS52YWxpZCAmJiB0aGlzLmNhcHRjaGFWYWxpZCkge1xyXG4gICAgICAgIHRoaXMuc3VtbWl0LmVtaXQoZm9ybS52YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhbGlkUnVsZXNGaWVsZHMobnVtZXJvRG9jOiBTdHJpbmcsIG51bWVyb0NlbDogU3RyaW5nLCBlbWFpbDogU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAvLyBWYWxpZGFjaW9uZXMgcGFyYSBjZWx1bGFyIGVuIGNhc28gZGUgaW5kaWNhdGl2byBlbiBDb2xvbWJpYVxyXG4gICAgbGV0IGNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGFyY2VsdWxhcicpO1xyXG4gICAgbGV0IGRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGFybnVtZXJvRG9jJyk7XHJcbiAgICBsZXQgdmFsT2sgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuaW5kaWNhdGl2byA9PSAnKzU3JyB8fCB0aGlzLmluZGljYXRpdm8gPT0gJzU3Jykge1xyXG4gICAgICBsZXQgc3RyaW5nT3JkZW5hZG8gPSB0aGlzLm9yZGVyU3RyaW5nKG51bWVyb0RvYyk7XHJcbiAgICAgIGlmICh0aGlzLm5hbWVDb21wYW55LnRvVXBwZXJDYXNlKCkgIT09ICdDTEFSTycpIHsvL2NsYXJvIGFjZXB0YSBucm8gY29uc2VjdXRpdm9zXHJcbiAgICAgICAgaWYgKG51bWVyb0RvYyA9PSBzdHJpbmdPcmRlbmFkbykge1xyXG4gICAgICAgICAgZG9jLnN0eWxlLmJvcmRlckNvbG9yID0gJyNGRjAwMDAnO1xyXG4gICAgICAgICAgZG9jLnJlbW92ZUF0dHJpYnV0ZSgnaGlkZGVuJyk7XHJcbiAgICAgICAgICBkb2MudGV4dENvbnRlbnQgPSAnRWwgbnVtZXJvIGRvY3VtZW50byBObyBkZWJlIGNvbnRlbmVyIGNhcmFjdGVyZXMgY29uc2VjdXRpdm9zJztcclxuICAgICAgICAgIHZhbE9rID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgLy90aGlzLm1zZ0Vycm9yQ2FtcG8gPSBcIkVsIG51bWVybyBkb2N1bWVudG8gTm8gZGViZSBjb250ZW5lciBjYXJhY3RlcmVzIGNvbnNlY3V0aXZvc1wiO1xyXG4gICAgICAgICAgLy9yZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChudW1lcm9DZWwuc3Vic3RyaW5nKDAsIDEpICE9ICczJykge1xyXG4gICAgICAgIGNlbC5zdHlsZS5ib3JkZXJDb2xvciA9ICcjRkYwMDAwJztcclxuICAgICAgICBjZWwucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTtcclxuICAgICAgICBjZWwudGV4dENvbnRlbnQgPSAnRWwgcHJpbWVyIGNhcsOhY3RlciBkZWwgY2VsdWxhciBkZWJlIHNlciAzJztcclxuICAgICAgICB2YWxPayA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvL3RoaXMubXNnRXJyb3JDYW1wbyA9IFwiRWwgcHJpbWVyIGNhcsOhY3RlciBkZWwgY2VsdWxhciBkZWJlIHNlciAzXCI7XHJcbiAgICAgICAgLy9yZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgLypcclxuICAgICAgaWYgKHBhcnNlSW50KG51bWVyb0NlbC5zdWJzdHJpbmcoMCwgMykpID4gMzUwKSB7XHJcbiAgICAgICAgY2VsLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjRkYwMDAwXCI7XHJcbiAgICAgICAgY2VsLnJlbW92ZUF0dHJpYnV0ZShcImhpZGRlblwiKTtcclxuICAgICAgICBjZWwudGV4dENvbnRlbnQgPSBcIkVsIHByZWZpam8gZGVsIGNlbHVsYXIgbm8gZGViZSBzZXIgbWF5b3IgYSAzNTBcIjtcclxuICAgICAgICB2YWxPayA9IGZhbHNlO1xyXG4gICAgICAgIC8vdGhpcy5tc2dFcnJvckNhbXBvID0gXCJFbCBwcmVmaWpvIGRlbCBjZWx1bGFyIG5vIGRlYmUgc2VyIG1heW9yIGEgMzUwXCI7XHJcbiAgICAgICAgLy9yZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgKi9cclxuICAgICAgLy9FbiBjYXNvIGRlIHF1ZSBlbCBuw7ptZXJvIHNlIHJlcGl0YSwgZWplbXBsbyAzMzMzMzMzM1xyXG4gICAgICBsZXQgbGlzdG51bWJlciA9IG51bWVyb0RvYy5zdWJzdHJpbmcoMCwgMSk7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBudW1lcm9Eb2MubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgbGlzdG51bWJlciA9IGxpc3RudW1iZXIgKyBudW1lcm9Eb2Muc3Vic3RyaW5nKDAsIDEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobnVtZXJvRG9jID09IGxpc3RudW1iZXIpIHtcclxuICAgICAgICBkb2Muc3R5bGUuYm9yZGVyQ29sb3IgPSAnI0ZGMDAwMCc7XHJcbiAgICAgICAgZG9jLnJlbW92ZUF0dHJpYnV0ZSgnaGlkZGVuJyk7XHJcbiAgICAgICAgZG9jLnRleHRDb250ZW50ID0gJ0NhcmFjdGVyZXMgbnVtw6lyaWNvcyBubyBzZSBwdWVkZW4gcmVwZXRpcnNlIGRlIG1hbmVyYSBjb250aW51YSAnO1xyXG4gICAgICAgIHZhbE9rID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vdGhpcy5tc2dFcnJvckNhbXBvID0gXCJDYXJhY3RlcmVzIG51bcOpcmljb3Mgbm8gc2UgcHVlZGVuIHJlcGV0aXJzZSBkZSBtYW5lcmEgY29udGludWEgXCI7XHJcbiAgICAgICAgLy9yZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEVuIGNhc28gZGUgcXVlIGVsIG7Dum1lcm8gc2UgcmVwaXRhLCBlamVtcGxvIDMzMzMzMzMzXHJcbiAgICAgIGxldCBhcnJheVBob25lUmVwZWF0ID0gQXJyYXkuZnJvbShTdHJpbmcobnVtZXJvQ2VsKSwgTnVtYmVyKTtcclxuICAgICAgbGV0IGFycmF5UGhvbmVPdXRSZXBlYXQgPSBbLi4ubmV3IFNldChhcnJheVBob25lUmVwZWF0KV07XHJcbiAgICAgIGlmIChhcnJheVBob25lT3V0UmVwZWF0Lmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgY2VsLnN0eWxlLmJvcmRlckNvbG9yID0gJyNGRjAwMDAnO1xyXG4gICAgICAgIGNlbC5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpO1xyXG4gICAgICAgIGNlbC50ZXh0Q29udGVudCA9ICdFbCBuw7ptZXJvIHF1ZSBpbmdyZXNhIG5vIGVzIHZhbGlkbyc7XHJcbiAgICAgICAgdmFsT2sgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMubXNnRXJyb3JDYW1wbyA9IFwiRWwgbsO6bWVybyBxdWUgaW5ncmVzYSBubyBlcyB2YWxpZG9cIjtcclxuICAgICAgICAvL3JldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmluZGljYXRpdm8gPT0gJys1OTMnIHx8IHRoaXMuaW5kaWNhdGl2byA9PSAnNTkzJykge1xyXG4gICAgICBpZiAobnVtZXJvQ2VsLnN1YnN0cmluZygwLCAxKSAhPSAnOScpIHtcclxuICAgICAgICBjZWwuc3R5bGUuYm9yZGVyQ29sb3IgPSAnI0ZGMDAwMCc7XHJcbiAgICAgICAgY2VsLnJlbW92ZUF0dHJpYnV0ZSgnaGlkZGVuJyk7XHJcbiAgICAgICAgY2VsLnRleHRDb250ZW50ID0gJ0VsIHByaW1lciBjYXLDoWN0ZXIgZGVsIGNlbHVsYXIgZGViZSBzZXIgOSc7XHJcbiAgICAgICAgdmFsT2sgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMubXNnRXJyb3JDYW1wbyA9IFwiRWwgcHJpbWVyIGNhcsOhY3RlciBkZWwgY2VsdWxhciBkZWJlIHNlciA5XCI7XHJcbiAgICAgICAgLy9yZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vc2UgdmFsaWRhbiBsb3MgY2FtcG9zIHBvciB0aXBvIGRlIGNhbXBvIHkgbm8gcG9yIHZhbHVlXHJcbiAgICB0aGlzLmRhdGFGb3JtLmZvcm1RdWVzdGlvbnMuZm9yRWFjaChmb3JtUXVlc3Rpb24gPT4ge1xyXG4gICAgICBzd2l0Y2ggKGZvcm1RdWVzdGlvbi5xdWVzdGlvbi5xdWVzdGlvblR5cGUuaWQpIHtcclxuICAgICAgICAvL3NlIHZhbGlkYSAgY2FtcG8gZGUgdGlwbyBlbWFpbFxyXG4gICAgICAgIGNhc2UgMTE6XHJcbiAgICAgICAgICB2YWxPayA9IHRoaXMuZW1haWxSdWxlc1ZhbGlkYXRlKGZvcm1RdWVzdGlvbik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHZhbE9rO1xyXG4gIH1cclxuXHJcbiAgb3JkZXJTdHJpbmcodmFsdWU6IFN0cmluZykge1xyXG4gICAgbGV0IGFycmF5TnVtYmVyID0gW107XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdmFsdWUubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGFycmF5TnVtYmVyLnB1c2gocGFyc2VJbnQodmFsdWUuc3Vic3RyaW5nKGluZGV4LCBpbmRleCArIDEpKSk7XHJcbiAgICB9XHJcbiAgICAvL29yZGVuYSBlbCBhcnJheVxyXG4gICAgYXJyYXlOdW1iZXIuc29ydChmdW5jdGlvbihhLCBiKSB7XHJcbiAgICAgIHJldHVybiBhIC0gYjtcclxuICAgIH0pO1xyXG4gICAgbGV0IG51bWJlck9yZGVyID0gJyc7XHJcbiAgICBudW1iZXJPcmRlciA9IGFycmF5TnVtYmVyWzBdO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGFycmF5TnVtYmVyLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBudW1iZXJPcmRlciA9IG51bWJlck9yZGVyICsgKGFycmF5TnVtYmVyWzBdICsgaW5kZXgpLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVtYmVyT3JkZXI7XHJcbiAgfVxyXG5cclxuICB2YWxpZE1pbmxlbmdodEFsbFF1ZXN0aW9ucyhmb3JtOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmRhdGFGb3JtLmZvcm1RdWVzdGlvbnMpIHtcclxuICAgICAgaWYgKGl0ZW0ucXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkID09IDEgfHwgaXRlbS5xdWVzdGlvbi5xdWVzdGlvblR5cGUuaWQgPT0gMikge1xyXG4gICAgICAgIGxldCBtaW5MZW5ndGggPSBwYXJzZUludChpdGVtLnF1ZXN0aW9uLm1pbkxlbmd0aCk7XHJcbiAgICAgICAgbGV0IGZvcm1WYWx1ZUxlbmd0aCA9IHBhcnNlSW50KGZvcm1baXRlbS5xdWVzdGlvbi52YWx1ZV0udG9TdHJpbmcoKS5sZW5ndGgpO1xyXG4gICAgICAgIGlmIChtaW5MZW5ndGggPiAwICYmIGZvcm1WYWx1ZUxlbmd0aCAhPSBtaW5MZW5ndGggJiYgZm9ybVZhbHVlTGVuZ3RoIDwgbWluTGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRNYXhMZW5ndGhBbGxRdWVzdGlvbnMoZm9ybTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5kYXRhRm9ybS5mb3JtUXVlc3Rpb25zKSB7XHJcbiAgICAgIGlmIChpdGVtLnF1ZXN0aW9uLnF1ZXN0aW9uVHlwZS5pZCA9PSAxIHx8IGl0ZW0ucXVlc3Rpb24ucXVlc3Rpb25UeXBlLmlkID09IDIpIHtcclxuICAgICAgICBsZXQgbWF4TGVuZ3RoID0gcGFyc2VJbnQoaXRlbS5xdWVzdGlvbi5tYXhMZW5ndGgpO1xyXG4gICAgICAgIGxldCBmb3JtVmFsdWVMZW5ndGggPSBwYXJzZUludChmb3JtW2l0ZW0ucXVlc3Rpb24udmFsdWVdLnRvU3RyaW5nKCkubGVuZ3RoKTtcclxuICAgICAgICBpZiAobWF4TGVuZ3RoID4gMCAmJiBmb3JtVmFsdWVMZW5ndGggIT0gbWF4TGVuZ3RoICYmIGZvcm1WYWx1ZUxlbmd0aCA+IG1heExlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHZhbGlkUmVxdWlyZWQoZm9ybTogTmdGb3JtLCBxdWVzdGlvbik6IEJvb2xlYW4ge1xyXG4gICAgLy9zZSBkZWphIGNhdGNoIHBvciBlcnJvciBubyBjb250cm9sYWJsZSBlbiBvdHJvIHRpZW1wbyBkZSBlamVjdWNpb25cclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChxdWVzdGlvbiAhPSB1bmRlZmluZWQgJiYgcXVlc3Rpb24udmFsdWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZm9ybS5jb250cm9sc1txdWVzdGlvbi52YWx1ZV0gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICBmb3JtLmNvbnRyb2xzW3F1ZXN0aW9uLnZhbHVlXS5lcnJvcnMgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgZm9ybS5jb250cm9sc1txdWVzdGlvbi52YWx1ZV0uZXJyb3JzLnJlcXVpcmVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB2YWxpZE1pbkxlbmd0aChmb3JtOiBOZ0Zvcm0sIHF1ZXN0aW9uKTogQm9vbGVhbiB7XHJcbiAgICAvL3NlIGRlamEgY2F0Y2ggcG9yIGVycm9yIG5vIGNvbnRyb2xhYmxlIGVuIG90cm8gdGllbXBvIGRlIGVqZWN1Y2lvblxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHF1ZXN0aW9uICE9IHVuZGVmaW5lZCAmJiBxdWVzdGlvbi52YWx1ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAocXVlc3Rpb24ubWluTGVuZ3RoID4gZm9ybS5jb250cm9sc1txdWVzdGlvbi52YWx1ZV0udmFsdWUudG9Mb2NhbGVTdHJpbmcoKS5sZW5ndGggJiYgcXVlc3Rpb24ubWluTGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRNYXhMZW5ndGgoZm9ybTogTmdGb3JtLCBxdWVzdGlvbik6IEJvb2xlYW4ge1xyXG4gICAgLy9zZSBkZWphIGNhdGNoIHBvciBlcnJvciBubyBjb250cm9sYWJsZSBlbiBvdHJvIHRpZW1wbyBkZSBlamVjdWNpb25cclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChxdWVzdGlvbiAhPSB1bmRlZmluZWQgJiYgcXVlc3Rpb24udmFsdWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHF1ZXN0aW9uLm1heExlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGlmIChxdWVzdGlvbi5tYXhMZW5ndGggKyAxIDw9IGZvcm0uY29udHJvbHNbcXVlc3Rpb24udmFsdWVdLnZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvXFwuL2csICcnKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmZvcm1EeW5hbWljLmNvbnRyb2xzW3F1ZXN0aW9uLnZhbHVlXS5oYXNFcnJvcignZXJyb3JNYXhMZW5ndGgnKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybUR5bmFtaWMuY29udHJvbHNbcXVlc3Rpb24udmFsdWVdLnNldEVycm9ycyh7J2Vycm9yTWF4TGVuZ3RoJzogdHJ1ZX0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHR5Y1NlbGVjdGlvbihldmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGxldCB0eWMgPSA8SFRNTElucHV0RWxlbWVudD4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3R4dFBvbGl0aWNhcycpO1xyXG4gICAgdHljLnN0eWxlLmNvbG9yID0gJyNBM0FEMzInO1xyXG5cclxuXHJcbiAgICAvLyB0aGlzLmV4dGVybmFsU2VydmljZS5nZXRUZXJtc0FuZENvbmRpdGlvbnMoKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICBsZXQgYjY0ID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5nZXRUZXJtc0FuZENvbmRpdGlvbnMgJiYgdGhpcy5nZXRUZXJtc0FuZENvbmRpdGlvbnMubGlzdGFEb2N1bWVudG9zKSB7XHJcbiAgICAgIGI2NCA9IHRoaXMuZ2V0VGVybXNBbmRDb25kaXRpb25zLmxpc3RhRG9jdW1lbnRvc1swXS5jb250ZW5pZG9Eb2N1bWVudG87XHJcbiAgICAgIHRoaXMucmVzcFNlcnZpY2VTZWdtZW50YXRpb24gPSB0aGlzLmdldFRlcm1zQW5kQ29uZGl0aW9ucy5saXN0YURvY3VtZW50b3NbMF07XHJcblxyXG4gICAgICBsZXQgcGRmV2luZG93ID0gd2luZG93Lm9wZW4oJycpO1xyXG4gICAgICBwZGZXaW5kb3cuZG9jdW1lbnQud3JpdGUoXHJcbiAgICAgICAgJzxpZnJhbWUgd2lkdGg9XFwnMTAwJVxcJyBoZWlnaHQ9XFwnMTAwJVxcJyBzcmM9XFwnZGF0YTphcHBsaWNhdGlvbi9wZGY7YmFzZTY0LCAnICtcclxuICAgICAgICBlbmNvZGVVUkkoYjY0KSArICdcXCc+PC9pZnJhbWU+J1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLy8gfSlcclxuICB9XHJcblxyXG4gIG9wZW5MYWJlbFVybChldmVudCwgcXVlc3Rpb24pIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBsZXQgdHljID0gPEhUTUxJbnB1dEVsZW1lbnQ+IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGVjaycgKyBxdWVzdGlvbi5pZCk7XHJcbiAgICB0eWMuc3R5bGUuY29sb3IgPSAnI0EzQUQzMic7XHJcbiAgICB3aW5kb3cub3BlbihxdWVzdGlvbi51cmxsYWJlbCwgJ19ibGFuaycpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY2hlY2tUZXJtc0FuZENvbmRpdGlvbnModmFsdWUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAvLyBsZXQgaXBBZGRyZXNzID0gYXdhaXQgdGhpcy5hdXJvcmFTZXJ2aWNlLmdldElwQWRkcmVzcygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgaXBBZGRyZXNzID0gYXdhaXQgdGhpcy5nZXRJcEFkZHJlc3M7XHJcblxyXG4gICAgICBsZXQgb2JqVG9TZW5kID0ge1xyXG4gICAgICAgICdpZERvY3VtZW50byc6IHRoaXMucmVzcFNlcnZpY2VTZWdtZW50YXRpb24uaWREb2N1bWVudG8gfHwgJycsXHJcbiAgICAgICAgLy8gXCJpZERvY3VtZW50b1wiOiB0aGlzLnJlc3BTZXJ2aWNlU2VnbWVudGF0aW9uPy5pZERvY3VtZW50byB8fCBcIlwiLFxyXG4gICAgICAgICdub21icmVQb3J0YWZvbGlvJzogJzAnLFxyXG4gICAgICAgICdhcGxpY2FjaW9uJzogJ1pQX09GJyxcclxuICAgICAgICAnaXAnOiBpcEFkZHJlc3MuaXAsXHJcbiAgICAgICAgJ3RpcG9JZEFmaWwnOiAnQ0MnLFxyXG4gICAgICAgICdudW1lcm9JZEFmaWwnOiB0aGlzLmZvcm1EeW5hbWljLmNvbnRyb2xzWydudW1lcm9Eb2MnXS52YWx1ZS50b1N0cmluZygpLFxyXG4gICAgICAgICdudW1lcm9DdWVudGFQSSc6ICcwJyxcclxuICAgICAgICAndHJhbnNhY2Npb24nOiAnSU5JQ0lPIERFIFNFU0lPTl9PRicsXHJcbiAgICAgICAgJ2NvbmNlcHRvQWNlcHRhY2lvbic6ICdIQUJFQVNfREFUQV9VU09fQVBQJyxcclxuICAgICAgICAncmVzcHVlc3RhJzogJ1NJJyxcclxuICAgICAgICAndXN1YXJpb0NyZWFjaW9uJzogdGhpcy5mb3JtRHluYW1pYy5jb250cm9sc1snbnVtZXJvRG9jJ10udmFsdWUudG9TdHJpbmcoKVxyXG4gICAgICB9O1xyXG4gICAgICBsZXQgYWNlcHRhY2lvbmVzID0ge2FjZXB0YWNpb25lczogW29ialRvU2VuZF19O1xyXG4gICAgICAvLyB0aGlzLmV4dGVybmFsU2VydmljZS5zZXRBY2NlcHRhbmNlRG9jdW1lbnQoYWNlcHRhY2lvbmVzKS5zdWJzY3JpYmUoKCkgPT4geyB9KVxyXG4gICAgICB0aGlzLnNldEFjY2VwdGFuY2VEb2N1bWVudC5lbWl0KGFjZXB0YWNpb25lcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYW5jZWxsS2V5cHJlc3MoKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBlbWFpbFJ1bGVzVmFsaWRhdGUoZm9ybVF1ZXN0aW9uKSB7XHJcbiAgICBsZXQgdmFsT2sgPSB0cnVlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGhhc0Vycm9yID0gZmFsc2U7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1RdWVzdGlvbi5xdWVzdGlvbi5pZCkuc2V0QXR0cmlidXRlKCdoaWRkZW4nLCAndHJ1ZScpO1xyXG4gICAgICBsZXQgZW1sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uLmlkKTtcclxuICAgICAgbGV0IGVtYWlsID0gZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uLnJlZ2lzdHJlZDtcclxuICAgICAgaWYgKCFoYXNFcnJvcikge1xyXG4gICAgICAgIGlmIChmb3JtUXVlc3Rpb24ucXVlc3Rpb24ucmVxdWlyZWQgJiYgKGVtYWlsID09ICcnIHx8IGVtYWlsID09IHVuZGVmaW5lZCB8fCBlbWFpbCA9PSBudWxsKSkge1xyXG4gICAgICAgICAgZW1sLnN0eWxlLmJvcmRlckNvbG9yID0gJyNGRjAwMDAnO1xyXG4gICAgICAgICAgZW1sLnRleHRDb250ZW50ID0gJ0VsIGNvcnJlY28gZWzDqWN0cm9uaWNvIGVzIHJlcXVlcmlkbyc7XHJcbiAgICAgICAgICBlbWwucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTtcclxuICAgICAgICAgIHZhbE9rID0gZmFsc2U7XHJcbiAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICghaGFzRXJyb3IpIHtcclxuICAgICAgICBpZiAodGhpcy52YWxpZE1pbkxlbmd0aCh1bmRlZmluZWQsIGZvcm1RdWVzdGlvbi5xdWVzdGlvbikpIHtcclxuICAgICAgICAgIGVtbC5zdHlsZS5ib3JkZXJDb2xvciA9ICcjRkYwMDAwJztcclxuICAgICAgICAgIGVtbC50ZXh0Q29udGVudCA9ICdEZWJlIHNlciBtw61uaW1vIGRlICcgKyBmb3JtUXVlc3Rpb24ucXVlc3Rpb24ubWluTGVuZ3RoICsgJyBjYXJhY3RlcmVzJztcclxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1RdWVzdGlvbi5xdWVzdGlvbi5pZCkucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTtcclxuICAgICAgICAgIHZhbE9rID0gZmFsc2U7XHJcbiAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICghaGFzRXJyb3IpIHtcclxuICAgICAgICBpZiAodGhpcy52YWxpZE1heExlbmd0aCh1bmRlZmluZWQsIGZvcm1RdWVzdGlvbi5xdWVzdGlvbikpIHtcclxuICAgICAgICAgIGVtbC5zdHlsZS5ib3JkZXJDb2xvciA9ICcjRkYwMDAwJztcclxuICAgICAgICAgIGVtbC50ZXh0Q29udGVudCA9ICdEZWJlIHNlciBtYXhpbW8gZGUgJyArIGZvcm1RdWVzdGlvbi5xdWVzdGlvbi5tYXhMZW5ndGggKyAnIGNhcmFjdGVyZXMnO1xyXG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uLmlkKS5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpO1xyXG4gICAgICAgICAgdmFsT2sgPSBmYWxzZTtcclxuICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFoYXNFcnJvcikge1xyXG5cclxuICAgICAgICBjb25zdCBtYXRjaGVzID0gU3RyaW5nKGVtYWlsKS5tYXRjaCh0aGlzLnJlZ2V4VHlwZS5lbWFpbC5leHApO1xyXG4gICAgICAgIGlmIChtYXRjaGVzID09IG51bGwpIHtcclxuICAgICAgICAgIGVtbC5zdHlsZS5ib3JkZXJDb2xvciA9ICcjRkYwMDAwJztcclxuICAgICAgICAgIGVtbC50ZXh0Q29udGVudCA9ICdUdSBlbWFpbCBlcyBpbnZhbGlkbyc7XHJcbiAgICAgICAgICBlbWwucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTtcclxuICAgICAgICAgIHZhbE9rID0gZmFsc2U7XHJcbiAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsT2s7XHJcbiAgfVxyXG5cclxuICBjYWxlbmRhclJ1bGVzVmFsaWRhdGUoZm9ybVF1ZXN0aW9uKSB7XHJcbiAgICBsZXQgaGFzRXJyb3IgPSBmYWxzZTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1RdWVzdGlvbi5xdWVzdGlvbi5pZCkuc2V0QXR0cmlidXRlKCdoaWRkZW4nLCAndHJ1ZScpO1xyXG4gICAgICBsZXQgZWNhbGVuZGFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybVF1ZXN0aW9uLnF1ZXN0aW9uLmlkKTtcclxuICAgICAgLy9zZSB2YWxpZGEgcXVlIG5vIHNlYSBudWxsIHNpIGVzIHJlcXVlcmlkb1xyXG4gICAgICBsZXQgZGF0ZSA9IGZvcm1RdWVzdGlvbi5xdWVzdGlvbi5yZWdpc3RyZWQ7XHJcbiAgICAgIGlmIChmb3JtUXVlc3Rpb24ucXVlc3Rpb24ucmVxdWlyZWQgJiYgKGRhdGUgPT0gJycgfHwgZGF0ZSA9PSB1bmRlZmluZWQgfHwgZGF0ZSA9PSBudWxsKSkge1xyXG4gICAgICAgIGVjYWxlbmRhci5zdHlsZS5ib3JkZXJDb2xvciA9ICcjRkYwMDAwJztcclxuICAgICAgICBlY2FsZW5kYXIudGV4dENvbnRlbnQgPSAnTGEgZmVjaGEgZXMgcmVxdWVyaWRhJztcclxuICAgICAgICBlY2FsZW5kYXIucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZU5vdFNwYWNlKGV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQuY2hhckNvZGUgPT0gMzIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==