@doolehealth/service-lib 0.0.4 → 0.0.6
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 +112 -13
- package/esm2022/lib/configuration.mjs +1 -1
- package/esm2022/lib/models/notifications/notification-options.mjs +192 -0
- package/esm2022/lib/models/shared-care-plan.mjs +223 -0
- package/esm2022/lib/models/user.mjs +1 -1
- package/esm2022/lib/service-lib.component.mjs +5 -5
- package/esm2022/lib/service-lib.module.mjs +4 -4
- package/esm2022/lib/services/analytics.service.mjs +20 -11
- package/esm2022/lib/services/api-endpoints.service.mjs +22 -6
- package/esm2022/lib/services/authentication.service.mjs +74 -52
- package/esm2022/lib/services/change-endpoints.service.mjs +46 -22
- package/esm2022/lib/services/date.service.mjs +106 -45
- package/esm2022/lib/services/doole.service.mjs +658 -221
- package/esm2022/lib/services/encryption.service.mjs +3 -3
- package/esm2022/lib/services/error.service.mjs +3 -3
- package/esm2022/lib/services/events.service.mjs +5 -5
- package/esm2022/lib/services/firebase/auth/firebase-auth.service.mjs +154 -0
- package/esm2022/lib/services/firebase/auth/firebase-profile.model.mjs +7 -0
- package/esm2022/lib/services/health.service.mjs +303 -0
- package/esm2022/lib/services/highcharts.service.mjs +37 -67
- package/esm2022/lib/services/http.service.mjs +14 -14
- package/esm2022/lib/services/language.model.mjs +3 -0
- package/esm2022/lib/services/language.service.mjs +6 -6
- package/esm2022/lib/services/loading.service.mjs +3 -3
- package/esm2022/lib/services/logging.service.mjs +4 -4
- package/esm2022/lib/services/navigation.service.mjs +108 -9
- package/esm2022/lib/services/network.service.mjs +7 -7
- package/esm2022/lib/services/notification.service.mjs +10 -96
- package/esm2022/lib/services/opentok.service.mjs +10 -7
- package/esm2022/lib/services/permission.service.mjs +94 -0
- package/esm2022/lib/services/roles.service.mjs +9 -8
- package/esm2022/lib/services/shared-care-plan/shared-care-plan.service.mjs +103 -0
- package/esm2022/lib/services/storage.service.mjs +3 -3
- package/esm2022/lib/services/token.service.mjs +7 -7
- package/esm2022/lib/utils/chatParameters.mjs +17 -0
- package/esm2022/lib/utils/data-store.mjs +62 -0
- package/esm2022/lib/utils/query-string-parameters.mjs +11 -0
- package/esm2022/lib/utils/url-builder.mjs +15 -0
- package/esm2022/public-api.mjs +8 -9
- package/fesm2022/doolehealth-service-lib.mjs +2055 -1228
- package/fesm2022/doolehealth-service-lib.mjs.map +1 -1
- package/lib/configuration.d.ts +4 -2
- package/lib/{util → models/notifications}/notification-options.d.ts +0 -32
- package/lib/models/shared-care-plan.d.ts +206 -0
- package/lib/models/user.d.ts +2 -0
- package/lib/service-lib.component.d.ts +1 -1
- package/lib/services/analytics.service.d.ts +6 -3
- package/lib/services/api-endpoints.service.d.ts +3 -0
- package/lib/services/authentication.service.d.ts +27 -25
- package/lib/services/change-endpoints.service.d.ts +1 -0
- package/lib/services/date.service.d.ts +15 -8
- package/lib/services/doole.service.d.ts +64 -23
- package/lib/services/{auth → firebase/auth}/firebase-auth.service.d.ts +1 -1
- package/lib/services/{auth → firebase/auth}/firebase-profile.model.d.ts +1 -1
- package/lib/services/health.service.d.ts +49 -0
- package/lib/services/highcharts.service.d.ts +1 -2
- package/lib/services/http.service.d.ts +1 -1
- package/lib/services/language.service.d.ts +1 -1
- package/lib/services/navigation.service.d.ts +6 -1
- package/lib/services/notification.service.d.ts +2 -7
- package/lib/services/permission.service.d.ts +33 -0
- package/lib/services/roles.service.d.ts +3 -2
- package/lib/services/shared-care-plan/shared-care-plan.service.d.ts +20 -0
- package/lib/{util → utils}/data-store.d.ts +3 -1
- package/package.json +2 -15
- package/public-api.d.ts +7 -8
- package/esm2022/lib/services/auth/firebase-auth.service.mjs +0 -155
- package/esm2022/lib/services/auth/firebase-profile.model.mjs +0 -7
- package/esm2022/lib/services/pusher/pusher-alarm.service.mjs +0 -39
- package/esm2022/lib/services/pusher/pusher-challenge-notifications.service.mjs +0 -110
- package/esm2022/lib/services/pusher/pusher-connection.service.mjs +0 -73
- package/esm2022/lib/services/pusher/pusher-message.service.mjs +0 -27
- package/esm2022/lib/services/pusher/pusher-notification.service.mjs +0 -116
- package/esm2022/lib/util/chatParameters.mjs +0 -17
- package/esm2022/lib/util/data-store.mjs +0 -54
- package/esm2022/lib/util/environment.mjs +0 -29
- package/esm2022/lib/util/language.model.mjs +0 -3
- package/esm2022/lib/util/notification-options.mjs +0 -245
- package/esm2022/lib/util/query-string-parameters.mjs +0 -11
- package/esm2022/lib/util/url-builder.mjs +0 -15
- package/lib/services/pusher/pusher-alarm.service.d.ts +0 -16
- package/lib/services/pusher/pusher-challenge-notifications.service.d.ts +0 -40
- package/lib/services/pusher/pusher-connection.service.d.ts +0 -24
- package/lib/services/pusher/pusher-message.service.d.ts +0 -13
- package/lib/services/pusher/pusher-notification.service.d.ts +0 -32
- package/lib/util/environment.d.ts +0 -18
- /package/lib/{util → services}/language.model.d.ts +0 -0
- /package/lib/{util → utils}/chatParameters.d.ts +0 -0
- /package/lib/{util → utils}/query-string-parameters.d.ts +0 -0
- /package/lib/{util → utils}/url-builder.d.ts +0 -0
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import { Observable } from 'rxjs';
|
|
2
|
+
import { Observable, of, throwError, TimeoutError } from 'rxjs';
|
|
3
3
|
import { Capacitor } from '@capacitor/core';
|
|
4
|
-
import { map } from 'rxjs/operators';
|
|
4
|
+
import { map, mergeMap } from 'rxjs/operators';
|
|
5
5
|
import { HttpParams } from '@angular/common/http';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "
|
|
7
|
+
import * as i1 from "./authentication.service";
|
|
8
8
|
import * as i2 from "@awesome-cordova-plugins/file-transfer/ngx";
|
|
9
9
|
import * as i3 from "@awesome-cordova-plugins/file/ngx";
|
|
10
10
|
import * as i4 from "./http.service";
|
|
11
|
-
import * as i5 from "
|
|
11
|
+
import * as i5 from "./api-endpoints.service";
|
|
12
12
|
import * as i6 from "./events.service";
|
|
13
13
|
import * as i7 from "@ionic/angular";
|
|
14
14
|
import * as i8 from "@angular/router";
|
|
15
|
+
import * as i9 from "@ngx-translate/core";
|
|
15
16
|
export class DooleService {
|
|
16
|
-
constructor(authService, transfer, file, http, api, events, platform, router, alertController) {
|
|
17
|
+
constructor(authService, transfer, file, http, api, events, platform, router, alertController, translate) {
|
|
17
18
|
this.authService = authService;
|
|
18
19
|
this.transfer = transfer;
|
|
19
20
|
this.file = file;
|
|
@@ -23,9 +24,10 @@ export class DooleService {
|
|
|
23
24
|
this.platform = platform;
|
|
24
25
|
this.router = router;
|
|
25
26
|
this.alertController = alertController;
|
|
27
|
+
this.translate = translate;
|
|
26
28
|
}
|
|
27
29
|
uploadFile(image, id) {
|
|
28
|
-
console.log("uploading ", image);
|
|
30
|
+
////console.log("uploading ", image);
|
|
29
31
|
const token = localStorage.getItem('token');
|
|
30
32
|
let options = {
|
|
31
33
|
fileKey: 'file',
|
|
@@ -39,17 +41,17 @@ export class DooleService {
|
|
|
39
41
|
}
|
|
40
42
|
};
|
|
41
43
|
const fileTransfer = this.transfer.create();
|
|
42
|
-
// Add files for new or saved diagnostics.
|
|
43
|
-
// uses diagnostic/media when diagnostic is new
|
|
44
|
-
//const endpoint = id ? this.api.getEndpoint('diagnostic/media'):this.api.
|
|
44
|
+
// Add files for new or saved diagnostics.
|
|
45
|
+
// uses diagnostic/media when diagnostic is new
|
|
46
|
+
//const endpoint = id ? this.api.getEndpoint('diagnostic/media'):this.api.getEndpoint('media/upload/temp') ;
|
|
45
47
|
const endpoint = this.api.getEndpoint('media/upload/temp');
|
|
46
|
-
|
|
48
|
+
//////console.log("* uploadFile endpoint", endpoint);
|
|
47
49
|
return new Promise(function (resolve, reject) {
|
|
48
50
|
fileTransfer.upload(image, endpoint, options).then(data => {
|
|
49
|
-
console.log(data);
|
|
51
|
+
////console.log(data);
|
|
50
52
|
resolve(JSON.parse(data.response));
|
|
51
53
|
}, (err) => {
|
|
52
|
-
console.log(err);
|
|
54
|
+
////console.log(err);
|
|
53
55
|
reject(err);
|
|
54
56
|
});
|
|
55
57
|
});
|
|
@@ -57,12 +59,12 @@ export class DooleService {
|
|
|
57
59
|
postAPIAddMedia(params) {
|
|
58
60
|
const endpoint = this.api.getEndpoint('media/add');
|
|
59
61
|
return this.http.postForm(endpoint, params).pipe(map((res) => {
|
|
60
|
-
console.log(`[DooleService] postAPIAddMedia(${endpoint}) res: `, res);
|
|
62
|
+
////console.log(`[DooleService] postAPIAddMedia(${endpoint}) res: `, res);
|
|
61
63
|
return res;
|
|
62
64
|
}));
|
|
63
65
|
}
|
|
64
66
|
uploadFileToModel(image, name, params) {
|
|
65
|
-
|
|
67
|
+
//////console.log("uploading ", image);
|
|
66
68
|
const token = localStorage.getItem('token');
|
|
67
69
|
let options = {
|
|
68
70
|
fileKey: 'file',
|
|
@@ -77,10 +79,10 @@ export class DooleService {
|
|
|
77
79
|
const endpoint = this.api.getEndpoint('media/add');
|
|
78
80
|
return new Promise(function (resolve, reject) {
|
|
79
81
|
fileTransfer.upload(image, endpoint, options).then(data => {
|
|
80
|
-
console.log(JSON.parse(data.response));
|
|
82
|
+
////console.log(JSON.parse(data.response));
|
|
81
83
|
resolve(JSON.parse(data.response));
|
|
82
84
|
}, (err) => {
|
|
83
|
-
console.log(err);
|
|
85
|
+
////console.log(err);
|
|
84
86
|
reject(err);
|
|
85
87
|
});
|
|
86
88
|
});
|
|
@@ -101,7 +103,7 @@ export class DooleService {
|
|
|
101
103
|
id: idMessageHeader
|
|
102
104
|
}
|
|
103
105
|
};
|
|
104
|
-
|
|
106
|
+
//////console.log("options: ", options);
|
|
105
107
|
const fileTransfer = this.transfer.create();
|
|
106
108
|
fileTransfer.onProgress((progressEvent) => {
|
|
107
109
|
if (progressEvent.lengthComputable) {
|
|
@@ -109,17 +111,17 @@ export class DooleService {
|
|
|
109
111
|
this.events.publish("uploadMessageImage", { fileUrl, perc });
|
|
110
112
|
}
|
|
111
113
|
else {
|
|
112
|
-
|
|
114
|
+
//////console.log("progressEvent - ", progressEvent);
|
|
113
115
|
}
|
|
114
116
|
});
|
|
115
117
|
const endpoint = this.api.getEndpoint('message');
|
|
116
118
|
return new Promise(function (resolve, reject) {
|
|
117
119
|
fileTransfer.upload(fileUrl, endpoint, options)
|
|
118
120
|
.then(data => {
|
|
119
|
-
|
|
121
|
+
//////console.log("success fileTransfer.upload", JSON.parse(data.response));
|
|
120
122
|
resolve(JSON.parse(data.response));
|
|
121
123
|
}, (err) => {
|
|
122
|
-
|
|
124
|
+
//////console.log("** error ** fileTransfer.upload: ", err);
|
|
123
125
|
reject(fileTransfer.upload);
|
|
124
126
|
});
|
|
125
127
|
});
|
|
@@ -139,6 +141,21 @@ export class DooleService {
|
|
|
139
141
|
const blob = new Blob(byteArrays, { type: contentType });
|
|
140
142
|
return blob;
|
|
141
143
|
}
|
|
144
|
+
download(url) {
|
|
145
|
+
const fileTransfer = this.transfer.create();
|
|
146
|
+
var path = null;
|
|
147
|
+
if (this.platform.is('ios')) {
|
|
148
|
+
path = this.file.documentsDirectory;
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
path = this.file.dataDirectory;
|
|
152
|
+
}
|
|
153
|
+
fileTransfer.download(url, path + 'file.pdf').then((entry) => {
|
|
154
|
+
////console.log('download complete: ' + entry.toURL());
|
|
155
|
+
}, (error) => {
|
|
156
|
+
// handle error
|
|
157
|
+
});
|
|
158
|
+
}
|
|
142
159
|
downloadFile(url, destination) {
|
|
143
160
|
var result = [];
|
|
144
161
|
const fileTransfer = this.transfer.create();
|
|
@@ -149,13 +166,13 @@ export class DooleService {
|
|
|
149
166
|
else {
|
|
150
167
|
path = this.file.dataDirectory;
|
|
151
168
|
}
|
|
152
|
-
|
|
169
|
+
//////console.log("downloadFile", url, destination, 'path,destination', path, destination);
|
|
153
170
|
return new Observable((observer) => {
|
|
154
|
-
|
|
171
|
+
//////console.log("before CheckFile", this.file);
|
|
155
172
|
this.file.checkFile(path, destination).then(res => {
|
|
156
|
-
|
|
173
|
+
//////console.log("*res*", res);
|
|
157
174
|
if (res) {
|
|
158
|
-
|
|
175
|
+
//////console.log("exists", res);
|
|
159
176
|
result["success"] = true;
|
|
160
177
|
result["downloaded"] = true;
|
|
161
178
|
result["file"] = path + destination; //normalizeURL(this.file.cacheDirectory + destination);
|
|
@@ -163,10 +180,10 @@ export class DooleService {
|
|
|
163
180
|
return observer.next(result);
|
|
164
181
|
}
|
|
165
182
|
}, error => {
|
|
166
|
-
|
|
183
|
+
//////console.log("not exists");
|
|
167
184
|
fileTransfer.onProgress(event => {
|
|
168
185
|
if (event.lengthComputable) {
|
|
169
|
-
|
|
186
|
+
//////console.log(event.loaded / event.total);
|
|
170
187
|
result["status"] = "downloading";
|
|
171
188
|
result["downloaded"] = false;
|
|
172
189
|
result["percent"] = Math.round((event.loaded / event.total) * 100);
|
|
@@ -174,18 +191,18 @@ export class DooleService {
|
|
|
174
191
|
}
|
|
175
192
|
});
|
|
176
193
|
return fileTransfer.download(url, path + destination).then((entry) => {
|
|
177
|
-
|
|
194
|
+
//////console.log('*download:* ' + url + " " + entry.toURL());
|
|
178
195
|
result["success"] = true;
|
|
179
196
|
result["downloaded"] = true;
|
|
180
197
|
result["file"] = entry.toURL(); //normalizeURL(this.file.cacheDirectory + destination);
|
|
181
198
|
result["fileNormalized"] = Capacitor.convertFileSrc(path + destination);
|
|
182
199
|
return observer.next(result);
|
|
183
200
|
}, (error) => {
|
|
184
|
-
|
|
201
|
+
//////console.log(error);
|
|
185
202
|
result["success"] = false;
|
|
186
203
|
result["downloaded"] = false;
|
|
187
|
-
|
|
188
|
-
|
|
204
|
+
//////console.log("error download " + url);
|
|
205
|
+
//////console.log(result);
|
|
189
206
|
return observer.next(result);
|
|
190
207
|
});
|
|
191
208
|
});
|
|
@@ -195,30 +212,43 @@ export class DooleService {
|
|
|
195
212
|
let path = `media/${id}`;
|
|
196
213
|
const endpoint = this.api.getEndpoint(path);
|
|
197
214
|
return this.http.delete(endpoint).pipe(map((res) => {
|
|
198
|
-
console.log(`[DooleService] deleteFile(${path}) res: ${res}`, JSON.stringify(res));
|
|
215
|
+
////console.log(`[DooleService] deleteFile(${path}) res: ${res}`, JSON.stringify(res));
|
|
199
216
|
return res;
|
|
200
217
|
}));
|
|
201
218
|
}
|
|
202
219
|
showAlert(message) {
|
|
203
220
|
return this.alertController.create({
|
|
221
|
+
cssClass: 'my-alert-class',
|
|
222
|
+
//mode: 'ios',
|
|
204
223
|
header: 'Info',
|
|
205
224
|
message: message,
|
|
206
225
|
backdropDismiss: false,
|
|
207
|
-
buttons: [
|
|
226
|
+
buttons: [
|
|
227
|
+
{
|
|
228
|
+
text: 'Aceptar',
|
|
229
|
+
role: 'confirm',
|
|
230
|
+
cssClass: 'onlyButton',
|
|
231
|
+
handler: (blah) => {
|
|
232
|
+
////console.log('[LandingPage] AlertConfirm Cancel');
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
]
|
|
208
236
|
});
|
|
209
237
|
}
|
|
210
238
|
async showAlertAndReturn(header, message, isDismiss, route) {
|
|
211
239
|
//console.log(`[DooleService] showAlertAndReturn()`);
|
|
212
240
|
let dismiss = (isDismiss !== undefined) ? isDismiss : false;
|
|
213
241
|
const alert = await this.alertController.create({
|
|
242
|
+
cssClass: 'my-alert-class',
|
|
243
|
+
//mode: 'ios',
|
|
214
244
|
header: header,
|
|
215
245
|
message: message,
|
|
216
246
|
backdropDismiss: dismiss,
|
|
217
247
|
buttons: [
|
|
218
248
|
{
|
|
219
|
-
text: '
|
|
249
|
+
text: 'Aceptar',
|
|
220
250
|
handler: (blah) => {
|
|
221
|
-
//
|
|
251
|
+
//console.log('Confirm OK: blah');
|
|
222
252
|
if (route !== undefined && route !== null)
|
|
223
253
|
this.router.navigateByUrl(route);
|
|
224
254
|
}
|
|
@@ -228,11 +258,21 @@ export class DooleService {
|
|
|
228
258
|
await alert.present();
|
|
229
259
|
}
|
|
230
260
|
async presentAlert(message, button) {
|
|
231
|
-
let buttonName = (button !== undefined) ? button : '
|
|
261
|
+
let buttonName = (button !== undefined) ? button : this.translate.instant('landing.accept-btn');
|
|
232
262
|
const alert = await this.alertController.create({
|
|
233
263
|
cssClass: 'my-alert-class',
|
|
264
|
+
//mode: 'ios',
|
|
234
265
|
message: message,
|
|
235
|
-
buttons: [
|
|
266
|
+
buttons: [
|
|
267
|
+
{
|
|
268
|
+
text: buttonName,
|
|
269
|
+
role: 'confirm',
|
|
270
|
+
cssClass: 'onlyButton',
|
|
271
|
+
handler: (blah) => {
|
|
272
|
+
////console.log('[LandingPage] AlertConfirm Cancel');
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
]
|
|
236
276
|
});
|
|
237
277
|
await alert.present();
|
|
238
278
|
}
|
|
@@ -241,11 +281,19 @@ export class DooleService {
|
|
|
241
281
|
let user = this.authService?.user;
|
|
242
282
|
return httpParams = (user.familyUnit) ? httpParams.append('user', user.familyUnit) : httpParams;
|
|
243
283
|
}
|
|
284
|
+
getAPILegalAndPolicy() {
|
|
285
|
+
let path = 'center/legal-term-and-privacy-policy/last';
|
|
286
|
+
const endpoint = this.api.getEndpoint(path);
|
|
287
|
+
return this.http.get(endpoint).pipe(map((res) => {
|
|
288
|
+
//////console.log(`[DooleService] getAPILegalAndPolicy(${path}) res: `, res);
|
|
289
|
+
return res;
|
|
290
|
+
}));
|
|
291
|
+
}
|
|
244
292
|
getAPILegalInformation() {
|
|
245
293
|
let path = 'user/legalTerm/lastAccepted';
|
|
246
294
|
const endpoint = this.api.getEndpoint(path);
|
|
247
295
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
248
|
-
console.log(`[DooleService] getAPILegalInformation(${path}) res: `, res);
|
|
296
|
+
//////console.log(`[DooleService] getAPILegalInformation(${path}) res: `, res);
|
|
249
297
|
return res;
|
|
250
298
|
}));
|
|
251
299
|
}
|
|
@@ -253,7 +301,7 @@ export class DooleService {
|
|
|
253
301
|
let path = 'user/legalTerm/lastAccepted';
|
|
254
302
|
const endpoint = this.api.getEndpoint(path);
|
|
255
303
|
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
256
|
-
|
|
304
|
+
//////console.log(`[DooleService] postAPIConfirmationLegal(${path}) res: `, res);
|
|
257
305
|
return res;
|
|
258
306
|
}));
|
|
259
307
|
}
|
|
@@ -261,7 +309,7 @@ export class DooleService {
|
|
|
261
309
|
let path = 'user/legalTerm/lastDeclined';
|
|
262
310
|
const endpoint = this.api.getEndpoint(path);
|
|
263
311
|
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
264
|
-
|
|
312
|
+
//////console.log(`[DooleService] postAPIConfirmationLegal(${path}) res: `, res);
|
|
265
313
|
return res;
|
|
266
314
|
}));
|
|
267
315
|
}
|
|
@@ -269,7 +317,7 @@ export class DooleService {
|
|
|
269
317
|
let path = 'patient/forgot';
|
|
270
318
|
const endpoint = this.api.getEndpoint(path);
|
|
271
319
|
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
272
|
-
|
|
320
|
+
//////console.log(`[DooleService] postAPIpasswordRecovery(${path}) res: `, res);
|
|
273
321
|
return res;
|
|
274
322
|
}));
|
|
275
323
|
}
|
|
@@ -283,15 +331,16 @@ export class DooleService {
|
|
|
283
331
|
endpoint = this.api.getEndpoint(path);
|
|
284
332
|
}
|
|
285
333
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
286
|
-
|
|
334
|
+
//////console.log(`[DooleService] getAPIStaffSlots(${path}) res: `, res);
|
|
287
335
|
return res;
|
|
288
336
|
}));
|
|
289
337
|
}
|
|
290
338
|
getAPIgoals() {
|
|
291
339
|
let path = 'user/element/goals';
|
|
340
|
+
//let path = 'user/goals/elements'
|
|
292
341
|
const endpoint = this.api.getEndpoint(path);
|
|
293
342
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
294
|
-
|
|
343
|
+
//////console.log(`[DooleService] getAPIhomeInitial(${path}) res: `, res);
|
|
295
344
|
return res;
|
|
296
345
|
}));
|
|
297
346
|
}
|
|
@@ -299,7 +348,7 @@ export class DooleService {
|
|
|
299
348
|
let path = 'user/agenda/' + id + '/videocallSession';
|
|
300
349
|
const endpoint = this.api.getEndpoint(path);
|
|
301
350
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
302
|
-
console.log(`[DooleService] getAPIvideocall(${path}) res: `, res);
|
|
351
|
+
////console.log(`[DooleService] getAPIvideocall(${path}) res: `, res);
|
|
303
352
|
return res;
|
|
304
353
|
}));
|
|
305
354
|
}
|
|
@@ -307,7 +356,7 @@ export class DooleService {
|
|
|
307
356
|
let path = 'user/videocall/pendingConnect';
|
|
308
357
|
const endpoint = this.api.getEndpoint(path);
|
|
309
358
|
return this.http.post(endpoint).pipe(map((res) => {
|
|
310
|
-
console.log(`[DooleService] getAPIPendingConnect(${path}) res: `, res);
|
|
359
|
+
////console.log(`[DooleService] getAPIPendingConnect(${path}) res: `, res);
|
|
311
360
|
return res;
|
|
312
361
|
}));
|
|
313
362
|
}
|
|
@@ -317,16 +366,31 @@ export class DooleService {
|
|
|
317
366
|
const endpoint = this.api.getEndpoint(path);
|
|
318
367
|
return this.http.get(endpoint).pipe(
|
|
319
368
|
map((res: any) => {
|
|
320
|
-
|
|
369
|
+
//////console.log(`[DooleService] getAPIhomeInitial(${path}) res: `, res);
|
|
321
370
|
return res;
|
|
322
371
|
})
|
|
323
372
|
)
|
|
324
373
|
} */
|
|
374
|
+
updateAPIImageuser(params) {
|
|
375
|
+
let path = `user/image`;
|
|
376
|
+
const endpoint = this.api.getEndpoint(path);
|
|
377
|
+
return this.http.put(endpoint, params).pipe(map((res) => {
|
|
378
|
+
//////console.log(`[DooleService] updateAPIReminder(${path}) res: `, res);
|
|
379
|
+
return res;
|
|
380
|
+
}));
|
|
381
|
+
}
|
|
382
|
+
deleteAPIImageuser() {
|
|
383
|
+
let path = `user/image`;
|
|
384
|
+
const endpoint = this.api.getEndpoint(path);
|
|
385
|
+
return this.http.delete(endpoint).pipe(map((res) => {
|
|
386
|
+
//////console.log(`[DooleService] updateAPIReminder(${path}) res: `, res);
|
|
387
|
+
return res;
|
|
388
|
+
}));
|
|
389
|
+
}
|
|
325
390
|
getAPIinformationSummary(params) {
|
|
326
391
|
let path = 'home';
|
|
327
392
|
const endpoint = this.api.getEndpoint(path);
|
|
328
|
-
|
|
329
|
-
return this.http.post(endpoint, params).pipe(map(res => res));
|
|
393
|
+
return this.http.post(endpoint, params).pipe(mergeMap((v) => v instanceof TimeoutError ? throwError(v) : of(v)));
|
|
330
394
|
}
|
|
331
395
|
getAPIinformationSummaryOld(params) {
|
|
332
396
|
let path = 'home';
|
|
@@ -338,7 +402,7 @@ export class DooleService {
|
|
|
338
402
|
//let httpParams = this.getFamilyUnitID()
|
|
339
403
|
const endpoint = this.api.getEndpoint(path);
|
|
340
404
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
341
|
-
|
|
405
|
+
//////console.log(`[DooleService] getAPIhomeInitial(${path}) res: `, res);
|
|
342
406
|
return res;
|
|
343
407
|
}));
|
|
344
408
|
}
|
|
@@ -347,7 +411,7 @@ export class DooleService {
|
|
|
347
411
|
let httpParams = this.getFamilyUnitID();
|
|
348
412
|
const endpoint = this.api.getEndpoint(path);
|
|
349
413
|
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
350
|
-
|
|
414
|
+
//////console.log(`[DooleService] postAPIChangePassword(${path}) res: `, res);
|
|
351
415
|
return res;
|
|
352
416
|
}));
|
|
353
417
|
}
|
|
@@ -355,7 +419,7 @@ export class DooleService {
|
|
|
355
419
|
let path = 'user/configuration';
|
|
356
420
|
const endpoint = this.api.getEndpoint(path);
|
|
357
421
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
358
|
-
|
|
422
|
+
//////console.log(`[DooleService] getAPInotificationConfigurations(${path}) res: `, res);
|
|
359
423
|
return res;
|
|
360
424
|
}));
|
|
361
425
|
}
|
|
@@ -363,7 +427,7 @@ export class DooleService {
|
|
|
363
427
|
let path = 'user/configuration';
|
|
364
428
|
const endpoint = this.api.getEndpoint(path);
|
|
365
429
|
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
366
|
-
|
|
430
|
+
//////console.log(`[DooleService] postAPIConfiguration(${path}) res: `, res);
|
|
367
431
|
return res;
|
|
368
432
|
}));
|
|
369
433
|
}
|
|
@@ -371,7 +435,7 @@ export class DooleService {
|
|
|
371
435
|
let path = 'center/languages';
|
|
372
436
|
const endpoint = this.api.getEndpoint(path);
|
|
373
437
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
374
|
-
|
|
438
|
+
//////console.log(`[DooleService] getAPIlanguagesCenter(${path}) res: `, res);
|
|
375
439
|
return res;
|
|
376
440
|
}));
|
|
377
441
|
}
|
|
@@ -379,7 +443,7 @@ export class DooleService {
|
|
|
379
443
|
let path = 'center/faq';
|
|
380
444
|
const endpoint = this.api.getEndpoint(path);
|
|
381
445
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
382
|
-
|
|
446
|
+
//////console.log(`[DooleService] getAPIhomeInitial(${path}) res: `, res);
|
|
383
447
|
return res;
|
|
384
448
|
}));
|
|
385
449
|
}
|
|
@@ -387,7 +451,7 @@ export class DooleService {
|
|
|
387
451
|
let path = 'user/familyUnit';
|
|
388
452
|
const endpoint = this.api.getEndpoint(path);
|
|
389
453
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
390
|
-
|
|
454
|
+
//////console.log(`[DooleService] getAPIFamilyUnit(${path}) res: `, res);
|
|
391
455
|
return res;
|
|
392
456
|
}));
|
|
393
457
|
}
|
|
@@ -395,15 +459,15 @@ export class DooleService {
|
|
|
395
459
|
let path = 'v2/user/familyUnit';
|
|
396
460
|
const endpoint = this.api.getEndpoint(path);
|
|
397
461
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
398
|
-
console.log(`[DooleService] getAPIFamilyUnit(${path}) res: `, res);
|
|
462
|
+
////console.log(`[DooleService] getAPIFamilyUnit(${path}) res: `, res);
|
|
399
463
|
return res;
|
|
400
464
|
}));
|
|
401
465
|
}
|
|
402
466
|
postAPIReportProblem(params) {
|
|
403
|
-
let path = 'user/reportProblem'; // 'media/upload/temp'
|
|
467
|
+
let path = 'user/reportProblem'; // 'media/upload/temp'
|
|
404
468
|
const endpoint = this.api.getEndpoint(path);
|
|
405
469
|
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
406
|
-
console.log(`[DooleService] postAPIReportProblem(${path}) res: `, res);
|
|
470
|
+
////console.log(`[DooleService] postAPIReportProblem(${path}) res: `, res);
|
|
407
471
|
return res;
|
|
408
472
|
}));
|
|
409
473
|
}
|
|
@@ -411,7 +475,7 @@ export class DooleService {
|
|
|
411
475
|
let path = 'user/email_verification';
|
|
412
476
|
const endpoint = this.api.getEndpoint(path);
|
|
413
477
|
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
414
|
-
console.log(`[DooleService] postAPIemailVerification(${path}) res: `, res);
|
|
478
|
+
////console.log(`[DooleService] postAPIemailVerification(${path}) res: `, res);
|
|
415
479
|
return res;
|
|
416
480
|
}));
|
|
417
481
|
}
|
|
@@ -419,16 +483,16 @@ export class DooleService {
|
|
|
419
483
|
let path = 'user/resendTwoFactorCode';
|
|
420
484
|
const endpoint = this.api.getEndpoint(path);
|
|
421
485
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
422
|
-
console.log(`[DooleService] getAPICodeByEmail(${path}) res: `, res);
|
|
486
|
+
////console.log(`[DooleService] getAPICodeByEmail(${path}) res: `, res);
|
|
423
487
|
return res;
|
|
424
488
|
}));
|
|
425
489
|
}
|
|
426
490
|
postAPIcodeVerification(params) {
|
|
427
491
|
let path = 'user/verifyTwoFactor';
|
|
428
|
-
//let path = 'user/codeVerification';
|
|
492
|
+
//let path = 'user/codeVerification';
|
|
429
493
|
const endpoint = this.api.getEndpoint(path);
|
|
430
494
|
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
431
|
-
console.log(`[DooleService] postAPIcodeVerification(${path}) res: `, res);
|
|
495
|
+
////console.log(`[DooleService] postAPIcodeVerification(${path}) res: `, res);
|
|
432
496
|
return res;
|
|
433
497
|
}));
|
|
434
498
|
}
|
|
@@ -436,7 +500,7 @@ export class DooleService {
|
|
|
436
500
|
let path = 'center/healthCardTypes';
|
|
437
501
|
const endpoint = this.api.getEndpoint(path);
|
|
438
502
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
439
|
-
console.log(`[DooleService] getAPIhealthCardTypes(${path}) res: `, res);
|
|
503
|
+
////console.log(`[DooleService] getAPIhealthCardTypes(${path}) res: `, res);
|
|
440
504
|
return res;
|
|
441
505
|
}));
|
|
442
506
|
}
|
|
@@ -444,7 +508,7 @@ export class DooleService {
|
|
|
444
508
|
let path = 'user/healthcards';
|
|
445
509
|
const endpoint = this.api.getEndpoint(path);
|
|
446
510
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
447
|
-
console.log(`[DooleService] getAPhealthCards(${path}) res: `, res);
|
|
511
|
+
////console.log(`[DooleService] getAPhealthCards(${path}) res: `, res);
|
|
448
512
|
return res;
|
|
449
513
|
}));
|
|
450
514
|
}
|
|
@@ -452,7 +516,7 @@ export class DooleService {
|
|
|
452
516
|
let path = `user/healthcard/${id}`;
|
|
453
517
|
const endpoint = this.api.getEndpoint(path);
|
|
454
518
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
455
|
-
console.log(`[DooleService] getAPIhealthCard(${path}) res: `, res);
|
|
519
|
+
////console.log(`[DooleService] getAPIhealthCard(${path}) res: `, res);
|
|
456
520
|
return res;
|
|
457
521
|
}));
|
|
458
522
|
}
|
|
@@ -460,7 +524,7 @@ export class DooleService {
|
|
|
460
524
|
let path = 'user/healthcard';
|
|
461
525
|
const endpoint = this.api.getEndpoint(path);
|
|
462
526
|
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
463
|
-
console.log(`[DooleService] postAPIReportProblem(${path}) res: `, res);
|
|
527
|
+
////console.log(`[DooleService] postAPIReportProblem(${path}) res: `, res);
|
|
464
528
|
return res;
|
|
465
529
|
}));
|
|
466
530
|
}
|
|
@@ -468,7 +532,7 @@ export class DooleService {
|
|
|
468
532
|
let path = `user/healthcard/${params.id}`;
|
|
469
533
|
const endpoint = this.api.getEndpoint(path);
|
|
470
534
|
return this.http.put(endpoint, params).pipe(map((res) => {
|
|
471
|
-
console.log(`[DooleService] putAPIhealthCard(${path}) res: `, res);
|
|
535
|
+
////console.log(`[DooleService] putAPIhealthCard(${path}) res: `, res);
|
|
472
536
|
return res;
|
|
473
537
|
}));
|
|
474
538
|
}
|
|
@@ -476,7 +540,7 @@ export class DooleService {
|
|
|
476
540
|
let path = `user/healthcard/${params.id}`;
|
|
477
541
|
const endpoint = this.api.getEndpoint(path);
|
|
478
542
|
return this.http.delete(endpoint).pipe(map((res) => {
|
|
479
|
-
console.log(`[DooleService] deleteAPIhealthCard(${path}) res: ${res}`, JSON.stringify(res));
|
|
543
|
+
////console.log(`[DooleService] deleteAPIhealthCard(${path}) res: ${res}`, JSON.stringify(res));
|
|
480
544
|
return res;
|
|
481
545
|
}));
|
|
482
546
|
}
|
|
@@ -484,7 +548,7 @@ export class DooleService {
|
|
|
484
548
|
let path = 'center/socialRelationType';
|
|
485
549
|
const endpoint = this.api.getEndpoint(path);
|
|
486
550
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
487
|
-
console.log(`[DooleService] getAPISocialRelationType(${path}) res: `, res);
|
|
551
|
+
////console.log(`[DooleService] getAPISocialRelationType(${path}) res: `, res);
|
|
488
552
|
return res;
|
|
489
553
|
}));
|
|
490
554
|
}
|
|
@@ -492,7 +556,7 @@ export class DooleService {
|
|
|
492
556
|
let path = 'user/EmergencyContacts';
|
|
493
557
|
const endpoint = this.api.getEndpoint(path);
|
|
494
558
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
495
|
-
console.log(`[DooleService] getAPIemergencyContact(${path}) res: `, res);
|
|
559
|
+
////console.log(`[DooleService] getAPIemergencyContact(${path}) res: `, res);
|
|
496
560
|
return res;
|
|
497
561
|
}));
|
|
498
562
|
}
|
|
@@ -500,7 +564,7 @@ export class DooleService {
|
|
|
500
564
|
let path = `user/EmergencyContact/${id}`;
|
|
501
565
|
const endpoint = this.api.getEndpoint(path);
|
|
502
566
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
503
|
-
console.log(`[DooleService] getAPIemergencyContact(${path}) res: `, res);
|
|
567
|
+
////console.log(`[DooleService] getAPIemergencyContact(${path}) res: `, res);
|
|
504
568
|
return res;
|
|
505
569
|
}));
|
|
506
570
|
}
|
|
@@ -508,16 +572,16 @@ export class DooleService {
|
|
|
508
572
|
let path = 'user/EmergencyContact';
|
|
509
573
|
const endpoint = this.api.getEndpoint(path);
|
|
510
574
|
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
511
|
-
console.log(`[DooleService] postAPIemergencyContact(${path}) res: `, res);
|
|
575
|
+
////console.log(`[DooleService] postAPIemergencyContact(${path}) res: `, res);
|
|
512
576
|
return res;
|
|
513
577
|
}));
|
|
514
578
|
}
|
|
515
579
|
putAPIemergencyContact(id, params) {
|
|
516
580
|
let path = `user/EmergencyContact/${id}`;
|
|
517
|
-
console.log('[DooleService] putAPIemergencyContact()', params);
|
|
581
|
+
////console.log('[DooleService] putAPIemergencyContact()', params);
|
|
518
582
|
const endpoint = this.api.getEndpoint(path);
|
|
519
583
|
return this.http.put(endpoint, params).pipe(map((res) => {
|
|
520
|
-
console.log(`[DooleService] putAPIemergencyContact(${path}) res: `, res);
|
|
584
|
+
////console.log(`[DooleService] putAPIemergencyContact(${path}) res: `, res);
|
|
521
585
|
return res;
|
|
522
586
|
}));
|
|
523
587
|
}
|
|
@@ -525,7 +589,7 @@ export class DooleService {
|
|
|
525
589
|
let path = `user/EmergencyContact/${id}`;
|
|
526
590
|
const endpoint = this.api.getEndpoint(path);
|
|
527
591
|
return this.http.delete(endpoint).pipe(map((res) => {
|
|
528
|
-
console.log(`[DooleService] deleteAPIemergencyContact(${path}) res: ${res}`, JSON.stringify(res));
|
|
592
|
+
////console.log(`[DooleService] deleteAPIemergencyContact(${path}) res: ${res}`, JSON.stringify(res));
|
|
529
593
|
return res;
|
|
530
594
|
}));
|
|
531
595
|
}
|
|
@@ -533,7 +597,7 @@ export class DooleService {
|
|
|
533
597
|
let path = 'center/about';
|
|
534
598
|
const endpoint = this.api.getEndpoint(path);
|
|
535
599
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
536
|
-
console.log(`[DooleService] getAPIaboutUs(${path}) res: `, res);
|
|
600
|
+
////console.log(`[DooleService] getAPIaboutUs(${path}) res: `, res);
|
|
537
601
|
return res;
|
|
538
602
|
}));
|
|
539
603
|
}
|
|
@@ -541,7 +605,7 @@ export class DooleService {
|
|
|
541
605
|
let path = 'user/agenda';
|
|
542
606
|
const endpoint = this.api.getEndpoint(path);
|
|
543
607
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
544
|
-
|
|
608
|
+
//////console.log(`[DooleService] getAPIappointmentAgenda(${path}) res: `, res);
|
|
545
609
|
return res;
|
|
546
610
|
}));
|
|
547
611
|
}
|
|
@@ -550,7 +614,15 @@ export class DooleService {
|
|
|
550
614
|
let path = 'user/diagnosticTests';
|
|
551
615
|
const endpoint = this.api.getEndpoint(path);
|
|
552
616
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
553
|
-
|
|
617
|
+
//////console.log(`[DooleService] getAPIdiagnosticTests(${path}) res: `, res);
|
|
618
|
+
return res;
|
|
619
|
+
}));
|
|
620
|
+
}
|
|
621
|
+
getAPIdiagnosticTestsLast() {
|
|
622
|
+
let path = 'user/diagnosticTests/last-done';
|
|
623
|
+
const endpoint = this.api.getEndpoint(path);
|
|
624
|
+
return this.http.get(endpoint).pipe(map((res) => {
|
|
625
|
+
//////console.log(`[DooleService] getAPIdiagnosticTests(${path}) res: `, res);
|
|
554
626
|
return res;
|
|
555
627
|
}));
|
|
556
628
|
}
|
|
@@ -558,7 +630,7 @@ export class DooleService {
|
|
|
558
630
|
let path = 'diagnosticTestTypes/available';
|
|
559
631
|
const endpoint = this.api.getEndpoint(path);
|
|
560
632
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
561
|
-
console.log(`[DooleService] getAPIdiagnosticTestTypesAvailable(${path}) res: `, res);
|
|
633
|
+
////console.log(`[DooleService] getAPIdiagnosticTestTypesAvailable(${path}) res: `, res);
|
|
562
634
|
return res;
|
|
563
635
|
}));
|
|
564
636
|
}
|
|
@@ -566,15 +638,16 @@ export class DooleService {
|
|
|
566
638
|
let path = 'v2/user/diagnosticTest/' + id;
|
|
567
639
|
const endpoint = this.api.getEndpoint(path);
|
|
568
640
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
569
|
-
console.log(`[DooleService] getAPIdiagnosticTestID(${path}) res: `, res);
|
|
641
|
+
////console.log(`[DooleService] getAPIdiagnosticTestID(${path}) res: `, res);
|
|
570
642
|
return res;
|
|
571
643
|
}));
|
|
572
644
|
}
|
|
573
645
|
postAPIdiagnosticTest(params) {
|
|
574
646
|
let path = 'v2/user/diagnosticTests/';
|
|
575
647
|
const endpoint = this.api.getEndpoint(path);
|
|
648
|
+
////console.log("POST: ",params);
|
|
576
649
|
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
577
|
-
console.log(`[DooleService] postAPIdiagnosticTest(${path}) res: `, res);
|
|
650
|
+
////console.log(`[DooleService] postAPIdiagnosticTest(${path}) res: `, res);
|
|
578
651
|
return res;
|
|
579
652
|
}));
|
|
580
653
|
}
|
|
@@ -582,7 +655,7 @@ export class DooleService {
|
|
|
582
655
|
let path = `user/diagnosticTest/${id}`;
|
|
583
656
|
const endpoint = this.api.getEndpoint(path);
|
|
584
657
|
return this.http.put(endpoint, params).pipe(map((res) => {
|
|
585
|
-
console.log(`[DooleService] putAPIdiagnosticTest(${path}) res: `, res);
|
|
658
|
+
////console.log(`[DooleService] putAPIdiagnosticTest(${path}) res: `, res);
|
|
586
659
|
return res;
|
|
587
660
|
}));
|
|
588
661
|
}
|
|
@@ -590,7 +663,7 @@ export class DooleService {
|
|
|
590
663
|
let path = `user/diagnosticTest/${id}`;
|
|
591
664
|
const endpoint = this.api.getEndpoint(path);
|
|
592
665
|
return this.http.delete(endpoint).pipe(map((res) => {
|
|
593
|
-
console.log(`[DooleService] deleteAPIdiagnosticTest(${path}) res: ${res}`, JSON.stringify(res));
|
|
666
|
+
////console.log(`[DooleService] deleteAPIdiagnosticTest(${path}) res: ${res}`, JSON.stringify(res));
|
|
594
667
|
return res;
|
|
595
668
|
}));
|
|
596
669
|
}
|
|
@@ -609,16 +682,60 @@ export class DooleService {
|
|
|
609
682
|
}
|
|
610
683
|
}
|
|
611
684
|
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
612
|
-
console.log(`[DooleService] getAPIfilteredDiagnosticTest(${path}) res: `, res);
|
|
685
|
+
////console.log(`[DooleService] getAPIfilteredDiagnosticTest(${path}) res: `, res);
|
|
686
|
+
return res;
|
|
687
|
+
}));
|
|
688
|
+
}
|
|
689
|
+
getAPIformPending(params) {
|
|
690
|
+
let path = 'forms/pending/user';
|
|
691
|
+
const endpoint = this.api.getEndpoint(path);
|
|
692
|
+
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
693
|
+
//////console.log(`[DooleService] getAPIformPending(${path}) res: `, res);
|
|
613
694
|
return res;
|
|
614
695
|
}));
|
|
615
696
|
}
|
|
616
697
|
//forms-Tracking
|
|
698
|
+
getAPISharedcareFormList(patient) {
|
|
699
|
+
let path = `/rehabilify/sharedcareplan/monitoring/${patient}`;
|
|
700
|
+
const endpoint = this.api.getEndpoint(path);
|
|
701
|
+
return this.http.get(endpoint).pipe(map((res) => {
|
|
702
|
+
//////console.log(`[DooleService] getAPIreminders(${path}) res: `, res);
|
|
703
|
+
return res;
|
|
704
|
+
}));
|
|
705
|
+
}
|
|
617
706
|
getAPIformLists() {
|
|
618
707
|
let path = 'forms/user';
|
|
619
708
|
const endpoint = this.api.getEndpoint(path);
|
|
620
709
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
621
|
-
console.log(`[DooleService] getAPIformLists(${path}) res: `, res);
|
|
710
|
+
////console.log(`[DooleService] getAPIformLists(${path}) res: `, res);
|
|
711
|
+
return res;
|
|
712
|
+
}));
|
|
713
|
+
}
|
|
714
|
+
getAPIFormJSON(form, params) {
|
|
715
|
+
let path = `form/${form}/formFields`;
|
|
716
|
+
let httpParams = new HttpParams();
|
|
717
|
+
httpParams = (params?.formAnswer) ? httpParams.append('formAnswer', params?.formAnswer) : httpParams;
|
|
718
|
+
httpParams = (params?.game_play_id) ? httpParams.append('game_play_id', params?.game_play_id) : httpParams;
|
|
719
|
+
httpParams = (params?.started_app) ? httpParams.append('started_app', params?.started_app) : httpParams;
|
|
720
|
+
const endpoint = this.api.getEndpoint(path);
|
|
721
|
+
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
722
|
+
//////console.log(`[DooleService] getAPIreminders(${path}) res: `, res);
|
|
723
|
+
return res;
|
|
724
|
+
}));
|
|
725
|
+
}
|
|
726
|
+
postAPIFormJSON(form, params) {
|
|
727
|
+
let path = `formfield/conditional/${form}/field/${params.formField}`;
|
|
728
|
+
const endpoint = this.api.getEndpoint(path);
|
|
729
|
+
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
730
|
+
//////console.log(`[DooleService] postAPIContentStatus(${path}) res: `, res);
|
|
731
|
+
return res;
|
|
732
|
+
}));
|
|
733
|
+
}
|
|
734
|
+
postAPIFormFill(params) {
|
|
735
|
+
let path = `form/fill/`;
|
|
736
|
+
const endpoint = this.api.getEndpoint(path);
|
|
737
|
+
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
738
|
+
//////console.log(`[DooleService] postAPIContentStatus(${path}) res: `, res);
|
|
622
739
|
return res;
|
|
623
740
|
}));
|
|
624
741
|
}
|
|
@@ -631,7 +748,7 @@ export class DooleService {
|
|
|
631
748
|
httpParams = (filter?.filter) ? httpParams.append('filter', filter?.filter) : httpParams;
|
|
632
749
|
const endpoint = this.api.getEndpoint(path);
|
|
633
750
|
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
634
|
-
console.log(`[DooleService] getAPIelementsList(${path}) res: `, res);
|
|
751
|
+
////console.log(`[DooleService] getAPIelementsList(${path}) res: `, res);
|
|
635
752
|
return res;
|
|
636
753
|
}));
|
|
637
754
|
}
|
|
@@ -643,7 +760,20 @@ export class DooleService {
|
|
|
643
760
|
httpParams = httpParams.append('filter', '1');
|
|
644
761
|
const endpoint = this.api.getEndpoint(path);
|
|
645
762
|
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
646
|
-
|
|
763
|
+
//////console.log(`[DooleService] getAPIelementsListByDate(${path}) res: `, res);
|
|
764
|
+
return res;
|
|
765
|
+
}));
|
|
766
|
+
}
|
|
767
|
+
getAPIelementsByGroup(filter) {
|
|
768
|
+
let path = 'center/elementGroup/elements';
|
|
769
|
+
let httpParams = new HttpParams();
|
|
770
|
+
if (filter == '1' || filter == '0')
|
|
771
|
+
httpParams = httpParams.append('filter', filter);
|
|
772
|
+
else
|
|
773
|
+
httpParams = httpParams.append('filter', '1');
|
|
774
|
+
const endpoint = this.api.getEndpoint(path);
|
|
775
|
+
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
776
|
+
//////console.log(`[DooleService] getAPIelementsListByDate(${path}) res: `, res);
|
|
647
777
|
return res;
|
|
648
778
|
}));
|
|
649
779
|
}
|
|
@@ -651,7 +781,7 @@ export class DooleService {
|
|
|
651
781
|
let path = 'user/element/' + id + '/value/add';
|
|
652
782
|
const endpoint = this.api.getEndpoint(path);
|
|
653
783
|
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
654
|
-
|
|
784
|
+
//////console.log(`[DooleService] postAPIaddElement(${path}) res: `, res);
|
|
655
785
|
return res;
|
|
656
786
|
}));
|
|
657
787
|
}
|
|
@@ -661,7 +791,7 @@ export class DooleService {
|
|
|
661
791
|
httpParams = (query) ? httpParams.append('interval', query) : httpParams;
|
|
662
792
|
const endpoint = this.api.getEndpoint(path);
|
|
663
793
|
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
664
|
-
|
|
794
|
+
//////console.log(`[DooleService] getAPIgraphicsElement(${path}) res: `, res);
|
|
665
795
|
return res;
|
|
666
796
|
}));
|
|
667
797
|
}
|
|
@@ -674,7 +804,7 @@ export class DooleService {
|
|
|
674
804
|
httpParams = (params?.version) ? httpParams.append('version', params?.version) : httpParams;
|
|
675
805
|
const endpoint = this.api.getEndpoint(path);
|
|
676
806
|
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
677
|
-
|
|
807
|
+
//////console.log(`[DooleService] getAPIgraphicsElement(${path}) res: `, res);
|
|
678
808
|
return res;
|
|
679
809
|
}));
|
|
680
810
|
}
|
|
@@ -682,7 +812,7 @@ export class DooleService {
|
|
|
682
812
|
let path = `element/available/${id}`;
|
|
683
813
|
const endpoint = this.api.getEndpoint(path);
|
|
684
814
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
685
|
-
|
|
815
|
+
//////console.log(`[DooleService] getAPIelementAvailableID(${path}) res: `, res);
|
|
686
816
|
return res;
|
|
687
817
|
}));
|
|
688
818
|
}
|
|
@@ -690,7 +820,7 @@ export class DooleService {
|
|
|
690
820
|
let path = 'user/element_category';
|
|
691
821
|
const endpoint = this.api.getEndpoint(path);
|
|
692
822
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
693
|
-
|
|
823
|
+
//////console.log(`[DooleService] getAPIcategory(${path}) res: `, res);
|
|
694
824
|
return res;
|
|
695
825
|
}));
|
|
696
826
|
}
|
|
@@ -700,17 +830,25 @@ export class DooleService {
|
|
|
700
830
|
httpParams = (filter) ? httpParams.append('filter', filter) : httpParams;
|
|
701
831
|
const endpoint = this.api.getEndpoint(path);
|
|
702
832
|
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
703
|
-
|
|
833
|
+
//////console.log(`[DooleService] getAPIelementGroupID(${path}) res: `, res);
|
|
704
834
|
return res;
|
|
705
835
|
}));
|
|
706
836
|
}
|
|
707
837
|
searchAPIelementGroup(params) {
|
|
838
|
+
let path = 'center/elementGroups';
|
|
839
|
+
const endpoint = this.api.getEndpoint(path);
|
|
840
|
+
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
841
|
+
//////console.log(`[DooleService] searchAPIelementGroup(${path}) res: `, res);
|
|
842
|
+
return res;
|
|
843
|
+
}));
|
|
844
|
+
}
|
|
845
|
+
getAPIelementGroup(params) {
|
|
708
846
|
let path = 'center/elementGroups';
|
|
709
847
|
let httpParams = new HttpParams();
|
|
710
848
|
httpParams = (params?.filter) ? httpParams.append('filter', params?.filter) : httpParams;
|
|
711
849
|
const endpoint = this.api.getEndpoint(path);
|
|
712
850
|
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
713
|
-
|
|
851
|
+
//////console.log(`[DooleService] getAPIelementGroup(${path}) res: `, res);
|
|
714
852
|
return res;
|
|
715
853
|
}));
|
|
716
854
|
}
|
|
@@ -719,10 +857,36 @@ export class DooleService {
|
|
|
719
857
|
let path = 'user/diets';
|
|
720
858
|
const endpoint = this.api.getEndpoint(path);
|
|
721
859
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
722
|
-
|
|
860
|
+
//////console.log(`[DooleService] getAPIlistDietsByDate(${path}) res: `, res);
|
|
723
861
|
return res;
|
|
724
862
|
}));
|
|
725
863
|
}
|
|
864
|
+
getAPIListRecipe(params) {
|
|
865
|
+
let path = `user/diets/receipts`;
|
|
866
|
+
const endpoint = this.api.getEndpoint(path);
|
|
867
|
+
let httpParams = new HttpParams()
|
|
868
|
+
.set('tags', params.tags)
|
|
869
|
+
.set('interactions', params.interactions)
|
|
870
|
+
.set('readingTime', params.readingTime)
|
|
871
|
+
.set('from_date', params.from_date)
|
|
872
|
+
.set('to_date', params.to_date);
|
|
873
|
+
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
874
|
+
//////console.log(`[DooleService] getAPIdetailRecipe(${path}) res: `, res);
|
|
875
|
+
return res;
|
|
876
|
+
}));
|
|
877
|
+
}
|
|
878
|
+
/*getAPIdietsByDate(date: any): Observable<any> {
|
|
879
|
+
let path = `user/dietaryIntakes`
|
|
880
|
+
let httpParams = new HttpParams();
|
|
881
|
+
httpParams = (date) ? httpParams.append('date', date) : httpParams
|
|
882
|
+
const endpoint = this.api.getEndpoint(path);
|
|
883
|
+
return this.http.get(endpoint, httpParams).pipe(
|
|
884
|
+
map((res: any) => {
|
|
885
|
+
//////console.log(`[DooleService] getAPIdietsByDate(${path}) res: `, res);
|
|
886
|
+
return res;
|
|
887
|
+
})
|
|
888
|
+
);
|
|
889
|
+
}*/
|
|
726
890
|
getAPIdietsByDate(params) {
|
|
727
891
|
let path = `user/dietaryIntakes`;
|
|
728
892
|
let httpParams = new HttpParams();
|
|
@@ -730,7 +894,18 @@ export class DooleService {
|
|
|
730
894
|
httpParams = (params?.grouped_by_times) ? httpParams.append('grouped_by_times', params.grouped_by_times) : httpParams;
|
|
731
895
|
const endpoint = this.api.getEndpoint(path);
|
|
732
896
|
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
733
|
-
|
|
897
|
+
//////console.log(`[DooleService] getAPIdietsByDate(${path}) res: `, res);
|
|
898
|
+
return res;
|
|
899
|
+
}));
|
|
900
|
+
}
|
|
901
|
+
getAPIFormsByDate(params) {
|
|
902
|
+
let path = `rehabilify/sharedcareplan/forms`;
|
|
903
|
+
let httpParams = new HttpParams();
|
|
904
|
+
httpParams = (params?.date) ? httpParams.append('date', params.date) : httpParams;
|
|
905
|
+
httpParams = (params?.grouped_by_times) ? httpParams.append('grouped_by_times', params.grouped_by_times) : httpParams;
|
|
906
|
+
const endpoint = this.api.getEndpoint(path);
|
|
907
|
+
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
908
|
+
//////console.log(`[DooleService] getAPIdietsByDate(${path}) res: `, res);
|
|
734
909
|
return res;
|
|
735
910
|
}));
|
|
736
911
|
}
|
|
@@ -738,7 +913,7 @@ export class DooleService {
|
|
|
738
913
|
let path = `diet/${id}`;
|
|
739
914
|
const endpoint = this.api.getEndpoint(path);
|
|
740
915
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
741
|
-
|
|
916
|
+
//////console.log(`[DooleService] getAPIdetailDiets(${path}) res: `, res);
|
|
742
917
|
return res;
|
|
743
918
|
}));
|
|
744
919
|
}
|
|
@@ -746,7 +921,31 @@ export class DooleService {
|
|
|
746
921
|
let path = `diet/receipt/${id}`;
|
|
747
922
|
const endpoint = this.api.getEndpoint(path);
|
|
748
923
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
749
|
-
|
|
924
|
+
//////console.log(`[DooleService] getAPIdetailRecipe(${path}) res: `, res);
|
|
925
|
+
return res;
|
|
926
|
+
}));
|
|
927
|
+
}
|
|
928
|
+
getAPIlistTestimonials(params) {
|
|
929
|
+
let path = `user/testimonials`;
|
|
930
|
+
const endpoint = this.api.getEndpoint(path);
|
|
931
|
+
let httpParams = new HttpParams()
|
|
932
|
+
.set('tags', params.tags)
|
|
933
|
+
.set('interactions', params.interactions)
|
|
934
|
+
.set('readingTime', params.readingTime);
|
|
935
|
+
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
936
|
+
//////console.log(`[DooleService] getAPIdetailRecipe(${path}) res: `, res);
|
|
937
|
+
return res;
|
|
938
|
+
}));
|
|
939
|
+
}
|
|
940
|
+
getAPIdetailTestimonial(id, params) {
|
|
941
|
+
let path = `user/testimony/${id}`;
|
|
942
|
+
const endpoint = this.api.getEndpoint(path);
|
|
943
|
+
let httpParams = new HttpParams()
|
|
944
|
+
.set('tags', params.tags)
|
|
945
|
+
.set('interactions', params.interactions)
|
|
946
|
+
.set('readingTime', params.readingTime);
|
|
947
|
+
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
948
|
+
////console.log(`[DooleService] getAPIdetailRecipe(${path}) res: `, res);
|
|
750
949
|
return res;
|
|
751
950
|
}));
|
|
752
951
|
}
|
|
@@ -759,16 +958,20 @@ export class DooleService {
|
|
|
759
958
|
.set('interactions', params.interactions)
|
|
760
959
|
.set('readingTime', params.readingTime);
|
|
761
960
|
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
762
|
-
|
|
961
|
+
//////console.log(`[DooleService] getAPIlistAdvices(${path}) res: `, res);
|
|
763
962
|
return res;
|
|
764
963
|
}));
|
|
765
964
|
}
|
|
766
965
|
/** get news **/
|
|
767
|
-
getAPIlistNews() {
|
|
966
|
+
getAPIlistNews(params) {
|
|
768
967
|
let path = 'user/news';
|
|
769
968
|
const endpoint = this.api.getEndpoint(path);
|
|
770
|
-
|
|
771
|
-
|
|
969
|
+
let httpParams = new HttpParams()
|
|
970
|
+
.set('tags', params.tags)
|
|
971
|
+
.set('interactions', params.interactions)
|
|
972
|
+
.set('readingTime', params.readingTime);
|
|
973
|
+
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
974
|
+
//////console.log(`[DooleService] getAPIlistNews(${path}) res: `, res);
|
|
772
975
|
return res;
|
|
773
976
|
}));
|
|
774
977
|
}
|
|
@@ -776,25 +979,28 @@ export class DooleService {
|
|
|
776
979
|
let path = `user/new/${id}`;
|
|
777
980
|
const endpoint = this.api.getEndpoint(path);
|
|
778
981
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
779
|
-
|
|
982
|
+
//////console.log(`[DooleService] getAPIdetailNew(${path}) res: `, res);
|
|
780
983
|
return res;
|
|
781
984
|
}));
|
|
782
985
|
}
|
|
783
|
-
|
|
784
|
-
let path =
|
|
785
|
-
let httpParams = new HttpParams();
|
|
786
|
-
httpParams = (query) ? httpParams.append('search', query) : httpParams;
|
|
986
|
+
getAPIdetailAdvices(id) {
|
|
987
|
+
let path = `advice/${id}`;
|
|
787
988
|
const endpoint = this.api.getEndpoint(path);
|
|
788
|
-
return this.http.get(endpoint
|
|
789
|
-
|
|
989
|
+
return this.http.get(endpoint).pipe(map((res) => {
|
|
990
|
+
//////console.log(`[DooleService] getAPIdetailAdvices(${path}) res: `, res);
|
|
790
991
|
return res;
|
|
791
992
|
}));
|
|
792
993
|
}
|
|
793
|
-
|
|
794
|
-
let path = '
|
|
795
|
-
|
|
994
|
+
getAPISearchNews(query, params) {
|
|
995
|
+
let path = 'news';
|
|
996
|
+
let httpParams = new HttpParams()
|
|
997
|
+
.set('tags', params.tags)
|
|
998
|
+
.set('interactions', params.interactions)
|
|
999
|
+
.set('readingTime', params.readingTime);
|
|
1000
|
+
httpParams = (query) ? httpParams.append('search', query) : httpParams;
|
|
796
1001
|
const endpoint = this.api.getEndpoint(path);
|
|
797
|
-
return this.http.get(endpoint).pipe(map((res) => {
|
|
1002
|
+
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
1003
|
+
//////console.log(`[DooleService] getAPISearchNews(${path}) res: `, res);
|
|
798
1004
|
return res;
|
|
799
1005
|
}));
|
|
800
1006
|
}
|
|
@@ -804,15 +1010,7 @@ export class DooleService {
|
|
|
804
1010
|
httpParams = (query) ? httpParams.append('search', query) : httpParams;
|
|
805
1011
|
const endpoint = this.api.getEndpoint(path);
|
|
806
1012
|
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
807
|
-
|
|
808
|
-
return res;
|
|
809
|
-
}));
|
|
810
|
-
}
|
|
811
|
-
getAPIdetailAdvices(id) {
|
|
812
|
-
let path = `advice/${id}`;
|
|
813
|
-
const endpoint = this.api.getEndpoint(path);
|
|
814
|
-
return this.http.get(endpoint).pipe(map((res) => {
|
|
815
|
-
//console.log(`[DooleService] getAPIdetailAdvices(${path}) res: `, res);
|
|
1013
|
+
////console.log(`[DooleService] getAPISearchAdvices(${path}) res: `, res);
|
|
816
1014
|
return res;
|
|
817
1015
|
}));
|
|
818
1016
|
}
|
|
@@ -822,7 +1020,17 @@ export class DooleService {
|
|
|
822
1020
|
httpParams = (query) ? httpParams.append('search', query) : httpParams;
|
|
823
1021
|
const endpoint = this.api.getEndpoint(path);
|
|
824
1022
|
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
825
|
-
|
|
1023
|
+
//////console.log(`[DooleService] getAPIdrugsList(${path}) res: `, res);
|
|
1024
|
+
return res;
|
|
1025
|
+
}));
|
|
1026
|
+
}
|
|
1027
|
+
getAPIdrugsListInteraction(query) {
|
|
1028
|
+
const endpoint = `https://n6ibaazevnsixfcs4prl7z7wra0oonma.lambda-url.eu-central-1.on.aws/`;
|
|
1029
|
+
// const endpoint = `https://n6ibaazevnsixfcs4prl7z7wra0oonma.lambda-url.eu-central-1.on.aws/?drug=DB01363`;
|
|
1030
|
+
//let httpParams = new HttpParams().set('drug', query);
|
|
1031
|
+
let httpParams = new HttpParams()
|
|
1032
|
+
.set('drug', query);
|
|
1033
|
+
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
826
1034
|
return res;
|
|
827
1035
|
}));
|
|
828
1036
|
}
|
|
@@ -830,7 +1038,7 @@ export class DooleService {
|
|
|
830
1038
|
let path = 'user/drugIntake/date';
|
|
831
1039
|
const endpoint = this.api.getEndpoint(path);
|
|
832
1040
|
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
833
|
-
|
|
1041
|
+
//////console.log(`[DooleService] getAPIdrugIntakeByDate(${path}) res: `, res);
|
|
834
1042
|
return res;
|
|
835
1043
|
}));
|
|
836
1044
|
}
|
|
@@ -841,7 +1049,7 @@ export class DooleService {
|
|
|
841
1049
|
httpParams = (query) ? httpParams.append('search', query) : httpParams;
|
|
842
1050
|
const endpoint = this.api.getEndpoint(path);
|
|
843
1051
|
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
844
|
-
console.log(`[DooleService] getAPImedicationList(${path}) res: `, res);
|
|
1052
|
+
////console.log(`[DooleService] getAPImedicationList(${path}) res: `, res);
|
|
845
1053
|
return res;
|
|
846
1054
|
}));
|
|
847
1055
|
}
|
|
@@ -851,7 +1059,7 @@ export class DooleService {
|
|
|
851
1059
|
// httpParams = (query) ? httpParams.append('search', query) : httpParams
|
|
852
1060
|
const endpoint = this.api.getEndpoint(path);
|
|
853
1061
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
854
|
-
console.log(`[DooleService] getAPIdirectionList(${path}) res: `, res);
|
|
1062
|
+
////console.log(`[DooleService] getAPIdirectionList(${path}) res: `, res);
|
|
855
1063
|
return res;
|
|
856
1064
|
}));
|
|
857
1065
|
}
|
|
@@ -861,7 +1069,7 @@ export class DooleService {
|
|
|
861
1069
|
// httpParams = (query) ? httpParams.append('search', query) : httpParams
|
|
862
1070
|
const endpoint = this.api.getEndpoint(path);
|
|
863
1071
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
864
|
-
console.log(`[DooleService] getAPIdirectionList(${path}) res: `, res);
|
|
1072
|
+
////console.log(`[DooleService] getAPIdirectionList(${path}) res: `, res);
|
|
865
1073
|
return res;
|
|
866
1074
|
}));
|
|
867
1075
|
}
|
|
@@ -869,7 +1077,7 @@ export class DooleService {
|
|
|
869
1077
|
let path = 'user/address';
|
|
870
1078
|
const endpoint = this.api.getEndpoint(path);
|
|
871
1079
|
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
872
|
-
console.log(`[DooleService] postAPIsendDirection(${path}) res: `, res);
|
|
1080
|
+
////console.log(`[DooleService] postAPIsendDirection(${path}) res: `, res);
|
|
873
1081
|
return res;
|
|
874
1082
|
}));
|
|
875
1083
|
}
|
|
@@ -877,7 +1085,7 @@ export class DooleService {
|
|
|
877
1085
|
let path = `user/address/${id}`;
|
|
878
1086
|
const endpoint = this.api.getEndpoint(path);
|
|
879
1087
|
return this.http.put(endpoint, params).pipe(map((res) => {
|
|
880
|
-
|
|
1088
|
+
//////console.log(`[DooleService] putAPIdrugIntake(${path}) res: `, res);
|
|
881
1089
|
return res;
|
|
882
1090
|
}));
|
|
883
1091
|
}
|
|
@@ -885,7 +1093,7 @@ export class DooleService {
|
|
|
885
1093
|
let path = `user/address/${id}`;
|
|
886
1094
|
const endpoint = this.api.getEndpoint(path);
|
|
887
1095
|
return this.http.delete(endpoint).pipe(map((res) => {
|
|
888
|
-
|
|
1096
|
+
//////console.log(`[DooleService] deleteAPImedicationPlan(${path}) res: ${res}`, JSON.stringify(res));
|
|
889
1097
|
return res;
|
|
890
1098
|
}));
|
|
891
1099
|
}
|
|
@@ -893,7 +1101,7 @@ export class DooleService {
|
|
|
893
1101
|
let path = 'sendmedication';
|
|
894
1102
|
const endpoint = this.api.getEndpoint(path);
|
|
895
1103
|
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
896
|
-
console.log(`[DooleService] postAPIsendDirection(${path}) res: `, res);
|
|
1104
|
+
////console.log(`[DooleService] postAPIsendDirection(${path}) res: `, res);
|
|
897
1105
|
return res;
|
|
898
1106
|
}));
|
|
899
1107
|
}
|
|
@@ -901,7 +1109,7 @@ export class DooleService {
|
|
|
901
1109
|
let path = 'user/drugIntake';
|
|
902
1110
|
const endpoint = this.api.getEndpoint(path);
|
|
903
1111
|
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
904
|
-
|
|
1112
|
+
//////console.log(`[DooleService] postAPIdrugIntake(${path}) res: `, res);
|
|
905
1113
|
return res;
|
|
906
1114
|
}));
|
|
907
1115
|
}
|
|
@@ -909,7 +1117,7 @@ export class DooleService {
|
|
|
909
1117
|
let path = `user/drugIntake/${id}/set/${state}`;
|
|
910
1118
|
const endpoint = this.api.getEndpoint(path);
|
|
911
1119
|
return this.http.post(endpoint).pipe(map((res) => {
|
|
912
|
-
|
|
1120
|
+
//////console.log(`[DooleService] postAPIdrugIntake(${path}) res: `, res);
|
|
913
1121
|
return res;
|
|
914
1122
|
}));
|
|
915
1123
|
}
|
|
@@ -917,7 +1125,7 @@ export class DooleService {
|
|
|
917
1125
|
let path = `user/medicationPlan`;
|
|
918
1126
|
const endpoint = this.api.getEndpoint(path);
|
|
919
1127
|
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
920
|
-
|
|
1128
|
+
//////console.log(`[DooleService] postAPIdrugIntake(${path}) res: `, res);
|
|
921
1129
|
return res;
|
|
922
1130
|
}));
|
|
923
1131
|
}
|
|
@@ -925,7 +1133,7 @@ export class DooleService {
|
|
|
925
1133
|
let path = `user/medicationPlan/${id}`;
|
|
926
1134
|
const endpoint = this.api.getEndpoint(path);
|
|
927
1135
|
return this.http.put(endpoint, params).pipe(map((res) => {
|
|
928
|
-
|
|
1136
|
+
//////console.log(`[DooleService] putAPIdrugIntake(${path}) res: `, res);
|
|
929
1137
|
return res;
|
|
930
1138
|
}));
|
|
931
1139
|
}
|
|
@@ -933,7 +1141,7 @@ export class DooleService {
|
|
|
933
1141
|
let path = `user/medicationPlan/${id}`;
|
|
934
1142
|
const endpoint = this.api.getEndpoint(path);
|
|
935
1143
|
return this.http.delete(endpoint).pipe(map((res) => {
|
|
936
|
-
|
|
1144
|
+
//////console.log(`[DooleService] deleteAPImedicationPlan(${path}) res: ${res}`, JSON.stringify(res));
|
|
937
1145
|
return res;
|
|
938
1146
|
}));
|
|
939
1147
|
}
|
|
@@ -941,7 +1149,113 @@ export class DooleService {
|
|
|
941
1149
|
let path = `user/medicationPlan/${id}`;
|
|
942
1150
|
const endpoint = this.api.getEndpoint(path);
|
|
943
1151
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
944
|
-
|
|
1152
|
+
//////console.log(`[DooleService] getAPImedicationPlan(${path}) res: `, res);
|
|
1153
|
+
return res;
|
|
1154
|
+
}));
|
|
1155
|
+
}
|
|
1156
|
+
getAPImedicationPlans(params) {
|
|
1157
|
+
let path = `user/medicationPlans`;
|
|
1158
|
+
let httpParams = new HttpParams();
|
|
1159
|
+
httpParams = (params?.onDate === 0 || params?.onDate === 1) ? httpParams.append('onDate', params?.onDate) : httpParams;
|
|
1160
|
+
httpParams = (params?.from_date) ? httpParams.append('from_date', params?.from_date) : httpParams;
|
|
1161
|
+
httpParams = (params?.to_date) ? httpParams.append('to_date', params?.to_date) : httpParams;
|
|
1162
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1163
|
+
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
1164
|
+
////console.log(`[DooleService] getAPImedicationPlan(${path}) res: `, res);
|
|
1165
|
+
return res;
|
|
1166
|
+
}));
|
|
1167
|
+
}
|
|
1168
|
+
//todos los medicamentos asignados a esa persona
|
|
1169
|
+
getAPImedicationAlls() {
|
|
1170
|
+
let path = `user/medicationPlans`;
|
|
1171
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1172
|
+
return this.http.get(endpoint).pipe(map((res) => {
|
|
1173
|
+
////console.log(`[DooleService] getAPImedicationPlan(${path}) res: `, res);
|
|
1174
|
+
return res;
|
|
1175
|
+
}));
|
|
1176
|
+
}
|
|
1177
|
+
// activatePendingMedicationPlans
|
|
1178
|
+
getAPIPendingMedicationPlans(params) {
|
|
1179
|
+
let path = `user/pending/medicationPlans`;
|
|
1180
|
+
let httpParams = new HttpParams();
|
|
1181
|
+
httpParams = (params?.onlyCount === 1 || params?.onlyCount === 0) ? httpParams.append('onlyCount', params?.onlyCount) : httpParams;
|
|
1182
|
+
httpParams = (params?.onlyCount === undefined) ? httpParams.append('onlyCount', '0') : httpParams;
|
|
1183
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1184
|
+
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
1185
|
+
////console.log(`[DooleService] getAPIPendingMedicationPlans(${path}) res: `, res);
|
|
1186
|
+
return res;
|
|
1187
|
+
}));
|
|
1188
|
+
}
|
|
1189
|
+
getAPIFrequenciesMedicationPlansHPC(params) {
|
|
1190
|
+
let path = `hpc/medicationPlan/frequencies`;
|
|
1191
|
+
let httpParams = new HttpParams();
|
|
1192
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1193
|
+
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
1194
|
+
////console.log(`[DooleService] getAPIFrequenciesMedicationPlansHPC(${path}) res: `, res);
|
|
1195
|
+
return res;
|
|
1196
|
+
}));
|
|
1197
|
+
}
|
|
1198
|
+
getAPIDrugUnits(id, search) {
|
|
1199
|
+
let path = `drug/${id}/units`;
|
|
1200
|
+
let httpParams = new HttpParams();
|
|
1201
|
+
httpParams = search ? httpParams.append('search', search) : httpParams;
|
|
1202
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1203
|
+
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
1204
|
+
////console.log(`[DooleService] getAPIDrugUnits(${path}) res: `, res);
|
|
1205
|
+
return res;
|
|
1206
|
+
}));
|
|
1207
|
+
}
|
|
1208
|
+
getAPIDiagnostic(params) {
|
|
1209
|
+
let path = 'user/diagnostics'; //'v2/diagnostic/user';
|
|
1210
|
+
let httpParams = new HttpParams();
|
|
1211
|
+
httpParams = (params?.onDate === 0 || params?.onDate === 1) ? httpParams.append('onDate', params?.onDate) : httpParams;
|
|
1212
|
+
httpParams = (params?.from_date) ? httpParams.append('from_date', params?.from_date) : httpParams;
|
|
1213
|
+
httpParams = (params?.to_date) ? httpParams.append('to_date', params?.to_date) : httpParams;
|
|
1214
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1215
|
+
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
1216
|
+
//////console.log(`[DooleService] getAPIgames(${path}) res: `, res);
|
|
1217
|
+
return res;
|
|
1218
|
+
}));
|
|
1219
|
+
}
|
|
1220
|
+
getAPICenterAllergies(search) {
|
|
1221
|
+
let path = 'center/allergies';
|
|
1222
|
+
let httpParams = new HttpParams();
|
|
1223
|
+
httpParams = (search) ? httpParams.append('search', search) : httpParams;
|
|
1224
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1225
|
+
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
1226
|
+
//////console.log(`[DooleService] getAPIgames(${path}) res: `, res);
|
|
1227
|
+
return res;
|
|
1228
|
+
}));
|
|
1229
|
+
}
|
|
1230
|
+
getAPIAllergies() {
|
|
1231
|
+
let path = 'user/allergies';
|
|
1232
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1233
|
+
return this.http.get(endpoint).pipe(map((res) => {
|
|
1234
|
+
//////console.log(`[DooleService] getAPIgames(${path}) res: `, res);
|
|
1235
|
+
return res;
|
|
1236
|
+
}));
|
|
1237
|
+
}
|
|
1238
|
+
postAPIAllergies(params) {
|
|
1239
|
+
let path = `user/allergy/create`;
|
|
1240
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1241
|
+
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
1242
|
+
//////console.log(`[DooleService] postAPIdrugIntake(${path}) res: `, res);
|
|
1243
|
+
return res;
|
|
1244
|
+
}));
|
|
1245
|
+
}
|
|
1246
|
+
putAPIAllergy(id, params) {
|
|
1247
|
+
let path = `user/allergy/${id}`;
|
|
1248
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1249
|
+
return this.http.put(endpoint, params).pipe(map((res) => {
|
|
1250
|
+
//////console.log(`[DooleService] putAPIAllergy(${path}) res: `, res);
|
|
1251
|
+
return res;
|
|
1252
|
+
}));
|
|
1253
|
+
}
|
|
1254
|
+
deleteAPIAllergy(id) {
|
|
1255
|
+
let path = `user/allergy/${id}`;
|
|
1256
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1257
|
+
return this.http.delete(endpoint).pipe(map((res) => {
|
|
1258
|
+
////console.log(`[DooleService] deleteAPIAllergy(${path}) res: ${res}`, JSON.stringify(res));
|
|
945
1259
|
return res;
|
|
946
1260
|
}));
|
|
947
1261
|
}
|
|
@@ -949,7 +1263,7 @@ export class DooleService {
|
|
|
949
1263
|
let path = 'user/games';
|
|
950
1264
|
const endpoint = this.api.getEndpoint(path);
|
|
951
1265
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
952
|
-
|
|
1266
|
+
//////console.log(`[DooleService] getAPIgames(${path}) res: `, res);
|
|
953
1267
|
return res;
|
|
954
1268
|
}));
|
|
955
1269
|
}
|
|
@@ -961,7 +1275,7 @@ export class DooleService {
|
|
|
961
1275
|
httpParams = (to_date) ? httpParams.append('to_date', to_date) : httpParams;
|
|
962
1276
|
const endpoint = this.api.getEndpoint(path);
|
|
963
1277
|
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
964
|
-
|
|
1278
|
+
//////console.log(`[DooleService] getAPIgames(${path}) res: `, res);
|
|
965
1279
|
return res;
|
|
966
1280
|
}));
|
|
967
1281
|
}
|
|
@@ -969,7 +1283,7 @@ export class DooleService {
|
|
|
969
1283
|
let path = `user/game/${id}`;
|
|
970
1284
|
const endpoint = this.api.getEndpoint(path);
|
|
971
1285
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
972
|
-
|
|
1286
|
+
//////console.log(`[DooleService] getAPIgameId(${path}) res: `, res);
|
|
973
1287
|
return res;
|
|
974
1288
|
}));
|
|
975
1289
|
}
|
|
@@ -977,10 +1291,12 @@ export class DooleService {
|
|
|
977
1291
|
let path = 'user/agenda';
|
|
978
1292
|
const endpoint = this.api.getEndpoint(path);
|
|
979
1293
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
980
|
-
|
|
1294
|
+
//////console.log(`[DooleService] getAPIagenda(${path}) res: `, res);
|
|
981
1295
|
return res;
|
|
982
1296
|
}));
|
|
983
1297
|
}
|
|
1298
|
+
//reminders
|
|
1299
|
+
//user/reminder
|
|
984
1300
|
getAPIallAgenda(params) {
|
|
985
1301
|
let path = 'user/agenda/v2';
|
|
986
1302
|
let httpParams = new HttpParams();
|
|
@@ -991,7 +1307,7 @@ export class DooleService {
|
|
|
991
1307
|
httpParams = (params?.order != undefined) ? httpParams.append('order', params?.order) : httpParams;
|
|
992
1308
|
const endpoint = this.api.getEndpoint(path);
|
|
993
1309
|
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
994
|
-
console.log(`[DooleService] getAPIappointmentAgendaV2(${path}) res: `, res);
|
|
1310
|
+
////console.log(`[DooleService] getAPIappointmentAgendaV2(${path}) res: `, res);
|
|
995
1311
|
return res;
|
|
996
1312
|
}));
|
|
997
1313
|
}
|
|
@@ -999,7 +1315,7 @@ export class DooleService {
|
|
|
999
1315
|
let path = `user/agenda/${id}`;
|
|
1000
1316
|
const endpoint = this.api.getEndpoint(path);
|
|
1001
1317
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
1002
|
-
|
|
1318
|
+
//////console.log(`[DooleService] getAPIagendaID(${path}) res: `, res);
|
|
1003
1319
|
return res;
|
|
1004
1320
|
}));
|
|
1005
1321
|
}
|
|
@@ -1007,7 +1323,7 @@ export class DooleService {
|
|
|
1007
1323
|
let path = 'user/agenda/';
|
|
1008
1324
|
const endpoint = this.api.getEndpoint(path);
|
|
1009
1325
|
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
1010
|
-
|
|
1326
|
+
//////console.log(`[DooleService] postAPIaddAgenda(${path}) res: `, res);
|
|
1011
1327
|
return res;
|
|
1012
1328
|
}));
|
|
1013
1329
|
}
|
|
@@ -1016,7 +1332,7 @@ export class DooleService {
|
|
|
1016
1332
|
let path = 'user/agenda/delete';
|
|
1017
1333
|
const endpoint = this.api.getEndpoint(path);
|
|
1018
1334
|
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
1019
|
-
|
|
1335
|
+
//////console.log(`[DooleService] deleteAPIaddAgenda(${path}) res: `, res);
|
|
1020
1336
|
return res;
|
|
1021
1337
|
}));
|
|
1022
1338
|
}
|
|
@@ -1024,7 +1340,7 @@ export class DooleService {
|
|
|
1024
1340
|
let path = `user/agenda/${id}`;
|
|
1025
1341
|
const endpoint = this.api.getEndpoint(path);
|
|
1026
1342
|
return this.http.put(endpoint, params).pipe(map((res) => {
|
|
1027
|
-
|
|
1343
|
+
//////console.log(`[DooleService] putAPIagenda(${path}) res: `, res);
|
|
1028
1344
|
return res;
|
|
1029
1345
|
}));
|
|
1030
1346
|
}
|
|
@@ -1034,7 +1350,7 @@ export class DooleService {
|
|
|
1034
1350
|
let httpParams = new HttpParams();
|
|
1035
1351
|
httpParams = httpParams.append('withDepartments', '1');
|
|
1036
1352
|
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
1037
|
-
console.log(`[DooleService] getAPIallowedContacts(${path}) res: `, res);
|
|
1353
|
+
////console.log(`[DooleService] getAPIallowedContacts(${path}) res: `, res);
|
|
1038
1354
|
let allowed = res.allowed;
|
|
1039
1355
|
if (res.allowed === undefined)
|
|
1040
1356
|
allowed = [];
|
|
@@ -1045,7 +1361,7 @@ export class DooleService {
|
|
|
1045
1361
|
let path = `staff/${id}`;
|
|
1046
1362
|
const endpoint = this.api.getEndpoint(path);
|
|
1047
1363
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
1048
|
-
|
|
1364
|
+
//////console.log(`[DooleService] getAPIstaffId(${path}) res: `, res);
|
|
1049
1365
|
return res;
|
|
1050
1366
|
}));
|
|
1051
1367
|
}
|
|
@@ -1054,7 +1370,7 @@ export class DooleService {
|
|
|
1054
1370
|
let path = 'message/user';
|
|
1055
1371
|
const endpoint = this.api.getEndpoint(path);
|
|
1056
1372
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
1057
|
-
console.log(`[DooleService] getAPIUserMessages(${path}) res: `, res);
|
|
1373
|
+
////console.log(`[DooleService] getAPIUserMessages(${path}) res: `, res);
|
|
1058
1374
|
if (res.length == 0)
|
|
1059
1375
|
return res;
|
|
1060
1376
|
return res.messages;
|
|
@@ -1077,7 +1393,7 @@ export class DooleService {
|
|
|
1077
1393
|
let path = 'user/reminder';
|
|
1078
1394
|
const endpoint = this.api.getEndpoint(path);
|
|
1079
1395
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
1080
|
-
|
|
1396
|
+
//////console.log(`[DooleService] getAPIreminders(${path}) res: `, res);
|
|
1081
1397
|
return res;
|
|
1082
1398
|
}));
|
|
1083
1399
|
}
|
|
@@ -1085,7 +1401,7 @@ export class DooleService {
|
|
|
1085
1401
|
let path = `user/reminder/${id}`;
|
|
1086
1402
|
const endpoint = this.api.getEndpoint(path);
|
|
1087
1403
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
1088
|
-
|
|
1404
|
+
//////console.log(`[DooleService] getAPIreminderID(${path}) res: `, res);
|
|
1089
1405
|
return res;
|
|
1090
1406
|
}));
|
|
1091
1407
|
}
|
|
@@ -1093,7 +1409,7 @@ export class DooleService {
|
|
|
1093
1409
|
let path = 'user/reminder/';
|
|
1094
1410
|
const endpoint = this.api.getEndpoint(path);
|
|
1095
1411
|
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
1096
|
-
|
|
1412
|
+
//////console.log(`[DooleService] postAPIaddReminder(${path}) res: `, res);
|
|
1097
1413
|
return res;
|
|
1098
1414
|
}));
|
|
1099
1415
|
}
|
|
@@ -1101,7 +1417,7 @@ export class DooleService {
|
|
|
1101
1417
|
let path = `user/reminder/${id}`;
|
|
1102
1418
|
const endpoint = this.api.getEndpoint(path);
|
|
1103
1419
|
return this.http.delete(endpoint).pipe(map((res) => {
|
|
1104
|
-
|
|
1420
|
+
//////console.log(`[DooleService] deleteAPIReminder(${path}) res: ${res}`, JSON.stringify(res));
|
|
1105
1421
|
return res;
|
|
1106
1422
|
}));
|
|
1107
1423
|
}
|
|
@@ -1109,7 +1425,7 @@ export class DooleService {
|
|
|
1109
1425
|
let path = `user/reminder/${id}`;
|
|
1110
1426
|
const endpoint = this.api.getEndpoint(path);
|
|
1111
1427
|
return this.http.put(endpoint, params).pipe(map((res) => {
|
|
1112
|
-
|
|
1428
|
+
//////console.log(`[DooleService] updateAPIReminder(${path}) res: `, res);
|
|
1113
1429
|
return res;
|
|
1114
1430
|
}));
|
|
1115
1431
|
}
|
|
@@ -1117,101 +1433,119 @@ export class DooleService {
|
|
|
1117
1433
|
let path = `user`;
|
|
1118
1434
|
const endpoint = this.api.getEndpoint(path);
|
|
1119
1435
|
return this.http.put(endpoint, params).pipe(map((res) => {
|
|
1120
|
-
|
|
1436
|
+
//////console.log(`[DooleService] updateAPIReminder(${path}) res: `, res);
|
|
1121
1437
|
return res;
|
|
1122
1438
|
}));
|
|
1123
1439
|
}
|
|
1124
|
-
|
|
1125
|
-
let path =
|
|
1440
|
+
postAPIContentStatus(params) {
|
|
1441
|
+
let path = 'content/status';
|
|
1126
1442
|
const endpoint = this.api.getEndpoint(path);
|
|
1127
|
-
return this.http.
|
|
1128
|
-
|
|
1443
|
+
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
1444
|
+
//////console.log(`[DooleService] postAPIContentStatus(${path}) res: `, res);
|
|
1129
1445
|
return res;
|
|
1130
1446
|
}));
|
|
1131
1447
|
}
|
|
1132
|
-
|
|
1133
|
-
let path =
|
|
1448
|
+
postAPIuserRegister(params) {
|
|
1449
|
+
let path = 'hpc/user/store';
|
|
1134
1450
|
const endpoint = this.api.getEndpoint(path);
|
|
1135
|
-
return this.http.
|
|
1136
|
-
|
|
1451
|
+
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
1452
|
+
////console.log(`[DooleService] postAPIsendRegister(${path}) res: `, res);
|
|
1137
1453
|
return res;
|
|
1138
1454
|
}));
|
|
1139
1455
|
}
|
|
1140
|
-
|
|
1141
|
-
let path = '
|
|
1456
|
+
getAPITypeDocument() {
|
|
1457
|
+
let path = 'center/documentTypes';
|
|
1142
1458
|
const endpoint = this.api.getEndpoint(path);
|
|
1143
|
-
return this.http.
|
|
1144
|
-
|
|
1459
|
+
return this.http.get(endpoint).pipe(map((res) => {
|
|
1460
|
+
//////console.log(`[DooleService] getAPITypeDocument(${path}) res: `, res);
|
|
1145
1461
|
return res;
|
|
1146
1462
|
}));
|
|
1147
1463
|
}
|
|
1148
|
-
|
|
1149
|
-
let path = 'user/
|
|
1464
|
+
getAPImessage(id, params) {
|
|
1465
|
+
let path = 'user/message/' + id;
|
|
1466
|
+
let httpParams = new HttpParams();
|
|
1467
|
+
httpParams = httpParams ? httpParams.append('page', params) : httpParams;
|
|
1150
1468
|
const endpoint = this.api.getEndpoint(path);
|
|
1151
|
-
return this.http.get(endpoint).pipe(map((res) => {
|
|
1152
|
-
|
|
1469
|
+
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
1470
|
+
//////console.log(`[DooleService] getAPIelementsList(${path}) res: `, res);
|
|
1153
1471
|
return res;
|
|
1154
1472
|
}));
|
|
1155
1473
|
}
|
|
1156
|
-
|
|
1157
|
-
let path = 'user/
|
|
1474
|
+
getAPIEvents(params) {
|
|
1475
|
+
let path = 'hpc/user/episodes';
|
|
1476
|
+
let httpParams = new HttpParams();
|
|
1477
|
+
httpParams = (params?.onDate === 0 || params?.onDate === 1) ? httpParams.append('onDate', params?.onDate) : httpParams;
|
|
1478
|
+
httpParams = (params?.from_date) ? httpParams.append('from_date', params?.from_date) : httpParams;
|
|
1479
|
+
httpParams = (params?.to_date) ? httpParams.append('to_date', params?.to_date) : httpParams;
|
|
1158
1480
|
const endpoint = this.api.getEndpoint(path);
|
|
1159
|
-
return this.http.get(endpoint).pipe(map((res) => {
|
|
1160
|
-
console.log(`[DooleService]
|
|
1481
|
+
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
1482
|
+
//////console.log(`[DooleService] getAPIgames(${path}) res: `, res);
|
|
1161
1483
|
return res;
|
|
1162
1484
|
}));
|
|
1163
1485
|
}
|
|
1164
|
-
|
|
1165
|
-
let path =
|
|
1486
|
+
postAPImedicalProcedures(params) {
|
|
1487
|
+
let path = `user/medicalProcedures`;
|
|
1166
1488
|
const endpoint = this.api.getEndpoint(path);
|
|
1167
|
-
return this.http.
|
|
1168
|
-
console.log(`[DooleService]
|
|
1489
|
+
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
1490
|
+
//////console.log(`[DooleService] postAPIdrugIntake(${path}) res: `, res);
|
|
1169
1491
|
return res;
|
|
1170
1492
|
}));
|
|
1171
1493
|
}
|
|
1172
|
-
|
|
1173
|
-
let path =
|
|
1494
|
+
getAPImedicalProcedures2(params) {
|
|
1495
|
+
let path = `hpc/user/medicalProcedures`;
|
|
1174
1496
|
const endpoint = this.api.getEndpoint(path);
|
|
1175
|
-
|
|
1176
|
-
|
|
1497
|
+
let httpParams = new HttpParams();
|
|
1498
|
+
httpParams = (params?.to_date) ? httpParams.append('to_date', params?.to_date) : httpParams;
|
|
1499
|
+
httpParams = (params?.from_date) ? httpParams.append('from_date', params?.from_date) : httpParams;
|
|
1500
|
+
httpParams = (params?.user) ? httpParams.append('user', params?.user) : httpParams;
|
|
1501
|
+
return this.http.get(endpoint, params).pipe(map((res) => {
|
|
1502
|
+
//////console.log(`[DooleService] postAPIdrugIntake(${path}) res: `, res);
|
|
1177
1503
|
return res;
|
|
1178
1504
|
}));
|
|
1179
1505
|
}
|
|
1180
|
-
|
|
1181
|
-
let path =
|
|
1182
|
-
let httpParams = new HttpParams();
|
|
1183
|
-
httpParams = params?.page ? httpParams.append('page', params?.page) : httpParams;
|
|
1184
|
-
httpParams = params?.user ? httpParams.append('user', params?.user) : httpParams;
|
|
1506
|
+
postAPINextMedicalProcedure(params) {
|
|
1507
|
+
let path = `user/medicalProcedure/next`;
|
|
1185
1508
|
const endpoint = this.api.getEndpoint(path);
|
|
1186
|
-
return this.http.
|
|
1187
|
-
|
|
1509
|
+
return this.http.post(endpoint, params).pipe(map((res) => {
|
|
1510
|
+
//////console.log(`[DooleService] postAPIdrugIntake(${path}) res: `, res);
|
|
1188
1511
|
return res;
|
|
1189
1512
|
}));
|
|
1190
1513
|
}
|
|
1191
|
-
|
|
1192
|
-
let path = `
|
|
1514
|
+
getAPImedicalProcedures(params) {
|
|
1515
|
+
let path = `hpc/user/medicalProcedure`;
|
|
1193
1516
|
let httpParams = new HttpParams();
|
|
1194
|
-
httpParams = (params?.
|
|
1195
|
-
httpParams = (params?.
|
|
1517
|
+
httpParams = (params?.byEpisode === 0 || params?.byEpisode === 1) ? httpParams.append('byEpisode', params?.byEpisode) : httpParams;
|
|
1518
|
+
httpParams = (params?.medical_procedure_id && params?.byEpisode === 0) ? httpParams.append('medical_procedure_id', params?.medical_procedure_id) : httpParams;
|
|
1519
|
+
httpParams = (params?.episode_id && params?.byEpisode === 1) ? httpParams.append('episode_id', params?.episode_id) : httpParams;
|
|
1196
1520
|
const endpoint = this.api.getEndpoint(path);
|
|
1197
1521
|
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
1198
|
-
|
|
1522
|
+
//////console.log(`[DooleService] postAPIdrugIntake(${path}) res: `, res);
|
|
1199
1523
|
return res;
|
|
1200
1524
|
}));
|
|
1201
1525
|
}
|
|
1202
|
-
|
|
1203
|
-
let path =
|
|
1526
|
+
getAPIpreexistingConditions(params) {
|
|
1527
|
+
let path = 'user/preexistingConditions';
|
|
1528
|
+
let httpParams = new HttpParams();
|
|
1529
|
+
httpParams = (params?.onDate === 0 || params?.onDate === 1) ? httpParams.append('onDate', params?.onDate) : httpParams;
|
|
1530
|
+
httpParams = (params?.from_date) ? httpParams.append('from_date', params?.from_date) : httpParams;
|
|
1531
|
+
httpParams = (params?.to_date) ? httpParams.append('to_date', params?.to_date) : httpParams;
|
|
1532
|
+
//httpParams = (params?.preexistingConditionTypes) ? httpParams.append('preexistingConditionTypes[]', params?.preexistingConditionTypes) : httpParams
|
|
1533
|
+
if (params?.preexistingConditionTypes && params?.preexistingConditionTypes?.length) {
|
|
1534
|
+
params.preexistingConditionTypes.forEach(element => {
|
|
1535
|
+
httpParams = httpParams.append('preexistingConditionTypes[]', element);
|
|
1536
|
+
});
|
|
1537
|
+
}
|
|
1204
1538
|
const endpoint = this.api.getEndpoint(path);
|
|
1205
|
-
return this.http.
|
|
1206
|
-
|
|
1539
|
+
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
1540
|
+
//////console.log(`[DooleService] getAPIelementsList(${path}) res: `, res);
|
|
1207
1541
|
return res;
|
|
1208
1542
|
}));
|
|
1209
1543
|
}
|
|
1210
|
-
|
|
1211
|
-
let path =
|
|
1544
|
+
getAPIpreexistingConditionsType() {
|
|
1545
|
+
let path = 'center/preexistingConditionTypes';
|
|
1212
1546
|
const endpoint = this.api.getEndpoint(path);
|
|
1213
|
-
return this.http.
|
|
1214
|
-
|
|
1547
|
+
return this.http.get(endpoint).pipe(map((res) => {
|
|
1548
|
+
//////console.log(`[DooleService] getAPIpreexistingConditionsType(${path}) res: `, res);
|
|
1215
1549
|
return res;
|
|
1216
1550
|
}));
|
|
1217
1551
|
}
|
|
@@ -1219,7 +1553,7 @@ export class DooleService {
|
|
|
1219
1553
|
let path = 'user/notifications/count';
|
|
1220
1554
|
const endpoint = this.api.getEndpoint(path);
|
|
1221
1555
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
1222
|
-
|
|
1556
|
+
//////console.log(`[DooleService] getAPINotifications(${path}) res: `, res);
|
|
1223
1557
|
return res;
|
|
1224
1558
|
}));
|
|
1225
1559
|
}
|
|
@@ -1231,7 +1565,15 @@ export class DooleService {
|
|
|
1231
1565
|
httpParams = (params?.page > 0) ? httpParams.append('page', params?.page) : httpParams;
|
|
1232
1566
|
const endpoint = this.api.getEndpoint(path);
|
|
1233
1567
|
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
1234
|
-
|
|
1568
|
+
//////console.log(`[DooleService] getAPINotifications(${path}) res: `, res);
|
|
1569
|
+
return res;
|
|
1570
|
+
}));
|
|
1571
|
+
}
|
|
1572
|
+
getAPIUserImage() {
|
|
1573
|
+
let path = 'user/image';
|
|
1574
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1575
|
+
return this.http.get(endpoint).pipe(map((res) => {
|
|
1576
|
+
//////console.log(`[DooleService] getAPIgames(${path}) res: `, res);
|
|
1235
1577
|
return res;
|
|
1236
1578
|
}));
|
|
1237
1579
|
}
|
|
@@ -1260,40 +1602,135 @@ export class DooleService {
|
|
|
1260
1602
|
getPushNotification() {
|
|
1261
1603
|
return this.pushNotification;
|
|
1262
1604
|
}
|
|
1263
|
-
|
|
1264
|
-
let path =
|
|
1605
|
+
getAPIExerciseDetail(id, params) {
|
|
1606
|
+
let path = `user/exercise/${id}`;
|
|
1607
|
+
let httpParams = new HttpParams();
|
|
1608
|
+
httpParams = (params?.programable_play) ? httpParams.append('programable_play', params?.programable_play) : httpParams;
|
|
1609
|
+
httpParams = (params?.challenge_id) ? httpParams.append('challenge_id', params?.challenge_id) : httpParams;
|
|
1610
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1611
|
+
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
1612
|
+
////console.log(`[DooleService] getAPIExercises(${path}) res: `, res);
|
|
1613
|
+
return res;
|
|
1614
|
+
}));
|
|
1615
|
+
}
|
|
1616
|
+
getAPIExercisesByDate(from_date, to_date) {
|
|
1617
|
+
let path = 'user/exercises/scheduled';
|
|
1618
|
+
let httpParams = new HttpParams();
|
|
1619
|
+
httpParams = httpParams ? httpParams.append('from_date', from_date) : httpParams;
|
|
1620
|
+
httpParams = httpParams ? httpParams.append('to_date', to_date) : httpParams;
|
|
1621
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1622
|
+
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
1623
|
+
////console.log(`[DooleService] getAPIExercises(${path}) res: `, res);
|
|
1624
|
+
return res;
|
|
1625
|
+
}));
|
|
1626
|
+
}
|
|
1627
|
+
getAPIExercises() {
|
|
1628
|
+
let path = 'user/exercises';
|
|
1265
1629
|
const endpoint = this.api.getEndpoint(path);
|
|
1266
1630
|
return this.http.get(endpoint).pipe(map((res) => {
|
|
1267
|
-
|
|
1631
|
+
////console.log(`[DooleService] getAPIExercises(${path}) res: `, res);
|
|
1268
1632
|
return res;
|
|
1269
1633
|
}));
|
|
1270
1634
|
}
|
|
1271
|
-
|
|
1272
|
-
let path =
|
|
1635
|
+
getAPIChallenge(challengeId, params) {
|
|
1636
|
+
let path = 'user/challenge/' + challengeId;
|
|
1637
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1638
|
+
return this.http.get(endpoint).pipe(map((res) => {
|
|
1639
|
+
////console.log(`[DooleService] getAPIChallenge(${path}) res: `, res);
|
|
1640
|
+
return res;
|
|
1641
|
+
}));
|
|
1642
|
+
}
|
|
1643
|
+
getAPIChallenges(params) {
|
|
1644
|
+
let path = 'user/challenges';
|
|
1273
1645
|
let httpParams = new HttpParams();
|
|
1274
|
-
|
|
1275
|
-
|
|
1646
|
+
if (params?.onlyAccepted)
|
|
1647
|
+
httpParams = httpParams.append('onlyAccepted', params.onlyAccepted);
|
|
1276
1648
|
const endpoint = this.api.getEndpoint(path);
|
|
1277
1649
|
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
1278
|
-
|
|
1650
|
+
////console.log(`[DooleService] getAPIChallenges(${path}) res: `, res);
|
|
1279
1651
|
return res;
|
|
1280
1652
|
}));
|
|
1281
1653
|
}
|
|
1282
|
-
|
|
1283
|
-
let path =
|
|
1654
|
+
getAPIChallenges2() {
|
|
1655
|
+
let path = 'user/challenges/goals';
|
|
1284
1656
|
const endpoint = this.api.getEndpoint(path);
|
|
1285
|
-
return this.http.
|
|
1286
|
-
|
|
1657
|
+
return this.http.get(endpoint).pipe(map((res) => {
|
|
1658
|
+
////console.log(`[DooleService] getAPIChallenges2(${path}) res: `, res);
|
|
1659
|
+
return res;
|
|
1660
|
+
}));
|
|
1661
|
+
}
|
|
1662
|
+
getAPIAppLatestVersion(version, platform) {
|
|
1663
|
+
let path = 'app/versions/must-update?version=' + version + '&platform=' + platform;
|
|
1664
|
+
////console.log(path);
|
|
1665
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1666
|
+
return this.http.get(endpoint).pipe(map((res) => {
|
|
1667
|
+
return res;
|
|
1668
|
+
}));
|
|
1669
|
+
}
|
|
1670
|
+
getAPIpatients() {
|
|
1671
|
+
let path = 'user/patients';
|
|
1672
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1673
|
+
return this.http.get(endpoint).pipe(map((res) => {
|
|
1674
|
+
//////console.log(`[DooleService] getAPIreminders(${path}) res: `, res);
|
|
1675
|
+
return res;
|
|
1676
|
+
}));
|
|
1677
|
+
}
|
|
1678
|
+
getAPI_SCP_goals() {
|
|
1679
|
+
let path = `sharecareplan/goals`;
|
|
1680
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1681
|
+
return this.http.get(endpoint).pipe(map((res) => {
|
|
1682
|
+
//////console.log(`[DooleService] getAPIagendaID(${path}) res: `, res);
|
|
1683
|
+
return res;
|
|
1684
|
+
}));
|
|
1685
|
+
}
|
|
1686
|
+
getAPI_prescribedApps_ByDate(from_date, to_date) {
|
|
1687
|
+
let path = 'rehabilify/prescribed-apps/activities/pending';
|
|
1688
|
+
let httpParams = new HttpParams();
|
|
1689
|
+
httpParams = httpParams ? httpParams.append('from', from_date) : httpParams;
|
|
1690
|
+
httpParams = httpParams ? httpParams.append('to', to_date) : httpParams;
|
|
1691
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1692
|
+
return this.http.get(endpoint, httpParams).pipe(map((res) => {
|
|
1693
|
+
////console.log(`[DooleService] getAPI_prescribedApps_ByDate(${path}) res: `, res);
|
|
1694
|
+
return res;
|
|
1695
|
+
}));
|
|
1696
|
+
}
|
|
1697
|
+
getAPIallowedDepartments() {
|
|
1698
|
+
let path = `user/departments`;
|
|
1699
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1700
|
+
return this.http.get(endpoint).pipe(map((res) => {
|
|
1701
|
+
return res;
|
|
1702
|
+
}));
|
|
1703
|
+
}
|
|
1704
|
+
getAPIdetailDepartments(id) {
|
|
1705
|
+
let path = `department/show/${id}`;
|
|
1706
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1707
|
+
return this.http.get(endpoint).pipe(map((res) => {
|
|
1708
|
+
return res;
|
|
1709
|
+
}));
|
|
1710
|
+
}
|
|
1711
|
+
getAPIAnswers(id) {
|
|
1712
|
+
let path = `user/form/${id}/answers/detail?html=true`;
|
|
1713
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1714
|
+
return this.http.get(endpoint).pipe(map((res) => {
|
|
1715
|
+
////console.log(`[DooleService] getAPIAnswers(${path}) res: `, res);
|
|
1716
|
+
return res;
|
|
1717
|
+
}));
|
|
1718
|
+
}
|
|
1719
|
+
getAPIDayPhrase() {
|
|
1720
|
+
let path = `user/dayPhrase`;
|
|
1721
|
+
const endpoint = this.api.getEndpoint(path);
|
|
1722
|
+
return this.http.get(endpoint).pipe(map((res) => {
|
|
1723
|
+
////console.log(`[DooleService] getAPIDayPhrase(${path}) res: `, res);
|
|
1287
1724
|
return res;
|
|
1288
1725
|
}));
|
|
1289
1726
|
}
|
|
1290
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.
|
|
1291
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.
|
|
1727
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DooleService, deps: [{ token: i1.AuthenticationService }, { token: i2.FileTransfer }, { token: i3.File }, { token: i4.HttpService }, { token: i5.ApiEndpointsService }, { token: i6.Events }, { token: i7.Platform }, { token: i8.Router }, { token: i7.AlertController }, { token: i9.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1728
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DooleService, providedIn: 'root' }); }
|
|
1292
1729
|
}
|
|
1293
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.
|
|
1730
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DooleService, decorators: [{
|
|
1294
1731
|
type: Injectable,
|
|
1295
1732
|
args: [{
|
|
1296
1733
|
providedIn: 'root'
|
|
1297
1734
|
}]
|
|
1298
|
-
}], ctorParameters: () => [{ type: i1.AuthenticationService }, { type: i2.FileTransfer }, { type: i3.File }, { type: i4.HttpService }, { type: i5.ApiEndpointsService }, { type: i6.Events }, { type: i7.Platform }, { type: i8.Router }, { type: i7.AlertController }] });
|
|
1299
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9vbGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NlcnZpY2UtbGliL3NyYy9saWIvc2VydmljZXMvZG9vbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSzNDLE9BQU8sRUFBRSxVQUFVLEVBQWdDLE1BQU0sTUFBTSxDQUFDO0FBR2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQTZCLEdBQUcsRUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBRzFFLE9BQU8sRUFBZSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7OztBQVEvRCxNQUFNLE9BQU8sWUFBWTtJQUV2QixZQUNVLFdBQWtDLEVBQ2xDLFFBQXNCLEVBQ3RCLElBQVUsRUFDVixJQUFpQixFQUNqQixHQUF3QixFQUN6QixNQUFjLEVBQ2IsUUFBa0IsRUFDbkIsTUFBYyxFQUNkLGVBQWdDO1FBUi9CLGdCQUFXLEdBQVgsV0FBVyxDQUF1QjtRQUNsQyxhQUFRLEdBQVIsUUFBUSxDQUFjO1FBQ3RCLFNBQUksR0FBSixJQUFJLENBQU07UUFDVixTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2pCLFFBQUcsR0FBSCxHQUFHLENBQXFCO1FBQ3pCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDYixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ25CLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7SUFBSSxDQUFDO0lBRzlDLFVBQVUsQ0FBQyxLQUFhLEVBQUUsRUFBVztRQUVuQyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqQyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVD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Q2Ysc0VBQXNFO1lBQ3RFLE9BQU8sR0FBRyxDQUFDO1FBRWIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7K0dBNXFEVSxZQUFZO21IQUFaLFlBQVksY0FGWCxNQUFNOzs0RkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZpbGVUcmFuc2ZlciwgRmlsZVVwbG9hZE9wdGlvbnMsIEZpbGVUcmFuc2Zlck9iamVjdCB9IGZyb20gJ0Bhd2Vzb21lLWNvcmRvdmEtcGx1Z2lucy9maWxlLXRyYW5zZmVyL25neCc7XG5pbXBvcnQgeyBBcGlFbmRwb2ludHNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXBpLWVuZHBvaW50cy5zZXJ2aWNlJ1xuaW1wb3J0IHsgRXZlbnRzIH0gZnJvbSAnLi9ldmVudHMuc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4vaHR0cC5zZXJ2aWNlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yLCBUaW1lb3V0RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFsZXJ0Q29udHJvbGxlciwgUGxhdGZvcm0gfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBGaWxlIH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL2ZpbGUvbmd4JztcbmltcG9ydCB7IENhcGFjaXRvciB9IGZyb20gJ0BjYXBhY2l0b3IvY29yZSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWxheSwgZmlsdGVyLCBtYXAsIG1lcmdlTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSGVhbHRoQ2FyZCB9IGZyb20gJy4uL21vZGVscy91c2VyJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFF1ZXJ5U3RyaW5nUGFyYW1ldGVycyB9IGZyb20gJy4uL3V0aWwvcXVlcnktc3RyaW5nLXBhcmFtZXRlcnMnO1xuaW1wb3J0IHsgU2hlbGxDaGF0TW9kZWwsIFNoZWxsTWVzc2FnZU1vZGVsLCBTaGVsbFJlY2lwaWVudE1vZGVsIH0gZnJvbSAnLi4vdXRpbC9jaGF0UGFyYW1ldGVycyc7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlJ1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEb29sZVNlcnZpY2Uge1xuICBwdXNoTm90aWZpY2F0aW9uOiBhbnk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zZmVyOiBGaWxlVHJhbnNmZXIsXG4gICAgcHJpdmF0ZSBmaWxlOiBGaWxlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcGk6IEFwaUVuZHBvaW50c1NlcnZpY2UsXG4gICAgcHVibGljIGV2ZW50czogRXZlbnRzLFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcbiAgICBwdWJsaWMgYWxlcnRDb250cm9sbGVyOiBBbGVydENvbnRyb2xsZXIpIHsgfVxuICBwdWJsaWMgc2VsZWN0ZWREYXRlOiBEYXRlO1xuXG4gIHVwbG9hZEZpbGUoaW1hZ2U6IHN0cmluZywgaWQ/OiBzdHJpbmcpIHtcblxuICAgIGNvbnNvbGUubG9nKFwidXBsb2FkaW5nIFwiLCBpbWFnZSk7XG4gICAgY29uc3QgdG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndG9rZW4nKTtcbiAgICBsZXQgb3B0aW9uczogRmlsZVVwbG9hZE9wdGlvbnMgPSB7XG4gICAgICBmaWxlS2V5OiAnZmlsZScsXG4gICAgICBmaWxlTmFtZTogJ25hbWUuanBnJyxcblxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIHRva2VuLFxuICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBpZDogaWRcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmaWxlVHJhbnNmZXI6IEZpbGVUcmFuc2Zlck9iamVjdCA9IHRoaXMudHJhbnNmZXIuY3JlYXRlKCk7XG4gICAgLy8gQWRkIGZpbGVzIGZvciBuZXcgb3Igc2F2ZWQgZGlhZ25vc3RpY3MuXG4gICAgLy8gdXNlcyBkaWFnbm9zdGljL21lZGlhIHdoZW4gZGlhZ25vc3RpYyBpcyBuZXdcbiAgICAvL2NvbnN0IGVuZHBvaW50ID0gaWQgPyB0aGlzLmFwaS5nZXRFbmRwb2ludCgnZGlhZ25vc3RpYy9tZWRpYScpOnRoaXMuYXBpLmdldERvb2xlRW5kcG9pbnQoJ21lZGlhL3VwbG9hZC90ZW1wJykgO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQoJ21lZGlhL3VwbG9hZC90ZW1wJyk7XG4gICAgLy9jb25zb2xlLmxvZyhcIiogdXBsb2FkRmlsZSBlbmRwb2ludFwiLCBlbmRwb2ludCk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZmlsZVRyYW5zZmVyLnVwbG9hZChpbWFnZSwgZW5kcG9pbnQsIG9wdGlvbnMpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICByZXNvbHZlKEpTT04ucGFyc2UoZGF0YS5yZXNwb25zZSkpO1xuICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0pXG4gICAgfSlcblxuICB9XG5cblxuXG4gIHBvc3RBUElBZGRNZWRpYShwYXJhbXM6IE9iamVjdCl7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludCgnbWVkaWEvYWRkJyk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3RGb3JtKGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJQWRkTWVkaWEoJHtlbmRwb2ludH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHVwbG9hZEZpbGVUb01vZGVsKGltYWdlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcGFyYW1zOiBhbnkpIHtcbiAgICAvL2NvbnNvbGUubG9nKFwidXBsb2FkaW5nIFwiLCBpbWFnZSk7XG4gICAgY29uc3QgdG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndG9rZW4nKTtcbiAgICBsZXQgb3B0aW9uczogRmlsZVVwbG9hZE9wdGlvbnMgPSB7XG4gICAgICBmaWxlS2V5OiAnZmlsZScsXG4gICAgICBmaWxlTmFtZTogbmFtZSxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyB0b2tlbixcbiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgICBwYXJhbXNcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlVHJhbnNmZXI6IEZpbGVUcmFuc2Zlck9iamVjdCA9IHRoaXMudHJhbnNmZXIuY3JlYXRlKCk7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludCgnbWVkaWEvYWRkJyk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZpbGVUcmFuc2Zlci51cGxvYWQoaW1hZ2UsIGVuZHBvaW50LCBvcHRpb25zKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnBhcnNlKGRhdGEucmVzcG9uc2UpKTtcbiAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKGRhdGEucmVzcG9uc2UpKTtcbiAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9KVxuICAgIH0pXG5cbiAgfVxuXG4gIHVwbG9hZE1lc3NhZ2VJbWFnZShpZE1lc3NhZ2VIZWFkZXIsIGlkVXNlclRvLCBtZXNzYWdlLCBmaWxlVXJsLCBpZF91c3VhcmlfYW1pcSkge1xuXG4gICAgY29uc3QgdG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndG9rZW4nKTtcblxuICAgIGxldCBvcHRpb25zOiBGaWxlVXBsb2FkT3B0aW9ucyA9IHtcbiAgICAgIGZpbGVLZXk6ICdmaWxlJyxcbiAgICAgIGZpbGVOYW1lOiAnbmFtZS5wZGYnLCAvL1RPRE86ICduYW1lLmpwZydcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyB0b2tlbixcbiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgaWRVc2VyOiBpZF91c3VhcmlfYW1pcSxcbiAgICAgICAgc2VjcmV0OiB0b2tlbixcbiAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICAgIGlkOiBpZE1lc3NhZ2VIZWFkZXJcbiAgICAgIH1cbiAgICB9XG4gICAgLy9jb25zb2xlLmxvZyhcIm9wdGlvbnM6IFwiLCBvcHRpb25zKTtcblxuICAgIGNvbnN0IGZpbGVUcmFuc2ZlcjogRmlsZVRyYW5zZmVyT2JqZWN0ID0gdGhpcy50cmFuc2Zlci5jcmVhdGUoKTtcblxuICAgIGZpbGVUcmFuc2Zlci5vblByb2dyZXNzKChwcm9ncmVzc0V2ZW50KSA9PiB7XG4gICAgICBpZiAocHJvZ3Jlc3NFdmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHZhciBwZXJjID0gTWF0aC5mbG9vcihwcm9ncmVzc0V2ZW50LmxvYWRlZCAvIHByb2dyZXNzRXZlbnQudG90YWwgKiAxMDApO1xuICAgICAgICB0aGlzLmV2ZW50cy5wdWJsaXNoKFwidXBsb2FkTWVzc2FnZUltYWdlXCIsIHsgZmlsZVVybCwgcGVyYyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJwcm9ncmVzc0V2ZW50IC0gXCIsIHByb2dyZXNzRXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludCgnbWVzc2FnZScpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZpbGVUcmFuc2Zlci51cGxvYWQoZmlsZVVybCwgZW5kcG9pbnQsIG9wdGlvbnMpXG4gICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJzdWNjZXNzIGZpbGVUcmFuc2Zlci51cGxvYWRcIiwgSlNPTi5wYXJzZShkYXRhLnJlc3BvbnNlKSk7XG4gICAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKGRhdGEucmVzcG9uc2UpKTtcbiAgICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCIqKiBlcnJvciAqKiBmaWxlVHJhbnNmZXIudXBsb2FkOiBcIiwgZXJyKTtcbiAgICAgICAgICByZWplY3QoZmlsZVRyYW5zZmVyLnVwbG9hZCk7XG4gICAgICAgIH0pXG4gICAgfSlcblxuICB9XG5cbiAgYjY0dG9CbG9iKGI2NERhdGEsIGNvbnRlbnRUeXBlID0gJycsIHNsaWNlU2l6ZSA9IDUxMikge1xuICAgIGNvbnN0IGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiNjREYXRhKTtcbiAgICBjb25zdCBieXRlQXJyYXlzID0gW107XG5cbiAgICBmb3IgKGxldCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBieXRlQ2hhcmFjdGVycy5sZW5ndGg7IG9mZnNldCArPSBzbGljZVNpemUpIHtcbiAgICAgIGNvbnN0IHNsaWNlID0gYnl0ZUNoYXJhY3RlcnMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzbGljZVNpemUpO1xuXG4gICAgICBjb25zdCBieXRlTnVtYmVycyA9IG5ldyBBcnJheShzbGljZS5sZW5ndGgpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGljZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBieXRlTnVtYmVyc1tpXSA9IHNsaWNlLmNoYXJDb2RlQXQoaSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ5dGVOdW1iZXJzKTtcbiAgICAgIGJ5dGVBcnJheXMucHVzaChieXRlQXJyYXkpO1xuICAgIH1cblxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihieXRlQXJyYXlzLCB7IHR5cGU6IGNvbnRlbnRUeXBlIH0pO1xuICAgIHJldHVybiBibG9iO1xuICB9XG5cbiAgZG93bmxvYWRGaWxlKHVybCwgZGVzdGluYXRpb24pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHZhciByZXN1bHQ6IGFueSA9IFtdO1xuICAgIGNvbnN0IGZpbGVUcmFuc2ZlcjogRmlsZVRyYW5zZmVyT2JqZWN0ID0gdGhpcy50cmFuc2Zlci5jcmVhdGUoKTtcbiAgICB2YXIgcGF0aCA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5wbGF0Zm9ybS5pcygnaW9zJykpIHtcbiAgICAgIHBhdGggPSB0aGlzLmZpbGUuZG9jdW1lbnRzRGlyZWN0b3J5O1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXRoID0gdGhpcy5maWxlLmRhdGFEaXJlY3Rvcnk7XG4gICAgfVxuXG4gICAgLy9jb25zb2xlLmxvZyhcImRvd25sb2FkRmlsZVwiLCB1cmwsIGRlc3RpbmF0aW9uLCAncGF0aCxkZXN0aW5hdGlvbicsIHBhdGgsIGRlc3RpbmF0aW9uKTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XG4gICAgICAvL2NvbnNvbGUubG9nKFwiYmVmb3JlIENoZWNrRmlsZVwiLCB0aGlzLmZpbGUpO1xuICAgICAgdGhpcy5maWxlLmNoZWNrRmlsZShwYXRoLCBkZXN0aW5hdGlvbikudGhlbihyZXMgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiKnJlcypcIiwgcmVzKTtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJleGlzdHNcIiwgcmVzKTtcbiAgICAgICAgICByZXN1bHRbXCJzdWNjZXNzXCJdID0gdHJ1ZTtcbiAgICAgICAgICByZXN1bHRbXCJkb3dubG9hZGVkXCJdID0gdHJ1ZTtcbiAgICAgICAgICByZXN1bHRbXCJmaWxlXCJdID0gcGF0aCArIGRlc3RpbmF0aW9uOy8vbm9ybWFsaXplVVJMKHRoaXMuZmlsZS5jYWNoZURpcmVjdG9yeSArIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgICByZXN1bHRbXCJmaWxlTm9ybWFsaXplZFwiXSA9IENhcGFjaXRvci5jb252ZXJ0RmlsZVNyYyhwYXRoICsgZGVzdGluYXRpb24pO1xuICAgICAgICAgIHJldHVybiBvYnNlcnZlci5uZXh0KHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIm5vdCBleGlzdHNcIik7XG4gICAgICAgIGZpbGVUcmFuc2Zlci5vblByb2dyZXNzKGV2ZW50ID0+IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZGVzY2FycmVndWVtXG4gICAgICAgICAgaWYgKGV2ZW50Lmxlbmd0aENvbXB1dGFibGUpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xuICAgICAgICAgICAgcmVzdWx0W1wic3RhdHVzXCJdID0gXCJkb3dubG9hZGluZ1wiO1xuICAgICAgICAgICAgcmVzdWx0W1wiZG93bmxvYWRlZFwiXSA9IGZhbHNlO1xuICAgICAgICAgICAgcmVzdWx0W1wicGVyY2VudFwiXSA9IE1hdGgucm91bmQoKGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsKSAqIDEwMCk7XG4gICAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXIubmV4dChyZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZpbGVUcmFuc2Zlci5kb3dubG9hZCh1cmwsIHBhdGggKyBkZXN0aW5hdGlvbikudGhlbigoZW50cnkpID0+IHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCcqZG93bmxvYWQ6KiAnICsgdXJsICsgXCIgXCIgKyBlbnRyeS50b1VSTCgpKTtcbiAgICAgICAgICByZXN1bHRbXCJzdWNjZXNzXCJdID0gdHJ1ZTtcbiAgICAgICAgICByZXN1bHRbXCJkb3dubG9hZGVkXCJdID0gdHJ1ZTtcbiAgICAgICAgICByZXN1bHRbXCJmaWxlXCJdID0gZW50cnkudG9VUkwoKTsvL25vcm1hbGl6ZVVSTCh0aGlzLmZpbGUuY2FjaGVEaXJlY3RvcnkgKyBkZXN0aW5hdGlvbik7XG4gICAgICAgICAgcmVzdWx0W1wiZmlsZU5vcm1hbGl6ZWRcIl0gPSBDYXBhY2l0b3IuY29udmVydEZpbGVTcmMocGF0aCArIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXIubmV4dChyZXN1bHQpO1xuICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgICByZXN1bHRbXCJzdWNjZXNzXCJdID0gZmFsc2U7XG4gICAgICAgICAgcmVzdWx0W1wiZG93bmxvYWRlZFwiXSA9IGZhbHNlO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJlcnJvciBkb3dubG9hZCBcIiArIHVybCk7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAgICAgIHJldHVybiBvYnNlcnZlci5uZXh0KHJlc3VsdCk7XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZUZpbGUoaWQpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYG1lZGlhLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZGVsZXRlRmlsZSgke3BhdGh9KSByZXM6ICR7cmVzfWAsIEpTT04uc3RyaW5naWZ5KHJlcykpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBzaG93QWxlcnQobWVzc2FnZTogc3RyaW5nKSB7XG5cbiAgICByZXR1cm4gdGhpcy5hbGVydENvbnRyb2xsZXIuY3JlYXRlKHtcbiAgICAgIGhlYWRlcjogJ0luZm8nLFxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogZmFsc2UsXG4gICAgICBidXR0b25zOiBbJ09LJ11cbiAgICB9KTtcblxuICB9XG5cbiAgYXN5bmMgc2hvd0FsZXJ0QW5kUmV0dXJuKGhlYWRlcjogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGlzRGlzbWlzcz86IGJvb2xlYW4sIHJvdXRlPzogc3RyaW5nKSB7XG4gICAgLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gc2hvd0FsZXJ0QW5kUmV0dXJuKClgKTtcbiAgICBsZXQgZGlzbWlzcyA9IChpc0Rpc21pc3MgIT09IHVuZGVmaW5lZCkgPyBpc0Rpc21pc3MgOiBmYWxzZVxuICAgIGNvbnN0IGFsZXJ0ID0gYXdhaXQgdGhpcy5hbGVydENvbnRyb2xsZXIuY3JlYXRlKHtcbiAgICAgIGhlYWRlcjogaGVhZGVyLFxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogZGlzbWlzcyxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6ICdPSycsXG4gICAgICAgICAgaGFuZGxlcjogKGJsYWgpID0+IHtcbiAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0NvbmZpcm0gT0s6IGJsYWgnKTtcbiAgICAgICAgICAgIGlmIChyb3V0ZSAhPT0gdW5kZWZpbmVkICYmIHJvdXRlICE9PSBudWxsKVxuICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJvdXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcbiAgICBhd2FpdCBhbGVydC5wcmVzZW50KCk7XG4gIH1cblxuICBhc3luYyBwcmVzZW50QWxlcnQobWVzc2FnZSwgYnV0dG9uPzogc3RyaW5nKSB7XG4gICAgbGV0IGJ1dHRvbk5hbWUgPSAoYnV0dG9uICE9PSB1bmRlZmluZWQpID8gYnV0dG9uIDogJ09rJ1xuICAgIGNvbnN0IGFsZXJ0ID0gYXdhaXQgdGhpcy5hbGVydENvbnRyb2xsZXIuY3JlYXRlKHtcbiAgICAgIGNzc0NsYXNzOiAnbXktYWxlcnQtY2xhc3MnLFxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIGJ1dHRvbnM6IFtidXR0b25OYW1lXVxuICAgIH0pO1xuICAgIGF3YWl0IGFsZXJ0LnByZXNlbnQoKTtcbiAgfVxuXG4gIGdldEZhbWlseVVuaXRJRCgpOiBIdHRwUGFyYW1zIHtcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgbGV0IHVzZXIgPSB0aGlzLmF1dGhTZXJ2aWNlPy51c2VyXG4gICAgcmV0dXJuIGh0dHBQYXJhbXMgPSAodXNlci5mYW1pbHlVbml0KSA/IGh0dHBQYXJhbXMuYXBwZW5kKCd1c2VyJywgdXNlci5mYW1pbHlVbml0KSA6IGh0dHBQYXJhbXNcbiAgfVxuXG4gIGdldEFQSUxlZ2FsSW5mb3JtYXRpb24oKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2xlZ2FsVGVybS9sYXN0QWNjZXB0ZWQnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElMZWdhbEluZm9ybWF0aW9uKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgcG9zdEFQSUxlZ2FsQ29uZmlybWF0aW9uKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2xlZ2FsVGVybS9sYXN0QWNjZXB0ZWQnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElDb25maXJtYXRpb25MZWdhbCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUElSZWplY3RMZWdhbENvbmZpcm1hdGlvbihwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9sZWdhbFRlcm0vbGFzdERlY2xpbmVkJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJQ29uZmlybWF0aW9uTGVnYWwoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJcGFzc3dvcmRSZWNvdmVyeShwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAncGF0aWVudC9mb3Jnb3QnXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSXBhc3N3b3JkUmVjb3ZlcnkoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJU3RhZmZTbG90cyhwYXJhbXM6IHsgaWQ6IG51bWJlciwgZGF0ZTogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPGFueT4ge1xuXG4gICAgbGV0IHBhdGggPSBgc3RhZmYvJHtwYXJhbXMuaWR9L2F2YWlsYWJpbGl0eWA7XG4gICAgbGV0IGVuZHBvaW50OiBzdHJpbmc7XG4gICAgaWYgKHBhcmFtcy5kYXRlICE9PSBcIlwiKSB7XG4gICAgICBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50V2l0aFBhcmFtZXRlcnMocGF0aCwgKHFzOiBRdWVyeVN0cmluZ1BhcmFtZXRlcnMpID0+IHFzLnB1c2goJ2RhdGUnLCBwYXJhbXMuZGF0ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElTdGFmZlNsb3RzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0QVBJZ29hbHMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2VsZW1lbnQvZ29hbHMnXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJaG9tZUluaXRpYWwoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBnZXRBUEl2aWRlb2NhbGwoaWQ6c3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+e1xuICAgIGxldCBwYXRoID0gJ3VzZXIvYWdlbmRhLycraWQrJy92aWRlb2NhbGxTZXNzaW9uJ1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUEl2aWRlb2NhbGwoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApXG4gIH1cblxuXG4gIHBvc3RBUElQZW5kaW5nQ29ubmVjdCgpOiBPYnNlcnZhYmxlPGFueT57XG4gICAgbGV0IHBhdGggPSAndXNlci92aWRlb2NhbGwvcGVuZGluZ0Nvbm5lY3QnXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElQZW5kaW5nQ29ubmVjdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4vKiAgIGdldEFQSWluZm9ybWF0aW9uVXNlcigpOiBPYnNlcnZhYmxlPGFueT57XG5cbiAgICBsZXQgcGF0aCA9ICd1c2VyL2luZm9ybWF0aW9uVXNlcidcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElob21lSW5pdGlhbCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgIClcbiAgfSAqL1xuXG5cbiAgZ2V0QVBJaW5mb3JtYXRpb25TdW1tYXJ5KHBhcmFtczogT2JqZWN0KXtcbiAgICBsZXQgcGF0aCA9ICdob21lJ1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgY29uc29sZS5sb2coJ2hvbWUgcGFyYW1zJywgcGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKHJlcyA9PiByZXMpXG4gICAgKTtcbiAgfVxuICBnZXRBUElpbmZvcm1hdGlvblN1bW1hcnlPbGQocGFyYW1zOiBPYmplY3Qpe1xuICAgIGxldCBwYXRoID0gJ2hvbWUnXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcChyZXMgPT4gcmVzKVxuICAgICk7XG4gIH1cblxuXG4gIGdldEFQSXVzZXJQcm9maWxlKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndjIvdXNlci9wcm9maWxlJ1xuICAgIC8vbGV0IGh0dHBQYXJhbXMgPSB0aGlzLmdldEZhbWlseVVuaXRJRCgpXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJaG9tZUluaXRpYWwoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBwb3N0QVBJQ2hhbmdlUGFzc3dvcmQocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvY2hhbmdlUGFzc3dvcmQnO1xuICAgIGxldCBodHRwUGFyYW1zID0gdGhpcy5nZXRGYW1pbHlVbml0SUQoKVxuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElDaGFuZ2VQYXNzd29yZCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSW5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb25zKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9jb25maWd1cmF0aW9uJ1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSW5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb25zKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgcG9zdEFQSUNvbmZpZ3VyYXRpb24ocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvY29uZmlndXJhdGlvbic7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSUNvbmZpZ3VyYXRpb24oJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElsYW5ndWFnZXNDZW50ZXIoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdjZW50ZXIvbGFuZ3VhZ2VzJ1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWxhbmd1YWdlc0NlbnRlcigke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIGdldEFQSUZhcXMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdjZW50ZXIvZmFxJ1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWhvbWVJbml0aWFsKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0QVBJRmFtaWx5VW5pdCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZmFtaWx5VW5pdCc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJRmFtaWx5VW5pdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgZ2V0QVBJRmFtaWx5VW5pdDIoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd2Mi91c2VyL2ZhbWlseVVuaXQnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElGYW1pbHlVbml0KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUElSZXBvcnRQcm9ibGVtKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL3JlcG9ydFByb2JsZW0nOyAvLyAnbWVkaWEvdXBsb2FkL3RlbXAnXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElSZXBvcnRQcm9ibGVtKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSWVtYWlsVmVyaWZpY2F0aW9uKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2VtYWlsX3ZlcmlmaWNhdGlvbic7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUEllbWFpbFZlcmlmaWNhdGlvbigke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSUNvZGVCeUVtYWlsKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9yZXNlbmRUd29GYWN0b3JDb2RlJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJQ29kZUJ5RW1haWwoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSWNvZGVWZXJpZmljYXRpb24ocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvdmVyaWZ5VHdvRmFjdG9yJztcbiAgICAvL2xldCBwYXRoID0gJ3VzZXIvY29kZVZlcmlmaWNhdGlvbic7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUEljb2RlVmVyaWZpY2F0aW9uKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cblxuICBnZXRBUEloZWFsdGhDYXJkVHlwZXMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdjZW50ZXIvaGVhbHRoQ2FyZFR5cGVzJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJaGVhbHRoQ2FyZFR5cGVzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWhlYWx0aENhcmRzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9oZWFsdGhjYXJkcyc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQaGVhbHRoQ2FyZHMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJaGVhbHRoQ2FyZElkKGlkKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2hlYWx0aGNhcmQvJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUEloZWFsdGhDYXJkKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUEloZWFsdGhDYXJkcyhwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9oZWFsdGhjYXJkJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSVJlcG9ydFByb2JsZW0oJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdXRBUEloZWFsdGhDYXJkKHBhcmFtczogSGVhbHRoQ2FyZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9oZWFsdGhjYXJkLyR7cGFyYW1zLmlkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcHV0QVBJaGVhbHRoQ2FyZCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUFQSWhlYWx0aENhcmQocGFyYW1zOiBIZWFsdGhDYXJkKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2hlYWx0aGNhcmQvJHtwYXJhbXMuaWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZGVsZXRlQVBJaGVhbHRoQ2FyZCgke3BhdGh9KSByZXM6ICR7cmVzfWAsIEpTT04uc3RyaW5naWZ5KHJlcykpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElTb2NpYWxSZWxhdGlvblR5cGUoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdjZW50ZXIvc29jaWFsUmVsYXRpb25UeXBlJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJU29jaWFsUmVsYXRpb25UeXBlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWVtZXJnZW5jeUNvbnRhY3QoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL0VtZXJnZW5jeUNvbnRhY3RzJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZW1lcmdlbmN5Q29udGFjdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUEllbWVyZ2VuY3lDb250YWN0SUQoaWQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9FbWVyZ2VuY3lDb250YWN0LyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZW1lcmdlbmN5Q29udGFjdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJZW1lcmdlbmN5Q29udGFjdChwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9FbWVyZ2VuY3lDb250YWN0JztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWVtZXJnZW5jeUNvbnRhY3QoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdXRBUEllbWVyZ2VuY3lDb250YWN0KGlkOiBhbnksIHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL0VtZXJnZW5jeUNvbnRhY3QvJHtpZH1gO1xuICAgIGNvbnNvbGUubG9nKCdbRG9vbGVTZXJ2aWNlXSBwdXRBUEllbWVyZ2VuY3lDb250YWN0KCknLCBwYXJhbXMpO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHB1dEFQSWVtZXJnZW5jeUNvbnRhY3QoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkZWxldGVBUEllbWVyZ2VuY3lDb250YWN0KGlkOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvRW1lcmdlbmN5Q29udGFjdC8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGRlbGV0ZUFQSWVtZXJnZW5jeUNvbnRhY3QoJHtwYXRofSkgcmVzOiAke3Jlc31gLCBKU09OLnN0cmluZ2lmeShyZXMpKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cblxuICBnZXRBUElhYm91dFVzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnY2VudGVyL2Fib3V0JztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJYWJvdXRVcygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElhcHBvaW50bWVudEFnZW5kYSgpOiBPYnNlcnZhYmxlPGFueT57XG4gICAgbGV0IHBhdGggPSAndXNlci9hZ2VuZGEnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWFwcG9pbnRtZW50QWdlbmRhKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8vZG9jdW1lbnRzLVRyYWNraW5nXG4gIGdldEFQSWRpYWdub3N0aWNUZXN0cygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZGlhZ25vc3RpY1Rlc3RzJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkaWFnbm9zdGljVGVzdHMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZGlhZ25vc3RpY1Rlc3RUeXBlc0F2YWlsYWJsZSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2RpYWdub3N0aWNUZXN0VHlwZXMvYXZhaWxhYmxlJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZGlhZ25vc3RpY1Rlc3RUeXBlc0F2YWlsYWJsZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElkaWFnbm9zdGljVGVzdElEKGlkOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3YyL3VzZXIvZGlhZ25vc3RpY1Rlc3QvJyArIGlkO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkaWFnbm9zdGljVGVzdElEKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUElkaWFnbm9zdGljVGVzdChwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndjIvdXNlci9kaWFnbm9zdGljVGVzdHMvJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWRpYWdub3N0aWNUZXN0KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHV0QVBJZGlhZ25vc3RpY1Rlc3QoaWQsIHBhcmFtczogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2RpYWdub3N0aWNUZXN0LyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwdXRBUElkaWFnbm9zdGljVGVzdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUFQSWRpYWdub3N0aWNUZXN0KGlkKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2RpYWdub3N0aWNUZXN0LyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZGVsZXRlQVBJZGlhZ25vc3RpY1Rlc3QoJHtwYXRofSkgcmVzOiAke3Jlc31gLCBKU09OLnN0cmluZ2lmeShyZXMpKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZmlsdGVyZWREaWFnbm9zdGljVGVzdChwYXJhbXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9kaWFnbm9zdGljVGVzdHMnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIC8vIEJlZ2luIGFzc2lnbmluZyBwYXJhbWV0ZXJzXG4gICAgaWYgKHBhcmFtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBodHRwUGFyYW1zID0gKHBhcmFtcy5zdGFydF9kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdmcm9tX2RhdGUnLCBwYXJhbXMuc3RhcnRfZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgICBodHRwUGFyYW1zID0gKHBhcmFtcy5lbmRfZGF0ZSkgPyBodHRwUGFyYW1zLmFwcGVuZCgndG9fZGF0ZScsIHBhcmFtcy5lbmRfZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgICBpZiAocGFyYW1zLmRpYWdub3N0aWNUZXN0VHlwZXMpIHtcbiAgICAgICAgcGFyYW1zLmRpYWdub3N0aWNUZXN0VHlwZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoJ2RpYWdub3N0aWNfdGVzdF90eXBlX2lkW10nLCBlbGVtZW50KVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElmaWx0ZXJlZERpYWdub3N0aWNUZXN0KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG4gIC8vZm9ybXMtVHJhY2tpbmdcbiAgZ2V0QVBJZm9ybUxpc3RzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnZm9ybXMvdXNlcic7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWZvcm1MaXN0cygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgLy9ncmFwaGljcy1UcmFja2luZ1xuXG4gIGdldEFQSWVsZW1lbnRzTGlzdChmaWx0ZXI/KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2VsZW1lbnRzJyAgLyogJ3VzZXIvZWxlbWVudHNMaXN0L3YyJyAgKi9cbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChmaWx0ZXI/Lm9ubHlfd2l0aF92YWx1ZXMpPyBodHRwUGFyYW1zLmFwcGVuZCgnb25seV93aXRoX3ZhbHVlcycsIGZpbHRlcj8ub25seV93aXRoX3ZhbHVlcyk6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKGZpbHRlcj8uZ3JvdXBlZCk/IGh0dHBQYXJhbXMuYXBwZW5kKCdncm91cGVkJywgZmlsdGVyPy5ncm91cGVkKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKGZpbHRlcj8uZmlsdGVyKT8gaHR0cFBhcmFtcy5hcHBlbmQoJ2ZpbHRlcicsIGZpbHRlcj8uZmlsdGVyKSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZWxlbWVudHNMaXN0KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBnZXQgZWxlbWVudHMgd2l0aCBxdWVyeSBieSBwYXJhbWV0ZXIgZGF0ZSAgKi9cbiAgZ2V0QVBJZWxlbWVudHNMaXN0QnlEYXRlKHBhcmFtczogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2VsZW1lbnRzTGlzdC92MicgIC8qICd1c2VyL2VsZW1lbnRzTGlzdCcgICovXG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGlmKHBhcmFtcy5maWx0ZXIgPT0gJzEnKSBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoJ2ZpbHRlcicsICcxJylcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWVsZW1lbnRzTGlzdEJ5RGF0ZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJYWRkRWxlbWVudChpZCwgcGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZWxlbWVudC8nICsgaWQgKyAnL3ZhbHVlL2FkZCdcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJYWRkRWxlbWVudCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElncmFwaGljc0VsZW1lbnQoaWQ6IE9iamVjdCwgcXVlcnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZWxlbWVudC8nICsgaWQ7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocXVlcnkpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ2ludGVydmFsJywgcXVlcnkpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZ3JhcGhpY3NFbGVtZW50KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWVsZW1lbnRJRChpZDogT2JqZWN0LCBwYXJhbXM/KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB2Mi91c2VyL2VsZW1lbnQvJHtpZH1gO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8uaW50ZXJ2YWwpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ2ludGVydmFsJywgcGFyYW1zPy5pbnRlcnZhbCkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LmZyb21fZGF0ZSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnZnJvbV9kYXRlJywgcGFyYW1zPy5mcm9tX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy50b19kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCd0b19kYXRlJywgcGFyYW1zPy50b19kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8udmVyc2lvbikgPyBodHRwUGFyYW1zLmFwcGVuZCgndmVyc2lvbicsIHBhcmFtcz8udmVyc2lvbikgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCxodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElncmFwaGljc0VsZW1lbnQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZWxlbWVudEF2YWlsYWJsZUlEKGlkOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYGVsZW1lbnQvYXZhaWxhYmxlLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUEllbGVtZW50QXZhaWxhYmxlSUQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJY2F0ZWdvcnkoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2VsZW1lbnRfY2F0ZWdvcnknO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWNhdGVnb3J5KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWVsZW1lbnRHcm91cElEKGlkOiBPYmplY3QsIGZpbHRlcj8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYGNlbnRlci9lbGVtZW50R3JvdXAvJHtpZH0vZWxlbWVudHNgO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKGZpbHRlcikgPyBodHRwUGFyYW1zLmFwcGVuZCgnZmlsdGVyJywgZmlsdGVyKSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUEllbGVtZW50R3JvdXBJRCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBzZWFyY2hBUEllbGVtZW50R3JvdXAocGFyYW1zOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgXG4gICAgbGV0IHBhdGggPSAnY2VudGVyL2VsZW1lbnRHcm91cHMnXG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5maWx0ZXIpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ2ZpbHRlcicsIHBhcmFtcz8uZmlsdGVyKSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUEllbGVtZW50R3JvdXAoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIC8qKiBnZXQgZGlldHMgd2l0aCBxdWVyeSBieSBwYXJhbWV0ZXIgZGF0ZSAgKi9cbiAgZ2V0QVBJbGlzdERpZXRzQnlEYXRlKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2RpZXRzJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElsaXN0RGlldHNCeURhdGUoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZGlldHNCeURhdGUocGFyYW1zOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvZGlldGFyeUludGFrZXNgXG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdkYXRlJywgcGFyYW1zLmRhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5ncm91cGVkX2J5X3RpbWVzKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdncm91cGVkX2J5X3RpbWVzJywgcGFyYW1zLmdyb3VwZWRfYnlfdGltZXMpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWRpZXRzQnlEYXRlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWRldGFpbERpZXRzKGlkOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYGRpZXQvJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWRldGFpbERpZXRzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWRldGFpbFJlY2lwZShpZDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGBkaWV0L3JlY2VpcHQvJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWRldGFpbFJlY2lwZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKiogZ2V0IGFkdmljZXMgICoqL1xuICBnZXRBUElsaXN0QWR2aWNlcyhwYXJhbXMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvYWR2aWNlcyc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKClcbiAgICAuc2V0KCd0YWdzJywgcGFyYW1zLnRhZ3MpXG4gICAgLnNldCgnaW50ZXJhY3Rpb25zJywgcGFyYW1zLmludGVyYWN0aW9ucylcbiAgICAuc2V0KCdyZWFkaW5nVGltZScsIHBhcmFtcy5yZWFkaW5nVGltZSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWxpc3RBZHZpY2VzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gICAgLyoqIGdldCBuZXdzICAqKi9cbiAgZ2V0QVBJbGlzdE5ld3MoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL25ld3MnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWxpc3ROZXdzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWRldGFpbE5ldyhpZDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL25ldy8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZGV0YWlsTmV3KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSVNlYXJjaE5ld3MocXVlcnk6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnbmV3cyc7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocXVlcnkpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3NlYXJjaCcsIHF1ZXJ5KSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElTZWFyY2hOZXdzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSUFwcExhdGVzdFZlcnNpb24odmVyc2lvbiwgcGxhdGZvcm0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2FwcC92ZXJzaW9ucy9tdXN0LXVwZGF0ZT92ZXJzaW9uPScrdmVyc2lvbisnJnBsYXRmb3JtPScrcGxhdGZvcm07XG4gICAgY29uc29sZS5sb2cocGF0aCk7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBnZXRBUElTZWFyY2hBZHZpY2VzKHF1ZXJ5OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2FkdmljZXMnO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKHF1ZXJ5KSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdzZWFyY2gnLCBxdWVyeSkgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJU2VhcmNoQWR2aWNlcygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElkZXRhaWxBZHZpY2VzKGlkOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYGFkdmljZS8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZGV0YWlsQWR2aWNlcygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElkcnVnc0xpc3QocXVlcnk6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgZHJ1Z0ludGFrZS9saXN0YDtcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChxdWVyeSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnc2VhcmNoJywgcXVlcnkpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWRydWdzTGlzdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuXG4gIGdldEFQSWRydWdJbnRha2VCeURhdGUocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZHJ1Z0ludGFrZS9kYXRlJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkcnVnSW50YWtlQnlEYXRlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG4vLyBzZW5kIG1lZGljYXRpb24gbGlzdFxuICBnZXRBUEltZWRpY2F0aW9uTGlzdChxdWVyeTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGBzZW5kbWVkaWNhdGlvbi9saXN0YDtcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChxdWVyeSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnc2VhcmNoJywgcXVlcnkpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUEltZWRpY2F0aW9uTGlzdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElkaXJlY3Rpb25zTGlzdCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvYWRkcmVzc2VzYDtcbiAgICAvLyBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgLy8gaHR0cFBhcmFtcyA9IChxdWVyeSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnc2VhcmNoJywgcXVlcnkpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkaXJlY3Rpb25MaXN0KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBnZXRBUEltZWRpY2F0aW9uc0xpc3QoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGBzZW5kbWVkaWNhdGlvbi9saXN0YDtcbiAgICAvLyBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgLy8gaHR0cFBhcmFtcyA9IChxdWVyeSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnc2VhcmNoJywgcXVlcnkpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkaXJlY3Rpb25MaXN0KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUElzZW5kRGlyZWN0aW9uKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2FkZHJlc3MnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJc2VuZERpcmVjdGlvbigke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1dEFQSXNlbmREaXJlY3Rpb24oaWQ6IGFueSwgcGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvYWRkcmVzcy8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwdXRBUElkcnVnSW50YWtlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlQVBJc2VuZERpcmVjdGlvbihpZDogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2FkZHJlc3MvJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGRlbGV0ZUFQSW1lZGljYXRpb25QbGFuKCR7cGF0aH0pIHJlczogJHtyZXN9YCwgSlNPTi5zdHJpbmdpZnkocmVzKSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJbWVkaWNhdGlvblNlbmRQZXRpdGlvbihwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnc2VuZG1lZGljYXRpb24nO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJc2VuZERpcmVjdGlvbigke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUElkcnVnSW50YWtlKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2RydWdJbnRha2UnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElkcnVnSW50YWtlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSWNoYW5nZVN0YXRlZHJ1Z0ludGFrZShpZDogT2JqZWN0LCBzdGF0ZTogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2RydWdJbnRha2UvJHtpZH0vc2V0LyR7c3RhdGV9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWRydWdJbnRha2UoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJbWVkaWNhdGlvblBsYW4ocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvbWVkaWNhdGlvblBsYW5gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElkcnVnSW50YWtlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHV0QVBJbWVkaWNhdGlvblBsYW4oaWQ6IGFueSwgcGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvbWVkaWNhdGlvblBsYW4vJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcHV0QVBJZHJ1Z0ludGFrZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUFQSW1lZGljYXRpb25QbGFuKGlkOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvbWVkaWNhdGlvblBsYW4vJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGRlbGV0ZUFQSW1lZGljYXRpb25QbGFuKCR7cGF0aH0pIHJlczogJHtyZXN9YCwgSlNPTi5zdHJpbmdpZnkocmVzKSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUEltZWRpY2F0aW9uUGxhbihpZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9tZWRpY2F0aW9uUGxhbi8ke2lkfWBcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUEltZWRpY2F0aW9uUGxhbigke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElnYW1lcygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZ2FtZXMnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWdhbWVzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICAvKiogZ2V0IGdhbWVzIHdpdGggcXVlcnkgYnkgcGFyYW1ldGVyIGRhdGUgICovXG4gIGdldEFQSWdhbWVzQnlEYXRlKGZyb21fZGF0ZTogYW55LCB0b19kYXRlOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZ2FtZVBsYXlzL3NjaGVkdWxlZCc7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAoZnJvbV9kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdmcm9tX2RhdGUnLCBmcm9tX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAodG9fZGF0ZSkgPyBodHRwUGFyYW1zLmFwcGVuZCgndG9fZGF0ZScsIHRvX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWdhbWVzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBnZXRBUElnYW1lSWQoaWQpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvZ2FtZS8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZ2FtZUlkKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWFnZW5kYSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvYWdlbmRhJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElhZ2VuZGEoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJYWxsQWdlbmRhKHBhcmFtcz8pOiBPYnNlcnZhYmxlPGFueT57XG4gICAgbGV0IHBhdGggPSAndXNlci9hZ2VuZGEvdjInO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gcGFyYW1zPy5mcm9tX2RhdGU/IGh0dHBQYXJhbXMuYXBwZW5kKCdmcm9tX2RhdGUnLCBwYXJhbXM/LmZyb21fZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IHBhcmFtcz8udG9fZGF0ZT8gaHR0cFBhcmFtcy5hcHBlbmQoJ3RvX2RhdGUnLCBwYXJhbXM/LnRvX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSBwYXJhbXM/LmZpbHRlcl9ieV9kYXRlPyBodHRwUGFyYW1zLmFwcGVuZCgnZmlsdGVyX2J5X2RhdGUnLCBwYXJhbXM/LmZpbHRlcl9ieV9kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8ud2l0aF9tZWRpY2FsX3Byb2NlZHVyZXMgIT0gdW5kZWZpbmVkKT8gaHR0cFBhcmFtcy5hcHBlbmQoJ3dpdGhfbWVkaWNhbF9wcm9jZWR1cmVzJywgcGFyYW1zPy53aXRoX21lZGljYWxfcHJvY2VkdXJlcykgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/Lm9yZGVyICE9IHVuZGVmaW5lZCk/IGh0dHBQYXJhbXMuYXBwZW5kKCdvcmRlcicsIHBhcmFtcz8ub3JkZXIpIDogaHR0cFBhcmFtc1xuXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWFwcG9pbnRtZW50QWdlbmRhVjIoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJYWdlbmRhSUQoaWQpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvYWdlbmRhLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElhZ2VuZGFJRCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJYWRkQWdlbmRhKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2FnZW5kYS8nXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWFkZEFnZW5kYSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkZWxldGVBUElhZGRBZ2VuZGEoaWQ6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhcmFtcyA9IHsgYWdlbmRhOiBpZCB9XG4gICAgbGV0IHBhdGggPSAndXNlci9hZ2VuZGEvZGVsZXRlJ1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGRlbGV0ZUFQSWFkZEFnZW5kYSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdXRBUElhZ2VuZGEoaWQ6IGFueSwgcGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvYWdlbmRhLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHB1dEFQSWFnZW5kYSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElhbGxvd2VkQ29udGFjdHMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2FsbG93ZWRDb250YWN0c2A7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKCd3aXRoRGVwYXJ0bWVudHMnLCAnMScpXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWFsbG93ZWRDb250YWN0cygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIGxldCBhbGxvd2VkID0gcmVzLmFsbG93ZWRcbiAgICAgICAgaWYocmVzLmFsbG93ZWQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgYWxsb3dlZCA9IFtdXG4gICAgICAgIHJldHVybiBhbGxvd2VkO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElzdGFmZklkKGlkKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGBzdGFmZi8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJc3RhZmZJZCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKiogZ2V0IGdhbWVzIHdpdGggcXVlcnkgYnkgcGFyYW1ldGVyIGRhdGUgICovXG4gIGdldEFQSVVzZXJNZXNzYWdlcygpOiBPYnNlcnZhYmxlPFNoZWxsQ2hhdE1vZGVsW10+IHtcblxuICAgIGxldCBwYXRoID0gJ21lc3NhZ2UvdXNlcic7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcblxuICAgICAgICBjb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJVXNlck1lc3NhZ2VzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgaWYocmVzLmxlbmd0aCA9PSAwKVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIHJldHVybiByZXMubWVzc2FnZXMgYXMgU2hlbGxDaGF0TW9kZWxbXTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICAvLyBnZXQgdGhlIGNvbXBhbnkgZGV0YWlscywgYSBzdWJzZXQgb2YgdGhlIHVzZXIgZGF0YVxuICBnZXRVc2VyU3Vic2V0RGF0YSgpOiBPYnNlcnZhYmxlPFNoZWxsQ2hhdE1vZGVsPiB7XG4gICAgbGV0IHBhdGggPSAnbWVzc2FnZS91c2VyJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuXG4gICAgY29uc3QgZGF0YU9ic2VydmFibGUgPSB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KTtcblxuICAgIHJldHVybiBkYXRhT2JzZXJ2YWJsZS5waXBlKFxuICAgICAgbWFwKChqc29uUmVzcG9uc2UpID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWREYXRhOiBTaGVsbENoYXRNb2RlbCA9IHtcbiAgICAgICAgICAuLi5qc29uUmVzcG9uc2UubWVzc2FnZXNcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkRGF0YTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuLyoqIFJlbWluZGVycyAqL1xuICBnZXRBUElyZW1pbmRlcnMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL3JlbWluZGVyJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElyZW1pbmRlcnMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJcmVtaW5kZXJJRChpZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9yZW1pbmRlci8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJcmVtaW5kZXJJRCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJYWRkUmVtaW5kZXIocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvcmVtaW5kZXIvJ1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElhZGRSZW1pbmRlcigke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkZWxldGVBUElSZW1pbmRlcihpZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9yZW1pbmRlci8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZGVsZXRlQVBJUmVtaW5kZXIoJHtwYXRofSkgcmVzOiAke3Jlc31gLCBKU09OLnN0cmluZ2lmeShyZXMpKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZUFQSVJlbWluZGVyKGlkOiBhbnksIHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL3JlbWluZGVyLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHVwZGF0ZUFQSVJlbWluZGVyKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlQVBJdXNlcihwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlcmA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSB1cGRhdGVBUElSZW1pbmRlcigke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZUFQSUltYWdldXNlcihwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9pbWFnZWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSB1cGRhdGVBUElSZW1pbmRlcigke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUFQSUltYWdldXNlcigpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvaW1hZ2VgO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHVwZGF0ZUFQSVJlbWluZGVyKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG4gIHBvc3RBUElDb250ZW50U3RhdHVzKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdjb250ZW50L3N0YXR1cydcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJQ29udGVudFN0YXR1cygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElwYXRpZW50cygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvcGF0aWVudHMnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSXJlbWluZGVycygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElMZXZlbEluZm8oY2hhbGxlbmdlSWQsIGxldmVsSWQsIHBhcmFtcz8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvY2hhbGxlbmdlLycrY2hhbGxlbmdlSWQrJy9sZXZlbC8nKyBsZXZlbElkKycvZ29hbHMnXG5cbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJTGV2ZWxJbmZvKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSUNoYWxsZW5nZShjaGFsbGVuZ2VJZCwgcGFyYW1zPyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9jaGFsbGVuZ2UvJytjaGFsbGVuZ2VJZFxuXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSUNoYWxsZW5nZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElDaGFsbGVuZ2VzKCBwYXJhbXM/KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2NoYWxsZW5nZXMnXG5cbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJQ2hhbGxlbmdlcygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuXG5cblxuICBnZXRBUEltZXNzYWdlKGlkLCBwYXJhbXMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvbWVzc2FnZS8nICsgaWRcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IHBhcmFtcz8ucGFnZT8gaHR0cFBhcmFtcy5hcHBlbmQoJ3BhZ2UnLCBwYXJhbXM/LnBhZ2UpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSBwYXJhbXM/LnVzZXI/IGh0dHBQYXJhbXMuYXBwZW5kKCd1c2VyJywgcGFyYW1zPy51c2VyKSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUEllbGVtZW50c0xpc3QoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJRm9ybUpTT04oZm9ybSwgcGFyYW1zPyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgZm9ybS8ke2Zvcm19L2Zvcm1GaWVsZHNgO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8uZm9ybUFuc3dlcikgPyBodHRwUGFyYW1zLmFwcGVuZCgnZm9ybUFuc3dlcicsIHBhcmFtcz8uZm9ybUFuc3dlcikgIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5nYW1lX3BsYXlfaWQpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ2dhbWVfcGxheV9pZCcsIHBhcmFtcz8uZ2FtZV9wbGF5X2lkKSAgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJcmVtaW5kZXJzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUElGb3JtSlNPTihmb3JtLCBwYXJhbXMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYGZvcm1maWVsZC9jb25kaXRpb25hbC8ke2Zvcm19L2ZpZWxkLyR7cGFyYW1zLmZvcm1GaWVsZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElDb250ZW50U3RhdHVzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUElGb3JtRmlsbChwYXJhbXMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYGZvcm0vZmlsbC9gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElDb250ZW50U3RhdHVzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSU5vdGlmaWNhdGlvbnNDb3VudCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvbm90aWZpY2F0aW9ucy9jb3VudCc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJTm90aWZpY2F0aW9ucygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElOb3RpZmljYXRpb25zKHBhcmFtcz8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvbm90aWZpY2F0aW9ucyc7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5yZWFkKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdyZWFkJywgcGFyYW1zPy5yZWFkKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8ud2l0aFBhZ2luYXRlID09IDEpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3dpdGhQYWdpbmF0ZScsIHBhcmFtcz8ud2l0aFBhZ2luYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8ucGFnZSA+IDApID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3BhZ2UnLCBwYXJhbXM/LnBhZ2UpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSU5vdGlmaWNhdGlvbnMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSU5vdGlmaWNhdGlvblJlYWQoaWQpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvbm90aWZpY2F0aW9uL3JlYWRgO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBpZCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldChlbmRwdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChlbmRwdCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0KGVuZHB0LCBpdGVtcyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChlbmRwdCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBpdGVtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHNldFB1c2hOb3RpZmljYXRpb24ocHVzaE5vdGlmaWNhdGlvbjogYW55KXtcbiAgICB0aGlzLnB1c2hOb3RpZmljYXRpb24gPSBwdXNoTm90aWZpY2F0aW9uO1xuICB9XG5cbiAgZ2V0UHVzaE5vdGlmaWNhdGlvbigpe1xuICAgcmV0dXJuIHRoaXMucHVzaE5vdGlmaWNhdGlvbjtcbiAgfVxuXG4gIGdldEFQSVVzZXJJbWFnZSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvaW1hZ2UnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWdhbWVzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSUZvcm1zQnlEYXRlKHBhcmFtczogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGByZWhhYmlsaWZ5L3NoYXJlZGNhcmVwbGFuL2Zvcm1zYDtcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LmRhdGUpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ2RhdGUnLCBwYXJhbXMuZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/Lmdyb3VwZWRfYnlfdGltZXMpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ2dyb3VwZWRfYnlfdGltZXMnLCBwYXJhbXMuZ3JvdXBlZF9ieV90aW1lcykgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZGlldHNCeURhdGUoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSW1lZGljYWxQcm9jZWR1cmVzKHBhcmFtcz86IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9tZWRpY2FsUHJvY2VkdXJlc2A7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWRydWdJbnRha2UoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuXG59XG4iXX0=
|
|
1735
|
+
}], ctorParameters: () => [{ type: i1.AuthenticationService }, { type: i2.FileTransfer }, { type: i3.File }, { type: i4.HttpService }, { type: i5.ApiEndpointsService }, { type: i6.Events }, { type: i7.Platform }, { type: i8.Router }, { type: i7.AlertController }, { type: i9.TranslateService }] });
|
|
1736
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9vbGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NlcnZpY2UtbGliL3NyYy9saWIvc2VydmljZXMvZG9vbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBNkIsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzFFLE9BQU8sRUFBZSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFTL0QsTUFBTSxPQUFPLFlBQVk7SUFFdkIsWUFDVSxXQUFrQyxFQUNsQyxRQUFzQixFQUN0QixJQUFVLEVBQ1YsSUFBaUIsRUFDakIsR0FBd0IsRUFDekIsTUFBYyxFQUNiLFFBQWtCLEVBQ25CLE1BQWMsRUFDZCxlQUFnQyxFQUNoQyxTQUEyQjtRQVQxQixnQkFBVyxHQUFYLFdBQVcsQ0FBdUI7UUFDbEMsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQUN0QixTQUFJLEdBQUosSUFBSSxDQUFNO1FBQ1YsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixRQUFHLEdBQUgsR0FBRyxDQUFxQjtRQUN6QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2IsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNuQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGNBQVMsR0FBVCxTQUFTLENBQWtCO0lBQUksQ0FBQztJQUl6QyxVQUFVLENBQUMsS0FBYSxFQUFFLEVBQVc7UUFFbkMscUNBQXFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFH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QUM7SUFDSixDQUFDO0lBR0QsZUFBZTtRQUNiLElBQUksSUFBSSxHQUFHLGdCQUFnQixDQUFDO1FBQzVCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUNqQyxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLHNFQUFzRTtZQUN0RSxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOytHQWh1RVUsWUFBWTttSEFBWixZQUFZLGNBRlgsTUFBTTs7NEZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWxlVHJhbnNmZXIsIEZpbGVVcGxvYWRPcHRpb25zLCBGaWxlVHJhbnNmZXJPYmplY3QgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvZmlsZS10cmFuc2Zlci9uZ3gnO1xuaW1wb3J0IHsgQXBpRW5kcG9pbnRzU2VydmljZSB9IGZyb20gJy4vYXBpLWVuZHBvaW50cy5zZXJ2aWNlJztcbmltcG9ydCB7IEV2ZW50cyB9IGZyb20gJy4vZXZlbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICcuL2h0dHAuc2VydmljZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciwgVGltZW91dEVycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBbGVydENvbnRyb2xsZXIsIFBsYXRmb3JtIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgRmlsZSB9IGZyb20gJ0Bhd2Vzb21lLWNvcmRvdmEtcGx1Z2lucy9maWxlL25neCc7XG5pbXBvcnQgeyBDYXBhY2l0b3IgfSBmcm9tICdAY2FwYWNpdG9yL2NvcmUnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGVsYXksIGZpbHRlciwgbWFwLCBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEhlYWx0aENhcmQgfSBmcm9tICcuLi9tb2RlbHMvdXNlcic7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBRdWVyeVN0cmluZ1BhcmFtZXRlcnMgfSBmcm9tICcuLi91dGlscy9xdWVyeS1zdHJpbmctcGFyYW1ldGVycyc7XG5pbXBvcnQgeyBTaGVsbENoYXRNb2RlbCwgU2hlbGxNZXNzYWdlTW9kZWwsIFNoZWxsUmVjaXBpZW50TW9kZWwgfSBmcm9tICcuLi91dGlscy9jaGF0UGFyYW1ldGVycyc7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tICcuL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEb29sZVNlcnZpY2Uge1xuICBwdXNoTm90aWZpY2F0aW9uOiBhbnk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zZmVyOiBGaWxlVHJhbnNmZXIsXG4gICAgcHJpdmF0ZSBmaWxlOiBGaWxlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcGk6IEFwaUVuZHBvaW50c1NlcnZpY2UsXG4gICAgcHVibGljIGV2ZW50czogRXZlbnRzLFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcbiAgICBwdWJsaWMgYWxlcnRDb250cm9sbGVyOiBBbGVydENvbnRyb2xsZXIsXG4gICAgcHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSkgeyB9XG5cbiAgcHVibGljIHNlbGVjdGVkRGF0ZTogRGF0ZTtcblxuICB1cGxvYWRGaWxlKGltYWdlOiBzdHJpbmcsIGlkPzogc3RyaW5nKSB7XG5cbiAgICAvLy8vY29uc29sZS5sb2coXCJ1cGxvYWRpbmcgXCIsIGltYWdlKTtcbiAgICBjb25zdCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b2tlbicpO1xuICAgIGxldCBvcHRpb25zOiBGaWxlVXBsb2FkT3B0aW9ucyA9IHtcbiAgICAgIGZpbGVLZXk6ICdmaWxlJyxcbiAgICAgIGZpbGVOYW1lOiAnbmFtZS5qcGcnLFxuXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgdG9rZW4sXG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIGlkOiBpZFxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGZpbGVUcmFuc2ZlcjogRmlsZVRyYW5zZmVyT2JqZWN0ID0gdGhpcy50cmFuc2Zlci5jcmVhdGUoKTtcbiAgICAvLyBBZGQgZmlsZXMgZm9yIG5ldyBvciBzYXZlZCBkaWFnbm9zdGljcy4gXG4gICAgLy8gdXNlcyBkaWFnbm9zdGljL21lZGlhIHdoZW4gZGlhZ25vc3RpYyBpcyBuZXcgXG4gICAgLy9jb25zdCBlbmRwb2ludCA9IGlkID8gdGhpcy5hcGkuZ2V0RW5kcG9pbnQoJ2RpYWdub3N0aWMvbWVkaWEnKTp0aGlzLmFwaS5nZXRFbmRwb2ludCgnbWVkaWEvdXBsb2FkL3RlbXAnKSA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludCgnbWVkaWEvdXBsb2FkL3RlbXAnKTtcbiAgICAvLy8vLy9jb25zb2xlLmxvZyhcIiogdXBsb2FkRmlsZSBlbmRwb2ludFwiLCBlbmRwb2ludCk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZmlsZVRyYW5zZmVyLnVwbG9hZChpbWFnZSwgZW5kcG9pbnQsIG9wdGlvbnMpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKGRhdGEucmVzcG9uc2UpKTtcbiAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGVycik7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSlcbiAgICB9KVxuXG4gIH1cblxuICBcblxuICBwb3N0QVBJQWRkTWVkaWEocGFyYW1zOiBPYmplY3Qpe1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQoJ21lZGlhL2FkZCcpO1xuICAgXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0Rm9ybShlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElBZGRNZWRpYSgke2VuZHBvaW50fSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIFxuICB1cGxvYWRGaWxlVG9Nb2RlbChpbWFnZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHBhcmFtczogYW55KSB7XG4gICAgLy8vLy8vY29uc29sZS5sb2coXCJ1cGxvYWRpbmcgXCIsIGltYWdlKTtcbiAgICBjb25zdCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b2tlbicpO1xuICAgIGxldCBvcHRpb25zOiBGaWxlVXBsb2FkT3B0aW9ucyA9IHtcbiAgICAgIGZpbGVLZXk6ICdmaWxlJyxcbiAgICAgIGZpbGVOYW1lOiBuYW1lLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIHRva2VuLFxuICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICAgIHBhcmFtc1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVUcmFuc2ZlcjogRmlsZVRyYW5zZmVyT2JqZWN0ID0gdGhpcy50cmFuc2Zlci5jcmVhdGUoKTtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KCdtZWRpYS9hZGQnKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZmlsZVRyYW5zZmVyLnVwbG9hZChpbWFnZSwgZW5kcG9pbnQsIG9wdGlvbnMpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhKU09OLnBhcnNlKGRhdGEucmVzcG9uc2UpKTtcbiAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKGRhdGEucmVzcG9uc2UpKTtcbiAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGVycik7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSlcbiAgICB9KVxuXG4gIH1cblxuICB1cGxvYWRNZXNzYWdlSW1hZ2UoaWRNZXNzYWdlSGVhZGVyLCBpZFVzZXJUbywgbWVzc2FnZSwgZmlsZVVybCwgaWRfdXN1YXJpX2FtaXEpIHtcblxuICAgIGNvbnN0IHRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Rva2VuJyk7XG5cbiAgICBsZXQgb3B0aW9uczogRmlsZVVwbG9hZE9wdGlvbnMgPSB7XG4gICAgICBmaWxlS2V5OiAnZmlsZScsXG4gICAgICBmaWxlTmFtZTogJ25hbWUucGRmJywgLy9UT0RPOiAnbmFtZS5qcGcnXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgdG9rZW4sXG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIGlkVXNlcjogaWRfdXN1YXJpX2FtaXEsXG4gICAgICAgIHNlY3JldDogdG9rZW4sXG4gICAgICAgIHZhbHVlOiBcIlwiLFxuICAgICAgICBpZDogaWRNZXNzYWdlSGVhZGVyXG4gICAgICB9XG4gICAgfVxuICAgIC8vLy8vL2NvbnNvbGUubG9nKFwib3B0aW9uczogXCIsIG9wdGlvbnMpO1xuXG4gICAgY29uc3QgZmlsZVRyYW5zZmVyOiBGaWxlVHJhbnNmZXJPYmplY3QgPSB0aGlzLnRyYW5zZmVyLmNyZWF0ZSgpO1xuXG4gICAgZmlsZVRyYW5zZmVyLm9uUHJvZ3Jlc3MoKHByb2dyZXNzRXZlbnQpID0+IHtcbiAgICAgIGlmIChwcm9ncmVzc0V2ZW50Lmxlbmd0aENvbXB1dGFibGUpIHtcbiAgICAgICAgdmFyIHBlcmMgPSBNYXRoLmZsb29yKHByb2dyZXNzRXZlbnQubG9hZGVkIC8gcHJvZ3Jlc3NFdmVudC50b3RhbCAqIDEwMCk7XG4gICAgICAgIHRoaXMuZXZlbnRzLnB1Ymxpc2goXCJ1cGxvYWRNZXNzYWdlSW1hZ2VcIiwgeyBmaWxlVXJsLCBwZXJjIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coXCJwcm9ncmVzc0V2ZW50IC0gXCIsIHByb2dyZXNzRXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludCgnbWVzc2FnZScpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZpbGVUcmFuc2Zlci51cGxvYWQoZmlsZVVybCwgZW5kcG9pbnQsIG9wdGlvbnMpXG4gICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKFwic3VjY2VzcyBmaWxlVHJhbnNmZXIudXBsb2FkXCIsIEpTT04ucGFyc2UoZGF0YS5yZXNwb25zZSkpO1xuICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShkYXRhLnJlc3BvbnNlKSk7XG4gICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhcIioqIGVycm9yICoqIGZpbGVUcmFuc2Zlci51cGxvYWQ6IFwiLCBlcnIpO1xuICAgICAgICAgIHJlamVjdChmaWxlVHJhbnNmZXIudXBsb2FkKTtcbiAgICAgICAgfSlcbiAgICB9KVxuXG4gIH1cblxuICBiNjR0b0Jsb2IoYjY0RGF0YSwgY29udGVudFR5cGUgPSAnJywgc2xpY2VTaXplID0gNTEyKSB7XG4gICAgY29uc3QgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGI2NERhdGEpO1xuICAgIGNvbnN0IGJ5dGVBcnJheXMgPSBbXTtcblxuICAgIGZvciAobGV0IG9mZnNldCA9IDA7IG9mZnNldCA8IGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aDsgb2Zmc2V0ICs9IHNsaWNlU2l6ZSkge1xuICAgICAgY29uc3Qgc2xpY2UgPSBieXRlQ2hhcmFjdGVycy5zbGljZShvZmZzZXQsIG9mZnNldCArIHNsaWNlU2l6ZSk7XG5cbiAgICAgIGNvbnN0IGJ5dGVOdW1iZXJzID0gbmV3IEFycmF5KHNsaWNlLmxlbmd0aCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGJ5dGVOdW1iZXJzW2ldID0gc2xpY2UuY2hhckNvZGVBdChpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xuICAgICAgYnl0ZUFycmF5cy5wdXNoKGJ5dGVBcnJheSk7XG4gICAgfVxuXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKGJ5dGVBcnJheXMsIHsgdHlwZTogY29udGVudFR5cGUgfSk7XG4gICAgcmV0dXJuIGJsb2I7XG4gIH1cblxuICBkb3dubG9hZCh1cmwpIHtcbiAgICBjb25zdCBmaWxlVHJhbnNmZXI6IEZpbGVUcmFuc2Zlck9iamVjdCA9IHRoaXMudHJhbnNmZXIuY3JlYXRlKCk7XG4gICAgdmFyIHBhdGggPSBudWxsO1xuICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzKCdpb3MnKSkge1xuICAgICAgcGF0aCA9IHRoaXMuZmlsZS5kb2N1bWVudHNEaXJlY3Rvcnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhdGggPSB0aGlzLmZpbGUuZGF0YURpcmVjdG9yeTtcbiAgICB9XG4gICAgZmlsZVRyYW5zZmVyLmRvd25sb2FkKHVybCwgcGF0aCArICdmaWxlLnBkZicpLnRoZW4oKGVudHJ5KSA9PiB7XG4gICAgICAvLy8vY29uc29sZS5sb2coJ2Rvd25sb2FkIGNvbXBsZXRlOiAnICsgZW50cnkudG9VUkwoKSk7XG4gICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAvLyBoYW5kbGUgZXJyb3JcbiAgICB9KTtcbiAgfVxuXG4gIGRvd25sb2FkRmlsZSh1cmwsIGRlc3RpbmF0aW9uKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICB2YXIgcmVzdWx0OiBhbnkgPSBbXTtcbiAgICBjb25zdCBmaWxlVHJhbnNmZXI6IEZpbGVUcmFuc2Zlck9iamVjdCA9IHRoaXMudHJhbnNmZXIuY3JlYXRlKCk7XG4gICAgdmFyIHBhdGggPSBudWxsO1xuXG4gICAgaWYgKHRoaXMucGxhdGZvcm0uaXMoJ2lvcycpKSB7XG4gICAgICBwYXRoID0gdGhpcy5maWxlLmRvY3VtZW50c0RpcmVjdG9yeTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aCA9IHRoaXMuZmlsZS5kYXRhRGlyZWN0b3J5O1xuICAgIH1cblxuICAgIC8vLy8vL2NvbnNvbGUubG9nKFwiZG93bmxvYWRGaWxlXCIsIHVybCwgZGVzdGluYXRpb24sICdwYXRoLGRlc3RpbmF0aW9uJywgcGF0aCwgZGVzdGluYXRpb24pO1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgIC8vLy8vL2NvbnNvbGUubG9nKFwiYmVmb3JlIENoZWNrRmlsZVwiLCB0aGlzLmZpbGUpO1xuICAgICAgdGhpcy5maWxlLmNoZWNrRmlsZShwYXRoLCBkZXN0aW5hdGlvbikudGhlbihyZXMgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhcIipyZXMqXCIsIHJlcyk7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhcImV4aXN0c1wiLCByZXMpO1xuICAgICAgICAgIHJlc3VsdFtcInN1Y2Nlc3NcIl0gPSB0cnVlO1xuICAgICAgICAgIHJlc3VsdFtcImRvd25sb2FkZWRcIl0gPSB0cnVlO1xuICAgICAgICAgIHJlc3VsdFtcImZpbGVcIl0gPSBwYXRoICsgZGVzdGluYXRpb247Ly9ub3JtYWxpemVVUkwodGhpcy5maWxlLmNhY2hlRGlyZWN0b3J5ICsgZGVzdGluYXRpb24pO1xuICAgICAgICAgIHJlc3VsdFtcImZpbGVOb3JtYWxpemVkXCJdID0gQ2FwYWNpdG9yLmNvbnZlcnRGaWxlU3JjKHBhdGggKyBkZXN0aW5hdGlvbik7XG4gICAgICAgICAgcmV0dXJuIG9ic2VydmVyLm5leHQocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhcIm5vdCBleGlzdHNcIik7XG4gICAgICAgIGZpbGVUcmFuc2Zlci5vblByb2dyZXNzKGV2ZW50ID0+IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZGVzY2FycmVndWVtXG4gICAgICAgICAgaWYgKGV2ZW50Lmxlbmd0aENvbXB1dGFibGUpIHtcbiAgICAgICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsKTtcbiAgICAgICAgICAgIHJlc3VsdFtcInN0YXR1c1wiXSA9IFwiZG93bmxvYWRpbmdcIjtcbiAgICAgICAgICAgIHJlc3VsdFtcImRvd25sb2FkZWRcIl0gPSBmYWxzZTtcbiAgICAgICAgICAgIHJlc3VsdFtcInBlcmNlbnRcIl0gPSBNYXRoLnJvdW5kKChldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCkgKiAxMDApO1xuICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyLm5leHQocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmaWxlVHJhbnNmZXIuZG93bmxvYWQodXJsLCBwYXRoICsgZGVzdGluYXRpb24pLnRoZW4oKGVudHJ5KSA9PiB7XG4gICAgICAgICAgLy8vLy8vY29uc29sZS5sb2coJypkb3dubG9hZDoqICcgKyB1cmwgKyBcIiBcIiArIGVudHJ5LnRvVVJMKCkpO1xuICAgICAgICAgIHJlc3VsdFtcInN1Y2Nlc3NcIl0gPSB0cnVlO1xuICAgICAgICAgIHJlc3VsdFtcImRvd25sb2FkZWRcIl0gPSB0cnVlO1xuICAgICAgICAgIHJlc3VsdFtcImZpbGVcIl0gPSBlbnRyeS50b1VSTCgpOy8vbm9ybWFsaXplVVJMKHRoaXMuZmlsZS5jYWNoZURpcmVjdG9yeSArIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgICByZXN1bHRbXCJmaWxlTm9ybWFsaXplZFwiXSA9IENhcGFjaXRvci5jb252ZXJ0RmlsZVNyYyhwYXRoICsgZGVzdGluYXRpb24pO1xuICAgICAgICAgIHJldHVybiBvYnNlcnZlci5uZXh0KHJlc3VsdCk7XG4gICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgICByZXN1bHRbXCJzdWNjZXNzXCJdID0gZmFsc2U7XG4gICAgICAgICAgcmVzdWx0W1wiZG93bmxvYWRlZFwiXSA9IGZhbHNlO1xuICAgICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKFwiZXJyb3IgZG93bmxvYWQgXCIgKyB1cmwpO1xuICAgICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICAgICAgcmV0dXJuIG9ic2VydmVyLm5leHQocmVzdWx0KTtcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlRmlsZShpZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgbWVkaWEvJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZGVsZXRlRmlsZSgke3BhdGh9KSByZXM6ICR7cmVzfWAsIEpTT04uc3RyaW5naWZ5KHJlcykpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBzaG93QWxlcnQobWVzc2FnZTogc3RyaW5nKSB7XG5cbiAgICByZXR1cm4gdGhpcy5hbGVydENvbnRyb2xsZXIuY3JlYXRlKHtcbiAgICAgIGNzc0NsYXNzOiAnbXktYWxlcnQtY2xhc3MnLFxuICAgICAgLy9tb2RlOiAnaW9zJyxcbiAgICAgIGhlYWRlcjogJ0luZm8nLFxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogZmFsc2UsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiAnQWNlcHRhcicsXG4gICAgICAgICAgcm9sZTogJ2NvbmZpcm0nLFxuICAgICAgICAgIGNzc0NsYXNzOiAnb25seUJ1dHRvbicsXG4gICAgICAgICAgaGFuZGxlcjogKGJsYWgpID0+IHtcbiAgICAgICAgICAgIC8vLy9jb25zb2xlLmxvZygnW0xhbmRpbmdQYWdlXSBBbGVydENvbmZpcm0gQ2FuY2VsJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgfVxuXG4gIGFzeW5jIHNob3dBbGVydEFuZFJldHVybihoZWFkZXI6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBpc0Rpc21pc3M/OiBib29sZWFuLCByb3V0ZT86IHN0cmluZykge1xuICAgIC8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHNob3dBbGVydEFuZFJldHVybigpYCk7XG4gICAgbGV0IGRpc21pc3MgPSAoaXNEaXNtaXNzICE9PSB1bmRlZmluZWQpID8gaXNEaXNtaXNzIDogZmFsc2VcbiAgICBjb25zdCBhbGVydCA9IGF3YWl0IHRoaXMuYWxlcnRDb250cm9sbGVyLmNyZWF0ZSh7XG4gICAgICBjc3NDbGFzczogJ215LWFsZXJ0LWNsYXNzJyxcbiAgICAgIC8vbW9kZTogJ2lvcycsXG4gICAgICBoZWFkZXI6IGhlYWRlcixcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICBiYWNrZHJvcERpc21pc3M6IGRpc21pc3MsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiAnQWNlcHRhcicsXG4gICAgICAgICAgaGFuZGxlcjogKGJsYWgpID0+IHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ0NvbmZpcm0gT0s6IGJsYWgnKTtcbiAgICAgICAgICAgIGlmIChyb3V0ZSAhPT0gdW5kZWZpbmVkICYmIHJvdXRlICE9PSBudWxsKVxuICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJvdXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcbiAgICBhd2FpdCBhbGVydC5wcmVzZW50KCk7XG4gIH1cblxuICBhc3luYyBwcmVzZW50QWxlcnQobWVzc2FnZSwgYnV0dG9uPzogc3RyaW5nKSB7XG4gICAgbGV0IGJ1dHRvbk5hbWUgPSAoYnV0dG9uICE9PSB1bmRlZmluZWQpID8gYnV0dG9uIDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnbGFuZGluZy5hY2NlcHQtYnRuJyk7XG4gICAgY29uc3QgYWxlcnQgPSBhd2FpdCB0aGlzLmFsZXJ0Q29udHJvbGxlci5jcmVhdGUoe1xuICAgICAgY3NzQ2xhc3M6ICdteS1hbGVydC1jbGFzcycsXG4gICAgICAvL21vZGU6ICdpb3MnLFxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IGJ1dHRvbk5hbWUsXG4gICAgICAgICAgcm9sZTogJ2NvbmZpcm0nLFxuICAgICAgICAgIGNzc0NsYXNzOiAnb25seUJ1dHRvbicsXG4gICAgICAgICAgaGFuZGxlcjogKGJsYWgpID0+IHtcbiAgICAgICAgICAgIC8vLy9jb25zb2xlLmxvZygnW0xhbmRpbmdQYWdlXSBBbGVydENvbmZpcm0gQ2FuY2VsJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG4gICAgYXdhaXQgYWxlcnQucHJlc2VudCgpO1xuICB9XG5cbiAgZ2V0RmFtaWx5VW5pdElEKCk6IEh0dHBQYXJhbXMge1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBsZXQgdXNlciA9IHRoaXMuYXV0aFNlcnZpY2U/LnVzZXJcbiAgICByZXR1cm4gaHR0cFBhcmFtcyA9ICh1c2VyLmZhbWlseVVuaXQpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3VzZXInLCB1c2VyLmZhbWlseVVuaXQpIDogaHR0cFBhcmFtc1xuICB9XG5cbiAgZ2V0QVBJTGVnYWxBbmRQb2xpY3koKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdjZW50ZXIvbGVnYWwtdGVybS1hbmQtcHJpdmFjeS1wb2xpY3kvbGFzdCc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSUxlZ2FsQW5kUG9saWN5KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0QVBJTGVnYWxJbmZvcm1hdGlvbigpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvbGVnYWxUZXJtL2xhc3RBY2NlcHRlZCc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSUxlZ2FsSW5mb3JtYXRpb24oJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApXG4gIH1cbiAgcG9zdEFQSUxlZ2FsQ29uZmlybWF0aW9uKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2xlZ2FsVGVybS9sYXN0QWNjZXB0ZWQnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJQ29uZmlybWF0aW9uTGVnYWwoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJUmVqZWN0TGVnYWxDb25maXJtYXRpb24ocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvbGVnYWxUZXJtL2xhc3REZWNsaW5lZCc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElDb25maXJtYXRpb25MZWdhbCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUElwYXNzd29yZFJlY292ZXJ5KHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdwYXRpZW50L2ZvcmdvdCdcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSXBhc3N3b3JkUmVjb3ZlcnkoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJU3RhZmZTbG90cyhwYXJhbXM6IHsgaWQ6IG51bWJlciwgZGF0ZTogc3RyaW5nIH0pIHtcblxuICAgIGxldCBwYXRoID0gYHN0YWZmLyR7cGFyYW1zLmlkfS9hdmFpbGFiaWxpdHlgO1xuICAgIGxldCBlbmRwb2ludDogc3RyaW5nO1xuICAgIGlmIChwYXJhbXMuZGF0ZSAhPT0gXCJcIikge1xuICAgICAgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludFdpdGhQYXJhbWV0ZXJzKHBhdGgsIChxczogUXVlcnlTdHJpbmdQYXJhbWV0ZXJzKSA9PiBxcy5wdXNoKCdkYXRlJywgcGFyYW1zLmRhdGUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSVN0YWZmU2xvdHMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBnZXRBUElnb2FscygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZWxlbWVudC9nb2FscydcbiAgICAvL2xldCBwYXRoID0gJ3VzZXIvZ29hbHMvZWxlbWVudHMnXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWhvbWVJbml0aWFsKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0QVBJdmlkZW9jYWxsKGlkOnN0cmluZyk6IE9ic2VydmFibGU8YW55PntcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2FnZW5kYS8nK2lkKycvdmlkZW9jYWxsU2Vzc2lvbidcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSXZpZGVvY2FsbCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgIClcbiAgfVxuXG5cbiAgcG9zdEFQSVBlbmRpbmdDb25uZWN0KCk6IE9ic2VydmFibGU8YW55PntcbiAgICBsZXQgcGF0aCA9ICd1c2VyL3ZpZGVvY2FsbC9wZW5kaW5nQ29ubmVjdCdcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElQZW5kaW5nQ29ubmVjdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4vKiAgIGdldEFQSWluZm9ybWF0aW9uVXNlcigpOiBPYnNlcnZhYmxlPGFueT57XG5cbiAgICBsZXQgcGF0aCA9ICd1c2VyL2luZm9ybWF0aW9uVXNlcidcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJaG9tZUluaXRpYWwoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApXG4gIH0gKi9cbiAgXG4gIHVwZGF0ZUFQSUltYWdldXNlcihwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9pbWFnZWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gdXBkYXRlQVBJUmVtaW5kZXIoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkZWxldGVBUElJbWFnZXVzZXIoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2ltYWdlYDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gdXBkYXRlQVBJUmVtaW5kZXIoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElpbmZvcm1hdGlvblN1bW1hcnkocGFyYW1zOiBPYmplY3Qpe1xuICAgIGxldCBwYXRoID0gJ2hvbWUnXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1lcmdlTWFwKCh2KSA9PiB2IGluc3RhbmNlb2YgVGltZW91dEVycm9yID8gdGhyb3dFcnJvcih2KSA6IG9mKHYpKSBcbiAgICApO1xuICB9XG4gIGdldEFQSWluZm9ybWF0aW9uU3VtbWFyeU9sZChwYXJhbXM6IE9iamVjdCl7XG4gICAgbGV0IHBhdGggPSAnaG9tZSdcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKHJlcyA9PiByZXMpIFxuICAgICk7XG4gIH1cblxuXG4gIGdldEFQSXVzZXJQcm9maWxlKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndjIvdXNlci9wcm9maWxlJ1xuICAgIC8vbGV0IGh0dHBQYXJhbXMgPSB0aGlzLmdldEZhbWlseVVuaXRJRCgpXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWhvbWVJbml0aWFsKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgcG9zdEFQSUNoYW5nZVBhc3N3b3JkKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2NoYW5nZVBhc3N3b3JkJztcbiAgICBsZXQgaHR0cFBhcmFtcyA9IHRoaXMuZ2V0RmFtaWx5VW5pdElEKClcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSUNoYW5nZVBhc3N3b3JkKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJbm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbnMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2NvbmZpZ3VyYXRpb24nXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSW5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb25zKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgcG9zdEFQSUNvbmZpZ3VyYXRpb24ocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvY29uZmlndXJhdGlvbic7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElDb25maWd1cmF0aW9uKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJbGFuZ3VhZ2VzQ2VudGVyKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnY2VudGVyL2xhbmd1YWdlcydcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJbGFuZ3VhZ2VzQ2VudGVyKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0QVBJRmFxcygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2NlbnRlci9mYXEnXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWhvbWVJbml0aWFsKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0QVBJRmFtaWx5VW5pdCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZmFtaWx5VW5pdCc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSUZhbWlseVVuaXQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIGdldEFQSUZhbWlseVVuaXQyKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndjIvdXNlci9mYW1pbHlVbml0JztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSUZhbWlseVVuaXQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSVJlcG9ydFByb2JsZW0ocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvcmVwb3J0UHJvYmxlbSc7IC8vICdtZWRpYS91cGxvYWQvdGVtcCcgXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJUmVwb3J0UHJvYmxlbSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUEllbWFpbFZlcmlmaWNhdGlvbihwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9lbWFpbF92ZXJpZmljYXRpb24nO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWVtYWlsVmVyaWZpY2F0aW9uKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJQ29kZUJ5RW1haWwoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL3Jlc2VuZFR3b0ZhY3RvckNvZGUnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJQ29kZUJ5RW1haWwoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSWNvZGVWZXJpZmljYXRpb24ocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvdmVyaWZ5VHdvRmFjdG9yJztcbiAgICAvL2xldCBwYXRoID0gJ3VzZXIvY29kZVZlcmlmaWNhdGlvbic7IFxuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWNvZGVWZXJpZmljYXRpb24oJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuXG4gIGdldEFQSWhlYWx0aENhcmRUeXBlcygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2NlbnRlci9oZWFsdGhDYXJkVHlwZXMnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJaGVhbHRoQ2FyZFR5cGVzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWhlYWx0aENhcmRzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9oZWFsdGhjYXJkcyc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUGhlYWx0aENhcmRzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWhlYWx0aENhcmRJZChpZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9oZWFsdGhjYXJkLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWhlYWx0aENhcmQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSWhlYWx0aENhcmRzKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2hlYWx0aGNhcmQnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSVJlcG9ydFByb2JsZW0oJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdXRBUEloZWFsdGhDYXJkKHBhcmFtczogSGVhbHRoQ2FyZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9oZWFsdGhjYXJkLyR7cGFyYW1zLmlkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHB1dEFQSWhlYWx0aENhcmQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkZWxldGVBUEloZWFsdGhDYXJkKHBhcmFtczogSGVhbHRoQ2FyZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9oZWFsdGhjYXJkLyR7cGFyYW1zLmlkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBkZWxldGVBUEloZWFsdGhDYXJkKCR7cGF0aH0pIHJlczogJHtyZXN9YCwgSlNPTi5zdHJpbmdpZnkocmVzKSk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSVNvY2lhbFJlbGF0aW9uVHlwZSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2NlbnRlci9zb2NpYWxSZWxhdGlvblR5cGUnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJU29jaWFsUmVsYXRpb25UeXBlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWVtZXJnZW5jeUNvbnRhY3QoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL0VtZXJnZW5jeUNvbnRhY3RzJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWVtZXJnZW5jeUNvbnRhY3QoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZW1lcmdlbmN5Q29udGFjdElEKGlkOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvRW1lcmdlbmN5Q29udGFjdC8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUEllbWVyZ2VuY3lDb250YWN0KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUEllbWVyZ2VuY3lDb250YWN0KHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL0VtZXJnZW5jeUNvbnRhY3QnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWVtZXJnZW5jeUNvbnRhY3QoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdXRBUEllbWVyZ2VuY3lDb250YWN0KGlkOiBhbnksIHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL0VtZXJnZW5jeUNvbnRhY3QvJHtpZH1gO1xuICAgIC8vLy9jb25zb2xlLmxvZygnW0Rvb2xlU2VydmljZV0gcHV0QVBJZW1lcmdlbmN5Q29udGFjdCgpJywgcGFyYW1zKTtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcHV0QVBJZW1lcmdlbmN5Q29udGFjdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUFQSWVtZXJnZW5jeUNvbnRhY3QoaWQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9FbWVyZ2VuY3lDb250YWN0LyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGRlbGV0ZUFQSWVtZXJnZW5jeUNvbnRhY3QoJHtwYXRofSkgcmVzOiAke3Jlc31gLCBKU09OLnN0cmluZ2lmeShyZXMpKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cblxuICBnZXRBUElhYm91dFVzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnY2VudGVyL2Fib3V0JztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWFib3V0VXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJYXBwb2ludG1lbnRBZ2VuZGEoKTogT2JzZXJ2YWJsZTxhbnk+e1xuICAgIGxldCBwYXRoID0gJ3VzZXIvYWdlbmRhJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJYXBwb2ludG1lbnRBZ2VuZGEoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLy9kb2N1bWVudHMtVHJhY2tpbmdcbiAgZ2V0QVBJZGlhZ25vc3RpY1Rlc3RzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9kaWFnbm9zdGljVGVzdHMnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkaWFnbm9zdGljVGVzdHMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZGlhZ25vc3RpY1Rlc3RzTGFzdCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZGlhZ25vc3RpY1Rlc3RzL2xhc3QtZG9uZSc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWRpYWdub3N0aWNUZXN0cygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElkaWFnbm9zdGljVGVzdFR5cGVzQXZhaWxhYmxlKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnZGlhZ25vc3RpY1Rlc3RUeXBlcy9hdmFpbGFibGUnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZGlhZ25vc3RpY1Rlc3RUeXBlc0F2YWlsYWJsZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElkaWFnbm9zdGljVGVzdElEKGlkOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3YyL3VzZXIvZGlhZ25vc3RpY1Rlc3QvJyArIGlkO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZGlhZ25vc3RpY1Rlc3RJRCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJZGlhZ25vc3RpY1Rlc3QocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3YyL3VzZXIvZGlhZ25vc3RpY1Rlc3RzLyc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICAvLy8vY29uc29sZS5sb2coXCJQT1NUOiBcIixwYXJhbXMpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElkaWFnbm9zdGljVGVzdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1dEFQSWRpYWdub3N0aWNUZXN0KGlkLCBwYXJhbXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9kaWFnbm9zdGljVGVzdC8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHB1dEFQSWRpYWdub3N0aWNUZXN0KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlQVBJZGlhZ25vc3RpY1Rlc3QoaWQpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvZGlhZ25vc3RpY1Rlc3QvJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZGVsZXRlQVBJZGlhZ25vc3RpY1Rlc3QoJHtwYXRofSkgcmVzOiAke3Jlc31gLCBKU09OLnN0cmluZ2lmeShyZXMpKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZmlsdGVyZWREaWFnbm9zdGljVGVzdChwYXJhbXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9kaWFnbm9zdGljVGVzdHMnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIC8vIEJlZ2luIGFzc2lnbmluZyBwYXJhbWV0ZXJzXG4gICAgaWYgKHBhcmFtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBodHRwUGFyYW1zID0gKHBhcmFtcy5zdGFydF9kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdmcm9tX2RhdGUnLCBwYXJhbXMuc3RhcnRfZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgICBodHRwUGFyYW1zID0gKHBhcmFtcy5lbmRfZGF0ZSkgPyBodHRwUGFyYW1zLmFwcGVuZCgndG9fZGF0ZScsIHBhcmFtcy5lbmRfZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgICBpZiAocGFyYW1zLmRpYWdub3N0aWNUZXN0VHlwZXMpIHtcbiAgICAgICAgcGFyYW1zLmRpYWdub3N0aWNUZXN0VHlwZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoJ2RpYWdub3N0aWNfdGVzdF90eXBlX2lkW10nLCBlbGVtZW50KVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZmlsdGVyZWREaWFnbm9zdGljVGVzdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWZvcm1QZW5kaW5nKHBhcmFtcyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnZm9ybXMvcGVuZGluZy91c2VyJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZm9ybVBlbmRpbmcoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIFxuICAvL2Zvcm1zLVRyYWNraW5nXG4gIGdldEFQSVNoYXJlZGNhcmVGb3JtTGlzdChwYXRpZW50KXtcbiAgICBsZXQgcGF0aCA9IGAvcmVoYWJpbGlmeS9zaGFyZWRjYXJlcGxhbi9tb25pdG9yaW5nLyR7cGF0aWVudH1gOyAgIFxuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElyZW1pbmRlcnMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cblxuXG4gIGdldEFQSWZvcm1MaXN0cygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2Zvcm1zL3VzZXInO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZm9ybUxpc3RzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSUZvcm1KU09OKGZvcm0sIHBhcmFtcz8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYGZvcm0vJHtmb3JtfS9mb3JtRmllbGRzYDtcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LmZvcm1BbnN3ZXIpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ2Zvcm1BbnN3ZXInLCBwYXJhbXM/LmZvcm1BbnN3ZXIpICA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8uZ2FtZV9wbGF5X2lkKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdnYW1lX3BsYXlfaWQnLCBwYXJhbXM/LmdhbWVfcGxheV9pZCkgIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5zdGFydGVkX2FwcCkgPyBodHRwUGFyYW1zLmFwcGVuZCgnc3RhcnRlZF9hcHAnLCBwYXJhbXM/LnN0YXJ0ZWRfYXBwKSAgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSXJlbWluZGVycygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJRm9ybUpTT04oZm9ybSwgcGFyYW1zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGBmb3JtZmllbGQvY29uZGl0aW9uYWwvJHtmb3JtfS9maWVsZC8ke3BhcmFtcy5mb3JtRmllbGR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSUNvbnRlbnRTdGF0dXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSUZvcm1GaWxsKHBhcmFtcyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgZm9ybS9maWxsL2A7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElDb250ZW50U3RhdHVzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICAvL2dyYXBoaWNzLVRyYWNraW5nXG5cbiAgZ2V0QVBJZWxlbWVudHNMaXN0KGZpbHRlcj8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZWxlbWVudHMnICAvKiAndXNlci9lbGVtZW50c0xpc3QvdjInICAqL1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKGZpbHRlcj8ub25seV93aXRoX3ZhbHVlcyk/IGh0dHBQYXJhbXMuYXBwZW5kKCdvbmx5X3dpdGhfdmFsdWVzJywgZmlsdGVyPy5vbmx5X3dpdGhfdmFsdWVzKTogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAoZmlsdGVyPy5ncm91cGVkKT8gaHR0cFBhcmFtcy5hcHBlbmQoJ2dyb3VwZWQnLCBmaWx0ZXI/Lmdyb3VwZWQpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAoZmlsdGVyPy5maWx0ZXIpPyBodHRwUGFyYW1zLmFwcGVuZCgnZmlsdGVyJywgZmlsdGVyPy5maWx0ZXIpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZWxlbWVudHNMaXN0KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBcbiAgLyoqIGdldCBlbGVtZW50cyB3aXRoIHF1ZXJ5IGJ5IHBhcmFtZXRlciBkYXRlICAqL1xuICBnZXRBUEllbGVtZW50c0xpc3RCeURhdGUocGFyYW1zOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZWxlbWVudHNMaXN0L3YyJyAgLyogJ3VzZXIvZWxlbWVudHNMaXN0JyAgKi9cbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaWYocGFyYW1zLmZpbHRlciA9PSAnMScpIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZCgnZmlsdGVyJywgJzEnKVxuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWVsZW1lbnRzTGlzdEJ5RGF0ZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUEllbGVtZW50c0J5R3JvdXAoZmlsdGVyPyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnY2VudGVyL2VsZW1lbnRHcm91cC9lbGVtZW50cydcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaWYoZmlsdGVyID09ICcxJyB8fCBmaWx0ZXIgPT0gJzAnKSBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoJ2ZpbHRlcicsIGZpbHRlcilcbiAgICBlbHNlIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZCgnZmlsdGVyJywgJzEnKVxuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWVsZW1lbnRzTGlzdEJ5RGF0ZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJYWRkRWxlbWVudChpZCwgcGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZWxlbWVudC8nICsgaWQgKyAnL3ZhbHVlL2FkZCdcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWFkZEVsZW1lbnQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZ3JhcGhpY3NFbGVtZW50KGlkOiBPYmplY3QsIHF1ZXJ5KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2VsZW1lbnQvJyArIGlkO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKHF1ZXJ5KSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdpbnRlcnZhbCcsIHF1ZXJ5KSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElncmFwaGljc0VsZW1lbnQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZWxlbWVudElEKGlkOiBPYmplY3QsIHBhcmFtcz8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHYyL3VzZXIvZWxlbWVudC8ke2lkfWA7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5pbnRlcnZhbCkgPyBodHRwUGFyYW1zLmFwcGVuZCgnaW50ZXJ2YWwnLCBwYXJhbXM/LmludGVydmFsKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8uZnJvbV9kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdmcm9tX2RhdGUnLCBwYXJhbXM/LmZyb21fZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LnRvX2RhdGUpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3RvX2RhdGUnLCBwYXJhbXM/LnRvX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy52ZXJzaW9uKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCd2ZXJzaW9uJywgcGFyYW1zPy52ZXJzaW9uKSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElncmFwaGljc0VsZW1lbnQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZWxlbWVudEF2YWlsYWJsZUlEKGlkOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYGVsZW1lbnQvYXZhaWxhYmxlLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZWxlbWVudEF2YWlsYWJsZUlEKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWNhdGVnb3J5KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9lbGVtZW50X2NhdGVnb3J5JztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJY2F0ZWdvcnkoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZWxlbWVudEdyb3VwSUQoaWQ6IE9iamVjdCwgZmlsdGVyPyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgY2VudGVyL2VsZW1lbnRHcm91cC8ke2lkfS9lbGVtZW50c2A7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAoZmlsdGVyKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdmaWx0ZXInLCBmaWx0ZXIpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUEllbGVtZW50R3JvdXBJRCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBzZWFyY2hBUEllbGVtZW50R3JvdXAocGFyYW1zPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdjZW50ZXIvZWxlbWVudEdyb3VwcydcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gc2VhcmNoQVBJZWxlbWVudEdyb3VwKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWVsZW1lbnRHcm91cChwYXJhbXM/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2NlbnRlci9lbGVtZW50R3JvdXBzJ1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8uZmlsdGVyKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdmaWx0ZXInLCBwYXJhbXM/LmZpbHRlcikgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWVsZW1lbnRHcm91cCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgLyoqIGdldCBkaWV0cyB3aXRoIHF1ZXJ5IGJ5IHBhcmFtZXRlciBkYXRlICAqL1xuICBnZXRBUElsaXN0RGlldHNCeURhdGUocGFyYW1zPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2RpZXRzJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJbGlzdERpZXRzQnlEYXRlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSUxpc3RSZWNpcGUocGFyYW1zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2RpZXRzL3JlY2VpcHRzYDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgIC5zZXQoJ3RhZ3MnLCBwYXJhbXMudGFncylcbiAgICAuc2V0KCdpbnRlcmFjdGlvbnMnLCBwYXJhbXMuaW50ZXJhY3Rpb25zKVxuICAgIC5zZXQoJ3JlYWRpbmdUaW1lJywgcGFyYW1zLnJlYWRpbmdUaW1lKVxuICAgIC5zZXQoJ2Zyb21fZGF0ZScsIHBhcmFtcy5mcm9tX2RhdGUpXG4gICAgLnNldCgndG9fZGF0ZScsIHBhcmFtcy50b19kYXRlKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWRldGFpbFJlY2lwZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKmdldEFQSWRpZXRzQnlEYXRlKGRhdGU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9kaWV0YXJ5SW50YWtlc2BcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChkYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdkYXRlJywgZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWRpZXRzQnlEYXRlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfSovXG5cbiAgZ2V0QVBJZGlldHNCeURhdGUocGFyYW1zOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvZGlldGFyeUludGFrZXNgXG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdkYXRlJywgcGFyYW1zLmRhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5ncm91cGVkX2J5X3RpbWVzKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdncm91cGVkX2J5X3RpbWVzJywgcGFyYW1zLmdyb3VwZWRfYnlfdGltZXMpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkaWV0c0J5RGF0ZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElGb3Jtc0J5RGF0ZShwYXJhbXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgcmVoYWJpbGlmeS9zaGFyZWRjYXJlcGxhbi9mb3Jtc2A7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdkYXRlJywgcGFyYW1zLmRhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5ncm91cGVkX2J5X3RpbWVzKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdncm91cGVkX2J5X3RpbWVzJywgcGFyYW1zLmdyb3VwZWRfYnlfdGltZXMpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkaWV0c0J5RGF0ZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbiBcblxuICBnZXRBUElkZXRhaWxEaWV0cyhpZDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGBkaWV0LyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZGV0YWlsRGlldHMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJZGV0YWlsUmVjaXBlKGlkOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYGRpZXQvcmVjZWlwdC8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWRldGFpbFJlY2lwZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElsaXN0VGVzdGltb25pYWxzKHBhcmFtcyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci90ZXN0aW1vbmlhbHNgO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgLnNldCgndGFncycsIHBhcmFtcy50YWdzKVxuICAgIC5zZXQoJ2ludGVyYWN0aW9ucycsIHBhcmFtcy5pbnRlcmFjdGlvbnMpXG4gICAgLnNldCgncmVhZGluZ1RpbWUnLCBwYXJhbXMucmVhZGluZ1RpbWUpO1xuICAgIFxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZGV0YWlsUmVjaXBlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWRldGFpbFRlc3RpbW9uaWFsKGlkLCBwYXJhbXMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvdGVzdGltb255LyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgIC5zZXQoJ3RhZ3MnLCBwYXJhbXMudGFncylcbiAgICAuc2V0KCdpbnRlcmFjdGlvbnMnLCBwYXJhbXMuaW50ZXJhY3Rpb25zKVxuICAgIC5zZXQoJ3JlYWRpbmdUaW1lJywgcGFyYW1zLnJlYWRpbmdUaW1lKTtcbiAgICBcbiAgICBcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCxodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWRldGFpbFJlY2lwZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgXG5cbiAgLyoqIGdldCBhZHZpY2VzICAqKi9cbiAgZ2V0QVBJbGlzdEFkdmljZXMocGFyYW1zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2FkdmljZXMnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgLnNldCgndGFncycsIHBhcmFtcy50YWdzKVxuICAgIC5zZXQoJ2ludGVyYWN0aW9ucycsIHBhcmFtcy5pbnRlcmFjdGlvbnMpXG4gICAgLnNldCgncmVhZGluZ1RpbWUnLCBwYXJhbXMucmVhZGluZ1RpbWUpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJbGlzdEFkdmljZXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiBcbiAgICAvKiogZ2V0IG5ld3MgICoqL1xuICAgIGdldEFQSWxpc3ROZXdzKHBhcmFtcyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICBsZXQgcGF0aCA9ICd1c2VyL25ld3MnO1xuICAgICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgICAgLnNldCgndGFncycsIHBhcmFtcy50YWdzKVxuICAgICAgLnNldCgnaW50ZXJhY3Rpb25zJywgcGFyYW1zLmludGVyYWN0aW9ucylcbiAgICAgIC5zZXQoJ3JlYWRpbmdUaW1lJywgcGFyYW1zLnJlYWRpbmdUaW1lKTtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWxpc3ROZXdzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRBUElkZXRhaWxOZXcoaWQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICBsZXQgcGF0aCA9IGB1c2VyL25ldy8ke2lkfWA7XG4gICAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZGV0YWlsTmV3KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9IFxuXG4gIGdldEFQSWRldGFpbEFkdmljZXMoaWQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgYWR2aWNlLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZGV0YWlsQWR2aWNlcygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElTZWFyY2hOZXdzKHF1ZXJ5OiBhbnkscGFyYW1zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICduZXdzJztcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKClcbiAgICAuc2V0KCd0YWdzJywgcGFyYW1zLnRhZ3MpXG4gICAgLnNldCgnaW50ZXJhY3Rpb25zJywgcGFyYW1zLmludGVyYWN0aW9ucylcbiAgICAuc2V0KCdyZWFkaW5nVGltZScsIHBhcmFtcy5yZWFkaW5nVGltZSk7XG4gICAgaHR0cFBhcmFtcyA9IChxdWVyeSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnc2VhcmNoJywgcXVlcnkpIDogaHR0cFBhcmFtc1xuICAgXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSVNlYXJjaE5ld3MoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJU2VhcmNoQWR2aWNlcyhxdWVyeTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdhZHZpY2VzJztcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChxdWVyeSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnc2VhcmNoJywgcXVlcnkpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJU2VhcmNoQWR2aWNlcygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgXG4gIGdldEFQSWRydWdzTGlzdChxdWVyeTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGBkcnVnSW50YWtlL2xpc3RgO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKHF1ZXJ5KSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdzZWFyY2gnLCBxdWVyeSkgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWRydWdzTGlzdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBcbiAgZ2V0QVBJZHJ1Z3NMaXN0SW50ZXJhY3Rpb24ocXVlcnk6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBgaHR0cHM6Ly9uNmliYWF6ZXZuc2l4ZmNzNHBybDd6N3dyYTBvb25tYS5sYW1iZGEtdXJsLmV1LWNlbnRyYWwtMS5vbi5hd3MvYDtcbiAgIC8vIGNvbnN0IGVuZHBvaW50ID0gYGh0dHBzOi8vbjZpYmFhemV2bnNpeGZjczRwcmw3ejd3cmEwb29ubWEubGFtYmRhLXVybC5ldS1jZW50cmFsLTEub24uYXdzLz9kcnVnPURCMDEzNjNgO1xuICAgLy9sZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdkcnVnJywgcXVlcnkpO1xuICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAuc2V0KCdkcnVnJywgcXVlcnkpXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuXG4gIGdldEFQSWRydWdJbnRha2VCeURhdGUocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZHJ1Z0ludGFrZS9kYXRlJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZHJ1Z0ludGFrZUJ5RGF0ZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuLy8gc2VuZCBtZWRpY2F0aW9uIGxpc3RcbiAgZ2V0QVBJbWVkaWNhdGlvbkxpc3QocXVlcnk6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgc2VuZG1lZGljYXRpb24vbGlzdGA7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocXVlcnkpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3NlYXJjaCcsIHF1ZXJ5KSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSW1lZGljYXRpb25MaXN0KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWRpcmVjdGlvbnNMaXN0KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9hZGRyZXNzZXNgO1xuICAgIC8vIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICAvLyBodHRwUGFyYW1zID0gKHF1ZXJ5KSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdzZWFyY2gnLCBxdWVyeSkgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElkaXJlY3Rpb25MaXN0KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBnZXRBUEltZWRpY2F0aW9uc0xpc3QoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGBzZW5kbWVkaWNhdGlvbi9saXN0YDtcbiAgICAvLyBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgLy8gaHR0cFBhcmFtcyA9IChxdWVyeSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnc2VhcmNoJywgcXVlcnkpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZGlyZWN0aW9uTGlzdCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJc2VuZERpcmVjdGlvbihwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9hZGRyZXNzJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElzZW5kRGlyZWN0aW9uKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHV0QVBJc2VuZERpcmVjdGlvbihpZDogYW55LCBwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9hZGRyZXNzLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwdXRBUElkcnVnSW50YWtlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlQVBJc2VuZERpcmVjdGlvbihpZDogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2FkZHJlc3MvJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBkZWxldGVBUEltZWRpY2F0aW9uUGxhbigke3BhdGh9KSByZXM6ICR7cmVzfWAsIEpTT04uc3RyaW5naWZ5KHJlcykpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSW1lZGljYXRpb25TZW5kUGV0aXRpb24ocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3NlbmRtZWRpY2F0aW9uJztcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElzZW5kRGlyZWN0aW9uKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSWRydWdJbnRha2UocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZHJ1Z0ludGFrZSc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElkcnVnSW50YWtlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSWNoYW5nZVN0YXRlZHJ1Z0ludGFrZShpZDogT2JqZWN0LCBzdGF0ZTogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2RydWdJbnRha2UvJHtpZH0vc2V0LyR7c3RhdGV9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElkcnVnSW50YWtlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSW1lZGljYXRpb25QbGFuKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL21lZGljYXRpb25QbGFuYDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWRydWdJbnRha2UoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdXRBUEltZWRpY2F0aW9uUGxhbihpZDogYW55LCBwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9tZWRpY2F0aW9uUGxhbi8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcHV0QVBJZHJ1Z0ludGFrZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUFQSW1lZGljYXRpb25QbGFuKGlkOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvbWVkaWNhdGlvblBsYW4vJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBkZWxldGVBUEltZWRpY2F0aW9uUGxhbigke3BhdGh9KSByZXM6ICR7cmVzfWAsIEpTT04uc3RyaW5naWZ5KHJlcykpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJbWVkaWNhdGlvblBsYW4oaWQpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvbWVkaWNhdGlvblBsYW4vJHtpZH1gXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSW1lZGljYXRpb25QbGFuKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSW1lZGljYXRpb25QbGFucyhwYXJhbXM/KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL21lZGljYXRpb25QbGFuc2BcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/Lm9uRGF0ZSA9PT0gMCB8fCBwYXJhbXM/Lm9uRGF0ZSA9PT0gMSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnb25EYXRlJywgcGFyYW1zPy5vbkRhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5mcm9tX2RhdGUpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ2Zyb21fZGF0ZScsIHBhcmFtcz8uZnJvbV9kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8udG9fZGF0ZSkgPyBodHRwUGFyYW1zLmFwcGVuZCgndG9fZGF0ZScsIHBhcmFtcz8udG9fZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUEltZWRpY2F0aW9uUGxhbigke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbi8vdG9kb3MgbG9zIG1lZGljYW1lbnRvcyBhc2lnbmFkb3MgYSBlc2EgcGVyc29uYVxuICBnZXRBUEltZWRpY2F0aW9uQWxscygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvbWVkaWNhdGlvblBsYW5zYCAgXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUEltZWRpY2F0aW9uUGxhbigke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuLy8gYWN0aXZhdGVQZW5kaW5nTWVkaWNhdGlvblBsYW5zXG4gIGdldEFQSVBlbmRpbmdNZWRpY2F0aW9uUGxhbnMocGFyYW1zPyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9wZW5kaW5nL21lZGljYXRpb25QbGFuc2BcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/Lm9ubHlDb3VudCA9PT0gMSB8fCBwYXJhbXM/Lm9ubHlDb3VudCA9PT0gMCkgPyBodHRwUGFyYW1zLmFwcGVuZCgnb25seUNvdW50JywgcGFyYW1zPy5vbmx5Q291bnQpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5vbmx5Q291bnQgPT09IHVuZGVmaW5lZCkgPyBodHRwUGFyYW1zLmFwcGVuZCgnb25seUNvdW50JywgJzAnKSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSVBlbmRpbmdNZWRpY2F0aW9uUGxhbnMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJRnJlcXVlbmNpZXNNZWRpY2F0aW9uUGxhbnNIUEMocGFyYW1zPyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgaHBjL21lZGljYXRpb25QbGFuL2ZyZXF1ZW5jaWVzYFxuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSUZyZXF1ZW5jaWVzTWVkaWNhdGlvblBsYW5zSFBDKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSURydWdVbml0cyhpZCwgc2VhcmNoPyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgZHJ1Zy8ke2lkfS91bml0c2BcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IHNlYXJjaCA/IGh0dHBQYXJhbXMuYXBwZW5kKCdzZWFyY2gnLCBzZWFyY2gpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJRHJ1Z1VuaXRzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSURpYWdub3N0aWMocGFyYW1zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2RpYWdub3N0aWNzJy8vJ3YyL2RpYWdub3N0aWMvdXNlcic7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5vbkRhdGUgPT09IDAgfHwgcGFyYW1zPy5vbkRhdGUgPT09IDEpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ29uRGF0ZScsIHBhcmFtcz8ub25EYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8uZnJvbV9kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdmcm9tX2RhdGUnLCBwYXJhbXM/LmZyb21fZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LnRvX2RhdGUpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3RvX2RhdGUnLCBwYXJhbXM/LnRvX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElnYW1lcygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElDZW50ZXJBbGxlcmdpZXMoc2VhcmNoPyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnY2VudGVyL2FsbGVyZ2llcyc7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAoc2VhcmNoKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdzZWFyY2gnLCBzZWFyY2gpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElnYW1lcygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElBbGxlcmdpZXMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2FsbGVyZ2llcyc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWdhbWVzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUElBbGxlcmdpZXMocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvYWxsZXJneS9jcmVhdGVgO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJZHJ1Z0ludGFrZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1dEFQSUFsbGVyZ3koaWQ6IGFueSwgcGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvYWxsZXJneS8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcHV0QVBJQWxsZXJneSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUFQSUFsbGVyZ3koaWQ6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9hbGxlcmd5LyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGRlbGV0ZUFQSUFsbGVyZ3koJHtwYXRofSkgcmVzOiAke3Jlc31gLCBKU09OLnN0cmluZ2lmeShyZXMpKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSWdhbWVzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9nYW1lcyc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWdhbWVzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICAvKiogZ2V0IGdhbWVzIHdpdGggcXVlcnkgYnkgcGFyYW1ldGVyIGRhdGUgICovXG4gIGdldEFQSWdhbWVzQnlEYXRlKGZyb21fZGF0ZTogYW55LCB0b19kYXRlOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZ2FtZVBsYXlzL3NjaGVkdWxlZCc7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAoZnJvbV9kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdmcm9tX2RhdGUnLCBmcm9tX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAodG9fZGF0ZSkgPyBodHRwUGFyYW1zLmFwcGVuZCgndG9fZGF0ZScsIHRvX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElnYW1lcygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgZ2V0QVBJZ2FtZUlkKGlkKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2dhbWUvJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElnYW1lSWQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJYWdlbmRhKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9hZ2VuZGEnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElhZ2VuZGEoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLy9yZW1pbmRlcnNcbiAgLy91c2VyL3JlbWluZGVyIFxuXG4gIGdldEFQSWFsbEFnZW5kYShwYXJhbXM/KTogT2JzZXJ2YWJsZTxhbnk+e1xuICAgIGxldCBwYXRoID0gJ3VzZXIvYWdlbmRhL3YyJztcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IHBhcmFtcz8uZnJvbV9kYXRlPyBodHRwUGFyYW1zLmFwcGVuZCgnZnJvbV9kYXRlJywgcGFyYW1zPy5mcm9tX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSBwYXJhbXM/LnRvX2RhdGU/IGh0dHBQYXJhbXMuYXBwZW5kKCd0b19kYXRlJywgcGFyYW1zPy50b19kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gcGFyYW1zPy5maWx0ZXJfYnlfZGF0ZT8gaHR0cFBhcmFtcy5hcHBlbmQoJ2ZpbHRlcl9ieV9kYXRlJywgcGFyYW1zPy5maWx0ZXJfYnlfZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LndpdGhfbWVkaWNhbF9wcm9jZWR1cmVzICE9IHVuZGVmaW5lZCk/IGh0dHBQYXJhbXMuYXBwZW5kKCd3aXRoX21lZGljYWxfcHJvY2VkdXJlcycsIHBhcmFtcz8ud2l0aF9tZWRpY2FsX3Byb2NlZHVyZXMpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5vcmRlciAhPSB1bmRlZmluZWQpPyBodHRwUGFyYW1zLmFwcGVuZCgnb3JkZXInLCBwYXJhbXM/Lm9yZGVyKSA6IGh0dHBQYXJhbXNcblxuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJYXBwb2ludG1lbnRBZ2VuZGFWMigke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElhZ2VuZGFJRChpZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9hZ2VuZGEvJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElhZ2VuZGFJRCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJYWRkQWdlbmRhKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2FnZW5kYS8nXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElhZGRBZ2VuZGEoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlQVBJYWRkQWdlbmRhKGlkOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXJhbXMgPSB7IGFnZW5kYTogaWQgfVxuICAgIGxldCBwYXRoID0gJ3VzZXIvYWdlbmRhL2RlbGV0ZSdcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZGVsZXRlQVBJYWRkQWdlbmRhKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1dEFQSWFnZW5kYShpZDogYW55LCBwYXJhbXM6IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9hZ2VuZGEvJHtpZH1gO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHB1dEFQSWFnZW5kYSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElhbGxvd2VkQ29udGFjdHMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL2FsbG93ZWRDb250YWN0c2A7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKCd3aXRoRGVwYXJ0bWVudHMnLCAnMScpIFxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWFsbG93ZWRDb250YWN0cygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIGxldCBhbGxvd2VkID0gcmVzLmFsbG93ZWRcbiAgICAgICAgaWYocmVzLmFsbG93ZWQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgYWxsb3dlZCA9IFtdXG4gICAgICAgIHJldHVybiBhbGxvd2VkO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElzdGFmZklkKGlkKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGBzdGFmZi8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSXN0YWZmSWQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqIGdldCBnYW1lcyB3aXRoIHF1ZXJ5IGJ5IHBhcmFtZXRlciBkYXRlICAqL1xuICBnZXRBUElVc2VyTWVzc2FnZXMoKTogT2JzZXJ2YWJsZTxTaGVsbENoYXRNb2RlbFtdPiB7XG5cbiAgICBsZXQgcGF0aCA9ICdtZXNzYWdlL3VzZXInO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG5cbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElVc2VyTWVzc2FnZXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICBpZihyZXMubGVuZ3RoID09IDApXG4gICAgICAgIHJldHVybiByZXNcbiAgICAgICAgcmV0dXJuIHJlcy5tZXNzYWdlcyBhcyBTaGVsbENoYXRNb2RlbFtdO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIC8vIGdldCB0aGUgY29tcGFueSBkZXRhaWxzLCBhIHN1YnNldCBvZiB0aGUgdXNlciBkYXRhXG4gIGdldFVzZXJTdWJzZXREYXRhKCk6IE9ic2VydmFibGU8U2hlbGxDaGF0TW9kZWw+IHtcbiAgICBsZXQgcGF0aCA9ICdtZXNzYWdlL3VzZXInO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG5cbiAgICBjb25zdCBkYXRhT2JzZXJ2YWJsZSA9IHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpO1xuXG4gICAgcmV0dXJuIGRhdGFPYnNlcnZhYmxlLnBpcGUoXG4gICAgICBtYXAoKGpzb25SZXNwb25zZSkgPT4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZERhdGE6IFNoZWxsQ2hhdE1vZGVsID0ge1xuICAgICAgICAgIC4uLmpzb25SZXNwb25zZS5tZXNzYWdlc1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZmlsdGVyZWREYXRhO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4vKiogUmVtaW5kZXJzICovXG4gIGdldEFQSXJlbWluZGVycygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvcmVtaW5kZXInO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElyZW1pbmRlcnMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJcmVtaW5kZXJJRChpZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9yZW1pbmRlci8ke2lkfWA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSXJlbWluZGVySUQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSWFkZFJlbWluZGVyKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL3JlbWluZGVyLydcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWFkZFJlbWluZGVyKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUFQSVJlbWluZGVyKGlkKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL3JlbWluZGVyLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZGVsZXRlQVBJUmVtaW5kZXIoJHtwYXRofSkgcmVzOiAke3Jlc31gLCBKU09OLnN0cmluZ2lmeShyZXMpKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZUFQSVJlbWluZGVyKGlkOiBhbnksIHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL3JlbWluZGVyLyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSB1cGRhdGVBUElSZW1pbmRlcigke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZUFQSXVzZXIocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXJgO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHVwZGF0ZUFQSVJlbWluZGVyKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSUNvbnRlbnRTdGF0dXMocGFyYW1zOiBPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2NvbnRlbnQvc3RhdHVzJ1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJQ29udGVudFN0YXR1cygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJdXNlclJlZ2lzdGVyKHBhcmFtczogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdocGMvdXNlci9zdG9yZSc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJc2VuZFJlZ2lzdGVyKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJVHlwZURvY3VtZW50KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnY2VudGVyL2RvY3VtZW50VHlwZXMnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElUeXBlRG9jdW1lbnQoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG4gIFxuICBnZXRBUEltZXNzYWdlKGlkLCBwYXJhbXM/KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL21lc3NhZ2UvJysgaWRcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXM/IGh0dHBQYXJhbXMuYXBwZW5kKCdwYWdlJywgcGFyYW1zKSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZWxlbWVudHNMaXN0KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSUV2ZW50cyhwYXJhbXMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ2hwYy91c2VyL2VwaXNvZGVzJztcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/Lm9uRGF0ZSA9PT0gMCB8fCBwYXJhbXM/Lm9uRGF0ZSA9PT0gMSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnb25EYXRlJywgcGFyYW1zPy5vbkRhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5mcm9tX2RhdGUpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ2Zyb21fZGF0ZScsIHBhcmFtcz8uZnJvbV9kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8udG9fZGF0ZSkgPyBodHRwUGFyYW1zLmFwcGVuZCgndG9fZGF0ZScsIHBhcmFtcz8udG9fZGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWdhbWVzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlczsgXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwb3N0QVBJbWVkaWNhbFByb2NlZHVyZXMocGFyYW1zPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL21lZGljYWxQcm9jZWR1cmVzYDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgcGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gcG9zdEFQSWRydWdJbnRha2UoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUEltZWRpY2FsUHJvY2VkdXJlczIocGFyYW1zPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGBocGMvdXNlci9tZWRpY2FsUHJvY2VkdXJlc2A7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LnRvX2RhdGUpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3RvX2RhdGUnLCBwYXJhbXM/LnRvX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5mcm9tX2RhdGUpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ2Zyb21fZGF0ZScsIHBhcmFtcz8uZnJvbV9kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8udXNlcikgPyBodHRwUGFyYW1zLmFwcGVuZCgndXNlcicsIHBhcmFtcz8udXNlcikgOiBodHRwUGFyYW1zXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIHBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElkcnVnSW50YWtlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdEFQSU5leHRNZWRpY2FsUHJvY2VkdXJlKHBhcmFtcz86IE9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9tZWRpY2FsUHJvY2VkdXJlL25leHRgO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCBwYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBwb3N0QVBJZHJ1Z0ludGFrZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSW1lZGljYWxQcm9jZWR1cmVzKHBhcmFtczogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGBocGMvdXNlci9tZWRpY2FsUHJvY2VkdXJlYDtcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LmJ5RXBpc29kZSA9PT0gMCB8fCBwYXJhbXM/LmJ5RXBpc29kZSA9PT0gMSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnYnlFcGlzb2RlJywgcGFyYW1zPy5ieUVwaXNvZGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5tZWRpY2FsX3Byb2NlZHVyZV9pZCAmJiBwYXJhbXM/LmJ5RXBpc29kZSA9PT0gMCkgPyBodHRwUGFyYW1zLmFwcGVuZCgnbWVkaWNhbF9wcm9jZWR1cmVfaWQnLCBwYXJhbXM/Lm1lZGljYWxfcHJvY2VkdXJlX2lkKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8uZXBpc29kZV9pZCAmJiBwYXJhbXM/LmJ5RXBpc29kZSA9PT0gMSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnZXBpc29kZV9pZCcsIHBhcmFtcz8uZXBpc29kZV9pZCkgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIHBvc3RBUElkcnVnSW50YWtlKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcblxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJcHJlZXhpc3RpbmdDb25kaXRpb25zKHBhcmFtcz8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvcHJlZXhpc3RpbmdDb25kaXRpb25zJ1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8ub25EYXRlID09PSAwIHx8IHBhcmFtcz8ub25EYXRlID09PSAxKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdvbkRhdGUnLCBwYXJhbXM/Lm9uRGF0ZSkgOiBodHRwUGFyYW1zXG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LmZyb21fZGF0ZSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnZnJvbV9kYXRlJywgcGFyYW1zPy5mcm9tX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy50b19kYXRlKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCd0b19kYXRlJywgcGFyYW1zPy50b19kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICAvL2h0dHBQYXJhbXMgPSAocGFyYW1zPy5wcmVleGlzdGluZ0NvbmRpdGlvblR5cGVzKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdwcmVleGlzdGluZ0NvbmRpdGlvblR5cGVzW10nLCBwYXJhbXM/LnByZWV4aXN0aW5nQ29uZGl0aW9uVHlwZXMpIDogaHR0cFBhcmFtc1xuICAgIGlmIChwYXJhbXM/LnByZWV4aXN0aW5nQ29uZGl0aW9uVHlwZXMgJiYgcGFyYW1zPy5wcmVleGlzdGluZ0NvbmRpdGlvblR5cGVzPy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtcy5wcmVleGlzdGluZ0NvbmRpdGlvblR5cGVzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZCgncHJlZXhpc3RpbmdDb25kaXRpb25UeXBlc1tdJywgZWxlbWVudClcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJZWxlbWVudHNMaXN0KCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSXByZWV4aXN0aW5nQ29uZGl0aW9uc1R5cGUoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdjZW50ZXIvcHJlZXhpc3RpbmdDb25kaXRpb25UeXBlcydcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJcHJlZXhpc3RpbmdDb25kaXRpb25zVHlwZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElOb3RpZmljYXRpb25zQ291bnQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL25vdGlmaWNhdGlvbnMvY291bnQnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElOb3RpZmljYXRpb25zKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSU5vdGlmaWNhdGlvbnMocGFyYW1zPyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9ub3RpZmljYXRpb25zJztcbiAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaHR0cFBhcmFtcyA9IChwYXJhbXM/LnJlYWQpID8gaHR0cFBhcmFtcy5hcHBlbmQoJ3JlYWQnLCBwYXJhbXM/LnJlYWQpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy53aXRoUGFnaW5hdGUgPT0gMSkgPyBodHRwUGFyYW1zLmFwcGVuZCgnd2l0aFBhZ2luYXRlJywgcGFyYW1zPy53aXRoUGFnaW5hdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5wYWdlID4gMCkgPyBodHRwUGFyYW1zLmFwcGVuZCgncGFnZScsIHBhcmFtcz8ucGFnZSkgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSU5vdGlmaWNhdGlvbnMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJVXNlckltYWdlKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAndXNlci9pbWFnZSc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSWdhbWVzKCR7cGF0aH0pIHJlczogYCwgcmVzKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RBUElOb3RpZmljYXRpb25SZWFkKGlkKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9IGB1c2VyL25vdGlmaWNhdGlvbi9yZWFkYDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgaWQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXQoZW5kcHQpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQoZW5kcHQpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcG9zdChlbmRwdCwgaXRlbXMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQoZW5kcHQpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChlbmRwb2ludCwgaXRlbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBzZXRQdXNoTm90aWZpY2F0aW9uKHB1c2hOb3RpZmljYXRpb246IGFueSl7XG4gICAgdGhpcy5wdXNoTm90aWZpY2F0aW9uID0gcHVzaE5vdGlmaWNhdGlvbjtcbiAgfVxuXG4gIGdldFB1c2hOb3RpZmljYXRpb24oKXtcbiAgIHJldHVybiB0aGlzLnB1c2hOb3RpZmljYXRpb247XG4gIH1cblxuICBnZXRBUElFeGVyY2lzZURldGFpbChpZCwgcGFyYW1zPyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9leGVyY2lzZS8ke2lkfWA7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSAocGFyYW1zPy5wcm9ncmFtYWJsZV9wbGF5KSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdwcm9ncmFtYWJsZV9wbGF5JywgcGFyYW1zPy5wcm9ncmFtYWJsZV9wbGF5KSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gKHBhcmFtcz8uY2hhbGxlbmdlX2lkKSA/IGh0dHBQYXJhbXMuYXBwZW5kKCdjaGFsbGVuZ2VfaWQnLCBwYXJhbXM/LmNoYWxsZW5nZV9pZCkgOiBodHRwUGFyYW1zXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCwgaHR0cFBhcmFtcykucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElFeGVyY2lzZXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJRXhlcmNpc2VzQnlEYXRlKGZyb21fZGF0ZT8sdG9fZGF0ZT8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvZXhlcmNpc2VzL3NjaGVkdWxlZCc7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zPyBodHRwUGFyYW1zLmFwcGVuZCgnZnJvbV9kYXRlJywgZnJvbV9kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcz8gaHR0cFBhcmFtcy5hcHBlbmQoJ3RvX2RhdGUnLCB0b19kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSUV4ZXJjaXNlcygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElFeGVyY2lzZXMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2V4ZXJjaXNlcyc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElFeGVyY2lzZXMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJQ2hhbGxlbmdlKGNoYWxsZW5nZUlkLCBwYXJhbXM/KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2NoYWxsZW5nZS8nK2NoYWxsZW5nZUlkXG5cbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSUNoYWxsZW5nZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRBUElDaGFsbGVuZ2VzKCBwYXJhbXM/KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2NoYWxsZW5nZXMnXG4gICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuXG4gICAgaWYgKHBhcmFtcz8ub25seUFjY2VwdGVkKSBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoJ29ubHlBY2NlcHRlZCcsIHBhcmFtcy5vbmx5QWNjZXB0ZWQpO1xuICAgIFxuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQsIGh0dHBQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJQ2hhbGxlbmdlcygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgZ2V0QVBJQ2hhbGxlbmdlczIoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICd1c2VyL2NoYWxsZW5nZXMvZ29hbHMnXG5cbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCApLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJQ2hhbGxlbmdlczIoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJQXBwTGF0ZXN0VmVyc2lvbih2ZXJzaW9uLCBwbGF0Zm9ybSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSAnYXBwL3ZlcnNpb25zL211c3QtdXBkYXRlP3ZlcnNpb249Jyt2ZXJzaW9uKycmcGxhdGZvcm09JytwbGF0Zm9ybTtcbiAgICAvLy8vY29uc29sZS5sb2cocGF0aCk7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmFwaS5nZXRFbmRwb2ludChwYXRoKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChlbmRwb2ludCkucGlwZShcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBnZXRBUElwYXRpZW50cygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gJ3VzZXIvcGF0aWVudHMnO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElyZW1pbmRlcnMoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJX1NDUF9nb2FscygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHNoYXJlY2FyZXBsYW4vZ29hbHNgO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy8vL2NvbnNvbGUubG9nKGBbRG9vbGVTZXJ2aWNlXSBnZXRBUElhZ2VuZGFJRCgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBcbiAgZ2V0QVBJX3ByZXNjcmliZWRBcHBzX0J5RGF0ZShmcm9tX2RhdGU/LHRvX2RhdGU/KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcGF0aCA9ICdyZWhhYmlsaWZ5L3ByZXNjcmliZWQtYXBwcy9hY3Rpdml0aWVzL3BlbmRpbmcnO1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcz8gaHR0cFBhcmFtcy5hcHBlbmQoJ2Zyb20nLCBmcm9tX2RhdGUpIDogaHR0cFBhcmFtc1xuICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zPyBodHRwUGFyYW1zLmFwcGVuZCgndG8nLCB0b19kYXRlKSA6IGh0dHBQYXJhbXNcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50LCBodHRwUGFyYW1zKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSV9wcmVzY3JpYmVkQXBwc19CeURhdGUoJHtwYXRofSkgcmVzOiBgLCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QVBJYWxsb3dlZERlcGFydG1lbnRzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgdXNlci9kZXBhcnRtZW50c2A7XG4gIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgIG1hcCgocmVzOiBhbnkpID0+IHtcbiAgXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0pXG4gICk7XG4gIH1cbiAgZ2V0QVBJZGV0YWlsRGVwYXJ0bWVudHMoaWQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHBhdGggPSBgZGVwYXJ0bWVudC9zaG93LyR7aWR9YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICBcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEFQSUFuc3dlcnMoaWQpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvZm9ybS8ke2lkfS9hbnN3ZXJzL2RldGFpbD9odG1sPXRydWVgO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5hcGkuZ2V0RW5kcG9pbnQocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZW5kcG9pbnQpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vLy9jb25zb2xlLmxvZyhgW0Rvb2xlU2VydmljZV0gZ2V0QVBJQW5zd2Vycygke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuXG4gIGdldEFQSURheVBocmFzZSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBwYXRoID0gYHVzZXIvZGF5UGhyYXNlYDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuYXBpLmdldEVuZHBvaW50KHBhdGgpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGVuZHBvaW50KS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAvLy8vY29uc29sZS5sb2coYFtEb29sZVNlcnZpY2VdIGdldEFQSURheVBocmFzZSgke3BhdGh9KSByZXM6IGAsIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|