raain-app 1.1.31 → 1.1.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/profile.service.mjs +55 -16
- package/esm2020/tools/CompareManager.mjs +4 -2
- package/esm2020/tools/RefreshManager.mjs +4 -3
- package/fesm2015/raain-app.mjs +67 -20
- package/fesm2015/raain-app.mjs.map +1 -1
- package/fesm2020/raain-app.mjs +60 -19
- package/fesm2020/raain-app.mjs.map +1 -1
- package/package.json +2 -2
- package/profile.service.d.ts +7 -3
- package/resources/README.md +6 -0
- package/tools/RefreshManager.d.ts +2 -1
|
@@ -2,6 +2,7 @@ import { Injectable } from '@angular/core';
|
|
|
2
2
|
import { BehaviorSubject } from 'rxjs';
|
|
3
3
|
import { EventNode, GaugeMeasure, GaugeNode, RadarNode, RainComputation, RainComputationMap, RainComputationQuality, RainNode, SpeedMatrixContainer, TeamNode } from 'raain-model';
|
|
4
4
|
import { FidjStorage } from './fidj-storage.model';
|
|
5
|
+
import { LoggerLevelEnum } from 'fidj-angular';
|
|
5
6
|
import { XYType } from './xytype';
|
|
6
7
|
import { GaugeNodeFilter } from './tools';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
@@ -15,7 +16,6 @@ export class ProfileService {
|
|
|
15
16
|
this.fidjAngularService = fidjAngularService;
|
|
16
17
|
this.http = http;
|
|
17
18
|
this.router = router;
|
|
18
|
-
// const defaultUrlForAPI = environment.serverUrl;
|
|
19
19
|
console.log('ProfileService: New####');
|
|
20
20
|
this.email = this.storage.get('email') || null;
|
|
21
21
|
this.asTeamId = this.storage.get('asTeamId') || null;
|
|
@@ -38,9 +38,14 @@ export class ProfileService {
|
|
|
38
38
|
this.storage.set('UrlForAPI', url);
|
|
39
39
|
}
|
|
40
40
|
async refreshProfile() {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
try {
|
|
42
|
+
this.nodeData = await this.fidjStorage.getRefreshedNodeCopy(this.fidjAngularService);
|
|
43
|
+
this.setRoles(await this.fidjAngularService.getRoles());
|
|
44
|
+
return this.nodeData;
|
|
45
|
+
}
|
|
46
|
+
catch (e) {
|
|
47
|
+
await this.checkError(e);
|
|
48
|
+
}
|
|
44
49
|
}
|
|
45
50
|
getEmail() {
|
|
46
51
|
return this.email;
|
|
@@ -49,29 +54,61 @@ export class ProfileService {
|
|
|
49
54
|
this.email = email;
|
|
50
55
|
this.storage.set('email', this.email);
|
|
51
56
|
}
|
|
52
|
-
logout() {
|
|
57
|
+
async logout(fidjKey, fidjProd) {
|
|
53
58
|
this.storage.remove('email');
|
|
59
|
+
await this.fidjAngularService.logout(true);
|
|
60
|
+
try {
|
|
61
|
+
await this.fidjAngularService.init(fidjKey, {
|
|
62
|
+
logLevel: LoggerLevelEnum.INFO,
|
|
63
|
+
crypto: false,
|
|
64
|
+
prod: fidjProd,
|
|
65
|
+
useDB: false,
|
|
66
|
+
});
|
|
67
|
+
console.log('initFidj done.');
|
|
68
|
+
this.readyForSync.next(true);
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
console.error('initFidj catch pb: ', err);
|
|
72
|
+
}
|
|
54
73
|
}
|
|
55
74
|
async checkError(error) {
|
|
56
75
|
console.warn('checkError', error);
|
|
57
|
-
if (error.code === 401
|
|
76
|
+
if (error.code === 401) {
|
|
58
77
|
console.log('looks not logged in');
|
|
59
|
-
if (this.router.url.indexOf('
|
|
78
|
+
if (this.router.url.indexOf('login') < 0) {
|
|
60
79
|
try {
|
|
61
|
-
await this.fidjAngularService.
|
|
80
|
+
const sync = await this.fidjAngularService.sync();
|
|
62
81
|
}
|
|
63
82
|
catch (e) {
|
|
83
|
+
return this.gotoLout();
|
|
64
84
|
}
|
|
65
|
-
await this.router.navigateByUrl('/');
|
|
66
85
|
}
|
|
67
86
|
}
|
|
68
87
|
}
|
|
88
|
+
async gotoLout() {
|
|
89
|
+
if (this.router.url.indexOf('login') > -1) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
await this.router.navigateByUrl('/logout', { skipLocationChange: true });
|
|
93
|
+
// await this.router.navigate(['/logout']);
|
|
94
|
+
// await this.router.navigate(['/login']);
|
|
95
|
+
}
|
|
96
|
+
async gotoLogin() {
|
|
97
|
+
if (this.router.url.indexOf('login') > -1) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// await this.router.navigateByUrl('/', {skipLocationChange: true});
|
|
101
|
+
await this.router.navigate(['/login']);
|
|
102
|
+
}
|
|
69
103
|
isLoggedIn() {
|
|
70
104
|
return this.fidjAngularService.isLoggedIn();
|
|
71
105
|
}
|
|
72
106
|
async storeAll() {
|
|
73
107
|
return this.fidjStorage.storeData(this.fidjAngularService, this.nodeData);
|
|
74
108
|
}
|
|
109
|
+
isAdmin() {
|
|
110
|
+
return this.roles.indexOf('admin') > -1;
|
|
111
|
+
}
|
|
75
112
|
// === Notifications ===
|
|
76
113
|
async createNotification(rainId, message) {
|
|
77
114
|
try {
|
|
@@ -139,12 +176,12 @@ export class ProfileService {
|
|
|
139
176
|
}
|
|
140
177
|
return teams;
|
|
141
178
|
}
|
|
142
|
-
async getTeam(
|
|
179
|
+
async getTeam(teamId) {
|
|
143
180
|
try {
|
|
144
181
|
const resp = await this.fidjAngularService.sendOnEndpoint({
|
|
145
182
|
key: 'teams',
|
|
146
183
|
verb: 'GET',
|
|
147
|
-
relativePath:
|
|
184
|
+
relativePath: teamId,
|
|
148
185
|
defaultKeyUrl: this.defaultUrlForAPI + '/teams'
|
|
149
186
|
});
|
|
150
187
|
return new TeamNode(resp.data);
|
|
@@ -157,7 +194,7 @@ export class ProfileService {
|
|
|
157
194
|
// === Radars ===
|
|
158
195
|
async getRadars(teamId) {
|
|
159
196
|
const radars = [];
|
|
160
|
-
const url = this.defaultUrlForAPI + '/radars' + '?teamId=' + teamId;
|
|
197
|
+
const url = this.defaultUrlForAPI + '/radars' + (teamId ? '?teamId=' + teamId : '');
|
|
161
198
|
try {
|
|
162
199
|
const resp = await this.fidjAngularService.sendOnEndpoint({
|
|
163
200
|
key: 'radars',
|
|
@@ -238,7 +275,7 @@ export class ProfileService {
|
|
|
238
275
|
}
|
|
239
276
|
return [];
|
|
240
277
|
}
|
|
241
|
-
async getRainTimeframe(rainId, begin, end) {
|
|
278
|
+
async getRainTimeframe(rainId, begin, end, forced = false) {
|
|
242
279
|
try {
|
|
243
280
|
let queryPath = '' + rainId + '?format=timeframe';
|
|
244
281
|
if (begin) {
|
|
@@ -247,6 +284,9 @@ export class ProfileService {
|
|
|
247
284
|
if (end) {
|
|
248
285
|
queryPath += '&end=' + end.toISOString();
|
|
249
286
|
}
|
|
287
|
+
if (forced) {
|
|
288
|
+
queryPath += '&forced=true';
|
|
289
|
+
}
|
|
250
290
|
const resp = await this.fidjAngularService.sendOnEndpoint({
|
|
251
291
|
key: 'rains',
|
|
252
292
|
verb: 'GET',
|
|
@@ -265,7 +305,7 @@ export class ProfileService {
|
|
|
265
305
|
// === Rains ===
|
|
266
306
|
async getRains(teamId) {
|
|
267
307
|
const rains = [];
|
|
268
|
-
const url = this.defaultUrlForAPI + '/rains?teamId=' + teamId;
|
|
308
|
+
const url = this.defaultUrlForAPI + '/rains' + (teamId ? '?teamId=' + teamId : '');
|
|
269
309
|
try {
|
|
270
310
|
const resp = await this.fidjAngularService.sendOnEndpoint({
|
|
271
311
|
key: 'rains',
|
|
@@ -388,7 +428,6 @@ export class ProfileService {
|
|
|
388
428
|
verb: 'GET',
|
|
389
429
|
relativePath: queryPath,
|
|
390
430
|
defaultKeyUrl: this.defaultUrlForAPI + '/rains',
|
|
391
|
-
// timeout: 200000,
|
|
392
431
|
});
|
|
393
432
|
const rainComputationQuality = new RainComputationQuality(response.data);
|
|
394
433
|
rainComputationQuality.qualitySpeedMatrixContainer = SpeedMatrixContainer
|
|
@@ -463,4 +502,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
463
502
|
providedIn: 'root'
|
|
464
503
|
}]
|
|
465
504
|
}], ctorParameters: function () { return [{ type: i1.Storage }, { type: i2.FidjService }, { type: i3.HttpClient }, { type: i4.Router }]; } });
|
|
466
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC9zaGFyZWQvcHJvZmlsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsU0FBUyxFQUNULGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLFFBQVEsRUFDUixvQkFBb0IsRUFDcEIsUUFBUSxFQUNULE1BQU0sYUFBYSxDQUFDO0FBSXJCLE9BQU8sRUFBQyxXQUFXLEVBQWtCLE1BQU0sc0JBQXNCLENBQUM7QUFFbEUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sU0FBUyxDQUFDOzs7Ozs7QUFNeEMsTUFBTSxPQUFPLGNBQWM7SUFVekIsWUFBc0IsT0FBZ0IsRUFDaEIsa0JBQStCLEVBQy9CLElBQWdCLEVBQ2xCLE1BQWM7UUFIWixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBYTtRQUMvQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFHaEMsa0RBQWtEO1FBQ2xELE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUV2QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQztRQUMvQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQztRQUNyRCxJQUFJLENB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QUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUM7WUFDeEQsR0FBRyxFQUFFLFFBQVE7WUFDYixJQUFJLEVBQUUsS0FBSztZQUNYLFlBQVksRUFBRSxTQUFTO1lBQ3ZCLGFBQWEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUztTQUNqRCxDQUFDLENBQUM7UUFFSCxNQUFNLGFBQWEsR0FBbUIsRUFBRSxDQUFDO1FBQ3pDLEtBQUssTUFBTSxZQUFZLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDbEQsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1NBQ3BEO1FBQ0QsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVELGtCQUFrQjtJQUVSLFFBQVEsQ0FBQyxLQUFvQjtRQUNyQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDOzs0R0FuZ0JVLGNBQWM7Z0hBQWQsY0FBYyxjQUZiLE1BQU07NEZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBFdmVudE5vZGUsXG4gIEdhdWdlTWVhc3VyZSxcbiAgR2F1Z2VOb2RlLFxuICBSYWRhck5vZGUsXG4gIFJhaW5Db21wdXRhdGlvbixcbiAgUmFpbkNvbXB1dGF0aW9uTWFwLFxuICBSYWluQ29tcHV0YXRpb25RdWFsaXR5LFxuICBSYWluTm9kZSxcbiAgU3BlZWRNYXRyaXhDb250YWluZXIsXG4gIFRlYW1Ob2RlXG59IGZyb20gJ3JhYWluLW1vZGVsJztcblxuaW1wb3J0IHtTdG9yYWdlfSBmcm9tICcuL3N0b3JhZ2Uuc2VydmljZSc7XG5cbmltcG9ydCB7RmlkalN0b3JhZ2UsIEZpZGpTdG9yYWdlTm9kZX0gZnJvbSAnLi9maWRqLXN0b3JhZ2UubW9kZWwnO1xuaW1wb3J0IHtFcnJvckludGVyZmFjZSwgRmlkalNlcnZpY2V9IGZyb20gJ2ZpZGotYW5ndWxhcic7XG5pbXBvcnQge1hZVHlwZX0gZnJvbSAnLi94eXR5cGUnO1xuaW1wb3J0IHtHYXVnZU5vZGVGaWx0ZXJ9IGZyb20gJy4vdG9vbHMnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFByb2ZpbGVTZXJ2aWNlIHtcbiAgcHVibGljIHJlYWR5Rm9yU3luYzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICBwdWJsaWMgYXNUZWFtSWQ6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgZW1haWw6IHN0cmluZztcbiAgcHJvdGVjdGVkIGlzRGVtbzogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIHJvbGVzOiBBcnJheTxzdHJpbmc+O1xuICBwcm90ZWN0ZWQgbm9kZURhdGE6IEZpZGpTdG9yYWdlTm9kZTtcbiAgcHJvdGVjdGVkIGZpZGpTdG9yYWdlOiBGaWRqU3RvcmFnZTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgc3RvcmFnZTogU3RvcmFnZSxcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIGZpZGpBbmd1bGFyU2VydmljZTogRmlkalNlcnZpY2UsXG4gICAgICAgICAgICAgIHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLCkge1xuXG5cbiAgICAvLyBjb25zdCBkZWZhdWx0VXJsRm9yQVBJID0gZW52aXJvbm1lbnQuc2VydmVyVXJsO1xuICAgIGNvbnNvbGUubG9nKCdQcm9maWxlU2VydmljZTogTmV3IyMjIycpO1xuXG4gICAgdGhpcy5lbWFpbCA9IHRoaXMuc3RvcmFnZS5nZXQoJ2VtYWlsJykgfHwgbnVsbDtcbiAgICB0aGlzLmFzVGVhbUlkID0gdGhpcy5zdG9yYWdlLmdldCgnYXNUZWFtSWQnKSB8fCBudWxsO1xuICAgIHRoaXMucmVhZHlGb3JTeW5jID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5yb2xlcyA9IFtdO1xuICAgIHRoaXMuZmlkalN0b3JhZ2UgPSBuZXcgRmlkalN0b3JhZ2Uoc3RvcmFnZSk7XG4gICAgdGhpcy5pc0RlbW9Nb2RlID0gZmFsc2U7XG4gIH1cblxuICBnZXQgaXNEZW1vTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlbW87XG4gIH1cblxuICBzZXQgaXNEZW1vTW9kZShtb2RlKSB7XG4gICAgdGhpcy5pc0RlbW8gPSBtb2RlID8gbW9kZSA6IHRydWU7XG4gICAgdGhpcy5maWRqU3RvcmFnZS5zZXREZW1vTW9kZSh0aGlzLmlzRGVtbyk7XG4gIH1cblxuICBnZXQgZGVmYXVsdFVybEZvckFQSSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlLmdldCgnVXJsRm9yQVBJJyk7XG4gIH1cblxuICBzZXQgZGVmYXVsdFVybEZvckFQSSh1cmw6IHN0cmluZykge1xuICAgIHRoaXMuc3RvcmFnZS5zZXQoJ1VybEZvckFQSScsIHVybCk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoUHJvZmlsZSgpOiBQcm9taXNlPEZpZGpTdG9yYWdlTm9kZT4ge1xuICAgIHRoaXMubm9kZURhdGEgPSBhd2FpdCB0aGlzLmZpZGpTdG9yYWdlLmdldFJlZnJlc2hlZE5vZGVDb3B5KHRoaXMuZmlkakFuZ3VsYXJTZXJ2aWNlKTtcbiAgICB0aGlzLnNldFJvbGVzKGF3YWl0IHRoaXMuZmlkakFuZ3VsYXJTZXJ2aWNlLmdldFJvbGVzKCkpO1xuICAgIHJldHVybiB0aGlzLm5vZGVEYXRhO1xuICB9XG5cbiAgZ2V0RW1haWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZW1haWw7XG4gIH1cblxuICBzZXRFbWFpbChlbWFpbDogc3RyaW5nKSB7XG4gICAgdGhpcy5lbWFpbCA9IGVtYWlsO1xuICAgIHRoaXMuc3RvcmFnZS5zZXQoJ2VtYWlsJywgdGhpcy5lbWFpbCk7XG4gIH1cblxuICBsb2dvdXQoKSB7XG4gICAgdGhpcy5zdG9yYWdlLnJlbW92ZSgnZW1haWwnKTtcbiAgfVxuXG4gIGFzeW5jIGNoZWNrRXJyb3IoZXJyb3I6IEVycm9ySW50ZXJmYWNlKSB7XG4gICAgY29uc29sZS53YXJuKCdjaGVja0Vycm9yJywgZXJyb3IpO1xuICAgIGlmIChlcnJvci5jb2RlID09PSA0MDEgfHwgZXJyb3IuY29kZSA9PT0gNDAzKSB7XG4gICAgICBjb25zb2xlLmxvZygnbG9va3Mgbm90IGxvZ2dlZCBpbicpO1xuICAgICAgaWYgKHRoaXMucm91dGVyLnVybC5pbmRleE9mKCdzaWduaW4nKSA8IDApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmZpZGpBbmd1bGFyU2VydmljZS5sb2dvdXQoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc0xvZ2dlZEluKCkge1xuICAgIHJldHVybiB0aGlzLmZpZGpBbmd1bGFyU2VydmljZS5pc0xvZ2dlZEluKCk7XG4gIH1cblxuICBhc3luYyBzdG9yZUFsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5maWRqU3RvcmFnZS5zdG9yZURhdGEodGhpcy5maWRqQW5ndWxhclNlcnZpY2UsIHRoaXMubm9kZURhdGEpO1xuICB9XG5cbiAgLy8gPT09IE5vdGlmaWNhdGlvbnMgPT09XG5cbiAgYXN5bmMgY3JlYXRlTm90aWZpY2F0aW9uKHJhaW5JZDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkakFuZ3VsYXJTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAnbm90aWZpY2F0aW9ucycsXG4gICAgICAgIHZlcmI6ICdQT1NUJyxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHJhaW46IHJhaW5JZCxcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IEV2ZW50Tm9kZShyZXNwLmRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2NyZWF0ZU5vdGlmaWNhdGlvbiBlcnJvcjonLCBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGdldE5vdGlmaWNhdGlvbnMocmFpbklkOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYXJncyA9ICc/cmFpbj0nICsgcmFpbklkO1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkakFuZ3VsYXJTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAnbm90aWZpY2F0aW9ucycsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICByZWxhdGl2ZVBhdGg6IGFyZ3MsXG4gICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvbm90aWZpY2F0aW9ucycsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlc3AuZGF0YS5ub3RpZmljYXRpb25zLm1hcChuID0+IG5ldyBFdmVudE5vZGUobikpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2NyZWF0ZU5vdGlmaWNhdGlvbiBlcnJvcjonLCBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGdldEFsbE5vdGlmaWNhdGlvbnMoKTogUHJvbWlzZTxFdmVudE5vZGVbXT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqQW5ndWxhclNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvbm90aWZpY2F0aW9ucycsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlc3AuZGF0YS5ub3RpZmljYXRpb25zLm1hcChuID0+IG5ldyBFdmVudE5vZGUobikpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyA9PT0gVGVhbXMgPT09XG5cbiAgYXN5bmMgZ2V0VGVhbXMoKTogUHJvbWlzZTxBcnJheTxUZWFtTm9kZT4+IHtcbiAgICBjb25zdCB0ZWFtcyA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqQW5ndWxhclNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICd0ZWFtc19hbGwnLFxuICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy90ZWFtc19hbGwnXG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgdGVhbSBvZiByZXNwLmRhdGEudGVhbXMpIHtcbiAgICAgICAgdGVhbXMucHVzaChuZXcgVGVhbU5vZGUodGVhbSkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2dldFRlYW1zIGVycm9yOicsIGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGVhbXM7XG4gIH1cblxuICBhc3luYyBnZXRUZWFtKGlkKTogUHJvbWlzZTxUZWFtTm9kZT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqQW5ndWxhclNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICd0ZWFtcycsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICByZWxhdGl2ZVBhdGg6IGlkLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3RlYW1zJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFRlYW1Ob2RlKHJlc3AuZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gPT09IFJhZGFycyA9PT1cblxuICBhc3luYyBnZXRSYWRhcnModGVhbUlkOiBzdHJpbmcpOiBQcm9taXNlPEFycmF5PFJhZGFyTm9kZT4+IHtcbiAgICBjb25zdCByYWRhcnMgPSBbXTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycycgKyAnP3RlYW1JZD0nICsgdGVhbUlkO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqQW5ndWxhclNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdyYWRhcnMnLFxuICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdXJsLFxuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IHIgb2YgcmVzcC5kYXRhLnJhZGFycykge1xuICAgICAgICBjb25zdCByYWRhciA9IG5ldyBSYWRhck5vZGUocik7XG4gICAgICAgIHJhZGFycy5wdXNoKHJhZGFyKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiByYWRhcnM7XG4gIH1cblxuICBhc3luYyBnZXRSYWRhcihpZDogc3RyaW5nKTogUHJvbWlzZTxSYWRhck5vZGU+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkakFuZ3VsYXJTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogaWQsXG4gICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFkYXJzJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFJhZGFyTm9kZShyZXNwLmRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIHB1dFJhZGFyKHJhZGFyTm9kZTogUmFkYXJOb2RlLCBjb25maWd1cmF0aW9uQXNKU09OPzogYW55KTogUHJvbWlzZTxSYWRhck5vZGU+IHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbmFtZTogcmFkYXJOb2RlLm5hbWUsXG4gICAgfTtcblxuICAgIGlmIChjb25maWd1cmF0aW9uQXNKU09OKSB7XG4gICAgICBkYXRhWydjb25maWd1cmF0aW9uQXNKU09OJ10gPSBjb25maWd1cmF0aW9uQXNKU09OO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqQW5ndWxhclNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdyYWRhcnMnLFxuICAgICAgICByZWxhdGl2ZVBhdGg6IHJhZGFyTm9kZS5pZCxcbiAgICAgICAgdmVyYjogJ1BVVCcsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFkYXJzLydcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbmV3IFJhZGFyTm9kZShyZXNwLmRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3JlbW92ZVJhZGFyIGVycm9yOicsIGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldExvbmVseVJhZGFycyhyYWluczogUmFpbk5vZGVbXSk6IFByb21pc2U8UmFkYXJOb2RlW10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkakFuZ3VsYXJTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFkYXJzJ1xuICAgICAgfSk7XG4gICAgICBjb25zdCBsb25lbHlSYWRhcnM6IFJhZGFyTm9kZVtdID0gW107XG4gICAgICBjb25zdCByYWRhcnMgPSByZXNwLmRhdGEucmFkYXJzO1xuICAgICAgcmFkYXJzLmZvckVhY2gocmFkYXIgPT4ge1xuICAgICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgcmFpbnMuZm9yRWFjaChyYWluID0+IHtcbiAgICAgICAgICBjb25zdCByZElkID0gcmFpbi5nZXRMaW5rSWQoJ3JhZGFyJywgMCk7XG4gICAgICAgICAgaWYgKHJkSWQgPT09IHJhZGFyLmlkKSB7XG4gICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgIGxvbmVseVJhZGFycy5wdXNoKHJhZGFyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbG9uZWx5UmFkYXJzO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgYXN5bmMgZ2V0UmFpblRpbWVmcmFtZShyYWluSWQ6IHN0cmluZywgYmVnaW46IERhdGUsIGVuZDogRGF0ZSk6IFByb21pc2U8UmFpbk5vZGU+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IHF1ZXJ5UGF0aCA9ICcnICsgcmFpbklkICsgJz9mb3JtYXQ9dGltZWZyYW1lJztcbiAgICAgIGlmIChiZWdpbikge1xuICAgICAgICBxdWVyeVBhdGggKz0gJyZiZWdpbj0nICsgYmVnaW4udG9JU09TdHJpbmcoKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQpIHtcbiAgICAgICAgcXVlcnlQYXRoICs9ICcmZW5kPScgKyBlbmQudG9JU09TdHJpbmcoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpBbmd1bGFyU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJ1xuICAgICAgfSk7XG4gICAgICBjb25zdCByYWluTm9kZSA9IG5ldyBSYWluTm9kZShyZXNwLmRhdGEudGltZWZyYW1lKTtcbiAgICAgIHJhaW5Ob2RlLm5hbWUgKz0gJy5yYWRhci50aW1lZnJhbWUnO1xuICAgICAgcmV0dXJuIHJhaW5Ob2RlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyA9PT0gUmFpbnMgPT09XG5cbiAgYXN5bmMgZ2V0UmFpbnModGVhbUlkOiBzdHJpbmcpOiBQcm9taXNlPEFycmF5PFJhaW5Ob2RlPj4ge1xuICAgIGNvbnN0IHJhaW5zID0gW107XG4gICAgY29uc3QgdXJsID0gdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucz90ZWFtSWQ9JyArIHRlYW1JZDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkakFuZ3VsYXJTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdXJsLFxuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IHJhaW4gb2YgcmVzcC5kYXRhLnJhaW5zKSB7XG4gICAgICAgIHJhaW5zLnB1c2gobmV3IFJhaW5Ob2RlKHJhaW4pKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiByYWlucztcbiAgfVxuXG4gIGFzeW5jIGdldFJhaW4oaWQ6IHN0cmluZyk6IFByb21pc2U8UmFpbk5vZGU+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkakFuZ3VsYXJTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICByZWxhdGl2ZVBhdGg6IGlkLFxuICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucy8nXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUmFpbk5vZGUocmVzcC5kYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gPT09IENvdW50XG5cbiAgYXN5bmMgZ2V0Q291bnRzKHJhaW5JZDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgcGVyaW9kQmVnaW4/OiBEYXRlLFxuICAgICAgICAgICAgICAgICAgcGVyaW9kRW5kPzogRGF0ZSxcbiAgICAgICAgICAgICAgICAgIHdpdGhRdWFsaXRpZXM/OiBib29sZWFuKTogUHJvbWlzZTx7XG4gICAgcmFkYXJNZWFzdXJlczogWFlUeXBlW10sXG4gICAgZ2F1Z2VNZWFzdXJlczogWFlUeXBlW10sXG4gICAgY29tcHV0YXRpb25zQnlUZWFtOiBYWVR5cGVbXSxcbiAgICBjb21wdXRhdGlvbnNJbnRlcm5hbDogWFlUeXBlW10sXG4gIH0+IHtcbiAgICB0cnkge1xuXG4gICAgICBsZXQgYXJncyA9ICcnO1xuICAgICAgaWYgKHBlcmlvZEJlZ2luICYmIHBlcmlvZEVuZCkge1xuICAgICAgICBhcmdzID0gJz9wZXJpb2RCZWdpbj0nICsgcGVyaW9kQmVnaW4udG9JU09TdHJpbmcoKSArICcmcGVyaW9kRW5kPScgKyBwZXJpb2RFbmQudG9JU09TdHJpbmcoKTtcbiAgICAgIH1cbiAgICAgIGlmICh3aXRoUXVhbGl0aWVzKSB7XG4gICAgICAgIGFyZ3MgKz0gJyZ3aXRoUXVhbGl0aWVzPScgKyB3aXRoUXVhbGl0aWVzO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqQW5ndWxhclNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogcmFpbklkICsgJy9jb3VudHMnICsgYXJncyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMvJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjb3VudHMgPSByZXNwLmRhdGEuY291bnRzO1xuICAgICAgY29uc3QgcmFkYXJNZWFzdXJlczogWFlUeXBlW10gPSBbXSxcbiAgICAgICAgZ2F1Z2VNZWFzdXJlczogWFlUeXBlW10gPSBbXSxcbiAgICAgICAgY29tcHV0YXRpb25zQnlUZWFtOiBYWVR5cGVbXSA9IFtdLFxuICAgICAgICBjb21wdXRhdGlvbnNJbnRlcm5hbDogWFlUeXBlW10gPSBbXTtcblxuICAgICAgY291bnRzLmZvckVhY2goYyA9PiB7XG4gICAgICAgIHJhZGFyTWVhc3VyZXMucHVzaChuZXcgWFlUeXBlKDEsIE5hTiwgTmFOLCBjLl9pZCkpO1xuICAgICAgICBnYXVnZU1lYXN1cmVzLnB1c2gobmV3IFhZVHlwZShjLmdhdWdlTWVhc3VyZXMsIE5hTiwgTmFOLCBjLl9pZCkpO1xuICAgICAgICBjb21wdXRhdGlvbnNCeVRlYW0ucHVzaChuZXcgWFlUeXBlKGMuY29tcHV0YXRpb25zQnlUZWFtLCBOYU4sIE5hTiwgYy5faWQpKTtcbiAgICAgICAgY29tcHV0YXRpb25zSW50ZXJuYWwucHVzaChuZXcgWFlUeXBlKGMuY29tcHV0YXRpb25zSW50ZXJuYWwsIE5hTiwgTmFOLCBjLl9pZCkpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJhZGFyTWVhc3VyZXMsXG4gICAgICAgIGdhdWdlTWVhc3VyZXMsXG4gICAgICAgIGNvbXB1dGF0aW9uc0J5VGVhbSxcbiAgICAgICAgY29tcHV0YXRpb25zSW50ZXJuYWwsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyA9PT0gQ29tcHV0aW5nID09PVxuXG4gIGFzeW5jIGxhdW5jaFJhaW5Db21wdXRhdGlvbihyYWluSWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGU6IERhdGUpOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvbltdPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpBbmd1bGFyU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICB2ZXJiOiAnUE9TVCcsXG4gICAgICBrZXk6ICdyYWlucycsXG4gICAgICByZWxhdGl2ZVBhdGg6ICcnICsgcmFpbklkICsgJy9jb21wdXRhdGlvbnMnLFxuICAgICAgZGF0YToge1xuICAgICAgICBkYXRlOiBkYXRlLnRvSVNPU3RyaW5nKCksXG4gICAgICB9LFxuICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucydcbiAgICB9KTtcblxuICAgIHJldHVybiByZXNwb25zZS5kYXRhLmNvbXB1dGF0aW9ucz8ubWFwKGMgPT4gbmV3IFJhaW5Db21wdXRhdGlvbihjKSk7XG4gIH1cblxuICBhc3luYyBnZXRSYWluQ29tcHV0YXRpb25DYXJ0ZXNpYW5NYXBCeUlkKHJhaW5JZDogc3RyaW5nLCByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxSYWluQ29tcHV0YXRpb25NYXA+IHtcbiAgICBjb25zdCBxdWVyeVBhdGggPSAnJyArIHJhaW5JZCArICcvY29tcHV0YXRpb25zLycgKyByYWluQ29tcHV0YXRpb25JZCArICc/Zm9ybWF0PWNhcnRlc2lhbi1tYXAnO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqQW5ndWxhclNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnXG4gICAgfSk7XG4gICAgaWYgKCFyZXNwb25zZS5kYXRhWydjYXJ0ZXNpYW4tbWFwJ10pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJhaW5Db21wdXRhdGlvbk1hcCA9IG5ldyBSYWluQ29tcHV0YXRpb25NYXAocmVzcG9uc2UuZGF0YVsnY2FydGVzaWFuLW1hcCddKTtcbiAgICByYWluQ29tcHV0YXRpb25NYXAubmFtZSA9IHJhaW5JZCArICcucmFpbi5jYXJ0ZXNpYW4tbWFwJztcbiAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uTWFwO1xuICB9XG5cbiAgYXN5bmMgZ2V0UmFpbkNvbXBhcmVzKHJhaW5JZDogc3RyaW5nLCByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTx7IGlkOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyB9W10+IHtcbiAgICBjb25zdCBxdWVyeVBhdGggPSAnJyArIHJhaW5JZCArICcvY29tcHV0YXRpb25zLycgKyByYWluQ29tcHV0YXRpb25JZDtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkakFuZ3VsYXJTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgIC8vIHRpbWVvdXQ6IDIwMDAwMCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJhaW5Db21wdXRhdGlvbiA9IG5ldyBSYWluQ29tcHV0YXRpb24ocmVzcG9uc2UuZGF0YSk7XG4gICAgY29uc3QgbGlua3MgPSByYWluQ29tcHV0YXRpb24uZ2V0TGlua3MoKTtcbiAgICBjb25zdCByYWluQ29tcHV0YXRpb25RdWFsaXRpZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgIGlmIChsaW5rLnJlbCA9PT0gJ3JhaW4tY29tcHV0YXRpb24tcXVhbGl0eScpIHtcbiAgICAgICAgY29uc3QgaWQgPSBsaW5rLmdldElkKCk7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBsaW5rLmhyZWYuc3Vic3RyaW5nKGxpbmsuaHJlZi5pbmRleE9mKCd2ZXJzaW9uLycpICsgOCwgbGluay5ocmVmLmluZGV4T2YoJy8nICsgaWQpKTtcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzLnB1c2goe2lkLCB2ZXJzaW9ufSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByYWluQ29tcHV0YXRpb25RdWFsaXRpZXM7XG4gIH1cblxuICBhc3luYyBnZXRSYWluQ29tcGFyZUJ5SWQocmFpbklkOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkOiBzdHJpbmcpOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvblF1YWxpdHk+IHtcbiAgICBjb25zdCBxdWVyeVBhdGggPSAnJyArIHJhaW5JZCArICcvY29tcHV0YXRpb25zLycgKyByYWluQ29tcHV0YXRpb25JZCArICcvY29tcGFyZXMvJyArIHJhaW5Db21wdXRhdGlvblF1YWxpdHlJZDtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkakFuZ3VsYXJTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgIC8vIHRpbWVvdXQ6IDIwMDAwMCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJhaW5Db21wdXRhdGlvblF1YWxpdHkgPSBuZXcgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eShyZXNwb25zZS5kYXRhKTtcbiAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lciA9IFNwZWVkTWF0cml4Q29udGFpbmVyXG4gICAgICAuQ3JlYXRlRnJvbUpzb24ocmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5xdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXIpO1xuICAgIHJldHVybiByYWluQ29tcHV0YXRpb25RdWFsaXR5O1xuICB9XG5cbiAgLy8gPT09IEdhdWdlcyA9PT1cblxuICBhc3luYyBnZXRHYXVnZShnYXVnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEdhdWdlTm9kZT4ge1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpBbmd1bGFyU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICBrZXk6ICdnYXVnZXMnLFxuICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICByZWxhdGl2ZVBhdGg6IGdhdWdlSWQsXG4gICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL2dhdWdlcydcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3IEdhdWdlTm9kZShyZXNwLmRhdGEpO1xuICB9XG5cbiAgYXN5bmMgZ2V0R2F1Z2VzKHJhaW5JZD86IHN0cmluZyk6IFByb21pc2U8QXJyYXk8R2F1Z2VOb2RlRmlsdGVyPj4ge1xuICAgIGxldCBxdWVyeVBhdGggPSAnJztcbiAgICBpZiAodGhpcy5hc1RlYW1JZCkge1xuICAgICAgcXVlcnlQYXRoICs9ICc/dGVhbUlkPScgKyB0aGlzLmFzVGVhbUlkO1xuICAgIH1cbiAgICBpZiAocmFpbklkKSB7XG4gICAgICBpZiAocXVlcnlQYXRoKSB7XG4gICAgICAgIHF1ZXJ5UGF0aCArPSAnJic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeVBhdGggKz0gJz8nO1xuICAgICAgfVxuICAgICAgcXVlcnlQYXRoICs9ICdyYWluSWQ9JyArIHJhaW5JZDtcbiAgICB9XG5cbiAgICBjb25zdCBnYXVnZXMgPSBbXTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkakFuZ3VsYXJTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAnZ2F1Z2VzJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL2dhdWdlcydcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGNvbnN0IGdhdWdlIG9mIHJlc3AuZGF0YS5nYXVnZXMpIHtcbiAgICAgICAgZ2F1Z2VzLnB1c2gobmV3IEdhdWdlTm9kZUZpbHRlcihnYXVnZSkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG4gICAgcmV0dXJuIGdhdWdlcztcbiAgfVxuXG4gIGFzeW5jIGdldEdhdWdlTWVhc3VyZXMoZ2F1Z2VJZDogc3RyaW5nLCBiZWdpbjogRGF0ZSwgZW5kOiBEYXRlKTogUHJvbWlzZTxHYXVnZU1lYXN1cmVbXT4ge1xuICAgIGNvbnN0IHF1ZXJ5UGF0aCA9ICcnICsgZ2F1Z2VJZCArICcvbWVhc3VyZXM/YmVnaW49JyArIGJlZ2luLnRvSVNPU3RyaW5nKCkgKyAnJmVuZD0nICsgZW5kLnRvSVNPU3RyaW5nKCk7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkakFuZ3VsYXJTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgIGtleTogJ2dhdWdlcycsXG4gICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9nYXVnZXMnXG4gICAgfSk7XG5cbiAgICBjb25zdCBnYXVnZU1lYXN1cmVzOiBHYXVnZU1lYXN1cmVbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZ2F1Z2VNZWFzdXJlIG9mIHJlc3AuZGF0YS5nYXVnZU1lYXN1cmVzKSB7XG4gICAgICBnYXVnZU1lYXN1cmVzLnB1c2gobmV3IEdhdWdlTWVhc3VyZShnYXVnZU1lYXN1cmUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGdhdWdlTWVhc3VyZXM7XG4gIH1cblxuICAvLyA9PT0gUHJpdmF0ZSA9PT1cblxuICBwcm90ZWN0ZWQgc2V0Um9sZXMocm9sZXM6IEFycmF5PHN0cmluZz4pOiB2b2lkIHtcbiAgICB0aGlzLnJvbGVzID0gcm9sZXM7XG4gIH1cblxufVxuIl19
|
|
505
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC9zaGFyZWQvcHJvZmlsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsU0FBUyxFQUNULGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLFFBQVEsRUFDUixvQkFBb0IsRUFDcEIsUUFBUSxFQUNULE1BQU0sYUFBYSxDQUFDO0FBSXJCLE9BQU8sRUFBQyxXQUFXLEVBQWtCLE1BQU0sc0JBQXNCLENBQUM7QUFDbEUsT0FBTyxFQUE4QixlQUFlLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDMUUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sU0FBUyxDQUFDOzs7Ozs7QUFNeEMsTUFBTSxPQUFPLGNBQWM7SUFXekIsWUFBc0IsT0FBZ0IsRUFDaEIsa0JBQStCLEVBQy9CLElBQWdCLEVBQ2xCLE1BQWM7UUFIWixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBYTtRQUMvQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFFaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRXZDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDO1FBQy9DLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFD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aW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBFdmVudE5vZGUsXG4gIEdhdWdlTWVhc3VyZSxcbiAgR2F1Z2VOb2RlLFxuICBSYWRhck5vZGUsXG4gIFJhaW5Db21wdXRhdGlvbixcbiAgUmFpbkNvbXB1dGF0aW9uTWFwLFxuICBSYWluQ29tcHV0YXRpb25RdWFsaXR5LFxuICBSYWluTm9kZSxcbiAgU3BlZWRNYXRyaXhDb250YWluZXIsXG4gIFRlYW1Ob2RlXG59IGZyb20gJ3JhYWluLW1vZGVsJztcblxuaW1wb3J0IHtTdG9yYWdlfSBmcm9tICcuL3N0b3JhZ2Uuc2VydmljZSc7XG5cbmltcG9ydCB7RmlkalN0b3JhZ2UsIEZpZGpTdG9yYWdlTm9kZX0gZnJvbSAnLi9maWRqLXN0b3JhZ2UubW9kZWwnO1xuaW1wb3J0IHtFcnJvckludGVyZmFjZSwgRmlkalNlcnZpY2UsIExvZ2dlckxldmVsRW51bX0gZnJvbSAnZmlkai1hbmd1bGFyJztcbmltcG9ydCB7WFlUeXBlfSBmcm9tICcuL3h5dHlwZSc7XG5pbXBvcnQge0dhdWdlTm9kZUZpbHRlcn0gZnJvbSAnLi90b29scyc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUHJvZmlsZVNlcnZpY2Uge1xuICBwdWJsaWMgcmVhZHlGb3JTeW5jOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XG4gIHB1YmxpYyBhc1RlYW1JZDogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBlbWFpbDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgaXNEZW1vOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgcm9sZXM6IEFycmF5PHN0cmluZz47XG4gIHByb3RlY3RlZCBub2RlRGF0YTogRmlkalN0b3JhZ2VOb2RlO1xuICBwcm90ZWN0ZWQgZmlkalN0b3JhZ2U6IEZpZGpTdG9yYWdlO1xuICBwcm90ZWN0ZWQgaGF2ZVRyeVRvUmVjb25uZWN0OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBzdG9yYWdlOiBTdG9yYWdlLFxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgZmlkakFuZ3VsYXJTZXJ2aWNlOiBGaWRqU2VydmljZSxcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsKSB7XG5cbiAgICBjb25zb2xlLmxvZygnUHJvZmlsZVNlcnZpY2U6IE5ldyMjIyMnKTtcblxuICAgIHRoaXMuZW1haWwgPSB0aGlzLnN0b3JhZ2UuZ2V0KCdlbWFpbCcpIHx8IG51bGw7XG4gICAgdGhpcy5hc1RlYW1JZCA9IHRoaXMuc3RvcmFnZS5nZXQoJ2FzVGVhbUlkJykgfHwgbnVsbDtcbiAgICB0aGlzLnJlYWR5Rm9yU3luYyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMucm9sZXMgPSBbXTtcbiAgICB0aGlzLmZpZGpTdG9yYWdlID0gbmV3IEZpZGpTdG9yYWdlKHN0b3JhZ2UpO1xuICAgIHRoaXMuaXNEZW1vTW9kZSA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGlzRGVtb01vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNEZW1vO1xuICB9XG5cbiAgc2V0IGlzRGVtb01vZGUobW9kZSkge1xuICAgIHRoaXMuaXNEZW1vID0gbW9kZSA/IG1vZGUgOiB0cnVlO1xuICAgIHRoaXMuZmlkalN0b3JhZ2Uuc2V0RGVtb01vZGUodGhpcy5pc0RlbW8pO1xuICB9XG5cbiAgZ2V0IGRlZmF1bHRVcmxGb3JBUEkoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5nZXQoJ1VybEZvckFQSScpO1xuICB9XG5cbiAgc2V0IGRlZmF1bHRVcmxGb3JBUEkodXJsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0b3JhZ2Uuc2V0KCdVcmxGb3JBUEknLCB1cmwpO1xuICB9XG5cbiAgYXN5bmMgcmVmcmVzaFByb2ZpbGUoKTogUHJvbWlzZTxGaWRqU3RvcmFnZU5vZGU+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5ub2RlRGF0YSA9IGF3YWl0IHRoaXMuZmlkalN0b3JhZ2UuZ2V0UmVmcmVzaGVkTm9kZUNvcHkodGhpcy5maWRqQW5ndWxhclNlcnZpY2UpO1xuICAgICAgdGhpcy5zZXRSb2xlcyhhd2FpdCB0aGlzLmZpZGpBbmd1bGFyU2VydmljZS5nZXRSb2xlcygpKTtcbiAgICAgIHJldHVybiB0aGlzLm5vZGVEYXRhO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICBnZXRFbWFpbCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbWFpbDtcbiAgfVxuXG4gIHNldEVtYWlsKGVtYWlsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVtYWlsID0gZW1haWw7XG4gICAgdGhpcy5zdG9yYWdlLnNldCgnZW1haWwnLCB0aGlzLmVtYWlsKTtcbiAgfVxuXG4gIGFzeW5jIGxvZ291dChmaWRqS2V5OiBzdHJpbmcsIGZpZGpQcm9kOiBib29sZWFuKSB7XG5cbiAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKCdlbWFpbCcpO1xuICAgIGF3YWl0IHRoaXMuZmlkakFuZ3VsYXJTZXJ2aWNlLmxvZ291dCh0cnVlKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmZpZGpBbmd1bGFyU2VydmljZS5pbml0KGZpZGpLZXksXG4gICAgICAgIHtcbiAgICAgICAgICBsb2dMZXZlbDogTG9nZ2VyTGV2ZWxFbnVtLklORk8sXG4gICAgICAgICAgY3J5cHRvOiBmYWxzZSxcbiAgICAgICAgICBwcm9kOiBmaWRqUHJvZCxcbiAgICAgICAgICB1c2VEQjogZmFsc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICBjb25zb2xlLmxvZygnaW5pdEZpZGogZG9uZS4nKTtcbiAgICAgIHRoaXMucmVhZHlGb3JTeW5jLm5leHQodHJ1ZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdpbml0RmlkaiBjYXRjaCBwYjogJywgZXJyKTtcbiAgICB9XG5cbiAgfVxuXG4gIGFzeW5jIGNoZWNrRXJyb3IoZXJyb3I6IEVycm9ySW50ZXJmYWNlKSB7XG4gICAgY29uc29sZS53YXJuKCdjaGVja0Vycm9yJywgZXJyb3IpO1xuICAgIGlmIChlcnJvci5jb2RlID09PSA0MDEpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdsb29rcyBub3QgbG9nZ2VkIGluJyk7XG5cbiAgICAgIGlmICh0aGlzLnJvdXRlci51cmwuaW5kZXhPZignbG9naW4nKSA8IDApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzeW5jID0gYXdhaXQgdGhpcy5maWRqQW5ndWxhclNlcnZpY2Uuc3luYygpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ290b0xvdXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdvdG9Mb3V0KCkge1xuICAgIGlmICh0aGlzLnJvdXRlci51cmwuaW5kZXhPZignbG9naW4nKSA+IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy9sb2dvdXQnLCB7c2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlfSk7XG4gICAgLy8gYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbG9nb3V0J10pO1xuICAgIC8vIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2xvZ2luJ10pO1xuICB9XG5cbiAgYXN5bmMgZ290b0xvZ2luKCkge1xuICAgIGlmICh0aGlzLnJvdXRlci51cmwuaW5kZXhPZignbG9naW4nKSA+IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nLCB7c2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlfSk7XG4gICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbG9naW4nXSk7XG4gIH1cblxuICBpc0xvZ2dlZEluKCkge1xuICAgIHJldHVybiB0aGlzLmZpZGpBbmd1bGFyU2VydmljZS5pc0xvZ2dlZEluKCk7XG4gIH1cblxuICBhc3luYyBzdG9yZUFsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5maWRqU3RvcmFnZS5zdG9yZURhdGEodGhpcy5maWRqQW5ndWxhclNlcnZpY2UsIHRoaXMubm9kZURhdGEpO1xuICB9XG5cbiAgaXNBZG1pbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yb2xlcy5pbmRleE9mKCdhZG1pbicpID4gLTE7XG4gIH1cblxuICAvLyA9PT0gTm90aWZpY2F0aW9ucyA9PT1cblxuICBhc3luYyBjcmVhdGVOb3RpZmljYXRpb24ocmFpbklkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqQW5ndWxhclNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgdmVyYjogJ1BPU1QnLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL25vdGlmaWNhdGlvbnMnLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgcmFpbjogcmFpbklkLFxuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgRXZlbnROb2RlKHJlc3AuZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignY3JlYXRlTm90aWZpY2F0aW9uIGVycm9yOicsIGUpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgYXN5bmMgZ2V0Tm90aWZpY2F0aW9ucyhyYWluSWQ6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhcmdzID0gJz9yYWluPScgKyByYWluSWQ7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqQW5ndWxhclNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogYXJncyxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzcC5kYXRhLm5vdGlmaWNhdGlvbnMubWFwKG4gPT4gbmV3IEV2ZW50Tm9kZShuKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignY3JlYXRlTm90aWZpY2F0aW9uIGVycm9yOicsIGUpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgYXN5bmMgZ2V0QWxsTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPEV2ZW50Tm9kZVtdPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpBbmd1bGFyU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ25vdGlmaWNhdGlvbnMnLFxuICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzcC5kYXRhLm5vdGlmaWNhdGlvbnMubWFwKG4gPT4gbmV3IEV2ZW50Tm9kZShuKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cblxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8vID09PSBUZWFtcyA9PT1cblxuICBhc3luYyBnZXRUZWFtcygpOiBQcm9taXNlPEFycmF5PFRlYW1Ob2RlPj4ge1xuICAgIGNvbnN0IHRlYW1zID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpBbmd1bGFyU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ3RlYW1zX2FsbCcsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3RlYW1zX2FsbCdcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCB0ZWFtIG9mIHJlc3AuZGF0YS50ZWFtcykge1xuICAgICAgICB0ZWFtcy5wdXNoKG5ldyBUZWFtTm9kZSh0ZWFtKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignZ2V0VGVhbXMgZXJyb3I6JywgZSk7XG4gICAgfVxuICAgIHJldHVybiB0ZWFtcztcbiAgfVxuXG4gIGFzeW5jIGdldFRlYW0odGVhbUlkOiBzdHJpbmcpOiBQcm9taXNlPFRlYW1Ob2RlPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpBbmd1bGFyU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ3RlYW1zJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogdGVhbUlkLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3RlYW1zJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFRlYW1Ob2RlKHJlc3AuZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gPT09IFJhZGFycyA9PT1cblxuICBhc3luYyBnZXRSYWRhcnModGVhbUlkOiBzdHJpbmcpOiBQcm9taXNlPEFycmF5PFJhZGFyTm9kZT4+IHtcbiAgICBjb25zdCByYWRhcnMgPSBbXTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycycgKyAodGVhbUlkID8gJz90ZWFtSWQ9JyArIHRlYW1JZCA6ICcnKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkakFuZ3VsYXJTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIGRlZmF1bHRLZXlVcmw6IHVybCxcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCByIG9mIHJlc3AuZGF0YS5yYWRhcnMpIHtcbiAgICAgICAgY29uc3QgcmFkYXIgPSBuZXcgUmFkYXJOb2RlKHIpO1xuICAgICAgICByYWRhcnMucHVzaChyYWRhcik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gcmFkYXJzO1xuICB9XG5cbiAgYXN5bmMgZ2V0UmFkYXIoaWQ6IHN0cmluZyk6IFByb21pc2U8UmFkYXJOb2RlPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpBbmd1bGFyU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ3JhZGFycycsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICByZWxhdGl2ZVBhdGg6IGlkLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycydcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBSYWRhck5vZGUocmVzcC5kYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBhc3luYyBwdXRSYWRhcihyYWRhck5vZGU6IFJhZGFyTm9kZSwgY29uZmlndXJhdGlvbkFzSlNPTj86IGFueSk6IFByb21pc2U8UmFkYXJOb2RlPiB7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIG5hbWU6IHJhZGFyTm9kZS5uYW1lLFxuICAgIH07XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbkFzSlNPTikge1xuICAgICAgZGF0YVsnY29uZmlndXJhdGlvbkFzSlNPTiddID0gY29uZmlndXJhdGlvbkFzSlNPTjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkakFuZ3VsYXJTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgcmVsYXRpdmVQYXRoOiByYWRhck5vZGUuaWQsXG4gICAgICAgIHZlcmI6ICdQVVQnLFxuICAgICAgICBkYXRhLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycy8nXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG5ldyBSYWRhck5vZGUocmVzcC5kYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdyZW1vdmVSYWRhciBlcnJvcjonLCBlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRMb25lbHlSYWRhcnMocmFpbnM6IFJhaW5Ob2RlW10pOiBQcm9taXNlPFJhZGFyTm9kZVtdPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpBbmd1bGFyU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ3JhZGFycycsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycydcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbG9uZWx5UmFkYXJzOiBSYWRhck5vZGVbXSA9IFtdO1xuICAgICAgY29uc3QgcmFkYXJzID0gcmVzcC5kYXRhLnJhZGFycztcbiAgICAgIHJhZGFycy5mb3JFYWNoKHJhZGFyID0+IHtcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgICAgIHJhaW5zLmZvckVhY2gocmFpbiA9PiB7XG4gICAgICAgICAgY29uc3QgcmRJZCA9IHJhaW4uZ2V0TGlua0lkKCdyYWRhcicsIDApO1xuICAgICAgICAgIGlmIChyZElkID09PSByYWRhci5pZCkge1xuICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICBsb25lbHlSYWRhcnMucHVzaChyYWRhcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGxvbmVseVJhZGFycztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGFzeW5jIGdldFJhaW5UaW1lZnJhbWUocmFpbklkOiBzdHJpbmcsIGJlZ2luOiBEYXRlLCBlbmQ6IERhdGUsIGZvcmNlZCA9IGZhbHNlKTogUHJvbWlzZTxSYWluTm9kZT4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcXVlcnlQYXRoID0gJycgKyByYWluSWQgKyAnP2Zvcm1hdD10aW1lZnJhbWUnO1xuICAgICAgaWYgKGJlZ2luKSB7XG4gICAgICAgIHF1ZXJ5UGF0aCArPSAnJmJlZ2luPScgKyBiZWdpbi50b0lTT1N0cmluZygpO1xuICAgICAgfVxuICAgICAgaWYgKGVuZCkge1xuICAgICAgICBxdWVyeVBhdGggKz0gJyZlbmQ9JyArIGVuZC50b0lTT1N0cmluZygpO1xuICAgICAgfVxuICAgICAgaWYgKGZvcmNlZCkge1xuICAgICAgICBxdWVyeVBhdGggKz0gJyZmb3JjZWQ9dHJ1ZSc7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqQW5ndWxhclNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucydcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmFpbk5vZGUgPSBuZXcgUmFpbk5vZGUocmVzcC5kYXRhLnRpbWVmcmFtZSk7XG4gICAgICByYWluTm9kZS5uYW1lICs9ICcucmFkYXIudGltZWZyYW1lJztcbiAgICAgIHJldHVybiByYWluTm9kZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gPT09IFJhaW5zID09PVxuXG4gIGFzeW5jIGdldFJhaW5zKHRlYW1JZDogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxSYWluTm9kZT4+IHtcbiAgICBjb25zdCByYWlucyA9IFtdO1xuICAgIGNvbnN0IHVybCA9IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnICsgKHRlYW1JZCA/ICc/dGVhbUlkPScgKyB0ZWFtSWQgOiAnJyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpBbmd1bGFyU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIGRlZmF1bHRLZXlVcmw6IHVybCxcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCByYWluIG9mIHJlc3AuZGF0YS5yYWlucykge1xuICAgICAgICByYWlucy5wdXNoKG5ldyBSYWluTm9kZShyYWluKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gcmFpbnM7XG4gIH1cblxuICBhc3luYyBnZXRSYWluKGlkOiBzdHJpbmcpOiBQcm9taXNlPFJhaW5Ob2RlPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpBbmd1bGFyU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgcmVsYXRpdmVQYXRoOiBpZCxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMvJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFJhaW5Ob2RlKHJlc3AuZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PSBDb3VudFxuXG4gIGFzeW5jIGdldENvdW50cyhyYWluSWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgIHBlcmlvZEJlZ2luPzogRGF0ZSxcbiAgICAgICAgICAgICAgICAgIHBlcmlvZEVuZD86IERhdGUsXG4gICAgICAgICAgICAgICAgICB3aXRoUXVhbGl0aWVzPzogYm9vbGVhbik6IFByb21pc2U8e1xuICAgIHJhZGFyTWVhc3VyZXM6IFhZVHlwZVtdLFxuICAgIGdhdWdlTWVhc3VyZXM6IFhZVHlwZVtdLFxuICAgIGNvbXB1dGF0aW9uc0J5VGVhbTogWFlUeXBlW10sXG4gICAgY29tcHV0YXRpb25zSW50ZXJuYWw6IFhZVHlwZVtdLFxuICB9PiB7XG4gICAgdHJ5IHtcblxuICAgICAgbGV0IGFyZ3MgPSAnJztcbiAgICAgIGlmIChwZXJpb2RCZWdpbiAmJiBwZXJpb2RFbmQpIHtcbiAgICAgICAgYXJncyA9ICc/cGVyaW9kQmVnaW49JyArIHBlcmlvZEJlZ2luLnRvSVNPU3RyaW5nKCkgKyAnJnBlcmlvZEVuZD0nICsgcGVyaW9kRW5kLnRvSVNPU3RyaW5nKCk7XG4gICAgICB9XG4gICAgICBpZiAod2l0aFF1YWxpdGllcykge1xuICAgICAgICBhcmdzICs9ICcmd2l0aFF1YWxpdGllcz0nICsgd2l0aFF1YWxpdGllcztcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkakFuZ3VsYXJTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICByZWxhdGl2ZVBhdGg6IHJhaW5JZCArICcvY291bnRzJyArIGFyZ3MsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zLycsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY291bnRzID0gcmVzcC5kYXRhLmNvdW50cztcbiAgICAgIGNvbnN0IHJhZGFyTWVhc3VyZXM6IFhZVHlwZVtdID0gW10sXG4gICAgICAgIGdhdWdlTWVhc3VyZXM6IFhZVHlwZVtdID0gW10sXG4gICAgICAgIGNvbXB1dGF0aW9uc0J5VGVhbTogWFlUeXBlW10gPSBbXSxcbiAgICAgICAgY29tcHV0YXRpb25zSW50ZXJuYWw6IFhZVHlwZVtdID0gW107XG5cbiAgICAgIGNvdW50cy5mb3JFYWNoKGMgPT4ge1xuICAgICAgICByYWRhck1lYXN1cmVzLnB1c2gobmV3IFhZVHlwZSgxLCBOYU4sIE5hTiwgYy5faWQpKTtcbiAgICAgICAgZ2F1Z2VNZWFzdXJlcy5wdXNoKG5ldyBYWVR5cGUoYy5nYXVnZU1lYXN1cmVzLCBOYU4sIE5hTiwgYy5faWQpKTtcbiAgICAgICAgY29tcHV0YXRpb25zQnlUZWFtLnB1c2gobmV3IFhZVHlwZShjLmNvbXB1dGF0aW9uc0J5VGVhbSwgTmFOLCBOYU4sIGMuX2lkKSk7XG4gICAgICAgIGNvbXB1dGF0aW9uc0ludGVybmFsLnB1c2gobmV3IFhZVHlwZShjLmNvbXB1dGF0aW9uc0ludGVybmFsLCBOYU4sIE5hTiwgYy5faWQpKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICByYWRhck1lYXN1cmVzLFxuICAgICAgICBnYXVnZU1lYXN1cmVzLFxuICAgICAgICBjb21wdXRhdGlvbnNCeVRlYW0sXG4gICAgICAgIGNvbXB1dGF0aW9uc0ludGVybmFsLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gPT09IENvbXB1dGluZyA9PT1cblxuICBhc3luYyBsYXVuY2hSYWluQ29tcHV0YXRpb24ocmFpbklkOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiBEYXRlKTogUHJvbWlzZTxSYWluQ29tcHV0YXRpb25bXT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqQW5ndWxhclNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgdmVyYjogJ1BPU1QnLFxuICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgcmVsYXRpdmVQYXRoOiAnJyArIHJhaW5JZCArICcvY29tcHV0YXRpb25zJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZGF0ZTogZGF0ZS50b0lTT1N0cmluZygpLFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5jb21wdXRhdGlvbnM/Lm1hcChjID0+IG5ldyBSYWluQ29tcHV0YXRpb24oYykpO1xuICB9XG5cbiAgYXN5bmMgZ2V0UmFpbkNvbXB1dGF0aW9uQ2FydGVzaWFuTWFwQnlJZChyYWluSWQ6IHN0cmluZywgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8UmFpbkNvbXB1dGF0aW9uTWFwPiB7XG4gICAgY29uc3QgcXVlcnlQYXRoID0gJycgKyByYWluSWQgKyAnL2NvbXB1dGF0aW9ucy8nICsgcmFpbkNvbXB1dGF0aW9uSWQgKyAnP2Zvcm1hdD1jYXJ0ZXNpYW4tbWFwJztcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkakFuZ3VsYXJTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJ1xuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2UuZGF0YVsnY2FydGVzaWFuLW1hcCddKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByYWluQ29tcHV0YXRpb25NYXAgPSBuZXcgUmFpbkNvbXB1dGF0aW9uTWFwKHJlc3BvbnNlLmRhdGFbJ2NhcnRlc2lhbi1tYXAnXSk7XG4gICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY2FydGVzaWFuLW1hcCc7XG4gICAgcmV0dXJuIHJhaW5Db21wdXRhdGlvbk1hcDtcbiAgfVxuXG4gIGFzeW5jIGdldFJhaW5Db21wYXJlcyhyYWluSWQ6IHN0cmluZywgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8eyBpZDogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcgfVtdPiB7XG4gICAgY29uc3QgcXVlcnlQYXRoID0gJycgKyByYWluSWQgKyAnL2NvbXB1dGF0aW9ucy8nICsgcmFpbkNvbXB1dGF0aW9uSWQ7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpBbmd1bGFyU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICBrZXk6ICdyYWlucycsXG4gICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAvLyB0aW1lb3V0OiAyMDAwMDAsXG4gICAgfSk7XG5cbiAgICBjb25zdCByYWluQ29tcHV0YXRpb24gPSBuZXcgUmFpbkNvbXB1dGF0aW9uKHJlc3BvbnNlLmRhdGEpO1xuICAgIGNvbnN0IGxpbmtzID0gcmFpbkNvbXB1dGF0aW9uLmdldExpbmtzKCk7XG4gICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzID0gW107XG4gICAgZm9yIChjb25zdCBsaW5rIG9mIGxpbmtzKSB7XG4gICAgICBpZiAobGluay5yZWwgPT09ICdyYWluLWNvbXB1dGF0aW9uLXF1YWxpdHknKSB7XG4gICAgICAgIGNvbnN0IGlkID0gbGluay5nZXRJZCgpO1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gbGluay5ocmVmLnN1YnN0cmluZyhsaW5rLmhyZWYuaW5kZXhPZigndmVyc2lvbi8nKSArIDgsIGxpbmsuaHJlZi5pbmRleE9mKCcvJyArIGlkKSk7XG4gICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdGllcy5wdXNoKHtpZCwgdmVyc2lvbn0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzO1xuICB9XG5cbiAgYXN5bmMgZ2V0UmFpbkNvbXBhcmVCeUlkKHJhaW5JZDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHlJZDogc3RyaW5nKTogUHJvbWlzZTxSYWluQ29tcHV0YXRpb25RdWFsaXR5PiB7XG4gICAgY29uc3QgcXVlcnlQYXRoID0gJycgKyByYWluSWQgKyAnL2NvbXB1dGF0aW9ucy8nICsgcmFpbkNvbXB1dGF0aW9uSWQgKyAnL2NvbXBhcmVzLycgKyByYWluQ29tcHV0YXRpb25RdWFsaXR5SWQ7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpBbmd1bGFyU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICBrZXk6ICdyYWlucycsXG4gICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgfSk7XG5cbiAgICBjb25zdCByYWluQ29tcHV0YXRpb25RdWFsaXR5ID0gbmV3IFJhaW5Db21wdXRhdGlvblF1YWxpdHkocmVzcG9uc2UuZGF0YSk7XG4gICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5xdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXIgPSBTcGVlZE1hdHJpeENvbnRhaW5lclxuICAgICAgLkNyZWF0ZUZyb21Kc29uKHJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyKTtcbiAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uUXVhbGl0eTtcbiAgfVxuXG4gIC8vID09PSBHYXVnZXMgPT09XG5cbiAgYXN5bmMgZ2V0R2F1Z2UoZ2F1Z2VJZDogc3RyaW5nKTogUHJvbWlzZTxHYXVnZU5vZGU+IHtcbiAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqQW5ndWxhclNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAga2V5OiAnZ2F1Z2VzJyxcbiAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgcmVsYXRpdmVQYXRoOiBnYXVnZUlkLFxuICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9nYXVnZXMnXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBHYXVnZU5vZGUocmVzcC5kYXRhKTtcbiAgfVxuXG4gIGFzeW5jIGdldEdhdWdlcyhyYWluSWQ/OiBzdHJpbmcpOiBQcm9taXNlPEFycmF5PEdhdWdlTm9kZUZpbHRlcj4+IHtcbiAgICBsZXQgcXVlcnlQYXRoID0gJyc7XG4gICAgaWYgKHRoaXMuYXNUZWFtSWQpIHtcbiAgICAgIHF1ZXJ5UGF0aCArPSAnP3RlYW1JZD0nICsgdGhpcy5hc1RlYW1JZDtcbiAgICB9XG4gICAgaWYgKHJhaW5JZCkge1xuICAgICAgaWYgKHF1ZXJ5UGF0aCkge1xuICAgICAgICBxdWVyeVBhdGggKz0gJyYnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlcnlQYXRoICs9ICc/JztcbiAgICAgIH1cbiAgICAgIHF1ZXJ5UGF0aCArPSAncmFpbklkPScgKyByYWluSWQ7XG4gICAgfVxuXG4gICAgY29uc3QgZ2F1Z2VzID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpBbmd1bGFyU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ2dhdWdlcycsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9nYXVnZXMnXG4gICAgICB9KTtcblxuICAgICAgZm9yIChjb25zdCBnYXVnZSBvZiByZXNwLmRhdGEuZ2F1Z2VzKSB7XG4gICAgICAgIGdhdWdlcy5wdXNoKG5ldyBHYXVnZU5vZGVGaWx0ZXIoZ2F1Z2UpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiBnYXVnZXM7XG4gIH1cblxuICBhc3luYyBnZXRHYXVnZU1lYXN1cmVzKGdhdWdlSWQ6IHN0cmluZywgYmVnaW46IERhdGUsIGVuZDogRGF0ZSk6IFByb21pc2U8R2F1Z2VNZWFzdXJlW10+IHtcbiAgICBjb25zdCBxdWVyeVBhdGggPSAnJyArIGdhdWdlSWQgKyAnL21lYXN1cmVzP2JlZ2luPScgKyBiZWdpbi50b0lTT1N0cmluZygpICsgJyZlbmQ9JyArIGVuZC50b0lTT1N0cmluZygpO1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpBbmd1bGFyU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICBrZXk6ICdnYXVnZXMnLFxuICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvZ2F1Z2VzJ1xuICAgIH0pO1xuXG4gICAgY29uc3QgZ2F1Z2VNZWFzdXJlczogR2F1Z2VNZWFzdXJlW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGdhdWdlTWVhc3VyZSBvZiByZXNwLmRhdGEuZ2F1Z2VNZWFzdXJlcykge1xuICAgICAgZ2F1Z2VNZWFzdXJlcy5wdXNoKG5ldyBHYXVnZU1lYXN1cmUoZ2F1Z2VNZWFzdXJlKSk7XG4gICAgfVxuICAgIHJldHVybiBnYXVnZU1lYXN1cmVzO1xuICB9XG5cbiAgLy8gPT09IFByaXZhdGUgPT09XG5cbiAgcHJvdGVjdGVkIHNldFJvbGVzKHJvbGVzOiBBcnJheTxzdHJpbmc+KTogdm9pZCB7XG4gICAgdGhpcy5yb2xlcyA9IHJvbGVzO1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -138,7 +138,9 @@ export class CompareManager {
|
|
|
138
138
|
}
|
|
139
139
|
async buildComparesTimeline(targetsOrdered, withCompareDuplicate) {
|
|
140
140
|
const dates = targetsOrdered.map(t => t.date);
|
|
141
|
-
const qualities = dates
|
|
141
|
+
const qualities = dates
|
|
142
|
+
.map(d => this.getRainComputationQuality(d))
|
|
143
|
+
.filter(d => !!d);
|
|
142
144
|
this.buildCompares = SpeedMatrixContainer.BuildCompares(qualities, !withCompareDuplicate);
|
|
143
145
|
return this.buildCompares;
|
|
144
146
|
}
|
|
@@ -205,4 +207,4 @@ export class CompareManager {
|
|
|
205
207
|
this.selectGaugeInCompare();
|
|
206
208
|
}
|
|
207
209
|
}
|
|
208
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGFyZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC90b29scy9Db21wYXJlTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ25DLE9BQU8sRUFBNEYsb0JBQW9CLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDNUksT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQWtCakMsTUFBTSxPQUFPLGNBQWM7SUE0QnpCLFlBQ1ksUUFBa0IsRUFDbEIsY0FBOEIsRUFDakMsWUFBd0IsR0FBRyxFQUFFO0lBQ3BDLENBQUM7UUFIUyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUNqQyxjQUFTLEdBQVQsU0FBUyxDQUNmO1FBRUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFUyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQVcsRUFBRSxLQUFXLEVBQUUsT0FBZTtRQUVwRSxNQUFNLFdBQVcsR0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNwRCxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM1QyxTQUFTLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckYsT0FBTyxJQUFJLEtBQUssQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFF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RSxDQUFDO1FBQzFCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TWFwTGF0TG5nfSBmcm9tICdyYWFpbi11aSc7XG5pbXBvcnQge0lDb21wYXJlUGVyRGF0ZSwgSUNvbXBhcmVzLCBQb3NpdGlvblZhbHVlLCBRdWFsaXR5UG9pbnQsIFJhaW5Db21wdXRhdGlvblF1YWxpdHksIFJhaW5Ob2RlLCBTcGVlZE1hdHJpeENvbnRhaW5lcn0gZnJvbSAncmFhaW4tbW9kZWwnO1xuaW1wb3J0IHtYWVR5cGV9IGZyb20gJy4uL3h5dHlwZSc7XG5pbXBvcnQge1Byb2ZpbGVTZXJ2aWNlfSBmcm9tICcuLi9wcm9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtGcmFtZVNldH0gZnJvbSAnLi9GcmFtZVNldCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbXBhcmVUYXJnZXQge1xuICBkYXRlOiBEYXRlO1xuICByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nO1xuICByYWluQ29tcHV0YXRpb25RdWFsaXR5SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVUlDb21wYXJlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBjb21wYXJlUG9pbnRzOiBYWVR5cGVbXTtcbiAgY29tcGFyZVBvaW50c01heDogWFlUeXBlO1xuICBjb21wYXJlUG9pbnRzSGlzdG9yeTogUXVhbGl0eVBvaW50W107XG4gIHJlbWFya3M6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIENvbXBhcmVNYW5hZ2VyIHtcblxuICAvLyBwdWJsaWMgY29tcHV0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIHB1YmxpYyBnYXVnZXNJbkNvbXBhcmU6IE1hcExhdExuZ1tdO1xuICBwdWJsaWMgc2VsZWN0ZWRHYXVnZXM6IE1hcExhdExuZ1tdO1xuICBwdWJsaWMgc2VsZWN0ZWRQaXhlbHM6IE1hcExhdExuZ1tdO1xuICBwdWJsaWMgcGl4ZWxzU29sdXRpb25zOiBNYXBMYXRMbmdbXVtdO1xuXG4gIC8vIGZyb20gY29tcGFyZXNUaW1lbGluZVxuICBwdWJsaWMgY29tcGFyZU5hbWVzOiBzdHJpbmdbXTtcbiAgcHVibGljIHVpQ29tcGFyZXM6IElVSUNvbXBhcmVbXTtcbiAgcHVibGljIGNvbXBhcmVTcGVlZE1hdHJpeDogUG9zaXRpb25WYWx1ZVtdO1xuICBwdWJsaWMgY29tcGFyZVZlcnNpb246IHN0cmluZztcbiAgcHVibGljIGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yOiBudW1iZXI7XG5cbiAgcHVibGljIGN1cnJlbnRRdWFsaXR5RG9uZURhdGU6IERhdGU7XG4gIHB1YmxpYyBjdXJyZW50UXVhbGl0eUxhdW5jaGVkQnk6IHN0cmluZztcbiAgcHVibGljIGN1cnJlbnRRdWFsaXR5VGltZVNwZW50SW5NczogbnVtYmVyO1xuICBwdWJsaWMgZ2xvYmFsQ29tcGFyZVBvaW50czogWFlUeXBlW107XG4gIHB1YmxpYyBnbG9iYWxDb21wYXJlUG9pbnRzTWF4OiBYWVR5cGU7XG5cbiAgcHJvdGVjdGVkIGJ1aWxkQ29tcGFyZXM6IElDb21wYXJlcztcbiAgcHJvdGVjdGVkIHNlbGVjdGVkR2F1Z2U6IFF1YWxpdHlQb2ludDtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkR2F1Z2VJblBvaW50czogUXVhbGl0eVBvaW50O1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRHYXVnZUluUG9pbnRzRGV0YWlsOiBzdHJpbmc7XG4gIHByb3RlY3RlZCByYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJhaW5Ob2RlOiBSYWluTm9kZSxcbiAgICBwcm90ZWN0ZWQgcHJvZmlsZVNlcnZpY2U6IFByb2ZpbGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBvbkNoYW5nZXM6ICgpID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgfVxuICApIHtcbiAgICB0aGlzLmNsZWFuQWxsKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RhdGljIENvbXBhcmVEYXRlKGRhdGUxOiBEYXRlLCBkYXRlMjogRGF0ZSwgbWludXRlczogbnVtYmVyKTogYm9vbGVhbiB7XG5cbiAgICBjb25zdCBkYXRlMUFzRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKGRhdGUxLmdldFRpbWUoKSk7XG4gICAgY29uc3QgZGF0ZTJEaWZmID0gbmV3IERhdGUoZGF0ZTIuZ2V0VGltZSgpKTtcbiAgICBkYXRlMkRpZmYuc2V0TWludXRlcyhkYXRlMkRpZmYuZ2V0TWludXRlcygpICsgbWludXRlcyk7XG4gICAgY29uc3QgZGlmZiA9IE1hdGgucm91bmQoKGRhdGUxQXNEYXRlLmdldFRpbWUoKSAtIGRhdGUyRGlmZi5nZXRUaW1lKCkpIC8gKDYwICogMTAwMCkpO1xuICAgIHJldHVybiBkaWZmID09PSAwO1xuICB9XG5cbiAgcHVibGljIGNsZWFuQWxsKCkge1xuICAgIHRoaXMuZ2F1Z2VzSW5Db21wYXJlID0gW107XG4gICAgdGhpcy5zZWxlY3RlZEdhdWdlcyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBbXTtcbiAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IFtdO1xuXG4gICAgdGhpcy5idWlsZENvbXBhcmVzID0ge1xuICAgICAgY29tcGFyZXNQZXJEYXRlOiBbXSxcbiAgICAgIGNvbXBhcmVDdW11bGF0aXZlOiBudWxsXG4gICAgfTtcbiAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHMgPSBbXTtcbiAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHNNYXggPSBuZXcgWFlUeXBlKDAsIDApO1xuICAgIHRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzUGVyRGF0ZSA9IHt9O1xuXG4gICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5jbGVhbkNvbXBhcmVRdWFsaXR5KCdubyBjb21wYXJlIHlldCcpO1xuICB9XG5cbiAgYXN5bmMgcmVmcmVzaENvbXBhcmVRdWFsaXR5KGZyYW1lU2V0OiBGcmFtZVNldCkge1xuXG4gICAgY29uc3QgY29tcGFyZVBlckRhdGUgPSB0aGlzLmdldENvbXBhcmVQZXJEYXRlKGZyYW1lU2V0LmRhdGUpO1xuXG4gICAgaWYgKCFjb21wYXJlUGVyRGF0ZSB8fCAhY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eT8ucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyKSB7XG4gICAgICB0aGlzLmNsZWFuQ29tcGFyZVF1YWxpdHkoJ25vIGN1cnJlbnQgcXVhbGl0eSAnICsgT2JqZWN0LmtleXModGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlKSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVpQ29tcGFyZXM6IElVSUNvbXBhcmVbXSA9IGNvbXBhcmVQZXJEYXRlLmNvbXBhcmVUaW1lbGluZS5tYXAoYyA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBjLm5hbWUsXG4gICAgICAgIGNvbXBhcmVQb2ludHM6IGMucXVhbGl0eVBvaW50cy5tYXAocCA9PiBuZXcgWFlUeXBlKHAuZ2V0R2F1Z2VWYWx1ZSgpLCBwLmdldFJhaW5WYWx1ZSgpLCAyLCBwLmdhdWdlTGFiZWwsIHAuZ2F1Z2VJZCkpLFxuICAgICAgICBjb21wYXJlUG9pbnRzTWF4OiBuZXcgWFlUeXBlKGMubWF4VmFsdWUgKyAyMCwgYy5tYXhWYWx1ZSArIDIwKSxcbiAgICAgICAgY29tcGFyZVBvaW50c0hpc3Rvcnk6IGMucXVhbGl0eVBvaW50c0xlZ2FjeSxcbiAgICAgICAgcmVtYXJrczogYy5yZW1hcmtzXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5jdXJyZW50UXVhbGl0eURvbmVEYXRlID0gY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5pc0RvbmVEYXRlO1xuICAgIHRoaXMuY3VycmVudFF1YWxpdHlUaW1lU3BlbnRJbk1zID0gY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eS50aW1lU3BlbnRJbk1zO1xuICAgIHRoaXMuY3VycmVudFF1YWxpdHlMYXVuY2hlZEJ5ID0gY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5sYXVuY2hlZEJ5O1xuICAgIHRoaXMuY29tcGFyZVZlcnNpb24gPSBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LmdldFZlcnNpb24oKTtcbiAgICB0aGlzLmNvbXBhcmVTcGVlZE1hdHJpeCA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyLnJlbmRlck1lcmdlZE1hdHJpeCh7bm9ybWFsaXplOiB0cnVlfSk7XG4gICAgdGhpcy5jb21wYXJlVHJ1c3RlZEluZGljYXRvciA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyLmdldFRydXN0ZWRJbmRpY2F0b3JzKClbMF07XG4gICAgdGhpcy5jb21wYXJlTmFtZXMgPSB1aUNvbXBhcmVzLm1hcChjID0+IGMubmFtZSk7XG4gICAgdGhpcy51aUNvbXBhcmVzID0gdWlDb21wYXJlcztcblxuICAgIHRoaXMub25DaGFuZ2VzKCk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoR2xvYmFsQ29tcGFyZVF1YWxpdHkodGFyZ2V0c09yZGVyZWQ6IElDb21wYXJlVGFyZ2V0W10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ29tcGFyZUR1cGxpY2F0ZTogYm9vbGVhbikge1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZmV0Y2hSYWluQ29tcHV0YXRpb25RdWFsaXRpZXModGFyZ2V0c09yZGVyZWQpO1xuXG4gICAgICBhd2FpdCB0aGlzLmJ1aWxkQ29tcGFyZXNUaW1lbGluZSh0YXJnZXRzT3JkZXJlZCwgd2l0aENvbXBhcmVEdXBsaWNhdGUpO1xuXG4gICAgICBpZiAoIXRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZSkge1xuICAgICAgICAvLyB0aHJvdyBFcnJvcignbmVlZHMgY3VtdWxhdGl2ZSBjb21wYXJlJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5nbG9iYWxDb21wYXJlUG9pbnRzID0gdGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVDdW11bGF0aXZlLnF1YWxpdHlQb2ludHNcbiAgICAgICAgLm1hcChxcCA9PiBuZXcgWFlUeXBlKHFwLmdldEdhdWdlVmFsdWUoKSwgcXAuZ2V0UmFpblZhbHVlKCksIDIsIHFwLmdhdWdlTGFiZWwsIHFwLmdhdWdlSWQpKTtcbiAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50c01heCA9IG5ldyBYWVR5cGUoXG4gICAgICAgIHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZS5tYXhWYWx1ZSArIDIwLFxuICAgICAgICB0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmUubWF4VmFsdWUgKyAyMCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNldEdhdWdlcygpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnc2V0R2F1Z2VzJyk7XG5cbiAgICBjb25zdCBxdWFsaXR5UG9pbnRzOiBRdWFsaXR5UG9pbnRbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY29tcGFyZSBvZiB0aGlzLnVpQ29tcGFyZXMpIHtcbiAgICAgIGZvciAoY29uc3QgcXVhbGl0eVBvaW50IG9mIGNvbXBhcmUuY29tcGFyZVBvaW50c0hpc3RvcnkpIHtcbiAgICAgICAgY29uc3QgYWxyZWFkeUFkZGVkID0gcXVhbGl0eVBvaW50cy5maWx0ZXIocCA9PiBwPy5nYXVnZUlkID09PSBxdWFsaXR5UG9pbnQuZ2F1Z2VJZCk7XG4gICAgICAgIGlmIChhbHJlYWR5QWRkZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcXVhbGl0eVBvaW50cy5wdXNoKHF1YWxpdHlQb2ludCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdhdWdlc0luQ29tcGFyZSA9IHF1YWxpdHlQb2ludHMubWFwKHAgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBNYXBMYXRMbmcocC5nYXVnZUNhcnRlc2lhblZhbHVlLmxhdCwgcC5nYXVnZUNhcnRlc2lhblZhbHVlLmxuZywgMCxcbiAgICAgICAgcC5nYXVnZUlkLCBwLmdhdWdlTGFiZWwgKyAnPicgKyBwLmdldEdhdWdlVmFsdWUoKSxcbiAgICAgICAgcC5nZXRHYXVnZVZhbHVlKCkpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNldFNlbGVjdGVkR2F1Z2VzKCk7XG4gIH1cblxuICBhc3luYyBzZWxlY3RHYXVnZShnYXVnZUlkOiBzdHJpbmcsIGNvbXBhcmVJbmRleDogbnVtYmVyKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3NlbGVjdEdhdWdlJywgZ2F1Z2VJZCwgY29tcGFyZUluZGV4KTtcblxuICAgIGlmIChnYXVnZUlkKSB7XG4gICAgICBjb25zdCB4eXMgPSB0aGlzLmdldEN1cnJlbnRRdWFsaXR5UG9pbnRzKGNvbXBhcmVJbmRleCkuZmlsdGVyKHAgPT4gcC5nYXVnZUlkID09PSBnYXVnZUlkKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IHh5cy5sZW5ndGggPT09IDEgPyB4eXNbMF0gOiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2UgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zZWxlY3RlZEdhdWdlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNldFNlbGVjdGVkR2F1Z2VzKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gdGhpcy5nZXRDdXJyZW50UXVhbGl0eVBvaW50cyhjb21wYXJlSW5kZXgpLmZpbHRlcihwID0+IHAuZ2F1Z2VJZCA9PT0gdGhpcy5zZWxlY3RlZEdhdWdlLmdhdWdlSWQpO1xuICAgIGxldCBwaXhlbHNTb2x1dGlvbnM6IE1hcExhdExuZ1tdW10gPSBbXTtcblxuICAgIGlmIChzZWxlY3RlZEdhdWdlSW5Qb2ludHMubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCByZW1hcmtzID0gSlNPTi5wYXJzZShzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0ucmVtYXJrKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtIC0gYi5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtKTtcbiAgICAgIGNvbnNvbGUubG9nKHJlbWFya3MpO1xuICAgICAgcGl4ZWxzU29sdXRpb25zID0gcmVtYXJrc1xuICAgICAgICAubWFwKHJlbWFyayA9PiByZW1hcmsuc29sdXRpb25Gb3JHYXVnZS5waXhlbHNcbiAgICAgICAgICAubWFwKHAgPT4gbmV3IE1hcExhdExuZyhwLnkgKyAwLjAwNSwgcC54ICsgMC4wMSwgMCwgJycgKyAhcmVtYXJrLm5vdFBvc3NpYmxlLCAnJyArICFyZW1hcmsubm90UG9zc2libGUsIDEpKSk7XG5cbiAgICAgIGNvbnN0IHRpbWVEZWx0YUluTWludXRlcyA9IHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXS5nZXRUaW1lRGVsdGFJbk1pbnV0ZXMoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzRGV0YWlsID0gJycgKyBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2F1Z2VMYWJlbCArICcgPiAnXG4gICAgICAgICsgTWF0aC5yb3VuZChzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2V0R2F1Z2VWYWx1ZSgpICogMTAwKSAvIDEwMCArICcgLyAnXG4gICAgICAgICsgTWF0aC5yb3VuZChzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2V0UmFpblZhbHVlKCkgKiAxMDApIC8gMTAwXG4gICAgICAgICsgJyBkVD0nICsgdGltZURlbHRhSW5NaW51dGVzO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXTtcblxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IG51bGw7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgICB0aGlzLnNlbGVjdGVkUGl4ZWxzID0gW107XG4gICAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXG4gICAgICBuZXcgTWFwTGF0TG5nKHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmdhdWdlQ2FydGVzaWFuVmFsdWUubGF0LCB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxuZywgdW5kZWZpbmVkLFxuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUlkLFxuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUxhYmVsICsgJz4nICsgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS52YWx1ZSxcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS52YWx1ZSksXG4gICAgXTtcblxuICAgIHRoaXMuc2VsZWN0R2F1Z2VJbkNvbXBhcmUoKTtcblxuICAgIGNvbnN0IHBpeGVsczogTWFwTGF0TG5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHJhaW5DYXJ0ZXNpYW5WYWx1ZSBvZiB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5yYWluQ2FydGVzaWFuVmFsdWVzKSB7XG4gICAgICBwaXhlbHMucHVzaChuZXcgTWFwTGF0TG5nKHJhaW5DYXJ0ZXNpYW5WYWx1ZS5sYXQgKyAwLjAwNSwgcmFpbkNhcnRlc2lhblZhbHVlLmxuZyArIDAuMDEpKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IHBpeGVscztcblxuICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gcGl4ZWxzU29sdXRpb25zO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkQ29tcGFyZXNUaW1lbGluZSh0YXJnZXRzT3JkZXJlZDogSUNvbXBhcmVUYXJnZXRbXSwgd2l0aENvbXBhcmVEdXBsaWNhdGU6IGJvb2xlYW4pOiBQcm9taXNlPElDb21wYXJlcz4ge1xuICAgIGNvbnN0IGRhdGVzOiBEYXRlW10gPSB0YXJnZXRzT3JkZXJlZC5tYXAodCA9PiB0LmRhdGUpO1xuICAgIGNvbnN0IHF1YWxpdGllczogUmFpbkNvbXB1dGF0aW9uUXVhbGl0eVtdID0gZGF0ZXMubWFwKGQgPT4gdGhpcy5nZXRSYWluQ29tcHV0YXRpb25RdWFsaXR5KGQpKTtcbiAgICB0aGlzLmJ1aWxkQ29tcGFyZXMgPSBTcGVlZE1hdHJpeENvbnRhaW5lci5CdWlsZENvbXBhcmVzKHF1YWxpdGllcywgIXdpdGhDb21wYXJlRHVwbGljYXRlKTtcbiAgICByZXR1cm4gdGhpcy5idWlsZENvbXBhcmVzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldENvbXBhcmVQZXJEYXRlKGRhdGU6IERhdGUpOiBJQ29tcGFyZVBlckRhdGUge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVzUGVyRGF0ZS5maWx0ZXIoYyA9PiBjLmRhdGUuZ2V0VGltZSgpID09PSBkYXRlLmdldFRpbWUoKSk7XG4gICAgaWYgKGV4aXN0aW5nLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nWzBdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDdXJyZW50UXVhbGl0eVBvaW50cyhjb21wYXJlSW5kZXg6IG51bWJlcikge1xuICAgIGlmIChjb21wYXJlSW5kZXggPCAwIHx8IHRoaXMuY29tcGFyZU5hbWVzLmxlbmd0aCA8IGNvbXBhcmVJbmRleCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnVpQ29tcGFyZXNbY29tcGFyZUluZGV4XS5jb21wYXJlUG9pbnRzSGlzdG9yeTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhbkNvbXBhcmVRdWFsaXR5KGRldGFpbHM/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmNvbXBhcmVWZXJzaW9uID0gZGV0YWlscztcbiAgICB0aGlzLmNvbXBhcmVOYW1lcyA9IFtdO1xuICAgIHRoaXMudWlDb21wYXJlcyA9IFtdO1xuICAgIHRoaXMuY29tcGFyZVNwZWVkTWF0cml4ID0gW107XG4gICAgdGhpcy5jb21wYXJlVHJ1c3RlZEluZGljYXRvciA9IHVuZGVmaW5lZDtcblxuICAgIHRoaXMuY3VycmVudFF1YWxpdHlEb25lRGF0ZSA9IG5ldyBEYXRlKC0xKTtcbiAgICB0aGlzLmN1cnJlbnRRdWFsaXR5TGF1bmNoZWRCeSA9ICcnO1xuICAgIHRoaXMuY3VycmVudFF1YWxpdHlUaW1lU3BlbnRJbk1zID0gLTE7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZmV0Y2hSYWluQ29tcHV0YXRpb25RdWFsaXRpZXModGFyZ2V0c09yZGVyZWQ6IElDb21wYXJlVGFyZ2V0W10pIHtcbiAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzT3JkZXJlZCkge1xuICAgICAgaWYgKCF0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGVbdGFyZ2V0LmRhdGUudG9JU09TdHJpbmcoKV0gJiYgdGFyZ2V0LnJhaW5Db21wdXRhdGlvblF1YWxpdHlJZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzUGVyRGF0ZVt0YXJnZXQuZGF0ZS50b0lTT1N0cmluZygpXSA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRSYWluQ29tcGFyZUJ5SWQodGhpcy5yYWluTm9kZS5nZXRJZCgpLCB0YXJnZXQucmFpbkNvbXB1dGF0aW9uSWQsIHRhcmdldC5yYWluQ29tcHV0YXRpb25RdWFsaXR5SWQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UmFpbkNvbXB1dGF0aW9uUXVhbGl0eShkYXRlOiBEYXRlKTogUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSB7XG4gICAgcmV0dXJuIHRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzUGVyRGF0ZVtkYXRlLnRvSVNPU3RyaW5nKCldO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdEdhdWdlSW5Db21wYXJlKCkge1xuICAgIGZvciAoY29uc3QgY29tcGFyZSBvZiB0aGlzLnVpQ29tcGFyZXMpIHtcbiAgICAgIGNvbnN0IGNvbXBhcmVQb2ludHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbXBhcmUuY29tcGFyZVBvaW50cykpO1xuICAgICAgY29tcGFyZVBvaW50cy5mb3JFYWNoKHAgPT4ge1xuICAgICAgICBpZiAocC5pZCA9PT0gdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHM/LmdhdWdlSWQpIHtcbiAgICAgICAgICBwLnIgPSAxMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwLnIgPSAzO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbXBhcmUuY29tcGFyZVBvaW50cyA9IGNvbXBhcmVQb2ludHM7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0U2VsZWN0ZWRHYXVnZXMoKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3Jlc2V0U2VsZWN0ZWRHYXVnZXMgcmVzZXQnKTtcbiAgICB0aGlzLnNlbGVjdGVkR2F1Z2UgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IFtdO1xuICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gW107XG4gICAgdGhpcy5zZWxlY3RHYXVnZUluQ29tcGFyZSgpO1xuICB9XG59XG4iXX0=
|
|
210
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGFyZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC90b29scy9Db21wYXJlTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ25DLE9BQU8sRUFBNEYsb0JBQW9CLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDNUksT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQWtCakMsTUFBTSxPQUFPLGNBQWM7SUE0QnpCLFlBQ1ksUUFBa0IsRUFDbEIsY0FBOEIsRUFDakMsWUFBd0IsR0FBRyxFQUFFO0lBQ3BDLENBQUM7UUFIUyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUNqQyxjQUFTLEdBQVQsU0FBUyxDQUNmO1FBRUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFUyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQVcsRUFBRSxLQUFXLEVBQUUsT0FBZTtRQUVwRSxNQUFNLFdBQVcsR0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNwRCxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM1QyxTQUFTLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckYsT0FBTyxJQUFJLEtBQUssQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFF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QUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TWFwTGF0TG5nfSBmcm9tICdyYWFpbi11aSc7XG5pbXBvcnQge0lDb21wYXJlUGVyRGF0ZSwgSUNvbXBhcmVzLCBQb3NpdGlvblZhbHVlLCBRdWFsaXR5UG9pbnQsIFJhaW5Db21wdXRhdGlvblF1YWxpdHksIFJhaW5Ob2RlLCBTcGVlZE1hdHJpeENvbnRhaW5lcn0gZnJvbSAncmFhaW4tbW9kZWwnO1xuaW1wb3J0IHtYWVR5cGV9IGZyb20gJy4uL3h5dHlwZSc7XG5pbXBvcnQge1Byb2ZpbGVTZXJ2aWNlfSBmcm9tICcuLi9wcm9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtGcmFtZVNldH0gZnJvbSAnLi9GcmFtZVNldCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbXBhcmVUYXJnZXQge1xuICBkYXRlOiBEYXRlO1xuICByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nO1xuICByYWluQ29tcHV0YXRpb25RdWFsaXR5SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVUlDb21wYXJlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBjb21wYXJlUG9pbnRzOiBYWVR5cGVbXTtcbiAgY29tcGFyZVBvaW50c01heDogWFlUeXBlO1xuICBjb21wYXJlUG9pbnRzSGlzdG9yeTogUXVhbGl0eVBvaW50W107XG4gIHJlbWFya3M6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIENvbXBhcmVNYW5hZ2VyIHtcblxuICAvLyBwdWJsaWMgY29tcHV0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIHB1YmxpYyBnYXVnZXNJbkNvbXBhcmU6IE1hcExhdExuZ1tdO1xuICBwdWJsaWMgc2VsZWN0ZWRHYXVnZXM6IE1hcExhdExuZ1tdO1xuICBwdWJsaWMgc2VsZWN0ZWRQaXhlbHM6IE1hcExhdExuZ1tdO1xuICBwdWJsaWMgcGl4ZWxzU29sdXRpb25zOiBNYXBMYXRMbmdbXVtdO1xuXG4gIC8vIGZyb20gY29tcGFyZXNUaW1lbGluZVxuICBwdWJsaWMgY29tcGFyZU5hbWVzOiBzdHJpbmdbXTtcbiAgcHVibGljIHVpQ29tcGFyZXM6IElVSUNvbXBhcmVbXTtcbiAgcHVibGljIGNvbXBhcmVTcGVlZE1hdHJpeDogUG9zaXRpb25WYWx1ZVtdO1xuICBwdWJsaWMgY29tcGFyZVZlcnNpb246IHN0cmluZztcbiAgcHVibGljIGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yOiBudW1iZXI7XG5cbiAgcHVibGljIGN1cnJlbnRRdWFsaXR5RG9uZURhdGU6IERhdGU7XG4gIHB1YmxpYyBjdXJyZW50UXVhbGl0eUxhdW5jaGVkQnk6IHN0cmluZztcbiAgcHVibGljIGN1cnJlbnRRdWFsaXR5VGltZVNwZW50SW5NczogbnVtYmVyO1xuICBwdWJsaWMgZ2xvYmFsQ29tcGFyZVBvaW50czogWFlUeXBlW107XG4gIHB1YmxpYyBnbG9iYWxDb21wYXJlUG9pbnRzTWF4OiBYWVR5cGU7XG5cbiAgcHJvdGVjdGVkIGJ1aWxkQ29tcGFyZXM6IElDb21wYXJlcztcbiAgcHJvdGVjdGVkIHNlbGVjdGVkR2F1Z2U6IFF1YWxpdHlQb2ludDtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkR2F1Z2VJblBvaW50czogUXVhbGl0eVBvaW50O1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRHYXVnZUluUG9pbnRzRGV0YWlsOiBzdHJpbmc7XG4gIHByb3RlY3RlZCByYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJhaW5Ob2RlOiBSYWluTm9kZSxcbiAgICBwcm90ZWN0ZWQgcHJvZmlsZVNlcnZpY2U6IFByb2ZpbGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBvbkNoYW5nZXM6ICgpID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgfVxuICApIHtcbiAgICB0aGlzLmNsZWFuQWxsKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RhdGljIENvbXBhcmVEYXRlKGRhdGUxOiBEYXRlLCBkYXRlMjogRGF0ZSwgbWludXRlczogbnVtYmVyKTogYm9vbGVhbiB7XG5cbiAgICBjb25zdCBkYXRlMUFzRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKGRhdGUxLmdldFRpbWUoKSk7XG4gICAgY29uc3QgZGF0ZTJEaWZmID0gbmV3IERhdGUoZGF0ZTIuZ2V0VGltZSgpKTtcbiAgICBkYXRlMkRpZmYuc2V0TWludXRlcyhkYXRlMkRpZmYuZ2V0TWludXRlcygpICsgbWludXRlcyk7XG4gICAgY29uc3QgZGlmZiA9IE1hdGgucm91bmQoKGRhdGUxQXNEYXRlLmdldFRpbWUoKSAtIGRhdGUyRGlmZi5nZXRUaW1lKCkpIC8gKDYwICogMTAwMCkpO1xuICAgIHJldHVybiBkaWZmID09PSAwO1xuICB9XG5cbiAgcHVibGljIGNsZWFuQWxsKCkge1xuICAgIHRoaXMuZ2F1Z2VzSW5Db21wYXJlID0gW107XG4gICAgdGhpcy5zZWxlY3RlZEdhdWdlcyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBbXTtcbiAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IFtdO1xuXG4gICAgdGhpcy5idWlsZENvbXBhcmVzID0ge1xuICAgICAgY29tcGFyZXNQZXJEYXRlOiBbXSxcbiAgICAgIGNvbXBhcmVDdW11bGF0aXZlOiBudWxsXG4gICAgfTtcbiAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHMgPSBbXTtcbiAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHNNYXggPSBuZXcgWFlUeXBlKDAsIDApO1xuICAgIHRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzUGVyRGF0ZSA9IHt9O1xuXG4gICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5jbGVhbkNvbXBhcmVRdWFsaXR5KCdubyBjb21wYXJlIHlldCcpO1xuICB9XG5cbiAgYXN5bmMgcmVmcmVzaENvbXBhcmVRdWFsaXR5KGZyYW1lU2V0OiBGcmFtZVNldCkge1xuXG4gICAgY29uc3QgY29tcGFyZVBlckRhdGUgPSB0aGlzLmdldENvbXBhcmVQZXJEYXRlKGZyYW1lU2V0LmRhdGUpO1xuXG4gICAgaWYgKCFjb21wYXJlUGVyRGF0ZSB8fCAhY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eT8ucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyKSB7XG4gICAgICB0aGlzLmNsZWFuQ29tcGFyZVF1YWxpdHkoJ25vIGN1cnJlbnQgcXVhbGl0eSAnICsgT2JqZWN0LmtleXModGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlKSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVpQ29tcGFyZXM6IElVSUNvbXBhcmVbXSA9IGNvbXBhcmVQZXJEYXRlLmNvbXBhcmVUaW1lbGluZS5tYXAoYyA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBjLm5hbWUsXG4gICAgICAgIGNvbXBhcmVQb2ludHM6IGMucXVhbGl0eVBvaW50cy5tYXAocCA9PiBuZXcgWFlUeXBlKHAuZ2V0R2F1Z2VWYWx1ZSgpLCBwLmdldFJhaW5WYWx1ZSgpLCAyLCBwLmdhdWdlTGFiZWwsIHAuZ2F1Z2VJZCkpLFxuICAgICAgICBjb21wYXJlUG9pbnRzTWF4OiBuZXcgWFlUeXBlKGMubWF4VmFsdWUgKyAyMCwgYy5tYXhWYWx1ZSArIDIwKSxcbiAgICAgICAgY29tcGFyZVBvaW50c0hpc3Rvcnk6IGMucXVhbGl0eVBvaW50c0xlZ2FjeSxcbiAgICAgICAgcmVtYXJrczogYy5yZW1hcmtzXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5jdXJyZW50UXVhbGl0eURvbmVEYXRlID0gY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5pc0RvbmVEYXRlO1xuICAgIHRoaXMuY3VycmVudFF1YWxpdHlUaW1lU3BlbnRJbk1zID0gY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eS50aW1lU3BlbnRJbk1zO1xuICAgIHRoaXMuY3VycmVudFF1YWxpdHlMYXVuY2hlZEJ5ID0gY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5sYXVuY2hlZEJ5O1xuICAgIHRoaXMuY29tcGFyZVZlcnNpb24gPSBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LmdldFZlcnNpb24oKTtcbiAgICB0aGlzLmNvbXBhcmVTcGVlZE1hdHJpeCA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyLnJlbmRlck1lcmdlZE1hdHJpeCh7bm9ybWFsaXplOiB0cnVlfSk7XG4gICAgdGhpcy5jb21wYXJlVHJ1c3RlZEluZGljYXRvciA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyLmdldFRydXN0ZWRJbmRpY2F0b3JzKClbMF07XG4gICAgdGhpcy5jb21wYXJlTmFtZXMgPSB1aUNvbXBhcmVzLm1hcChjID0+IGMubmFtZSk7XG4gICAgdGhpcy51aUNvbXBhcmVzID0gdWlDb21wYXJlcztcblxuICAgIHRoaXMub25DaGFuZ2VzKCk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoR2xvYmFsQ29tcGFyZVF1YWxpdHkodGFyZ2V0c09yZGVyZWQ6IElDb21wYXJlVGFyZ2V0W10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ29tcGFyZUR1cGxpY2F0ZTogYm9vbGVhbikge1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZmV0Y2hSYWluQ29tcHV0YXRpb25RdWFsaXRpZXModGFyZ2V0c09yZGVyZWQpO1xuXG4gICAgICBhd2FpdCB0aGlzLmJ1aWxkQ29tcGFyZXNUaW1lbGluZSh0YXJnZXRzT3JkZXJlZCwgd2l0aENvbXBhcmVEdXBsaWNhdGUpO1xuXG4gICAgICBpZiAoIXRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZSkge1xuICAgICAgICAvLyB0aHJvdyBFcnJvcignbmVlZHMgY3VtdWxhdGl2ZSBjb21wYXJlJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5nbG9iYWxDb21wYXJlUG9pbnRzID0gdGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVDdW11bGF0aXZlLnF1YWxpdHlQb2ludHNcbiAgICAgICAgLm1hcChxcCA9PiBuZXcgWFlUeXBlKHFwLmdldEdhdWdlVmFsdWUoKSwgcXAuZ2V0UmFpblZhbHVlKCksIDIsIHFwLmdhdWdlTGFiZWwsIHFwLmdhdWdlSWQpKTtcbiAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50c01heCA9IG5ldyBYWVR5cGUoXG4gICAgICAgIHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZS5tYXhWYWx1ZSArIDIwLFxuICAgICAgICB0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmUubWF4VmFsdWUgKyAyMCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNldEdhdWdlcygpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnc2V0R2F1Z2VzJyk7XG5cbiAgICBjb25zdCBxdWFsaXR5UG9pbnRzOiBRdWFsaXR5UG9pbnRbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY29tcGFyZSBvZiB0aGlzLnVpQ29tcGFyZXMpIHtcbiAgICAgIGZvciAoY29uc3QgcXVhbGl0eVBvaW50IG9mIGNvbXBhcmUuY29tcGFyZVBvaW50c0hpc3RvcnkpIHtcbiAgICAgICAgY29uc3QgYWxyZWFkeUFkZGVkID0gcXVhbGl0eVBvaW50cy5maWx0ZXIocCA9PiBwPy5nYXVnZUlkID09PSBxdWFsaXR5UG9pbnQuZ2F1Z2VJZCk7XG4gICAgICAgIGlmIChhbHJlYWR5QWRkZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcXVhbGl0eVBvaW50cy5wdXNoKHF1YWxpdHlQb2ludCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdhdWdlc0luQ29tcGFyZSA9IHF1YWxpdHlQb2ludHMubWFwKHAgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBNYXBMYXRMbmcocC5nYXVnZUNhcnRlc2lhblZhbHVlLmxhdCwgcC5nYXVnZUNhcnRlc2lhblZhbHVlLmxuZywgMCxcbiAgICAgICAgcC5nYXVnZUlkLCBwLmdhdWdlTGFiZWwgKyAnPicgKyBwLmdldEdhdWdlVmFsdWUoKSxcbiAgICAgICAgcC5nZXRHYXVnZVZhbHVlKCkpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNldFNlbGVjdGVkR2F1Z2VzKCk7XG4gIH1cblxuICBhc3luYyBzZWxlY3RHYXVnZShnYXVnZUlkOiBzdHJpbmcsIGNvbXBhcmVJbmRleDogbnVtYmVyKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3NlbGVjdEdhdWdlJywgZ2F1Z2VJZCwgY29tcGFyZUluZGV4KTtcblxuICAgIGlmIChnYXVnZUlkKSB7XG4gICAgICBjb25zdCB4eXMgPSB0aGlzLmdldEN1cnJlbnRRdWFsaXR5UG9pbnRzKGNvbXBhcmVJbmRleCkuZmlsdGVyKHAgPT4gcC5nYXVnZUlkID09PSBnYXVnZUlkKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IHh5cy5sZW5ndGggPT09IDEgPyB4eXNbMF0gOiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2UgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zZWxlY3RlZEdhdWdlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNldFNlbGVjdGVkR2F1Z2VzKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gdGhpcy5nZXRDdXJyZW50UXVhbGl0eVBvaW50cyhjb21wYXJlSW5kZXgpLmZpbHRlcihwID0+IHAuZ2F1Z2VJZCA9PT0gdGhpcy5zZWxlY3RlZEdhdWdlLmdhdWdlSWQpO1xuICAgIGxldCBwaXhlbHNTb2x1dGlvbnM6IE1hcExhdExuZ1tdW10gPSBbXTtcblxuICAgIGlmIChzZWxlY3RlZEdhdWdlSW5Qb2ludHMubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCByZW1hcmtzID0gSlNPTi5wYXJzZShzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0ucmVtYXJrKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtIC0gYi5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtKTtcbiAgICAgIGNvbnNvbGUubG9nKHJlbWFya3MpO1xuICAgICAgcGl4ZWxzU29sdXRpb25zID0gcmVtYXJrc1xuICAgICAgICAubWFwKHJlbWFyayA9PiByZW1hcmsuc29sdXRpb25Gb3JHYXVnZS5waXhlbHNcbiAgICAgICAgICAubWFwKHAgPT4gbmV3IE1hcExhdExuZyhwLnkgKyAwLjAwNSwgcC54ICsgMC4wMSwgMCwgJycgKyAhcmVtYXJrLm5vdFBvc3NpYmxlLCAnJyArICFyZW1hcmsubm90UG9zc2libGUsIDEpKSk7XG5cbiAgICAgIGNvbnN0IHRpbWVEZWx0YUluTWludXRlcyA9IHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXS5nZXRUaW1lRGVsdGFJbk1pbnV0ZXMoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzRGV0YWlsID0gJycgKyBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2F1Z2VMYWJlbCArICcgPiAnXG4gICAgICAgICsgTWF0aC5yb3VuZChzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2V0R2F1Z2VWYWx1ZSgpICogMTAwKSAvIDEwMCArICcgLyAnXG4gICAgICAgICsgTWF0aC5yb3VuZChzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2V0UmFpblZhbHVlKCkgKiAxMDApIC8gMTAwXG4gICAgICAgICsgJyBkVD0nICsgdGltZURlbHRhSW5NaW51dGVzO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXTtcblxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IG51bGw7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgICB0aGlzLnNlbGVjdGVkUGl4ZWxzID0gW107XG4gICAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXG4gICAgICBuZXcgTWFwTGF0TG5nKHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmdhdWdlQ2FydGVzaWFuVmFsdWUubGF0LCB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxuZywgdW5kZWZpbmVkLFxuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUlkLFxuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUxhYmVsICsgJz4nICsgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS52YWx1ZSxcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS52YWx1ZSksXG4gICAgXTtcblxuICAgIHRoaXMuc2VsZWN0R2F1Z2VJbkNvbXBhcmUoKTtcblxuICAgIGNvbnN0IHBpeGVsczogTWFwTGF0TG5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHJhaW5DYXJ0ZXNpYW5WYWx1ZSBvZiB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5yYWluQ2FydGVzaWFuVmFsdWVzKSB7XG4gICAgICBwaXhlbHMucHVzaChuZXcgTWFwTGF0TG5nKHJhaW5DYXJ0ZXNpYW5WYWx1ZS5sYXQgKyAwLjAwNSwgcmFpbkNhcnRlc2lhblZhbHVlLmxuZyArIDAuMDEpKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IHBpeGVscztcblxuICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gcGl4ZWxzU29sdXRpb25zO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkQ29tcGFyZXNUaW1lbGluZSh0YXJnZXRzT3JkZXJlZDogSUNvbXBhcmVUYXJnZXRbXSwgd2l0aENvbXBhcmVEdXBsaWNhdGU6IGJvb2xlYW4pOiBQcm9taXNlPElDb21wYXJlcz4ge1xuICAgIGNvbnN0IGRhdGVzOiBEYXRlW10gPSB0YXJnZXRzT3JkZXJlZC5tYXAodCA9PiB0LmRhdGUpO1xuICAgIGNvbnN0IHF1YWxpdGllczogUmFpbkNvbXB1dGF0aW9uUXVhbGl0eVtdID0gZGF0ZXNcbiAgICAgIC5tYXAoZCA9PiB0aGlzLmdldFJhaW5Db21wdXRhdGlvblF1YWxpdHkoZCkpXG4gICAgICAuZmlsdGVyKGQgPT4gISFkKTtcbiAgICB0aGlzLmJ1aWxkQ29tcGFyZXMgPSBTcGVlZE1hdHJpeENvbnRhaW5lci5CdWlsZENvbXBhcmVzKHF1YWxpdGllcywgIXdpdGhDb21wYXJlRHVwbGljYXRlKTtcbiAgICByZXR1cm4gdGhpcy5idWlsZENvbXBhcmVzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldENvbXBhcmVQZXJEYXRlKGRhdGU6IERhdGUpOiBJQ29tcGFyZVBlckRhdGUge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVzUGVyRGF0ZS5maWx0ZXIoYyA9PiBjLmRhdGUuZ2V0VGltZSgpID09PSBkYXRlLmdldFRpbWUoKSk7XG4gICAgaWYgKGV4aXN0aW5nLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nWzBdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDdXJyZW50UXVhbGl0eVBvaW50cyhjb21wYXJlSW5kZXg6IG51bWJlcikge1xuICAgIGlmIChjb21wYXJlSW5kZXggPCAwIHx8IHRoaXMuY29tcGFyZU5hbWVzLmxlbmd0aCA8IGNvbXBhcmVJbmRleCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnVpQ29tcGFyZXNbY29tcGFyZUluZGV4XS5jb21wYXJlUG9pbnRzSGlzdG9yeTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhbkNvbXBhcmVRdWFsaXR5KGRldGFpbHM/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmNvbXBhcmVWZXJzaW9uID0gZGV0YWlscztcbiAgICB0aGlzLmNvbXBhcmVOYW1lcyA9IFtdO1xuICAgIHRoaXMudWlDb21wYXJlcyA9IFtdO1xuICAgIHRoaXMuY29tcGFyZVNwZWVkTWF0cml4ID0gW107XG4gICAgdGhpcy5jb21wYXJlVHJ1c3RlZEluZGljYXRvciA9IHVuZGVmaW5lZDtcblxuICAgIHRoaXMuY3VycmVudFF1YWxpdHlEb25lRGF0ZSA9IG5ldyBEYXRlKC0xKTtcbiAgICB0aGlzLmN1cnJlbnRRdWFsaXR5TGF1bmNoZWRCeSA9ICcnO1xuICAgIHRoaXMuY3VycmVudFF1YWxpdHlUaW1lU3BlbnRJbk1zID0gLTE7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZmV0Y2hSYWluQ29tcHV0YXRpb25RdWFsaXRpZXModGFyZ2V0c09yZGVyZWQ6IElDb21wYXJlVGFyZ2V0W10pIHtcbiAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzT3JkZXJlZCkge1xuICAgICAgaWYgKCF0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGVbdGFyZ2V0LmRhdGUudG9JU09TdHJpbmcoKV0gJiYgdGFyZ2V0LnJhaW5Db21wdXRhdGlvblF1YWxpdHlJZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzUGVyRGF0ZVt0YXJnZXQuZGF0ZS50b0lTT1N0cmluZygpXSA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRSYWluQ29tcGFyZUJ5SWQodGhpcy5yYWluTm9kZS5nZXRJZCgpLCB0YXJnZXQucmFpbkNvbXB1dGF0aW9uSWQsIHRhcmdldC5yYWluQ29tcHV0YXRpb25RdWFsaXR5SWQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UmFpbkNvbXB1dGF0aW9uUXVhbGl0eShkYXRlOiBEYXRlKTogUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSB7XG4gICAgcmV0dXJuIHRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzUGVyRGF0ZVtkYXRlLnRvSVNPU3RyaW5nKCldO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdEdhdWdlSW5Db21wYXJlKCkge1xuICAgIGZvciAoY29uc3QgY29tcGFyZSBvZiB0aGlzLnVpQ29tcGFyZXMpIHtcbiAgICAgIGNvbnN0IGNvbXBhcmVQb2ludHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbXBhcmUuY29tcGFyZVBvaW50cykpO1xuICAgICAgY29tcGFyZVBvaW50cy5mb3JFYWNoKHAgPT4ge1xuICAgICAgICBpZiAocC5pZCA9PT0gdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHM/LmdhdWdlSWQpIHtcbiAgICAgICAgICBwLnIgPSAxMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwLnIgPSAzO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbXBhcmUuY29tcGFyZVBvaW50cyA9IGNvbXBhcmVQb2ludHM7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0U2VsZWN0ZWRHYXVnZXMoKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3Jlc2V0U2VsZWN0ZWRHYXVnZXMgcmVzZXQnKTtcbiAgICB0aGlzLnNlbGVjdGVkR2F1Z2UgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IFtdO1xuICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gW107XG4gICAgdGhpcy5zZWxlY3RHYXVnZUluQ29tcGFyZSgpO1xuICB9XG59XG4iXX0=
|