iptdevs-design-system 3.1.4396 → 3.2.2
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/esm2020/lib/cod/cod-form/cod-form.component.mjs +34 -21
- package/esm2020/lib/cod/logic/calculate-quotes.service.mjs +73 -53
- package/esm2020/lib/cod/modal-referred/modal-referred.component.mjs +2 -2
- package/esm2020/lib/cod/steps/cod-form-step-five/cod-form-step-five.component.mjs +18 -24
- package/esm2020/lib/cod/steps/cod-form-step-four/cod-form-step-four.component.mjs +85 -76
- package/esm2020/lib/cod/steps/cod-form-step-one/cod-form-step-one.component.mjs +225 -92
- package/esm2020/lib/cod/steps/cod-form-step-three/cod-form-step-three.component.mjs +14 -18
- package/esm2020/lib/cod/steps/cod-form-step-two/cod-form-step-two.component.mjs +95 -70
- package/esm2020/lib/cod-self-managed/cod-form-self-managed/cod-self-managed.component.mjs +190 -22
- package/esm2020/lib/cod-self-managed/cod-self-managed.module.mjs +28 -4
- package/esm2020/lib/cod-self-managed/logic/calculate-quotes.service.mjs +99 -0
- package/esm2020/lib/cod-self-managed/logic/cod-self-managed-controls.mjs +16 -44
- package/esm2020/lib/cod-self-managed/logic/cod-self-managed-steps.mjs +1 -1
- package/esm2020/lib/cod-self-managed/steps/cod-form-step-four/cod-self-form-step-four.component.mjs +244 -7
- package/esm2020/lib/cod-self-managed/steps/cod-form-step-one/cod-self-form-step-one.component.mjs +102 -18
- package/esm2020/lib/cod-self-managed/steps/cod-form-step-three/cod-self-form-step-three.component.mjs +255 -7
- package/esm2020/lib/cod-self-managed/steps/cod-form-step-two/cod-self-form-step-two.component.mjs +144 -32
- package/esm2020/lib/components/atoms/button/button.component.mjs +2 -2
- package/esm2020/lib/components/atoms/datalist/datalist.component.mjs +26 -17
- package/esm2020/lib/components/atoms/input/input.component.mjs +2 -2
- package/esm2020/lib/components/atoms/level-button/level-button.component.mjs +2 -2
- package/esm2020/lib/components/atoms/loader/loader.component.mjs +2 -2
- package/esm2020/lib/components/atoms/select/select.component.mjs +10 -8
- package/esm2020/lib/components/components.module.mjs +54 -8
- package/esm2020/lib/components/forms/create-user-form/create-user-form.component.mjs +3 -3
- package/esm2020/lib/components/forms/update-user-form/update-user-form.component.mjs +763 -0
- package/esm2020/lib/components/molecules/card-course/card-course.component.mjs +95 -0
- package/esm2020/lib/components/molecules/card-select-course/card-select-course.component.mjs +52 -0
- package/esm2020/lib/components/molecules/sidenav/sidenav.component.mjs +5 -5
- package/esm2020/lib/core/core.module.mjs +9 -3
- package/esm2020/lib/core/models/academic/academic.component.mjs +1 -1
- package/esm2020/lib/core/models/announcement/announcement-user-rq.model.mjs +2 -0
- package/esm2020/lib/core/models/announcement/announcement-user-rs.model.mjs +3 -0
- package/esm2020/lib/core/models/attendance/attendance.interface.mjs +1 -1
- package/esm2020/lib/core/models/budget/budget.model.mjs +1 -1
- package/esm2020/lib/core/models/cod/cod-rq.model.mjs +1 -1
- package/esm2020/lib/core/models/commercial/commercial.model.mjs +1 -1
- package/esm2020/lib/core/models/course/course-rq.model.mjs +1 -1
- package/esm2020/lib/core/models/course/courses.model.mjs +1 -1
- package/esm2020/lib/core/models/epayco/epayco.interfaces.mjs +2 -0
- package/esm2020/lib/core/models/notes/INotesTemplate.mjs +1 -1
- package/esm2020/lib/core/models/notes/notes.interface.mjs +1 -1
- package/esm2020/lib/core/models/parameters/parameters-rs.model.mjs +1 -1
- package/esm2020/lib/core/models/payment/payment-rq.model.mjs +1 -1
- package/esm2020/lib/core/models/student/student.interface.mjs +1 -1
- package/esm2020/lib/core/models/terms/terms-rs.model.mjs +2 -0
- package/esm2020/lib/core/models/transfer/transfer.model.mjs +2 -0
- package/esm2020/lib/core/models/user/user-rq.model.mjs +1 -1
- package/esm2020/lib/core/models/user/user-rs.model.mjs +3 -1
- package/esm2020/lib/core/pipes/course-pipes/schedule-form.pipe.mjs +47 -0
- package/esm2020/lib/core/pipes/course-pipes/time-form.pipe.mjs +34 -0
- package/esm2020/lib/core/pipes/course-pipes/type-level.pipe.mjs +57 -0
- package/esm2020/lib/core/pipes/parameter-pipes/gender-display.pipe.mjs +22 -0
- package/esm2020/lib/core/pipes/pipe.module.mjs +37 -0
- package/esm2020/lib/core/services/academic-service/academic.service.mjs +64 -1
- package/esm2020/lib/core/services/announcement/announcement.service.mjs +57 -0
- package/esm2020/lib/core/services/attendance-service/attendance.service.mjs +31 -1
- package/esm2020/lib/core/services/budget-service/budget-service.mjs +297 -1
- package/esm2020/lib/core/services/certificate-service/certificate.service.mjs +21 -1
- package/esm2020/lib/core/services/commercial-service/comercial.service.mjs +95 -1
- package/esm2020/lib/core/services/course-service/course-service.model.mjs +96 -1
- package/esm2020/lib/core/services/ePayco/epayco.service.mjs +37 -0
- package/esm2020/lib/core/services/notes-service/notes.service.mjs +6 -1
- package/esm2020/lib/core/services/parameters-service/parameters.service.mjs +13 -1
- package/esm2020/lib/core/services/user-service/user-service.mjs +55 -1
- package/esm2020/public-api.mjs +13 -1
- package/fesm2015/iptdevs-design-system.mjs +6948 -3967
- package/fesm2015/iptdevs-design-system.mjs.map +1 -1
- package/fesm2020/iptdevs-design-system.mjs +7003 -4046
- package/fesm2020/iptdevs-design-system.mjs.map +1 -1
- package/lib/cod/cod-form/cod-form.component.d.ts +7 -2
- package/lib/cod/logic/calculate-quotes.service.d.ts +3 -0
- package/lib/cod/steps/cod-form-step-five/cod-form-step-five.component.d.ts +4 -4
- package/lib/cod/steps/cod-form-step-four/cod-form-step-four.component.d.ts +6 -9
- package/lib/cod/steps/cod-form-step-one/cod-form-step-one.component.d.ts +9 -7
- package/lib/cod/steps/cod-form-step-three/cod-form-step-three.component.d.ts +4 -4
- package/lib/cod/steps/cod-form-step-two/cod-form-step-two.component.d.ts +8 -5
- package/lib/cod-self-managed/cod-form-self-managed/cod-self-managed.component.d.ts +31 -7
- package/lib/cod-self-managed/cod-self-managed.module.d.ts +7 -1
- package/lib/cod-self-managed/logic/calculate-quotes.service.d.ts +16 -0
- package/lib/cod-self-managed/steps/cod-form-step-four/cod-self-form-step-four.component.d.ts +46 -2
- package/lib/cod-self-managed/steps/cod-form-step-one/cod-self-form-step-one.component.d.ts +17 -5
- package/lib/cod-self-managed/steps/cod-form-step-three/cod-self-form-step-three.component.d.ts +48 -3
- package/lib/cod-self-managed/steps/cod-form-step-two/cod-self-form-step-two.component.d.ts +43 -9
- package/lib/components/atoms/datalist/datalist.component.d.ts +7 -3
- package/lib/components/atoms/select/select.component.d.ts +2 -1
- package/lib/components/components.module.d.ts +14 -5
- package/lib/components/forms/update-user-form/update-user-form.component.d.ts +87 -0
- package/lib/components/molecules/card-course/card-course.component.d.ts +21 -0
- package/lib/components/molecules/card-select-course/card-select-course.component.d.ts +13 -0
- package/lib/core/models/academic/academic.component.d.ts +143 -1
- package/lib/core/models/announcement/announcement-user-rq.model.d.ts +12 -0
- package/lib/core/models/announcement/announcement-user-rs.model.d.ts +7 -0
- package/lib/core/models/attendance/attendance.interface.d.ts +146 -0
- package/lib/core/models/budget/budget.model.d.ts +554 -0
- package/lib/core/models/cod/cod-rq.model.d.ts +193 -0
- package/lib/core/models/commercial/commercial.model.d.ts +91 -0
- package/lib/core/models/course/course-rq.model.d.ts +296 -22
- package/lib/core/models/course/courses.model.d.ts +51 -0
- package/lib/core/models/epayco/epayco.interfaces.d.ts +6 -0
- package/lib/core/models/notes/INotesTemplate.d.ts +57 -0
- package/lib/core/models/notes/notes.interface.d.ts +13 -0
- package/lib/core/models/parameters/parameters-rs.model.d.ts +78 -1
- package/lib/core/models/payment/payment-rq.model.d.ts +168 -0
- package/lib/core/models/student/student.interface.d.ts +18 -0
- package/lib/core/models/terms/terms-rs.model.d.ts +435 -0
- package/lib/core/models/transfer/transfer.model.d.ts +89 -0
- package/lib/core/models/user/user-rq.model.d.ts +78 -0
- package/lib/core/models/user/user-rs.model.d.ts +11 -0
- package/lib/core/pipes/course-pipes/schedule-form.pipe.d.ts +7 -0
- package/lib/core/pipes/course-pipes/time-form.pipe.d.ts +9 -0
- package/lib/core/pipes/course-pipes/type-level.pipe.d.ts +7 -0
- package/lib/core/pipes/parameter-pipes/gender-display.pipe.d.ts +7 -0
- package/lib/core/pipes/pipe.module.d.ts +11 -0
- package/lib/core/services/academic-service/academic.service.d.ts +18 -3
- package/lib/core/services/announcement/announcement.service.d.ts +18 -0
- package/lib/core/services/attendance-service/attendance.service.d.ts +7 -1
- package/lib/core/services/budget-service/budget-service.d.ts +57 -3
- package/lib/core/services/certificate-service/certificate.service.d.ts +5 -0
- package/lib/core/services/commercial-service/comercial.service.d.ts +23 -2
- package/lib/core/services/course-service/course-service.model.d.ts +22 -1
- package/lib/core/services/ePayco/epayco.service.d.ts +17 -0
- package/lib/core/services/notes-service/notes.service.d.ts +2 -1
- package/lib/core/services/parameters-service/parameters.service.d.ts +3 -0
- package/lib/core/services/user-service/user-service.d.ts +12 -1
- package/package.json +1 -1
- package/public-api.d.ts +11 -0
|
@@ -2,28 +2,32 @@ import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
|
2
2
|
import { Validators } from '@angular/forms';
|
|
3
3
|
import { CodFormControls } from '../../logic/cod-form-controls';
|
|
4
4
|
import { CodFormSteps } from '../../logic/cod-form-steps';
|
|
5
|
+
import { finalize } from 'rxjs';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "@angular/forms";
|
|
7
|
-
import * as i2 from "../../../core/services/
|
|
8
|
-
import * as i3 from "../../../core/
|
|
9
|
-
import * as i4 from "../../../core/
|
|
10
|
-
import * as i5 from "
|
|
11
|
-
import * as i6 from "
|
|
12
|
-
import * as i7 from "
|
|
8
|
+
import * as i2 from "../../../core/services/copies.service";
|
|
9
|
+
import * as i3 from "../../../core/utils/base-service/base.service";
|
|
10
|
+
import * as i4 from "../../../core/services/course-service/course-service.model";
|
|
11
|
+
import * as i5 from "../../logic/communicator.service";
|
|
12
|
+
import * as i6 from "@angular/common";
|
|
13
|
+
import * as i7 from "../../../components/atoms/loader/loader.component";
|
|
13
14
|
import * as i8 from "../../../components/atoms/select/select.component";
|
|
14
15
|
import * as i9 from "primeng/button";
|
|
15
16
|
export class CodFormStepOneComponent extends CodFormSteps {
|
|
16
|
-
constructor(fb,
|
|
17
|
+
constructor(fb, copiesService, baseService, courseService, communicatorService, cdRef) {
|
|
17
18
|
super();
|
|
18
19
|
this.fb = fb;
|
|
19
|
-
this.parameterService = parameterService;
|
|
20
20
|
this.copiesService = copiesService;
|
|
21
21
|
this.baseService = baseService;
|
|
22
22
|
this.courseService = courseService;
|
|
23
23
|
this.communicatorService = communicatorService;
|
|
24
24
|
this.cdRef = cdRef;
|
|
25
25
|
this.changeStepEvent = new EventEmitter();
|
|
26
|
+
this.isLoading = false;
|
|
27
|
+
// Parameters
|
|
28
|
+
this.agreements = [];
|
|
26
29
|
this.availibleCourses = [];
|
|
30
|
+
this.course_type = [];
|
|
27
31
|
this.isDisabledSel = false;
|
|
28
32
|
// Controls del formulario
|
|
29
33
|
this.controls = new CodFormControls().controls[0];
|
|
@@ -36,40 +40,94 @@ export class CodFormStepOneComponent extends CodFormSteps {
|
|
|
36
40
|
Nota: la clase CodFormSteps() se encarga de toda la lógica de LS con los pasos del formulario del COD
|
|
37
41
|
*/
|
|
38
42
|
ngOnChanges(changes) {
|
|
39
|
-
this.getParameters();
|
|
40
43
|
this.initForm();
|
|
44
|
+
this.getParameters();
|
|
41
45
|
this.startLocalStorageWork();
|
|
42
46
|
this.setValuesByLocalStorage();
|
|
43
47
|
this.codFormStepOne.controls['course_type'].valueChanges
|
|
44
48
|
.subscribe(value => this.communicatorService.setCurrentCourseType(value));
|
|
45
49
|
this.communicatorService.setCurrentAgreement(this.localStorageCOD.getCodFormData(1, 'agreement_by_category'));
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
this.
|
|
50
|
+
// Lógica principal de cambios
|
|
51
|
+
if (changes['initialData'] || changes['dataPreviusCodData']) {
|
|
52
|
+
this.handleDataChanges(changes);
|
|
49
53
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
54
|
+
this.cdRef.detectChanges();
|
|
55
|
+
// const shouldProcessInitialData = changes['initialData'] &&
|
|
56
|
+
// this.initialData != null &&
|
|
57
|
+
// this.dataPreviusCodData === null;
|
|
58
|
+
// const shouldProcessPreviusData = this.dataPreviusCodData != null &&
|
|
59
|
+
// this.isEditCod === false &&
|
|
60
|
+
// this.isRenovation === false;
|
|
61
|
+
// if (shouldProcessInitialData || shouldProcessPreviusData) {
|
|
62
|
+
// this.processData(this.initialData);
|
|
63
|
+
// this.cdRef.detectChanges();
|
|
64
|
+
// console.log("Entro en this.processData con initialData");
|
|
65
|
+
// } else {
|
|
66
|
+
// // Manejo más controlado del "else"
|
|
67
|
+
// console.log("entre en el else que borra todo en null");
|
|
68
|
+
// this.codFormStepOne.controls['academic_plan'].setValue(null);
|
|
69
|
+
// this.codFormStepOne.controls['course_type'].setValue(null);
|
|
70
|
+
// this.codFormStepOne.controls['agreement_by_category'].setValue(null);
|
|
71
|
+
// this.codFormStepOne.controls['english_level'].setValue(null);
|
|
72
|
+
// this.codFormStepOne.controls['availible_courses'].setValue(null);
|
|
73
|
+
// this.codFormStepOne.controls['course_modality'].setValue(null);
|
|
74
|
+
// }
|
|
75
|
+
// if (changes['initialData'] && this.initialData != null && this.dataPreviusCodData === null || this.dataPreviusCodData != null && this.isEditCod === false && this.isRenovation === false) {
|
|
76
|
+
// this.processData(this.initialData);
|
|
77
|
+
// console.log("Entro en this.processData con initialData");
|
|
78
|
+
// this.cdRef.detectChanges();
|
|
79
|
+
// }else{
|
|
80
|
+
// this.codFormStepOne.controls['academic_plan'].setValue(null);
|
|
81
|
+
// this.codFormStepOne.controls['course_type'].setValue(null);
|
|
82
|
+
// this.codFormStepOne.controls['agreement_by_category'].setValue(null);
|
|
83
|
+
// this.codFormStepOne.controls['english_level'].setValue(null);
|
|
84
|
+
// this.codFormStepOne.controls['availible_courses'].setValue(null);
|
|
85
|
+
// this.codFormStepOne.controls['course_modality'].setValue(null);
|
|
86
|
+
// }
|
|
87
|
+
// if (changes['dataPreviusCodData'] && this.dataPreviusCodData != null && this.isEditCod && this.isRenovation === false ) {
|
|
88
|
+
// this.processData(this.dataPreviusCodData);
|
|
89
|
+
// console.log("Entro en this.processData con dataPreviusCodData");
|
|
90
|
+
// if (this.isEditCod && !this.dataPreviusCodData.edit_course_payment) {
|
|
91
|
+
// this.isDisabledSel = true;
|
|
92
|
+
// } else {
|
|
93
|
+
// this.isDisabledSel = false;
|
|
94
|
+
// }
|
|
95
|
+
// this.cdRef.detectChanges();
|
|
96
|
+
// }else if(changes['dataPreviusCodData'] && this.dataPreviusCodData != null && !this.isEditCod && this.courseSelectRenovation && this.isRenovation === true ){
|
|
97
|
+
// this.setDataCodRenovationSelect();
|
|
98
|
+
// this.isDisabledSel= true
|
|
99
|
+
// this.cdRef.detectChanges();
|
|
100
|
+
// }
|
|
101
|
+
}
|
|
102
|
+
handleDataChanges(changes) {
|
|
103
|
+
// Caso 1: Hay initialData y NO hay dataPreviusCodData
|
|
104
|
+
if (changes['initialData']?.currentValue && !this.isRenovation && !this.isEditCod) {
|
|
105
|
+
this.processData(this.initialData);
|
|
106
|
+
return;
|
|
57
107
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
108
|
+
// Caso 2: Hay dataPreviusCodData
|
|
109
|
+
if (changes['dataPreviusCodData']?.currentValue) {
|
|
110
|
+
// Subcaso 2.1: Es edición
|
|
111
|
+
if (this.isEditCod && !this.isRenovation) {
|
|
112
|
+
this.processData(this.dataPreviusCodData);
|
|
113
|
+
this.isDisabledSel = !this.dataPreviusCodData.edit_course_payment;
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
// Subcaso 2.2: Es renovación
|
|
117
|
+
if (!this.isEditCod && this.isRenovation && this.courseSelectRenovation) {
|
|
118
|
+
this.setDataCodRenovationSelect();
|
|
61
119
|
this.isDisabledSel = true;
|
|
120
|
+
return;
|
|
62
121
|
}
|
|
63
|
-
|
|
122
|
+
// Subcaso 2.2: viene con initialData
|
|
123
|
+
if (this.initialData && !this.isEditCod && !this.isRenovation) {
|
|
124
|
+
this.processData(this.initialData);
|
|
64
125
|
this.isDisabledSel = false;
|
|
126
|
+
return;
|
|
65
127
|
}
|
|
66
|
-
this.cdRef.detectChanges();
|
|
67
|
-
}
|
|
68
|
-
else if (changes['dataPreviusCodData'] && this.dataPreviusCodData != null && !this.isEditCod && this.courseSelectRenovation && this.isRenovation === true) {
|
|
69
|
-
this.setDataCodRenovationSelect();
|
|
70
|
-
this.isDisabledSel = true;
|
|
71
|
-
this.cdRef.detectChanges();
|
|
72
128
|
}
|
|
129
|
+
// Caso 3: Ninguna condición anterior se cumplió (reset controlado)
|
|
130
|
+
this.resetForm();
|
|
73
131
|
}
|
|
74
132
|
processData(data) {
|
|
75
133
|
const { codFormStepOne } = this;
|
|
@@ -122,12 +180,8 @@ export class CodFormStepOneComponent extends CodFormSteps {
|
|
|
122
180
|
});
|
|
123
181
|
}
|
|
124
182
|
getParameters() {
|
|
125
|
-
this.
|
|
126
|
-
|
|
127
|
-
});
|
|
128
|
-
this.parameterService.getLevels().subscribe((response) => {
|
|
129
|
-
this.levels = response.data;
|
|
130
|
-
});
|
|
183
|
+
this.plans = this.parametersAll?.academicPlan;
|
|
184
|
+
this.levels = this.parametersAll?.english_levels;
|
|
131
185
|
}
|
|
132
186
|
initForm() {
|
|
133
187
|
this.codFormStepOne = this.fb.group({
|
|
@@ -140,22 +194,16 @@ export class CodFormStepOneComponent extends CodFormSteps {
|
|
|
140
194
|
});
|
|
141
195
|
}
|
|
142
196
|
setValuesByLocalStorage() {
|
|
143
|
-
const academicPlan = this.codFormStepOne.controls['academic_plan'].value
|
|
144
|
-
if (
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
const agreementByCategory = this.codFormStepOne.controls['agreement_by_category'].value
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
return;
|
|
154
|
-
this.getAvailibleCourses();
|
|
155
|
-
const courseModality = this.codFormStepOne.controls['course_modality'].value || null;
|
|
156
|
-
if (!courseModality)
|
|
157
|
-
return;
|
|
158
|
-
this.getAvailibleCourses();
|
|
197
|
+
const academicPlan = this.codFormStepOne.controls['academic_plan'].value;
|
|
198
|
+
if (academicPlan) {
|
|
199
|
+
this.selectAcademicPlan(academicPlan);
|
|
200
|
+
}
|
|
201
|
+
const agreementByCategory = parseInt(this.codFormStepOne.controls['agreement_by_category'].value);
|
|
202
|
+
const englishLevel = parseInt(this.codFormStepOne.controls['english_level'].value);
|
|
203
|
+
const courseModality = parseInt(this.codFormStepOne.controls['course_modality'].value);
|
|
204
|
+
if (agreementByCategory && englishLevel && courseModality) {
|
|
205
|
+
this.getAvailibleCourses();
|
|
206
|
+
}
|
|
159
207
|
}
|
|
160
208
|
sendForm() {
|
|
161
209
|
this.codFormStepOne.markAsTouched();
|
|
@@ -165,18 +213,24 @@ export class CodFormStepOneComponent extends CodFormSteps {
|
|
|
165
213
|
this.changeStepEvent.emit(1);
|
|
166
214
|
}
|
|
167
215
|
resetForm() {
|
|
168
|
-
this.resetLocalStorage(this.controls);
|
|
169
|
-
this.codFormStepOne.reset();
|
|
216
|
+
// this.resetLocalStorage(this.controls);
|
|
217
|
+
// this.codFormStepOne.reset();
|
|
218
|
+
this.codFormStepOne.controls['academic_plan'].setValue(null);
|
|
219
|
+
this.codFormStepOne.controls['course_type'].setValue(null);
|
|
220
|
+
this.codFormStepOne.controls['agreement_by_category'].setValue(null);
|
|
221
|
+
this.codFormStepOne.controls['english_level'].setValue(null);
|
|
222
|
+
this.codFormStepOne.controls['availible_courses'].setValue(null);
|
|
223
|
+
this.codFormStepOne.controls['course_modality'].setValue(null);
|
|
170
224
|
}
|
|
171
225
|
// Eventos de los selects
|
|
172
226
|
selectAcademicPlan(academic_plan) {
|
|
173
227
|
if (academic_plan !== 'Plan') {
|
|
174
|
-
this.codFormStepOne.controls['academic_plan'].setValue(academic_plan);
|
|
228
|
+
this.codFormStepOne.controls['academic_plan'].setValue(parseInt(academic_plan));
|
|
175
229
|
// this.codFormStepOne.controls['agreement_by_category'].setValue(null);
|
|
176
230
|
// this.codFormStepOne.controls['school_name'].setValue(null);
|
|
177
231
|
// this.codFormStepOne.controls['course_type'].setValue(null);
|
|
178
|
-
this.getCourseType(academic_plan);
|
|
179
|
-
this.getAgreementByPlan(academic_plan);
|
|
232
|
+
this.getCourseType(parseInt(academic_plan));
|
|
233
|
+
this.getAgreementByPlan(parseInt(academic_plan));
|
|
180
234
|
}
|
|
181
235
|
else {
|
|
182
236
|
this.codFormStepOne.controls['academic_plan'].setValue(null);
|
|
@@ -185,18 +239,31 @@ export class CodFormStepOneComponent extends CodFormSteps {
|
|
|
185
239
|
}
|
|
186
240
|
}
|
|
187
241
|
getCourseType(plan) {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
242
|
+
const planNumber = typeof plan === 'string' ? parseInt(plan) : plan;
|
|
243
|
+
if (this.parametersAll && this.parametersAll?.courseType) {
|
|
244
|
+
this.course_type = this.parametersAll.courseType.filter((course) => {
|
|
245
|
+
return course.academic_plan === planNumber;
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
this.course_type = [];
|
|
250
|
+
}
|
|
191
251
|
}
|
|
192
252
|
getAgreementByPlan(plan) {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
253
|
+
const planNumber = typeof plan === 'string' ? parseInt(plan) : plan;
|
|
254
|
+
if (this.parametersAll && this.parametersAll?.agreement) {
|
|
255
|
+
this.agreements = this.parametersAll.agreement.filter((agreement) => {
|
|
256
|
+
return agreement.category === planNumber;
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
this.agreements = [];
|
|
261
|
+
}
|
|
196
262
|
}
|
|
197
263
|
selectCoursesTypesByPlan(coursesTypes) {
|
|
198
264
|
if (coursesTypes !== 'Tipo de plan') {
|
|
199
265
|
this.codFormStepOne.controls['course_modality'].setValue(null);
|
|
266
|
+
this.codFormStepOne.controls['availible_courses'].setValue(null);
|
|
200
267
|
this.codFormStepOne.controls['course_type'].setValue(coursesTypes);
|
|
201
268
|
this.getAvailibleCourses();
|
|
202
269
|
}
|
|
@@ -206,10 +273,10 @@ export class CodFormStepOneComponent extends CodFormSteps {
|
|
|
206
273
|
}
|
|
207
274
|
selectAgreementByCategory(agreementByCategories) {
|
|
208
275
|
if (agreementByCategories !== 'Convenio por categoria') {
|
|
209
|
-
this.codFormStepOne.controls['course_modality'].setValue(null);
|
|
276
|
+
// this.codFormStepOne.controls['course_modality'].setValue(null);
|
|
210
277
|
this.codFormStepOne.controls['agreement_by_category'].setValue(agreementByCategories);
|
|
211
278
|
this.communicatorService.setCurrentAgreement(agreementByCategories);
|
|
212
|
-
this.getAvailibleCourses();
|
|
279
|
+
// this.getAvailibleCourses();
|
|
213
280
|
}
|
|
214
281
|
else {
|
|
215
282
|
this.codFormStepOne.controls['agreement_by_category'].setValue(null);
|
|
@@ -219,6 +286,7 @@ export class CodFormStepOneComponent extends CodFormSteps {
|
|
|
219
286
|
selectLevel(levels) {
|
|
220
287
|
if (levels !== 'Nivel de inglés') {
|
|
221
288
|
this.codFormStepOne.controls['course_modality'].setValue(null);
|
|
289
|
+
this.codFormStepOne.controls['availible_courses'].setValue(null);
|
|
222
290
|
this.codFormStepOne.controls['english_level'].setValue(levels);
|
|
223
291
|
this.getAvailibleCourses();
|
|
224
292
|
}
|
|
@@ -240,37 +308,100 @@ export class CodFormStepOneComponent extends CodFormSteps {
|
|
|
240
308
|
}
|
|
241
309
|
}
|
|
242
310
|
validRequest() {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
311
|
+
const form = this.codFormStepOne;
|
|
312
|
+
return !!(form.get('english_level')?.value &&
|
|
313
|
+
form.get('agreement_by_category')?.value &&
|
|
314
|
+
form.get('course_type')?.value);
|
|
246
315
|
}
|
|
316
|
+
// getAvailibleCourses() {
|
|
317
|
+
// if (this.validRequest()) {
|
|
318
|
+
// this.isLoading = true;
|
|
319
|
+
// let request_availibleCourses: GetAvailibleCoursesRq = {
|
|
320
|
+
// token: this.baseService.getUserToken(),
|
|
321
|
+
// english_level: this.codFormStepOne.controls['english_level'].value,
|
|
322
|
+
// agreement: this.codFormStepOne.controls['agreement_by_category'].value,
|
|
323
|
+
// course_type: this.codFormStepOne.controls['course_type'].value,
|
|
324
|
+
// };
|
|
325
|
+
// this.courseService.getAvailableCoursesByLevAgreeCType(request_availibleCourses).subscribe((response) => {
|
|
326
|
+
// if (response.data) {
|
|
327
|
+
// this.availibleCourses = [];
|
|
328
|
+
// let courses: any[] = response.data;
|
|
329
|
+
// this.hasAvailableCourse = true;
|
|
330
|
+
// courses.forEach(course => {
|
|
331
|
+
// let scheduleParts = course.course_schedule[0].split(" ");
|
|
332
|
+
// let startTime = scheduleParts[2];
|
|
333
|
+
// this.availibleCourses.push({
|
|
334
|
+
// code: course.code,
|
|
335
|
+
// name: `${course.code} Curso ${course.course_modality.name === 'Presencial' ? 'Presencial' : 'Virtual'} - Teacher ${course.teacher} - Fecha de inicio: ${course.to_start}, Hora de inicio: ${startTime}, Cupos disp: ${course.available_capacity}`,
|
|
336
|
+
// modality: course.course_modality.code
|
|
337
|
+
// });
|
|
338
|
+
// })
|
|
339
|
+
// this.isLoading = false;
|
|
340
|
+
// console.log("availibleCourses",this.availibleCourses);
|
|
341
|
+
// console.log("Valores del formulario:", {
|
|
342
|
+
// academic_plan: this.codFormStepOne.controls['academic_plan'].value,
|
|
343
|
+
// course_type: this.codFormStepOne.controls['course_type'].value,
|
|
344
|
+
// agreement_by_category: this.codFormStepOne.controls['agreement_by_category'].value,
|
|
345
|
+
// english_level: this.codFormStepOne.controls['english_level'].value,
|
|
346
|
+
// availible_courses: this.codFormStepOne.controls['availible_courses'].value,
|
|
347
|
+
// course_modality: this.codFormStepOne.controls['course_modality'].value,
|
|
348
|
+
// agreement: this.codFormStepOne.controls['agreement'].value,
|
|
349
|
+
// });
|
|
350
|
+
// } else {
|
|
351
|
+
// this.hasAvailableCourse = false;
|
|
352
|
+
// this.codFormStepOne.controls['availible_courses'].setValue("");
|
|
353
|
+
// this.setValueStepFour();
|
|
354
|
+
// this.isLoading = false;
|
|
355
|
+
// }
|
|
356
|
+
// });
|
|
357
|
+
// }
|
|
358
|
+
// }
|
|
247
359
|
getAvailibleCourses() {
|
|
248
|
-
this.
|
|
360
|
+
if (this.isLoading)
|
|
361
|
+
return;
|
|
249
362
|
if (this.validRequest()) {
|
|
363
|
+
this.isLoading = true;
|
|
364
|
+
// Guarda los valores actuales antes de la llamada
|
|
365
|
+
const currentValues = {
|
|
366
|
+
academic_plan: this.codFormStepOne.get('academic_plan')?.value,
|
|
367
|
+
course_type: this.codFormStepOne.get('course_type')?.value,
|
|
368
|
+
agreement_by_category: this.codFormStepOne.get('agreement_by_category')?.value,
|
|
369
|
+
english_level: this.codFormStepOne.get('english_level')?.value
|
|
370
|
+
};
|
|
250
371
|
let request_availibleCourses = {
|
|
251
372
|
token: this.baseService.getUserToken(),
|
|
252
|
-
english_level:
|
|
253
|
-
agreement:
|
|
254
|
-
course_type:
|
|
373
|
+
english_level: currentValues.english_level,
|
|
374
|
+
agreement: currentValues.agreement_by_category,
|
|
375
|
+
course_type: currentValues.course_type,
|
|
255
376
|
};
|
|
256
|
-
this.courseService.getAvailableCoursesByLevAgreeCType(request_availibleCourses)
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
377
|
+
this.courseService.getAvailableCoursesByLevAgreeCType(request_availibleCourses)
|
|
378
|
+
.pipe(finalize(() => {
|
|
379
|
+
this.isLoading = false;
|
|
380
|
+
this.cdRef.detectChanges();
|
|
381
|
+
}))
|
|
382
|
+
.subscribe({
|
|
383
|
+
next: (response) => {
|
|
384
|
+
if (response.data) {
|
|
385
|
+
this.availibleCourses = response.data.map((course) => {
|
|
386
|
+
let scheduleParts = course.course_schedule[0]?.split(" ") || [];
|
|
387
|
+
let startTime = scheduleParts[2] || '';
|
|
388
|
+
return {
|
|
389
|
+
code: course.code,
|
|
390
|
+
name: `${course.code} Curso ${course.course_modality?.name === 'Presencial' ? 'Presencial' : 'Virtual'} - Teacher ${course.teacher} - Fecha de inicio: ${course.to_start}, Hora de inicio: ${startTime}, Cupos disp: ${course.available_capacity}`,
|
|
391
|
+
modality: course.course_modality?.code
|
|
392
|
+
};
|
|
267
393
|
});
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
394
|
+
this.hasAvailableCourse = true;
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
this.hasAvailableCourse = false;
|
|
398
|
+
this.codFormStepOne.get('availible_courses')?.setValue(null);
|
|
399
|
+
this.setValueStepFour();
|
|
400
|
+
}
|
|
401
|
+
},
|
|
402
|
+
error: (err) => {
|
|
271
403
|
this.hasAvailableCourse = false;
|
|
272
|
-
this.
|
|
273
|
-
this.setValueStepFour();
|
|
404
|
+
this.cdRef.detectChanges();
|
|
274
405
|
}
|
|
275
406
|
});
|
|
276
407
|
}
|
|
@@ -281,12 +412,12 @@ export class CodFormStepOneComponent extends CodFormSteps {
|
|
|
281
412
|
this.setDataInLocalStorage(4, 'total_price', null);
|
|
282
413
|
}
|
|
283
414
|
}
|
|
284
|
-
CodFormStepOneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: CodFormStepOneComponent, deps: [{ token: i1.FormBuilder }, { token: i2.
|
|
285
|
-
CodFormStepOneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.7", type: CodFormStepOneComponent, selector: "app-cod-form-step-one", inputs: { initialData: "initialData", dataPreviusCodData: "dataPreviusCodData", isEditCod: "isEditCod", courseSelectRenovation: "courseSelectRenovation", isRenovation: "isRenovation" }, outputs: { changeStepEvent: "changeStepEvent" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<form [formGroup]=\"codFormStepOne\" class=\"grid\">\n <div class=\"col\">\n <ipt-select\n [initialValue]=\"codFormStepOne.controls['academic_plan'].value\"\n [selectCode]=\"codFormStepOne.controls['academic_plan'].value === null? 'Plan': codFormStepOne.controls['academic_plan'].value\"\n [defaultText]=\"'Plan'\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectAcademicPlan($event)\"\n [data]=\"plans\"\n [control]=\"codFormStepOne.controls['academic_plan']\"\n [disabledSel]=\"isDisabledSel\"\n ></ipt-select>\n <ipt-select\n [initialValue]=\"codFormStepOne.controls['course_type'].value\"\n [selectCode]=\"codFormStepOne.controls['course_type'].value === null? 'Tipo de plan': codFormStepOne.controls['course_type'].value\"\n [defaultText]=\"'Tipo de plan'\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectCoursesTypesByPlan($event)\"\n [data]=\"course_type\"\n [control]=\"codFormStepOne.controls['course_type']\"\n [disabledSel]=\"isDisabledSel\"\n ></ipt-select>\n </div>\n <div class=\"col\">\n <ipt-select\n [initialValue]=\"codFormStepOne.controls['agreement_by_category'].value\"\n [selectCode]=\"codFormStepOne.controls['agreement_by_category'].value === null? 'Convenio por categoria': codFormStepOne.controls['agreement_by_category'].value\"\n [defaultText]=\"'Convenio por categoria'\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectAgreementByCategory($event)\"\n [data]=\"agreements\"\n [control]=\"codFormStepOne.controls['agreement_by_category']\"\n [disabledSel]=\"isDisabledSel\"\n ></ipt-select>\n <ipt-select\n [initialValue]=\"codFormStepOne.controls['english_level'].value\"\n [selectCode]=\"codFormStepOne.controls['english_level'].value === null? 'Nivel de ingl\u00E9s': codFormStepOne.controls['english_level'].value\"\n [defaultText]=\"'Nivel de ingl\u00E9s'\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectLevel($event)\"\n [data]=\"levels\"\n [control]=\"codFormStepOne.controls['english_level']\"\n [disabledSel]=\"isDisabledSel\"\n ></ipt-select>\n </div>\n <div class=\"col-12\">\n <ipt-select\n [initialValue]=\"codFormStepOne.controls['availible_courses'].value\"\n [selectCode]=\"codFormStepOne.controls['availible_courses'].value === null? 'Grupos disponibles': codFormStepOne.controls['availible_courses'].value\"\n [defaultText]=\"'Grupos disponibles'\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectAvailibleCourses($event)\"\n [data]=\"availibleCourses\"\n [control]=\"codFormStepOne.controls['availible_courses']\"\n [disabledSel]=\"isDisabledSel\"\n ></ipt-select>\n </div>\n <span *ngIf=\"!hasAvailableCourse\" class=\"mt-1 pl-2 text-red-500\">Todav\u00EDa no hay cursos con estas caracter\u00EDsticas.</span>\n</form>\n\n<div class=\"flex mt-2 align-items-center gap-3\">\n <span *ngIf=\"codFormStepOne.invalid && codFormStepOne.touched\" class=\"text-red-500 font-bold text-center mt-1 py-2 bg-red-100 w-full border-round-xl\">Faltan campos por llenar.</span>\n <button type=\"submit\" [class]=\"isEditCod ? 'ml-auto yellow-300 p-button-sm' : 'ml-auto p-button-sm'\" (click)=\"sendForm()\" pButton label=\"Siguiente\" icon=\"pi pi-arrow-right\"></button>\n</div>\n", styles: [".yellow-300{background-color:var(--yellow-500)!important;color:#fff}\n"], dependencies: [{ kind: "directive", type:
|
|
415
|
+
CodFormStepOneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: CodFormStepOneComponent, deps: [{ token: i1.FormBuilder }, { token: i2.CopiesService }, { token: i3.BaseService }, { token: i4.CourseService }, { token: i5.CommunicatorService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
416
|
+
CodFormStepOneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.7", type: CodFormStepOneComponent, selector: "app-cod-form-step-one", inputs: { initialData: "initialData", dataPreviusCodData: "dataPreviusCodData", isEditCod: "isEditCod", courseSelectRenovation: "courseSelectRenovation", isRenovation: "isRenovation", parametersAll: "parametersAll" }, outputs: { changeStepEvent: "changeStepEvent" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<form [formGroup]=\"codFormStepOne\" class=\"grid\">\n <div class=\"col\">\n <ipt-select\n [initialValue]=\"codFormStepOne.controls['academic_plan'].value\"\n [selectCode]=\"codFormStepOne.controls['academic_plan'].value === null? 'Plan': codFormStepOne.controls['academic_plan'].value\"\n [defaultText]=\"'Plan'\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectAcademicPlan($event)\"\n [data]=\"plans\"\n [control]=\"codFormStepOne.controls['academic_plan']\"\n [disabledSel]=\"isDisabledSel\"\n ></ipt-select>\n <ipt-select\n [initialValue]=\"codFormStepOne.controls['course_type'].value\"\n [selectCode]=\"codFormStepOne.controls['course_type'].value === null? 'Tipo de plan': codFormStepOne.controls['course_type'].value\"\n [defaultText]=\"'Tipo de plan'\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectCoursesTypesByPlan($event)\"\n [data]=\"course_type\"\n [control]=\"codFormStepOne.controls['course_type']\"\n [disabledSel]=\"isDisabledSel\"\n ></ipt-select>\n </div>\n <div class=\"col\">\n <ipt-select\n [initialValue]=\"codFormStepOne.controls['agreement_by_category'].value\"\n [selectCode]=\"codFormStepOne.controls['agreement_by_category'].value === null? 'Convenio por categoria': codFormStepOne.controls['agreement_by_category'].value\"\n [defaultText]=\"'Convenio por categoria'\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectAgreementByCategory($event)\"\n [data]=\"agreements\"\n [control]=\"codFormStepOne.controls['agreement_by_category']\"\n [disabledSel]=\"isDisabledSel\"\n ></ipt-select>\n <ipt-select\n [initialValue]=\"codFormStepOne.controls['english_level'].value\"\n [selectCode]=\"codFormStepOne.controls['english_level'].value === null? 'Nivel de ingl\u00E9s': codFormStepOne.controls['english_level'].value\"\n [defaultText]=\"'Nivel de ingl\u00E9s'\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectLevel($event)\"\n [data]=\"levels\"\n [control]=\"codFormStepOne.controls['english_level']\"\n [disabledSel]=\"isDisabledSel\"\n ></ipt-select>\n </div>\n <div class=\"col-12\">\n <ipt-select\n [initialValue]=\"codFormStepOne.controls['availible_courses'].value\"\n [selectCode]=\"codFormStepOne.controls['availible_courses'].value === null? 'Grupos disponibles': codFormStepOne.controls['availible_courses'].value\"\n [defaultText]=\"'Grupos disponibles'\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectAvailibleCourses($event)\"\n [data]=\"availibleCourses\"\n [control]=\"codFormStepOne.controls['availible_courses']\"\n [disabledSel]=\"isDisabledSel\"\n ></ipt-select>\n <ipt-loader *ngIf=\"isLoading\" class=\"w-1\">\n </ipt-loader>\n </div>\n <span *ngIf=\"!hasAvailableCourse\" class=\"mt-1 pl-2 text-red-500\">Todav\u00EDa no hay cursos con estas caracter\u00EDsticas.</span>\n</form>\n\n<div class=\"flex mt-2 align-items-center gap-3\">\n <span *ngIf=\"codFormStepOne.invalid && codFormStepOne.touched\" class=\"text-red-500 font-bold text-center mt-1 py-2 bg-red-100 w-full border-round-xl\">Faltan campos por llenar.</span>\n <button type=\"submit\" [class]=\"isEditCod ? 'ml-auto yellow-300 p-button-sm' : 'ml-auto p-button-sm'\" (click)=\"sendForm()\" pButton label=\"Siguiente\" icon=\"pi pi-arrow-right\"></button>\n</div>\n", styles: [".yellow-300{background-color:var(--yellow-500)!important;color:#fff}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.LoaderComponent, selector: "ipt-loader", inputs: ["message", "isDialog"] }, { kind: "component", type: i8.SelectComponent, selector: "ipt-select", inputs: ["isRequired", "data", "defaultText", "selectCode", "disabledSel", "initialValue", "label", "control"], outputs: ["eventSelect"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }] });
|
|
286
417
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: CodFormStepOneComponent, decorators: [{
|
|
287
418
|
type: Component,
|
|
288
|
-
args: [{ selector: 'app-cod-form-step-one', template: "<form [formGroup]=\"codFormStepOne\" class=\"grid\">\n <div class=\"col\">\n <ipt-select\n [initialValue]=\"codFormStepOne.controls['academic_plan'].value\"\n [selectCode]=\"codFormStepOne.controls['academic_plan'].value === null? 'Plan': codFormStepOne.controls['academic_plan'].value\"\n [defaultText]=\"'Plan'\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectAcademicPlan($event)\"\n [data]=\"plans\"\n [control]=\"codFormStepOne.controls['academic_plan']\"\n [disabledSel]=\"isDisabledSel\"\n ></ipt-select>\n <ipt-select\n [initialValue]=\"codFormStepOne.controls['course_type'].value\"\n [selectCode]=\"codFormStepOne.controls['course_type'].value === null? 'Tipo de plan': codFormStepOne.controls['course_type'].value\"\n [defaultText]=\"'Tipo de plan'\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectCoursesTypesByPlan($event)\"\n [data]=\"course_type\"\n [control]=\"codFormStepOne.controls['course_type']\"\n [disabledSel]=\"isDisabledSel\"\n ></ipt-select>\n </div>\n <div class=\"col\">\n <ipt-select\n [initialValue]=\"codFormStepOne.controls['agreement_by_category'].value\"\n [selectCode]=\"codFormStepOne.controls['agreement_by_category'].value === null? 'Convenio por categoria': codFormStepOne.controls['agreement_by_category'].value\"\n [defaultText]=\"'Convenio por categoria'\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectAgreementByCategory($event)\"\n [data]=\"agreements\"\n [control]=\"codFormStepOne.controls['agreement_by_category']\"\n [disabledSel]=\"isDisabledSel\"\n ></ipt-select>\n <ipt-select\n [initialValue]=\"codFormStepOne.controls['english_level'].value\"\n [selectCode]=\"codFormStepOne.controls['english_level'].value === null? 'Nivel de ingl\u00E9s': codFormStepOne.controls['english_level'].value\"\n [defaultText]=\"'Nivel de ingl\u00E9s'\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectLevel($event)\"\n [data]=\"levels\"\n [control]=\"codFormStepOne.controls['english_level']\"\n [disabledSel]=\"isDisabledSel\"\n ></ipt-select>\n </div>\n <div class=\"col-12\">\n <ipt-select\n [initialValue]=\"codFormStepOne.controls['availible_courses'].value\"\n [selectCode]=\"codFormStepOne.controls['availible_courses'].value === null? 'Grupos disponibles': codFormStepOne.controls['availible_courses'].value\"\n [defaultText]=\"'Grupos disponibles'\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectAvailibleCourses($event)\"\n [data]=\"availibleCourses\"\n [control]=\"codFormStepOne.controls['availible_courses']\"\n [disabledSel]=\"isDisabledSel\"\n ></ipt-select>\n </div>\n <span *ngIf=\"!hasAvailableCourse\" class=\"mt-1 pl-2 text-red-500\">Todav\u00EDa no hay cursos con estas caracter\u00EDsticas.</span>\n</form>\n\n<div class=\"flex mt-2 align-items-center gap-3\">\n <span *ngIf=\"codFormStepOne.invalid && codFormStepOne.touched\" class=\"text-red-500 font-bold text-center mt-1 py-2 bg-red-100 w-full border-round-xl\">Faltan campos por llenar.</span>\n <button type=\"submit\" [class]=\"isEditCod ? 'ml-auto yellow-300 p-button-sm' : 'ml-auto p-button-sm'\" (click)=\"sendForm()\" pButton label=\"Siguiente\" icon=\"pi pi-arrow-right\"></button>\n</div>\n", styles: [".yellow-300{background-color:var(--yellow-500)!important;color:#fff}\n"] }]
|
|
289
|
-
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.
|
|
419
|
+
args: [{ selector: 'app-cod-form-step-one', template: "<form [formGroup]=\"codFormStepOne\" class=\"grid\">\n <div class=\"col\">\n <ipt-select\n [initialValue]=\"codFormStepOne.controls['academic_plan'].value\"\n [selectCode]=\"codFormStepOne.controls['academic_plan'].value === null? 'Plan': codFormStepOne.controls['academic_plan'].value\"\n [defaultText]=\"'Plan'\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectAcademicPlan($event)\"\n [data]=\"plans\"\n [control]=\"codFormStepOne.controls['academic_plan']\"\n [disabledSel]=\"isDisabledSel\"\n ></ipt-select>\n <ipt-select\n [initialValue]=\"codFormStepOne.controls['course_type'].value\"\n [selectCode]=\"codFormStepOne.controls['course_type'].value === null? 'Tipo de plan': codFormStepOne.controls['course_type'].value\"\n [defaultText]=\"'Tipo de plan'\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectCoursesTypesByPlan($event)\"\n [data]=\"course_type\"\n [control]=\"codFormStepOne.controls['course_type']\"\n [disabledSel]=\"isDisabledSel\"\n ></ipt-select>\n </div>\n <div class=\"col\">\n <ipt-select\n [initialValue]=\"codFormStepOne.controls['agreement_by_category'].value\"\n [selectCode]=\"codFormStepOne.controls['agreement_by_category'].value === null? 'Convenio por categoria': codFormStepOne.controls['agreement_by_category'].value\"\n [defaultText]=\"'Convenio por categoria'\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectAgreementByCategory($event)\"\n [data]=\"agreements\"\n [control]=\"codFormStepOne.controls['agreement_by_category']\"\n [disabledSel]=\"isDisabledSel\"\n ></ipt-select>\n <ipt-select\n [initialValue]=\"codFormStepOne.controls['english_level'].value\"\n [selectCode]=\"codFormStepOne.controls['english_level'].value === null? 'Nivel de ingl\u00E9s': codFormStepOne.controls['english_level'].value\"\n [defaultText]=\"'Nivel de ingl\u00E9s'\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectLevel($event)\"\n [data]=\"levels\"\n [control]=\"codFormStepOne.controls['english_level']\"\n [disabledSel]=\"isDisabledSel\"\n ></ipt-select>\n </div>\n <div class=\"col-12\">\n <ipt-select\n [initialValue]=\"codFormStepOne.controls['availible_courses'].value\"\n [selectCode]=\"codFormStepOne.controls['availible_courses'].value === null? 'Grupos disponibles': codFormStepOne.controls['availible_courses'].value\"\n [defaultText]=\"'Grupos disponibles'\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectAvailibleCourses($event)\"\n [data]=\"availibleCourses\"\n [control]=\"codFormStepOne.controls['availible_courses']\"\n [disabledSel]=\"isDisabledSel\"\n ></ipt-select>\n <ipt-loader *ngIf=\"isLoading\" class=\"w-1\">\n </ipt-loader>\n </div>\n <span *ngIf=\"!hasAvailableCourse\" class=\"mt-1 pl-2 text-red-500\">Todav\u00EDa no hay cursos con estas caracter\u00EDsticas.</span>\n</form>\n\n<div class=\"flex mt-2 align-items-center gap-3\">\n <span *ngIf=\"codFormStepOne.invalid && codFormStepOne.touched\" class=\"text-red-500 font-bold text-center mt-1 py-2 bg-red-100 w-full border-round-xl\">Faltan campos por llenar.</span>\n <button type=\"submit\" [class]=\"isEditCod ? 'ml-auto yellow-300 p-button-sm' : 'ml-auto p-button-sm'\" (click)=\"sendForm()\" pButton label=\"Siguiente\" icon=\"pi pi-arrow-right\"></button>\n</div>\n", styles: [".yellow-300{background-color:var(--yellow-500)!important;color:#fff}\n"] }]
|
|
420
|
+
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.CopiesService }, { type: i3.BaseService }, { type: i4.CourseService }, { type: i5.CommunicatorService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { initialData: [{
|
|
290
421
|
type: Input
|
|
291
422
|
}], dataPreviusCodData: [{
|
|
292
423
|
type: Input
|
|
@@ -296,7 +427,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImpor
|
|
|
296
427
|
type: Input
|
|
297
428
|
}], isRenovation: [{
|
|
298
429
|
type: Input
|
|
430
|
+
}], parametersAll: [{
|
|
431
|
+
type: Input
|
|
299
432
|
}], changeStepEvent: [{
|
|
300
433
|
type: Output
|
|
301
434
|
}] } });
|
|
302
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLWZvcm0tc3RlcC1vbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVzaWduLXN5c3RlbS9zcmMvbGliL2NvZC9zdGVwcy9jb2QtZm9ybS1zdGVwLW9uZS9jb2QtZm9ybS1zdGVwLW9uZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXNpZ24tc3lzdGVtL3NyYy9saWIvY29kL3N0ZXBzL2NvZC1mb3JtLXN0ZXAtb25lL2NvZC1mb3JtLXN0ZXAtb25lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUErQyxNQUFNLGVBQWUsQ0FBQztBQUN2SSxPQUFPLEVBQTBCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTXBFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFzQixNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7OztBQVE5RSxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsWUFBWTtJQXVCdkQsWUFDVSxFQUFlLEVBQ2YsZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLFdBQXdCLEVBQ3hCLGFBQTRCLEVBQzVCLG1CQUF3QyxFQUN4QyxLQUF3QjtRQUVoQyxLQUFLLEVBQUUsQ0FBQztRQVJBLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUF2QnhCLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVUs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SztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNJLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIE9uQ2hhbmdlcywgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBHZXRBdmFpbGlibGVDb3Vyc2VzUnEgfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9jb3Vyc2UvY291cnNlLXJxLm1vZGVsJztcbmltcG9ydCB7IENvcGllc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL2NvcGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IENvdXJzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL2NvdXJzZS1zZXJ2aWNlL2NvdXJzZS1zZXJ2aWNlLm1vZGVsJztcbmltcG9ydCB7IFBhcmFtZXRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3BhcmFtZXRlcnMtc2VydmljZS9wYXJhbWV0ZXJzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzL2Jhc2Utc2VydmljZS9iYXNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29kRm9ybUNvbnRyb2xzIH0gZnJvbSAnLi4vLi4vbG9naWMvY29kLWZvcm0tY29udHJvbHMnO1xuaW1wb3J0IHsgQ29kRm9ybVN0ZXBzLCBsb2NhbFN0b3JhZ2VWYWx1ZXMgfSBmcm9tICcuLi8uLi9sb2dpYy9jb2QtZm9ybS1zdGVwcyc7XG5pbXBvcnQgeyBDb21tdW5pY2F0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbG9naWMvY29tbXVuaWNhdG9yLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY29kLWZvcm0tc3RlcC1vbmUnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29kLWZvcm0tc3RlcC1vbmUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb2QtZm9ybS1zdGVwLW9uZS5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIENvZEZvcm1TdGVwT25lQ29tcG9uZW50IGV4dGVuZHMgQ29kRm9ybVN0ZXBzIGltcGxlbWVudHMgT25DaGFuZ2VzIHtcblxuICBASW5wdXQoKSBpbml0aWFsRGF0YT86IGFueTtcbiAgQElucHV0KCkgZGF0YVByZXZpdXNDb2REYXRhPzogYW55O1xuICBASW5wdXQoKSBpc0VkaXRDb2Q/OiBib29sZWFuO1xuICBASW5wdXQoKSBjb3Vyc2VTZWxlY3RSZW5vdmF0aW9uPzphbnk7XG4gIEBJbnB1dCgpIGlzUmVub3ZhdGlvbj86YW55O1xuICBAT3V0cHV0KCkgY2hhbmdlU3RlcEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgY29waWVzOiBhbnk7XG4gIGNvZEZvcm1TdGVwT25lITogRm9ybUdyb3VwO1xuICBoYXNBdmFpbGFibGVDb3Vyc2UhOiBib29sZWFuO1xuXG4gIC8vIFBhcmFtZXRlcnNcbiAgYWdyZWVtZW50czogYW55O1xuICBhdmFpbGlibGVDb3Vyc2VzOiBhbnlbXSA9IFtdO1xuICBjb3Vyc2VfdHlwZTogYW55O1xuICBsZXZlbHM6IGFueTtcbiAgcGxhbnM6IGFueTtcbiAgaXNEaXNhYmxlZFNlbDpib29sZWFuPWZhbHNlXG4gIC8vIENvbnRyb2xzIGRlbCBmb3JtdWxhcmlvXG4gIGNvbnRyb2xzID0gbmV3IENvZEZvcm1Db250cm9scygpLmNvbnRyb2xzWzBdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcGFyYW1ldGVyU2VydmljZTogUGFyYW1ldGVyU2VydmljZSxcbiAgICBwcml2YXRlIGNvcGllc1NlcnZpY2U6IENvcGllc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBiYXNlU2VydmljZTogQmFzZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb3Vyc2VTZXJ2aWNlOiBDb3Vyc2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tbXVuaWNhdG9yU2VydmljZTogQ29tbXVuaWNhdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY29waWVzID0gdGhpcy5jb3BpZXNTZXJ2aWNlLmNvcGllcztcbiAgfVxuXG4gIC8qIEVzIG5lY2VzYXJpbyByZWNvcnJlciBlbCBhcnJheSBkZSBjb250cm9scyBkZSBudWVzdHJvIGZvcm11bGFyaW8gcGFyYTpcbiAgICDinIUgTGVlciBlbCBMb2NhbCBTdG9yYWdlIHkgc2V0ZWFyIGxvcyB2YWxvcmVzXG4gICAg4pyFIFN1YnNjcmliaXJzZSBhIGxvcyBjYW1iaW9zIGRlbCBmb3JtdWxhcmlvIHBhcmEgc2V0ZWFyIHZhbG9yZXMgbnVldm9zXG5cbiAgICBOb3RhOiBsYSBjbGFzZSBDb2RGb3JtU3RlcHMoKSBzZSBlbmNhcmdhIGRlIHRvZGEgbGEgbMOzZ2ljYSBkZSBMUyBjb24gbG9zIHBhc29zIGRlbCBmb3JtdWxhcmlvIGRlbCBDT0RcbiAgKi9cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG5cbiAgICB0aGlzLmdldFBhcmFtZXRlcnMoKTtcbiAgICB0aGlzLmluaXRGb3JtKCk7XG4gICAgdGhpcy5zdGFydExvY2FsU3RvcmFnZVdvcmsoKTtcbiAgICB0aGlzLnNldFZhbHVlc0J5TG9jYWxTdG9yYWdlKClcbiAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydjb3Vyc2VfdHlwZSddLnZhbHVlQ2hhbmdlc1xuICAgIC5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5jb21tdW5pY2F0b3JTZXJ2aWNlLnNldEN1cnJlbnRDb3Vyc2VUeXBlKHZhbHVlKSk7XG5cbiAgICB0aGlzLmNvbW11bmljYXRvclNlcnZpY2Uuc2V0Q3VycmVudEFncmVlbWVudCh0aGlzLmxvY2FsU3RvcmFnZUNPRC5nZXRDb2RGb3JtRGF0YSgxLCAnYWdyZWVtZW50X2J5X2NhdGVnb3J5JykhKTtcblxuICAgIGlmIChjaGFuZ2VzWydpbml0aWFsRGF0YSddICYmIHRoaXMuaW5pdGlhbERhdGEgIT0gbnVsbCAmJiB0aGlzLmRhdGFQcmV2aXVzQ29kRGF0YSA9PT0gbnVsbCB8fCB0aGlzLmRhdGFQcmV2aXVzQ29kRGF0YSAhPSBudWxsICAmJiB0aGlzLmlzRWRpdENvZCA9PT0gZmFsc2UgJiYgdGhpcy5pc1Jlbm92YXRpb24gPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnByb2Nlc3NEYXRhKHRoaXMuaW5pdGlhbERhdGEpO1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfWVsc2V7XG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhY2FkZW1pY19wbGFuJ10uc2V0VmFsdWUobnVsbCk7XG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydjb3Vyc2VfdHlwZSddLnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYWdyZWVtZW50X2J5X2NhdGVnb3J5J10uc2V0VmFsdWUobnVsbCk7XG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydlbmdsaXNoX2xldmVsJ10uc2V0VmFsdWUobnVsbCk7XG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhdmFpbGlibGVfY291cnNlcyddLnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snY291cnNlX21vZGFsaXR5J10uc2V0VmFsdWUobnVsbCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ2RhdGFQcmV2aXVzQ29kRGF0YSddICYmIHRoaXMuZGF0YVByZXZpdXNDb2REYXRhICE9IG51bGwgICYmIHRoaXMuaXNFZGl0Q29kICYmIHRoaXMuaXNSZW5vdmF0aW9uID09PSBmYWxzZSApIHtcbiAgICAgIHRoaXMucHJvY2Vzc0RhdGEodGhpcy5kYXRhUHJldml1c0NvZERhdGEpO1xuXG4gICAgICBpZiAodGhpcy5pc0VkaXRDb2QgJiYgIXRoaXMuZGF0YVByZXZpdXNDb2REYXRhLmVkaXRfY291cnNlX3BheW1lbnQpIHtcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVkU2VsID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZFNlbCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9ZWxzZSBpZihjaGFuZ2VzWydkYXRhUHJldml1c0NvZERhdGEnXSAmJiB0aGlzLmRhdGFQcmV2aXVzQ29kRGF0YSAhPSBudWxsICYmICF0aGlzLmlzRWRpdENvZCAmJiB0aGlzLmNvdXJzZVNlbGVjdFJlbm92YXRpb24gJiYgdGhpcy5pc1Jlbm92YXRpb24gPT09IHRydWUgKXtcbiAgICAgIHRoaXMuc2V0RGF0YUNvZFJlbm92YXRpb25TZWxlY3QoKTtcbiAgICAgIHRoaXMuaXNEaXNhYmxlZFNlbD0gdHJ1ZVxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG5cbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0RhdGEoZGF0YTogYW55KSB7XG4gICAgY29uc3QgeyBjb2RGb3JtU3RlcE9uZSB9ID0gdGhpcztcbiAgICB0aGlzLmdldEFncmVlbWVudEJ5UGxhbihkYXRhLmNvdXJzZV90eXBlPy5hY2FkZW1pY19wbGFuLmNvZGUpO1xuICAgIHRoaXMuZ2V0Q291cnNlVHlwZShkYXRhLmNvdXJzZV90eXBlPy5hY2FkZW1pY19wbGFuLmNvZGUpO1xuICAgIGNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydlbmdsaXNoX2xldmVsJ10uc2V0VmFsdWUoZGF0YS5lbmdsaXNoX2xldmVsPy5jb2RlKTtcbiAgICBjb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYWdyZWVtZW50X2J5X2NhdGVnb3J5J10uc2V0VmFsdWUoZGF0YS5hZ3JlZW1lbnQ/LmNvZGUpO1xuICAgIGNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydjb3Vyc2VfdHlwZSddLnNldFZhbHVlKGRhdGEuY291cnNlX3R5cGU/LmNvZGUpO1xuICAgIGNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhY2FkZW1pY19wbGFuJ10uc2V0VmFsdWUoZGF0YS5jb3Vyc2VfdHlwZT8uYWNhZGVtaWNfcGxhbi5jb2RlKTtcbiAgICB0aGlzLmdldEF2YWlsaWJsZUNvdXJzZXMoKTtcblxuICAgIGlmICh0aGlzLmlzRWRpdENvZCkge1xuICAgICAgdGhpcy5zZXREYXRhRnJvbUVkaXRDb2RIaXN0b3J5KCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5pc0VkaXRDb2QgJiYgdGhpcy5pbml0aWFsRGF0YSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnNldERhdGFGcm9tVXNlckhpc3RvcnkoKTtcbiAgICB9XG4gIH1cblxuICBzZXREYXRhRnJvbVVzZXJIaXN0b3J5KCl7XG4gICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYWNhZGVtaWNfcGxhbiddLnNldFZhbHVlKHRoaXMuaW5pdGlhbERhdGEuY291cnNlX3R5cGUuYWNhZGVtaWNfcGxhbi5jb2RlKTtcbiAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydjb3Vyc2VfdHlwZSddLnNldFZhbHVlKHRoaXMuaW5pdGlhbERhdGEuY291cnNlX3R5cGUuY29kZSk7XG4gICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYWdyZWVtZW50X2J5X2NhdGVnb3J5J10uc2V0VmFsdWUodGhpcy5pbml0aWFsRGF0YS5hZ3JlZW1lbnQuY29kZSk7XG4gICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snZW5nbGlzaF9sZXZlbCddLnNldFZhbHVlKHRoaXMuaW5pdGlhbERhdGEuZW5nbGlzaF9sZXZlbC5jb2RlKTtcbiAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhdmFpbGlibGVfY291cnNlcyddLnNldFZhbHVlKHRoaXMuaW5pdGlhbERhdGEuY29kZSk7XG4gICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snY291cnNlX21vZGFsaXR5J10uc2V0VmFsdWUodGhpcy5pbml0aWFsRGF0YS5jb3Vyc2VfbW9kYWxpdHkuY29kZSk7XG4gIH1cblxuICBzZXREYXRhRnJvbUVkaXRDb2RIaXN0b3J5KCl7XG5cbiAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhY2FkZW1pY19wbGFuJ10uc2V0VmFsdWUodGhpcy5kYXRhUHJldml1c0NvZERhdGEuY291cnNlX3R5cGUuYWNhZGVtaWNfcGxhbi5jb2RlID8gdGhpcy5kYXRhUHJldml1c0NvZERhdGEuY291cnNlX3R5cGUuYWNhZGVtaWNfcGxhbi5jb2RlIDogbnVsbCk7XG4gICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snY291cnNlX3R5cGUnXS5zZXRWYWx1ZSh0aGlzLmRhdGFQcmV2aXVzQ29kRGF0YS5jb3Vyc2VfdHlwZS5jb2RlID8gdGhpcy5kYXRhUHJldml1c0NvZERhdGEuY291cnNlX3R5cGUuY29kZSA6IG51bGwpO1xuICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2FncmVlbWVudF9ieV9jYXRlZ29yeSddLnNldFZhbHVlKHRoaXMuZGF0YVByZXZpdXNDb2REYXRhLmFncmVlbWVudC5jb2RlID8gdGhpcy5kYXRhUHJldml1c0NvZERhdGEuYWdyZWVtZW50LmNvZGUgOiBudWxsKTtcbiAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydlbmdsaXNoX2xldmVsJ10uc2V0VmFsdWUodGhpcy5kYXRhUHJldml1c0NvZERhdGEuZW5nbGlzaF9sZXZlbC5jb2RlID8gdGhpcy5kYXRhUHJldml1c0NvZERhdGEuZW5nbGlzaF9sZXZlbC5jb2RlIDogbnVsbCk7XG4gICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYXZhaWxpYmxlX2NvdXJzZXMnXS5zZXRWYWx1ZSh0aGlzLmRhdGFQcmV2aXVzQ29kRGF0YS5jb3Vyc2UuY29kZSA/IHRoaXMuZGF0YVByZXZpdXNDb2REYXRhLmNvdXJzZS5jb2RlIDogbnVsbCk7XG4gICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snY291cnNlX21vZGFsaXR5J10uc2V0VmFsdWUodGhpcy5kYXRhUHJldml1c0NvZERhdGEuY291cnNlLmNvdXJzZV9tb2RhbGl0eSA/IHRoaXMuZGF0YVByZXZpdXNDb2REYXRhLmNvdXJzZS5jb3Vyc2VfbW9kYWxpdHkgOiBudWxsKTtcbiAgfVxuICBzZXREYXRhQ29kUmVub3ZhdGlvblNlbGVjdCgpe1xuICAgIHRoaXMuZ2V0QWdyZWVtZW50QnlQbGFuKHRoaXMuY291cnNlU2VsZWN0UmVub3ZhdGlvbi5jb3Vyc2VfdHlwZT8uYWNhZGVtaWNfcGxhbi5jb2RlKTtcbiAgICB0aGlzLmdldENvdXJzZVR5cGUodGhpcy5jb3Vyc2VTZWxlY3RSZW5vdmF0aW9uLmNvdXJzZV90eXBlPy5hY2FkZW1pY19wbGFuLmNvZGUpO1xuICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2FjYWRlbWljX3BsYW4nXS5zZXRWYWx1ZSh0aGlzLmNvdXJzZVNlbGVjdFJlbm92YXRpb24uY291cnNlX3R5cGU/LmFjYWRlbWljX3BsYW4uY29kZSA/IHRoaXMuY291cnNlU2VsZWN0UmVub3ZhdGlvbi5jb3Vyc2VfdHlwZT8uYWNhZGVtaWNfcGxhbi5jb2RlIDogbnVsbCk7XG4gICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snY291cnNlX3R5cGUnXS5zZXRWYWx1ZSh0aGlzLmNvdXJzZVNlbGVjdFJlbm92YXRpb24uY291cnNlX3R5cGU/LmNvZGUgPyB0aGlzLmNvdXJzZVNlbGVjdFJlbm92YXRpb24uY291cnNlX3R5cGU/LmNvZGUgOiBudWxsKTtcbiAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhZ3JlZW1lbnRfYnlfY2F0ZWdvcnknXS5zZXRWYWx1ZSh0aGlzLmNvdXJzZVNlbGVjdFJlbm92YXRpb24uYWdyZWVtZW50Py5jb2RlID8gdGhpcy5jb3Vyc2VTZWxlY3RSZW5vdmF0aW9uLmFncmVlbWVudD8uY29kZSA6IG51bGwpO1xuICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2VuZ2xpc2hfbGV2ZWwnXS5zZXRWYWx1ZSh0aGlzLmNvdXJzZVNlbGVjdFJlbm92YXRpb24uZW5nbGlzaF9sZXZlbD8uY29kZSA/IHRoaXMuY291cnNlU2VsZWN0UmVub3ZhdGlvbi5lbmdsaXNoX2xldmVsPy5jb2RlIDogbnVsbCk7XG4gICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYXZhaWxpYmxlX2NvdXJzZXMnXS5zZXRWYWx1ZSh0aGlzLmNvdXJzZVNlbGVjdFJlbm92YXRpb24/LmNvZGUgPyB0aGlzLmNvdXJzZVNlbGVjdFJlbm92YXRpb24/LmNvZGUgOiBudWxsKTtcbiAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydjb3Vyc2VfbW9kYWxpdHknXS5zZXRWYWx1ZSh0aGlzLmNvdXJzZVNlbGVjdFJlbm92YXRpb24uY291cnNlX21vZGFsaXR5Py5jb2RlID8gdGhpcy5jb3Vyc2VTZWxlY3RSZW5vdmF0aW9uLmNvdXJzZV9tb2RhbGl0eT8uY29kZSA6IG51bGwpO1xuICAgIHRoaXMuZ2V0QXZhaWxpYmxlQ291cnNlcygpO1xuICB9XG5cbiAgc3RhcnRMb2NhbFN0b3JhZ2VXb3JrKCkge1xuICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaChjb250cm9sID0+IHtcbiAgICAgIGxldCBsb2NhbFN0b3JhZ2VWYWx1ZTogbG9jYWxTdG9yYWdlVmFsdWVzID0gdGhpcy5yZWFkQW5kV3JpdGVMUygxLCBjb250cm9sLm5hbWUpO1xuICAgICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1tjb250cm9sLm5hbWVdLnNldFZhbHVlKGxvY2FsU3RvcmFnZVZhbHVlLnZhbHVlKTtcbiAgICAgIHRoaXMubGlzdGVuRm9ybUNoYW5nZXMoMSwgY29udHJvbC5uYW1lLCB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzW2NvbnRyb2wubmFtZV0udmFsdWVDaGFuZ2VzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFBhcmFtZXRlcnMoKSB7XG4gICAgdGhpcy5wYXJhbWV0ZXJTZXJ2aWNlLmdldEFsbFBsYW5zKCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgdGhpcy5wbGFucyA9IHJlc3BvbnNlLmRhdGE7XG4gICAgfSk7XG4gICAgdGhpcy5wYXJhbWV0ZXJTZXJ2aWNlLmdldExldmVscygpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgIHRoaXMubGV2ZWxzID0gcmVzcG9uc2UuZGF0YTtcbiAgICB9KTtcbiAgfVxuXG4gIGluaXRGb3JtKCkge1xuICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGFjYWRlbWljX3BsYW46IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIGNvdXJzZV90eXBlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBhZ3JlZW1lbnRfYnlfY2F0ZWdvcnk6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIGVuZ2xpc2hfbGV2ZWw6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIGF2YWlsaWJsZV9jb3Vyc2VzOiBbJycsIFtdXSxcbiAgICAgIGNvdXJzZV9tb2RhbGl0eTogWycnXSxcblxuICAgIH0pO1xuICB9XG5cbiAgc2V0VmFsdWVzQnlMb2NhbFN0b3JhZ2UoKSB7XG4gICAgY29uc3QgYWNhZGVtaWNQbGFuID0gdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYWNhZGVtaWNfcGxhbiddLnZhbHVlIHx8IG51bGw7XG4gICAgaWYgKCFhY2FkZW1pY1BsYW4pIHJldHVybjtcbiAgICB0aGlzLnNlbGVjdEFjYWRlbWljUGxhbihhY2FkZW1pY1BsYW4pO1xuXG4gICAgY29uc3QgYWdyZWVtZW50QnlDYXRlZ29yeSA9IHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2FncmVlbWVudF9ieV9jYXRlZ29yeSddLnZhbHVlIHx8IG51bGw7XG4gICAgaWYgKCFhZ3JlZW1lbnRCeUNhdGVnb3J5KSByZXR1cm47XG4gICAgdGhpcy5nZXRBdmFpbGlibGVDb3Vyc2VzKCk7XG5cbiAgICBjb25zdCBlbmdsaXNoTGV2ZWwgPSB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydlbmdsaXNoX2xldmVsJ10udmFsdWUgfHwgbnVsbDtcbiAgICBpZiAoIWVuZ2xpc2hMZXZlbCkgcmV0dXJuO1xuICAgIHRoaXMuZ2V0QXZhaWxpYmxlQ291cnNlcygpO1xuXG4gICAgY29uc3QgY291cnNlTW9kYWxpdHkgPSB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydjb3Vyc2VfbW9kYWxpdHknXS52YWx1ZSB8fCBudWxsO1xuICAgIGlmICghY291cnNlTW9kYWxpdHkpIHJldHVybjtcbiAgICB0aGlzLmdldEF2YWlsaWJsZUNvdXJzZXMoKTtcbiAgfVxuXG4gIHNlbmRGb3JtKCkge1xuICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUubWFya0FzVG91Y2hlZCgpO1xuICAgIGlmICh0aGlzLmNvZEZvcm1TdGVwT25lLmludmFsaWQpIHJldHVybjtcblxuICAgIC8vIE1vdmVybm9zIGFsIHBhc28gMlxuICAgIHRoaXMuY2hhbmdlU3RlcEV2ZW50LmVtaXQoMSk7XG4gIH1cblxuICByZXNldEZvcm0oKSB7XG4gICAgdGhpcy5yZXNldExvY2FsU3RvcmFnZSh0aGlzLmNvbnRyb2xzKTtcbiAgICB0aGlzLmNvZEZvcm1TdGVwT25lLnJlc2V0KCk7XG4gIH1cblxuICAvLyBFdmVudG9zIGRlIGxvcyBzZWxlY3RzXG4gIHNlbGVjdEFjYWRlbWljUGxhbihhY2FkZW1pY19wbGFuOiBhbnkpIHtcbiAgICBpZiAoYWNhZGVtaWNfcGxhbiAhPT0gJ1BsYW4nKSB7XG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhY2FkZW1pY19wbGFuJ10uc2V0VmFsdWUoYWNhZGVtaWNfcGxhbik7XG4gICAgICAvLyB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhZ3JlZW1lbnRfYnlfY2F0ZWdvcnknXS5zZXRWYWx1ZShudWxsKTtcbiAgICAgIC8vIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ3NjaG9vbF9uYW1lJ10uc2V0VmFsdWUobnVsbCk7XG4gICAgICAvLyB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydjb3Vyc2VfdHlwZSddLnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy5nZXRDb3Vyc2VUeXBlKGFjYWRlbWljX3BsYW4pO1xuICAgICAgdGhpcy5nZXRBZ3JlZW1lbnRCeVBsYW4oYWNhZGVtaWNfcGxhbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2FjYWRlbWljX3BsYW4nXS5zZXRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2NvdXJzZV90eXBlJ10uc2V0VmFsdWUobnVsbCk7XG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhZ3JlZW1lbnRfYnlfY2F0ZWdvcnknXS5zZXRWYWx1ZShudWxsKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb3Vyc2VUeXBlKHBsYW46IG51bWJlcikge1xuICAgIHRoaXMucGFyYW1ldGVyU2VydmljZS5nZXRDb3Vyc2VzVHlwZXNCeVBsYW4ocGxhbikuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgdGhpcy5jb3Vyc2VfdHlwZSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgfSk7XG4gIH1cblxuICBnZXRBZ3JlZW1lbnRCeVBsYW4ocGxhbjogbnVtYmVyKSB7XG4gICAgdGhpcy5wYXJhbWV0ZXJTZXJ2aWNlLmdldEFncmVlbWVudEJ5Q2F0ZWdvcnkocGxhbikuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgdGhpcy5hZ3JlZW1lbnRzID0gcmVzcG9uc2UuZGF0YTtcbiAgICB9KTtcbiAgfVxuXG4gIHNlbGVjdENvdXJzZXNUeXBlc0J5UGxhbihjb3Vyc2VzVHlwZXM6IGFueSkge1xuICAgIGlmIChjb3Vyc2VzVHlwZXMgIT09ICdUaXBvIGRlIHBsYW4nKSB7XG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydjb3Vyc2VfbW9kYWxpdHknXS5zZXRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2NvdXJzZV90eXBlJ10uc2V0VmFsdWUoY291cnNlc1R5cGVzKTtcbiAgICAgIHRoaXMuZ2V0QXZhaWxpYmxlQ291cnNlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydjb3Vyc2VfdHlwZSddLnNldFZhbHVlKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEFncmVlbWVudEJ5Q2F0ZWdvcnkoYWdyZWVtZW50QnlDYXRlZ29yaWVzOiBhbnkpIHtcbiAgICBpZiAoYWdyZWVtZW50QnlDYXRlZ29yaWVzICE9PSAnQ29udmVuaW8gcG9yIGNhdGVnb3JpYScpIHtcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2NvdXJzZV9tb2RhbGl0eSddLnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYWdyZWVtZW50X2J5X2NhdGVnb3J5J10uc2V0VmFsdWUoYWdyZWVtZW50QnlDYXRlZ29yaWVzKTtcbiAgICAgIHRoaXMuY29tbXVuaWNhdG9yU2VydmljZS5zZXRDdXJyZW50QWdyZWVtZW50KGFncmVlbWVudEJ5Q2F0ZWdvcmllcyk7XG4gICAgICB0aGlzLmdldEF2YWlsaWJsZUNvdXJzZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYWdyZWVtZW50X2J5X2NhdGVnb3J5J10uc2V0VmFsdWUobnVsbCk7XG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydzY2hvb2xfbmFtZSddLnNldFZhbHVlKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdExldmVsKGxldmVsczogYW55KSB7XG4gICAgaWYgKGxldmVscyAhPT0gJ05pdmVsIGRlIGluZ2zDqXMnKSB7XG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydjb3Vyc2VfbW9kYWxpdHknXS5zZXRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2VuZ2xpc2hfbGV2ZWwnXS5zZXRWYWx1ZShsZXZlbHMpO1xuICAgICAgdGhpcy5nZXRBdmFpbGlibGVDb3Vyc2VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2VuZ2xpc2hfbGV2ZWwnXS5zZXRWYWx1ZShudWxsKTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RBdmFpbGlibGVDb3Vyc2VzKGF2YWlsaWJsZUNvdXJzZXM6IGFueSkge1xuICAgIGlmIChhdmFpbGlibGVDb3Vyc2VzICE9PSAnR3J1cG9zIGRpc3BvbmlibGVzJykge1xuICAgICAgbGV0IGNvdXJzZU1vZCA9IHRoaXMuYXZhaWxpYmxlQ291cnNlcy5maW5kKG9iamV0byA9PiBvYmpldG8uY29kZSA9PT0gcGFyc2VJbnQoYXZhaWxpYmxlQ291cnNlcywgMTApKTtcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2NvdXJzZV9tb2RhbGl0eSddLnNldFZhbHVlKGNvdXJzZU1vZC5tb2RhbGl0eSk7XG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhdmFpbGlibGVfY291cnNlcyddLnNldFZhbHVlKGF2YWlsaWJsZUNvdXJzZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhdmFpbGlibGVfY291cnNlcyddLnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYWdyZWVtZW50X2J5X2NhdGVnb3J5J10uc2V0VmFsdWUobnVsbCk7XG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydjb3Vyc2VfdHlwZSddLnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snZW5nbGlzaF9sZXZlbCddLnNldFZhbHVlKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRSZXF1ZXN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydlbmdsaXNoX2xldmVsJ10udmFsdWUgIT0gJycgJiZcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2FncmVlbWVudF9ieV9jYXRlZ29yeSddLnZhbHVlICE9ICcnICYmXG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydjb3Vyc2VfdHlwZSddLnZhbHVlICE9ICcnXG4gICAgKTtcbiAgfVxuXG4gIGdldEF2YWlsaWJsZUNvdXJzZXMoKSB7XG4gICAgdGhpcy5hdmFpbGlibGVDb3Vyc2VzID0gW107XG4gICAgaWYgKHRoaXMudmFsaWRSZXF1ZXN0KCkpIHtcbiAgICAgIGxldCByZXF1ZXN0X2F2YWlsaWJsZUNvdXJzZXM6IEdldEF2YWlsaWJsZUNvdXJzZXNScSA9IHtcbiAgICAgICAgdG9rZW46IHRoaXMuYmFzZVNlcnZpY2UuZ2V0VXNlclRva2VuKCksXG4gICAgICAgIGVuZ2xpc2hfbGV2ZWw6IHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2VuZ2xpc2hfbGV2ZWwnXS52YWx1ZSxcbiAgICAgICAgYWdyZWVtZW50OiB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhZ3JlZW1lbnRfYnlfY2F0ZWdvcnknXS52YWx1ZSxcbiAgICAgICAgY291cnNlX3R5cGU6IHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2NvdXJzZV90eXBlJ10udmFsdWUsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNvdXJzZVNlcnZpY2UuZ2V0QXZhaWxhYmxlQ291cnNlc0J5TGV2QWdyZWVDVHlwZShyZXF1ZXN0X2F2YWlsaWJsZUNvdXJzZXMpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICAgIGxldCBjb3Vyc2VzOiBhbnlbXSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICB0aGlzLmhhc0F2YWlsYWJsZUNvdXJzZSA9IHRydWU7XG4gICAgICAgICAgICBjb3Vyc2VzLmZvckVhY2goY291cnNlID0+IHtcbiAgICAgICAgICAgICAgbGV0IHNjaGVkdWxlUGFydHMgPSBjb3Vyc2UuY291cnNlX3NjaGVkdWxlWzBdLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICAgICAgbGV0IHN0YXJ0VGltZSA9IHNjaGVkdWxlUGFydHNbMl07XG4gICAgICAgICAgICAgIHRoaXMuYXZhaWxpYmxlQ291cnNlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBjb3Vyc2UuY29kZSxcbiAgICAgICAgICAgICAgICBuYW1lOiBgQ3Vyc28gJHtjb3Vyc2UuY291cnNlX21vZGFsaXR5Lm5hbWUgPT09ICdQcmVzZW5jaWFsJyA/ICdQcmVzZW5jaWFsJyA6ICdWaXJ0dWFsJ30gLSBUZWFjaGVyICR7Y291cnNlLnRlYWNoZXJ9IC0gIEZlY2hhIGRlIGluaWNpbzogJHtjb3Vyc2UudG9fc3RhcnR9LCBIb3JhIGRlIGluaWNpbzogJHtzdGFydFRpbWV9LCBDdXBvcyBkaXNwOiAke2NvdXJzZS5hdmFpbGFibGVfY2FwYWNpdHl9YCxcbiAgICAgICAgICAgICAgICBtb2RhbGl0eTogY291cnNlLmNvdXJzZV9tb2RhbGl0eS5jb2RlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYXNBdmFpbGFibGVDb3Vyc2UgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2F2YWlsaWJsZV9jb3Vyc2VzJ10uc2V0VmFsdWUoXCJcIik7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlU3RlcEZvdXIoKTtcblxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0VmFsdWVTdGVwRm91cigpe1xuICAgIHRoaXMuc2V0RGF0YUluTG9jYWxTdG9yYWdlKDQsICdwcm9ncmFtX3ByaWNlJywgbnVsbCk7XG4gICAgdGhpcy5zZXREYXRhSW5Mb2NhbFN0b3JhZ2UoNCwgJ3F1b3RhX3RpbWVzJywgbnVsbCk7XG4gICAgdGhpcy5zZXREYXRhSW5Mb2NhbFN0b3JhZ2UoNCwgJ3RvdGFsX3ByaWNlJywgbnVsbCk7XG4gIH1cbn1cbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiY29kRm9ybVN0ZXBPbmVcIiBjbGFzcz1cImdyaWRcIj5cbiAgPGRpdiBjbGFzcz1cImNvbFwiPlxuICAgIDxpcHQtc2VsZWN0XG4gICAgICBbaW5pdGlhbFZhbHVlXT1cImNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhY2FkZW1pY19wbGFuJ10udmFsdWVcIlxuICAgICAgW3NlbGVjdENvZGVdPVwiY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2FjYWRlbWljX3BsYW4nXS52YWx1ZSA9PT0gbnVsbD8gJ1BsYW4nOiBjb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYWNhZGVtaWNfcGxhbiddLnZhbHVlXCJcbiAgICAgIFtkZWZhdWx0VGV4dF09XCInUGxhbidcIlxuICAgICAgW2lzUmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAoZXZlbnRTZWxlY3QpPVwic2VsZWN0QWNhZGVtaWNQbGFuKCRldmVudClcIlxuICAgICAgW2RhdGFdPVwicGxhbnNcIlxuICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2FjYWRlbWljX3BsYW4nXVwiXG4gICAgICBbZGlzYWJsZWRTZWxdPVwiaXNEaXNhYmxlZFNlbFwiXG4gICAgPjwvaXB0LXNlbGVjdD5cbiAgICA8aXB0LXNlbGVjdFxuICAgICAgW2luaXRpYWxWYWx1ZV09XCJjb2RGb3JtU3RlcE9uZS5jb250cm9sc1snY291cnNlX3R5cGUnXS52YWx1ZVwiXG4gICAgICBbc2VsZWN0Q29kZV09XCJjb2RGb3JtU3RlcE9uZS5jb250cm9sc1snY291cnNlX3R5cGUnXS52YWx1ZSA9PT0gbnVsbD8gJ1RpcG8gZGUgcGxhbic6IGNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydjb3Vyc2VfdHlwZSddLnZhbHVlXCJcbiAgICAgIFtkZWZhdWx0VGV4dF09XCInVGlwbyBkZSBwbGFuJ1wiXG4gICAgICBbaXNSZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3RDb3Vyc2VzVHlwZXNCeVBsYW4oJGV2ZW50KVwiXG4gICAgICBbZGF0YV09XCJjb3Vyc2VfdHlwZVwiXG4gICAgICBbY29udHJvbF09XCJjb2RGb3JtU3RlcE9uZS5jb250cm9sc1snY291cnNlX3R5cGUnXVwiXG4gICAgICBbZGlzYWJsZWRTZWxdPVwiaXNEaXNhYmxlZFNlbFwiXG4gICAgPjwvaXB0LXNlbGVjdD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICA8aXB0LXNlbGVjdFxuICAgICAgW2luaXRpYWxWYWx1ZV09XCJjb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYWdyZWVtZW50X2J5X2NhdGVnb3J5J10udmFsdWVcIlxuICAgICAgW3NlbGVjdENvZGVdPVwiY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2FncmVlbWVudF9ieV9jYXRlZ29yeSddLnZhbHVlID09PSBudWxsPyAnQ29udmVuaW8gcG9yIGNhdGVnb3JpYSc6IGNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhZ3JlZW1lbnRfYnlfY2F0ZWdvcnknXS52YWx1ZVwiXG4gICAgICBbZGVmYXVsdFRleHRdPVwiJ0NvbnZlbmlvIHBvciBjYXRlZ29yaWEnXCJcbiAgICAgIFtpc1JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgKGV2ZW50U2VsZWN0KT1cInNlbGVjdEFncmVlbWVudEJ5Q2F0ZWdvcnkoJGV2ZW50KVwiXG4gICAgICBbZGF0YV09XCJhZ3JlZW1lbnRzXCJcbiAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhZ3JlZW1lbnRfYnlfY2F0ZWdvcnknXVwiXG4gICAgICBbZGlzYWJsZWRTZWxdPVwiaXNEaXNhYmxlZFNlbFwiXG4gICAgPjwvaXB0LXNlbGVjdD5cbiAgICA8aXB0LXNlbGVjdFxuICAgICAgW2luaXRpYWxWYWx1ZV09XCJjb2RGb3JtU3RlcE9uZS5jb250cm9sc1snZW5nbGlzaF9sZXZlbCddLnZhbHVlXCJcbiAgICAgIFtzZWxlY3RDb2RlXT1cImNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydlbmdsaXNoX2xldmVsJ10udmFsdWUgPT09IG51bGw/ICdOaXZlbCBkZSBpbmdsw6lzJzogY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2VuZ2xpc2hfbGV2ZWwnXS52YWx1ZVwiXG4gICAgICBbZGVmYXVsdFRleHRdPVwiJ05pdmVsIGRlIGluZ2zDqXMnXCJcbiAgICAgIFtpc1JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgKGV2ZW50U2VsZWN0KT1cInNlbGVjdExldmVsKCRldmVudClcIlxuICAgICAgW2RhdGFdPVwibGV2ZWxzXCJcbiAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydlbmdsaXNoX2xldmVsJ11cIlxuICAgICAgW2Rpc2FibGVkU2VsXT1cImlzRGlzYWJsZWRTZWxcIlxuICAgID48L2lwdC1zZWxlY3Q+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgPGlwdC1zZWxlY3RcbiAgICAgIFtpbml0aWFsVmFsdWVdPVwiY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2F2YWlsaWJsZV9jb3Vyc2VzJ10udmFsdWVcIlxuICAgICAgW3NlbGVjdENvZGVdPVwiY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2F2YWlsaWJsZV9jb3Vyc2VzJ10udmFsdWUgPT09IG51bGw/ICdHcnVwb3MgZGlzcG9uaWJsZXMnOiBjb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYXZhaWxpYmxlX2NvdXJzZXMnXS52YWx1ZVwiXG4gICAgICBbZGVmYXVsdFRleHRdPVwiJ0dydXBvcyBkaXNwb25pYmxlcydcIlxuICAgICAgW2lzUmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAoZXZlbnRTZWxlY3QpPVwic2VsZWN0QXZhaWxpYmxlQ291cnNlcygkZXZlbnQpXCJcbiAgICAgIFtkYXRhXT1cImF2YWlsaWJsZUNvdXJzZXNcIlxuICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2F2YWlsaWJsZV9jb3Vyc2VzJ11cIlxuICAgICAgW2Rpc2FibGVkU2VsXT1cImlzRGlzYWJsZWRTZWxcIlxuICAgID48L2lwdC1zZWxlY3Q+XG4gIDwvZGl2PlxuICA8c3BhbiAqbmdJZj1cIiFoYXNBdmFpbGFibGVDb3Vyc2VcIiBjbGFzcz1cIm10LTEgcGwtMiB0ZXh0LXJlZC01MDBcIj5Ub2RhdsOtYSBubyBoYXkgY3Vyc29zIGNvbiBlc3RhcyBjYXJhY3RlcsOtc3RpY2FzLjwvc3Bhbj5cbjwvZm9ybT5cblxuPGRpdiBjbGFzcz1cImZsZXggbXQtMiBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgPHNwYW4gKm5nSWY9XCJjb2RGb3JtU3RlcE9uZS5pbnZhbGlkICYmIGNvZEZvcm1TdGVwT25lLnRvdWNoZWRcIiBjbGFzcz1cInRleHQtcmVkLTUwMCBmb250LWJvbGQgdGV4dC1jZW50ZXIgbXQtMSBweS0yIGJnLXJlZC0xMDAgdy1mdWxsIGJvcmRlci1yb3VuZC14bFwiPkZhbHRhbiBjYW1wb3MgcG9yIGxsZW5hci48L3NwYW4+XG4gIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIFtjbGFzc109XCJpc0VkaXRDb2QgPyAnbWwtYXV0byB5ZWxsb3ctMzAwIHAtYnV0dG9uLXNtJyA6ICdtbC1hdXRvIHAtYnV0dG9uLXNtJ1wiIChjbGljayk9XCJzZW5kRm9ybSgpXCIgcEJ1dHRvbiBsYWJlbD1cIlNpZ3VpZW50ZVwiIGljb249XCJwaSBwaS1hcnJvdy1yaWdodFwiPjwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
|
|
435
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLWZvcm0tc3RlcC1vbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVzaWduLXN5c3RlbS9zcmMvbGliL2NvZC9zdGVwcy9jb2QtZm9ybS1zdGVwLW9uZS9jb2QtZm9ybS1zdGVwLW9uZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXNpZ24tc3lzdGVtL3NyYy9saWIvY29kL3N0ZXBzL2NvZC1mb3JtLXN0ZXAtb25lL2NvZC1mb3JtLXN0ZXAtb25lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUErQyxNQUFNLGVBQWUsQ0FBQztBQUN2SSxPQUFPLEVBQTBCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFzQixNQUFNLDRCQUE0QixDQUFDO0FBRzlFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7O0FBT2hDLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxZQUFZO0lBd0J2RCxZQUNVLEVBQWUsRUFDZixhQUE0QixFQUM1QixXQUF3QixFQUN4QixhQUE0QixFQUM1QixtQkFBd0MsRUFDeEMsS0FBd0I7UUFFaEMsS0FBSyxFQUFFLENBQUM7UUFQQSxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2Ysa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQXRCeEIsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFD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QUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JELENBQUM7O29IQW5jVSx1QkFBdUI7d0dBQXZCLHVCQUF1QixvWENqQnBDLHEyR0FrRUE7MkZEakRhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSx1QkFBdUI7c1BBTXhCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDSSxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgR2V0QXZhaWxpYmxlQ291cnNlc1JxIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvY291cnNlL2NvdXJzZS1ycS5tb2RlbCc7XG5pbXBvcnQgeyBDb3BpZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9jb3BpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBDb3Vyc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9jb3Vyc2Utc2VydmljZS9jb3Vyc2Utc2VydmljZS5tb2RlbCc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdXRpbHMvYmFzZS1zZXJ2aWNlL2Jhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDb2RGb3JtQ29udHJvbHMgfSBmcm9tICcuLi8uLi9sb2dpYy9jb2QtZm9ybS1jb250cm9scyc7XG5pbXBvcnQgeyBDb2RGb3JtU3RlcHMsIGxvY2FsU3RvcmFnZVZhbHVlcyB9IGZyb20gJy4uLy4uL2xvZ2ljL2NvZC1mb3JtLXN0ZXBzJztcbmltcG9ydCB7IENvbW11bmljYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9sb2dpYy9jb21tdW5pY2F0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBJQWdyZWVtZW50UnMsIElDb3Vyc2VUeXBlUnMsIElQYXJhbWV0ZXJzQWxsUnMgfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9wYXJhbWV0ZXJzL3BhcmFtZXRlcnMtcnMubW9kZWwnO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNvZC1mb3JtLXN0ZXAtb25lJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvZC1mb3JtLXN0ZXAtb25lLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29kLWZvcm0tc3RlcC1vbmUuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDb2RGb3JtU3RlcE9uZUNvbXBvbmVudCBleHRlbmRzIENvZEZvcm1TdGVwcyBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KCkgaW5pdGlhbERhdGE/OiBhbnk7XG4gIEBJbnB1dCgpIGRhdGFQcmV2aXVzQ29kRGF0YT86IGFueTtcbiAgQElucHV0KCkgaXNFZGl0Q29kPzogYm9vbGVhbjtcbiAgQElucHV0KCkgY291cnNlU2VsZWN0UmVub3ZhdGlvbj86YW55O1xuICBASW5wdXQoKSBpc1Jlbm92YXRpb24/OmFueTtcbiAgQElucHV0KCkgcGFyYW1ldGVyc0FsbD86IElQYXJhbWV0ZXJzQWxsUnM7XG4gIEBPdXRwdXQoKSBjaGFuZ2VTdGVwRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICBjb3BpZXM6IGFueTtcbiAgY29kRm9ybVN0ZXBPbmUhOiBGb3JtR3JvdXA7XG4gIGhhc0F2YWlsYWJsZUNvdXJzZSE6IGJvb2xlYW47XG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICAvLyBQYXJhbWV0ZXJzXG4gIGFncmVlbWVudHM6IElBZ3JlZW1lbnRSc1tdPVtdO1xuICBhdmFpbGlibGVDb3Vyc2VzOiBhbnlbXSA9IFtdO1xuICBjb3Vyc2VfdHlwZTogSUNvdXJzZVR5cGVSc1tdPVtdO1xuICBsZXZlbHM6IGFueTtcbiAgcGxhbnM6IGFueTtcbiAgaXNEaXNhYmxlZFNlbDpib29sZWFuPWZhbHNlXG4gIC8vIENvbnRyb2xzIGRlbCBmb3JtdWxhcmlvXG4gIGNvbnRyb2xzID0gbmV3IENvZEZvcm1Db250cm9scygpLmNvbnRyb2xzWzBdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY29waWVzU2VydmljZTogQ29waWVzU2VydmljZSxcbiAgICBwcml2YXRlIGJhc2VTZXJ2aWNlOiBCYXNlU2VydmljZSxcbiAgICBwcml2YXRlIGNvdXJzZVNlcnZpY2U6IENvdXJzZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21tdW5pY2F0b3JTZXJ2aWNlOiBDb21tdW5pY2F0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb3BpZXMgPSB0aGlzLmNvcGllc1NlcnZpY2UuY29waWVzO1xuICB9XG5cbiAgLyogRXMgbmVjZXNhcmlvIHJlY29ycmVyIGVsIGFycmF5IGRlIGNvbnRyb2xzIGRlIG51ZXN0cm8gZm9ybXVsYXJpbyBwYXJhOlxuICAgIOKchSBMZWVyIGVsIExvY2FsIFN0b3JhZ2UgeSBzZXRlYXIgbG9zIHZhbG9yZXNcbiAgICDinIUgU3Vic2NyaWJpcnNlIGEgbG9zIGNhbWJpb3MgZGVsIGZvcm11bGFyaW8gcGFyYSBzZXRlYXIgdmFsb3JlcyBudWV2b3NcblxuICAgIE5vdGE6IGxhIGNsYXNlIENvZEZvcm1TdGVwcygpIHNlIGVuY2FyZ2EgZGUgdG9kYSBsYSBsw7NnaWNhIGRlIExTIGNvbiBsb3MgcGFzb3MgZGVsIGZvcm11bGFyaW8gZGVsIENPRFxuICAqL1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcblxuICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgICB0aGlzLmdldFBhcmFtZXRlcnMoKTtcbiAgICB0aGlzLnN0YXJ0TG9jYWxTdG9yYWdlV29yaygpO1xuICAgIHRoaXMuc2V0VmFsdWVzQnlMb2NhbFN0b3JhZ2UoKVxuICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2NvdXJzZV90eXBlJ10udmFsdWVDaGFuZ2VzXG4gICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLmNvbW11bmljYXRvclNlcnZpY2Uuc2V0Q3VycmVudENvdXJzZVR5cGUodmFsdWUpKTtcblxuICAgIHRoaXMuY29tbXVuaWNhdG9yU2VydmljZS5zZXRDdXJyZW50QWdyZWVtZW50KHRoaXMubG9jYWxTdG9yYWdlQ09ELmdldENvZEZvcm1EYXRhKDEsICdhZ3JlZW1lbnRfYnlfY2F0ZWdvcnknKSEpO1xuXG4gICAgICAgIC8vIEzDs2dpY2EgcHJpbmNpcGFsIGRlIGNhbWJpb3NcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2luaXRpYWxEYXRhJ10gfHwgY2hhbmdlc1snZGF0YVByZXZpdXNDb2REYXRhJ10pIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZURhdGFDaGFuZ2VzKGNoYW5nZXMpO1xuICAgICAgfVxuICBcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpOyBcbiAgICAgIC8vIGNvbnN0IHNob3VsZFByb2Nlc3NJbml0aWFsRGF0YSA9IGNoYW5nZXNbJ2luaXRpYWxEYXRhJ10gJiYgXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbERhdGEgIT0gbnVsbCAmJiBcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhUHJldml1c0NvZERhdGEgPT09IG51bGw7XG5cbiAgICAgIC8vIGNvbnN0IHNob3VsZFByb2Nlc3NQcmV2aXVzRGF0YSA9IHRoaXMuZGF0YVByZXZpdXNDb2REYXRhICE9IG51bGwgJiYgXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRWRpdENvZCA9PT0gZmFsc2UgJiYgXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUmVub3ZhdGlvbiA9PT0gZmFsc2U7XG5cbiAgICAgIC8vIGlmIChzaG91bGRQcm9jZXNzSW5pdGlhbERhdGEgfHwgc2hvdWxkUHJvY2Vzc1ByZXZpdXNEYXRhKSB7XG4gICAgICAvLyAgIHRoaXMucHJvY2Vzc0RhdGEodGhpcy5pbml0aWFsRGF0YSk7XG4gICAgICAvLyAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgLy8gICBjb25zb2xlLmxvZyhcIkVudHJvIGVuIHRoaXMucHJvY2Vzc0RhdGEgY29uIGluaXRpYWxEYXRhXCIpO1xuICAgICAgLy8gfSBlbHNlIHtcbiAgICAgIC8vICAgLy8gTWFuZWpvIG3DoXMgY29udHJvbGFkbyBkZWwgXCJlbHNlXCJcbiAgICAgIC8vICAgICBjb25zb2xlLmxvZyhcImVudHJlIGVuIGVsIGVsc2UgcXVlIGJvcnJhIHRvZG8gZW4gbnVsbFwiKTtcbiAgICAgIC8vICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhY2FkZW1pY19wbGFuJ10uc2V0VmFsdWUobnVsbCk7XG4gICAgICAvLyAgICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snY291cnNlX3R5cGUnXS5zZXRWYWx1ZShudWxsKTtcbiAgICAgIC8vICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhZ3JlZW1lbnRfYnlfY2F0ZWdvcnknXS5zZXRWYWx1ZShudWxsKTtcbiAgICAgIC8vICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydlbmdsaXNoX2xldmVsJ10uc2V0VmFsdWUobnVsbCk7XG4gICAgICAvLyAgICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYXZhaWxpYmxlX2NvdXJzZXMnXS5zZXRWYWx1ZShudWxsKTtcbiAgICAgIC8vICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydjb3Vyc2VfbW9kYWxpdHknXS5zZXRWYWx1ZShudWxsKTtcbiAgICAgIC8vIH1cbiAgICAvLyBpZiAoY2hhbmdlc1snaW5pdGlhbERhdGEnXSAmJiB0aGlzLmluaXRpYWxEYXRhICE9IG51bGwgJiYgdGhpcy5kYXRhUHJldml1c0NvZERhdGEgPT09IG51bGwgfHwgdGhpcy5kYXRhUHJldml1c0NvZERhdGEgIT0gbnVsbCAgJiYgdGhpcy5pc0VkaXRDb2QgPT09IGZhbHNlICYmIHRoaXMuaXNSZW5vdmF0aW9uID09PSBmYWxzZSkge1xuICAgIC8vICAgdGhpcy5wcm9jZXNzRGF0YSh0aGlzLmluaXRpYWxEYXRhKTtcbiAgICAvLyAgIGNvbnNvbGUubG9nKFwiRW50cm8gZW4gdGhpcy5wcm9jZXNzRGF0YSBjb24gaW5pdGlhbERhdGFcIik7XG4gICAgLy8gICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAvLyB9ZWxzZXtcbiAgICAvLyAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2FjYWRlbWljX3BsYW4nXS5zZXRWYWx1ZShudWxsKTtcbiAgICAvLyAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2NvdXJzZV90eXBlJ10uc2V0VmFsdWUobnVsbCk7XG4gICAgLy8gICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhZ3JlZW1lbnRfYnlfY2F0ZWdvcnknXS5zZXRWYWx1ZShudWxsKTtcbiAgICAvLyAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2VuZ2xpc2hfbGV2ZWwnXS5zZXRWYWx1ZShudWxsKTtcbiAgICAvLyAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2F2YWlsaWJsZV9jb3Vyc2VzJ10uc2V0VmFsdWUobnVsbCk7XG4gICAgLy8gICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydjb3Vyc2VfbW9kYWxpdHknXS5zZXRWYWx1ZShudWxsKTtcbiAgICAvLyB9XG5cbiAgICAvLyBpZiAoY2hhbmdlc1snZGF0YVByZXZpdXNDb2REYXRhJ10gJiYgdGhpcy5kYXRhUHJldml1c0NvZERhdGEgIT0gbnVsbCAgJiYgdGhpcy5pc0VkaXRDb2QgJiYgdGhpcy5pc1Jlbm92YXRpb24gPT09IGZhbHNlICkge1xuICAgIC8vICAgdGhpcy5wcm9jZXNzRGF0YSh0aGlzLmRhdGFQcmV2aXVzQ29kRGF0YSk7XG4gICAgLy8gICBjb25zb2xlLmxvZyhcIkVudHJvIGVuIHRoaXMucHJvY2Vzc0RhdGEgY29uIGRhdGFQcmV2aXVzQ29kRGF0YVwiKTtcbiAgICAvLyAgIGlmICh0aGlzLmlzRWRpdENvZCAmJiAhdGhpcy5kYXRhUHJldml1c0NvZERhdGEuZWRpdF9jb3Vyc2VfcGF5bWVudCkge1xuICAgIC8vICAgICB0aGlzLmlzRGlzYWJsZWRTZWwgPSB0cnVlO1xuICAgIC8vICAgfSBlbHNlIHtcbiAgICAvLyAgICAgdGhpcy5pc0Rpc2FibGVkU2VsID0gZmFsc2U7XG4gICAgLy8gICB9XG5cbiAgICAvLyAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIC8vIH1lbHNlIGlmKGNoYW5nZXNbJ2RhdGFQcmV2aXVzQ29kRGF0YSddICYmIHRoaXMuZGF0YVByZXZpdXNDb2REYXRhICE9IG51bGwgJiYgIXRoaXMuaXNFZGl0Q29kICYmIHRoaXMuY291cnNlU2VsZWN0UmVub3ZhdGlvbiAmJiB0aGlzLmlzUmVub3ZhdGlvbiA9PT0gdHJ1ZSApe1xuICAgIC8vICAgdGhpcy5zZXREYXRhQ29kUmVub3ZhdGlvblNlbGVjdCgpO1xuICAgIC8vICAgdGhpcy5pc0Rpc2FibGVkU2VsPSB0cnVlXG4gICAgLy8gICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAvLyAgIH1cblxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVEYXRhQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gQ2FzbyAxOiBIYXkgaW5pdGlhbERhdGEgeSBOTyBoYXkgZGF0YVByZXZpdXNDb2REYXRhXG4gICAgaWYgKGNoYW5nZXNbJ2luaXRpYWxEYXRhJ10/LmN1cnJlbnRWYWx1ZSAmJiAhdGhpcy5pc1Jlbm92YXRpb24gJiYgIXRoaXMuaXNFZGl0Q29kKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0RhdGEodGhpcy5pbml0aWFsRGF0YSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDYXNvIDI6IEhheSBkYXRhUHJldml1c0NvZERhdGFcbiAgICBpZiAoY2hhbmdlc1snZGF0YVByZXZpdXNDb2REYXRhJ10/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAvLyBTdWJjYXNvIDIuMTogRXMgZWRpY2nDs25cbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0Q29kICYmICF0aGlzLmlzUmVub3ZhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGF0YSh0aGlzLmRhdGFQcmV2aXVzQ29kRGF0YSk7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWRTZWwgPSAhdGhpcy5kYXRhUHJldml1c0NvZERhdGEuZWRpdF9jb3Vyc2VfcGF5bWVudDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBTdWJjYXNvIDIuMjogRXMgcmVub3ZhY2nDs25cbiAgICAgICAgaWYgKCF0aGlzLmlzRWRpdENvZCAmJiB0aGlzLmlzUmVub3ZhdGlvbiAmJiB0aGlzLmNvdXJzZVNlbGVjdFJlbm92YXRpb24pIHtcbiAgICAgICAgICB0aGlzLnNldERhdGFDb2RSZW5vdmF0aW9uU2VsZWN0KCk7XG4gICAgICAgICAgdGhpcy5pc0Rpc2FibGVkU2VsID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdWJjYXNvIDIuMjogdmllbmUgY29uIGluaXRpYWxEYXRhXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxEYXRhICYmICF0aGlzLmlzRWRpdENvZCAmJiAhdGhpcy5pc1Jlbm92YXRpb24pIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NEYXRhKHRoaXMuaW5pdGlhbERhdGEpO1xuICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZFNlbCA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENhc28gMzogTmluZ3VuYSBjb25kaWNpw7NuIGFudGVyaW9yIHNlIGN1bXBsacOzIChyZXNldCBjb250cm9sYWRvKVxuICAgIHRoaXMucmVzZXRGb3JtKCk7XG59XG5cbiAgcHJpdmF0ZSBwcm9jZXNzRGF0YShkYXRhOiBhbnkpIHtcbiAgICBjb25zdCB7IGNvZEZvcm1TdGVwT25lIH0gPSB0aGlzO1xuICAgIHRoaXMuZ2V0QWdyZWVtZW50QnlQbGFuKGRhdGEuY291cnNlX3R5cGU/LmFjYWRlbWljX3BsYW4uY29kZSk7XG4gICAgdGhpcy5nZXRDb3Vyc2VUeXBlKGRhdGEuY291cnNlX3R5cGU/LmFjYWRlbWljX3BsYW4uY29kZSk7XG4gICAgY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2VuZ2xpc2hfbGV2ZWwnXS5zZXRWYWx1ZShkYXRhLmVuZ2xpc2hfbGV2ZWw/LmNvZGUpO1xuICAgIGNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhZ3JlZW1lbnRfYnlfY2F0ZWdvcnknXS5zZXRWYWx1ZShkYXRhLmFncmVlbWVudD8uY29kZSk7XG4gICAgY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2NvdXJzZV90eXBlJ10uc2V0VmFsdWUoZGF0YS5jb3Vyc2VfdHlwZT8uY29kZSk7XG4gICAgY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2FjYWRlbWljX3BsYW4nXS5zZXRWYWx1ZShkYXRhLmNvdXJzZV90eXBlPy5hY2FkZW1pY19wbGFuLmNvZGUpO1xuICAgIHRoaXMuZ2V0QXZhaWxpYmxlQ291cnNlcygpO1xuXG4gICAgaWYgKHRoaXMuaXNFZGl0Q29kKSB7XG4gICAgICB0aGlzLnNldERhdGFGcm9tRWRpdENvZEhpc3RvcnkoKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzRWRpdENvZCAmJiB0aGlzLmluaXRpYWxEYXRhICE9IG51bGwpIHtcbiAgICAgIHRoaXMuc2V0RGF0YUZyb21Vc2VySGlzdG9yeSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldERhdGFGcm9tVXNlckhpc3RvcnkoKXtcbiAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhY2FkZW1pY19wbGFuJ10uc2V0VmFsdWUodGhpcy5pbml0aWFsRGF0YS5jb3Vyc2VfdHlwZS5hY2FkZW1pY19wbGFuLmNvZGUpO1xuICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2NvdXJzZV90eXBlJ10uc2V0VmFsdWUodGhpcy5pbml0aWFsRGF0YS5jb3Vyc2VfdHlwZS5jb2RlKTtcbiAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhZ3JlZW1lbnRfYnlfY2F0ZWdvcnknXS5zZXRWYWx1ZSh0aGlzLmluaXRpYWxEYXRhLmFncmVlbWVudC5jb2RlKTtcbiAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydlbmdsaXNoX2xldmVsJ10uc2V0VmFsdWUodGhpcy5pbml0aWFsRGF0YS5lbmdsaXNoX2xldmVsLmNvZGUpO1xuICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2F2YWlsaWJsZV9jb3Vyc2VzJ10uc2V0VmFsdWUodGhpcy5pbml0aWFsRGF0YS5jb2RlKTtcbiAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydjb3Vyc2VfbW9kYWxpdHknXS5zZXRWYWx1ZSh0aGlzLmluaXRpYWxEYXRhLmNvdXJzZV9tb2RhbGl0eS5jb2RlKTtcbiAgfVxuXG4gIHNldERhdGFGcm9tRWRpdENvZEhpc3RvcnkoKXtcblxuICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2FjYWRlbWljX3BsYW4nXS5zZXRWYWx1ZSh0aGlzLmRhdGFQcmV2aXVzQ29kRGF0YS5jb3Vyc2VfdHlwZS5hY2FkZW1pY19wbGFuLmNvZGUgPyB0aGlzLmRhdGFQcmV2aXVzQ29kRGF0YS5jb3Vyc2VfdHlwZS5hY2FkZW1pY19wbGFuLmNvZGUgOiBudWxsKTtcbiAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydjb3Vyc2VfdHlwZSddLnNldFZhbHVlKHRoaXMuZGF0YVByZXZpdXNDb2REYXRhLmNvdXJzZV90eXBlLmNvZGUgPyB0aGlzLmRhdGFQcmV2aXVzQ29kRGF0YS5jb3Vyc2VfdHlwZS5jb2RlIDogbnVsbCk7XG4gICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYWdyZWVtZW50X2J5X2NhdGVnb3J5J10uc2V0VmFsdWUodGhpcy5kYXRhUHJldml1c0NvZERhdGEuYWdyZWVtZW50LmNvZGUgPyB0aGlzLmRhdGFQcmV2aXVzQ29kRGF0YS5hZ3JlZW1lbnQuY29kZSA6IG51bGwpO1xuICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2VuZ2xpc2hfbGV2ZWwnXS5zZXRWYWx1ZSh0aGlzLmRhdGFQcmV2aXVzQ29kRGF0YS5lbmdsaXNoX2xldmVsLmNvZGUgPyB0aGlzLmRhdGFQcmV2aXVzQ29kRGF0YS5lbmdsaXNoX2xldmVsLmNvZGUgOiBudWxsKTtcbiAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhdmFpbGlibGVfY291cnNlcyddLnNldFZhbHVlKHRoaXMuZGF0YVByZXZpdXNDb2REYXRhLmNvdXJzZS5jb2RlID8gdGhpcy5kYXRhUHJldml1c0NvZERhdGEuY291cnNlLmNvZGUgOiBudWxsKTtcbiAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydjb3Vyc2VfbW9kYWxpdHknXS5zZXRWYWx1ZSh0aGlzLmRhdGFQcmV2aXVzQ29kRGF0YS5jb3Vyc2UuY291cnNlX21vZGFsaXR5ID8gdGhpcy5kYXRhUHJldml1c0NvZERhdGEuY291cnNlLmNvdXJzZV9tb2RhbGl0eSA6IG51bGwpO1xuICB9XG4gIHNldERhdGFDb2RSZW5vdmF0aW9uU2VsZWN0KCl7XG4gICAgdGhpcy5nZXRBZ3JlZW1lbnRCeVBsYW4odGhpcy5jb3Vyc2VTZWxlY3RSZW5vdmF0aW9uLmNvdXJzZV90eXBlPy5hY2FkZW1pY19wbGFuLmNvZGUpO1xuICAgIHRoaXMuZ2V0Q291cnNlVHlwZSh0aGlzLmNvdXJzZVNlbGVjdFJlbm92YXRpb24uY291cnNlX3R5cGU/LmFjYWRlbWljX3BsYW4uY29kZSk7XG4gICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYWNhZGVtaWNfcGxhbiddLnNldFZhbHVlKHRoaXMuY291cnNlU2VsZWN0UmVub3ZhdGlvbi5jb3Vyc2VfdHlwZT8uYWNhZGVtaWNfcGxhbi5jb2RlID8gdGhpcy5jb3Vyc2VTZWxlY3RSZW5vdmF0aW9uLmNvdXJzZV90eXBlPy5hY2FkZW1pY19wbGFuLmNvZGUgOiBudWxsKTtcbiAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydjb3Vyc2VfdHlwZSddLnNldFZhbHVlKHRoaXMuY291cnNlU2VsZWN0UmVub3ZhdGlvbi5jb3Vyc2VfdHlwZT8uY29kZSA/IHRoaXMuY291cnNlU2VsZWN0UmVub3ZhdGlvbi5jb3Vyc2VfdHlwZT8uY29kZSA6IG51bGwpO1xuICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2FncmVlbWVudF9ieV9jYXRlZ29yeSddLnNldFZhbHVlKHRoaXMuY291cnNlU2VsZWN0UmVub3ZhdGlvbi5hZ3JlZW1lbnQ/LmNvZGUgPyB0aGlzLmNvdXJzZVNlbGVjdFJlbm92YXRpb24uYWdyZWVtZW50Py5jb2RlIDogbnVsbCk7XG4gICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snZW5nbGlzaF9sZXZlbCddLnNldFZhbHVlKHRoaXMuY291cnNlU2VsZWN0UmVub3ZhdGlvbi5lbmdsaXNoX2xldmVsPy5jb2RlID8gdGhpcy5jb3Vyc2VTZWxlY3RSZW5vdmF0aW9uLmVuZ2xpc2hfbGV2ZWw/LmNvZGUgOiBudWxsKTtcbiAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhdmFpbGlibGVfY291cnNlcyddLnNldFZhbHVlKHRoaXMuY291cnNlU2VsZWN0UmVub3ZhdGlvbj8uY29kZSA/IHRoaXMuY291cnNlU2VsZWN0UmVub3ZhdGlvbj8uY29kZSA6IG51bGwpO1xuICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2NvdXJzZV9tb2RhbGl0eSddLnNldFZhbHVlKHRoaXMuY291cnNlU2VsZWN0UmVub3ZhdGlvbi5jb3Vyc2VfbW9kYWxpdHk/LmNvZGUgPyB0aGlzLmNvdXJzZVNlbGVjdFJlbm92YXRpb24uY291cnNlX21vZGFsaXR5Py5jb2RlIDogbnVsbCk7XG4gICAgdGhpcy5nZXRBdmFpbGlibGVDb3Vyc2VzKCk7XG4gIH1cblxuICBzdGFydExvY2FsU3RvcmFnZVdvcmsoKSB7XG4gICAgdGhpcy5jb250cm9scy5mb3JFYWNoKGNvbnRyb2wgPT4ge1xuICAgICAgbGV0IGxvY2FsU3RvcmFnZVZhbHVlOiBsb2NhbFN0b3JhZ2VWYWx1ZXMgPSB0aGlzLnJlYWRBbmRXcml0ZUxTKDEsIGNvbnRyb2wubmFtZSk7XG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzW2NvbnRyb2wubmFtZV0uc2V0VmFsdWUobG9jYWxTdG9yYWdlVmFsdWUudmFsdWUpO1xuICAgICAgdGhpcy5saXN0ZW5Gb3JtQ2hhbmdlcygxLCBjb250cm9sLm5hbWUsIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbY29udHJvbC5uYW1lXS52YWx1ZUNoYW5nZXMpO1xuICAgIH0pO1xuICB9XG5cblxuICBnZXRQYXJhbWV0ZXJzKCkge1xuICAgIHRoaXMucGxhbnMgPSB0aGlzLnBhcmFtZXRlcnNBbGw/LmFjYWRlbWljUGxhbjtcbiAgICB0aGlzLmxldmVscyA9IHRoaXMucGFyYW1ldGVyc0FsbD8uZW5nbGlzaF9sZXZlbHM7XG4gIH1cblxuICBpbml0Rm9ybSgpIHtcbiAgICB0aGlzLmNvZEZvcm1TdGVwT25lID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBhY2FkZW1pY19wbGFuOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBjb3Vyc2VfdHlwZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgYWdyZWVtZW50X2J5X2NhdGVnb3J5OiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBlbmdsaXNoX2xldmVsOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBhdmFpbGlibGVfY291cnNlczogWycnLCBbXV0sXG4gICAgICBjb3Vyc2VfbW9kYWxpdHk6IFsnJ10sXG5cbiAgICB9KTtcbiAgfVxuXG4gIHNldFZhbHVlc0J5TG9jYWxTdG9yYWdlKCkge1xuICAgIGNvbnN0IGFjYWRlbWljUGxhbiA9IHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2FjYWRlbWljX3BsYW4nXS52YWx1ZTtcbiAgICBpZiAoYWNhZGVtaWNQbGFuKSB7XG4gICAgICB0aGlzLnNlbGVjdEFjYWRlbWljUGxhbihhY2FkZW1pY1BsYW4pO1xuICAgIH1cbiAgXG4gICAgY29uc3QgYWdyZWVtZW50QnlDYXRlZ29yeSA9IHBhcnNlSW50KHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2FncmVlbWVudF9ieV9jYXRlZ29yeSddLnZhbHVlKTtcbiAgICBjb25zdCBlbmdsaXNoTGV2ZWwgPSBwYXJzZUludCh0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydlbmdsaXNoX2xldmVsJ10udmFsdWUpO1xuICAgIGNvbnN0IGNvdXJzZU1vZGFsaXR5ID0gcGFyc2VJbnQodGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snY291cnNlX21vZGFsaXR5J10udmFsdWUpO1xuICBcbiAgICBpZiAoYWdyZWVtZW50QnlDYXRlZ29yeSAmJiBlbmdsaXNoTGV2ZWwgJiYgY291cnNlTW9kYWxpdHkpIHtcbiAgICAgIHRoaXMuZ2V0QXZhaWxpYmxlQ291cnNlcygpO1xuICAgIH1cbiAgfVxuXG4gIHNlbmRGb3JtKCkge1xuICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUubWFya0FzVG91Y2hlZCgpO1xuICAgIGlmICh0aGlzLmNvZEZvcm1TdGVwT25lLmludmFsaWQpIHJldHVybjtcblxuICAgIC8vIE1vdmVybm9zIGFsIHBhc28gMlxuICAgIHRoaXMuY2hhbmdlU3RlcEV2ZW50LmVtaXQoMSk7XG4gIH1cblxuICByZXNldEZvcm0oKSB7XG4gICAgLy8gdGhpcy5yZXNldExvY2FsU3RvcmFnZSh0aGlzLmNvbnRyb2xzKTtcbiAgICAvLyB0aGlzLmNvZEZvcm1TdGVwT25lLnJlc2V0KCk7XG4gICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYWNhZGVtaWNfcGxhbiddLnNldFZhbHVlKG51bGwpO1xuICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2NvdXJzZV90eXBlJ10uc2V0VmFsdWUobnVsbCk7XG4gICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYWdyZWVtZW50X2J5X2NhdGVnb3J5J10uc2V0VmFsdWUobnVsbCk7XG4gICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snZW5nbGlzaF9sZXZlbCddLnNldFZhbHVlKG51bGwpO1xuICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2F2YWlsaWJsZV9jb3Vyc2VzJ10uc2V0VmFsdWUobnVsbCk7XG4gICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snY291cnNlX21vZGFsaXR5J10uc2V0VmFsdWUobnVsbCk7XG4gIH1cblxuICAvLyBFdmVudG9zIGRlIGxvcyBzZWxlY3RzXG4gIHNlbGVjdEFjYWRlbWljUGxhbihhY2FkZW1pY19wbGFuOiBzdHJpbmcpIHtcbiAgICBpZiAoYWNhZGVtaWNfcGxhbiAhPT0gJ1BsYW4nKSB7XG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhY2FkZW1pY19wbGFuJ10uc2V0VmFsdWUocGFyc2VJbnQoYWNhZGVtaWNfcGxhbikpO1xuICAgICAgLy8gdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYWdyZWVtZW50X2J5X2NhdGVnb3J5J10uc2V0VmFsdWUobnVsbCk7XG4gICAgICAvLyB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydzY2hvb2xfbmFtZSddLnNldFZhbHVlKG51bGwpO1xuICAgICAgLy8gdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snY291cnNlX3R5cGUnXS5zZXRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMuZ2V0Q291cnNlVHlwZShwYXJzZUludChhY2FkZW1pY19wbGFuKSk7XG4gICAgICB0aGlzLmdldEFncmVlbWVudEJ5UGxhbihwYXJzZUludChhY2FkZW1pY19wbGFuKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2FjYWRlbWljX3BsYW4nXS5zZXRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2NvdXJzZV90eXBlJ10uc2V0VmFsdWUobnVsbCk7XG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhZ3JlZW1lbnRfYnlfY2F0ZWdvcnknXS5zZXRWYWx1ZShudWxsKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb3Vyc2VUeXBlKHBsYW46IG51bWJlcikge1xuICAgIGNvbnN0IHBsYW5OdW1iZXIgPSB0eXBlb2YgcGxhbiA9PT0gJ3N0cmluZycgPyBwYXJzZUludChwbGFuKSA6IHBsYW47XG4gICAgaWYgKHRoaXMucGFyYW1ldGVyc0FsbCAmJiB0aGlzLnBhcmFtZXRlcnNBbGw/LmNvdXJzZVR5cGUpIHtcbiAgICAgIHRoaXMuY291cnNlX3R5cGUgPSB0aGlzLnBhcmFtZXRlcnNBbGwuY291cnNlVHlwZS5maWx0ZXIoKGNvdXJzZSkgPT4ge1xuICAgICAgICByZXR1cm4gY291cnNlLmFjYWRlbWljX3BsYW4gPT09IHBsYW5OdW1iZXI7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb3Vyc2VfdHlwZSA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIGdldEFncmVlbWVudEJ5UGxhbihwbGFuOiBudW1iZXIpIHtcbiAgICBjb25zdCBwbGFuTnVtYmVyID0gdHlwZW9mIHBsYW4gPT09ICdzdHJpbmcnID8gcGFyc2VJbnQocGxhbikgOiBwbGFuO1xuICAgIGlmICh0aGlzLnBhcmFtZXRlcnNBbGwgJiYgdGhpcy5wYXJhbWV0ZXJzQWxsPy5hZ3JlZW1lbnQpIHtcbiAgICAgIHRoaXMuYWdyZWVtZW50cyA9IHRoaXMucGFyYW1ldGVyc0FsbC5hZ3JlZW1lbnQuZmlsdGVyKChhZ3JlZW1lbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIGFncmVlbWVudC5jYXRlZ29yeSA9PT0gcGxhbk51bWJlcjtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFncmVlbWVudHMgPSBbXTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RDb3Vyc2VzVHlwZXNCeVBsYW4oY291cnNlc1R5cGVzOiBhbnkpIHtcbiAgICBpZiAoY291cnNlc1R5cGVzICE9PSAnVGlwbyBkZSBwbGFuJykge1xuICAgICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snY291cnNlX21vZGFsaXR5J10uc2V0VmFsdWUobnVsbCk7XG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhdmFpbGlibGVfY291cnNlcyddLnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snY291cnNlX3R5cGUnXS5zZXRWYWx1ZShjb3Vyc2VzVHlwZXMpO1xuICAgICAgdGhpcy5nZXRBdmFpbGlibGVDb3Vyc2VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2NvdXJzZV90eXBlJ10uc2V0VmFsdWUobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0QWdyZWVtZW50QnlDYXRlZ29yeShhZ3JlZW1lbnRCeUNhdGVnb3JpZXM6IGFueSkge1xuICAgIGlmIChhZ3JlZW1lbnRCeUNhdGVnb3JpZXMgIT09ICdDb252ZW5pbyBwb3IgY2F0ZWdvcmlhJykge1xuICAgICAgLy8gdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snY291cnNlX21vZGFsaXR5J10uc2V0VmFsdWUobnVsbCk7XG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhZ3JlZW1lbnRfYnlfY2F0ZWdvcnknXS5zZXRWYWx1ZShhZ3JlZW1lbnRCeUNhdGVnb3JpZXMpO1xuICAgICAgdGhpcy5jb21tdW5pY2F0b3JTZXJ2aWNlLnNldEN1cnJlbnRBZ3JlZW1lbnQoYWdyZWVtZW50QnlDYXRlZ29yaWVzKTtcbiAgICAgIC8vIHRoaXMuZ2V0QXZhaWxpYmxlQ291cnNlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhZ3JlZW1lbnRfYnlfY2F0ZWdvcnknXS5zZXRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ3NjaG9vbF9uYW1lJ10uc2V0VmFsdWUobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0TGV2ZWwobGV2ZWxzOiBhbnkpIHtcbiAgICBpZiAobGV2ZWxzICE9PSAnTml2ZWwgZGUgaW5nbMOpcycpIHtcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2NvdXJzZV9tb2RhbGl0eSddLnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYXZhaWxpYmxlX2NvdXJzZXMnXS5zZXRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2VuZ2xpc2hfbGV2ZWwnXS5zZXRWYWx1ZShsZXZlbHMpO1xuICAgICAgdGhpcy5nZXRBdmFpbGlibGVDb3Vyc2VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2VuZ2xpc2hfbGV2ZWwnXS5zZXRWYWx1ZShudWxsKTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RBdmFpbGlibGVDb3Vyc2VzKGF2YWlsaWJsZUNvdXJzZXM6IGFueSkge1xuICAgIGlmIChhdmFpbGlibGVDb3Vyc2VzICE9PSAnR3J1cG9zIGRpc3BvbmlibGVzJykge1xuICAgICAgbGV0IGNvdXJzZU1vZCA9IHRoaXMuYXZhaWxpYmxlQ291cnNlcy5maW5kKG9iamV0byA9PiBvYmpldG8uY29kZSA9PT0gcGFyc2VJbnQoYXZhaWxpYmxlQ291cnNlcywgMTApKTtcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2NvdXJzZV9tb2RhbGl0eSddLnNldFZhbHVlKGNvdXJzZU1vZC5tb2RhbGl0eSk7XG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhdmFpbGlibGVfY291cnNlcyddLnNldFZhbHVlKGF2YWlsaWJsZUNvdXJzZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhdmFpbGlibGVfY291cnNlcyddLnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYWdyZWVtZW50X2J5X2NhdGVnb3J5J10uc2V0VmFsdWUobnVsbCk7XG4gICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydjb3Vyc2VfdHlwZSddLnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snZW5nbGlzaF9sZXZlbCddLnNldFZhbHVlKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRSZXF1ZXN0KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmNvZEZvcm1TdGVwT25lO1xuICAgIHJldHVybiAhIShcbiAgICAgIGZvcm0uZ2V0KCdlbmdsaXNoX2xldmVsJyk/LnZhbHVlICYmXG4gICAgICBmb3JtLmdldCgnYWdyZWVtZW50X2J5X2NhdGVnb3J5Jyk/LnZhbHVlICYmXG4gICAgICBmb3JtLmdldCgnY291cnNlX3R5cGUnKT8udmFsdWVcbiAgICApO1xuICB9XG5cbiAgLy8gZ2V0QXZhaWxpYmxlQ291cnNlcygpIHtcblxuICAvLyAgIGlmICh0aGlzLnZhbGlkUmVxdWVzdCgpKSB7XG4gIC8vICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gIC8vICAgICBsZXQgcmVxdWVzdF9hdmFpbGlibGVDb3Vyc2VzOiBHZXRBdmFpbGlibGVDb3Vyc2VzUnEgPSB7XG4gIC8vICAgICAgIHRva2VuOiB0aGlzLmJhc2VTZXJ2aWNlLmdldFVzZXJUb2tlbigpLFxuICAvLyAgICAgICBlbmdsaXNoX2xldmVsOiB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydlbmdsaXNoX2xldmVsJ10udmFsdWUsXG4gIC8vICAgICAgIGFncmVlbWVudDogdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYWdyZWVtZW50X2J5X2NhdGVnb3J5J10udmFsdWUsXG4gIC8vICAgICAgIGNvdXJzZV90eXBlOiB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydjb3Vyc2VfdHlwZSddLnZhbHVlLFxuICAvLyAgICAgfTtcblxuICAvLyAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldEF2YWlsYWJsZUNvdXJzZXNCeUxldkFncmVlQ1R5cGUocmVxdWVzdF9hdmFpbGlibGVDb3Vyc2VzKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gIC8vICAgICAgIGlmIChyZXNwb25zZS5kYXRhKSB7XG4gIC8vICAgICAgICAgdGhpcy5hdmFpbGlibGVDb3Vyc2VzID0gW107XG4gIC8vICAgICAgICAgbGV0IGNvdXJzZXM6IGFueVtdID0gcmVzcG9uc2UuZGF0YTtcbiAgLy8gICAgICAgICB0aGlzLmhhc0F2YWlsYWJsZUNvdXJzZSA9IHRydWU7XG4gIC8vICAgICAgICAgY291cnNlcy5mb3JFYWNoKGNvdXJzZSA9PiB7XG4gIC8vICAgICAgICAgICBsZXQgc2NoZWR1bGVQYXJ0cyA9IGNvdXJzZS5jb3Vyc2Vfc2NoZWR1bGVbMF0uc3BsaXQoXCIgXCIpO1xuICAvLyAgICAgICAgICAgbGV0IHN0YXJ0VGltZSA9IHNjaGVkdWxlUGFydHNbMl07XG4gIC8vICAgICAgICAgICB0aGlzLmF2YWlsaWJsZUNvdXJzZXMucHVzaCh7XG4gIC8vICAgICAgICAgICAgIGNvZGU6IGNvdXJzZS5jb2RlLFxuICAvLyAgICAgICAgICAgICBuYW1lOiBgJHtjb3Vyc2UuY29kZX0gQ3Vyc28gJHtjb3Vyc2UuY291cnNlX21vZGFsaXR5Lm5hbWUgPT09ICdQcmVzZW5jaWFsJyA/ICdQcmVzZW5jaWFsJyA6ICdWaXJ0dWFsJ30gLSBUZWFjaGVyICR7Y291cnNlLnRlYWNoZXJ9IC0gIEZlY2hhIGRlIGluaWNpbzogJHtjb3Vyc2UudG9fc3RhcnR9LCBIb3JhIGRlIGluaWNpbzogJHtzdGFydFRpbWV9LCBDdXBvcyBkaXNwOiAke2NvdXJzZS5hdmFpbGFibGVfY2FwYWNpdHl9YCxcbiAgLy8gICAgICAgICAgICAgbW9kYWxpdHk6IGNvdXJzZS5jb3Vyc2VfbW9kYWxpdHkuY29kZVxuICAvLyAgICAgICAgICAgfSk7XG4gIC8vICAgICAgICAgfSlcbiAgLy8gICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAvLyAgICAgICAgIGNvbnNvbGUubG9nKFwiYXZhaWxpYmxlQ291cnNlc1wiLHRoaXMuYXZhaWxpYmxlQ291cnNlcyk7XG4gIC8vICAgICAgICAgY29uc29sZS5sb2coXCJWYWxvcmVzIGRlbCBmb3JtdWxhcmlvOlwiLCB7XG4gIC8vICAgICAgICAgICBhY2FkZW1pY19wbGFuOiB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhY2FkZW1pY19wbGFuJ10udmFsdWUsXG4gIC8vICAgICAgICAgICBjb3Vyc2VfdHlwZTogdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snY291cnNlX3R5cGUnXS52YWx1ZSxcbiAgLy8gICAgICAgICAgIGFncmVlbWVudF9ieV9jYXRlZ29yeTogdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYWdyZWVtZW50X2J5X2NhdGVnb3J5J10udmFsdWUsXG4gIC8vICAgICAgICAgICBlbmdsaXNoX2xldmVsOiB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydlbmdsaXNoX2xldmVsJ10udmFsdWUsXG4gIC8vICAgICAgICAgICBhdmFpbGlibGVfY291cnNlczogdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYXZhaWxpYmxlX2NvdXJzZXMnXS52YWx1ZSxcbiAgLy8gICAgICAgICAgIGNvdXJzZV9tb2RhbGl0eTogdGhpcy5jb2RGb3JtU3RlcE9uZS5jb250cm9sc1snY291cnNlX21vZGFsaXR5J10udmFsdWUsXG4gIC8vICAgICAgICAgICBhZ3JlZW1lbnQ6IHRoaXMuY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2FncmVlbWVudCddLnZhbHVlLFxuICAvLyAgICAgICAgIH0pO1xuICAvLyAgICAgICB9IGVsc2UgeyAgXG4gIC8vICAgICAgICAgdGhpcy5oYXNBdmFpbGFibGVDb3Vyc2UgPSBmYWxzZTtcbiAgLy8gICAgICAgICB0aGlzLmNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhdmFpbGlibGVfY291cnNlcyddLnNldFZhbHVlKFwiXCIpO1xuICAvLyAgICAgICAgIHRoaXMuc2V0VmFsdWVTdGVwRm91cigpO1xuICAvLyAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgICAgfSk7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgZ2V0QXZhaWxpYmxlQ291cnNlcygpIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmcpIHJldHVybjtcbiAgICBpZiAodGhpcy52YWxpZFJlcXVlc3QoKSkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgXG4gICAgICAvLyBHdWFyZGEgbG9zIHZhbG9yZXMgYWN0dWFsZXMgYW50ZXMgZGUgbGEgbGxhbWFkYVxuICAgICAgY29uc3QgY3VycmVudFZhbHVlcyA9IHtcbiAgICAgICAgYWNhZGVtaWNfcGxhbjogdGhpcy5jb2RGb3JtU3RlcE9uZS5nZXQoJ2FjYWRlbWljX3BsYW4nKT8udmFsdWUsXG4gICAgICAgIGNvdXJzZV90eXBlOiB0aGlzLmNvZEZvcm1TdGVwT25lLmdldCgnY291cnNlX3R5cGUnKT8udmFsdWUsXG4gICAgICAgIGFncmVlbWVudF9ieV9jYXRlZ29yeTogdGhpcy5jb2RGb3JtU3RlcE9uZS5nZXQoJ2FncmVlbWVudF9ieV9jYXRlZ29yeScpPy52YWx1ZSxcbiAgICAgICAgZW5nbGlzaF9sZXZlbDogdGhpcy5jb2RGb3JtU3RlcE9uZS5nZXQoJ2VuZ2xpc2hfbGV2ZWwnKT8udmFsdWVcbiAgICAgIH07XG4gICAgICBsZXQgcmVxdWVzdF9hdmFpbGlibGVDb3Vyc2VzOiBHZXRBdmFpbGlibGVDb3Vyc2VzUnEgPSB7XG4gICAgICAgIHRva2VuOiB0aGlzLmJhc2VTZXJ2aWNlLmdldFVzZXJUb2tlbigpLFxuICAgICAgICBlbmdsaXNoX2xldmVsOiBjdXJyZW50VmFsdWVzLmVuZ2xpc2hfbGV2ZWwsXG4gICAgICAgIGFncmVlbWVudDogY3VycmVudFZhbHVlcy5hZ3JlZW1lbnRfYnlfY2F0ZWdvcnksXG4gICAgICAgIGNvdXJzZV90eXBlOiBjdXJyZW50VmFsdWVzLmNvdXJzZV90eXBlLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5jb3Vyc2VTZXJ2aWNlLmdldEF2YWlsYWJsZUNvdXJzZXNCeUxldkFncmVlQ1R5cGUocmVxdWVzdF9hdmFpbGlibGVDb3Vyc2VzKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9KSBcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgICAgIHRoaXMuYXZhaWxpYmxlQ291cnNlcyA9IHJlc3BvbnNlLmRhdGEubWFwKChjb3Vyc2U6YW55KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHNjaGVkdWxlUGFydHMgPSBjb3Vyc2UuY291cnNlX3NjaGVkdWxlWzBdPy5zcGxpdChcIiBcIikgfHwgW107XG4gICAgICAgICAgICAgICAgbGV0IHN0YXJ0VGltZSA9IHNjaGVkdWxlUGFydHNbMl0gfHwgJyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGNvZGU6IGNvdXJzZS5jb2RlLFxuICAgICAgICAgICAgICAgICAgbmFtZTogYCR7Y291cnNlLmNvZGV9IEN1cnNvICR7Y291cnNlLmNvdXJzZV9tb2RhbGl0eT8ubmFtZSA9PT0gJ1ByZXNlbmNpYWwnID8gJ1ByZXNlbmNpYWwnIDogJ1ZpcnR1YWwnfSAtIFRlYWNoZXIgJHtjb3Vyc2UudGVhY2hlcn0gLSBGZWNoYSBkZSBpbmljaW86ICR7Y291cnNlLnRvX3N0YXJ0fSwgSG9yYSBkZSBpbmljaW86ICR7c3RhcnRUaW1lfSwgQ3Vwb3MgZGlzcDogJHtjb3Vyc2UuYXZhaWxhYmxlX2NhcGFjaXR5fWAsXG4gICAgICAgICAgICAgICAgICBtb2RhbGl0eTogY291cnNlLmNvdXJzZV9tb2RhbGl0eT8uY29kZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLmhhc0F2YWlsYWJsZUNvdXJzZSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgeyAgXG4gICAgICAgICAgICAgIHRoaXMuaGFzQXZhaWxhYmxlQ291cnNlID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuY29kRm9ybVN0ZXBPbmUuZ2V0KCdhdmFpbGlibGVfY291cnNlcycpPy5zZXRWYWx1ZShudWxsKTtcbiAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZVN0ZXBGb3VyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYXNBdmFpbGFibGVDb3Vyc2UgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0VmFsdWVTdGVwRm91cigpe1xuICAgIHRoaXMuc2V0RGF0YUluTG9jYWxTdG9yYWdlKDQsICdwcm9ncmFtX3ByaWNlJywgbnVsbCk7XG4gICAgdGhpcy5zZXREYXRhSW5Mb2NhbFN0b3JhZ2UoNCwgJ3F1b3RhX3RpbWVzJywgbnVsbCk7XG4gICAgdGhpcy5zZXREYXRhSW5Mb2NhbFN0b3JhZ2UoNCwgJ3RvdGFsX3ByaWNlJywgbnVsbCk7XG4gIH1cbn1cbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiY29kRm9ybVN0ZXBPbmVcIiBjbGFzcz1cImdyaWRcIj5cbiAgPGRpdiBjbGFzcz1cImNvbFwiPlxuICAgIDxpcHQtc2VsZWN0XG4gICAgICBbaW5pdGlhbFZhbHVlXT1cImNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhY2FkZW1pY19wbGFuJ10udmFsdWVcIlxuICAgICAgW3NlbGVjdENvZGVdPVwiY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2FjYWRlbWljX3BsYW4nXS52YWx1ZSA9PT0gbnVsbD8gJ1BsYW4nOiBjb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYWNhZGVtaWNfcGxhbiddLnZhbHVlXCJcbiAgICAgIFtkZWZhdWx0VGV4dF09XCInUGxhbidcIlxuICAgICAgW2lzUmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAoZXZlbnRTZWxlY3QpPVwic2VsZWN0QWNhZGVtaWNQbGFuKCRldmVudClcIlxuICAgICAgW2RhdGFdPVwicGxhbnNcIlxuICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2FjYWRlbWljX3BsYW4nXVwiXG4gICAgICBbZGlzYWJsZWRTZWxdPVwiaXNEaXNhYmxlZFNlbFwiXG4gICAgPjwvaXB0LXNlbGVjdD5cbiAgICA8aXB0LXNlbGVjdFxuICAgICAgW2luaXRpYWxWYWx1ZV09XCJjb2RGb3JtU3RlcE9uZS5jb250cm9sc1snY291cnNlX3R5cGUnXS52YWx1ZVwiXG4gICAgICBbc2VsZWN0Q29kZV09XCJjb2RGb3JtU3RlcE9uZS5jb250cm9sc1snY291cnNlX3R5cGUnXS52YWx1ZSA9PT0gbnVsbD8gJ1RpcG8gZGUgcGxhbic6IGNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydjb3Vyc2VfdHlwZSddLnZhbHVlXCJcbiAgICAgIFtkZWZhdWx0VGV4dF09XCInVGlwbyBkZSBwbGFuJ1wiXG4gICAgICBbaXNSZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3RDb3Vyc2VzVHlwZXNCeVBsYW4oJGV2ZW50KVwiXG4gICAgICBbZGF0YV09XCJjb3Vyc2VfdHlwZVwiXG4gICAgICBbY29udHJvbF09XCJjb2RGb3JtU3RlcE9uZS5jb250cm9sc1snY291cnNlX3R5cGUnXVwiXG4gICAgICBbZGlzYWJsZWRTZWxdPVwiaXNEaXNhYmxlZFNlbFwiXG4gICAgPjwvaXB0LXNlbGVjdD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICA8aXB0LXNlbGVjdFxuICAgICAgW2luaXRpYWxWYWx1ZV09XCJjb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYWdyZWVtZW50X2J5X2NhdGVnb3J5J10udmFsdWVcIlxuICAgICAgW3NlbGVjdENvZGVdPVwiY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2FncmVlbWVudF9ieV9jYXRlZ29yeSddLnZhbHVlID09PSBudWxsPyAnQ29udmVuaW8gcG9yIGNhdGVnb3JpYSc6IGNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhZ3JlZW1lbnRfYnlfY2F0ZWdvcnknXS52YWx1ZVwiXG4gICAgICBbZGVmYXVsdFRleHRdPVwiJ0NvbnZlbmlvIHBvciBjYXRlZ29yaWEnXCJcbiAgICAgIFtpc1JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgKGV2ZW50U2VsZWN0KT1cInNlbGVjdEFncmVlbWVudEJ5Q2F0ZWdvcnkoJGV2ZW50KVwiXG4gICAgICBbZGF0YV09XCJhZ3JlZW1lbnRzXCJcbiAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydhZ3JlZW1lbnRfYnlfY2F0ZWdvcnknXVwiXG4gICAgICBbZGlzYWJsZWRTZWxdPVwiaXNEaXNhYmxlZFNlbFwiXG4gICAgPjwvaXB0LXNlbGVjdD5cbiAgICA8aXB0LXNlbGVjdFxuICAgICAgW2luaXRpYWxWYWx1ZV09XCJjb2RGb3JtU3RlcE9uZS5jb250cm9sc1snZW5nbGlzaF9sZXZlbCddLnZhbHVlXCJcbiAgICAgIFtzZWxlY3RDb2RlXT1cImNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydlbmdsaXNoX2xldmVsJ10udmFsdWUgPT09IG51bGw/ICdOaXZlbCBkZSBpbmdsw6lzJzogY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2VuZ2xpc2hfbGV2ZWwnXS52YWx1ZVwiXG4gICAgICBbZGVmYXVsdFRleHRdPVwiJ05pdmVsIGRlIGluZ2zDqXMnXCJcbiAgICAgIFtpc1JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgKGV2ZW50U2VsZWN0KT1cInNlbGVjdExldmVsKCRldmVudClcIlxuICAgICAgW2RhdGFdPVwibGV2ZWxzXCJcbiAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwT25lLmNvbnRyb2xzWydlbmdsaXNoX2xldmVsJ11cIlxuICAgICAgW2Rpc2FibGVkU2VsXT1cImlzRGlzYWJsZWRTZWxcIlxuICAgID48L2lwdC1zZWxlY3Q+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgPGlwdC1zZWxlY3RcbiAgICAgIFtpbml0aWFsVmFsdWVdPVwiY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2F2YWlsaWJsZV9jb3Vyc2VzJ10udmFsdWVcIlxuICAgICAgW3NlbGVjdENvZGVdPVwiY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2F2YWlsaWJsZV9jb3Vyc2VzJ10udmFsdWUgPT09IG51bGw/ICdHcnVwb3MgZGlzcG9uaWJsZXMnOiBjb2RGb3JtU3RlcE9uZS5jb250cm9sc1snYXZhaWxpYmxlX2NvdXJzZXMnXS52YWx1ZVwiXG4gICAgICBbZGVmYXVsdFRleHRdPVwiJ0dydXBvcyBkaXNwb25pYmxlcydcIlxuICAgICAgW2lzUmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAoZXZlbnRTZWxlY3QpPVwic2VsZWN0QXZhaWxpYmxlQ291cnNlcygkZXZlbnQpXCJcbiAgICAgIFtkYXRhXT1cImF2YWlsaWJsZUNvdXJzZXNcIlxuICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBPbmUuY29udHJvbHNbJ2F2YWlsaWJsZV9jb3Vyc2VzJ11cIlxuICAgICAgW2Rpc2FibGVkU2VsXT1cImlzRGlzYWJsZWRTZWxcIlxuICAgID48L2lwdC1zZWxlY3Q+XG4gICAgPGlwdC1sb2FkZXIgKm5nSWY9XCJpc0xvYWRpbmdcIiBjbGFzcz1cInctMVwiPlxuICAgIDwvaXB0LWxvYWRlcj5cbiAgPC9kaXY+XG4gIDxzcGFuICpuZ0lmPVwiIWhhc0F2YWlsYWJsZUNvdXJzZVwiIGNsYXNzPVwibXQtMSBwbC0yIHRleHQtcmVkLTUwMFwiPlRvZGF2w61hIG5vIGhheSBjdXJzb3MgY29uIGVzdGFzIGNhcmFjdGVyw61zdGljYXMuPC9zcGFuPlxuPC9mb3JtPlxuXG48ZGl2IGNsYXNzPVwiZmxleCBtdC0yIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICA8c3BhbiAqbmdJZj1cImNvZEZvcm1TdGVwT25lLmludmFsaWQgJiYgY29kRm9ybVN0ZXBPbmUudG91Y2hlZFwiIGNsYXNzPVwidGV4dC1yZWQtNTAwIGZvbnQtYm9sZCB0ZXh0LWNlbnRlciBtdC0xIHB5LTIgYmctcmVkLTEwMCB3LWZ1bGwgYm9yZGVyLXJvdW5kLXhsXCI+RmFsdGFuIGNhbXBvcyBwb3IgbGxlbmFyLjwvc3Bhbj5cbiAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgW2NsYXNzXT1cImlzRWRpdENvZCA/ICdtbC1hdXRvIHllbGxvdy0zMDAgcC1idXR0b24tc20nIDogJ21sLWF1dG8gcC1idXR0b24tc20nXCIgKGNsaWNrKT1cInNlbmRGb3JtKClcIiBwQnV0dG9uIGxhYmVsPVwiU2lndWllbnRlXCIgaWNvbj1cInBpIHBpLWFycm93LXJpZ2h0XCI+PC9idXR0b24+XG48L2Rpdj5cbiJdfQ==
|