@sabstravtech/obtservices 0.0.3 → 0.0.19020100
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/angular/fetchers.d.ts +1 -0
- package/angular/lib/vendor/classes/helpers.d.ts +6 -3
- package/angular/lib/vendor/fetchers/conferma-office.fetcher.d.ts +6 -0
- package/angular/lib/vendor/fetchers/search-irl-stations.fetcher.d.ts +7 -0
- package/angular/lib/vendor/services/search.service.d.ts +5 -3
- package/angular/lib/vendor/types/graphql.angular.types.d.ts +268 -6
- package/angular/obtservices.module.d.ts +1 -1
- package/angular/sabstravtech-obtservices-angular.d.ts +6 -5
- package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
- package/base/fetchers.d.ts +2 -0
- package/base/lib/vendor/classes/base-enterprise.d.ts +4 -0
- package/base/lib/vendor/classes/bookable-basket.d.ts +1 -1
- package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +6 -1
- package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +2 -1
- package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +21 -5
- package/base/lib/vendor/classes/flight-enterprise-search.d.ts +22 -75
- package/base/lib/vendor/classes/helpers.d.ts +3 -0
- package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/classes/irl-enterprise-search.d.ts +21 -10
- package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/classes/parking-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/classes/rail-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/fetchers/conferma-office.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/irl-quote-fetcher.d.ts +1 -1
- package/base/lib/vendor/fetchers/search-irl-stations.fetcher.d.ts +20 -0
- package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +1 -1
- package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +4 -35
- package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +4 -40
- package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +9 -2
- package/base/lib/vendor/interfaces/Isearch.service.d.ts +3 -1
- package/base/lib/vendor/interfaces/flight-filters.interface.d.ts +21 -25
- package/base/lib/vendor/interfaces/hotel-recent-search-args.interface.d.ts +23 -0
- package/base/lib/vendor/interfaces/value-display.d.ts +2 -2
- package/base/lib/vendor/models/traveller.object.d.ts +7 -0
- package/base/lib/vendor/services/enterprise-basket.service.d.ts +1 -1
- package/base/lib/vendor/services/search.service.d.ts +10 -3
- package/base/lib/vendor/types/graphql.types.d.ts +253 -6
- package/base/lib/vendor/types/types.d.ts +11 -2
- package/base/sabstravtech-obtservices-base.metadata.json +1 -1
- package/bundles/sabstravtech-obtservices-angular.umd.js +200 -64
- package/bundles/sabstravtech-obtservices-angular.umd.js.map +1 -1
- package/bundles/sabstravtech-obtservices-angular.umd.min.js +1 -1
- package/bundles/sabstravtech-obtservices-angular.umd.min.js.map +1 -1
- package/bundles/sabstravtech-obtservices-base.umd.js +1632 -1085
- package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
- package/bundles/sabstravtech-obtservices-base.umd.min.js +2 -2
- package/bundles/sabstravtech-obtservices-base.umd.min.js.map +1 -1
- package/esm2015/angular/fetchers.js +2 -1
- package/esm2015/angular/lib/vendor/classes/helpers.js +25 -4
- package/esm2015/angular/lib/vendor/fetchers/conferma-office.fetcher.js +22 -0
- package/esm2015/angular/lib/vendor/fetchers/search-irl-stations.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/services/search.service.js +35 -29
- package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +174 -6
- package/esm2015/angular/obtservices.module.js +3 -3
- package/esm2015/angular/sabstravtech-obtservices-angular.js +7 -6
- package/esm2015/base/fetchers.js +3 -1
- package/esm2015/base/lib/vendor/classes/base-enterprise.js +49 -2
- package/esm2015/base/lib/vendor/classes/bookable-basket.js +2 -2
- package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +95 -15
- package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +2 -1
- package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +262 -52
- package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +439 -713
- package/esm2015/base/lib/vendor/classes/helpers.js +239 -24
- package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +74 -70
- package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +153 -118
- package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +2 -1
- package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +58 -1
- package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +6 -3
- package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +2 -1
- package/esm2015/base/lib/vendor/fetchers/conferma-office.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/irl-quote-fetcher.js +2 -2
- package/esm2015/base/lib/vendor/fetchers/search-irl-stations.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ienterprise-basket.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ieurostar-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +43 -2
- package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/flight-filters.interface.js +2 -1
- package/esm2015/base/lib/vendor/interfaces/hotel-recent-search-args.interface.js +2 -0
- package/esm2015/base/lib/vendor/interfaces/value-display.js +1 -1
- package/esm2015/base/lib/vendor/models/traveller.object.js +8 -1
- package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +3 -2
- package/esm2015/base/lib/vendor/services/search.service.js +67 -12
- package/esm2015/base/lib/vendor/types/graphql.types.js +13 -2
- package/esm2015/base/lib/vendor/types/types.js +1 -1
- package/fesm2015/sabstravtech-obtservices-angular.js +238 -16
- package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
- package/fesm2015/sabstravtech-obtservices-base.js +1561 -1045
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,22 +1,24 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
1
2
|
import moment from 'moment';
|
|
2
3
|
import { map } from 'rxjs/operators';
|
|
3
4
|
import { BaseEnterpriseSearch } from './base-enterprise';
|
|
4
5
|
import { IrlClass, ServiceType, IrlJourneyType } from '../types/graphql.types';
|
|
6
|
+
import { ages } from '../models/traveller.object';
|
|
5
7
|
export var IrlSearchCriteria;
|
|
6
8
|
(function (IrlSearchCriteria) {
|
|
7
9
|
IrlSearchCriteria["Depart"] = "Depart After";
|
|
8
10
|
IrlSearchCriteria["Arrive"] = "Arrive Before";
|
|
9
11
|
})(IrlSearchCriteria || (IrlSearchCriteria = {}));
|
|
10
12
|
export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
11
|
-
constructor(Irlfetcher,
|
|
12
|
-
// private getRailStationFetcher: BaseGetRailStationFetcher<GRS_Q>, // doesnt exist yet
|
|
13
|
-
helpers, basketService, storageService, searchService) {
|
|
13
|
+
constructor(Irlfetcher, searchIrlStationsFetcher, helpers, basketService, storageService, searchService) {
|
|
14
14
|
super(storageService);
|
|
15
15
|
this.Irlfetcher = Irlfetcher;
|
|
16
|
+
this.searchIrlStationsFetcher = searchIrlStationsFetcher;
|
|
16
17
|
this.helpers = helpers;
|
|
17
18
|
this.basketService = basketService;
|
|
18
19
|
this.searchService = searchService;
|
|
19
20
|
this.resultsSessionName = IRLEnterpriseSearch.STORAGE_SESSION_RESULTS;
|
|
21
|
+
this.multiResultsSessionName = IRLEnterpriseSearch.STORAGE_SESSION_RESULTS;
|
|
20
22
|
this.searchTypes = [
|
|
21
23
|
{ display: 'Return', value: IrlJourneyType.ReturnJourney },
|
|
22
24
|
{ display: 'One-Way', value: IrlJourneyType.SingleJourney }
|
|
@@ -28,8 +30,8 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
28
30
|
{ display: 'Standard', value: IrlClass.Standard },
|
|
29
31
|
{ display: 'First', value: IrlClass.First }
|
|
30
32
|
];
|
|
31
|
-
this.ageRanges = [{ key:
|
|
32
|
-
this.
|
|
33
|
+
this.ageRanges = [{ key: ages.Child, value: 'Child (0-3)' }, { key: ages.Child, value: 'Child (4-5)' }, { key: ages.Child, value: 'Child (6-11)' }, { key: ages.Youth, value: 'Youth (12-14)' }, { key: ages.Youth, value: 'Youth (15-25)' }, { key: ages.Adult, value: 'Adult (26-59)' }, { key: ages.Youth, value: 'Senior (60+)' }];
|
|
34
|
+
this.irlCriteria = [IrlSearchCriteria.Depart, IrlSearchCriteria.Arrive];
|
|
33
35
|
this.travelCards = [
|
|
34
36
|
{ display: 'Young persons railcard', value: 'YNG' },
|
|
35
37
|
{ display: 'Disability railcard', value: 'DIS' },
|
|
@@ -58,22 +60,6 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
58
60
|
this._children = 0;
|
|
59
61
|
this._returnDepartureDateTime = null;
|
|
60
62
|
this._ageRange = null;
|
|
61
|
-
// get outboundCriteria(): IrlSearchCriteria {
|
|
62
|
-
// return this.tempParams.outboundCriteria;
|
|
63
|
-
// }
|
|
64
|
-
// set outboundCriteria(newCrit: IrlSearchCriteria) {
|
|
65
|
-
// // console.warn(`+++ Setting New Criteria: ${newCrit} +++`);
|
|
66
|
-
// this.tempParams.outboundCriteria = newCrit;
|
|
67
|
-
// this._isValid();
|
|
68
|
-
// }
|
|
69
|
-
// ! might not need this?
|
|
70
|
-
// get inBoundDateTime(): moment.Moment {
|
|
71
|
-
// return this.tempParams.inBoundDateTime;
|
|
72
|
-
// }
|
|
73
|
-
// set inBoundDateTime(newDateTime: moment.Moment) {
|
|
74
|
-
// this.tempParams.inBoundDateTime = moment(newDateTime);
|
|
75
|
-
// this._isValid();
|
|
76
|
-
// }
|
|
77
63
|
// !date and time is handled differently for LU
|
|
78
64
|
this._outbound_date = null;
|
|
79
65
|
this._outbound_time = null;
|
|
@@ -82,7 +68,7 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
82
68
|
this._cheapestStandard = null;
|
|
83
69
|
this._cheapestFirst = null;
|
|
84
70
|
this._irlClass = null;
|
|
85
|
-
this._journeytype =
|
|
71
|
+
this._journeytype = IrlJourneyType.SingleJourney;
|
|
86
72
|
const data = storageService.getSessionItem(IRLEnterpriseSearch.STORAGE_SESSION_PARAMS) || {
|
|
87
73
|
query: {},
|
|
88
74
|
tempParams: {},
|
|
@@ -93,7 +79,10 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
93
79
|
if (searchService.shouldAddTravellerSubscription()) {
|
|
94
80
|
searchService.travellerInformation.subscribe((travellers) => {
|
|
95
81
|
this.travellers = travellers;
|
|
96
|
-
|
|
82
|
+
if (this.travellers[0] && !this.travellers[0].ageType) {
|
|
83
|
+
this.travellers[0].ageType = ages.Adult;
|
|
84
|
+
}
|
|
85
|
+
const splitTravellers = this.helpers.selectedTravellers(travellers, ServiceType.InternationalRail);
|
|
97
86
|
this.tempParams.adults = splitTravellers.adults.length;
|
|
98
87
|
this.tempParams.children = splitTravellers.children.length;
|
|
99
88
|
this.travellers = travellers;
|
|
@@ -191,6 +180,7 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
191
180
|
this._travellingFrom = '';
|
|
192
181
|
if ((_a = tt === null || tt === void 0 ? void 0 : tt.railstation) === null || _a === void 0 ? void 0 : _a.id) {
|
|
193
182
|
this._travellingFrom = tt.railstation.id;
|
|
183
|
+
this.supplier = tt.railstation.supplier;
|
|
194
184
|
}
|
|
195
185
|
this._isValid();
|
|
196
186
|
}
|
|
@@ -215,8 +205,13 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
215
205
|
get outboundDepartureDateTime() {
|
|
216
206
|
return this._outboundDepartureDateTime;
|
|
217
207
|
}
|
|
218
|
-
set outboundDepartureDateTime(
|
|
219
|
-
this._outboundDepartureDateTime =
|
|
208
|
+
set outboundDepartureDateTime(newDateTime) {
|
|
209
|
+
this._outboundDepartureDateTime = newDateTime;
|
|
210
|
+
this._outbound_date = this.helpers.momentToNgDate(newDateTime);
|
|
211
|
+
this._outbound_time = moment(newDateTime).format('HHmm')
|
|
212
|
+
? moment(newDateTime).format('HHmm')
|
|
213
|
+
: '0700';
|
|
214
|
+
this._updateOutboundDateTime();
|
|
220
215
|
}
|
|
221
216
|
get departureLocationId() {
|
|
222
217
|
return this._departureLocationId;
|
|
@@ -245,8 +240,13 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
245
240
|
get returnDepartureDateTime() {
|
|
246
241
|
return this._returnDepartureDateTime;
|
|
247
242
|
}
|
|
248
|
-
set returnDepartureDateTime(
|
|
249
|
-
this._returnDepartureDateTime =
|
|
243
|
+
set returnDepartureDateTime(newDateTime) {
|
|
244
|
+
this._returnDepartureDateTime = newDateTime;
|
|
245
|
+
this._return_date = this.helpers.momentToNgDate(newDateTime);
|
|
246
|
+
this._return_time = moment(newDateTime).format('HHmm')
|
|
247
|
+
? moment(newDateTime).format('HHmm')
|
|
248
|
+
: '0700';
|
|
249
|
+
this._updateReturnDateTime();
|
|
250
250
|
}
|
|
251
251
|
get ageRange() {
|
|
252
252
|
return this._ageRange;
|
|
@@ -274,13 +274,38 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
274
274
|
month: newDateTime.month() + 1,
|
|
275
275
|
day: newDateTime.date()
|
|
276
276
|
};
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
277
|
+
if (newDateTime && newDateTime.isValid()) {
|
|
278
|
+
this._outbound_date = this.helpers.momentToNgDate(newDateTime);
|
|
279
|
+
this._outbound_time = moment(newDateTime).format('HHmm')
|
|
280
|
+
? moment(newDateTime).format('HHmm')
|
|
281
|
+
: '0700';
|
|
282
|
+
}
|
|
283
|
+
if (this.outBoundDateTime &&
|
|
284
|
+
this.inBoundDateTime &&
|
|
285
|
+
this.outBoundDateTime.isAfter(this.inBoundDateTime)) {
|
|
286
|
+
this.inBoundDateTime = this.outBoundDateTime.clone().add(1, 'day');
|
|
287
|
+
}
|
|
288
|
+
this._isValid();
|
|
289
|
+
}
|
|
290
|
+
get outboundCriteria() {
|
|
291
|
+
return this.tempParams.outboundCriteria;
|
|
292
|
+
}
|
|
293
|
+
set outboundCriteria(newCrit) {
|
|
294
|
+
// console.warn(`+++ Setting New Criteria: ${newCrit} +++`);
|
|
295
|
+
this.tempParams.outboundCriteria = newCrit;
|
|
296
|
+
this._isValid();
|
|
297
|
+
}
|
|
298
|
+
get inBoundDateTime() {
|
|
299
|
+
return this.tempParams.returnDepartureDateTime;
|
|
300
|
+
}
|
|
301
|
+
set inBoundDateTime(newDateTime) {
|
|
302
|
+
this.tempParams.returnDepartureDateTime = newDateTime;
|
|
303
|
+
if (newDateTime && newDateTime.isValid()) {
|
|
304
|
+
this._return_date = this.helpers.momentToNgDate(newDateTime);
|
|
305
|
+
this._return_time = moment(newDateTime).format('HHmm')
|
|
306
|
+
? moment(newDateTime).format('HHmm')
|
|
307
|
+
: '1600';
|
|
308
|
+
}
|
|
284
309
|
this._isValid();
|
|
285
310
|
}
|
|
286
311
|
get outbound_date() {
|
|
@@ -311,13 +336,13 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
311
336
|
this._return_time = value;
|
|
312
337
|
this._updateReturnDateTime();
|
|
313
338
|
}
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
339
|
+
get returnCriteria() {
|
|
340
|
+
return this.tempParams.returnCriteria;
|
|
341
|
+
}
|
|
342
|
+
set returnCriteria(newCrit) {
|
|
343
|
+
this.tempParams.returnCriteria = newCrit;
|
|
344
|
+
this._isValid();
|
|
345
|
+
}
|
|
321
346
|
// set railCards(newRailCards: string[]) {
|
|
322
347
|
// this.tempParams.railCards = newRailCards;
|
|
323
348
|
// this._isValid();
|
|
@@ -450,11 +475,14 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
450
475
|
_updateReturnDateTime() {
|
|
451
476
|
if (this._return_date && this._return_time) {
|
|
452
477
|
const time = this.helpers.ngDateToMoment(this._return_date, this._return_time);
|
|
453
|
-
|
|
478
|
+
this.inBoundDateTime = time.isValid() ? time : null;
|
|
454
479
|
this._isValid();
|
|
455
480
|
}
|
|
456
481
|
}
|
|
457
482
|
getSearchQuery() {
|
|
483
|
+
// this.travellers = travellers;
|
|
484
|
+
this.noOfAdults = this.travellers.filter((traveller) => traveller.ageType === ages.Adult || traveller.ageType === ages.Youth || traveller.ageType === ages.Senior).length;
|
|
485
|
+
this.noOfChildren = this.travellers.filter((traveller) => traveller.ageType === ages.Child).length;
|
|
458
486
|
const query = {
|
|
459
487
|
supplier: this.supplier,
|
|
460
488
|
countryCode: 'GB',
|
|
@@ -466,14 +494,14 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
466
494
|
adults: this.tempParams.adults,
|
|
467
495
|
children: this.tempParams.children,
|
|
468
496
|
returnDepartureDateTime: this.tempParams.returnDepartureDateTime,
|
|
469
|
-
journeyType: this.
|
|
497
|
+
journeyType: this.journeyType,
|
|
470
498
|
};
|
|
471
499
|
if (this.tempParams.children === 0) {
|
|
472
500
|
query.children = null;
|
|
473
501
|
}
|
|
474
502
|
// switch (this.tempParams.outboundCriteria) {
|
|
475
503
|
// case IrlSearchCriteria.Depart:
|
|
476
|
-
// query.
|
|
504
|
+
// query.outboundDepartureDateTime = null;
|
|
477
505
|
// break;
|
|
478
506
|
// case IrlSearchCriteria.Arrive:
|
|
479
507
|
// query.outboundDepartureDateTime = null;
|
|
@@ -485,7 +513,7 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
485
513
|
// }
|
|
486
514
|
// switch (this.tempParams.returnCriteria) {
|
|
487
515
|
// case IrlSearchCriteria.Depart:
|
|
488
|
-
// query.
|
|
516
|
+
// query.returnDepartureDateTime = null;
|
|
489
517
|
// break;
|
|
490
518
|
// case IrlSearchCriteria.Arrive:
|
|
491
519
|
// query.returnDepartureDateTime = null;
|
|
@@ -886,78 +914,85 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
886
914
|
}
|
|
887
915
|
return legs;
|
|
888
916
|
}
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
917
|
+
addSingleJourneyToBasket(serviceId, railQuery, irlJourneyOption) {
|
|
918
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
919
|
+
console.log(serviceId, railQuery, irlJourneyOption);
|
|
920
|
+
// if (irlJourneyOption.unsellable) {
|
|
921
|
+
// return Promise.resolve(false);
|
|
922
|
+
// }
|
|
923
|
+
const intBasket = yield this.basketService.getDefaultBasket();
|
|
924
|
+
const basket = intBasket === null || intBasket === void 0 ? void 0 : intBasket.subject.value;
|
|
925
|
+
if (basket) {
|
|
926
|
+
// const selectedIrlTicketOption = this.getSelectedIrlTicketOption(
|
|
927
|
+
// irlJourneyOption,
|
|
928
|
+
// railTicketGroup,
|
|
929
|
+
// 0
|
|
930
|
+
// );
|
|
931
|
+
// const legs = this.getLegsFromRailJourneyOption(railJourneyOption);
|
|
932
|
+
// const ticketQueueList = selectedIrlTicketOption.ticketQueueList.map(
|
|
933
|
+
// (ticketQueueList) => {
|
|
934
|
+
// return {
|
|
935
|
+
// id: ticketQueueList.id,
|
|
936
|
+
// name: ticketQueueList.name,
|
|
937
|
+
// type: ticketQueueList.type
|
|
938
|
+
// };
|
|
939
|
+
// }
|
|
940
|
+
// );
|
|
941
|
+
// const basketItem = {
|
|
942
|
+
// basket: basket.id,
|
|
943
|
+
// service: serviceId,
|
|
944
|
+
// detail: {
|
|
945
|
+
// // accountsList: irlJourneyOption.accountsList.map(
|
|
946
|
+
// // (account: RailAccount) => {
|
|
947
|
+
// // return { id: account.id, description: account.description };
|
|
948
|
+
// // }
|
|
949
|
+
// // ),
|
|
950
|
+
// outwardDetail: {
|
|
951
|
+
// arrivalDateTime: railJourneyOption.arriveDateTime,
|
|
952
|
+
// arrivalStationName: railJourneyOption.to,
|
|
953
|
+
// departureDateTime: railJourneyOption.departDateTime,
|
|
954
|
+
// departureStationName: railJourneyOption.from,
|
|
955
|
+
// supplierTickets: [
|
|
956
|
+
// {
|
|
957
|
+
// supplierName: railJourneyOption.providers[0].name,
|
|
958
|
+
// ticketDescription: selectedRailTicketOption.type,
|
|
959
|
+
// price: selectedRailTicketOption.price,
|
|
960
|
+
// legs
|
|
961
|
+
// }
|
|
962
|
+
// ]
|
|
963
|
+
// },
|
|
964
|
+
// transactionIdentifier:
|
|
965
|
+
// railJourneyOption.identifiers.transactionIdentifier,
|
|
966
|
+
// outbound: {
|
|
967
|
+
// fareIdentifiers: [
|
|
968
|
+
// selectedRailTicketOption.identifiers.fareIdentifier
|
|
969
|
+
// ],
|
|
970
|
+
// journeyIdentifier: selectedRailTicketOption.identifiers.journeyIdentifier
|
|
971
|
+
// },
|
|
972
|
+
// ticketQueueList
|
|
973
|
+
// },
|
|
974
|
+
// adults: railQuery.adults,
|
|
975
|
+
// price: selectedRailTicketOption.price,
|
|
976
|
+
// currency: selectedRailTicketOption.currency as CurrencyCode,
|
|
977
|
+
// searchQuery: railQuery,
|
|
978
|
+
// // co2PerItem: irlJourneyOption.co2PerItem,
|
|
979
|
+
// // co2PerPassenger: irlJourneyOption.co2PerPassenger,
|
|
980
|
+
// outboundDate: irlJourneyOption.
|
|
981
|
+
// }
|
|
982
|
+
// // if outTicketExtras exists add the object to basketItem
|
|
983
|
+
// if (outTicketExtras) {
|
|
984
|
+
// basketItem.detail.outbound.ticketExtras = outTicketExtras;
|
|
985
|
+
// }
|
|
986
|
+
// return this.basketService.addToBasket(
|
|
987
|
+
// basketItem,
|
|
988
|
+
// intBasket,
|
|
989
|
+
// this.searchService,
|
|
990
|
+
// this.travellers
|
|
991
|
+
// );
|
|
992
|
+
}
|
|
993
|
+
return Promise.resolve(false);
|
|
994
|
+
});
|
|
995
|
+
}
|
|
961
996
|
// async addReturnJourneyToBasket(
|
|
962
997
|
// serviceId: string,
|
|
963
998
|
// railQuery: SearchRailQueryVariables,
|
|
@@ -1114,4 +1149,4 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
1114
1149
|
IRLEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_irl';
|
|
1115
1150
|
IRLEnterpriseSearch.STORAGE_SESSION_RESULTS = 'irl_results';
|
|
1116
1151
|
IRLEnterpriseSearch.PASSING_POINT = 'Passing';
|
|
1117
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXJsLWVudGVycHJpc2Utc2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2lybC1lbnRlcnByaXNlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQWtCLE1BQU0sUUFBUSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxHQUFHLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWlCekQsT0FBTyxFQUdMLFFBQVEsRUFNUixXQUFXLEVBQ1gsY0FBYyxFQUNmLE1BQU0sd0JBQXdCLENBQUM7QUFxQmhDLE1BQU0sQ0FBTixJQUFZLGlCQUdYO0FBSEQsV0FBWSxpQkFBaUI7SUFDM0IsNENBQXVCLENBQUE7SUFDdkIsNkNBQXdCLENBQUE7QUFDMUIsQ0FBQyxFQUhXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFHNUI7QUFFRCxNQUFNLE9BQU8sbUJBS1gsU0FBUSxvQkFJUDtJQTJiRCxZQUNVLFVBQWtDO0lBQzFDLHVGQUF1RjtJQUMvRSxPQUEyQixFQUMzQixhQUErQyxFQUN2RCxjQUFrQyxFQUMxQixhQUErQztRQUV2RCxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFQZCxlQUFVLEdBQVYsVUFBVSxDQUF3QjtRQUVsQyxZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQUMzQixrQkFBYSxHQUFiLGFBQWEsQ0FBa0M7UUFFL0Msa0JBQWEsR0FBYixhQUFhLENBQWtDO1FBemIvQyx1QkFBa0IsR0FBRyxtQkFBbUIsQ0FBQyx1QkFBdUIsQ0FBQztRQUVwRSxnQkFBVyxHQUFHO1lBQ25CLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLGFBQWEsRUFBRTtZQUMxRCxFQUFFLE9BQU8sRUFBRSxTQUFTLEVB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QUFXLEdBQUcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO29CQUN0RCxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFOzt3QkFDbEMsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQzt3QkFDL0IsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQzt3QkFDL0IsSUFDRSxRQUFRLEtBQUssT0FBTzs0QkFDcEIsQ0FBQyxPQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLEtBQUssSUFBRyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQy9EOzRCQUNBLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO3lCQUNqQzs2QkFBTSxJQUNMLFFBQVEsS0FBSyxVQUFVOzRCQUN2QixDQUFDLE9BQUEsSUFBSSxDQUFDLGlCQUFpQiwwQ0FBRSxLQUFLLElBQUcsUUFBUTtnQ0FDdkMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFDMUI7NEJBQ0EsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQzt5QkFDcEM7d0JBQ0QsSUFBSSxRQUFRLEtBQUssY0FBYyxFQUFFOzRCQUMvQixXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO3lCQUNsQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQztJQUNsQyxDQUFDOztBQTd4Q2UsMENBQXNCLEdBQUcsWUFBWSxDQUFDO0FBQ3RDLDJDQUF1QixHQUFHLGFBQWEsQ0FBQztBQUN4QyxpQ0FBYSxHQUFHLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQsIHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgb2YsIE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IFJhaWxUaWNrZXRHcm91cHMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JhaWwtdGlja2V0LWdyb3Vwcy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIFJhaWxSZXN1bHRJbmRpZmllcnMsXHJcbiAgUmFpbFRpY2tldEdyb3VwLFxyXG4gIFRpY2tldEdyb3Vwc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvcmFpbC10aWNrZXQtZ3JvdXAuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUmFpbERpcmVjdGlvbiB9IGZyb20gJy4vcmFpbC1kaXJlY3Rpb24uZW51bSc7XHJcbmltcG9ydCB7IFZhbHVlRGlzcGxheSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmFsdWUtZGlzcGxheSc7XHJcbmltcG9ydCB7XHJcbiAgTmdiRGF0ZVN0cnVjdCxcclxuICBJcmxRdW90ZVJlc3VsdEFycmF5LFxyXG4gIFJlY3Vyc2l2ZVBhcnRpYWwsXHJcbiAgUmVjZW50U2VhcmNoXHJcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2tldEl0ZW0sXHJcbiAgQ3VycmVuY3lDb2RlLFxyXG4gIElybENsYXNzLFxyXG4gIElybEpvdXJuZXlPcHRpb24sXHJcbiAgSXJsSm91cm5leU9wdGlvbnMsXHJcbiAgSXJsUHJvdmlkZXIsXHJcbiAgSXJsVGlja2V0T3B0aW9uLFxyXG4gIFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlLFxyXG4gIElybEpvdXJuZXlUeXBlLCBJcmxTdXBwbGllclxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VJcmxRdW90ZUZldGNoZXIsXHJcbiAgSXJsUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2lybC1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlR2V0UmFpbFN0YXRpb25GZXRjaGVyLFxyXG4gIEdldFJhaWxTdGF0aW9uRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtcmFpbC1zdGF0aW9uLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIElSTEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXHJcbiAgSXJsVGVtcFBhcmFtc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWlybC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcclxuXHJcbmV4cG9ydCBlbnVtIElybFNlYXJjaENyaXRlcmlhIHtcclxuICBEZXBhcnQgPSAnRGVwYXJ0IEFmdGVyJyxcclxuICBBcnJpdmUgPSAnQXJyaXZlIEJlZm9yZSdcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIElSTEVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBRIGV4dGVuZHMgSXJsUXVvdGVGZXRjaGVyVHlwZVxyXG4gICAgLy8gLFxyXG4gICAgLy8gR1JTX1EgZXh0ZW5kcyBHZXRSYWlsU3RhdGlvbkZldGNoZXJUeXBlXHJcbiAgPlxyXG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBJcmxUZW1wUGFyYW1zLFxyXG4gICAgSXJsUXVvdGVSZXN1bHRBcnJheSxcclxuICAgIElybFF1b3RlUmVzdWx0QXJyYXlcclxuICA+XHJcbiAgaW1wbGVtZW50cyBJUkxFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlXHJcbntcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdzZWFyY2hfaXJsJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAnaXJsX3Jlc3VsdHMnO1xyXG4gIHN0YXRpYyByZWFkb25seSBQQVNTSU5HX1BPSU5UID0gJ1Bhc3NpbmcnO1xyXG4gIHByaXZhdGUgdHJhdmVsbGVyczogVHJhdmVsbGVyW107XHJcblxyXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPSBJUkxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG5cclxuICBwdWJsaWMgc2VhcmNoVHlwZXMgPSBbXHJcbiAgICB7IGRpc3BsYXk6ICdSZXR1cm4nLCB2YWx1ZTogSXJsSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSB9LFxyXG4gICAgeyBkaXNwbGF5OiAnT25lLVdheScsIHZhbHVlOiBJcmxKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5IH1cclxuICAgIC8vIHsgZGlzcGxheTogJ09wZW4gUmV0dXJuJywgdmFsdWU6IElybEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5IH0sXHJcbiAgICAvLyB7IGRpc3BsYXk6ICdEdWFsIFNpbmdsZXMnLCB2YWx1ZTogSXJsSm91cm5leVR5cGUuRHVhbFNpbmdsZUpvdXJuZXkgfSxcclxuICBdO1xyXG5cclxuICBwdWJsaWMgY2xhc3NUeXBlcyA9IFtcclxuICAgIHsgZGlzcGxheTogJ0FueScsIHZhbHVlOiBJcmxDbGFzcy5BbGwgfSxcclxuICAgIHsgZGlzcGxheTogJ1N0YW5kYXJkJywgdmFsdWU6IElybENsYXNzLlN0YW5kYXJkIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGaXJzdCcsIHZhbHVlOiBJcmxDbGFzcy5GaXJzdCB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIGFnZVJhbmdlcyA9IFt7IGtleTogJ2NoaWxkJywgdmFsdWU6ICdDaGlsZCAoMC0zKScgfSwgeyBrZXk6ICdjaGlsZCcsIHZhbHVlOiAnQ2hpbGQgKDQtNSknIH0sIHsga2V5OiAnY2hpbGQnLCB2YWx1ZTogJ0NoaWxkICg2LTExKScgfSwgeyBrZXk6ICd5b3V0aCcsIHZhbHVlOiAnWW91dGggKDEyLTE0KScgfSwgeyBrZXk6ICd5b3V0aCcsIHZhbHVlOiAnWW91dGggKDE1LTI1KScgfSwgeyBrZXk6ICdhZHVsdCcsIHZhbHVlOiAnQWR1bHQgKDI2LTU5KScgfSwgeyBrZXk6ICdzZW5pb3InLCB2YWx1ZTogJ1NlbmlvciAoNjArKSd9XTtcclxuXHJcblxyXG5cclxuICBwdWJsaWMgcmFpbENyaXRlcmlhID0gW0lybFNlYXJjaENyaXRlcmlhLkRlcGFydCwgSXJsU2VhcmNoQ3JpdGVyaWEuQXJyaXZlXTtcclxuXHJcbiAgcHVibGljIHRyYXZlbENhcmRzID0gW1xyXG4gICAgeyBkaXNwbGF5OiAnWW91bmcgcGVyc29ucyByYWlsY2FyZCcsIHZhbHVlOiAnWU5HJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRGlzYWJpbGl0eSByYWlsY2FyZCcsIHZhbHVlOiAnRElTJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRmFtaWx5IHJhaWxjYXJkJywgdmFsdWU6ICdGQU0nIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGb3JjZXMgcmFpbGNhcmQnLCB2YWx1ZTogJ0hNRicgfSxcclxuICAgIHsgZGlzcGxheTogJ1RyYXZlbCBhZ2VuY3kgZGlzY291bnQnLCB2YWx1ZTogJ1RBRCcgfVxyXG4gIF07XHJcblxyXG5cclxuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbDtcclxuICBwdWJsaWMgbWluT3V0Ym91bmREYXRlOiBOZ2JEYXRlU3RydWN0ID0ge1xyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxyXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcclxuICB9O1xyXG4gIHB1YmxpYyBtaW5JbmJvdW5kRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXHJcbiAgfTtcclxuICBwcml2YXRlIF90aW1lQXJyYXk6IFZhbHVlRGlzcGxheVtdO1xyXG4gIHByaXZhdGUgX2NhbkNvbWJpbmU6IGFueTtcclxuICAvLyBwcml2YXRlIF9jaG9zZW5PdXRib3VuZFRpY2tldDogUmVjdXJzaXZlUGFydGlhbDxJcmxUaWNrZXRPcHRpb24+O1xyXG4gIC8vIHByaXZhdGUgX2Nob3NlbkluYm91bmRUaWNrZXQ6IFJlY3Vyc2l2ZVBhcnRpYWw8SXJsVGlja2V0T3B0aW9uPjtcclxuICAvLyBwcml2YXRlIF9jaG9zZW5PdXRib3VuZEpvdXJuZXk6IFJlY3Vyc2l2ZVBhcnRpYWw8SXJsSm91cm5leU9wdGlvbj47XHJcbiAgLy8gcHJpdmF0ZSBfY2hvc2VuSW5ib3VuZEpvdXJuZXk6IFJlY3Vyc2l2ZVBhcnRpYWw8SXJsSm91cm5leU9wdGlvbj47XHJcbiAgcHJpdmF0ZSBfdmlhTG9jYXRpb246IGFueTtcclxuICBwcml2YXRlIF90cmF2ZWxsaW5nRnJvbTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3RyYXZlbGxpbmdUbzogc3RyaW5nO1xyXG4gIHByb3RlY3RlZCBfb3JpZ2luYWxVc2VyU2VhcmNoOiBJcmxUZW1wUGFyYW1zO1xyXG5cclxuICAvLyBnZXQgY2hvc2VuVG90YWxQcmljZSgpOiBudW1iZXIge1xyXG4gIC8vICAgaWYgKHRoaXMuX2Nob3Nlbk91dGJvdW5kVGlja2V0KSB7XHJcbiAgLy8gICAgIGlmICh0aGlzLl9jaG9zZW5JbmJvdW5kVGlja2V0KSB7XHJcbiAgLy8gICAgICAgLy8gbm93IGNoZWNrIGlmIHRoZXkgYXJlIHJldHVybnMgb3IgZHVhbFxyXG4gIC8vICAgICAgIGlmIChcclxuICAvLyAgICAgICAgIHRoaXMuX2Nob3Nlbk91dGJvdW5kVGlja2V0LnNpbmdsZU9yUmV0dXJuID09PSAnUmV0dXJuJyAmJlxyXG4gIC8vICAgICAgICAgdGhpcy5fY2hvc2VuSW5ib3VuZFRpY2tldC5zaW5nbGVPclJldHVybiA9PT0gJ1JldHVybidcclxuICAvLyAgICAgICApIHtcclxuICAvLyAgICAgICAgIC8vIHRoZXkgc2hvdWxkIGJvdGggaGF2ZSB0aGUgc2FtZSBwcmljZVxyXG4gIC8vICAgICAgICAgcmV0dXJuIHRoaXMuX2Nob3Nlbk91dGJvdW5kVGlja2V0LnByaWNlO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICByZXR1cm4gKFxyXG4gIC8vICAgICAgICAgdGhpcy5fY2hvc2VuT3V0Ym91bmRUaWNrZXQucHJpY2UgKyB0aGlzLl9jaG9zZW5JbmJvdW5kVGlja2V0LnByaWNlXHJcbiAgLy8gICAgICAgKTtcclxuICAvLyAgICAgfVxyXG5cclxuICAvLyAgICAgcmV0dXJuIHRoaXMuX2Nob3Nlbk91dGJvdW5kVGlja2V0LnByaWNlO1xyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIHJldHVybiAwO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0IGNob3NlblRpY2tldHMoKTogYW55IHtcclxuICAvLyAgIHJldHVybiB7XHJcbiAgLy8gICAgIE91dGJvdW5kOiB0aGlzLl9jaG9zZW5PdXRib3VuZFRpY2tldCxcclxuICAvLyAgICAgSW5ib3VuZDogdGhpcy5fY2hvc2VuSW5ib3VuZFRpY2tldFxyXG4gIC8vICAgfTtcclxuICAvLyB9XHJcblxyXG4gIC8vIGdldCBjaG9zZW5PdXRib3VuZEpvdXJuZXkoKTogUmVjdXJzaXZlUGFydGlhbDxSYWlsSm91cm5leU9wdGlvbj4ge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuX2Nob3Nlbk91dGJvdW5kSm91cm5leTtcclxuICAvLyB9XHJcblxyXG4gIC8vIGdldCBjaG9zZW5JbmJvdW5kSm91cm5leSgpOiBSZWN1cnNpdmVQYXJ0aWFsPFJhaWxKb3VybmV5T3B0aW9uPiB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5fY2hvc2VuSW5ib3VuZEpvdXJuZXk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBnZXQgb3BlblJldHVybigpOiBib29sZWFuIHtcclxuICAvLyAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3BlblJldHVybjtcclxuICAvLyB9XHJcblxyXG4gIC8vIHNldCBvcGVuUmV0dXJuKG5ld1ZhbDogYm9vbGVhbikge1xyXG4gIC8vICAgdGhpcy50ZW1wUGFyYW1zLm9wZW5SZXR1cm4gPSBuZXdWYWw7XHJcblxyXG4gIC8vICAgaWYgKG5ld1ZhbCkge1xyXG4gIC8vICAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9IElybEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5O1xyXG4gIC8vICAgfVxyXG4gIC8vICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0IGNob3NlblNlYXJjaFR5cGUoKTogSXJsSm91cm5leVR5cGUge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0IGNob3NlblNlYXJjaFR5cGUobmV3VHlwZTogSXJsSm91cm5leVR5cGUpIHtcclxuICAvLyAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID0gbmV3VHlwZTtcclxuICAvLyAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAvLyB9XHJcblxyXG4gIGdldCBub09mQWR1bHRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcclxuICB9XHJcblxyXG4gIHNldCBub09mQWR1bHRzKGFkdWx0czogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gYWR1bHRzO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5vT2ZDaGlsZHJlbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbjtcclxuICB9XHJcblxyXG4gIHNldCBub09mQ2hpbGRyZW4oY2hpbGRyZW46IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gY2hpbGRyZW47XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhdmVsbGluZ1RvKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFycml2YWxMb2NhdGlvbklkO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRyYXZlbGxpbmdUbyh0dDogYW55KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYXJyaXZhbExvY2F0aW9uSWQgPSB0dDtcclxuXHJcbiAgICB0aGlzLl90cmF2ZWxsaW5nVG8gPSAnJztcclxuICAgIGlmICh0dD8ucmFpbHN0YXRpb24/LmlkKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9IHR0LnJhaWxzdGF0aW9uLmlkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB0cmF2ZWxsaW5nRnJvbSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kZXBhcnR1cmVMb2NhdGlvbklkO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRyYXZlbGxpbmdGcm9tKHR0OiBhbnkpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5kZXBhcnR1cmVMb2NhdGlvbklkID0gdHQ7XHJcbiAgICB0aGlzLl90cmF2ZWxsaW5nRnJvbSA9ICcnO1xyXG4gICAgaWYgKHR0Py5yYWlsc3RhdGlvbj8uaWQpIHtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ0Zyb20gPSB0dC5yYWlsc3RhdGlvbi5pZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zdXBwbGllcjogSXJsU3VwcGxpZXIgPSBudWxsXHJcbiAgZ2V0IHN1cHBsaWVyKCk6SXJsU3VwcGxpZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N1cHBsaWVyO1xyXG4gIH1cclxuICBzZXQgc3VwcGxpZXIoZGF0YTogSXJsU3VwcGxpZXIpIHtcclxuICAgIHRoaXMuX3N1cHBsaWVyID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvdW50cnlDb2RlOiBzdHJpbmcgPSBudWxsXHJcbiAgZ2V0IGNvdW50cnlDb2RlKCk6c3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jb3VudHJ5Q29kZTtcclxuICB9XHJcbiAgc2V0IGNvdW50cnlDb2RlKGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5fY291bnRyeUNvZGUgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xhc3M6IElybENsYXNzID0gbnVsbFxyXG4gIGdldCBjbGFzcygpOklybENsYXNzIHtcclxuICAgIHJldHVybiB0aGlzLl9jbGFzcztcclxuICB9XHJcbiAgc2V0IGNsYXNzKGRhdGE6IElybENsYXNzKSB7XHJcbiAgICB0aGlzLl9jbGFzcyA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vdXRib3VuZERlcGFydHVyZURhdGVUaW1lOiBNb21lbnQgPSBudWxsXHJcbiAgZ2V0IG91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUoKTpNb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgfVxyXG4gIHNldCBvdXRib3VuZERlcGFydHVyZURhdGVUaW1lKGRhdGE6IE1vbWVudCkge1xyXG4gICAgdGhpcy5fb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kZXBhcnR1cmVMb2NhdGlvbklkOiBzdHJpbmcgPSBudWxsXHJcbiAgZ2V0IGRlcGFydHVyZUxvY2F0aW9uSWQoKTpzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RlcGFydHVyZUxvY2F0aW9uSWQ7XHJcbiAgfVxyXG4gIHNldCBkZXBhcnR1cmVMb2NhdGlvbklkKGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5fZGVwYXJ0dXJlTG9jYXRpb25JZCA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hcnJpdmFsTG9jYXRpb25JZDogc3RyaW5nID0gbnVsbFxyXG4gIGdldCBhcnJpdmFsTG9jYXRpb25JZCgpOnN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXJyaXZhbExvY2F0aW9uSWQ7XHJcbiAgfVxyXG4gIHNldCBhcnJpdmFsTG9jYXRpb25JZChkYXRhOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2Fycml2YWxMb2NhdGlvbklkID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FkdWx0czogbnVtYmVyID0gMFxyXG4gIGdldCBhZHVsdHMoKTpudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FkdWx0cztcclxuICB9XHJcbiAgc2V0IGFkdWx0cyhkYXRhOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX2FkdWx0cyA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jaGlsZHJlbjogbnVtYmVyID0gMFxyXG4gIGdldCBjaGlsZHJlbigpOm51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW47XHJcbiAgfVxyXG4gIHNldCBjaGlsZHJlbihkYXRhOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX2NoaWxkcmVuID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JldHVybkRlcGFydHVyZURhdGVUaW1lOiBNb21lbnQgPSBudWxsXHJcbiAgZ2V0IHJldHVybkRlcGFydHVyZURhdGVUaW1lKCk6TW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5EZXBhcnR1cmVEYXRlVGltZTtcclxuICB9XHJcbiAgc2V0IHJldHVybkRlcGFydHVyZURhdGVUaW1lKGRhdGE6IE1vbWVudCkge1xyXG4gICAgdGhpcy5fcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWdlUmFuZ2U6IHN0cmluZyA9IG51bGxcclxuICBnZXQgYWdlUmFuZ2UoKTpzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FnZVJhbmdlO1xyXG4gIH1cclxuICBzZXQgYWdlUmFuZ2UoZGF0YTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9hZ2VSYW5nZSA9IGRhdGE7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuICAvLyBnZXQgY2hvc2VuUmFpbENsYXNzKCk6IFJhaWxDbGFzcyB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaENsYXNzO1xyXG4gIC8vIH1cclxuXHJcbiAgZ2V0IGNob3NlblNlYXJjaENsYXNzKCk6IElybENsYXNzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2xhc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuU2VhcmNoQ2xhc3MoY2xhc3NSOiBJcmxDbGFzcykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNsYXNzID0gY2xhc3NSO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG91dEJvdW5kRGF0ZVRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Qm91bmREYXRlVGltZShuZXdEYXRlVGltZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUgPSBtb21lbnQobmV3RGF0ZVRpbWUpO1xyXG5cclxuICAgIHRoaXMubWluSW5ib3VuZERhdGUgPSB7XHJcbiAgICAgIHllYXI6IG5ld0RhdGVUaW1lLnllYXIoKSxcclxuICAgICAgbW9udGg6IG5ld0RhdGVUaW1lLm1vbnRoKCkgKyAxLFxyXG4gICAgICBkYXk6IG5ld0RhdGVUaW1lLmRhdGUoKVxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBpZiAoXHJcbiAgICAvLyAgIHRoaXMub3V0Qm91bmREYXRlVGltZSAmJlxyXG4gICAgLy8gICAvLyB0aGlzLmluQm91bmREYXRlVGltZSAmJlxyXG4gICAgLy8gICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUuaXNBZnRlcih0aGlzLmluQm91bmREYXRlVGltZSlcclxuICAgIC8vICkge1xyXG4gICAgLy8gICB0aGlzLmluQm91bmREYXRlVGltZSA9IHRoaXMub3V0Qm91bmREYXRlVGltZS5jbG9uZSgpLmFkZCgxLCAnZGF5Jyk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IG91dGJvdW5kQ3JpdGVyaWEoKTogSXJsU2VhcmNoQ3JpdGVyaWEge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRib3VuZENyaXRlcmlhO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0IG91dGJvdW5kQ3JpdGVyaWEobmV3Q3JpdDogSXJsU2VhcmNoQ3JpdGVyaWEpIHtcclxuICAvLyAgIC8vIGNvbnNvbGUud2FybihgKysrIFNldHRpbmcgTmV3IENyaXRlcmlhOiAke25ld0NyaXR9ICsrK2ApO1xyXG4gIC8vICAgdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kQ3JpdGVyaWEgPSBuZXdDcml0O1xyXG5cclxuICAvLyAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAvLyB9XHJcblxyXG4gIC8vICEgbWlnaHQgbm90IG5lZWQgdGhpcz9cclxuICAvLyBnZXQgaW5Cb3VuZERhdGVUaW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pbkJvdW5kRGF0ZVRpbWU7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBzZXQgaW5Cb3VuZERhdGVUaW1lKG5ld0RhdGVUaW1lOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgLy8gICB0aGlzLnRlbXBQYXJhbXMuaW5Cb3VuZERhdGVUaW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKTtcclxuICAvLyAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAvLyB9XHJcblxyXG4gIC8vICFkYXRlIGFuZCB0aW1lIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgZm9yIExVXHJcbiAgcHJpdmF0ZSBfb3V0Ym91bmRfZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XHJcblxyXG4gIGdldCBvdXRib3VuZF9kYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kX2RhdGU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRfZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fb3V0Ym91bmRfZGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb3V0Ym91bmRfdGltZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgb3V0Ym91bmRfdGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kX3RpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRfdGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZF90aW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVPdXRib3VuZERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXR1cm5fZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XHJcblxyXG4gIGdldCByZXR1cm5fZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5fZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5fZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fcmV0dXJuX2RhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZVJldHVybkRhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXR1cm5fdGltZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgcmV0dXJuX3RpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5fdGltZTtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5fdGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9yZXR1cm5fdGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIC8vIGdldCByZXR1cm5Dcml0ZXJpYSgpOiBJcmxTZWFyY2hDcml0ZXJpYSB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJldHVybkNyaXRlcmlhO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0IHJldHVybkNyaXRlcmlhKG5ld0NyaXQ6IElybFNlYXJjaENyaXRlcmlhKSB7XHJcbiAgLy8gICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ3JpdGVyaWEgPSBuZXdDcml0O1xyXG4gIC8vICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0IHJhaWxDYXJkcyhuZXdSYWlsQ2FyZHM6IHN0cmluZ1tdKSB7XHJcbiAgLy8gICB0aGlzLnRlbXBQYXJhbXMucmFpbENhcmRzID0gbmV3UmFpbENhcmRzO1xyXG4gIC8vICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0IGNhcm5ldFRpY2tldCgpOiBib29sZWFuIHtcclxuICAvLyAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2FybmV0VGlja2V0O1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0IGNhcm5ldFRpY2tldChuZXdDYXJuZXQ6IGJvb2xlYW4pIHtcclxuICAvLyAgIHRoaXMudGVtcFBhcmFtcy5jYXJuZXRUaWNrZXQgPSBuZXdDYXJuZXQ7XHJcbiAgLy8gICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBnZXQgZGlzYWJsZUF1dG9EaXNjb3VudHMoKTogYm9vbGVhbiB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmRpc2FibGVBdXRvRGlzY291bnRzO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0IGRpc2FibGVBdXRvRGlzY291bnRzKG5ld0RpczogYm9vbGVhbikge1xyXG4gIC8vICAgdGhpcy50ZW1wUGFyYW1zLmRpc2FibGVBdXRvRGlzY291bnRzID0gbmV3RGlzO1xyXG4gIC8vICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0IHByaW9yaXRpc2VCeVByaWNlKCk6IGJvb2xlYW4ge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmlvcml0aXNlQnlQcmljZTtcclxuICAvLyB9XHJcblxyXG4gIC8vIHNldCBwcmlvcml0aXNlQnlQcmljZShuZXdQcmlvcml0eTogYm9vbGVhbikge1xyXG4gIC8vICAgdGhpcy50ZW1wUGFyYW1zLnByaW9yaXRpc2VCeVByaWNlID0gbmV3UHJpb3JpdHk7XHJcbiAgLy8gICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgLy8gfVxyXG5cclxuXHJcbiAgcHVibGljIGdldCB0aW1lQXJyYXkoKTogVmFsdWVEaXNwbGF5W10ge1xyXG4gICAgdGhpcy5fdGltZUFycmF5ID1cclxuICAgICAgdGhpcy5fdGltZUFycmF5IHx8XHJcbiAgICAgIEFycmF5KDQ4KVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmFsdWU6XHJcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDIpXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSAyKSAqIDMwKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXHJcbiAgICAgICAgICAgIGRpc3BsYXk6XHJcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDIpXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgICAgICc6JyArXHJcbiAgICAgICAgICAgICAgKChpbmRleCAlIDIpICogMzApLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLl90aW1lQXJyYXk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBfY2hlYXBlc3RTdGFuZGFyZDogSXJsVGlja2V0T3B0aW9uID0gbnVsbDtcclxuICBnZXQgY2hlYXBlc3RTdGFuZGFyZCgpOiBJcmxUaWNrZXRPcHRpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NoZWFwZXN0U3RhbmRhcmQ7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NoZWFwZXN0Rmlyc3Q6IElybFRpY2tldE9wdGlvbiA9IG51bGw7XHJcbiAgZ2V0IGNoZWFwZXN0Rmlyc3QoKTogSXJsVGlja2V0T3B0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGVhcGVzdEZpcnN0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXJsQ2xhc3M6IElybENsYXNzID0gbnVsbDtcclxuICBnZXQgaXJsQ2xhc3MoKTogSXJsQ2xhc3Mge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lybENsYXNzXHJcbiAgfVxyXG5cclxuICBzZXQgaXJsQ2xhc3MoZGF0YSA6IElybENsYXNzKSB7XHJcbiAgICB0aGlzLl9pcmxDbGFzcyA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9qb3VybmV5dHlwZTogSXJsSm91cm5leVR5cGUgPSBudWxsO1xyXG4gIGdldCBqb3VybmV5VHlwZSgpOiBJcmxKb3VybmV5VHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fam91cm5leXR5cGVcclxuICB9XHJcblxyXG4gIHNldCBqb3VybmV5VHlwZShkYXRhIDogSXJsSm91cm5leVR5cGUpIHtcclxuICAgIHRoaXMuX2pvdXJuZXl0eXBlID0gZGF0YTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBJcmxmZXRjaGVyOiBCYXNlSXJsUXVvdGVGZXRjaGVyPFE+LFxyXG4gICAgLy8gcHJpdmF0ZSBnZXRSYWlsU3RhdGlvbkZldGNoZXI6IEJhc2VHZXRSYWlsU3RhdGlvbkZldGNoZXI8R1JTX1E+LCAvLyBkb2VzbnQgZXhpc3QgeWV0XHJcbiAgICBwcml2YXRlIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZVxyXG4gICkge1xyXG4gICAgc3VwZXIoc3RvcmFnZVNlcnZpY2UpO1xyXG5cclxuICAgIGNvbnN0IGRhdGE6IHtcclxuICAgICAgcXVlcnk6IHt9O1xyXG4gICAgICB0ZW1wUGFyYW1zOiBJcmxUZW1wUGFyYW1zO1xyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IElybFRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNU1xyXG4gICAgKSB8fCB7XHJcbiAgICAgIHF1ZXJ5OiB7fSxcclxuICAgICAgdGVtcFBhcmFtczoge30gYXMgSXJsVGVtcFBhcmFtcyxcclxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB7fSBhcyBJcmxUZW1wUGFyYW1zXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZUlybFF1ZXJ5KGRhdGEudGVtcFBhcmFtcykpO1xyXG4gICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gZGF0YS5vcmlnaW5hbFVzZXJTZWFyY2g7XHJcblxyXG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcclxuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyhcclxuICAgICAgICAgICAgdHJhdmVsbGVycyxcclxuICAgICAgICAgICAgU2VydmljZVR5cGUuUmFpbFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSBzcGxpdFRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHNwbGl0VHJhdmVsbGVycy5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIGNvbnN0IHJlc3VsdHMgPVxyXG4gICAgICBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbUFzTGlzdDxJcmxRdW90ZVJlc3VsdEFycmF5PihcclxuICAgICAgICB0aGlzLnJlc3VsdHNTZXNzaW9uTmFtZVxyXG4gICAgICApIHx8IFtdO1xyXG4gICAgLy8gaWYgKHJlc3VsdHMgPT0gbnVsbCAmJiB0aGlzLmlzVmFsaWQpIHtcclxuICAgIC8vICAgc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgICAvLyB9XHJcbiAgICB0aGlzLl9jaGVhcGVzdFJlc3VsdFByaWNlID0gdGhpcy51cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMgfHwgW10pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VJcmxRdWVyeSgpKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzVmFsaWQoKSB7XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBJUkxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcblxyXG4gICAgY29uc3Qgbm93ID0gbW9tZW50KCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLl90cmF2ZWxsaW5nRnJvbSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgRW50ZXIgYSBGcm9tIExvY2F0aW9uLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5fdHJhdmVsbGluZ1RvKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBFbnRlciBhIFRvIExvY2F0aW9uLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm91dEJvdW5kRGF0ZVRpbWU/LmlzQmVmb3JlKG5vdykpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAnRGVwYXJ0dXJlIERhdGUvVGltZSBjYW5ub3QgYmUgaW4gdGhlIHBhc3QuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIChcclxuICAgIC8vICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID09PSBJcmxKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5XHJcbiAgICAvLyApIHtcclxuICAgIC8vICAgLy8gY2hlY2sgZm9yIHJldHVybiBzcGVjaWZpYyB2YWxpZGF0aW9ucyBpbiBoZXJlXHJcblxyXG4gICAgLy8gICBpZiAodGhpcy5pbkJvdW5kRGF0ZVRpbWU/LmlzU2FtZU9yQmVmb3JlKHRoaXMub3V0Qm91bmREYXRlVGltZSkpIHtcclxuICAgIC8vICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgLy8gICAgICAgJ1JldHVybiBEYXRlL1RpbWUgbXVzdCBiZSBhZnRlciBEZXBhcnR1cmUgRGF0ZS9UaW1lJ1xyXG4gICAgLy8gICAgICk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBpZiAodGhpcy52aWEpIHtcclxuICAgIC8vICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMudmlhTG9jYXRpb24pIHtcclxuICAgIC8vICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgZW50ZXIgYSB2aWEgbG9jYXRpb24uJyk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmFkdWx0cyArIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA8IDEpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCAxIHRyYXZlbGxlcicpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICB0aGlzLm1lc3NhZ2VzLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBPYmplY3QuZnJlZXplKHsgLi4udGhpcy50ZW1wUGFyYW1zIH0pO1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICAgIElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2goXHJcbiAgICAgICAgdGhpcy5JcmxmZXRjaGVyLmZldGNoTGlzdCh0aGlzLmdldFNlYXJjaFF1ZXJ5KCkpLnBpcGUoXHJcbiAgICAgICAgICBtYXAocmVzdWx0ID0+IHJlc3VsdClcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdGFydFNlYXJjaCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9vdXRib3VuZF9kYXRlICYmIHRoaXMuX291dGJvdW5kX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9vdXRib3VuZF9kYXRlLFxyXG4gICAgICAgIHRoaXMuX291dGJvdW5kX3RpbWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fcmV0dXJuX2RhdGUgJiYgdGhpcy5fcmV0dXJuX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9yZXR1cm5fZGF0ZSxcclxuICAgICAgICB0aGlzLl9yZXR1cm5fdGltZVxyXG4gICAgICApO1xyXG4gICAgICAvLyB0aGlzLmluQm91bmREYXRlVGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFF1ZXJ5KCk6IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzIHtcclxuICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyA9IHtcclxuICAgICAgc3VwcGxpZXI6IHRoaXMuc3VwcGxpZXIsIC8vIElSTFN1cHBsaWVyIVxyXG4gICAgICBjb3VudHJ5Q29kZTogJ0dCJyxcclxuICAgICAgLy8gam91cm5leVR5cGU6IHRoaXMuam91cm5leVR5cGUsIC8vIElSTEpvdXJuZXlUeXBlIVxyXG4gICAgICBjbGFzczogdGhpcy5pcmxDbGFzcywgLy8gSVJMQ2xhc3NcclxuICAgICAgb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZTogdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUsXHJcbiAgICAgIGRlcGFydHVyZUxvY2F0aW9uSWQ6IHRoaXMuX3RyYXZlbGxpbmdGcm9tLFxyXG4gICAgICBhcnJpdmFsTG9jYXRpb25JZDogdGhpcy5fdHJhdmVsbGluZ1RvLFxyXG4gICAgICBhZHVsdHM6IHRoaXMudGVtcFBhcmFtcy5hZHVsdHMsXHJcbiAgICAgIGNoaWxkcmVuOiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4sXHJcbiAgICAgIHJldHVybkRlcGFydHVyZURhdGVUaW1lOiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUsXHJcblxyXG4gICAgICBqb3VybmV5VHlwZTogdGhpcy50ZW1wUGFyYW1zLmpvdXJuZXlUeXBlLFxyXG4gICAgICAvLyBjbGFzczogdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaENsYXNzLFxyXG4gICAgICAvLyBleHRyYVRpbWVUb0NoYW5nZTogdGhpcy50ZW1wUGFyYW1zLmV4dHJhVGltZSxcclxuICAgICAgLy8gb3V0Ym91bmRBcnJpdmFsRGF0ZVRpbWU6IHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGVUaW1lLFxyXG4gICAgICAvLyByZXR1cm5BcnJpdmFsRGF0ZVRpbWU6IHRoaXMudGVtcFBhcmFtcy5pbkJvdW5kRGF0ZVRpbWUsXHJcbiAgICAgIC8vIHZpYUxvY2F0aW9uQ29kZTogdGhpcy50ZW1wUGFyYW1zLnZpYUxvY2F0aW9uXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPT09IDApIHtcclxuICAgICAgcXVlcnkuY2hpbGRyZW4gPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHN3aXRjaCAodGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kQ3JpdGVyaWEpIHtcclxuICAgIC8vICAgY2FzZSBJcmxTZWFyY2hDcml0ZXJpYS5EZXBhcnQ6XHJcbiAgICAvLyAgICAgcXVlcnkub3V0Ym91bmRBcnJpdmFsRGF0ZVRpbWUgPSBudWxsO1xyXG4gICAgLy8gICAgIGJyZWFrO1xyXG4gICAgLy8gICBjYXNlIElybFNlYXJjaENyaXRlcmlhLkFycml2ZTpcclxuICAgIC8vICAgICBxdWVyeS5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lID0gbnVsbDtcclxuICAgIC8vICAgICBicmVhaztcclxuICAgIC8vICAgZGVmYXVsdDpcclxuICAgIC8vICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAvLyAgICAgICBgKysrIFVua25vd24gQ3JpdGVyaWE6ICR7dGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kQ3JpdGVyaWF9ICsrK2BcclxuICAgIC8vICAgICApO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIHN3aXRjaCAodGhpcy50ZW1wUGFyYW1zLnJldHVybkNyaXRlcmlhKSB7XHJcbiAgICAvLyAgIGNhc2UgSXJsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0OlxyXG4gICAgLy8gICAgIHF1ZXJ5LnJldHVybkFycml2YWxEYXRlVGltZSA9IG51bGw7XHJcbiAgICAvLyAgICAgYnJlYWs7XHJcbiAgICAvLyAgIGNhc2UgSXJsU2VhcmNoQ3JpdGVyaWEuQXJyaXZlOlxyXG4gICAgLy8gICAgIHF1ZXJ5LnJldHVybkRlcGFydHVyZURhdGVUaW1lID0gbnVsbDtcclxuICAgIC8vICAgICBicmVhaztcclxuICAgIC8vICAgZGVmYXVsdDpcclxuICAgIC8vICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAvLyAgICAgICBgKysrIFVua25vd24gQ3JpdGVyaWE6ICR7dGhpcy50ZW1wUGFyYW1zLnJldHVybkNyaXRlcmlhfSArKytgXHJcbiAgICAvLyAgICAgKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMudGVtcFBhcmFtcy5qb3VybmV5VHlwZSkge1xyXG4gICAgICBjYXNlIElybEpvdXJuZXlUeXBlLlNpbmdsZUpvdXJuZXk6XHJcbiAgICAgICAgcXVlcnkucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUgPSBudWxsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcz4ocXVlcnkpO1xyXG4gIH1cclxuXHJcbiAgLy8gY3JlYXRlVGlja2V0R3JvdXBzKHJlc3VsdHM6IElSTEpvdXJuZXlPcHRpb25zW10pOiBSYWlsVGlja2V0R3JvdXBzIHtcclxuICAvLyAgIGxldCB0aWNrZXRzOiBSYWlsVGlja2V0R3JvdXBzID0ge307XHJcbiAgLy8gICBsZXQgdGlja2V0SWQgPSAnJztcclxuICAvLyAgIHRoaXMuX2NhbkNvbWJpbmUgPSB7fTtcclxuXHJcbiAgLy8gICBsZXQgdGlja2V0R3JvdXBzT3V0Ym91bmQgPSB0aGlzLnNldFRpY2tldHNHcm91cHMocmVzdWx0c1swXS5vdXRib3VuZCk7XHJcbiAgLy8gICBsZXQgdGlja2V0R3JvdXBzUmV0dXJuID0gdGhpcy5zZXRUaWNrZXRzR3JvdXBzKHJlc3VsdHNbMF0ucmV0dXJuKTtcclxuICAvLyAgIHRpY2tldEdyb3Vwc091dGJvdW5kID0gdGhpcy5zb3J0VGlja2V0UHJpY2VzKHRpY2tldEdyb3Vwc091dGJvdW5kKTtcclxuICAvLyAgIHRpY2tldEdyb3Vwc1JldHVybiA9IHRoaXMuc29ydFRpY2tldFByaWNlcyh0aWNrZXRHcm91cHNSZXR1cm4pO1xyXG5cclxuICAvLyAgIE9iamVjdC5rZXlzKHRpY2tldEdyb3Vwc091dGJvdW5kKS5tYXAoKGtleSkgPT4ge1xyXG4gIC8vICAgICB0aWNrZXRHcm91cHNPdXRib3VuZFtrZXldLm1hcCgodGt0OiBSYWlsVGlja2V0T3B0aW9uKSA9PiB7XHJcbiAgLy8gICAgICAgdGlja2V0SWQgPSBgJHt0a3QudHlwZX0ke3RrdC5zaW5nbGVPclJldHVybn1gO1xyXG4gIC8vICAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSB0a3QuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXI7XHJcbiAgLy8gICAgICAgY29uc3QgaWRlbnRpZmllck9iajogUmFpbFJlc3VsdEluZGlmaWVycyA9IHt9O1xyXG4gIC8vICAgICAgIGlkZW50aWZpZXJPYmpbaWRlbnRpZmllcl0gPSB7XHJcbiAgLy8gICAgICAgICBwcmljZTogdGt0LnByaWNlLFxyXG4gIC8vICAgICAgICAgaXNDaGlsZDogZmFsc2UsXHJcbiAgLy8gICAgICAgICBmYXJlSWRlbnRpZmllcjogdGt0LmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXHJcbiAgLy8gICAgICAgfTtcclxuICAvLyAgICAgICBpZiAodGlja2V0c1trZXldKSB7XHJcbiAgLy8gICAgICAgICB0aGlzLnVwZGF0ZUNhbkNvbWJpbmUodGt0KTtcclxuICAvLyAgICAgICAgIGlkZW50aWZpZXJPYmpbdGt0LmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyXS5pc0NoaWxkID0gZmFsc2U7XHJcbiAgLy8gICAgICAgICBpZiAodGlja2V0c1t0a3QudHlwZV0uaGVhZGVyLnByaWNlID09PSB0a3QucHJpY2UpIHtcclxuICAvLyAgICAgICAgICAgdGlja2V0c1t0a3QudHlwZV0ucmVzdWx0SW5kaWZpZXJzLnB1c2goaWRlbnRpZmllcik7XHJcbiAgLy8gICAgICAgICAgIHRpY2tldHNbdGt0LnR5cGVdLnJlc3VsdEluZGlmaWVyc1ByaWNlcyA9IHtcclxuICAvLyAgICAgICAgICAgICAuLi50aWNrZXRzW3RrdC50eXBlXS5yZXN1bHRJbmRpZmllcnNQcmljZXMsXHJcbiAgLy8gICAgICAgICAgICAgLi4uaWRlbnRpZmllck9ialxyXG4gIC8vICAgICAgICAgICB9O1xyXG4gIC8vICAgICAgICAgfSBlbHNlIGlmICh0a3QucHJpY2UpIHtcclxuICAvLyAgICAgICAgICAgaWRlbnRpZmllck9ialtpZGVudGlmaWVyXS5pc0NoaWxkID0gdHJ1ZTtcclxuICAvLyAgICAgICAgICAgY29uc3QgY2hpbGRUaWNrZXQgPSB7XHJcbiAgLy8gICAgICAgICAgICAgaGVhZGVyOiB0a3QsXHJcbiAgLy8gICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gIC8vICAgICAgICAgICAgIG9wZW46IGZhbHNlLFxyXG4gIC8vICAgICAgICAgICAgIGRpcmVjdGlvbjogUmFpbERpcmVjdGlvbi5PdXRib3VuZCxcclxuICAvLyAgICAgICAgICAgICByZXN1bHRJbmRpZmllcnM6IFtpZGVudGlmaWVyXSxcclxuICAvLyAgICAgICAgICAgICByZXN1bHRJbmRpZmllcnNQcmljZXM6IGlkZW50aWZpZXJPYmosXHJcbiAgLy8gICAgICAgICAgICAgY2hpbGQ6IHRydWUsXHJcbiAgLy8gICAgICAgICAgICAgdGlja2V0SWQsXHJcbiAgLy8gICAgICAgICAgICAgc2VsZWN0ZWRJbmRpY2llczogW10sXHJcbiAgLy8gICAgICAgICAgICAgZGlzYWJsZWRJbmRpY2llczogW11cclxuICAvLyAgICAgICAgICAgfSBhcyBSYWlsVGlja2V0R3JvdXA7XHJcbiAgLy8gICAgICAgICAgIHRpY2tldHNbdGt0LnR5cGVdLmNoaWxkcmVuLnB1c2goY2hpbGRUaWNrZXQpO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgICB0aGlzLl9jYW5Db21iaW5lW3RrdC50eXBlXSA9IHt9O1xyXG4gIC8vICAgICAgICAgdGhpcy51cGRhdGVDYW5Db21iaW5lKHRrdCk7XHJcbiAgLy8gICAgICAgICB0aWNrZXRzW3RrdC50eXBlXSA9IHtcclxuICAvLyAgICAgICAgICAgaGVhZGVyOiB0a3QsXHJcbiAgLy8gICAgICAgICAgIGNoaWxkcmVuOiBbXSxcclxuICAvLyAgICAgICAgICAgb3BlbjogZmFsc2UsXHJcbiAgLy8gICAgICAgICAgIGRpcmVjdGlvbjogUmFpbERpcmVjdGlvbi5PdXRib3VuZCxcclxuICAvLyAgICAgICAgICAgcmVzdWx0SW5kaWZpZXJzOiBbaWRlbnRpZmllcl0sXHJcbiAgLy8gICAgICAgICAgIHJlc3VsdEluZGlmaWVyc1ByaWNlczogaWRlbnRpZmllck9iaixcclxuICAvLyAgICAgICAgICAgY2hpbGQ6IGZhbHNlLFxyXG4gIC8vICAgICAgICAgICB0aWNrZXRJZCxcclxuICAvLyAgICAgICAgICAgc2VsZWN0ZWRJbmRpY2llczogW10sXHJcbiAgLy8gICAgICAgICAgIGRpc2FibGVkSW5kaWNpZXM6IFtdXHJcbiAgLy8gICAgICAgICB9IGFzIFJhaWxUaWNrZXRHcm91cDtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH0pO1xyXG4gIC8vICAgfSk7XHJcblxyXG4gIC8vICAgT2JqZWN0LmtleXModGlja2V0R3JvdXBzUmV0dXJuKS5tYXAoKGtleSkgPT4ge1xyXG4gIC8vICAgICB0aWNrZXRHcm91cHNSZXR1cm5ba2V5XS5tYXAoKHRrdDogUmFpbFRpY2tldE9wdGlvbikgPT4ge1xyXG4gIC8vICAgICAgIHRpY2tldElkID0gYCR7dGt0LnR5cGV9JHt0a3Quc2luZ2xlT3JSZXR1cm59YDtcclxuICAvLyAgICAgICBjb25zdCBpZGVudGlmaWVyID0gdGt0LmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyO1xyXG4gIC8vICAgICAgIGNvbnN0IGlkZW50aWZpZXJPYmo6IFJhaWxSZXN1bHRJbmRpZmllcnMgPSB7fTtcclxuICAvLyAgICAgICBpZGVudGlmaWVyT2JqW2lkZW50aWZpZXJdID0ge1xyXG4gIC8vICAgICAgICAgcHJpY2U6IHRrdC5wcmljZSxcclxuICAvLyAgICAgICAgIGlzQ2hpbGQ6IHRydWUsXHJcbiAgLy8gICAgICAgICBmYXJlSWRlbnRpZmllcjogdGt0LmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXHJcbiAgLy8gICAgICAgfTtcclxuICAvLyAgICAgICBpZiAoXHJcbiAgLy8gICAgICAgICB0aWNrZXRzW3RrdC50eXBlXSAmJlxyXG4gIC8vICAgICAgICAgdGt0LnByaWNlICYmXHJcbiAgLy8gICAgICAgICB0a3QucHJpY2UgIT09IHRpY2tldHNbdGt0LnR5cGVdLmhlYWRlci5wcmljZVxyXG4gIC8vICAgICAgICkge1xyXG4gIC8vICAgICAgICAgdGhpcy51cGRhdGVDYW5Db21iaW5lKHRrdCk7XHJcbiAgLy8gICAgICAgICBpZGVudGlmaWVyT2JqW2lkZW50aWZpZXJdLmlzQ2hpbGQgPSB0cnVlO1xyXG4gIC8vICAgICAgICAgY29uc3QgY2hpbGRUaWNrZXQgPSB7XHJcbiAgLy8gICAgICAgICAgIGhlYWRlcjogdGt0LFxyXG4gIC8vICAgICAgICAgICBjaGlsZHJlbjogW10sXHJcbiAgLy8gICAgICAgICAgIG9wZW46IGZhbHNlLFxyXG4gIC8vICAgICAgICAgICBkaXJlY3Rpb246IFJhaWxEaXJlY3Rpb24uSW5ib3VuZCxcclxuICAvLyAgICAgICAgICAgcmVzdWx0SW5kaWZpZXJzOiBbaWRlbnRpZmllcl0sXHJcbiAgLy8gICAgICAgICAgIHJlc3VsdEluZGlmaWVyc1ByaWNlczogaWRlbnRpZmllck9iaixcclxuICAvLyAgICAgICAgICAgY2hpbGQ6IHRydWUsXHJcbiAgLy8gICAgICAgICAgIHRpY2tldElkLFxyXG4gIC8vICAgICAgICAgICBzZWxlY3RlZEluZGljaWVzOiBbXSxcclxuICAvLyAgICAgICAgICAgZGlzYWJsZWRJbmRpY2llczogW11cclxuICAvLyAgICAgICAgIH0gYXMgYW55O1xyXG4gIC8vICAgICAgICAgdGlja2V0c1t0a3QudHlwZV0uY2hpbGRyZW4ucHVzaChjaGlsZFRpY2tldCk7XHJcbiAgLy8gICAgICAgfSBlbHNlIGlmICghdGlja2V0c1t0a3QudHlwZV0pIHtcclxuICAvLyAgICAgICAgIHRoaXMudXBkYXRlQ2FuQ29tYmluZSh0a3QpO1xyXG4gIC8vICAgICAgICAgdGlja2V0c1t0a3QudHlwZV0gPSB7XHJcbiAgLy8gICAgICAgICAgIGhlYWRlcjogdGt0LFxyXG4gIC8vICAgICAgICAgICBjaGlsZHJlbjogW10sXHJcbiAgLy8gICAgICAgICAgIG9wZW46IGZhbHNlLFxyXG4gIC8vICAgICAgICAgICBkaXJlY3Rpb246IFJhaWxEaXJlY3Rpb24uSW5ib3VuZCxcclxuICAvLyAgICAgICAgICAgcmVzdWx0SW5kaWZpZXJzOiBbaWRlbnRpZmllcl0sXHJcbiAgLy8gICAgICAgICAgIHJlc3VsdEluZGlmaWVyc1ByaWNlczogaWRlbnRpZmllck9iaixcclxuICAvLyAgICAgICAgICAgY2hpbGQ6IGZhbHNlLFxyXG4gIC8vICAgICAgICAgICB0aWNrZXRJZCxcclxuICAvLyAgICAgICAgICAgc2VsZWN0ZWRJbmRpY2llczogW10sXHJcbiAgLy8gICAgICAgICAgIGRpc2FibGVkSW5kaWNpZXM6IFtdXHJcbiAgLy8gICAgICAgICB9IGFzIGFueTtcclxuICAvLyAgICAgICB9IGVsc2UgaWYgKCF0a3QucHJpY2UgfHwgdGt0LnByaWNlID09PSB0aWNrZXRzW3RrdC50eXBlXS5oZWFkZXIucHJpY2UpIHtcclxuICAvLyAgICAgICAgIHRoaXMudXBkYXRlQ2FuQ29tYmluZSh0a3QpO1xyXG4gIC8vICAgICAgICAgdGlja2V0c1t0a3QudHlwZV0ucmVzdWx0SW5kaWZpZXJzLnB1c2goaWRlbnRpZmllcik7XHJcbiAgLy8gICAgICAgICBpZGVudGlmaWVyT2JqW2lkZW50aWZpZXJdLmlzQ2hpbGQgPSBmYWxzZTtcclxuICAvLyAgICAgICAgIHRpY2tldHNbdGt0LnR5cGVdLnJlc3VsdEluZGlmaWVyc1ByaWNlcyA9IHtcclxuICAvLyAgICAgICAgICAgLi4udGlja2V0c1t0a3QudHlwZV0ucmVzdWx0SW5kaWZpZXJzUHJpY2VzLFxyXG4gIC8vICAgICAgICAgICAuLi5pZGVudGlmaWVyT2JqXHJcbiAgLy8gICAgICAgICB9O1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfSk7XHJcbiAgLy8gICB9KTtcclxuXHJcbiAgLy8gICBsZXQgY29tYmluZVRpY2tldHMgPSB7IC4uLnRpY2tldHMgfTtcclxuICAvLyAgIHRpY2tldHMgPSB0aGlzLmNvbWJpbmVDaGlsZFRpY2tldHMoY29tYmluZVRpY2tldHMpO1xyXG5cclxuICAvLyAgIC8vIGNvbnNvbGUubG9nKCdncm91cHM6ICcsIHRpY2tldHMpO1xyXG4gIC8vICAgLy8gY29uc29sZS5sb2coJ0NhbiBDb21iaW5lOiAnLCB0aGlzLl9jYW5Db21iaW5lKTtcclxuICAvLyAgIHJldHVybiB0aWNrZXRzO1xyXG4gIC8vIH1cclxuXHJcbiAgY29tYmluZUNoaWxkVGlja2V0cyh0aWNrZXRzOiBSYWlsVGlja2V0R3JvdXBzKTogUmFpbFRpY2tldEdyb3VwcyB7XHJcbiAgICBjb25zdCB2YWx1ZXMgPSBPYmplY3QudmFsdWVzKHRpY2tldHMpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgY2hpbGRPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogUmFpbFRpY2tldEdyb3VwIH0gPSB7fTtcclxuXHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdmFsdWVzW2ldLmNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGQgPSB2YWx1ZXNbaV0uY2hpbGRyZW5bal07XHJcbiAgICAgICAgY29uc3QgZmFyZUlkZW50aWZpZXIgPSBjaGlsZC5oZWFkZXIuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXI7XHJcbiAgICAgICAgaWYgKGNoaWxkT2JqZWN0W2ZhcmVJZGVudGlmaWVyXSkge1xyXG4gICAgICAgICAgY2hpbGRPYmplY3RbZmFyZUlkZW50aWZpZXJdLnJlc3VsdEluZGlmaWVycy5wdXNoKFxyXG4gICAgICAgICAgICBjaGlsZC5yZXN1bHRJbmRpZmllcnNbMF1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjaGlsZE9iamVjdFtmYXJlSWRlbnRpZmllcl0ucmVzdWx0SW5kaWZpZXJzUHJpY2VzID0ge1xyXG4gICAgICAgICAgICAuLi5jaGlsZE9iamVjdFtmYXJlSWRlbnRpZmllcl0ucmVzdWx0SW5kaWZpZXJzUHJpY2VzLFxyXG4gICAgICAgICAgICAuLi5jaGlsZC5yZXN1bHRJbmRpZmllcnNQcmljZXNcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNoaWxkT2JqZWN0W2ZhcmVJZGVudGlmaWVyXSA9IGNoaWxkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBjb25zb2xlLmxvZyhjaGlsZE9iamVjdCk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKHZhbHVlc1tpXVsnaGVhZGVyJ11bJ3R5cGUnXSk7XHJcbiAgICAgIHRpY2tldHNbdmFsdWVzW2ldLmhlYWRlci50eXBlXS5jaGlsZHJlbiA9IE9iamVjdC52YWx1ZXMoY2hpbGRPYmplY3QpO1xyXG4gICAgfVxyXG4gICAgLy8gdGlja2V0cyA9IHRoaXMuc29ydFRpY2tldENoaWxkcmVuUHJpY2VzKHRpY2tldHMpO1xyXG4gICAgcmV0dXJuIHRpY2tldHM7XHJcbiAgfVxyXG4gIHNldFRpY2tldHNHcm91cHMocmVzdWx0czogSXJsSm91cm5leU9wdGlvbltdKTogYW55IHtcclxuICAgIGxldCB0aWNrZXRHcm91cHM6IGFueSA9IHt9O1xyXG4gICAgcmVzdWx0cy5mb3JFYWNoKChvdXQ6IElybEpvdXJuZXlPcHRpb24pID0+IHtcclxuICAgICAgb3V0LnByb3ZpZGVycy5mb3JFYWNoKChwcm92OiBJcmxQcm92aWRlcikgPT4ge1xyXG4gICAgICAgIHByb3YudGlja2V0T3B0aW9ucy5mb3JFYWNoKCh0a3Q6IElybFRpY2tldE9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgdGlja2V0R3JvdXBzW3RrdC50eXBlXVxyXG4gICAgICAgICAgICA/IHRpY2tldEdyb3Vwc1t0a3QudHlwZV0ucHVzaCh0a3QpXHJcbiAgICAgICAgICAgIDogKHRpY2tldEdyb3Vwc1t0a3QudHlwZV0gPSBbdGt0XSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGlja2V0R3JvdXBzO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRnJvbVByZXZpb3VzU2VhcmNoZXMoXHJcbiAgICBwcmV2aW91c0l0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+XHJcbiAgKTogdm9pZCB7fVxyXG5cclxuICB1cGRhdGVDYW5Db21iaW5lKHRrdDogSXJsVGlja2V0T3B0aW9uKTogdm9pZCB7XHJcbiAgICAodGt0LmlkZW50aWZpZXJzLmFsbG93ZWRXaXRoIHx8IFtdKS5mb3JFYWNoKChhbGxvd2VkKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5fY2FuQ29tYmluZVt0a3QudHlwZV1bYWxsb3dlZC5qb3VybmV5SWRlbnRpZmllcl0pIHtcclxuICAgICAgICB0aGlzLl9jYW5Db21iaW5lW3RrdC50eXBlXVthbGxvd2VkLmpvdXJuZXlJZGVudGlmaWVyXSA9IFtcclxuICAgICAgICAgIGFsbG93ZWQuZmFyZUlkZW50aWZpZXJcclxuICAgICAgICBdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2NhbkNvbWJpbmVbdGt0LnR5cGVdW2FsbG93ZWQuam91cm5leUlkZW50aWZpZXJdLnB1c2goXHJcbiAgICAgICAgICBhbGxvd2VkLmZhcmVJZGVudGlmaWVyXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyB0b2dnbGVUaWNrZXRTZWxlY3QoXHJcbiAgLy8gICB0aWNrZXQ6IElybFRpY2tldEdyb3VwLFxyXG4gIC8vICAgd2F5OiAnZGVwYXJ0cycgfCAncmV0dXJucycsXHJcbiAgLy8gICB0aW1lU2xvdElkOiBzdHJpbmcsXHJcbiAgLy8gICB0aWNrZXRJZDogc3RyaW5nLFxyXG4gIC8vICAgZmFyZUlkZW50aWZpZXI6IHN0cmluZyxcclxuICAvLyAgIHRpY2tldHNHcm91cHM6IElybFRpY2tldEdyb3Vwc1xyXG4gIC8vICk6IElybFRpY2tldEdyb3VwcyB7XHJcbiAgLy8gICBpZiAoIXRpY2tldCkge1xyXG4gIC8vICAgICByZXR1cm47XHJcbiAgLy8gICB9XHJcbiAgLy8gICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGlja2V0c0dyb3Vwcyk7XHJcbiAgLy8gICBsZXQgc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG4gIC8vICAgbGV0IGRlcGFydHNUaWNrZXQ6IElybFRpY2tldE9wdGlvbltdID0gW107XHJcbiAgLy8gICBsZXQgcmV0dXJuVGlja2V0OiBJcmxUaWNrZXRPcHRpb25bXSA9IFtdO1xyXG4gIC8vICAgbGV0IGlzVW5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gIC8vICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcclxuICAvLyAgICAgbGV0IGdyb3VwID0gdGlja2V0c0dyb3Vwc1trZXldIGFzIFJhaWxUaWNrZXRHcm91cDtcclxuXHJcbiAgLy8gICAgIGlmIChcclxuICAvLyAgICAgICBncm91cC50aWNrZXRJZCA9PT0gdGlja2V0SWQgJiZcclxuICAvLyAgICAgICBncm91cC5zZWxlY3RlZEluZGljaWVzLmluY2x1ZGVzKHRpbWVTbG90SWQpXHJcbiAgLy8gICAgICkge1xyXG4gIC8vICAgICAgIGlmICh3YXkgPT09ICdkZXBhcnRzJykge1xyXG4gIC8vICAgICAgICAgZ3JvdXAuc2VsZWN0ZWRJbmRpY2llcyA9IFtdO1xyXG4gIC8vICAgICAgICAgZGVwYXJ0c1RpY2tldCA9IFtdO1xyXG4gIC8vICAgICAgICAgcmV0dXJuVGlja2V0ID0gW107XHJcbiAgLy8gICAgICAgICB0aGlzLl9jaG9zZW5JbmJvdW5kVGlja2V0ID0gbnVsbDtcclxuICAvLyAgICAgICAgIHRoaXMuX2Nob3NlbkluYm91bmRKb3VybmV5ID0gbnVsbDtcclxuICAvLyAgICAgICAgIGdyb3VwLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XHJcbiAgLy8gICAgICAgICAgIGNoaWxkLnNlbGVjdGVkSW5kaWNpZXMgPSBbXTtcclxuICAvLyAgICAgICAgIH0pO1xyXG4gIC8vICAgICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgICBncm91cC5zZWxlY3RlZEluZGljaWVzID0gZ3JvdXAuc2VsZWN0ZWRJbmRpY2llcy5maWx0ZXIoXHJcbiAgLy8gICAgICAgICAgIChJbmRpY2llcykgPT4gSW5kaWNpZXMgIT09IHRpbWVTbG90SWRcclxuICAvLyAgICAgICAgICk7XHJcbiAgLy8gICAgICAgICByZXR1cm5UaWNrZXQgPSByZXR1cm5UaWNrZXQuZmlsdGVyKFxyXG4gIC8vICAgICAgICAgICAoSW5kaWNpZXMpID0+IEluZGljaWVzICE9PSBncm91cC5oZWFkZXJcclxuICAvLyAgICAgICAgICk7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgIGlmIChcclxuICAvLyAgICAgICAgIGdyb3VwLnRpY2tldElkID09PSB0aWNrZXRJZCAmJlxyXG4gIC8vICAgICAgICAgZ3JvdXAuaGVhZGVyLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyID09PSBmYXJlSWRlbnRpZmllciAmJlxyXG4gIC8vICAgICAgICAgd2F5ID09PSAnZGVwYXJ0cydcclxuICAvLyAgICAgICApIHtcclxuICAvLyAgICAgICAgIGdyb3VwID0gdGhpcy5jbGVhclVubmVlZGVkVGlja2V0cyh3YXksIGdyb3VwLCB0aW1lU2xvdElkKTtcclxuICAvLyAgICAgICAgIGdyb3VwLnNlbGVjdGVkSW5kaWNpZXMucHVzaCh0aW1lU2xvdElkKTtcclxuICAvLyAgICAgICAgIHdheSA9PT0gJ2RlcGFydHMnXHJcbiAgLy8gICAgICAgICAgID8gZGVwYXJ0c1RpY2tldC5wdXNoKGdyb3VwLmhlYWRlcilcclxuICAvLyAgICAgICAgICAgOiByZXR1cm5UaWNrZXQucHVzaChncm91cC5oZWFkZXIpO1xyXG4gIC8vICAgICAgICAgc2VsZWN0ZWRUaWNrZXQgPSBncm91cC5oZWFkZXI7XHJcbiAgLy8gICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgIC8vIG1heSBoYXZlIHRvIG1vZGlmeSB0aGlzIGZvciBkdWFsIHNpbmdsZXNcclxuICAvLyAgICAgICAgIGlmICh3YXkgPT09ICdkZXBhcnRzJykge1xyXG4gIC8vICAgICAgICAgICBncm91cC5zZWxlY3RlZEluZGljaWVzID0gW107XHJcbiAgLy8gICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICBzZWxlY3RlZFRpY2tldCA9IGdyb3VwLmhlYWRlcjtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9XHJcblxyXG4gIC8vICAgICAgIGdyb3VwLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XHJcbiAgLy8gICAgICAgICBpZiAoY2hpbGQuc2VsZWN0ZWRJbmRpY2llcy5pbmNsdWRlcyh0aW1lU2xvdElkKSkge1xyXG4gIC8vICAgICAgICAgICBpZiAod2F5ID09PSAnZGVwYXJ0cycpIHtcclxuICAvLyAgICAgICAgICAgICBjaGlsZC5zZWxlY3RlZEluZGljaWVzID0gW107XHJcbiAgLy8gICAgICAgICAgICAgZGVwYXJ0c1RpY2tldCA9IFtdO1xyXG4gIC8vICAgICAgICAgICAgIHJldHVyblRpY2tldCA9IFtdO1xyXG4gIC8vICAgICAgICAgICAgIHRoaXMuX2Nob3NlbkluYm91bmRUaWNrZXQgPSBudWxsO1xyXG4gIC8vICAgICAgICAgICAgIHRoaXMuX2Nob3NlbkluYm91bmRKb3VybmV5ID0gbnVsbDtcclxuICAvLyAgICAgICAgICAgICBpc1Vuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gIC8vICAgICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICAgIGNoaWxkLnNlbGVjdGVkSW5kaWNpZXMgPSBjaGlsZC5zZWxlY3RlZEluZGljaWVzLmZpbHRlcihcclxuICAvLyAgICAgICAgICAgICAgIChJbmRpY2llcykgPT4gSW5kaWNpZXMgIT09IHRpbWVTbG90SWRcclxuICAvLyAgICAgICAgICAgICApO1xyXG4gIC8vICAgICAgICAgICAgIHJldHVyblRpY2tldCA9IHJldHVyblRpY2tldC5maWx0ZXIoXHJcbiAgLy8gICAgICAgICAgICAgICAoSW5kaWNpZXMpID0+IEluZGljaWVzICE9PSBncm91cC5oZWFkZXJcclxuICAvLyAgICAgICAgICAgICApO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICBpZiAoXHJcbiAgLy8gICAgICAgICAgICAgY2hpbGQudGlja2V0SWQgPT09IHRpY2tldElkICYmXHJcbiAgLy8gICAgICAgICAgICAgY2hpbGQuaGVhZGVyLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyID09PSBmYXJlSWRlbnRpZmllclxyXG4gIC8vICAgICAgICAgICApIHtcclxuICAvLyAgICAgICAgICAgICBpZiAoXHJcbiAgLy8gICAgICAgICAgICAgICAod2F5ID09PSAnZGVwYXJ0cycgJiZcclxuICAvLyAgICAgICAgICAgICAgICAgY2hpbGQuZGlyZWN0aW9uICE9PSBSYWlsRGlyZWN0aW9uLkluYm91bmQpIHx8XHJcbiAgLy8gICAgICAgICAgICAgICAod2F5ICE9PSAnZGVwYXJ0cycgJiYgY2hpbGQuZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLkluYm91bmQpXHJcbiAgLy8gICAgICAgICAgICAgKSB7XHJcbiAgLy8gICAgICAgICAgICAgICBjaGlsZCA9IHRoaXMuY2xlYXJVbm5lZWRlZFRpY2tldHMod2F5LCBjaGlsZCwgdGltZVNsb3RJZCk7XHJcbiAgLy8gICAgICAgICAgICAgICBjaGlsZC5zZWxlY3RlZEluZGljaWVzLnB1c2godGltZVNsb3RJZCk7XHJcbiAgLy8gICAgICAgICAgICAgICB3YXkgPT09ICdkZXBhcnRzJ1xyXG4gIC8vICAgICAgICAgICAgICAgICA/IGRlcGFydHNUaWNrZXQucHVzaChjaGlsZC5oZWFkZXIpXHJcbiAgLy8gICAgICAgICAgICAgICAgIDogcmV0dXJuVGlja2V0LnB1c2goY2hpbGQuaGVhZGVyKTtcclxuICAvLyAgICAgICAgICAgICAgIHNlbGVjdGVkVGlja2V0ID0gY2hpbGQuaGVhZGVyO1xyXG4gIC8vICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNVbnNlbGVjdGVkKSB7XHJcbiAgLy8gICAgICAgICAgICAgICBjaGlsZC5zZWxlY3RlZEluZGljaWVzID0gW107XHJcbiAgLy8gICAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICAgIGNoaWxkLnNlbGVjdGVkSW5kaWNpZXMgPSBbXTtcclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH0pO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KTtcclxuXHJcbiAgLy8gICAvLyBub3cgd2UgbmVlZCB0byBtYXJrIHRpY2tldHMgYXMgZGlzYWJsZWQgaWYgdGhleSBhcmUgcmV0dXJucyB0aGF0IGRvIG5vdCBtYXRjaCB0aGUgc2VsZWN0ZWQgcmV0dXJuXHJcbiAgLy8gICAvLyBvciBvbiBvdmVybGFwcGluZyB0aW1lc1xyXG4gIC8vICAgaWYgKHdheSA9PT0gJ2RlcGFydHMnKSB7XHJcbiAgLy8gICAgIHRoaXMuX2Nob3Nlbk91dGJvdW5kVGlja2V0ID0gdGhpcy5oZWxwZXJzLmNsb25lKHNlbGVjdGVkVGlja2V0KTtcclxuXHJcbiAgLy8gICAgIC8vIG5vdyBnbyBvdmVyIHRoZSBmdWxsIHJlc3VsdHMgYW5kIGZpbmQgdGhlIG1hdGNoaW5nIHRpbWVzbG90XHJcbiAgLy8gICAgIGRlcGFydHNUaWNrZXQubGVuZ3RoXHJcbiAgLy8gICAgICAgPyAodGhpcy5fY2hvc2VuT3V0Ym91bmRKb3VybmV5ID0gdGhpcy5yZXN1bHRzLnZhbHVlWzBdLm91dGJvdW5kLmZpbmQoXHJcbiAgLy8gICAgICAgICAgIChvdXQ6IFJhaWxKb3VybmV5T3B0aW9uKSA9PiB7XHJcbiAgLy8gICAgICAgICAgICAgcmV0dXJuIG91dC5pZGVudGlmaWVycy5qb3VybmV5SWRlbnRpZmllciA9PT0gdGltZVNsb3RJZDtcclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgKSlcclxuICAvLyAgICAgICA6ICh0aGlzLl9jaG9zZW5PdXRib3VuZEpvdXJuZXkgPSBudWxsKTtcclxuXHJcbiAgLy8gICAgIGlmIChcclxuICAvLyAgICAgICB0aGlzLl9jaG9zZW5JbmJvdW5kVGlja2V0ICYmXHJcbiAgLy8gICAgICAgdGhpcy5fY2hvc2VuT3V0Ym91bmRUaWNrZXQuc2luZ2xlT3JSZXR1cm4gPT09ICdSZXR1cm4nICYmXHJcbiAgLy8gICAgICAgdGhpcy5fY2hvc2VuT3V0Ym91bmRUaWNrZXQuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXIgIT09XHJcbiAgLy8gICAgICAgICB0aGlzLl9jaG9zZW5JbmJvdW5kVGlja2V0LmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXHJcbiAgLy8gICAgICkge1xyXG4gIC8vICAgICAgIGNvbnNvbGUud2FybignKysrIENhbm5vdCBjb21iaW5lIGZhcmVzLCBjbGVhcmluZyBpbmJvdW5kLi4uICsrKycpO1xyXG4gIC8vICAgICAgIHRoaXMuX2Nob3NlbkluYm91bmRUaWNrZXQgPSBudWxsO1xyXG4gIC8vICAgICAgIHRoaXMuX2Nob3NlbkluYm91bmRKb3VybmV5ID0gbnVsbDtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSBlbHNlIGlmICh3YXkgPT09ICdyZXR1cm5zJykge1xyXG4gIC8vICAgICB0aGlzLl9jaG9zZW5JbmJvdW5kVGlja2V0ID0gdGhpcy5oZWxwZXJzLmNsb25lKHNlbGVjdGVkVGlja2V0KTtcclxuXHJcbiAgLy8gICAgIHRoaXMuX2Nob3NlbkluYm91bmRUaWNrZXRcclxuICAvLyAgICAgICA/ICh0aGlzLl9jaG9zZW5JbmJvdW5kSm91cm5leSA9IHRoaXMucmVzdWx0cy52YWx1ZVswXS5yZXR1cm4uZmluZChcclxuICAvLyAgICAgICAgICAgKGluVDogUmFpbEpvdXJuZXlPcHRpb24pID0+IHtcclxuICAvLyAgICAgICAgICAgICByZXR1cm4gaW5ULmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyID09PSB0aW1lU2xvdElkO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICApKVxyXG4gIC8vICAgICAgIDogKHRoaXMuX2Nob3NlbkluYm91bmRKb3VybmV5ID0gbnVsbCk7XHJcbiAgLy8gICB9XHJcblxyXG4gIC8vICAgY29uc29sZS5sb2codGhpcy5jaG9zZW5PdXRib3VuZEpvdXJuZXkpO1xyXG4gIC8vICAgY29uc29sZS5sb2codGhpcy5fY2hvc2VuSW5ib3VuZEpvdXJuZXkpO1xyXG4gIC8vICAgcmV0dXJuIHRpY2tldHNHcm91cHM7XHJcbiAgLy8gfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBkZXRlcm1pbmUgaWYgYSBmYXJlIGNhbiBiZSBjb21iaW5lZCB3aXRoIHdoYXQgd2UgY3VycmVudGx5IGhhdmUgc2VsZWN0ZWRcclxuICAgKi9cclxuICAvLyBjYW5Db21iaW5lKGpvdXJuZXlJZGVudGlmaWVyOiBzdHJpbmcsIGZhcmVJZGVudGlmaWVyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAvLyAgIC8vIG1heSBoYXZlIHRvIG1vZGlmeSB0aGlzIGZvciBkdWFsIHNpbmdsZXMgbGF0ZXIgb25cclxuICAvLyAgIGlmIChcclxuICAvLyAgICAgdGhpcy5fY2hvc2VuT3V0Ym91bmRUaWNrZXQgJiZcclxuICAvLyAgICAgdGhpcy5fY2hvc2VuT3V0Ym91bmRUaWNrZXQuc2luZ2xlT3JSZXR1cm4gPT09ICdSZXR1cm4nICYmXHJcbiAgLy8gICAgIE51bWJlcihqb3VybmV5SWRlbnRpZmllcikgPiA1XHJcbiAgLy8gICApIHtcclxuICAvLyAgICAgLy8gZ3JlYXRlciB0aGFuIDUgb25seSBhcyB3ZSBhcmUgbm90IGdvaW5nIHRvIHJlc3RyaWN0IG91dGJvdW5kc1xyXG4gIC8vICAgICBpZiAoXHJcbiAgLy8gICAgICAgdGhpcy5fY2FuQ29tYmluZVt0aGlzLl9jaG9zZW5PdXRib3VuZFRpY2tldC50eXBlXVtcclxuICAvLyAgICAgICAgIE51bWJlcihqb3VybmV5SWRlbnRpZmllcilcclxuICAvLyAgICAgICBdPy5pbmNsdWRlcyhmYXJlSWRlbnRpZmllcikgJiZcclxuICAvLyAgICAgICB0aGlzLl9jaG9zZW5PdXRib3VuZFRpY2tldC5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllciA9PT0gZmFyZUlkZW50aWZpZXJcclxuICAvLyAgICAgKSB7XHJcbiAgLy8gICAgICAgcmV0dXJuIHRydWU7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgICAgcmV0dXJuIGZhbHNlO1xyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIHJldHVybiBmYWxzZTtcclxuICAvLyB9XHJcblxyXG4gIGNsZWFyVW5uZWVkZWRUaWNrZXRzKFxyXG4gICAgd2F5OiBzdHJpbmcsXHJcbiAgICBncm91cDogUmFpbFRpY2tldEdyb3VwLFxyXG4gICAgdGltZVNsb3RJZDogc3RyaW5nXHJcbiAgKTogUmFpbFRpY2tldEdyb3VwIHtcclxuICAgIGlmICh3YXkgPT09ICdyZXR1cm5zJykge1xyXG4gICAgICBncm91cC5zZWxlY3RlZEluZGljaWVzID0gZ3JvdXAuc2VsZWN0ZWRJbmRpY2llcy5maWx0ZXIoXHJcbiAgICAgICAgKGluZGljaWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIE51bWJlcihpbmRpY2llKSA8PSA1IHx8IGluZGljaWUgPT09IHRpbWVTbG90SWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZ3JvdXAuc2VsZWN0ZWRJbmRpY2llcyA9IGdyb3VwLnNlbGVjdGVkSW5kaWNpZXMuZmlsdGVyKFxyXG4gICAgICAgIChpbmRpY2llOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHJldHVybiBOdW1iZXIoaW5kaWNpZSkgPiA1IHx8IGluZGljaWUgPT09IHRpbWVTbG90SWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBncm91cDtcclxuICB9XHJcblxyXG4gIC8vIGdldFJhaWxTdGF0aW9uKFxyXG4gIC8vICAgY29kZTogc3RyaW5nLFxyXG4gIC8vICAgaXNMb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICAvLyApOiBPYnNlcnZhYmxlPElybFN0YXRpb24+IHtcclxuICAvLyAgIGlmIChjb2RlLmxlbmd0aCA9PT0gMykge1xyXG4gIC8vICAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgLy8gICAgIHJldHVybiB0aGlzLmdldFJhaWxTdGF0aW9uRmV0Y2hlci5mZXRjaExpc3QoeyBjb2RlIH0pLnBpcGUoXHJcbiAgLy8gICAgICAgdGFwKCgpID0+IGlzTG9hZGluZz8ubmV4dChmYWxzZSkpLFxyXG4gIC8vICAgICAgIHRha2UoMSlcclxuICAvLyAgICAgKTtcclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHJldHVybiBvZigpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0U2VsZWN0ZWRpcmxUaWNrZXRPcHRpb24oXHJcbiAgLy8gICBpcmxKb3VybmV5T3B0aW9uOiBJcmxKb3VybmV5T3B0aW9uLFxyXG4gIC8vICAgaXJsVGlja2V0R3JvdXA6IElybFRpY2tldEdyb3VwLFxyXG4gIC8vICAgcHJvdmlkZXJJbmRleDogbnVtYmVyXHJcbiAgLy8gKTogSXJsVGlja2V0T3B0aW9uIHtcclxuICAvLyAgIHJldHVybiBpcmxKb3VybmV5T3B0aW9uLnByb3ZpZGVyc1twcm92aWRlckluZGV4XS50aWNrZXRPcHRpb25zLmZpbmQoXHJcbiAgLy8gICAgICh0aWNrZXRPcHRpb24pID0+XHJcbiAgLy8gICAgICAgdGlja2V0T3B0aW9uLnR5cGUgPT09IGlybFRpY2tldEdyb3VwLmhlYWRlci50eXBlICYmXHJcbiAgLy8gICAgICAgdGlja2V0T3B0aW9uLnByaWNlID09PSBpcmxUaWNrZXRHcm91cC5oZWFkZXIucHJpY2VcclxuICAvLyAgICk7XHJcbiAgLy8gfVxyXG5cclxuICBnZXRMZWdzRnJvbVJhaWxKb3VybmV5T3B0aW9uKHJhaWxKb3VybmV5T3B0aW9uOiBJcmxKb3VybmV5T3B0aW9uKTogYW55W10ge1xyXG4gICAgbGV0IGxlZ3M6IGFueVtdID0gW107XHJcbiAgICBpZiAocmFpbEpvdXJuZXlPcHRpb24/LnNlZ21lbnRzLmxlbmd0aCkge1xyXG4gICAgICBsZWdzID0gcmFpbEpvdXJuZXlPcHRpb24uc2VnbWVudHMubWFwKChzZWdtZW50KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG9wZXJhdG9yOiBzZWdtZW50Lm9wZXJhdG9yLFxyXG4gICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IHNlZ21lbnQuZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogc2VnbWVudC5kZXBhcnQsXHJcbiAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IHNlZ21lbnQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IHNlZ21lbnQuYXJyaXZlXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGVncztcclxuICB9XHJcblxyXG4gIC8vIGFzeW5jIGFkZFNpbmdsZUpvdXJuZXlUb0Jhc2tldChcclxuICAvLyAgIHNlcnZpY2VJZDogc3RyaW5nLFxyXG4gIC8vICAgcmFpbFF1ZXJ5OiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMsXHJcbiAgLy8gICByYWlsSm91cm5leU9wdGlvbjogUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgLy8gICByYWlsVGlja2V0R3JvdXA6IFJhaWxUaWNrZXRHcm91cFxyXG4gIC8vICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gIC8vICAgaWYgKHJhaWxKb3VybmV5T3B0aW9uLnVuc2VsbGFibGUpIHtcclxuICAvLyAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAvLyAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAvLyAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAvLyAgIGlmIChiYXNrZXQpIHtcclxuICAvLyAgICAgY29uc3Qgc2VsZWN0ZWRSYWlsVGlja2V0T3B0aW9uID0gdGhpcy5nZXRTZWxlY3RlZFJhaWxUaWNrZXRPcHRpb24oXHJcbiAgLy8gICAgICAgcmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgLy8gICAgICAgcmFpbFRpY2tldEdyb3VwLFxyXG4gIC8vICAgICAgIDBcclxuICAvLyAgICAgKTtcclxuICAvLyAgICAgY29uc3QgbGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihyYWlsSm91cm5leU9wdGlvbik7XHJcbiAgLy8gICAgIGNvbnN0IHRpY2tldFF1ZXVlTGlzdCA9IHNlbGVjdGVkUmFpbFRpY2tldE9wdGlvbi50aWNrZXRRdWV1ZUxpc3QubWFwKFxyXG4gIC8vICAgICAgICh0aWNrZXRRdWV1ZUxpc3QpID0+IHtcclxuICAvLyAgICAgICAgIHJldHVybiB7XHJcbiAgLy8gICAgICAgICAgIGlkOiB0aWNrZXRRdWV1ZUxpc3QuaWQsXHJcbiAgLy8gICAgICAgICAgIG5hbWU6IHRpY2tldFF1ZXVlTGlzdC5uYW1lLFxyXG4gIC8vICAgICAgICAgICB0eXBlOiB0aWNrZXRRdWV1ZUxpc3QudHlwZVxyXG4gIC8vICAgICAgICAgfTtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgICk7XHJcblxyXG4gIC8vICAgICByZXR1cm4gdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxyXG4gIC8vICAgICAgIHtcclxuICAvLyAgICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxyXG4gIC8vICAgICAgICAgc2VydmljZTogc2VydmljZUlkLFxyXG4gIC8vICAgICAgICAgZGV0YWlsOiB7XHJcbiAgLy8gICAgICAgICAgIG91dHdhcmREZXRhaWw6IHtcclxuICAvLyAgICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IHJhaWxKb3VybmV5T3B0aW9uLmFycml2ZURhdGVUaW1lLFxyXG4gIC8vICAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogcmFpbEpvdXJuZXlPcHRpb24udG8sXHJcbiAgLy8gICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IHJhaWxKb3VybmV5T3B0aW9uLmRlcGFydERhdGVUaW1lLFxyXG4gIC8vICAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiByYWlsSm91cm5leU9wdGlvbi5mcm9tLFxyXG4gIC8vICAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gIC8vICAgICAgICAgICAgICAge1xyXG4gIC8vICAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IHJhaWxKb3VybmV5T3B0aW9uLnByb3ZpZGVyc1swXS5uYW1lLFxyXG4gIC8vICAgICAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogc2VsZWN0ZWRSYWlsVGlja2V0T3B0aW9uLnR5cGUsXHJcbiAgLy8gICAgICAgICAgICAgICAgIHByaWNlOiBzZWxlY3RlZFJhaWxUaWNrZXRPcHRpb24ucHJpY2UsXHJcbiAgLy8gICAgICAgICAgICAgICAgIGxlZ3NcclxuICAvLyAgICAgICAgICAgICAgIH1cclxuICAvLyAgICAgICAgICAgICBdXHJcbiAgLy8gICAgICAgICAgIH0sXHJcbiAgLy8gICAgICAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjpcclxuICAvLyAgICAgICAgICAgICByYWlsSm91cm5leU9wdGlvbi5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgLy8gICAgICAgICAgIG91dGJvdW5kOiB7XHJcbiAgLy8gICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbXHJcbiAgLy8gICAgICAgICAgICAgICBzZWxlY3RlZFJhaWxUaWNrZXRPcHRpb24uaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJcclxuICAvLyAgICAgICAgICAgICBdLFxyXG4gIC8vICAgICAgICAgICAgIGpvdXJuZXlJZGVudGlmaWVyOlxyXG4gIC8vICAgICAgICAgICAgICAgc2VsZWN0ZWRSYWlsVGlja2V0T3B0aW9uLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyXHJcbiAgLy8gICAgICAgICAgIH0sXHJcbiAgLy8gICAgICAgICAgIHRpY2tldFF1ZXVlTGlzdFxyXG4gIC8vICAgICAgICAgfSxcclxuICAvLyAgICAgICAgIGFkdWx0czogcmFpbFF1ZXJ5LmFkdWx0cyxcclxuICAvLyAgICAgICAgIHByaWNlOiBzZWxlY3RlZFJhaWxUaWNrZXRPcHRpb24ucHJpY2UsXHJcbiAgLy8gICAgICAgICBjdXJyZW5jeTogc2VsZWN0ZWRSYWlsVGlja2V0T3B0aW9uLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAvLyAgICAgICAgIHNlYXJjaFF1ZXJ5OiByYWlsUXVlcnksXHJcbiAgLy8gICAgICAgICBjbzJQZXJJdGVtOiByYWlsSm91cm5leU9wdGlvbi5jbzJQZXJJdGVtLFxyXG4gIC8vICAgICAgICAgY28yUGVyUGFzc2VuZ2VyOiByYWlsSm91cm5leU9wdGlvbi5jbzJQZXJQYXNzZW5nZXJcclxuICAvLyAgICAgICB9LFxyXG4gIC8vICAgICAgIGludEJhc2tldCxcclxuICAvLyAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgLy8gICAgICAgdGhpcy50cmF2ZWxsZXJzXHJcbiAgLy8gICAgICk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAvLyB9XHJcblxyXG4gIC8vIGFzeW5jIGFkZFJldHVybkpvdXJuZXlUb0Jhc2tldChcclxuICAvLyAgIHNlcnZpY2VJZDogc3RyaW5nLFxyXG4gIC8vICAgcmFpbFF1ZXJ5OiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMsXHJcbiAgLy8gICBvdXRib3VuZDogUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgLy8gICBpbmJvdW5kOiBSYWlsSm91cm5leU9wdGlvbixcclxuICAvLyAgIHJhaWxUaWNrZXRHcm91cDogUmFpbFRpY2tldEdyb3VwXHJcbiAgLy8gKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgLy8gICBpZiAob3V0Ym91bmQudW5zZWxsYWJsZSkge1xyXG4gIC8vICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAvLyAgIH1cclxuICAvLyAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gIC8vICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gIC8vICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gIC8vICAgaWYgKGJhc2tldCkge1xyXG4gIC8vICAgICBjb25zdCBzZWxlY3RlZFJhaWxUaWNrZXRPcHRpb24gPSB0aGlzLmdldFNlbGVjdGVkUmFpbFRpY2tldE9wdGlvbihcclxuICAvLyAgICAgICBvdXRib3VuZCxcclxuICAvLyAgICAgICByYWlsVGlja2V0R3JvdXAsXHJcbiAgLy8gICAgICAgMFxyXG4gIC8vICAgICApO1xyXG4gIC8vICAgICBjb25zdCBvdXRib3VuZExlZ3MgPSB0aGlzLmdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb24ob3V0Ym91bmQpO1xyXG4gIC8vICAgICBjb25zdCBpbmJvdW5kTGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihpbmJvdW5kKTtcclxuICAvLyAgICAgY29uc3QgdGlja2V0UXVldWVMaXN0ID0gc2VsZWN0ZWRSYWlsVGlja2V0T3B0aW9uLnRpY2tldFF1ZXVlTGlzdC5tYXAoXHJcbiAgLy8gICAgICAgKHRpY2tldFF1ZXVlTGlzdDE6IFJhaWxUaWNrZXRRdWV1ZSkgPT4ge1xyXG4gIC8vICAgICAgICAgcmV0dXJuIHtcclxuICAvLyAgICAgICAgICAgaWQ6IHRpY2tldFF1ZXVlTGlzdDEuaWQsXHJcbiAgLy8gICAgICAgICAgIG5hbWU6IHRpY2tldFF1ZXVlTGlzdDEubmFtZSxcclxuICAvLyAgICAgICAgICAgdHlwZTogdGlja2V0UXVldWVMaXN0MS50eXBlXHJcbiAgLy8gICAgICAgICB9O1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgKTtcclxuXHJcbiAgLy8gICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgLy8gICAgICAge1xyXG4gIC8vICAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXHJcbiAgLy8gICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQsXHJcbiAgLy8gICAgICAgICBkZXRhaWw6IHtcclxuICAvLyAgICAgICAgICAgb3V0d2FyZERldGFpbDoge1xyXG4gIC8vICAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogb3V0Ym91bmQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgLy8gICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBvdXRib3VuZC50byxcclxuICAvLyAgICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogb3V0Ym91bmQuZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgLy8gICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IG91dGJvdW5kLmZyb20sXHJcbiAgLy8gICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXHJcbiAgLy8gICAgICAgICAgICAgICB7XHJcbiAgLy8gICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogb3V0Ym91bmQucHJvdmlkZXJzWzBdLm5hbWUsXHJcbiAgLy8gICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBzZWxlY3RlZFJhaWxUaWNrZXRPcHRpb24udHlwZSxcclxuICAvLyAgICAgICAgICAgICAgICAgcHJpY2U6IHNlbGVjdGVkUmFpbFRpY2tldE9wdGlvbi5wcmljZSxcclxuICAvLyAgICAgICAgICAgICAgICAgbGVnczogb3V0Ym91bmRMZWdzXHJcbiAgLy8gICAgICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICAgICAgXVxyXG4gIC8vICAgICAgICAgICB9LFxyXG4gIC8vICAgICAgICAgICBpbndhcmREZXRhaWw6IHtcclxuICAvLyAgICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IGluYm91bmQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgLy8gICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBpbmJvdW5kLnRvLFxyXG4gIC8vICAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBpbmJvdW5kLmRlcGFydERhdGVUaW1lLFxyXG4gIC8vICAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBpbmJvdW5kLmZyb20sXHJcbiAgLy8gICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXHJcbiAgLy8gICAgICAgICAgICAgICB7XHJcbiAgLy8gICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogaW5ib3VuZC5wcm92aWRlcnNbMF0ubmFtZSxcclxuICAvLyAgICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IHNlbGVjdGVkUmFpbFRpY2tldE9wdGlvbi50eXBlLFxyXG4gIC8vICAgICAgICAgICAgICAgICBsZWdzOiBpbmJvdW5kTGVnc1xyXG4gIC8vICAgICAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICAgIF1cclxuICAvLyAgICAgICAgICAgfSxcclxuICAvLyAgICAgICAgICAgdHJhbnNhY3Rpb25JZGVudGlmaWVyOiBvdXRib3VuZC5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgLy8gICAgICAgICAgIG91dGJvdW5kOiB7XHJcbiAgLy8gICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbXHJcbiAgLy8gICAgICAgICAgICAgICBzZWxlY3RlZFJhaWxUaWNrZXRPcHRpb24uaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJcclxuICAvLyAgICAgICAgICAgICBdLFxyXG4gIC8vICAgICAgICAgICAgIGpvdXJuZXlJZGVudGlmaWVyOlxyXG4gIC8vICAgICAgICAgICAgICAgc2VsZWN0ZWRSYWlsVGlja2V0T3B0aW9uLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyXHJcbiAgLy8gICAgICAgICAgIH0sXHJcbiAgLy8gICAgICAgICAgIHRpY2tldFF1ZXVlTGlzdFxyXG4gIC8vICAgICAgICAgfSxcclxuICAvLyAgICAgICAgIGFkdWx0czogcmFpbFF1ZXJ5LmFkdWx0cyxcclxuICAvLyAgICAgICAgIHByaWNlOiByYWlsVGlja2V0R3JvdXAuaGVhZGVyLnByaWNlLFxyXG4gIC8vICAgICAgICAgY3VycmVuY3k6IHNlbGVjdGVkUmFpbFRpY2tldE9wdGlvbi5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgLy8gICAgICAgICBzZWFyY2hRdWVyeTogcmFpbFF1ZXJ5LFxyXG4gIC8vICAgICAgICAgY28yUGVySXRlbTogb3V0Ym91bmQuY28yUGVySXRlbSxcclxuICAvLyAgICAgICAgIGNvMlBlclBhc3Nlbmdlcjogb3V0Ym91bmQuY28yUGVyUGFzc2VuZ2VyXHJcbiAgLy8gICAgICAgfSxcclxuICAvLyAgICAgICBpbnRCYXNrZXQsXHJcbiAgLy8gICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gIC8vICAgICAgIHRoaXMudHJhdmVsbGVyc1xyXG4gIC8vICAgICApO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBzb3J0VGlja2V0UHJpY2VzKHRpY2tldHM6IFRpY2tldEdyb3Vwcyk6IFRpY2tldEdyb3VwcyB7XHJcbiAgLy8gICBjb25zdCBzb3J0VGlja2V0UHJpY2VzID0geyAuLi50aWNrZXRzIH07XHJcbiAgLy8gICBPYmplY3Qua2V5cyhzb3J0VGlja2V0UHJpY2VzKS5tYXAoKGtleSkgPT4ge1xyXG4gIC8vICAgICBzb3J0VGlja2V0UHJpY2VzW2tleV0uc29ydCgoYTogSXJsVGlja2V0T3B0aW9uLCBiOiBJcmxUaWNrZXRPcHRpb24pID0+IHtcclxuICAvLyAgICAgICBjb25zdCBwcmljZUEgPSBhLnByaWNlLFxyXG4gIC8vICAgICAgICAgcHJpY2VCID0gYi5wcmljZTtcclxuICAvLyAgICAgICByZXR1cm4gcHJpY2VBIDwgcHJpY2VCID8gLTEgOiBwcmljZUEgPiBwcmljZUIgPyAxIDogMDtcclxuICAvLyAgICAgfSk7XHJcbiAgLy8gICB9KTtcclxuICAvLyAgIHJldHVybiBzb3J0VGlja2V0UHJpY2VzO1xyXG4gIC8vIC8vIH1cclxuICAvLyBzb3J0VGlja2V0Q2hpbGRyZW5QcmljZXModGlja2V0czogUmFpbFRpY2tldEdyb3Vwcyk6IFJhaWxUaWNrZXRHcm91cHMge1xyXG4gIC8vICAgY29uc3Qgc29ydFRpY2tldFByaWNlcyA9IHsgLi4udGlja2V0cyB9O1xyXG4gIC8vICAgT2JqZWN0LmtleXMoc29ydFRpY2tldFByaWNlcykubWFwKChrZXkpID0+IHtcclxuICAvLyAgICAgc29ydFRpY2tldFByaWNlc1trZXldLmNoaWxkcmVuLnNvcnQoXHJcbiAgLy8gICAgICAgKGE6IFJhaWxUaWNrZXRHcm91cCwgYjogUmFpbFRpY2tldEdyb3VwKSA9PiB7XHJcbiAgLy8gICAgICAgICBjb25zdCBwcmljZUEgPSBhLmhlYWRlci5wcmljZSxcclxuICAvLyAgICAgICAgICAgcHJpY2VCID0gYi5oZWFkZXIucHJpY2U7XHJcbiAgLy8gICAgICAgICByZXR1cm4gcHJpY2VBIDwgcHJpY2VCID8gLTEgOiBwcmljZUEgPiBwcmljZUIgPyAxIDogMDtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgICk7XHJcbiAgLy8gICB9KTtcclxuICAvLyAgIHJldHVybiBzb3J0VGlja2V0UHJpY2VzO1xyXG4gIC8vIH1cclxuICB1cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uc1tdKTogSUNoZWFwZXN0UHJpY2Uge1xyXG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBjdXJyZW5jeSA9XHJcbiAgICAgIHJlc3VsdHNbMF0ub3V0Ym91bmRbMF0ucHJvdmlkZXJzWzBdLmNoZWFwZXN0VGlja2V0LmN1cnJlbmN5O1xyXG4gICAgY29uc3QgcHJpY2UgPSB0aGlzLmZpbmRDaGVhcGVzdFRpY2tldChyZXN1bHRzKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGFtb3VudDogcHJpY2UsXHJcbiAgICAgIGN1cnJlbmN5Q29kZTogY3VycmVuY3lcclxuICAgIH07XHJcbiAgfVxyXG4gIGZpbmRDaGVhcGVzdFRpY2tldChyZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uc1tdKTogbnVtYmVyIHtcclxuICAgIHRoaXMuX2NoZWFwZXN0Rmlyc3QgPSBudWxsO1xyXG4gICAgdGhpcy5fY2hlYXBlc3RTdGFuZGFyZCA9IG51bGw7XHJcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgIGxldCBjaGVhcGVzdEFycjogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgICByZXN1bHRzLm1hcCgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHJlc3VsdC5vdXRib3VuZC5tYXAoKG91dCkgPT4ge1xyXG4gICAgICAgIG91dC5wcm92aWRlcnMubWFwKCh0a3QpID0+IHtcclxuICAgICAgICAgIGxldCBjaGVhcGVzdFRpY2tldDogbnVtYmVyID0gdGt0LmNoZWFwZXN0VGlja2V0LnByaWNlO1xyXG4gICAgICAgICAgdGt0LnRpY2tldE9wdGlvbnMubWFwKCh0a3RPcHRpb24pID0+IHtcclxuICAgICAgICAgICAgbGV0IHRrdFByaWNlID0gdGt0T3B0aW9uLnByaWNlO1xyXG4gICAgICAgICAgICBsZXQgdGt0Q2xhc3MgPSB0a3RPcHRpb24uY2xhc3M7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICB0a3RDbGFzcyA9PT0gJ0ZpcnN0JyAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLl9jaGVhcGVzdEZpcnN0Py5wcmljZSA+IHRrdFByaWNlIHx8ICF0aGlzLl9jaGVhcGVzdEZpcnN0KVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLl9jaGVhcGVzdEZpcnN0ID0gdGt0T3B0aW9uO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgIHRrdENsYXNzID09PSAnU3RhbmRhcmQnICYmXHJcbiAgICAgICAgICAgICAgKHRoaXMuX2NoZWFwZXN0U3RhbmRhcmQ/LnByaWNlID4gdGt0UHJpY2UgfHxcclxuICAgICAgICAgICAgICAgICF0aGlzLl9jaGVhcGVzdFN0YW5kYXJkKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLl9jaGVhcGVzdFN0YW5kYXJkID0gdGt0T3B0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0a3RQcmljZSA9PT0gY2hlYXBlc3RUaWNrZXQpIHtcclxuICAgICAgICAgICAgICBjaGVhcGVzdEFyci5wdXNoKGNoZWFwZXN0VGlja2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gTWF0aC5taW4oLi4uY2hlYXBlc3RBcnIpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
1152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXJsLWVudGVycHJpc2Utc2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2lybC1lbnRlcnByaXNlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFrQixNQUFNLFFBQVEsQ0FBQztBQUV4QyxPQUFPLEVBQUUsR0FBRyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFpQnpELE9BQU8sRUFHTCxRQUFRLEVBTVIsV0FBVyxFQUNYLGNBQWMsRUFDZixNQUFNLHdCQUF3QixDQUFDO0FBa0JoQyxPQUFPLEVBQWEsSUFBSSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHN0QsTUFBTSxDQUFOLElBQVksaUJBR1g7QUFIRCxXQUFZLGlCQUFpQjtJQUMzQiw0Q0FBdUIsQ0FBQTtJQUN2Qiw2Q0FBd0IsQ0FBQTtBQUMxQixDQUFDLEVBSFcsaUJBQWlCLEtBQWpCLGlCQUFpQixRQUc1QjtBQUVELE1BQU0sT0FBTyxtQkFJWCxTQUFRLG9CQUlQO0lBc2RELFlBQ1UsVUFBa0MsRUFDbEMsd0JBQTZELEVBQzdELE9BQTJCLEVBQzNCLGFBQStDLEVBQ3ZELGNBQWtDLEVBQzFCLGFBQStDO1FBRXZELEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQVBkLGVBQVUsR0FBVixVQUFVLENBQXdCO1FBQ2xDLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBcUM7UUFDN0QsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFDM0Isa0JBQWEsR0FBYixhQUFhLENBQWtDO1FBRS9DLGtCQUFhLEdBQWIsYUFBYSxDQUFrQztRQXJkL0MsdUJBQWtCLEdBQUcsbUJBQW1CLENBQUMsdUJBQXVCLENBQUM7UUFDakUsNEJBQXVCLEdBQUcsbUJBQW1CLENBQUMs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QUFFO29CQUN4QixJQUFJLGNBQWMsR0FBVyxHQUFHLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQztvQkFDdEQsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTs7d0JBQ2xDLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7d0JBQy9CLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7d0JBQy9CLElBQ0UsUUFBUSxLQUFLLE9BQU87NEJBQ3BCLENBQUMsT0FBQSxJQUFJLENBQUMsY0FBYywwQ0FBRSxLQUFLLElBQUcsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUMvRDs0QkFDQSxJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQzt5QkFDakM7NkJBQU0sSUFDTCxRQUFRLEtBQUssVUFBVTs0QkFDdkIsQ0FBQyxPQUFBLElBQUksQ0FBQyxpQkFBaUIsMENBQUUsS0FBSyxJQUFHLFFBQVE7Z0NBQ3ZDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQzFCOzRCQUNBLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7eUJBQ3BDO3dCQUNELElBQUksUUFBUSxLQUFLLGNBQWMsRUFBRTs0QkFDL0IsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzt5QkFDbEM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUM7SUFDbEMsQ0FBQzs7QUE5MENlLDBDQUFzQixHQUFHLFlBQVksQ0FBQztBQUN0QywyQ0FBdUIsR0FBRyxhQUFhLENBQUM7QUFDeEMsaUNBQWEsR0FBRyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50LCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IG9mLCBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEJhc2VFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi9iYXNlLWVudGVycHJpc2UnO1xyXG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBSYWlsVGlja2V0R3JvdXBzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yYWlsLXRpY2tldC1ncm91cHMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBSYWlsUmVzdWx0SW5kaWZpZXJzLFxyXG4gIFJhaWxUaWNrZXRHcm91cCxcclxuICBUaWNrZXRHcm91cHNcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL3JhaWwtdGlja2V0LWdyb3VwLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFJhaWxEaXJlY3Rpb24gfSBmcm9tICcuL3JhaWwtZGlyZWN0aW9uLmVudW0nO1xyXG5pbXBvcnQgeyBWYWx1ZURpc3BsYXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZhbHVlLWRpc3BsYXknO1xyXG5pbXBvcnQge1xyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgSXJsUXVvdGVSZXN1bHRBcnJheSxcclxuICBSZWN1cnNpdmVQYXJ0aWFsLFxyXG4gIFJlY2VudFNlYXJjaFxyXG59IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcclxuaW1wb3J0IHtcclxuICBCYXNrZXRJdGVtLFxyXG4gIEN1cnJlbmN5Q29kZSxcclxuICBJcmxDbGFzcyxcclxuICBJcmxKb3VybmV5T3B0aW9uLFxyXG4gIElybEpvdXJuZXlPcHRpb25zLFxyXG4gIElybFByb3ZpZGVyLFxyXG4gIElybFRpY2tldE9wdGlvbixcclxuICBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyxcclxuICBTZXJ2aWNlVHlwZSxcclxuICBJcmxKb3VybmV5VHlwZSwgSXJsU3VwcGxpZXIsIElybFRpY2tldFxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VJcmxRdW90ZUZldGNoZXIsXHJcbiAgSXJsUXVvdGVGZXRjaGVyVHlwZVxyXG59IGZyb20gJy4uL2ZldGNoZXJzL2lybC1xdW90ZS1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlU2VhcmNoSXJsU3RhdGlvbnNGZXRjaGVyLFxyXG4gIFNlYXJjaElybFN0YXRpb25zRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9zZWFyY2gtaXJsLXN0YXRpb25zLmZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIElSTEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXHJcbiAgSXJsVGVtcFBhcmFtc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWlybC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciwgYWdlcyB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcclxuXHJcbmV4cG9ydCBlbnVtIElybFNlYXJjaENyaXRlcmlhIHtcclxuICBEZXBhcnQgPSAnRGVwYXJ0IEFmdGVyJyxcclxuICBBcnJpdmUgPSAnQXJyaXZlIEJlZm9yZSdcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIElSTEVudGVycHJpc2VTZWFyY2g8XHJcbiAgUSBleHRlbmRzIElybFF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgU0lTX1EgZXh0ZW5kcyBTZWFyY2hJcmxTdGF0aW9uc0ZldGNoZXJUeXBlXHJcbiAgPlxyXG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8XHJcbiAgSXJsVGVtcFBhcmFtcyxcclxuICBJcmxRdW90ZVJlc3VsdEFycmF5LFxyXG4gIElybFF1b3RlUmVzdWx0QXJyYXlcclxuICA+XHJcbiAgaW1wbGVtZW50cyBJUkxFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlIHtcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdzZWFyY2hfaXJsJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAnaXJsX3Jlc3VsdHMnO1xyXG4gIHN0YXRpYyByZWFkb25seSBQQVNTSU5HX1BPSU5UID0gJ1Bhc3NpbmcnO1xyXG4gIHByaXZhdGUgdHJhdmVsbGVyczogVHJhdmVsbGVyW107XHJcblxyXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPSBJUkxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG4gIHByb3RlY3RlZCBtdWx0aVJlc3VsdHNTZXNzaW9uTmFtZSA9IElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcblxyXG5cclxuICBwdWJsaWMgc2VhcmNoVHlwZXMgPSBbXHJcbiAgICB7IGRpc3BsYXk6ICdSZXR1cm4nLCB2YWx1ZTogSXJsSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSB9LFxyXG4gICAgeyBkaXNwbGF5OiAnT25lLVdheScsIHZhbHVlOiBJcmxKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5IH1cclxuICAgIC8vIHsgZGlzcGxheTogJ09wZW4gUmV0dXJuJywgdmFsdWU6IElybEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5IH0sXHJcbiAgICAvLyB7IGRpc3BsYXk6ICdEdWFsIFNpbmdsZXMnLCB2YWx1ZTogSXJsSm91cm5leVR5cGUuRHVhbFNpbmdsZUpvdXJuZXkgfSxcclxuICBdO1xyXG5cclxuICBwdWJsaWMgY2xhc3NUeXBlcyA9IFtcclxuICAgIHsgZGlzcGxheTogJ0FueScsIHZhbHVlOiBJcmxDbGFzcy5BbGwgfSxcclxuICAgIHsgZGlzcGxheTogJ1N0YW5kYXJkJywgdmFsdWU6IElybENsYXNzLlN0YW5kYXJkIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGaXJzdCcsIHZhbHVlOiBJcmxDbGFzcy5GaXJzdCB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIGFnZVJhbmdlczoge1xyXG4gICAga2V5OiBhZ2VzO1xyXG4gICAgdmFsdWU6IHN0cmluZztcclxuICB9W10gPSBbeyBrZXk6IGFnZXMuQ2hpbGQsIHZhbHVlOiAnQ2hpbGQgKDAtMyknIH0sIHsga2V5OiBhZ2VzLkNoaWxkLCB2YWx1ZTogJ0NoaWxkICg0LTUpJyB9LCB7IGtleTogYWdlcy5DaGlsZCwgdmFsdWU6ICdDaGlsZCAoNi0xMSknIH0sIHsga2V5OiBhZ2VzLllvdXRoLCB2YWx1ZTogJ1lvdXRoICgxMi0xNCknIH0sIHsga2V5OiBhZ2VzLllvdXRoLCB2YWx1ZTogJ1lvdXRoICgxNS0yNSknIH0sIHsga2V5OiBhZ2VzLkFkdWx0LCB2YWx1ZTogJ0FkdWx0ICgyNi01OSknIH0sIHsga2V5OiBhZ2VzLllvdXRoLCB2YWx1ZTogJ1NlbmlvciAoNjArKScgfV07XHJcblxyXG5cclxuXHJcbiAgcHVibGljIGlybENyaXRlcmlhID0gW0lybFNlYXJjaENyaXRlcmlhLkRlcGFydCwgSXJsU2VhcmNoQ3JpdGVyaWEuQXJyaXZlXTtcclxuXHJcbiAgcHVibGljIHRyYXZlbENhcmRzID0gW1xyXG4gICAgeyBkaXNwbGF5OiAnWW91bmcgcGVyc29ucyByYWlsY2FyZCcsIHZhbHVlOiAnWU5HJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRGlzYWJpbGl0eSByYWlsY2FyZCcsIHZhbHVlOiAnRElTJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRmFtaWx5IHJhaWxjYXJkJywgdmFsdWU6ICdGQU0nIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGb3JjZXMgcmFpbGNhcmQnLCB2YWx1ZTogJ0hNRicgfSxcclxuICAgIHsgZGlzcGxheTogJ1RyYXZlbCBhZ2VuY3kgZGlzY291bnQnLCB2YWx1ZTogJ1RBRCcgfVxyXG4gIF07XHJcblxyXG5cclxuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbDtcclxuICBwdWJsaWMgbWluT3V0Ym91bmREYXRlOiBOZ2JEYXRlU3RydWN0ID0ge1xyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxyXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcclxuICB9O1xyXG4gIHB1YmxpYyBtaW5JbmJvdW5kRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXHJcbiAgfTtcclxuICBwcml2YXRlIF90aW1lQXJyYXk6IFZhbHVlRGlzcGxheVtdO1xyXG4gIHByaXZhdGUgX2NhbkNvbWJpbmU6IGFueTtcclxuICAvLyBwcml2YXRlIF9jaG9zZW5PdXRib3VuZFRpY2tldDogUmVjdXJzaXZlUGFydGlhbDxJcmxUaWNrZXRPcHRpb24+O1xyXG4gIC8vIHByaXZhdGUgX2Nob3NlbkluYm91bmRUaWNrZXQ6IFJlY3Vyc2l2ZVBhcnRpYWw8SXJsVGlja2V0T3B0aW9uPjtcclxuICAvLyBwcml2YXRlIF9jaG9zZW5PdXRib3VuZEpvdXJuZXk6IFJlY3Vyc2l2ZVBhcnRpYWw8SXJsSm91cm5leU9wdGlvbj47XHJcbiAgLy8gcHJpdmF0ZSBfY2hvc2VuSW5ib3VuZEpvdXJuZXk6IFJlY3Vyc2l2ZVBhcnRpYWw8SXJsSm91cm5leU9wdGlvbj47XHJcbiAgcHJpdmF0ZSBfdmlhTG9jYXRpb246IGFueTtcclxuICBwcml2YXRlIF90cmF2ZWxsaW5nRnJvbTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3RyYXZlbGxpbmdUbzogc3RyaW5nO1xyXG4gIHByb3RlY3RlZCBfb3JpZ2luYWxVc2VyU2VhcmNoOiBJcmxUZW1wUGFyYW1zO1xyXG5cclxuICAvLyBnZXQgY2hvc2VuVG90YWxQcmljZSgpOiBudW1iZXIge1xyXG4gIC8vICAgaWYgKHRoaXMuX2Nob3Nlbk91dGJvdW5kVGlja2V0KSB7XHJcbiAgLy8gICAgIGlmICh0aGlzLl9jaG9zZW5JbmJvdW5kVGlja2V0KSB7XHJcbiAgLy8gICAgICAgLy8gbm93IGNoZWNrIGlmIHRoZXkgYXJlIHJldHVybnMgb3IgZHVhbFxyXG4gIC8vICAgICAgIGlmIChcclxuICAvLyAgICAgICAgIHRoaXMuX2Nob3Nlbk91dGJvdW5kVGlja2V0LnNpbmdsZU9yUmV0dXJuID09PSAnUmV0dXJuJyAmJlxyXG4gIC8vICAgICAgICAgdGhpcy5fY2hvc2VuSW5ib3VuZFRpY2tldC5zaW5nbGVPclJldHVybiA9PT0gJ1JldHVybidcclxuICAvLyAgICAgICApIHtcclxuICAvLyAgICAgICAgIC8vIHRoZXkgc2hvdWxkIGJvdGggaGF2ZSB0aGUgc2FtZSBwcmljZVxyXG4gIC8vICAgICAgICAgcmV0dXJuIHRoaXMuX2Nob3Nlbk91dGJvdW5kVGlja2V0LnByaWNlO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICByZXR1cm4gKFxyXG4gIC8vICAgICAgICAgdGhpcy5fY2hvc2VuT3V0Ym91bmRUaWNrZXQucHJpY2UgKyB0aGlzLl9jaG9zZW5JbmJvdW5kVGlja2V0LnByaWNlXHJcbiAgLy8gICAgICAgKTtcclxuICAvLyAgICAgfVxyXG5cclxuICAvLyAgICAgcmV0dXJuIHRoaXMuX2Nob3Nlbk91dGJvdW5kVGlja2V0LnByaWNlO1xyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIHJldHVybiAwO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0IGNob3NlblRpY2tldHMoKTogYW55IHtcclxuICAvLyAgIHJldHVybiB7XHJcbiAgLy8gICAgIE91dGJvdW5kOiB0aGlzLl9jaG9zZW5PdXRib3VuZFRpY2tldCxcclxuICAvLyAgICAgSW5ib3VuZDogdGhpcy5fY2hvc2VuSW5ib3VuZFRpY2tldFxyXG4gIC8vICAgfTtcclxuICAvLyB9XHJcblxyXG4gIC8vIGdldCBjaG9zZW5PdXRib3VuZEpvdXJuZXkoKTogUmVjdXJzaXZlUGFydGlhbDxSYWlsSm91cm5leU9wdGlvbj4ge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuX2Nob3Nlbk91dGJvdW5kSm91cm5leTtcclxuICAvLyB9XHJcblxyXG4gIC8vIGdldCBjaG9zZW5JbmJvdW5kSm91cm5leSgpOiBSZWN1cnNpdmVQYXJ0aWFsPFJhaWxKb3VybmV5T3B0aW9uPiB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5fY2hvc2VuSW5ib3VuZEpvdXJuZXk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBnZXQgb3BlblJldHVybigpOiBib29sZWFuIHtcclxuICAvLyAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3BlblJldHVybjtcclxuICAvLyB9XHJcblxyXG4gIC8vIHNldCBvcGVuUmV0dXJuKG5ld1ZhbDogYm9vbGVhbikge1xyXG4gIC8vICAgdGhpcy50ZW1wUGFyYW1zLm9wZW5SZXR1cm4gPSBuZXdWYWw7XHJcblxyXG4gIC8vICAgaWYgKG5ld1ZhbCkge1xyXG4gIC8vICAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9IElybEpvdXJuZXlUeXBlLk9wZW5SZXR1cm5Kb3VybmV5O1xyXG4gIC8vICAgfVxyXG4gIC8vICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0IGNob3NlblNlYXJjaFR5cGUoKTogSXJsSm91cm5leVR5cGUge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0IGNob3NlblNlYXJjaFR5cGUobmV3VHlwZTogSXJsSm91cm5leVR5cGUpIHtcclxuICAvLyAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID0gbmV3VHlwZTtcclxuICAvLyAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAvLyB9XHJcblxyXG4gIGdldCBub09mQWR1bHRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcclxuICB9XHJcblxyXG4gIHNldCBub09mQWR1bHRzKGFkdWx0czogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gYWR1bHRzO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5vT2ZDaGlsZHJlbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbjtcclxuICB9XHJcblxyXG4gIHNldCBub09mQ2hpbGRyZW4oY2hpbGRyZW46IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gY2hpbGRyZW47XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhdmVsbGluZ1RvKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFycml2YWxMb2NhdGlvbklkO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRyYXZlbGxpbmdUbyh0dDogYW55KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYXJyaXZhbExvY2F0aW9uSWQgPSB0dDtcclxuXHJcbiAgICB0aGlzLl90cmF2ZWxsaW5nVG8gPSAnJztcclxuICAgIGlmICh0dD8ucmFpbHN0YXRpb24/LmlkKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9IHR0LnJhaWxzdGF0aW9uLmlkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB0cmF2ZWxsaW5nRnJvbSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kZXBhcnR1cmVMb2NhdGlvbklkO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRyYXZlbGxpbmdGcm9tKHR0OiBhbnkpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5kZXBhcnR1cmVMb2NhdGlvbklkID0gdHQ7XHJcbiAgICB0aGlzLl90cmF2ZWxsaW5nRnJvbSA9ICcnO1xyXG4gICAgaWYgKHR0Py5yYWlsc3RhdGlvbj8uaWQpIHtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ0Zyb20gPSB0dC5yYWlsc3RhdGlvbi5pZDtcclxuICAgICAgdGhpcy5zdXBwbGllciA9IHR0LnJhaWxzdGF0aW9uLnN1cHBsaWVyO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N1cHBsaWVyOiBJcmxTdXBwbGllciA9IG51bGxcclxuICBnZXQgc3VwcGxpZXIoKTogSXJsU3VwcGxpZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N1cHBsaWVyO1xyXG4gIH1cclxuICBzZXQgc3VwcGxpZXIoZGF0YTogSXJsU3VwcGxpZXIpIHtcclxuICAgIHRoaXMuX3N1cHBsaWVyID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvdW50cnlDb2RlOiBzdHJpbmcgPSBudWxsXHJcbiAgZ2V0IGNvdW50cnlDb2RlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fY291bnRyeUNvZGU7XHJcbiAgfVxyXG4gIHNldCBjb3VudHJ5Q29kZShkYXRhOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2NvdW50cnlDb2RlID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NsYXNzOiBJcmxDbGFzcyA9IG51bGxcclxuICBnZXQgY2xhc3MoKTogSXJsQ2xhc3Mge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NsYXNzO1xyXG4gIH1cclxuICBzZXQgY2xhc3MoZGF0YTogSXJsQ2xhc3MpIHtcclxuICAgIHRoaXMuX2NsYXNzID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX291dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgPSBudWxsXHJcbiAgZ2V0IG91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZTtcclxuICB9XHJcbiAgc2V0IG91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUobmV3RGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMuX291dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUgPSBuZXdEYXRlVGltZVxyXG4gICAgdGhpcy5fb3V0Ym91bmRfZGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShuZXdEYXRlVGltZSk7XHJcbiAgICB0aGlzLl9vdXRib3VuZF90aW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICA/IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgOiAnMDcwMCc7XHJcbiAgICB0aGlzLl91cGRhdGVPdXRib3VuZERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kZXBhcnR1cmVMb2NhdGlvbklkOiBzdHJpbmcgPSBudWxsXHJcbiAgZ2V0IGRlcGFydHVyZUxvY2F0aW9uSWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9kZXBhcnR1cmVMb2NhdGlvbklkO1xyXG4gIH1cclxuICBzZXQgZGVwYXJ0dXJlTG9jYXRpb25JZChkYXRhOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2RlcGFydHVyZUxvY2F0aW9uSWQgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYXJyaXZhbExvY2F0aW9uSWQ6IHN0cmluZyA9IG51bGxcclxuICBnZXQgYXJyaXZhbExvY2F0aW9uSWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9hcnJpdmFsTG9jYXRpb25JZDtcclxuICB9XHJcbiAgc2V0IGFycml2YWxMb2NhdGlvbklkKGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5fYXJyaXZhbExvY2F0aW9uSWQgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWR1bHRzOiBudW1iZXIgPSAwXHJcbiAgZ2V0IGFkdWx0cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FkdWx0cztcclxuICB9XHJcbiAgc2V0IGFkdWx0cyhkYXRhOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX2FkdWx0cyA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jaGlsZHJlbjogbnVtYmVyID0gMFxyXG4gIGdldCBjaGlsZHJlbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuO1xyXG4gIH1cclxuICBzZXQgY2hpbGRyZW4oZGF0YTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9jaGlsZHJlbiA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXR1cm5EZXBhcnR1cmVEYXRlVGltZTogbW9tZW50Lk1vbWVudCA9IG51bGxcclxuICBnZXQgcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgfVxyXG4gIHNldCByZXR1cm5EZXBhcnR1cmVEYXRlVGltZShuZXdEYXRlVGltZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy5fcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUgPSBuZXdEYXRlVGltZTtcclxuICAgIHRoaXMuX3JldHVybl9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG5ld0RhdGVUaW1lKTtcclxuICAgIHRoaXMuX3JldHVybl90aW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICA/IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgOiAnMDcwMCc7XHJcbiAgICB0aGlzLl91cGRhdGVSZXR1cm5EYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWdlUmFuZ2U6IHN0cmluZyA9IG51bGxcclxuICBnZXQgYWdlUmFuZ2UoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9hZ2VSYW5nZTtcclxuICB9XHJcbiAgc2V0IGFnZVJhbmdlKGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5fYWdlUmFuZ2UgPSBkYXRhO1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcbiAgLy8gZ2V0IGNob3NlblJhaWxDbGFzcygpOiBSYWlsQ2xhc3Mge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hDbGFzcztcclxuICAvLyB9XHJcblxyXG4gIGdldCBjaG9zZW5TZWFyY2hDbGFzcygpOiBJcmxDbGFzcyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNob3NlblNlYXJjaENsYXNzKGNsYXNzUjogSXJsQ2xhc3MpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jbGFzcyA9IGNsYXNzUjtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBvdXRCb3VuZERhdGVUaW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dEJvdW5kRGF0ZVRpbWUobmV3RGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKTtcclxuXHJcbiAgICB0aGlzLm1pbkluYm91bmREYXRlID0ge1xyXG4gICAgICB5ZWFyOiBuZXdEYXRlVGltZS55ZWFyKCksXHJcbiAgICAgIG1vbnRoOiBuZXdEYXRlVGltZS5tb250aCgpICsgMSxcclxuICAgICAgZGF5OiBuZXdEYXRlVGltZS5kYXRlKClcclxuICAgIH07XHJcblxyXG4gICAgaWYgKG5ld0RhdGVUaW1lICYmIG5ld0RhdGVUaW1lLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9vdXRib3VuZF9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG5ld0RhdGVUaW1lKTtcclxuICAgICAgdGhpcy5fb3V0Ym91bmRfdGltZSA9IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA/IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA6ICcwNzAwJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMub3V0Qm91bmREYXRlVGltZSAmJlxyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSAmJlxyXG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUuaXNBZnRlcih0aGlzLmluQm91bmREYXRlVGltZSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IHRoaXMub3V0Qm91bmREYXRlVGltZS5jbG9uZSgpLmFkZCgxLCAnZGF5Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG91dGJvdW5kQ3JpdGVyaWEoKTogSXJsU2VhcmNoQ3JpdGVyaWEge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRib3VuZENyaXRlcmlhO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dGJvdW5kQ3JpdGVyaWEobmV3Q3JpdDogSXJsU2VhcmNoQ3JpdGVyaWEpIHtcclxuICAgIC8vIGNvbnNvbGUud2FybihgKysrIFNldHRpbmcgTmV3IENyaXRlcmlhOiAke25ld0NyaXR9ICsrK2ApO1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kQ3JpdGVyaWEgPSBuZXdDcml0O1xyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBpbkJvdW5kRGF0ZVRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJldHVybkRlcGFydHVyZURhdGVUaW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IGluQm91bmREYXRlVGltZShuZXdEYXRlVGltZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnJldHVybkRlcGFydHVyZURhdGVUaW1lID0gbmV3RGF0ZVRpbWU7XHJcbiAgICBpZiAobmV3RGF0ZVRpbWUgJiYgbmV3RGF0ZVRpbWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMuX3JldHVybl9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG5ld0RhdGVUaW1lKTtcclxuICAgICAgdGhpcy5fcmV0dXJuX3RpbWUgPSBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgPyBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgOiAnMTYwMCc7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICAvLyAhZGF0ZSBhbmQgdGltZSBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IGZvciBMVVxyXG4gIHByaXZhdGUgX291dGJvdW5kX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xyXG5cclxuICBnZXQgb3V0Ym91bmRfZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9vdXRib3VuZF9kYXRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dGJvdW5kX2RhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX291dGJvdW5kX2RhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZU91dGJvdW5kRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX291dGJvdW5kX3RpbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IG91dGJvdW5kX3RpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9vdXRib3VuZF90aW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dGJvdW5kX3RpbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fb3V0Ym91bmRfdGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmV0dXJuX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xyXG5cclxuICBnZXQgcmV0dXJuX2RhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmV0dXJuX2RhdGU7XHJcbiAgfVxyXG5cclxuICBzZXQgcmV0dXJuX2RhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX3JldHVybl9kYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVSZXR1cm5EYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmV0dXJuX3RpbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IHJldHVybl90aW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmV0dXJuX3RpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgcmV0dXJuX3RpbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcmV0dXJuX3RpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZVJldHVybkRhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcmV0dXJuQ3JpdGVyaWEoKTogSXJsU2VhcmNoQ3JpdGVyaWEge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5Dcml0ZXJpYTtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5Dcml0ZXJpYShuZXdDcml0OiBJcmxTZWFyY2hDcml0ZXJpYSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnJldHVybkNyaXRlcmlhID0gbmV3Q3JpdDtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIC8vIHNldCByYWlsQ2FyZHMobmV3UmFpbENhcmRzOiBzdHJpbmdbXSkge1xyXG4gIC8vICAgdGhpcy50ZW1wUGFyYW1zLnJhaWxDYXJkcyA9IG5ld1JhaWxDYXJkcztcclxuICAvLyAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAvLyB9XHJcblxyXG4gIC8vIGdldCBjYXJuZXRUaWNrZXQoKTogYm9vbGVhbiB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNhcm5ldFRpY2tldDtcclxuICAvLyB9XHJcblxyXG4gIC8vIHNldCBjYXJuZXRUaWNrZXQobmV3Q2FybmV0OiBib29sZWFuKSB7XHJcbiAgLy8gICB0aGlzLnRlbXBQYXJhbXMuY2FybmV0VGlja2V0ID0gbmV3Q2FybmV0O1xyXG4gIC8vICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0IGRpc2FibGVBdXRvRGlzY291bnRzKCk6IGJvb2xlYW4ge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kaXNhYmxlQXV0b0Rpc2NvdW50cztcclxuICAvLyB9XHJcblxyXG4gIC8vIHNldCBkaXNhYmxlQXV0b0Rpc2NvdW50cyhuZXdEaXM6IGJvb2xlYW4pIHtcclxuICAvLyAgIHRoaXMudGVtcFBhcmFtcy5kaXNhYmxlQXV0b0Rpc2NvdW50cyA9IG5ld0RpcztcclxuICAvLyAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAvLyB9XHJcblxyXG4gIC8vIGdldCBwcmlvcml0aXNlQnlQcmljZSgpOiBib29sZWFuIHtcclxuICAvLyAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJpb3JpdGlzZUJ5UHJpY2U7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBzZXQgcHJpb3JpdGlzZUJ5UHJpY2UobmV3UHJpb3JpdHk6IGJvb2xlYW4pIHtcclxuICAvLyAgIHRoaXMudGVtcFBhcmFtcy5wcmlvcml0aXNlQnlQcmljZSA9IG5ld1ByaW9yaXR5O1xyXG4gIC8vICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIC8vIH1cclxuXHJcblxyXG4gIHB1YmxpYyBnZXQgdGltZUFycmF5KCk6IFZhbHVlRGlzcGxheVtdIHtcclxuICAgIHRoaXMuX3RpbWVBcnJheSA9XHJcbiAgICAgIHRoaXMuX3RpbWVBcnJheSB8fFxyXG4gICAgICBBcnJheSg0OClcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyAyKVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgMikgKiAzMCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgICBkaXNwbGF5OlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyAyKVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSAyKSAqIDMwKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZUFycmF5O1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgX2NoZWFwZXN0U3RhbmRhcmQ6IElybFRpY2tldE9wdGlvbiA9IG51bGw7XHJcbiAgZ2V0IGNoZWFwZXN0U3RhbmRhcmQoKTogSXJsVGlja2V0T3B0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGVhcGVzdFN0YW5kYXJkO1xyXG4gIH1cclxuICBwcml2YXRlIF9jaGVhcGVzdEZpcnN0OiBJcmxUaWNrZXRPcHRpb24gPSBudWxsO1xyXG4gIGdldCBjaGVhcGVzdEZpcnN0KCk6IElybFRpY2tldE9wdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hlYXBlc3RGaXJzdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lybENsYXNzOiBJcmxDbGFzcyA9IG51bGw7XHJcbiAgZ2V0IGlybENsYXNzKCk6IElybENsYXNzIHtcclxuICAgIHJldHVybiB0aGlzLl9pcmxDbGFzc1xyXG4gIH1cclxuXHJcbiAgc2V0IGlybENsYXNzKGRhdGE6IElybENsYXNzKSB7XHJcbiAgICB0aGlzLl9pcmxDbGFzcyA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9qb3VybmV5dHlwZTogSXJsSm91cm5leVR5cGUgPSBJcmxKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5O1xyXG4gIGdldCBqb3VybmV5VHlwZSgpOiBJcmxKb3VybmV5VHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fam91cm5leXR5cGVcclxuICB9XHJcblxyXG4gIHNldCBqb3VybmV5VHlwZShkYXRhOiBJcmxKb3VybmV5VHlwZSkge1xyXG4gICAgdGhpcy5fam91cm5leXR5cGUgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIElybGZldGNoZXI6IEJhc2VJcmxRdW90ZUZldGNoZXI8UT4sXHJcbiAgICBwcml2YXRlIHNlYXJjaElybFN0YXRpb25zRmV0Y2hlcjogQmFzZVNlYXJjaElybFN0YXRpb25zRmV0Y2hlcjxTSVNfUT4sXHJcbiAgICBwcml2YXRlIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZVxyXG4gICkge1xyXG4gICAgc3VwZXIoc3RvcmFnZVNlcnZpY2UpO1xyXG5cclxuICAgIGNvbnN0IGRhdGE6IHtcclxuICAgICAgcXVlcnk6IHt9O1xyXG4gICAgICB0ZW1wUGFyYW1zOiBJcmxUZW1wUGFyYW1zO1xyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IElybFRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNU1xyXG4gICAgKSB8fCB7XHJcbiAgICAgICAgcXVlcnk6IHt9LFxyXG4gICAgICAgIHRlbXBQYXJhbXM6IHt9IGFzIElybFRlbXBQYXJhbXMsXHJcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB7fSBhcyBJcmxUZW1wUGFyYW1zXHJcbiAgICAgIH07XHJcblxyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlSXJsUXVlcnkoZGF0YS50ZW1wUGFyYW1zKSk7XHJcbiAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBkYXRhLm9yaWdpbmFsVXNlclNlYXJjaDtcclxuXHJcbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xyXG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZShcclxuICAgICAgICAodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcbiAgICAgICAgICBpZiAodGhpcy50cmF2ZWxsZXJzWzBdICYmICF0aGlzLnRyYXZlbGxlcnNbMF0uYWdlVHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRyYXZlbGxlcnNbMF0uYWdlVHlwZSA9IGFnZXMuQWR1bHQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKFxyXG4gICAgICAgICAgICB0cmF2ZWxsZXJzLFxyXG4gICAgICAgICAgICBTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSBzcGxpdFRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHNwbGl0VHJhdmVsbGVycy5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIGNvbnN0IHJlc3VsdHMgPVxyXG4gICAgICBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbUFzTGlzdDxJcmxRdW90ZVJlc3VsdEFycmF5PihcclxuICAgICAgICB0aGlzLnJlc3VsdHNTZXNzaW9uTmFtZVxyXG4gICAgICApIHx8IFtdO1xyXG4gICAgLy8gaWYgKHJlc3VsdHMgPT0gbnVsbCAmJiB0aGlzLmlzVmFsaWQpIHtcclxuICAgIC8vICAgc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgICAvLyB9XHJcbiAgICB0aGlzLl9jaGVhcGVzdFJlc3VsdFByaWNlID0gdGhpcy51cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMgfHwgW10pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VJcmxRdWVyeSgpKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzVmFsaWQoKSB7XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBJUkxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcblxyXG4gICAgY29uc3Qgbm93ID0gbW9tZW50KCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLl90cmF2ZWxsaW5nRnJvbSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgRW50ZXIgYSBGcm9tIExvY2F0aW9uLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5fdHJhdmVsbGluZ1RvKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBFbnRlciBhIFRvIExvY2F0aW9uLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm91dEJvdW5kRGF0ZVRpbWU/LmlzQmVmb3JlKG5vdykpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAnRGVwYXJ0dXJlIERhdGUvVGltZSBjYW5ub3QgYmUgaW4gdGhlIHBhc3QuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIChcclxuICAgIC8vICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID09PSBJcmxKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5XHJcbiAgICAvLyApIHtcclxuICAgIC8vICAgLy8gY2hlY2sgZm9yIHJldHVybiBzcGVjaWZpYyB2YWxpZGF0aW9ucyBpbiBoZXJlXHJcblxyXG4gICAgLy8gICBpZiAodGhpcy5pbkJvdW5kRGF0ZVRpbWU/LmlzU2FtZU9yQmVmb3JlKHRoaXMub3V0Qm91bmREYXRlVGltZSkpIHtcclxuICAgIC8vICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgLy8gICAgICAgJ1JldHVybiBEYXRlL1RpbWUgbXVzdCBiZSBhZnRlciBEZXBhcnR1cmUgRGF0ZS9UaW1lJ1xyXG4gICAgLy8gICAgICk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBpZiAodGhpcy52aWEpIHtcclxuICAgIC8vICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMudmlhTG9jYXRpb24pIHtcclxuICAgIC8vICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgZW50ZXIgYSB2aWEgbG9jYXRpb24uJyk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmFkdWx0cyArIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA8IDEpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCAxIHRyYXZlbGxlcicpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICB0aGlzLm1lc3NhZ2VzLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBPYmplY3QuZnJlZXplKHsgLi4udGhpcy50ZW1wUGFyYW1zIH0pO1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICAgIElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2goXHJcbiAgICAgICAgdGhpcy5JcmxmZXRjaGVyLmZldGNoTGlzdCh0aGlzLmdldFNlYXJjaFF1ZXJ5KCkpLnBpcGUoXHJcbiAgICAgICAgICBtYXAocmVzdWx0ID0+IHJlc3VsdClcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdGFydFNlYXJjaCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9vdXRib3VuZF9kYXRlICYmIHRoaXMuX291dGJvdW5kX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9vdXRib3VuZF9kYXRlLFxyXG4gICAgICAgIHRoaXMuX291dGJvdW5kX3RpbWVcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMub3V0Qm91bmREYXRlVGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZVJldHVybkRhdGVUaW1lKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3JldHVybl9kYXRlICYmIHRoaXMuX3JldHVybl90aW1lKSB7XHJcbiAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgICAgdGhpcy5fcmV0dXJuX2RhdGUsXHJcbiAgICAgICAgdGhpcy5fcmV0dXJuX3RpbWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hRdWVyeSgpOiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyB7XHJcbiAgICAvLyB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgdGhpcy5ub09mQWR1bHRzID0gdGhpcy50cmF2ZWxsZXJzLmZpbHRlcigodHJhdmVsbGVyOiBUcmF2ZWxsZXIpPT5cclxuICAgIHRyYXZlbGxlci5hZ2VUeXBlID09PSBhZ2VzLkFkdWx0IHx8IHRyYXZlbGxlci5hZ2VUeXBlID09PSBhZ2VzLllvdXRoIHx8IHRyYXZlbGxlci5hZ2VUeXBlID09PSBhZ2VzLlNlbmlvcikubGVuZ3RoO1xyXG4gICAgdGhpcy5ub09mQ2hpbGRyZW4gPSB0aGlzLnRyYXZlbGxlcnMuZmlsdGVyKCh0cmF2ZWxsZXI6IFRyYXZlbGxlcik9PlxyXG4gICAgdHJhdmVsbGVyLmFnZVR5cGUgPT09IGFnZXMuQ2hpbGQpLmxlbmd0aDtcclxuICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyA9IHtcclxuICAgICAgc3VwcGxpZXI6IHRoaXMuc3VwcGxpZXIsIC8vIElSTFN1cHBsaWVyIVxyXG4gICAgICBjb3VudHJ5Q29kZTogJ0dCJyxcclxuICAgICAgLy8gam91cm5leVR5cGU6IHRoaXMuam91cm5leVR5cGUsIC8vIElSTEpvdXJuZXlUeXBlIVxyXG4gICAgICBjbGFzczogdGhpcy5pcmxDbGFzcywgLy8gSVJMQ2xhc3NcclxuICAgICAgb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZTogdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUsXHJcbiAgICAgIGRlcGFydHVyZUxvY2F0aW9uSWQ6IHRoaXMuX3RyYXZlbGxpbmdGcm9tLFxyXG4gICAgICBhcnJpdmFsTG9jYXRpb25JZDogdGhpcy5fdHJhdmVsbGluZ1RvLFxyXG4gICAgICBhZHVsdHM6IHRoaXMudGVtcFBhcmFtcy5hZHVsdHMsXHJcbiAgICAgIGNoaWxkcmVuOiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4sXHJcbiAgICAgIHJldHVybkRlcGFydHVyZURhdGVUaW1lOiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUsXHJcblxyXG4gICAgICBqb3VybmV5VHlwZTogdGhpcy5qb3VybmV5VHlwZSxcclxuICAgICAgLy8gY2xhc3M6IHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hDbGFzcyxcclxuICAgICAgLy8gZXh0cmFUaW1lVG9DaGFuZ2U6IHRoaXMudGVtcFBhcmFtcy5leHRyYVRpbWUsXHJcbiAgICAgIC8vIG91dGJvdW5kQXJyaXZhbERhdGVUaW1lOiB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlVGltZSxcclxuICAgICAgLy8gcmV0dXJuQXJyaXZhbERhdGVUaW1lOiB0aGlzLnRlbXBQYXJhbXMuaW5Cb3VuZERhdGVUaW1lLFxyXG4gICAgICAvLyB2aWFMb2NhdGlvbkNvZGU6IHRoaXMudGVtcFBhcmFtcy52aWFMb2NhdGlvblxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID09PSAwKSB7XHJcbiAgICAgIHF1ZXJ5LmNoaWxkcmVuID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzd2l0Y2ggKHRoaXMudGVtcFBhcmFtcy5vdXRib3VuZENyaXRlcmlhKSB7XHJcbiAgICAvLyAgIGNhc2UgSXJsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0OlxyXG4gICAgLy8gICAgIHF1ZXJ5Lm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUgPSBudWxsO1xyXG4gICAgLy8gICAgIGJyZWFrO1xyXG4gICAgLy8gICBjYXNlIElybFNlYXJjaENyaXRlcmlhLkFycml2ZTpcclxuICAgIC8vICAgICBxdWVyeS5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lID0gbnVsbDtcclxuICAgIC8vICAgICBicmVhaztcclxuICAgIC8vICAgZGVmYXVsdDpcclxuICAgIC8vICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAvLyAgICAgICBgKysrIFVua25vd24gQ3JpdGVyaWE6ICR7dGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kQ3JpdGVyaWF9ICsrK2BcclxuICAgIC8vICAgICApO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIHN3aXRjaCAodGhpcy50ZW1wUGFyYW1zLnJldHVybkNyaXRlcmlhKSB7XHJcbiAgICAvLyAgIGNhc2UgSXJsU2VhcmNoQ3JpdGVyaWEuRGVwYXJ0OlxyXG4gICAgLy8gICAgIHF1ZXJ5LnJldHVybkRlcGFydHVyZURhdGVUaW1lID0gbnVsbDtcclxuICAgIC8vICAgICBicmVhaztcclxuICAgIC8vICAgY2FzZSBJcmxTZWFyY2hDcml0ZXJpYS5BcnJpdmU6XHJcbiAgICAvLyAgICAgcXVlcnkucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUgPSBudWxsO1xyXG4gICAgLy8gICAgIGJyZWFrO1xyXG4gICAgLy8gICBkZWZhdWx0OlxyXG4gICAgLy8gICAgIGNvbnNvbGUud2FybihcclxuICAgIC8vICAgICAgIGArKysgVW5rbm93biBDcml0ZXJpYTogJHt0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ3JpdGVyaWF9ICsrK2BcclxuICAgIC8vICAgICApO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIHN3aXRjaCAodGhpcy50ZW1wUGFyYW1zLmpvdXJuZXlUeXBlKSB7XHJcbiAgICAgIGNhc2UgSXJsSm91cm5leVR5cGUuU2luZ2xlSm91cm5leTpcclxuICAgICAgICBxdWVyeS5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSA9IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzPihxdWVyeSk7XHJcbiAgfVxyXG5cclxuICAvLyBjcmVhdGVUaWNrZXRHcm91cHMocmVzdWx0czogSVJMSm91cm5leU9wdGlvbnNbXSk6IFJhaWxUaWNrZXRHcm91cHMge1xyXG4gIC8vICAgbGV0IHRpY2tldHM6IFJhaWxUaWNrZXRHcm91cHMgPSB7fTtcclxuICAvLyAgIGxldCB0aWNrZXRJZCA9ICcnO1xyXG4gIC8vICAgdGhpcy5fY2FuQ29tYmluZSA9IHt9O1xyXG5cclxuICAvLyAgIGxldCB0aWNrZXRHcm91cHNPdXRib3VuZCA9IHRoaXMuc2V0VGlja2V0c0dyb3VwcyhyZXN1bHRzWzBdLm91dGJvdW5kKTtcclxuICAvLyAgIGxldCB0aWNrZXRHcm91cHNSZXR1cm4gPSB0aGlzLnNldFRpY2tldHNHcm91cHMocmVzdWx0c1swXS5yZXR1cm4pO1xyXG4gIC8vICAgdGlja2V0R3JvdXBzT3V0Ym91bmQgPSB0aGlzLnNvcnRUaWNrZXRQcmljZXModGlja2V0R3JvdXBzT3V0Ym91bmQpO1xyXG4gIC8vICAgdGlja2V0R3JvdXBzUmV0dXJuID0gdGhpcy5zb3J0VGlja2V0UHJpY2VzKHRpY2tldEdyb3Vwc1JldHVybik7XHJcblxyXG4gIC8vICAgT2JqZWN0LmtleXModGlja2V0R3JvdXBzT3V0Ym91bmQpLm1hcCgoa2V5KSA9PiB7XHJcbiAgLy8gICAgIHRpY2tldEdyb3Vwc091dGJvdW5kW2tleV0ubWFwKCh0a3Q6IFJhaWxUaWNrZXRPcHRpb24pID0+IHtcclxuICAvLyAgICAgICB0aWNrZXRJZCA9IGAke3RrdC50eXBlfSR7dGt0LnNpbmdsZU9yUmV0dXJufWA7XHJcbiAgLy8gICAgICAgY29uc3QgaWRlbnRpZmllciA9IHRrdC5pZGVudGlmaWVycy5qb3VybmV5SWRlbnRpZmllcjtcclxuICAvLyAgICAgICBjb25zdCBpZGVudGlmaWVyT2JqOiBSYWlsUmVzdWx0SW5kaWZpZXJzID0ge307XHJcbiAgLy8gICAgICAgaWRlbnRpZmllck9ialtpZGVudGlmaWVyXSA9IHtcclxuICAvLyAgICAgICAgIHByaWNlOiB0a3QucHJpY2UsXHJcbiAgLy8gICAgICAgICBpc0NoaWxkOiBmYWxzZSxcclxuICAvLyAgICAgICAgIGZhcmVJZGVudGlmaWVyOiB0a3QuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJcclxuICAvLyAgICAgICB9O1xyXG4gIC8vICAgICAgIGlmICh0aWNrZXRzW2tleV0pIHtcclxuICAvLyAgICAgICAgIHRoaXMudXBkYXRlQ2FuQ29tYmluZSh0a3QpO1xyXG4gIC8vICAgICAgICAgaWRlbnRpZmllck9ialt0a3QuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXJdLmlzQ2hpbGQgPSBmYWxzZTtcclxuICAvLyAgICAgICAgIGlmICh0aWNrZXRzW3RrdC50eXBlXS5oZWFkZXIucHJpY2UgPT09IHRrdC5wcmljZSkge1xyXG4gIC8vICAgICAgICAgICB0aWNrZXRzW3RrdC50eXBlXS5yZXN1bHRJbmRpZmllcnMucHVzaChpZGVudGlmaWVyKTtcclxuICAvLyAgICAgICAgICAgdGlja2V0c1t0a3QudHlwZV0ucmVzdWx0SW5kaWZpZXJzUHJpY2VzID0ge1xyXG4gIC8vICAgICAgICAgICAgIC4uLnRpY2tldHNbdGt0LnR5cGVdLnJlc3VsdEluZGlmaWVyc1ByaWNlcyxcclxuICAvLyAgICAgICAgICAgICAuLi5pZGVudGlmaWVyT2JqXHJcbiAgLy8gICAgICAgICAgIH07XHJcbiAgLy8gICAgICAgICB9IGVsc2UgaWYgKHRrdC5wcmljZSkge1xyXG4gIC8vICAgICAgICAgICBpZGVudGlmaWVyT2JqW2lkZW50aWZpZXJdLmlzQ2hpbGQgPSB0cnVlO1xyXG4gIC8vICAgICAgICAgICBjb25zdCBjaGlsZFRpY2tldCA9IHtcclxuICAvLyAgICAgICAgICAgICBoZWFkZXI6IHRrdCxcclxuICAvLyAgICAgICAgICAgICBjaGlsZHJlbjogW10sXHJcbiAgLy8gICAgICAgICAgICAgb3BlbjogZmFsc2UsXHJcbiAgLy8gICAgICAgICAgICAgZGlyZWN0aW9uOiBSYWlsRGlyZWN0aW9uLk91dGJvdW5kLFxyXG4gIC8vICAgICAgICAgICAgIHJlc3VsdEluZGlmaWVyczogW2lkZW50aWZpZXJdLFxyXG4gIC8vICAgICAgICAgICAgIHJlc3VsdEluZGlmaWVyc1ByaWNlczogaWRlbnRpZmllck9iaixcclxuICAvLyAgICAgICAgICAgICBjaGlsZDogdHJ1ZSxcclxuICAvLyAgICAgICAgICAgICB0aWNrZXRJZCxcclxuICAvLyAgICAgICAgICAgICBzZWxlY3RlZEluZGljaWVzOiBbXSxcclxuICAvLyAgICAgICAgICAgICBkaXNhYmxlZEluZGljaWVzOiBbXVxyXG4gIC8vICAgICAgICAgICB9IGFzIFJhaWxUaWNrZXRHcm91cDtcclxuICAvLyAgICAgICAgICAgdGlja2V0c1t0a3QudHlwZV0uY2hpbGRyZW4ucHVzaChjaGlsZFRpY2tldCk7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgIHRoaXMuX2NhbkNvbWJpbmVbdGt0LnR5cGVdID0ge307XHJcbiAgLy8gICAgICAgICB0aGlzLnVwZGF0ZUNhbkNvbWJpbmUodGt0KTtcclxuICAvLyAgICAgICAgIHRpY2tldHNbdGt0LnR5cGVdID0ge1xyXG4gIC8vICAgICAgICAgICBoZWFkZXI6IHRrdCxcclxuICAvLyAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gIC8vICAgICAgICAgICBvcGVuOiBmYWxzZSxcclxuICAvLyAgICAgICAgICAgZGlyZWN0aW9uOiBSYWlsRGlyZWN0aW9uLk91dGJvdW5kLFxyXG4gIC8vICAgICAgICAgICByZXN1bHRJbmRpZmllcnM6IFtpZGVudGlmaWVyXSxcclxuICAvLyAgICAgICAgICAgcmVzdWx0SW5kaWZpZXJzUHJpY2VzOiBpZGVudGlmaWVyT2JqLFxyXG4gIC8vICAgICAgICAgICBjaGlsZDogZmFsc2UsXHJcbiAgLy8gICAgICAgICAgIHRpY2tldElkLFxyXG4gIC8vICAgICAgICAgICBzZWxlY3RlZEluZGljaWVzOiBbXSxcclxuICAvLyAgICAgICAgICAgZGlzYWJsZWRJbmRpY2llczogW11cclxuICAvLyAgICAgICAgIH0gYXMgUmFpbFRpY2tldEdyb3VwO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfSk7XHJcbiAgLy8gICB9KTtcclxuXHJcbiAgLy8gICBPYmplY3Qua2V5cyh0aWNrZXRHcm91cHNSZXR1cm4pLm1hcCgoa2V5KSA9PiB7XHJcbiAgLy8gICAgIHRpY2tldEdyb3Vwc1JldHVybltrZXldLm1hcCgodGt0OiBSYWlsVGlja2V0T3B0aW9uKSA9PiB7XHJcbiAgLy8gICAgICAgdGlja2V0SWQgPSBgJHt0a3QudHlwZX0ke3RrdC5zaW5nbGVPclJldHVybn1gO1xyXG4gIC8vICAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSB0a3QuaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXI7XHJcbiAgLy8gICAgICAgY29uc3QgaWRlbnRpZmllck9iajogUmFpbFJlc3VsdEluZGlmaWVycyA9IHt9O1xyXG4gIC8vICAgICAgIGlkZW50aWZpZXJPYmpbaWRlbnRpZmllcl0gPSB7XHJcbiAgLy8gICAgICAgICBwcmljZTogdGt0LnByaWNlLFxyXG4gIC8vICAgICAgICAgaXNDaGlsZDogdHJ1ZSxcclxuICAvLyAgICAgICAgIGZhcmVJZGVudGlmaWVyOiB0a3QuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJcclxuICAvLyAgICAgICB9O1xyXG4gIC8vICAgICAgIGlmIChcclxuICAvLyAgICAgICAgIHRpY2tldHNbdGt0LnR5cGVdICYmXHJcbiAgLy8gICAgICAgICB0a3QucHJpY2UgJiZcclxuICAvLyAgICAgICAgIHRrdC5wcmljZSAhPT0gdGlja2V0c1t0a3QudHlwZV0uaGVhZGVyLnByaWNlXHJcbiAgLy8gICAgICAgKSB7XHJcbiAgLy8gICAgICAgICB0aGlzLnVwZGF0ZUNhbkNvbWJpbmUodGt0KTtcclxuICAvLyAgICAgICAgIGlkZW50aWZpZXJPYmpbaWRlbnRpZmllcl0uaXNDaGlsZCA9IHRydWU7XHJcbiAgLy8gICAgICAgICBjb25zdCBjaGlsZFRpY2tldCA9IHtcclxuICAvLyAgICAgICAgICAgaGVhZGVyOiB0a3QsXHJcbiAgLy8gICAgICAgICAgIGNoaWxkcmVuOiBbXSxcclxuICAvLyAgICAgICAgICAgb3BlbjogZmFsc2UsXHJcbiAgLy8gICAgICAgICAgIGRpcmVjdGlvbjogUmFpbERpcmVjdGlvbi5JbmJvdW5kLFxyXG4gIC8vICAgICAgICAgICByZXN1bHRJbmRpZmllcnM6IFtpZGVudGlmaWVyXSxcclxuICAvLyAgICAgICAgICAgcmVzdWx0SW5kaWZpZXJzUHJpY2VzOiBpZGVudGlmaWVyT2JqLFxyXG4gIC8vICAgICAgICAgICBjaGlsZDogdHJ1ZSxcclxuICAvLyAgICAgICAgICAgdGlja2V0SWQsXHJcbiAgLy8gICAgICAgICAgIHNlbGVjdGVkSW5kaWNpZXM6IFtdLFxyXG4gIC8vICAgICAgICAgICBkaXNhYmxlZEluZGljaWVzOiBbXVxyXG4gIC8vICAgICAgICAgfSBhcyBhbnk7XHJcbiAgLy8gICAgICAgICB0aWNrZXRzW3RrdC50eXBlXS5jaGlsZHJlbi5wdXNoKGNoaWxkVGlja2V0KTtcclxuICAvLyAgICAgICB9IGVsc2UgaWYgKCF0aWNrZXRzW3RrdC50eXBlXSkge1xyXG4gIC8vICAgICAgICAgdGhpcy51cGRhdGVDYW5Db21iaW5lKHRrdCk7XHJcbiAgLy8gICAgICAgICB0aWNrZXRzW3RrdC50eXBlXSA9IHtcclxuICAvLyAgICAgICAgICAgaGVhZGVyOiB0a3QsXHJcbiAgLy8gICAgICAgICAgIGNoaWxkcmVuOiBbXSxcclxuICAvLyAgICAgICAgICAgb3BlbjogZmFsc2UsXHJcbiAgLy8gICAgICAgICAgIGRpcmVjdGlvbjogUmFpbERpcmVjdGlvbi5JbmJvdW5kLFxyXG4gIC8vICAgICAgICAgICByZXN1bHRJbmRpZmllcnM6IFtpZGVudGlmaWVyXSxcclxuICAvLyAgICAgICAgICAgcmVzdWx0SW5kaWZpZXJzUHJpY2VzOiBpZGVudGlmaWVyT2JqLFxyXG4gIC8vICAgICAgICAgICBjaGlsZDogZmFsc2UsXHJcbiAgLy8gICAgICAgICAgIHRpY2tldElkLFxyXG4gIC8vICAgICAgICAgICBzZWxlY3RlZEluZGljaWVzOiBbXSxcclxuICAvLyAgICAgICAgICAgZGlzYWJsZWRJbmRpY2llczogW11cclxuICAvLyAgICAgICAgIH0gYXMgYW55O1xyXG4gIC8vICAgICAgIH0gZWxzZSBpZiAoIXRrdC5wcmljZSB8fCB0a3QucHJpY2UgPT09IHRpY2tldHNbdGt0LnR5cGVdLmhlYWRlci5wcmljZSkge1xyXG4gIC8vICAgICAgICAgdGhpcy51cGRhdGVDYW5Db21iaW5lKHRrdCk7XHJcbiAgLy8gICAgICAgICB0aWNrZXRzW3RrdC50eXBlXS5yZXN1bHRJbmRpZmllcnMucHVzaChpZGVudGlmaWVyKTtcclxuICAvLyAgICAgICAgIGlkZW50aWZpZXJPYmpbaWRlbnRpZmllcl0uaXNDaGlsZCA9IGZhbHNlO1xyXG4gIC8vICAgICAgICAgdGlja2V0c1t0a3QudHlwZV0ucmVzdWx0SW5kaWZpZXJzUHJpY2VzID0ge1xyXG4gIC8vICAgICAgICAgICAuLi50aWNrZXRzW3RrdC50eXBlXS5yZXN1bHRJbmRpZmllcnNQcmljZXMsXHJcbiAgLy8gICAgICAgICAgIC4uLmlkZW50aWZpZXJPYmpcclxuICAvLyAgICAgICAgIH07XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9KTtcclxuICAvLyAgIH0pO1xyXG5cclxuICAvLyAgIGxldCBjb21iaW5lVGlja2V0cyA9IHsgLi4udGlja2V0cyB9O1xyXG4gIC8vICAgdGlja2V0cyA9IHRoaXMuY29tYmluZUNoaWxkVGlja2V0cyhjb21iaW5lVGlja2V0cyk7XHJcblxyXG4gIC8vICAgLy8gY29uc29sZS5sb2coJ2dyb3VwczogJywgdGlja2V0cyk7XHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZygnQ2FuIENvbWJpbmU6ICcsIHRoaXMuX2NhbkNvbWJpbmUpO1xyXG4gIC8vICAgcmV0dXJuIHRpY2tldHM7XHJcbiAgLy8gfVxyXG5cclxuICBjb21iaW5lQ2hpbGRUaWNrZXRzKHRpY2tldHM6IFJhaWxUaWNrZXRHcm91cHMpOiBSYWlsVGlja2V0R3JvdXBzIHtcclxuICAgIGNvbnN0IHZhbHVlcyA9IE9iamVjdC52YWx1ZXModGlja2V0cyk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBjaGlsZE9iamVjdDogeyBba2V5OiBzdHJpbmddOiBSYWlsVGlja2V0R3JvdXAgfSA9IHt9O1xyXG5cclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB2YWx1ZXNbaV0uY2hpbGRyZW4ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBjb25zdCBjaGlsZCA9IHZhbHVlc1tpXS5jaGlsZHJlbltqXTtcclxuICAgICAgICBjb25zdCBmYXJlSWRlbnRpZmllciA9IGNoaWxkLmhlYWRlci5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllcjtcclxuICAgICAgICBpZiAoY2hpbGRPYmplY3RbZmFyZUlkZW50aWZpZXJdKSB7XHJcbiAgICAgICAgICBjaGlsZE9iamVjdFtmYXJlSWRlbnRpZmllcl0ucmVzdWx0SW5kaWZpZXJzLnB1c2goXHJcbiAgICAgICAgICAgIGNoaWxkLnJlc3VsdEluZGlmaWVyc1swXVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNoaWxkT2JqZWN0W2ZhcmVJZGVudGlmaWVyXS5yZXN1bHRJbmRpZmllcnNQcmljZXMgPSB7XHJcbiAgICAgICAgICAgIC4uLmNoaWxkT2JqZWN0W2ZhcmVJZGVudGlmaWVyXS5yZXN1bHRJbmRpZmllcnNQcmljZXMsXHJcbiAgICAgICAgICAgIC4uLmNoaWxkLnJlc3VsdEluZGlmaWVyc1ByaWNlc1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY2hpbGRPYmplY3RbZmFyZUlkZW50aWZpZXJdID0gY2hpbGQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKGNoaWxkT2JqZWN0KTtcclxuICAgICAgLy8gY29uc29sZS5sb2codmFsdWVzW2ldWydoZWFkZXInXVsndHlwZSddKTtcclxuICAgICAgdGlja2V0c1t2YWx1ZXNbaV0uaGVhZGVyLnR5cGVdLmNoaWxkcmVuID0gT2JqZWN0LnZhbHVlcyhjaGlsZE9iamVjdCk7XHJcbiAgICB9XHJcbiAgICAvLyB0aWNrZXRzID0gdGhpcy5zb3J0VGlja2V0Q2hpbGRyZW5QcmljZXModGlja2V0cyk7XHJcbiAgICByZXR1cm4gdGlja2V0cztcclxuICB9XHJcbiAgc2V0VGlja2V0c0dyb3VwcyhyZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uW10pOiBhbnkge1xyXG4gICAgbGV0IHRpY2tldEdyb3VwczogYW55ID0ge307XHJcbiAgICByZXN1bHRzLmZvckVhY2goKG91dDogSXJsSm91cm5leU9wdGlvbikgPT4ge1xyXG4gICAgICBvdXQucHJvdmlkZXJzLmZvckVhY2goKHByb3Y6IElybFByb3ZpZGVyKSA9PiB7XHJcbiAgICAgICAgcHJvdi50aWNrZXRPcHRpb25zLmZvckVhY2goKHRrdDogSXJsVGlja2V0T3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICB0aWNrZXRHcm91cHNbdGt0LnR5cGVdXHJcbiAgICAgICAgICAgID8gdGlja2V0R3JvdXBzW3RrdC50eXBlXS5wdXNoKHRrdClcclxuICAgICAgICAgICAgOiAodGlja2V0R3JvdXBzW3RrdC50eXBlXSA9IFt0a3RdKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aWNrZXRHcm91cHM7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhcclxuICAgIHByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiB2b2lkIHsgfVxyXG5cclxuICB1cGRhdGVDYW5Db21iaW5lKHRrdDogSXJsVGlja2V0T3B0aW9uKTogdm9pZCB7XHJcbiAgICAodGt0LmlkZW50aWZpZXJzLmFsbG93ZWRXaXRoIHx8IFtdKS5mb3JFYWNoKChhbGxvd2VkKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5fY2FuQ29tYmluZVt0a3QudHlwZV1bYWxsb3dlZC5qb3VybmV5SWRlbnRpZmllcl0pIHtcclxuICAgICAgICB0aGlzLl9jYW5Db21iaW5lW3RrdC50eXBlXVthbGxvd2VkLmpvdXJuZXlJZGVudGlmaWVyXSA9IFtcclxuICAgICAgICAgIGFsbG93ZWQuZmFyZUlkZW50aWZpZXJcclxuICAgICAgICBdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2NhbkNvbWJpbmVbdGt0LnR5cGVdW2FsbG93ZWQuam91cm5leUlkZW50aWZpZXJdLnB1c2goXHJcbiAgICAgICAgICBhbGxvd2VkLmZhcmVJZGVudGlmaWVyXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyB0b2dnbGVUaWNrZXRTZWxlY3QoXHJcbiAgLy8gICB0aWNrZXQ6IElybFRpY2tldEdyb3VwLFxyXG4gIC8vICAgd2F5OiAnZGVwYXJ0cycgfCAncmV0dXJucycsXHJcbiAgLy8gICB0aW1lU2xvdElkOiBzdHJpbmcsXHJcbiAgLy8gICB0aWNrZXRJZDogc3RyaW5nLFxyXG4gIC8vICAgZmFyZUlkZW50aWZpZXI6IHN0cmluZyxcclxuICAvLyAgIHRpY2tldHNHcm91cHM6IElybFRpY2tldEdyb3Vwc1xyXG4gIC8vICk6IElybFRpY2tldEdyb3VwcyB7XHJcbiAgLy8gICBpZiAoIXRpY2tldCkge1xyXG4gIC8vICAgICByZXR1cm47XHJcbiAgLy8gICB9XHJcbiAgLy8gICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGlja2V0c0dyb3Vwcyk7XHJcbiAgLy8gICBsZXQgc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xyXG4gIC8vICAgbGV0IGRlcGFydHNUaWNrZXQ6IElybFRpY2tldE9wdGlvbltdID0gW107XHJcbiAgLy8gICBsZXQgcmV0dXJuVGlja2V0OiBJcmxUaWNrZXRPcHRpb25bXSA9IFtdO1xyXG4gIC8vICAgbGV0IGlzVW5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gIC8vICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcclxuICAvLyAgICAgbGV0IGdyb3VwID0gdGlja2V0c0dyb3Vwc1trZXldIGFzIFJhaWxUaWNrZXRHcm91cDtcclxuXHJcbiAgLy8gICAgIGlmIChcclxuICAvLyAgICAgICBncm91cC50aWNrZXRJZCA9PT0gdGlja2V0SWQgJiZcclxuICAvLyAgICAgICBncm91cC5zZWxlY3RlZEluZGljaWVzLmluY2x1ZGVzKHRpbWVTbG90SWQpXHJcbiAgLy8gICAgICkge1xyXG4gIC8vICAgICAgIGlmICh3YXkgPT09ICdkZXBhcnRzJykge1xyXG4gIC8vICAgICAgICAgZ3JvdXAuc2VsZWN0ZWRJbmRpY2llcyA9IFtdO1xyXG4gIC8vICAgICAgICAgZGVwYXJ0c1RpY2tldCA9IFtdO1xyXG4gIC8vICAgICAgICAgcmV0dXJuVGlja2V0ID0gW107XHJcbiAgLy8gICAgICAgICB0aGlzLl9jaG9zZW5JbmJvdW5kVGlja2V0ID0gbnVsbDtcclxuICAvLyAgICAgICAgIHRoaXMuX2Nob3NlbkluYm91bmRKb3VybmV5ID0gbnVsbDtcclxuICAvLyAgICAgICAgIGdyb3VwLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XHJcbiAgLy8gICAgICAgICAgIGNoaWxkLnNlbGVjdGVkSW5kaWNpZXMgPSBbXTtcclxuICAvLyAgICAgICAgIH0pO1xyXG4gIC8vICAgICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgICBncm91cC5zZWxlY3RlZEluZGljaWVzID0gZ3JvdXAuc2VsZWN0ZWRJbmRpY2llcy5maWx0ZXIoXHJcbiAgLy8gICAgICAgICAgIChJbmRpY2llcykgPT4gSW5kaWNpZXMgIT09IHRpbWVTbG90SWRcclxuICAvLyAgICAgICAgICk7XHJcbiAgLy8gICAgICAgICByZXR1cm5UaWNrZXQgPSByZXR1cm5UaWNrZXQuZmlsdGVyKFxyXG4gIC8vICAgICAgICAgICAoSW5kaWNpZXMpID0+IEluZGljaWVzICE9PSBncm91cC5oZWFkZXJcclxuICAvLyAgICAgICAgICk7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgIGlmIChcclxuICAvLyAgICAgICAgIGdyb3VwLnRpY2tldElkID09PSB0aWNrZXRJZCAmJlxyXG4gIC8vICAgICAgICAgZ3JvdXAuaGVhZGVyLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyID09PSBmYXJlSWRlbnRpZmllciAmJlxyXG4gIC8vICAgICAgICAgd2F5ID09PSAnZGVwYXJ0cydcclxuICAvLyAgICAgICApIHtcclxuICAvLyAgICAgICAgIGdyb3VwID0gdGhpcy5jbGVhclVubmVlZGVkVGlja2V0cyh3YXksIGdyb3VwLCB0aW1lU2xvdElkKTtcclxuICAvLyAgICAgICAgIGdyb3VwLnNlbGVjdGVkSW5kaWNpZXMucHVzaCh0aW1lU2xvdElkKTtcclxuICAvLyAgICAgICAgIHdheSA9PT0gJ2RlcGFydHMnXHJcbiAgLy8gICAgICAgICAgID8gZGVwYXJ0c1RpY2tldC5wdXNoKGdyb3VwLmhlYWRlcilcclxuICAvLyAgICAgICAgICAgOiByZXR1cm5UaWNrZXQucHVzaChncm91cC5oZWFkZXIpO1xyXG4gIC8vICAgICAgICAgc2VsZWN0ZWRUaWNrZXQgPSBncm91cC5oZWFkZXI7XHJcbiAgLy8gICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgIC8vIG1heSBoYXZlIHRvIG1vZGlmeSB0aGlzIGZvciBkdWFsIHNpbmdsZXNcclxuICAvLyAgICAgICAgIGlmICh3YXkgPT09ICdkZXBhcnRzJykge1xyXG4gIC8vICAgICAgICAgICBncm91cC5zZWxlY3RlZEluZGljaWVzID0gW107XHJcbiAgLy8gICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICBzZWxlY3RlZFRpY2tldCA9IGdyb3VwLmhlYWRlcjtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9XHJcblxyXG4gIC8vICAgICAgIGdyb3VwLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XHJcbiAgLy8gICAgICAgICBpZiAoY2hpbGQuc2VsZWN0ZWRJbmRpY2llcy5pbmNsdWRlcyh0aW1lU2xvdElkKSkge1xyXG4gIC8vICAgICAgICAgICBpZiAod2F5ID09PSAnZGVwYXJ0cycpIHtcclxuICAvLyAgICAgICAgICAgICBjaGlsZC5zZWxlY3RlZEluZGljaWVzID0gW107XHJcbiAgLy8gICAgICAgICAgICAgZGVwYXJ0c1RpY2tldCA9IFtdO1xyXG4gIC8vICAgICAgICAgICAgIHJldHVyblRpY2tldCA9IFtdO1xyXG4gIC8vICAgICAgICAgICAgIHRoaXMuX2Nob3NlbkluYm91bmRUaWNrZXQgPSBudWxsO1xyXG4gIC8vICAgICAgICAgICAgIHRoaXMuX2Nob3NlbkluYm91bmRKb3VybmV5ID0gbnVsbDtcclxuICAvLyAgICAgICAgICAgICBpc1Vuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gIC8vICAgICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICAgIGNoaWxkLnNlbGVjdGVkSW5kaWNpZXMgPSBjaGlsZC5zZWxlY3RlZEluZGljaWVzLmZpbHRlcihcclxuICAvLyAgICAgICAgICAgICAgIChJbmRpY2llcykgPT4gSW5kaWNpZXMgIT09IHRpbWVTbG90SWRcclxuICAvLyAgICAgICAgICAgICApO1xyXG4gIC8vICAgICAgICAgICAgIHJldHVyblRpY2tldCA9IHJldHVyblRpY2tldC5maWx0ZXIoXHJcbiAgLy8gICAgICAgICAgICAgICAoSW5kaWNpZXMpID0+IEluZGljaWVzICE9PSBncm91cC5oZWFkZXJcclxuICAvLyAgICAgICAgICAgICApO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICBpZiAoXHJcbiAgLy8gICAgICAgICAgICAgY2hpbGQudGlja2V0SWQgPT09IHRpY2tldElkICYmXHJcbiAgLy8gICAgICAgICAgICAgY2hpbGQuaGVhZGVyLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyID09PSBmYXJlSWRlbnRpZmllclxyXG4gIC8vICAgICAgICAgICApIHtcclxuICAvLyAgICAgICAgICAgICBpZiAoXHJcbiAgLy8gICAgICAgICAgICAgICAod2F5ID09PSAnZGVwYXJ0cycgJiZcclxuICAvLyAgICAgICAgICAgICAgICAgY2hpbGQuZGlyZWN0aW9uICE9PSBSYWlsRGlyZWN0aW9uLkluYm91bmQpIHx8XHJcbiAgLy8gICAgICAgICAgICAgICAod2F5ICE9PSAnZGVwYXJ0cycgJiYgY2hpbGQuZGlyZWN0aW9uID09PSBSYWlsRGlyZWN0aW9uLkluYm91bmQpXHJcbiAgLy8gICAgICAgICAgICAgKSB7XHJcbiAgLy8gICAgICAgICAgICAgICBjaGlsZCA9IHRoaXMuY2xlYXJVbm5lZWRlZFRpY2tldHMod2F5LCBjaGlsZCwgdGltZVNsb3RJZCk7XHJcbiAgLy8gICAgICAgICAgICAgICBjaGlsZC5zZWxlY3RlZEluZGljaWVzLnB1c2godGltZVNsb3RJZCk7XHJcbiAgLy8gICAgICAgICAgICAgICB3YXkgPT09ICdkZXBhcnRzJ1xyXG4gIC8vICAgICAgICAgICAgICAgICA/IGRlcGFydHNUaWNrZXQucHVzaChjaGlsZC5oZWFkZXIpXHJcbiAgLy8gICAgICAgICAgICAgICAgIDogcmV0dXJuVGlja2V0LnB1c2goY2hpbGQuaGVhZGVyKTtcclxuICAvLyAgICAgICAgICAgICAgIHNlbGVjdGVkVGlja2V0ID0gY2hpbGQuaGVhZGVyO1xyXG4gIC8vICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNVbnNlbGVjdGVkKSB7XHJcbiAgLy8gICAgICAgICAgICAgICBjaGlsZC5zZWxlY3RlZEluZGljaWVzID0gW107XHJcbiAgLy8gICAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICAgIGNoaWxkLnNlbGVjdGVkSW5kaWNpZXMgPSBbXTtcclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH0pO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KTtcclxuXHJcbiAgLy8gICAvLyBub3cgd2UgbmVlZCB0byBtYXJrIHRpY2tldHMgYXMgZGlzYWJsZWQgaWYgdGhleSBhcmUgcmV0dXJucyB0aGF0IGRvIG5vdCBtYXRjaCB0aGUgc2VsZWN0ZWQgcmV0dXJuXHJcbiAgLy8gICAvLyBvciBvbiBvdmVybGFwcGluZyB0aW1lc1xyXG4gIC8vICAgaWYgKHdheSA9PT0gJ2RlcGFydHMnKSB7XHJcbiAgLy8gICAgIHRoaXMuX2Nob3Nlbk91dGJvdW5kVGlja2V0ID0gdGhpcy5oZWxwZXJzLmNsb25lKHNlbGVjdGVkVGlja2V0KTtcclxuXHJcbiAgLy8gICAgIC8vIG5vdyBnbyBvdmVyIHRoZSBmdWxsIHJlc3VsdHMgYW5kIGZpbmQgdGhlIG1hdGNoaW5nIHRpbWVzbG90XHJcbiAgLy8gICAgIGRlcGFydHNUaWNrZXQubGVuZ3RoXHJcbiAgLy8gICAgICAgPyAodGhpcy5fY2hvc2VuT3V0Ym91bmRKb3VybmV5ID0gdGhpcy5yZXN1bHRzLnZhbHVlWzBdLm91dGJvdW5kLmZpbmQoXHJcbiAgLy8gICAgICAgICAgIChvdXQ6IFJhaWxKb3VybmV5T3B0aW9uKSA9PiB7XHJcbiAgLy8gICAgICAgICAgICAgcmV0dXJuIG91dC5pZGVudGlmaWVycy5qb3VybmV5SWRlbnRpZmllciA9PT0gdGltZVNsb3RJZDtcclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgKSlcclxuICAvLyAgICAgICA6ICh0aGlzLl9jaG9zZW5PdXRib3VuZEpvdXJuZXkgPSBudWxsKTtcclxuXHJcbiAgLy8gICAgIGlmIChcclxuICAvLyAgICAgICB0aGlzLl9jaG9zZW5JbmJvdW5kVGlja2V0ICYmXHJcbiAgLy8gICAgICAgdGhpcy5fY2hvc2VuT3V0Ym91bmRUaWNrZXQuc2luZ2xlT3JSZXR1cm4gPT09ICdSZXR1cm4nICYmXHJcbiAgLy8gICAgICAgdGhpcy5fY2hvc2VuT3V0Ym91bmRUaWNrZXQuaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXIgIT09XHJcbiAgLy8gICAgICAgICB0aGlzLl9jaG9zZW5JbmJvdW5kVGlja2V0LmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXHJcbiAgLy8gICAgICkge1xyXG4gIC8vICAgICAgIGNvbnNvbGUud2FybignKysrIENhbm5vdCBjb21iaW5lIGZhcmVzLCBjbGVhcmluZyBpbmJvdW5kLi4uICsrKycpO1xyXG4gIC8vICAgICAgIHRoaXMuX2Nob3NlbkluYm91bmRUaWNrZXQgPSBudWxsO1xyXG4gIC8vICAgICAgIHRoaXMuX2Nob3NlbkluYm91bmRKb3VybmV5ID0gbnVsbDtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSBlbHNlIGlmICh3YXkgPT09ICdyZXR1cm5zJykge1xyXG4gIC8vICAgICB0aGlzLl9jaG9zZW5JbmJvdW5kVGlja2V0ID0gdGhpcy5oZWxwZXJzLmNsb25lKHNlbGVjdGVkVGlja2V0KTtcclxuXHJcbiAgLy8gICAgIHRoaXMuX2Nob3NlbkluYm91bmRUaWNrZXRcclxuICAvLyAgICAgICA/ICh0aGlzLl9jaG9zZW5JbmJvdW5kSm91cm5leSA9IHRoaXMucmVzdWx0cy52YWx1ZVswXS5yZXR1cm4uZmluZChcclxuICAvLyAgICAgICAgICAgKGluVDogUmFpbEpvdXJuZXlPcHRpb24pID0+IHtcclxuICAvLyAgICAgICAgICAgICByZXR1cm4gaW5ULmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyID09PSB0aW1lU2xvdElkO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICApKVxyXG4gIC8vICAgICAgIDogKHRoaXMuX2Nob3NlbkluYm91bmRKb3VybmV5ID0gbnVsbCk7XHJcbiAgLy8gICB9XHJcblxyXG4gIC8vICAgY29uc29sZS5sb2codGhpcy5jaG9zZW5PdXRib3VuZEpvdXJuZXkpO1xyXG4gIC8vICAgY29uc29sZS5sb2codGhpcy5fY2hvc2VuSW5ib3VuZEpvdXJuZXkpO1xyXG4gIC8vICAgcmV0dXJuIHRpY2tldHNHcm91cHM7XHJcbiAgLy8gfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBkZXRlcm1pbmUgaWYgYSBmYXJlIGNhbiBiZSBjb21iaW5lZCB3aXRoIHdoYXQgd2UgY3VycmVudGx5IGhhdmUgc2VsZWN0ZWRcclxuICAgKi9cclxuICAvLyBjYW5Db21iaW5lKGpvdXJuZXlJZGVudGlmaWVyOiBzdHJpbmcsIGZhcmVJZGVudGlmaWVyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAvLyAgIC8vIG1heSBoYXZlIHRvIG1vZGlmeSB0aGlzIGZvciBkdWFsIHNpbmdsZXMgbGF0ZXIgb25cclxuICAvLyAgIGlmIChcclxuICAvLyAgICAgdGhpcy5fY2hvc2VuT3V0Ym91bmRUaWNrZXQgJiZcclxuICAvLyAgICAgdGhpcy5fY2hvc2VuT3V0Ym91bmRUaWNrZXQuc2luZ2xlT3JSZXR1cm4gPT09ICdSZXR1cm4nICYmXHJcbiAgLy8gICAgIE51bWJlcihqb3VybmV5SWRlbnRpZmllcikgPiA1XHJcbiAgLy8gICApIHtcclxuICAvLyAgICAgLy8gZ3JlYXRlciB0aGFuIDUgb25seSBhcyB3ZSBhcmUgbm90IGdvaW5nIHRvIHJlc3RyaWN0IG91dGJvdW5kc1xyXG4gIC8vICAgICBpZiAoXHJcbiAgLy8gICAgICAgdGhpcy5fY2FuQ29tYmluZVt0aGlzLl9jaG9zZW5PdXRib3VuZFRpY2tldC50eXBlXVtcclxuICAvLyAgICAgICAgIE51bWJlcihqb3VybmV5SWRlbnRpZmllcilcclxuICAvLyAgICAgICBdPy5pbmNsdWRlcyhmYXJlSWRlbnRpZmllcikgJiZcclxuICAvLyAgICAgICB0aGlzLl9jaG9zZW5PdXRib3VuZFRpY2tldC5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllciA9PT0gZmFyZUlkZW50aWZpZXJcclxuICAvLyAgICAgKSB7XHJcbiAgLy8gICAgICAgcmV0dXJuIHRydWU7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgICAgcmV0dXJuIGZhbHNlO1xyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIHJldHVybiBmYWxzZTtcclxuICAvLyB9XHJcblxyXG4gIGNsZWFyVW5uZWVkZWRUaWNrZXRzKFxyXG4gICAgd2F5OiBzdHJpbmcsXHJcbiAgICBncm91cDogUmFpbFRpY2tldEdyb3VwLFxyXG4gICAgdGltZVNsb3RJZDogc3RyaW5nXHJcbiAgKTogUmFpbFRpY2tldEdyb3VwIHtcclxuICAgIGlmICh3YXkgPT09ICdyZXR1cm5zJykge1xyXG4gICAgICBncm91cC5zZWxlY3RlZEluZGljaWVzID0gZ3JvdXAuc2VsZWN0ZWRJbmRpY2llcy5maWx0ZXIoXHJcbiAgICAgICAgKGluZGljaWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIE51bWJlcihpbmRpY2llKSA8PSA1IHx8IGluZGljaWUgPT09IHRpbWVTbG90SWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZ3JvdXAuc2VsZWN0ZWRJbmRpY2llcyA9IGdyb3VwLnNlbGVjdGVkSW5kaWNpZXMuZmlsdGVyKFxyXG4gICAgICAgIChpbmRpY2llOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHJldHVybiBOdW1iZXIoaW5kaWNpZSkgPiA1IHx8IGluZGljaWUgPT09IHRpbWVTbG90SWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBncm91cDtcclxuICB9XHJcblxyXG4gIC8vIGdldFJhaWxTdGF0aW9uKFxyXG4gIC8vICAgY29kZTogc3RyaW5nLFxyXG4gIC8vICAgaXNMb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cclxuICAvLyApOiBPYnNlcnZhYmxlPElybFN0YXRpb24+IHtcclxuICAvLyAgIGlmIChjb2RlLmxlbmd0aCA9PT0gMykge1xyXG4gIC8vICAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XHJcbiAgLy8gICAgIHJldHVybiB0aGlzLmdldFJhaWxTdGF0aW9uRmV0Y2hlci5mZXRjaExpc3QoeyBjb2RlIH0pLnBpcGUoXHJcbiAgLy8gICAgICAgdGFwKCgpID0+IGlzTG9hZGluZz8ubmV4dChmYWxzZSkpLFxyXG4gIC8vICAgICAgIHRha2UoMSlcclxuICAvLyAgICAgKTtcclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHJldHVybiBvZigpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0U2VsZWN0ZWRpcmxUaWNrZXRPcHRpb24oXHJcbiAgLy8gICBpcmxKb3VybmV5T3B0aW9uOiBJcmxKb3VybmV5T3B0aW9uLFxyXG4gIC8vICAgaXJsVGlja2V0R3JvdXA6IElybFRpY2tldEdyb3VwLFxyXG4gIC8vICAgcHJvdmlkZXJJbmRleDogbnVtYmVyXHJcbiAgLy8gKTogSXJsVGlja2V0T3B0aW9uIHtcclxuICAvLyAgIHJldHVybiBpcmxKb3VybmV5T3B0aW9uLnByb3ZpZGVyc1twcm92aWRlckluZGV4XS50aWNrZXRPcHRpb25zLmZpbmQoXHJcbiAgLy8gICAgICh0aWNrZXRPcHRpb24pID0+XHJcbiAgLy8gICAgICAgdGlja2V0T3B0aW9uLnR5cGUgPT09IGlybFRpY2tldEdyb3VwLmhlYWRlci50eXBlICYmXHJcbiAgLy8gICAgICAgdGlja2V0T3B0aW9uLnByaWNlID09PSBpcmxUaWNrZXRHcm91cC5oZWFkZXIucHJpY2VcclxuICAvLyAgICk7XHJcbiAgLy8gfVxyXG5cclxuICBnZXRMZWdzRnJvbVJhaWxKb3VybmV5T3B0aW9uKHJhaWxKb3VybmV5T3B0aW9uOiBJcmxKb3VybmV5T3B0aW9uKTogYW55W10ge1xyXG4gICAgbGV0IGxlZ3M6IGFueVtdID0gW107XHJcbiAgICBpZiAocmFpbEpvdXJuZXlPcHRpb24/LnNlZ21lbnRzLmxlbmd0aCkge1xyXG4gICAgICBsZWdzID0gcmFpbEpvdXJuZXlPcHRpb24uc2VnbWVudHMubWFwKChzZWdtZW50KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG9wZXJhdG9yOiBzZWdtZW50Lm9wZXJhdG9yLFxyXG4gICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IHNlZ21lbnQuZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogc2VnbWVudC5kZXBhcnQsXHJcbiAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IHNlZ21lbnQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IHNlZ21lbnQuYXJyaXZlXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGVncztcclxuICB9XHJcblxyXG4gIGFzeW5jIGFkZFNpbmdsZUpvdXJuZXlUb0Jhc2tldChcclxuICAgIHNlcnZpY2VJZDogc3RyaW5nLFxyXG4gICAgcmFpbFF1ZXJ5OiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyxcclxuICAgIGlybEpvdXJuZXlPcHRpb246IElybFRpY2tldCxcclxuICAgIC8vIHJhaWxUaWNrZXRHcm91cDogSXJsVGlja2V0R3JvdXBcclxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnNvbGUubG9nKHNlcnZpY2VJZCxyYWlsUXVlcnksaXJsSm91cm5leU9wdGlvbilcclxuICAgIC8vIGlmIChpcmxKb3VybmV5T3B0aW9uLnVuc2VsbGFibGUpIHtcclxuICAgIC8vICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAvLyB9XHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIGlmIChiYXNrZXQpIHtcclxuICAgICAgLy8gY29uc3Qgc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24gPSB0aGlzLmdldFNlbGVjdGVkSXJsVGlja2V0T3B0aW9uKFxyXG4gICAgICAvLyAgIGlybEpvdXJuZXlPcHRpb24sXHJcbiAgICAgIC8vICAgcmFpbFRpY2tldEdyb3VwLFxyXG4gICAgICAvLyAgIDBcclxuICAgICAgLy8gKTtcclxuICAgICAgLy8gY29uc3QgbGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihyYWlsSm91cm5leU9wdGlvbik7XHJcbiAgICAgIC8vIGNvbnN0IHRpY2tldFF1ZXVlTGlzdCA9IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uLnRpY2tldFF1ZXVlTGlzdC5tYXAoXHJcbiAgICAgIC8vICAgKHRpY2tldFF1ZXVlTGlzdCkgPT4ge1xyXG4gICAgICAvLyAgICAgcmV0dXJuIHtcclxuICAgICAgLy8gICAgICAgaWQ6IHRpY2tldFF1ZXVlTGlzdC5pZCxcclxuICAgICAgLy8gICAgICAgbmFtZTogdGlja2V0UXVldWVMaXN0Lm5hbWUsXHJcbiAgICAgIC8vICAgICAgIHR5cGU6IHRpY2tldFF1ZXVlTGlzdC50eXBlXHJcbiAgICAgIC8vICAgICB9O1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gKTtcclxuICAgIC8vICAgY29uc3QgYmFza2V0SXRlbSA9IHtcclxuICAgIC8vICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcclxuICAgIC8vICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQsXHJcbiAgICAvLyAgICAgZGV0YWlsOiB7XHJcbiAgICAvLyAgICAgICAvLyBhY2NvdW50c0xpc3Q6IGlybEpvdXJuZXlPcHRpb24uYWNjb3VudHNMaXN0Lm1hcChcclxuICAgIC8vICAgICAgIC8vICAgKGFjY291bnQ6IFJhaWxBY2NvdW50KSA9PiB7XHJcbiAgICAvLyAgICAgICAvLyAgICAgcmV0dXJuIHsgaWQ6IGFjY291bnQuaWQsIGRlc2NyaXB0aW9uOiBhY2NvdW50LmRlc2NyaXB0aW9uIH07XHJcbiAgICAvLyAgICAgICAvLyAgIH1cclxuICAgIC8vICAgICAgIC8vICksXHJcbiAgICAvLyAgICAgICBvdXR3YXJkRGV0YWlsOiB7XHJcbiAgICAvLyAgICAgICAgIGFycml2YWxEYXRlVGltZTogcmFpbEpvdXJuZXlPcHRpb24uYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAvLyAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogcmFpbEpvdXJuZXlPcHRpb24udG8sXHJcbiAgICAvLyAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiByYWlsSm91cm5leU9wdGlvbi5kZXBhcnREYXRlVGltZSxcclxuICAgIC8vICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IHJhaWxKb3VybmV5T3B0aW9uLmZyb20sXHJcbiAgICAvLyAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgLy8gICAgICAgICAgIHtcclxuICAgIC8vICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogcmFpbEpvdXJuZXlPcHRpb24ucHJvdmlkZXJzWzBdLm5hbWUsXHJcbiAgICAvLyAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogc2VsZWN0ZWRSYWlsVGlja2V0T3B0aW9uLnR5cGUsXHJcbiAgICAvLyAgICAgICAgICAgICBwcmljZTogc2VsZWN0ZWRSYWlsVGlja2V0T3B0aW9uLnByaWNlLFxyXG4gICAgLy8gICAgICAgICAgICAgbGVnc1xyXG4gICAgLy8gICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgXVxyXG4gICAgLy8gICAgICAgfSxcclxuICAgIC8vICAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjpcclxuICAgIC8vICAgICAgICAgcmFpbEpvdXJuZXlPcHRpb24uaWRlbnRpZmllcnMudHJhbnNhY3Rpb25JZGVudGlmaWVyLFxyXG4gICAgLy8gICAgICAgb3V0Ym91bmQ6IHtcclxuICAgIC8vICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbXHJcbiAgICAvLyAgICAgICAgICAgc2VsZWN0ZWRSYWlsVGlja2V0T3B0aW9uLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXHJcbiAgICAvLyAgICAgICAgIF0sXHJcbiAgICAvLyAgICAgICAgIGpvdXJuZXlJZGVudGlmaWVyOiBzZWxlY3RlZFJhaWxUaWNrZXRPcHRpb24uaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXJcclxuICAgIC8vICAgICAgIH0sXHJcbiAgICAvLyAgICAgICB0aWNrZXRRdWV1ZUxpc3RcclxuICAgIC8vICAgICB9LFxyXG4gICAgLy8gICAgIGFkdWx0czogcmFpbFF1ZXJ5LmFkdWx0cyxcclxuICAgIC8vICAgICBwcmljZTogc2VsZWN0ZWRSYWlsVGlja2V0T3B0aW9uLnByaWNlLFxyXG4gICAgLy8gICAgIGN1cnJlbmN5OiBzZWxlY3RlZFJhaWxUaWNrZXRPcHRpb24uY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgLy8gICAgIHNlYXJjaFF1ZXJ5OiByYWlsUXVlcnksXHJcbiAgICAvLyAgICAgLy8gY28yUGVySXRlbTogaXJsSm91cm5leU9wdGlvbi5jbzJQZXJJdGVtLFxyXG4gICAgLy8gICAgIC8vIGNvMlBlclBhc3NlbmdlcjogaXJsSm91cm5leU9wdGlvbi5jbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAvLyAgICAgb3V0Ym91bmREYXRlOiBpcmxKb3VybmV5T3B0aW9uLlxyXG4gICAgLy8gICB9XHJcblxyXG4gICAgLy8gICAvLyBpZiBvdXRUaWNrZXRFeHRyYXMgZXhpc3RzIGFkZCB0aGUgb2JqZWN0IHRvIGJhc2tldEl0ZW1cclxuICAgIC8vICAgaWYgKG91dFRpY2tldEV4dHJhcykge1xyXG4gICAgLy8gICAgIGJhc2tldEl0ZW0uZGV0YWlsLm91dGJvdW5kLnRpY2tldEV4dHJhcyA9IG91dFRpY2tldEV4dHJhcztcclxuICAgIC8vICAgfVxyXG5cclxuICAgIC8vICAgcmV0dXJuIHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgIC8vICAgICBiYXNrZXRJdGVtLFxyXG4gICAgLy8gICAgIGludEJhc2tldCxcclxuICAgIC8vICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAvLyAgICAgdGhpcy50cmF2ZWxsZXJzXHJcbiAgICAvLyAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8vIGFzeW5jIGFkZFJldHVybkpvdXJuZXlUb0Jhc2tldChcclxuICAvLyAgIHNlcnZpY2VJZDogc3RyaW5nLFxyXG4gIC8vICAgcmFpbFF1ZXJ5OiBTZWFyY2hSYWlsUXVlcnlWYXJpYWJsZXMsXHJcbiAgLy8gICBvdXRib3VuZDogUmFpbEpvdXJuZXlPcHRpb24sXHJcbiAgLy8gICBpbmJvdW5kOiBSYWlsSm91cm5leU9wdGlvbixcclxuICAvLyAgIHJhaWxUaWNrZXRHcm91cDogUmFpbFRpY2tldEdyb3VwXHJcbiAgLy8gKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgLy8gICBpZiAob3V0Ym91bmQudW5zZWxsYWJsZSkge1xyXG4gIC8vICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAvLyAgIH1cclxuICAvLyAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gIC8vICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gIC8vICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gIC8vICAgaWYgKGJhc2tldCkge1xyXG4gIC8vICAgICBjb25zdCBzZWxlY3RlZFJhaWxUaWNrZXRPcHRpb24gPSB0aGlzLmdldFNlbGVjdGVkUmFpbFRpY2tldE9wdGlvbihcclxuICAvLyAgICAgICBvdXRib3VuZCxcclxuICAvLyAgICAgICByYWlsVGlja2V0R3JvdXAsXHJcbiAgLy8gICAgICAgMFxyXG4gIC8vICAgICApO1xyXG4gIC8vICAgICBjb25zdCBvdXRib3VuZExlZ3MgPSB0aGlzLmdldExlZ3NGcm9tUmFpbEpvdXJuZXlPcHRpb24ob3V0Ym91bmQpO1xyXG4gIC8vICAgICBjb25zdCBpbmJvdW5kTGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21SYWlsSm91cm5leU9wdGlvbihpbmJvdW5kKTtcclxuICAvLyAgICAgY29uc3QgdGlja2V0UXVldWVMaXN0ID0gc2VsZWN0ZWRSYWlsVGlja2V0T3B0aW9uLnRpY2tldFF1ZXVlTGlzdC5tYXAoXHJcbiAgLy8gICAgICAgKHRpY2tldFF1ZXVlTGlzdDE6IFJhaWxUaWNrZXRRdWV1ZSkgPT4ge1xyXG4gIC8vICAgICAgICAgcmV0dXJuIHtcclxuICAvLyAgICAgICAgICAgaWQ6IHRpY2tldFF1ZXVlTGlzdDEuaWQsXHJcbiAgLy8gICAgICAgICAgIG5hbWU6IHRpY2tldFF1ZXVlTGlzdDEubmFtZSxcclxuICAvLyAgICAgICAgICAgdHlwZTogdGlja2V0UXVldWVMaXN0MS50eXBlXHJcbiAgLy8gICAgICAgICB9O1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgKTtcclxuXHJcbiAgLy8gICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgLy8gICAgICAge1xyXG4gIC8vICAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXHJcbiAgLy8gICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQsXHJcbiAgLy8gICAgICAgICBkZXRhaWw6IHtcclxuICAvLyAgICAgICAgICAgb3V0d2FyZERldGFpbDoge1xyXG4gIC8vICAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogb3V0Ym91bmQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgLy8gICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBvdXRib3VuZC50byxcclxuICAvLyAgICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogb3V0Ym91bmQuZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgLy8gICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IG91dGJvdW5kLmZyb20sXHJcbiAgLy8gICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXHJcbiAgLy8gICAgICAgICAgICAgICB7XHJcbiAgLy8gICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogb3V0Ym91bmQucHJvdmlkZXJzWzBdLm5hbWUsXHJcbiAgLy8gICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBzZWxlY3RlZFJhaWxUaWNrZXRPcHRpb24udHlwZSxcclxuICAvLyAgICAgICAgICAgICAgICAgcHJpY2U6IHNlbGVjdGVkUmFpbFRpY2tldE9wdGlvbi5wcmljZSxcclxuICAvLyAgICAgICAgICAgICAgICAgbGVnczogb3V0Ym91bmRMZWdzXHJcbiAgLy8gICAgICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICAgICAgXVxyXG4gIC8vICAgICAgICAgICB9LFxyXG4gIC8vICAgICAgICAgICBpbndhcmREZXRhaWw6IHtcclxuICAvLyAgICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IGluYm91bmQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgLy8gICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBpbmJvdW5kLnRvLFxyXG4gIC8vICAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBpbmJvdW5kLmRlcGFydERhdGVUaW1lLFxyXG4gIC8vICAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBpbmJvdW5kLmZyb20sXHJcbiAgLy8gICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXHJcbiAgLy8gICAgICAgICAgICAgICB7XHJcbiAgLy8gICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogaW5ib3VuZC5wcm92aWRlcnNbMF0ubmFtZSxcclxuICAvLyAgICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IHNlbGVjdGVkUmFpbFRpY2tldE9wdGlvbi50eXBlLFxyXG4gIC8vICAgICAgICAgICAgICAgICBsZWdzOiBpbmJvdW5kTGVnc1xyXG4gIC8vICAgICAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICAgIF1cclxuICAvLyAgICAgICAgICAgfSxcclxuICAvLyAgICAgICAgICAgdHJhbnNhY3Rpb25JZGVudGlmaWVyOiBvdXRib3VuZC5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgLy8gICAgICAgICAgIG91dGJvdW5kOiB7XHJcbiAgLy8gICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbXHJcbiAgLy8gICAgICAgICAgICAgICBzZWxlY3RlZFJhaWxUaWNrZXRPcHRpb24uaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJcclxuICAvLyAgICAgICAgICAgICBdLFxyXG4gIC8vICAgICAgICAgICAgIGpvdXJuZXlJZGVudGlmaWVyOlxyXG4gIC8vICAgICAgICAgICAgICAgc2VsZWN0ZWRSYWlsVGlja2V0T3B0aW9uLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyXHJcbiAgLy8gICAgICAgICAgIH0sXHJcbiAgLy8gICAgICAgICAgIHRpY2tldFF1ZXVlTGlzdFxyXG4gIC8vICAgICAgICAgfSxcclxuICAvLyAgICAgICAgIGFkdWx0czogcmFpbFF1ZXJ5LmFkdWx0cyxcclxuICAvLyAgICAgICAgIHByaWNlOiByYWlsVGlja2V0R3JvdXAuaGVhZGVyLnByaWNlLFxyXG4gIC8vICAgICAgICAgY3VycmVuY3k6IHNlbGVjdGVkUmFpbFRpY2tldE9wdGlvbi5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgLy8gICAgICAgICBzZWFyY2hRdWVyeTogcmFpbFF1ZXJ5LFxyXG4gIC8vICAgICAgICAgY28yUGVySXRlbTogb3V0Ym91bmQuY28yUGVySXRlbSxcclxuICAvLyAgICAgICAgIGNvMlBlclBhc3Nlbmdlcjogb3V0Ym91bmQuY28yUGVyUGFzc2VuZ2VyXHJcbiAgLy8gICAgICAgfSxcclxuICAvLyAgICAgICBpbnRCYXNrZXQsXHJcbiAgLy8gICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gIC8vICAgICAgIHRoaXMudHJhdmVsbGVyc1xyXG4gIC8vICAgICApO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBzb3J0VGlja2V0UHJpY2VzKHRpY2tldHM6IFRpY2tldEdyb3Vwcyk6IFRpY2tldEdyb3VwcyB7XHJcbiAgLy8gICBjb25zdCBzb3J0VGlja2V0UHJpY2VzID0geyAuLi50aWNrZXRzIH07XHJcbiAgLy8gICBPYmplY3Qua2V5cyhzb3J0VGlja2V0UHJpY2VzKS5tYXAoKGtleSkgPT4ge1xyXG4gIC8vICAgICBzb3J0VGlja2V0UHJpY2VzW2tleV0uc29ydCgoYTogSXJsVGlja2V0T3B0aW9uLCBiOiBJcmxUaWNrZXRPcHRpb24pID0+IHtcclxuICAvLyAgICAgICBjb25zdCBwcmljZUEgPSBhLnByaWNlLFxyXG4gIC8vICAgICAgICAgcHJpY2VCID0gYi5wcmljZTtcclxuICAvLyAgICAgICByZXR1cm4gcHJpY2VBIDwgcHJpY2VCID8gLTEgOiBwcmljZUEgPiBwcmljZUIgPyAxIDogMDtcclxuICAvLyAgICAgfSk7XHJcbiAgLy8gICB9KTtcclxuICAvLyAgIHJldHVybiBzb3J0VGlja2V0UHJpY2VzO1xyXG4gIC8vIC8vIH1cclxuICAvLyBzb3J0VGlja2V0Q2hpbGRyZW5QcmljZXModGlja2V0czogUmFpbFRpY2tldEdyb3Vwcyk6IFJhaWxUaWNrZXRHcm91cHMge1xyXG4gIC8vICAgY29uc3Qgc29ydFRpY2tldFByaWNlcyA9IHsgLi4udGlja2V0cyB9O1xyXG4gIC8vICAgT2JqZWN0LmtleXMoc29ydFRpY2tldFByaWNlcykubWFwKChrZXkpID0+IHtcclxuICAvLyAgICAgc29ydFRpY2tldFByaWNlc1trZXldLmNoaWxkcmVuLnNvcnQoXHJcbiAgLy8gICAgICAgKGE6IFJhaWxUaWNrZXRHcm91cCwgYjogUmFpbFRpY2tldEdyb3VwKSA9PiB7XHJcbiAgLy8gICAgICAgICBjb25zdCBwcmljZUEgPSBhLmhlYWRlci5wcmljZSxcclxuICAvLyAgICAgICAgICAgcHJpY2VCID0gYi5oZWFkZXIucHJpY2U7XHJcbiAgLy8gICAgICAgICByZXR1cm4gcHJpY2VBIDwgcHJpY2VCID8gLTEgOiBwcmljZUEgPiBwcmljZUIgPyAxIDogMDtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgICk7XHJcbiAgLy8gICB9KTtcclxuICAvLyAgIHJldHVybiBzb3J0VGlja2V0UHJpY2VzO1xyXG4gIC8vIH1cclxuICB1cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uc1tdKTogSUNoZWFwZXN0UHJpY2Uge1xyXG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBjdXJyZW5jeSA9XHJcbiAgICAgIHJlc3VsdHNbMF0ub3V0Ym91bmRbMF0ucHJvdmlkZXJzWzBdLmNoZWFwZXN0VGlja2V0LmN1cnJlbmN5O1xyXG4gICAgY29uc3QgcHJpY2UgPSB0aGlzLmZpbmRDaGVhcGVzdFRpY2tldChyZXN1bHRzKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGFtb3VudDogcHJpY2UsXHJcbiAgICAgIGN1cnJlbmN5Q29kZTogY3VycmVuY3lcclxuICAgIH07XHJcbiAgfVxyXG4gIGZpbmRDaGVhcGVzdFRpY2tldChyZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uc1tdKTogbnVtYmVyIHtcclxuICAgIHRoaXMuX2NoZWFwZXN0Rmlyc3QgPSBudWxsO1xyXG4gICAgdGhpcy5fY2hlYXBlc3RTdGFuZGFyZCA9IG51bGw7XHJcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgIGxldCBjaGVhcGVzdEFycjogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgICByZXN1bHRzLm1hcCgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHJlc3VsdC5vdXRib3VuZC5tYXAoKG91dCkgPT4ge1xyXG4gICAgICAgIG91dC5wcm92aWRlcnMubWFwKCh0a3QpID0+IHtcclxuICAgICAgICAgIGxldCBjaGVhcGVzdFRpY2tldDogbnVtYmVyID0gdGt0LmNoZWFwZXN0VGlja2V0LnByaWNlO1xyXG4gICAgICAgICAgdGt0LnRpY2tldE9wdGlvbnMubWFwKCh0a3RPcHRpb24pID0+IHtcclxuICAgICAgICAgICAgbGV0IHRrdFByaWNlID0gdGt0T3B0aW9uLnByaWNlO1xyXG4gICAgICAgICAgICBsZXQgdGt0Q2xhc3MgPSB0a3RPcHRpb24uY2xhc3M7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICB0a3RDbGFzcyA9PT0gJ0ZpcnN0JyAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLl9jaGVhcGVzdEZpcnN0Py5wcmljZSA+IHRrdFByaWNlIHx8ICF0aGlzLl9jaGVhcGVzdEZpcnN0KVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLl9jaGVhcGVzdEZpcnN0ID0gdGt0T3B0aW9uO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgIHRrdENsYXNzID09PSAnU3RhbmRhcmQnICYmXHJcbiAgICAgICAgICAgICAgKHRoaXMuX2NoZWFwZXN0U3RhbmRhcmQ/LnByaWNlID4gdGt0UHJpY2UgfHxcclxuICAgICAgICAgICAgICAgICF0aGlzLl9jaGVhcGVzdFN0YW5kYXJkKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLl9jaGVhcGVzdFN0YW5kYXJkID0gdGt0T3B0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0a3RQcmljZSA9PT0gY2hlYXBlc3RUaWNrZXQpIHtcclxuICAgICAgICAgICAgICBjaGVhcGVzdEFyci5wdXNoKGNoZWFwZXN0VGlja2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gTWF0aC5taW4oLi4uY2hlYXBlc3RBcnIpO1xyXG4gIH1cclxufVxyXG4iXX0=
|