iptdevs-design-system 2.7.43 → 2.7.44
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/README.md +24 -24
- package/esm2020/iptdevs-design-system.mjs +4 -4
- package/esm2020/lib/cod/cod-documents-section/cod-documents-section.component.mjs +16 -16
- package/esm2020/lib/cod/cod-form/cod-form.component.mjs +227 -227
- package/esm2020/lib/cod/cod.module.mjs +90 -90
- package/esm2020/lib/cod/logic/calculate-quotes.service.mjs +72 -72
- package/esm2020/lib/cod/logic/cod-form-controls.mjs +91 -91
- package/esm2020/lib/cod/logic/cod-form-steps.mjs +29 -29
- package/esm2020/lib/cod/logic/communicator.service.mjs +28 -28
- package/esm2020/lib/cod/logic/local-storage-cod.service.mjs +39 -39
- package/esm2020/lib/cod/steps/cod-form-step-five/cod-form-step-five.component.mjs +146 -146
- package/esm2020/lib/cod/steps/cod-form-step-four/cod-form-step-four.component.mjs +251 -251
- package/esm2020/lib/cod/steps/cod-form-step-one/cod-form-step-one.component.mjs +200 -200
- package/esm2020/lib/cod/steps/cod-form-step-three/cod-form-step-three.component.mjs +175 -175
- package/esm2020/lib/cod/steps/cod-form-step-two/cod-form-step-two.component.mjs +255 -255
- package/esm2020/lib/components/atoms/aside-button/aside-button.component.mjs +50 -50
- package/esm2020/lib/components/atoms/button/button.component.mjs +64 -64
- package/esm2020/lib/components/atoms/checkbox/checkbox.component.mjs +47 -47
- package/esm2020/lib/components/atoms/datalist/datalist.component.mjs +94 -94
- package/esm2020/lib/components/atoms/input/input.component.mjs +145 -145
- package/esm2020/lib/components/atoms/level-button/level-button.component.mjs +64 -64
- package/esm2020/lib/components/atoms/level-text/level-text.component.mjs +19 -19
- package/esm2020/lib/components/atoms/loader/loader.component.mjs +48 -48
- package/esm2020/lib/components/atoms/radio/radio.component.mjs +47 -47
- package/esm2020/lib/components/atoms/select/select.component.mjs +102 -102
- package/esm2020/lib/components/atoms/text-link/text-link.component.mjs +39 -39
- package/esm2020/lib/components/components.module.mjs +123 -123
- package/esm2020/lib/components/forms/create-user-form/create-user-form.component.mjs +228 -228
- package/esm2020/lib/components/forms/login-form/login-form.component.mjs +93 -93
- package/esm2020/lib/components/material.module.mjs +19 -19
- package/esm2020/lib/components/molecules/question-type/edit-question-types.component.mjs +346 -346
- package/esm2020/lib/components/molecules/sidenav/sidenav.component.mjs +150 -150
- package/esm2020/lib/core/core.module.mjs +73 -73
- package/esm2020/lib/core/models/academic/academic.component.mjs +2 -2
- package/esm2020/lib/core/models/activities/activities.interface.mjs +2 -2
- package/esm2020/lib/core/models/attendance/attendance.interface.mjs +2 -2
- package/esm2020/lib/core/models/budget/budget.model.mjs +2 -2
- package/esm2020/lib/core/models/calendar/calendar-rq.models.mjs +2 -2
- package/esm2020/lib/core/models/classroom/classroom-rq.model.mjs +2 -2
- package/esm2020/lib/core/models/cod/cod-rq.model.mjs +2 -2
- package/esm2020/lib/core/models/commercial/commercial.model.mjs +2 -2
- package/esm2020/lib/core/models/course/course-rq.model.mjs +2 -2
- package/esm2020/lib/core/models/course/courses.model.mjs +2 -2
- package/esm2020/lib/core/models/cronogram/cronogram.models.mjs +2 -2
- package/esm2020/lib/core/models/marketing/marketing.model.mjs +2 -2
- package/esm2020/lib/core/models/notes/notes.interface.mjs +2 -2
- package/esm2020/lib/core/models/payment/payment-rq.model.mjs +2 -2
- package/esm2020/lib/core/models/response/response.interface.mjs +2 -2
- package/esm2020/lib/core/models/session/session.model.mjs +3 -3
- package/esm2020/lib/core/models/student/student.interface.mjs +2 -2
- package/esm2020/lib/core/models/table/table-rs.model.mjs +2 -2
- package/esm2020/lib/core/models/test/test.model.mjs +2 -2
- package/esm2020/lib/core/models/url/url.model.mjs +2 -2
- package/esm2020/lib/core/models/user/user-rq.model.mjs +2 -2
- package/esm2020/lib/core/models/user/user-rs.model.mjs +5 -5
- package/esm2020/lib/core/services/academic-service/academic.service.mjs +55 -55
- package/esm2020/lib/core/services/activity-service/activity.service.mjs +87 -87
- package/esm2020/lib/core/services/attendance-service/attendance.service.mjs +64 -64
- package/esm2020/lib/core/services/budget-service/budget-service.mjs +66 -66
- package/esm2020/lib/core/services/calendar-service/calendar.service.mjs +65 -65
- package/esm2020/lib/core/services/certificate-service/certificate.service.mjs +26 -26
- package/esm2020/lib/core/services/classroom-service/classroom-service.service.mjs +36 -36
- package/esm2020/lib/core/services/commercial-service/comercial.service.mjs +49 -49
- package/esm2020/lib/core/services/commercial-service/validators.mjs +4 -4
- package/esm2020/lib/core/services/copies.service.mjs +17 -17
- package/esm2020/lib/core/services/course-service/course-service.model.mjs +70 -70
- package/esm2020/lib/core/services/ekt-service/userekt.service.mjs +29 -29
- package/esm2020/lib/core/services/marketing-service/marketing-service.mjs +52 -52
- package/esm2020/lib/core/services/notes-service/notes.service.mjs +46 -46
- package/esm2020/lib/core/services/parameters-service/parameters.service.mjs +173 -173
- package/esm2020/lib/core/services/service-enviroments.mjs +26 -26
- package/esm2020/lib/core/services/storage-service/storage-service.mjs +50 -50
- package/esm2020/lib/core/services/student-service/student.service.mjs +26 -26
- package/esm2020/lib/core/services/switch-service/switch.service.mjs +16 -16
- package/esm2020/lib/core/services/test-service/test.service.mjs +128 -128
- package/esm2020/lib/core/services/user-service/user-service.mjs +100 -100
- package/esm2020/lib/core/utils/base-service/base.service.mjs +191 -191
- package/esm2020/lib/core/utils/copies.mjs +214 -214
- package/esm2020/lib/core/utils/route-service/route.service.mjs +18 -18
- package/esm2020/lib/design-system.module.mjs +40 -40
- package/esm2020/public-api.mjs +89 -89
- package/fesm2015/iptdevs-design-system.mjs +4592 -4592
- package/fesm2015/iptdevs-design-system.mjs.map +1 -1
- package/fesm2020/iptdevs-design-system.mjs +4589 -4589
- package/fesm2020/iptdevs-design-system.mjs.map +1 -1
- package/iptdevs-design-system.d.ts +5 -5
- package/lib/cod/cod-documents-section/cod-documents-section.component.d.ts +8 -8
- package/lib/cod/cod-form/cod-form.component.d.ts +37 -37
- package/lib/cod/cod.module.d.ts +21 -21
- package/lib/cod/logic/calculate-quotes.service.d.ts +14 -14
- package/lib/cod/logic/cod-form-controls.d.ts +16 -16
- package/lib/cod/logic/cod-form-steps.d.ts +15 -15
- package/lib/cod/logic/communicator.service.d.ts +13 -13
- package/lib/cod/logic/local-storage-cod.service.d.ts +8 -8
- package/lib/cod/steps/cod-form-step-five/cod-form-step-five.component.d.ts +31 -31
- package/lib/cod/steps/cod-form-step-four/cod-form-step-four.component.d.ts +47 -47
- package/lib/cod/steps/cod-form-step-one/cod-form-step-one.component.d.ts +46 -46
- package/lib/cod/steps/cod-form-step-three/cod-form-step-three.component.d.ts +35 -35
- package/lib/cod/steps/cod-form-step-two/cod-form-step-two.component.d.ts +44 -44
- package/lib/components/atoms/aside-button/aside-button.component.d.ts +11 -11
- package/lib/components/atoms/button/button.component.d.ts +13 -13
- package/lib/components/atoms/checkbox/checkbox.component.d.ts +11 -11
- package/lib/components/atoms/datalist/datalist.component.d.ts +20 -20
- package/lib/components/atoms/input/input.component.d.ts +26 -26
- package/lib/components/atoms/level-button/level-button.component.d.ts +11 -11
- package/lib/components/atoms/level-text/level-text.component.d.ts +7 -7
- package/lib/components/atoms/loader/loader.component.d.ts +7 -7
- package/lib/components/atoms/radio/radio.component.d.ts +11 -11
- package/lib/components/atoms/select/select.component.d.ts +26 -26
- package/lib/components/atoms/text-link/text-link.component.d.ts +12 -12
- package/lib/components/components.module.d.ts +25 -25
- package/lib/components/forms/create-user-form/create-user-form.component.d.ts +36 -36
- package/lib/components/forms/login-form/login-form.component.d.ts +13 -13
- package/lib/components/material.module.d.ts +11 -11
- package/lib/components/molecules/question-type/edit-question-types.component.d.ts +11 -11
- package/lib/components/molecules/sidenav/sidenav.component.d.ts +25 -25
- package/lib/core/core.module.d.ts +6 -6
- package/lib/core/models/academic/academic.component.d.ts +26 -26
- package/lib/core/models/activities/activities.interface.d.ts +12 -12
- package/lib/core/models/attendance/attendance.interface.d.ts +62 -62
- package/lib/core/models/budget/budget.model.d.ts +69 -69
- package/lib/core/models/calendar/calendar-rq.models.d.ts +27 -27
- package/lib/core/models/classroom/classroom-rq.model.d.ts +23 -23
- package/lib/core/models/cod/cod-rq.model.d.ts +168 -168
- package/lib/core/models/commercial/commercial.model.d.ts +10 -10
- package/lib/core/models/course/course-rq.model.d.ts +86 -86
- package/lib/core/models/course/courses.model.d.ts +18 -18
- package/lib/core/models/cronogram/cronogram.models.d.ts +184 -183
- package/lib/core/models/marketing/marketing.model.d.ts +104 -104
- package/lib/core/models/notes/notes.interface.d.ts +89 -89
- package/lib/core/models/payment/payment-rq.model.d.ts +212 -212
- package/lib/core/models/response/response.interface.d.ts +10 -10
- package/lib/core/models/session/session.model.d.ts +5 -5
- package/lib/core/models/student/student.interface.d.ts +4 -4
- package/lib/core/models/table/table-rs.model.d.ts +7 -7
- package/lib/core/models/test/test.model.d.ts +219 -219
- package/lib/core/models/url/url.model.d.ts +8 -8
- package/lib/core/models/user/user-rq.model.d.ts +90 -90
- package/lib/core/models/user/user-rs.model.d.ts +35 -35
- package/lib/core/services/academic-service/academic.service.d.ts +20 -20
- package/lib/core/services/activity-service/activity.service.d.ts +25 -25
- package/lib/core/services/attendance-service/attendance.service.d.ts +22 -22
- package/lib/core/services/budget-service/budget-service.d.ts +23 -23
- package/lib/core/services/calendar-service/calendar.service.d.ts +23 -23
- package/lib/core/services/certificate-service/certificate.service.d.ts +13 -13
- package/lib/core/services/classroom-service/classroom-service.service.d.ts +15 -15
- package/lib/core/services/commercial-service/comercial.service.d.ts +19 -19
- package/lib/core/services/commercial-service/validators.d.ts +2 -2
- package/lib/core/services/copies.service.d.ts +7 -7
- package/lib/core/services/course-service/course-service.model.d.ts +23 -23
- package/lib/core/services/ekt-service/userekt.service.d.ts +13 -13
- package/lib/core/services/marketing-service/marketing-service.d.ts +19 -19
- package/lib/core/services/notes-service/notes.service.d.ts +18 -18
- package/lib/core/services/parameters-service/parameters.service.d.ts +49 -49
- package/lib/core/services/service-enviroments.d.ts +5 -5
- package/lib/core/services/storage-service/storage-service.d.ts +18 -18
- package/lib/core/services/student-service/student.service.d.ts +13 -13
- package/lib/core/services/switch-service/switch.service.d.ts +8 -8
- package/lib/core/services/test-service/test.service.d.ts +33 -33
- package/lib/core/services/user-service/user-service.d.ts +30 -30
- package/lib/core/utils/base-service/base.service.d.ts +23 -23
- package/lib/core/utils/copies.d.ts +1 -1
- package/lib/core/utils/route-service/route.service.d.ts +9 -9
- package/lib/design-system.module.d.ts +10 -10
- package/package.json +1 -1
- package/public-api.d.ts +76 -76
|
@@ -1,191 +1,191 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import Swal from 'sweetalert2';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "../../services/user-service/user-service";
|
|
5
|
-
import * as i2 from "../../services/storage-service/storage-service";
|
|
6
|
-
import * as i3 from "../../services/calendar-service/calendar.service";
|
|
7
|
-
export class BaseService {
|
|
8
|
-
constructor(userService, storageService, calendarService) {
|
|
9
|
-
this.userService = userService;
|
|
10
|
-
this.storageService = storageService;
|
|
11
|
-
this.calendarService = calendarService;
|
|
12
|
-
}
|
|
13
|
-
webLogin(user, password) {
|
|
14
|
-
let request = {
|
|
15
|
-
user: user,
|
|
16
|
-
password: password
|
|
17
|
-
};
|
|
18
|
-
let service = this.userService;
|
|
19
|
-
let storage = this.storageService;
|
|
20
|
-
let appUser = this.isAnAppUser();
|
|
21
|
-
return new Promise(function (resolve, reject) {
|
|
22
|
-
service.login(request).subscribe(response => {
|
|
23
|
-
switch (response.message.code) {
|
|
24
|
-
case 1:
|
|
25
|
-
if (!appUser) {
|
|
26
|
-
Swal.fire({
|
|
27
|
-
'title': '<p style="font-family: Poppins"">Perfect!</p>',
|
|
28
|
-
'html': '<p style="font-family: Poppins"">Succesfull login</p>',
|
|
29
|
-
'icon': 'success',
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
const loginRegisterUser = {
|
|
33
|
-
token: response.data.token,
|
|
34
|
-
user: response.data,
|
|
35
|
-
};
|
|
36
|
-
storage.setCurrentSession(loginRegisterUser);
|
|
37
|
-
resolve(true);
|
|
38
|
-
break;
|
|
39
|
-
case 2:
|
|
40
|
-
Swal.fire({
|
|
41
|
-
'title': '<p style="font-family: Poppins"">Warning!</p>',
|
|
42
|
-
'html': '<p style="font-family: Poppins"">The data does not correspond to a user registered in our system, please review them.</p>',
|
|
43
|
-
'icon': 'warning',
|
|
44
|
-
});
|
|
45
|
-
resolve(false);
|
|
46
|
-
break;
|
|
47
|
-
case 3:
|
|
48
|
-
Swal.fire({
|
|
49
|
-
'title': '<p style="font-family: Poppins"">Error!</p>',
|
|
50
|
-
'html': '<p style="font-family: Poppins"">The input data does not meet the established parameters.</p>',
|
|
51
|
-
'icon': 'error',
|
|
52
|
-
});
|
|
53
|
-
resolve(false);
|
|
54
|
-
break;
|
|
55
|
-
default:
|
|
56
|
-
Swal.fire({
|
|
57
|
-
'title': '<p style="font-family: Poppins"">Error!</p>',
|
|
58
|
-
'html': '<p style="font-family: Poppins"">An unexpected error has occurred</p>',
|
|
59
|
-
'icon': 'error',
|
|
60
|
-
});
|
|
61
|
-
resolve(false);
|
|
62
|
-
break;
|
|
63
|
-
}
|
|
64
|
-
reject('Unhandled exception');
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
getCronogramAvailability(isTeacher, code, startDate, numClass, weekDays, startTime, endTime) {
|
|
69
|
-
let request = {
|
|
70
|
-
isTeacher: isTeacher,
|
|
71
|
-
code: code,
|
|
72
|
-
startDate: startDate,
|
|
73
|
-
numClass: numClass,
|
|
74
|
-
weekDays: weekDays,
|
|
75
|
-
startTime: startTime,
|
|
76
|
-
endTime: endTime,
|
|
77
|
-
};
|
|
78
|
-
let service = this.calendarService;
|
|
79
|
-
return new Promise(function (resolve, reject) {
|
|
80
|
-
service.postCreateQueryEvent(request).subscribe((response) => {
|
|
81
|
-
switch (response.message.code) {
|
|
82
|
-
case 1:
|
|
83
|
-
resolve(response.data);
|
|
84
|
-
break;
|
|
85
|
-
default:
|
|
86
|
-
reject('Unhandled exception');
|
|
87
|
-
}
|
|
88
|
-
reject('Unhandled exception');
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
isAnAppUser() {
|
|
93
|
-
const userAgent = window.navigator.userAgent;
|
|
94
|
-
return userAgent.includes('Flutter IPT APP');
|
|
95
|
-
}
|
|
96
|
-
getUserRole() {
|
|
97
|
-
let user = this.storageService.getCurrentUser()?.role;
|
|
98
|
-
return user === undefined ? -1 : user;
|
|
99
|
-
}
|
|
100
|
-
getUserToken() {
|
|
101
|
-
let token = this.storageService.getCurrentUser()?.token;
|
|
102
|
-
return token === undefined ? '-1' : token;
|
|
103
|
-
}
|
|
104
|
-
getUserName() {
|
|
105
|
-
let user = this.storageService.getCurrentUser();
|
|
106
|
-
let response = user === null ? '' : user.name;
|
|
107
|
-
return response;
|
|
108
|
-
}
|
|
109
|
-
getUserCode() {
|
|
110
|
-
let user = this.storageService.getCurrentUser();
|
|
111
|
-
let response = user === null ? -1 : user.code;
|
|
112
|
-
return response;
|
|
113
|
-
}
|
|
114
|
-
registerUserFromDashboard(registerDashboardRq) {
|
|
115
|
-
let request = registerDashboardRq;
|
|
116
|
-
let service = this.userService;
|
|
117
|
-
return new Promise(function (resolve, reject) {
|
|
118
|
-
service.registerDashboard(request).subscribe((response) => {
|
|
119
|
-
switch (response.message.code) {
|
|
120
|
-
case 1:
|
|
121
|
-
Swal.fire({
|
|
122
|
-
'title': '<p style="font-family: Poppins"">Perfect!</p>',
|
|
123
|
-
'html': '<p style="font-family: Poppins"">Sucesfull register!</p>',
|
|
124
|
-
'icon': 'success',
|
|
125
|
-
});
|
|
126
|
-
resolve(true);
|
|
127
|
-
break;
|
|
128
|
-
case 3:
|
|
129
|
-
Swal.fire({
|
|
130
|
-
'title': '<p style="font-family: Poppins"">Error!</p>',
|
|
131
|
-
'html': '<p style="font-family: Poppins"">The input data does not meet the established parameters.</p>',
|
|
132
|
-
'icon': 'error',
|
|
133
|
-
});
|
|
134
|
-
resolve(false);
|
|
135
|
-
break;
|
|
136
|
-
case 4:
|
|
137
|
-
Swal.fire({
|
|
138
|
-
'title': '<p style="font-family: Poppins">Ups!</p>',
|
|
139
|
-
'html': '<p style="font-family: Poppins">The input data has a high relation with a user that already exists!</p>',
|
|
140
|
-
'icon': 'warning',
|
|
141
|
-
});
|
|
142
|
-
resolve(false);
|
|
143
|
-
break;
|
|
144
|
-
default:
|
|
145
|
-
Swal.fire({
|
|
146
|
-
'title': '<p style="font-family: Poppins"">Error!</p>',
|
|
147
|
-
'html': '<p style="font-family: Poppins"">An unexpected error has occurred</p>',
|
|
148
|
-
'icon': 'error',
|
|
149
|
-
});
|
|
150
|
-
resolve(false);
|
|
151
|
-
break;
|
|
152
|
-
}
|
|
153
|
-
reject('Unhandled exception');
|
|
154
|
-
});
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
jsonToArray(data) {
|
|
158
|
-
var response = [];
|
|
159
|
-
data.forEach((element) => {
|
|
160
|
-
var object = [];
|
|
161
|
-
for (var clave in element) {
|
|
162
|
-
if (element.hasOwnProperty(clave)) {
|
|
163
|
-
if (typeof element[clave] == 'object') {
|
|
164
|
-
element[clave] = this.subJsonToArray(element[clave]);
|
|
165
|
-
}
|
|
166
|
-
object.push(element[clave]);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
response.push(object);
|
|
170
|
-
});
|
|
171
|
-
return response;
|
|
172
|
-
}
|
|
173
|
-
subJsonToArray(data) {
|
|
174
|
-
var object = '';
|
|
175
|
-
for (var clave in data) {
|
|
176
|
-
if (clave != 'code') {
|
|
177
|
-
object += '\n' + data[clave];
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
return object;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
BaseService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: BaseService, deps: [{ token: i1.UserService }, { token: i2.StorageService }, { token: i3.CalendarService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
184
|
-
BaseService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: BaseService, providedIn: 'root' });
|
|
185
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: BaseService, decorators: [{
|
|
186
|
-
type: Injectable,
|
|
187
|
-
args: [{
|
|
188
|
-
providedIn: 'root',
|
|
189
|
-
}]
|
|
190
|
-
}], ctorParameters: function () { return [{ type: i1.UserService }, { type: i2.StorageService }, { type: i3.CalendarService }]; } });
|
|
191
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVzaWduLXN5c3RlbS9zcmMvbGliL2NvcmUvdXRpbHMvYmFzZS1zZXJ2aWNlL2Jhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQzs7Ozs7QUFVL0IsTUFBTSxPQUFPLFdBQVc7SUFFdEIsWUFDVSxXQUF3QixFQUN4QixjQUE4QixFQUM5QixlQUFnQztRQUZoQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsb0JBQWUsR0FBZixlQUFlLENBQWlCO0lBQ3ZDLENBQUM7SUFFSixRQUFRLENBQUMsSUFBWSxFQUFFLFFBQWdCO1FBQ3JDLElBQUksT0FBTyxHQUFZO1lBQ3JCLElBQUksRUFBRSxJQUFJO1lBQ1YsUUFBUSxFQUFFLFFBQVE7U0FDbkIsQ0FBQTtRQUNELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDL0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNsQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFakMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFTLE9BQU8sRUFBRSxNQUFNO1lBQ3pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUMzQyxRQUFRLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO29CQUM3QixLQUFLLENBQUM7d0JBQ0osSUFBRyxDQUFDLE9BQU8sRUFBRTs0QkFDWCxJQUFJLENBQUMsSUFBSSxDQUFFO2dDQUNULE9BQU8sRUFBRSwrQ0FBK0M7Z0NBQ3hELE1BQU0sRUFBRSx1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QUU7d0JBQ3JDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3FCQUN0RDtvQkFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUM3QjthQUNGO1lBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBVztRQUN4QixJQUFJLE1BQU0sR0FBVyxFQUFFLENBQUM7UUFDeEIsS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDdEIsSUFBSSxLQUFLLElBQUksTUFBTSxFQUFFO2dCQUNuQixNQUFNLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM5QjtTQUNGO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7d0dBcE1VLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExvZ2luUnEsIFJlZ2lzdGVyRGFzaGJvYXJkUnEgfSBmcm9tICcuLi8uLi9tb2RlbHMvdXNlci91c2VyLXJxLm1vZGVsJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLXNlcnZpY2UvdXNlci1zZXJ2aWNlJztcclxuaW1wb3J0IFN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xyXG5pbXBvcnQgeyBTZXNzaW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Nlc3Npb24vc2Vzc2lvbi5tb2RlbCc7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS1zZXJ2aWNlL3N0b3JhZ2Utc2VydmljZSc7XHJcbmltcG9ydCB7IEF2YWlsYWJpbGl0eVF1ZXJ5UnEgfSBmcm9tICcuLi8uLi9tb2RlbHMvY3Jvbm9ncmFtL2Nyb25vZ3JhbS5tb2RlbHMnO1xyXG5pbXBvcnQgeyBDYWxlbmRhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYWxlbmRhci1zZXJ2aWNlL2NhbGVuZGFyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXNwb25zZSB9IGZyb20gJy4uLy4uL21vZGVscy9yZXNwb25zZS9yZXNwb25zZS5pbnRlcmZhY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEJhc2VTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2U6IENhbGVuZGFyU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgd2ViTG9naW4odXNlcjogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuICAgIGxldCByZXF1ZXN0OiBMb2dpblJxID0ge1xyXG4gICAgICB1c2VyOiB1c2VyLFxyXG4gICAgICBwYXNzd29yZDogcGFzc3dvcmRcclxuICAgIH1cclxuICAgIGxldCBzZXJ2aWNlID0gdGhpcy51c2VyU2VydmljZTtcclxuICAgIGxldCBzdG9yYWdlID0gdGhpcy5zdG9yYWdlU2VydmljZTtcclxuICAgIGxldCBhcHBVc2VyID0gdGhpcy5pc0FuQXBwVXNlcigpO1xyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgc2VydmljZS5sb2dpbihyZXF1ZXN0KS5zdWJzY3JpYmUoIHJlc3BvbnNlID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLm1lc3NhZ2UuY29kZSkge1xyXG4gICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICBpZighYXBwVXNlcikge1xyXG4gICAgICAgICAgICAgIFN3YWwuZmlyZSAoe1xyXG4gICAgICAgICAgICAgICAgJ3RpdGxlJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPlBlcmZlY3QhPC9wPicsXHJcbiAgICAgICAgICAgICAgICAnaHRtbCc6ICc8cCBzdHlsZT1cImZvbnQtZmFtaWx5OiBQb3BwaW5zXCJcIj5TdWNjZXNmdWxsIGxvZ2luPC9wPicsXHJcbiAgICAgICAgICAgICAgICAnaWNvbic6J3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGxvZ2luUmVnaXN0ZXJVc2VyOiBTZXNzaW9uID0ge1xyXG4gICAgICAgICAgICAgIHRva2VuOiByZXNwb25zZS5kYXRhLnRva2VuLFxyXG4gICAgICAgICAgICAgIHVzZXI6IHJlc3BvbnNlLmRhdGEsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBzdG9yYWdlLnNldEN1cnJlbnRTZXNzaW9uKGxvZ2luUmVnaXN0ZXJVc2VyKTtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgIFN3YWwuZmlyZSh7XHJcbiAgICAgICAgICAgICAgJ3RpdGxlJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPldhcm5pbmchPC9wPicsXHJcbiAgICAgICAgICAgICAgJ2h0bWwnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiXCI+VGhlIGRhdGEgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHVzZXIgcmVnaXN0ZXJlZCBpbiBvdXIgc3lzdGVtLCBwbGVhc2UgcmV2aWV3IHRoZW0uPC9wPicsXHJcbiAgICAgICAgICAgICAgJ2ljb24nOid3YXJuaW5nJyxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgIFN3YWwuZmlyZSh7XHJcbiAgICAgICAgICAgICAgJ3RpdGxlJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPkVycm9yITwvcD4nLFxyXG4gICAgICAgICAgICAgICdodG1sJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPlRoZSBpbnB1dCBkYXRhIGRvZXMgbm90IG1lZXQgdGhlIGVzdGFibGlzaGVkIHBhcmFtZXRlcnMuPC9wPicsXHJcbiAgICAgICAgICAgICAgJ2ljb24nOidlcnJvcicsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgU3dhbC5maXJlKHtcclxuICAgICAgICAgICAgICAndGl0bGUnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiXCI+RXJyb3IhPC9wPicsXHJcbiAgICAgICAgICAgICAgJ2h0bWwnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiXCI+QW4gdW5leHBlY3RlZCBlcnJvciBoYXMgb2NjdXJyZWQ8L3A+JyxcclxuICAgICAgICAgICAgICAnaWNvbic6J2Vycm9yJyxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlamVjdCgnVW5oYW5kbGVkIGV4Y2VwdGlvbicpO1xyXG4gICAgICB9KTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXRDcm9ub2dyYW1BdmFpbGFiaWxpdHkoaXNUZWFjaGVyOiBib29sZWFuLCBjb2RlOiBudW1iZXIsIHN0YXJ0RGF0ZTogc3RyaW5nLCBudW1DbGFzczogbnVtYmVyLCB3ZWVrRGF5czogYW55W10sIHN0YXJ0VGltZTogc3RyaW5nLCBlbmRUaW1lOiBzdHJpbmcpOiBQcm9taXNlPGFueT57XHJcbiAgICBsZXQgcmVxdWVzdDogQXZhaWxhYmlsaXR5UXVlcnlScSA9IHtcclxuICAgICAgaXNUZWFjaGVyOiBpc1RlYWNoZXIsXHJcbiAgICAgIGNvZGU6IGNvZGUsXHJcbiAgICAgIHN0YXJ0RGF0ZTogc3RhcnREYXRlLFxyXG4gICAgICBudW1DbGFzczogbnVtQ2xhc3MsXHJcbiAgICAgIHdlZWtEYXlzOiB3ZWVrRGF5cyxcclxuICAgICAgc3RhcnRUaW1lOiBzdGFydFRpbWUsXHJcbiAgICAgIGVuZFRpbWU6IGVuZFRpbWUsXHJcbiAgICB9O1xyXG5cclxuICAgIGxldCBzZXJ2aWNlID0gdGhpcy5jYWxlbmRhclNlcnZpY2U7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICBzZXJ2aWNlLnBvc3RDcmVhdGVRdWVyeUV2ZW50KHJlcXVlc3QpLnN1YnNjcmliZSggIChyZXNwb25zZTogUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLm1lc3NhZ2UuY29kZSkge1xyXG4gICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpO1xyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmVqZWN0KCdVbmhhbmRsZWQgZXhjZXB0aW9uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlamVjdCgnVW5oYW5kbGVkIGV4Y2VwdGlvbicpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXNBbkFwcFVzZXIoKSB7XHJcbiAgICBjb25zdCB1c2VyQWdlbnQ6IHN0cmluZyA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgcmV0dXJuIHVzZXJBZ2VudC5pbmNsdWRlcygnRmx1dHRlciBJUFQgQVBQJyk7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyUm9sZSgpOiBudW1iZXIge1xyXG4gICAgbGV0IHVzZXIgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk/LnJvbGU7XHJcbiAgICByZXR1cm4gdXNlciA9PT0gdW5kZWZpbmVkID8gLTEgOiB1c2VyO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlclRva2VuKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgdG9rZW4gPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk/LnRva2VuO1xyXG4gICAgcmV0dXJuIHRva2VuID09PSB1bmRlZmluZWQgPyAnLTEnIDogdG9rZW47XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgbGV0IHVzZXIgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XHJcbiAgICBsZXQgcmVzcG9uc2UgPSB1c2VyID09PSBudWxsID8gJycgOiB1c2VyLm5hbWU7XHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyQ29kZSgpOiBudW1iZXIge1xyXG4gICAgbGV0IHVzZXIgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XHJcbiAgICBsZXQgcmVzcG9uc2UgPSB1c2VyID09PSBudWxsID8gLTEgOiB1c2VyLmNvZGU7XHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICByZWdpc3RlclVzZXJGcm9tRGFzaGJvYXJkKHJlZ2lzdGVyRGFzaGJvYXJkUnE6IFJlZ2lzdGVyRGFzaGJvYXJkUnEpOiBQcm9taXNlPGJvb2xlYW4+e1xyXG4gICAgbGV0IHJlcXVlc3QgPSByZWdpc3RlckRhc2hib2FyZFJxO1xyXG4gICAgbGV0IHNlcnZpY2UgPSB0aGlzLnVzZXJTZXJ2aWNlO1xyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgc2VydmljZS5yZWdpc3RlckRhc2hib2FyZChyZXF1ZXN0KS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XHJcblxyXG4gICAgICAgIHN3aXRjaCAocmVzcG9uc2UubWVzc2FnZS5jb2RlKSB7XHJcbiAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIFN3YWwuZmlyZSAoe1xyXG4gICAgICAgICAgICAgICd0aXRsZSc6ICc8cCBzdHlsZT1cImZvbnQtZmFtaWx5OiBQb3BwaW5zXCJcIj5QZXJmZWN0ITwvcD4nLFxyXG4gICAgICAgICAgICAgICdodG1sJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPlN1Y2VzZnVsbCByZWdpc3RlciE8L3A+JyxcclxuICAgICAgICAgICAgICAnaWNvbic6J3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgIFN3YWwuZmlyZSAoe1xyXG4gICAgICAgICAgICAgICd0aXRsZSc6ICc8cCBzdHlsZT1cImZvbnQtZmFtaWx5OiBQb3BwaW5zXCJcIj5FcnJvciE8L3A+JyxcclxuICAgICAgICAgICAgICAnaHRtbCc6ICc8cCBzdHlsZT1cImZvbnQtZmFtaWx5OiBQb3BwaW5zXCJcIj5UaGUgaW5wdXQgZGF0YSBkb2VzIG5vdCBtZWV0IHRoZSBlc3RhYmxpc2hlZCBwYXJhbWV0ZXJzLjwvcD4nLFxyXG4gICAgICAgICAgICAgICdpY29uJzonZXJyb3InLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICBTd2FsLmZpcmUgKHtcclxuICAgICAgICAgICAgICAndGl0bGUnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiPlVwcyE8L3A+JyxcclxuICAgICAgICAgICAgICAnaHRtbCc6ICc8cCBzdHlsZT1cImZvbnQtZmFtaWx5OiBQb3BwaW5zXCI+VGhlIGlucHV0IGRhdGEgaGFzIGEgaGlnaCByZWxhdGlvbiB3aXRoIGEgdXNlciB0aGF0IGFscmVhZHkgZXhpc3RzITwvcD4nLFxyXG4gICAgICAgICAgICAgICdpY29uJzogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgU3dhbC5maXJlICh7XHJcbiAgICAgICAgICAgICAgJ3RpdGxlJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPkVycm9yITwvcD4nLFxyXG4gICAgICAgICAgICAgICdodG1sJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPkFuIHVuZXhwZWN0ZWQgZXJyb3IgaGFzIG9jY3VycmVkPC9wPicsXHJcbiAgICAgICAgICAgICAgJ2ljb24nOidlcnJvcicsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZWplY3QoJ1VuaGFuZGxlZCBleGNlcHRpb24nKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGpzb25Ub0FycmF5KGRhdGE6IGFueVtdKTogYW55W11bXSB7XHJcbiAgICB2YXIgcmVzcG9uc2U6IGFueVtdID0gW107XHJcbiAgICBkYXRhLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgdmFyIG9iamVjdDogYW55W10gPSBbXTtcclxuICAgICAgZm9yICh2YXIgY2xhdmUgaW4gZWxlbWVudCkge1xyXG4gICAgICAgIGlmIChlbGVtZW50Lmhhc093blByb3BlcnR5KGNsYXZlKSkge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBlbGVtZW50W2NsYXZlXSA9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICBlbGVtZW50W2NsYXZlXSA9IHRoaXMuc3ViSnNvblRvQXJyYXkoZWxlbWVudFtjbGF2ZV0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIG9iamVjdC5wdXNoKGVsZW1lbnRbY2xhdmVdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmVzcG9uc2UucHVzaChvYmplY3QpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBzdWJKc29uVG9BcnJheShkYXRhOiBhbnlbXSk6IHN0cmluZyB7XHJcbiAgICB2YXIgb2JqZWN0OiBzdHJpbmcgPSAnJztcclxuICAgIGZvciAodmFyIGNsYXZlIGluIGRhdGEpIHtcclxuICAgICAgaWYgKGNsYXZlICE9ICdjb2RlJykge1xyXG4gICAgICAgIG9iamVjdCArPSAnXFxuJyArIGRhdGFbY2xhdmVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqZWN0O1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import Swal from 'sweetalert2';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../services/user-service/user-service";
|
|
5
|
+
import * as i2 from "../../services/storage-service/storage-service";
|
|
6
|
+
import * as i3 from "../../services/calendar-service/calendar.service";
|
|
7
|
+
export class BaseService {
|
|
8
|
+
constructor(userService, storageService, calendarService) {
|
|
9
|
+
this.userService = userService;
|
|
10
|
+
this.storageService = storageService;
|
|
11
|
+
this.calendarService = calendarService;
|
|
12
|
+
}
|
|
13
|
+
webLogin(user, password) {
|
|
14
|
+
let request = {
|
|
15
|
+
user: user,
|
|
16
|
+
password: password
|
|
17
|
+
};
|
|
18
|
+
let service = this.userService;
|
|
19
|
+
let storage = this.storageService;
|
|
20
|
+
let appUser = this.isAnAppUser();
|
|
21
|
+
return new Promise(function (resolve, reject) {
|
|
22
|
+
service.login(request).subscribe(response => {
|
|
23
|
+
switch (response.message.code) {
|
|
24
|
+
case 1:
|
|
25
|
+
if (!appUser) {
|
|
26
|
+
Swal.fire({
|
|
27
|
+
'title': '<p style="font-family: Poppins"">Perfect!</p>',
|
|
28
|
+
'html': '<p style="font-family: Poppins"">Succesfull login</p>',
|
|
29
|
+
'icon': 'success',
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
const loginRegisterUser = {
|
|
33
|
+
token: response.data.token,
|
|
34
|
+
user: response.data,
|
|
35
|
+
};
|
|
36
|
+
storage.setCurrentSession(loginRegisterUser);
|
|
37
|
+
resolve(true);
|
|
38
|
+
break;
|
|
39
|
+
case 2:
|
|
40
|
+
Swal.fire({
|
|
41
|
+
'title': '<p style="font-family: Poppins"">Warning!</p>',
|
|
42
|
+
'html': '<p style="font-family: Poppins"">The data does not correspond to a user registered in our system, please review them.</p>',
|
|
43
|
+
'icon': 'warning',
|
|
44
|
+
});
|
|
45
|
+
resolve(false);
|
|
46
|
+
break;
|
|
47
|
+
case 3:
|
|
48
|
+
Swal.fire({
|
|
49
|
+
'title': '<p style="font-family: Poppins"">Error!</p>',
|
|
50
|
+
'html': '<p style="font-family: Poppins"">The input data does not meet the established parameters.</p>',
|
|
51
|
+
'icon': 'error',
|
|
52
|
+
});
|
|
53
|
+
resolve(false);
|
|
54
|
+
break;
|
|
55
|
+
default:
|
|
56
|
+
Swal.fire({
|
|
57
|
+
'title': '<p style="font-family: Poppins"">Error!</p>',
|
|
58
|
+
'html': '<p style="font-family: Poppins"">An unexpected error has occurred</p>',
|
|
59
|
+
'icon': 'error',
|
|
60
|
+
});
|
|
61
|
+
resolve(false);
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
reject('Unhandled exception');
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
getCronogramAvailability(isTeacher, code, startDate, numClass, weekDays, startTime, endTime) {
|
|
69
|
+
let request = {
|
|
70
|
+
isTeacher: isTeacher,
|
|
71
|
+
code: code,
|
|
72
|
+
startDate: startDate,
|
|
73
|
+
numClass: numClass,
|
|
74
|
+
weekDays: weekDays,
|
|
75
|
+
startTime: startTime,
|
|
76
|
+
endTime: endTime,
|
|
77
|
+
};
|
|
78
|
+
let service = this.calendarService;
|
|
79
|
+
return new Promise(function (resolve, reject) {
|
|
80
|
+
service.postCreateQueryEvent(request).subscribe((response) => {
|
|
81
|
+
switch (response.message.code) {
|
|
82
|
+
case 1:
|
|
83
|
+
resolve(response.data);
|
|
84
|
+
break;
|
|
85
|
+
default:
|
|
86
|
+
reject('Unhandled exception');
|
|
87
|
+
}
|
|
88
|
+
reject('Unhandled exception');
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
isAnAppUser() {
|
|
93
|
+
const userAgent = window.navigator.userAgent;
|
|
94
|
+
return userAgent.includes('Flutter IPT APP');
|
|
95
|
+
}
|
|
96
|
+
getUserRole() {
|
|
97
|
+
let user = this.storageService.getCurrentUser()?.role;
|
|
98
|
+
return user === undefined ? -1 : user;
|
|
99
|
+
}
|
|
100
|
+
getUserToken() {
|
|
101
|
+
let token = this.storageService.getCurrentUser()?.token;
|
|
102
|
+
return token === undefined ? '-1' : token;
|
|
103
|
+
}
|
|
104
|
+
getUserName() {
|
|
105
|
+
let user = this.storageService.getCurrentUser();
|
|
106
|
+
let response = user === null ? '' : user.name;
|
|
107
|
+
return response;
|
|
108
|
+
}
|
|
109
|
+
getUserCode() {
|
|
110
|
+
let user = this.storageService.getCurrentUser();
|
|
111
|
+
let response = user === null ? -1 : user.code;
|
|
112
|
+
return response;
|
|
113
|
+
}
|
|
114
|
+
registerUserFromDashboard(registerDashboardRq) {
|
|
115
|
+
let request = registerDashboardRq;
|
|
116
|
+
let service = this.userService;
|
|
117
|
+
return new Promise(function (resolve, reject) {
|
|
118
|
+
service.registerDashboard(request).subscribe((response) => {
|
|
119
|
+
switch (response.message.code) {
|
|
120
|
+
case 1:
|
|
121
|
+
Swal.fire({
|
|
122
|
+
'title': '<p style="font-family: Poppins"">Perfect!</p>',
|
|
123
|
+
'html': '<p style="font-family: Poppins"">Sucesfull register!</p>',
|
|
124
|
+
'icon': 'success',
|
|
125
|
+
});
|
|
126
|
+
resolve(true);
|
|
127
|
+
break;
|
|
128
|
+
case 3:
|
|
129
|
+
Swal.fire({
|
|
130
|
+
'title': '<p style="font-family: Poppins"">Error!</p>',
|
|
131
|
+
'html': '<p style="font-family: Poppins"">The input data does not meet the established parameters.</p>',
|
|
132
|
+
'icon': 'error',
|
|
133
|
+
});
|
|
134
|
+
resolve(false);
|
|
135
|
+
break;
|
|
136
|
+
case 4:
|
|
137
|
+
Swal.fire({
|
|
138
|
+
'title': '<p style="font-family: Poppins">Ups!</p>',
|
|
139
|
+
'html': '<p style="font-family: Poppins">The input data has a high relation with a user that already exists!</p>',
|
|
140
|
+
'icon': 'warning',
|
|
141
|
+
});
|
|
142
|
+
resolve(false);
|
|
143
|
+
break;
|
|
144
|
+
default:
|
|
145
|
+
Swal.fire({
|
|
146
|
+
'title': '<p style="font-family: Poppins"">Error!</p>',
|
|
147
|
+
'html': '<p style="font-family: Poppins"">An unexpected error has occurred</p>',
|
|
148
|
+
'icon': 'error',
|
|
149
|
+
});
|
|
150
|
+
resolve(false);
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
reject('Unhandled exception');
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
jsonToArray(data) {
|
|
158
|
+
var response = [];
|
|
159
|
+
data.forEach((element) => {
|
|
160
|
+
var object = [];
|
|
161
|
+
for (var clave in element) {
|
|
162
|
+
if (element.hasOwnProperty(clave)) {
|
|
163
|
+
if (typeof element[clave] == 'object') {
|
|
164
|
+
element[clave] = this.subJsonToArray(element[clave]);
|
|
165
|
+
}
|
|
166
|
+
object.push(element[clave]);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
response.push(object);
|
|
170
|
+
});
|
|
171
|
+
return response;
|
|
172
|
+
}
|
|
173
|
+
subJsonToArray(data) {
|
|
174
|
+
var object = '';
|
|
175
|
+
for (var clave in data) {
|
|
176
|
+
if (clave != 'code') {
|
|
177
|
+
object += '\n' + data[clave];
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return object;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
BaseService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: BaseService, deps: [{ token: i1.UserService }, { token: i2.StorageService }, { token: i3.CalendarService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
184
|
+
BaseService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: BaseService, providedIn: 'root' });
|
|
185
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: BaseService, decorators: [{
|
|
186
|
+
type: Injectable,
|
|
187
|
+
args: [{
|
|
188
|
+
providedIn: 'root',
|
|
189
|
+
}]
|
|
190
|
+
}], ctorParameters: function () { return [{ type: i1.UserService }, { type: i2.StorageService }, { type: i3.CalendarService }]; } });
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVzaWduLXN5c3RlbS9zcmMvbGliL2NvcmUvdXRpbHMvYmFzZS1zZXJ2aWNlL2Jhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQzs7Ozs7QUFVL0IsTUFBTSxPQUFPLFdBQVc7SUFFdEIsWUFDVSxXQUF3QixFQUN4QixjQUE4QixFQUM5QixlQUFnQztRQUZoQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsb0JBQWUsR0FBZixlQUFlLENBQWlCO0lBQ3ZDLENBQUM7SUFFSixRQUFRLENBQUMsSUFBWSxFQUFFLFFBQWdCO1FBQ3JDLElBQUksT0FBTyxHQUFZO1lBQ3JCLElBQUksRUFBRSxJQUFJO1lBQ1YsUUFBUSxFQUFFLFFBQVE7U0FDbkIsQ0FBQTtRQUNELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDL0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNsQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFakMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFTLE9BQU8sRUFBRSxNQUFNO1lBQ3pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUMzQyxRQUFRLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO29CQUM3QixLQUFLLENBQUM7d0JBQ0osSUFBRyxDQUFDLE9BQU8sRUFBRTs0QkFDWCxJQUFJLENBQUMsSUFBSSxDQUFFO2dDQUNULE9BQU8sRUFBRSwrQ0FBK0M7Z0NBQ3hELE1BQU0sRUFBRSx1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QUU7d0JBQ3JDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3FCQUN0RDtvQkFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUM3QjthQUNGO1lBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBVztRQUN4QixJQUFJLE1BQU0sR0FBVyxFQUFFLENBQUM7UUFDeEIsS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDdEIsSUFBSSxLQUFLLElBQUksTUFBTSxFQUFFO2dCQUNuQixNQUFNLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM5QjtTQUNGO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7d0dBcE1VLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2dpblJxLCBSZWdpc3RlckRhc2hib2FyZFJxIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3VzZXIvdXNlci1ycS5tb2RlbCc7XG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXItc2VydmljZS91c2VyLXNlcnZpY2UnO1xuaW1wb3J0IFN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xuaW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gJy4uLy4uL21vZGVscy9zZXNzaW9uL3Nlc3Npb24ubW9kZWwnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLXNlcnZpY2Uvc3RvcmFnZS1zZXJ2aWNlJztcbmltcG9ydCB7IEF2YWlsYWJpbGl0eVF1ZXJ5UnEgfSBmcm9tICcuLi8uLi9tb2RlbHMvY3Jvbm9ncmFtL2Nyb25vZ3JhbS5tb2RlbHMnO1xuaW1wb3J0IHsgQ2FsZW5kYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FsZW5kYXItc2VydmljZS9jYWxlbmRhci5zZXJ2aWNlJztcbmltcG9ydCB7IFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jlc3BvbnNlL3Jlc3BvbnNlLmludGVyZmFjZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBCYXNlU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2U6IENhbGVuZGFyU2VydmljZVxuICApIHt9XG5cbiAgd2ViTG9naW4odXNlcjogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcbiAgICBsZXQgcmVxdWVzdDogTG9naW5ScSA9IHtcbiAgICAgIHVzZXI6IHVzZXIsXG4gICAgICBwYXNzd29yZDogcGFzc3dvcmRcbiAgICB9XG4gICAgbGV0IHNlcnZpY2UgPSB0aGlzLnVzZXJTZXJ2aWNlO1xuICAgIGxldCBzdG9yYWdlID0gdGhpcy5zdG9yYWdlU2VydmljZTtcbiAgICBsZXQgYXBwVXNlciA9IHRoaXMuaXNBbkFwcFVzZXIoKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHNlcnZpY2UubG9naW4ocmVxdWVzdCkuc3Vic2NyaWJlKCByZXNwb25zZSA9PiB7XG4gICAgICAgIHN3aXRjaCAocmVzcG9uc2UubWVzc2FnZS5jb2RlKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgaWYoIWFwcFVzZXIpIHtcbiAgICAgICAgICAgICAgU3dhbC5maXJlICh7XG4gICAgICAgICAgICAgICAgJ3RpdGxlJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPlBlcmZlY3QhPC9wPicsXG4gICAgICAgICAgICAgICAgJ2h0bWwnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiXCI+U3VjY2VzZnVsbCBsb2dpbjwvcD4nLFxuICAgICAgICAgICAgICAgICdpY29uJzonc3VjY2VzcycsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbG9naW5SZWdpc3RlclVzZXI6IFNlc3Npb24gPSB7XG4gICAgICAgICAgICAgIHRva2VuOiByZXNwb25zZS5kYXRhLnRva2VuLFxuICAgICAgICAgICAgICB1c2VyOiByZXNwb25zZS5kYXRhLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgc3RvcmFnZS5zZXRDdXJyZW50U2Vzc2lvbihsb2dpblJlZ2lzdGVyVXNlcik7XG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgJ3RpdGxlJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPldhcm5pbmchPC9wPicsXG4gICAgICAgICAgICAgICdodG1sJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPlRoZSBkYXRhIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSB1c2VyIHJlZ2lzdGVyZWQgaW4gb3VyIHN5c3RlbSwgcGxlYXNlIHJldmlldyB0aGVtLjwvcD4nLFxuICAgICAgICAgICAgICAnaWNvbic6J3dhcm5pbmcnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgJ3RpdGxlJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPkVycm9yITwvcD4nLFxuICAgICAgICAgICAgICAnaHRtbCc6ICc8cCBzdHlsZT1cImZvbnQtZmFtaWx5OiBQb3BwaW5zXCJcIj5UaGUgaW5wdXQgZGF0YSBkb2VzIG5vdCBtZWV0IHRoZSBlc3RhYmxpc2hlZCBwYXJhbWV0ZXJzLjwvcD4nLFxuICAgICAgICAgICAgICAnaWNvbic6J2Vycm9yJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgICAndGl0bGUnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiXCI+RXJyb3IhPC9wPicsXG4gICAgICAgICAgICAgICdodG1sJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPkFuIHVuZXhwZWN0ZWQgZXJyb3IgaGFzIG9jY3VycmVkPC9wPicsXG4gICAgICAgICAgICAgICdpY29uJzonZXJyb3InLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCdVbmhhbmRsZWQgZXhjZXB0aW9uJyk7XG4gICAgICB9KTtcbiAgICB9KVxuICB9XG5cbiAgZ2V0Q3Jvbm9ncmFtQXZhaWxhYmlsaXR5KGlzVGVhY2hlcjogYm9vbGVhbiwgY29kZTogbnVtYmVyLCBzdGFydERhdGU6IHN0cmluZywgbnVtQ2xhc3M6IG51bWJlciwgd2Vla0RheXM6IGFueVtdLCBzdGFydFRpbWU6IHN0cmluZywgZW5kVGltZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+e1xuICAgIGxldCByZXF1ZXN0OiBBdmFpbGFiaWxpdHlRdWVyeVJxID0ge1xuICAgICAgaXNUZWFjaGVyOiBpc1RlYWNoZXIsXG4gICAgICBjb2RlOiBjb2RlLFxuICAgICAgc3RhcnREYXRlOiBzdGFydERhdGUsXG4gICAgICBudW1DbGFzczogbnVtQ2xhc3MsXG4gICAgICB3ZWVrRGF5czogd2Vla0RheXMsXG4gICAgICBzdGFydFRpbWU6IHN0YXJ0VGltZSxcbiAgICAgIGVuZFRpbWU6IGVuZFRpbWUsXG4gICAgfTtcblxuICAgIGxldCBzZXJ2aWNlID0gdGhpcy5jYWxlbmRhclNlcnZpY2U7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBzZXJ2aWNlLnBvc3RDcmVhdGVRdWVyeUV2ZW50KHJlcXVlc3QpLnN1YnNjcmliZSggIChyZXNwb25zZTogUmVzcG9uc2UpID0+IHtcbiAgICAgICAgc3dpdGNoIChyZXNwb25zZS5tZXNzYWdlLmNvZGUpIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmVqZWN0KCdVbmhhbmRsZWQgZXhjZXB0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCdVbmhhbmRsZWQgZXhjZXB0aW9uJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzQW5BcHBVc2VyKCkge1xuICAgIGNvbnN0IHVzZXJBZ2VudDogc3RyaW5nID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgcmV0dXJuIHVzZXJBZ2VudC5pbmNsdWRlcygnRmx1dHRlciBJUFQgQVBQJyk7XG4gIH1cblxuICBnZXRVc2VyUm9sZSgpOiBudW1iZXIge1xuICAgIGxldCB1c2VyID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRDdXJyZW50VXNlcigpPy5yb2xlO1xuICAgIHJldHVybiB1c2VyID09PSB1bmRlZmluZWQgPyAtMSA6IHVzZXI7XG4gIH1cblxuICBnZXRVc2VyVG9rZW4oKTogc3RyaW5nIHtcbiAgICBsZXQgdG9rZW4gPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk/LnRva2VuO1xuICAgIHJldHVybiB0b2tlbiA9PT0gdW5kZWZpbmVkID8gJy0xJyA6IHRva2VuO1xuICB9XG5cbiAgZ2V0VXNlck5hbWUoKTogc3RyaW5nIHtcbiAgICBsZXQgdXNlciA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBsZXQgcmVzcG9uc2UgPSB1c2VyID09PSBudWxsID8gJycgOiB1c2VyLm5hbWU7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgZ2V0VXNlckNvZGUoKTogbnVtYmVyIHtcbiAgICBsZXQgdXNlciA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBsZXQgcmVzcG9uc2UgPSB1c2VyID09PSBudWxsID8gLTEgOiB1c2VyLmNvZGU7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgcmVnaXN0ZXJVc2VyRnJvbURhc2hib2FyZChyZWdpc3RlckRhc2hib2FyZFJxOiBSZWdpc3RlckRhc2hib2FyZFJxKTogUHJvbWlzZTxib29sZWFuPntcbiAgICBsZXQgcmVxdWVzdCA9IHJlZ2lzdGVyRGFzaGJvYXJkUnE7XG4gICAgbGV0IHNlcnZpY2UgPSB0aGlzLnVzZXJTZXJ2aWNlO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgc2VydmljZS5yZWdpc3RlckRhc2hib2FyZChyZXF1ZXN0KS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG5cbiAgICAgICAgc3dpdGNoIChyZXNwb25zZS5tZXNzYWdlLmNvZGUpIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBTd2FsLmZpcmUgKHtcbiAgICAgICAgICAgICAgJ3RpdGxlJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPlBlcmZlY3QhPC9wPicsXG4gICAgICAgICAgICAgICdodG1sJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPlN1Y2VzZnVsbCByZWdpc3RlciE8L3A+JyxcbiAgICAgICAgICAgICAgJ2ljb24nOidzdWNjZXNzJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIFN3YWwuZmlyZSAoe1xuICAgICAgICAgICAgICAndGl0bGUnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiXCI+RXJyb3IhPC9wPicsXG4gICAgICAgICAgICAgICdodG1sJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPlRoZSBpbnB1dCBkYXRhIGRvZXMgbm90IG1lZXQgdGhlIGVzdGFibGlzaGVkIHBhcmFtZXRlcnMuPC9wPicsXG4gICAgICAgICAgICAgICdpY29uJzonZXJyb3InLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIFN3YWwuZmlyZSAoe1xuICAgICAgICAgICAgICAndGl0bGUnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiPlVwcyE8L3A+JyxcbiAgICAgICAgICAgICAgJ2h0bWwnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiPlRoZSBpbnB1dCBkYXRhIGhhcyBhIGhpZ2ggcmVsYXRpb24gd2l0aCBhIHVzZXIgdGhhdCBhbHJlYWR5IGV4aXN0cyE8L3A+JyxcbiAgICAgICAgICAgICAgJ2ljb24nOiAnd2FybmluZycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIFN3YWwuZmlyZSAoe1xuICAgICAgICAgICAgICAndGl0bGUnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiXCI+RXJyb3IhPC9wPicsXG4gICAgICAgICAgICAgICdodG1sJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPkFuIHVuZXhwZWN0ZWQgZXJyb3IgaGFzIG9jY3VycmVkPC9wPicsXG4gICAgICAgICAgICAgICdpY29uJzonZXJyb3InLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVqZWN0KCdVbmhhbmRsZWQgZXhjZXB0aW9uJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGpzb25Ub0FycmF5KGRhdGE6IGFueVtdKTogYW55W11bXSB7XG4gICAgdmFyIHJlc3BvbnNlOiBhbnlbXSA9IFtdO1xuICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgdmFyIG9iamVjdDogYW55W10gPSBbXTtcbiAgICAgIGZvciAodmFyIGNsYXZlIGluIGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuaGFzT3duUHJvcGVydHkoY2xhdmUpKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBlbGVtZW50W2NsYXZlXSA9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgZWxlbWVudFtjbGF2ZV0gPSB0aGlzLnN1Ykpzb25Ub0FycmF5KGVsZW1lbnRbY2xhdmVdKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvYmplY3QucHVzaChlbGVtZW50W2NsYXZlXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlc3BvbnNlLnB1c2gob2JqZWN0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICBzdWJKc29uVG9BcnJheShkYXRhOiBhbnlbXSk6IHN0cmluZyB7XG4gICAgdmFyIG9iamVjdDogc3RyaW5nID0gJyc7XG4gICAgZm9yICh2YXIgY2xhdmUgaW4gZGF0YSkge1xuICAgICAgaWYgKGNsYXZlICE9ICdjb2RlJykge1xuICAgICAgICBvYmplY3QgKz0gJ1xcbicgKyBkYXRhW2NsYXZlXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG59XG4iXX0=
|