@sabstravtech/obtservices 0.0.22042501 → 0.0.22051001
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 +8 -0
- package/angular/lib/vendor/fetchers/fast-track-quote.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-all-airlines.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-cancellation-info.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-car-hire-providers.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-hotel-chains.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-irl-supplier-station.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-rail-providers.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/send-offline-notification.fetcher.d.ts +7 -0
- package/angular/lib/vendor/services/enterprise-basket.service.d.ts +4 -3
- package/angular/lib/vendor/services/search.service.d.ts +10 -3
- package/angular/lib/vendor/services/ticket-queue.service.d.ts +6 -0
- package/angular/lib/vendor/services/user.service.d.ts +5 -3
- package/angular/lib/vendor/types/graphql.angular.types.d.ts +438 -16
- package/angular/lib/vendor/updaters/edit-user.updater.d.ts +6 -0
- package/angular/lib/vendor/updaters/set-user-language-updater.d.ts +6 -0
- package/angular/sabstravtech-obtservices-angular.d.ts +16 -13
- package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
- package/angular/services.d.ts +1 -0
- package/base/fetchers.d.ts +10 -0
- package/base/interfaces.d.ts +2 -0
- package/base/lib/vendor/classes/cabhire-enterprise-search.d.ts +2 -1
- package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/classes/eurostar-enterprise-search.d.ts +8 -2
- package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +57 -0
- package/base/lib/vendor/classes/flight-enterprise-search.d.ts +2 -1
- package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +3 -1
- package/base/lib/vendor/classes/irl-enterprise-search.d.ts +27 -7
- package/base/lib/vendor/classes/lounges-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/classes/management-info-and-valid.d.ts +6 -1
- package/base/lib/vendor/classes/modal-types.enum.d.ts +2 -0
- package/base/lib/vendor/classes/parking-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/classes/rail-enterprise-search.d.ts +3 -2
- package/base/lib/vendor/fetchers/fast-track-quote.fetcher.d.ts +23 -0
- package/base/lib/vendor/fetchers/get-all-airlines.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/get-cancellation-info.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/get-car-hire-providers.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/get-hotel-chains.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/get-irl-supplier-station.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/get-rail-providers.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/send-offline-notification.fetcher.d.ts +21 -0
- package/base/lib/vendor/fetchers/user-fetcher.d.ts +2 -3
- package/base/lib/vendor/interfaces/Icabhire-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Ienterprise-basket.service.d.ts +6 -3
- package/base/lib/vendor/interfaces/Ieurostar-enterprise-search.d.ts +2 -0
- package/base/lib/vendor/interfaces/Ifast-track-enterprise-search.d.ts +26 -0
- package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +2 -0
- package/base/lib/vendor/interfaces/Iirl-enterprise-search.d.ts +11 -3
- package/base/lib/vendor/interfaces/Ilounges-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Iparking-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Irail-enterprise-search.d.ts +1 -0
- package/base/lib/vendor/interfaces/Isearch.service.d.ts +7 -1
- package/base/lib/vendor/interfaces/Iuser.service.d.ts +2 -1
- package/base/lib/vendor/interfaces/eurostar-search-arg.interface.d.ts +2 -0
- package/base/lib/vendor/interfaces/fast-track-filters.interface.d.ts +4 -0
- package/base/lib/vendor/interfaces/rail-basket-item.interface.d.ts +2 -0
- package/base/lib/vendor/interfaces/summary-interface.d.ts +2 -0
- package/base/lib/vendor/interfaces/user.data.d.ts +1 -0
- package/base/lib/vendor/models/traveller.object.d.ts +1 -0
- package/base/lib/vendor/services/enterprise-basket.service.d.ts +13 -6
- package/base/lib/vendor/services/requires-reason.service.d.ts +20 -0
- package/base/lib/vendor/services/search.service.d.ts +30 -5
- package/base/lib/vendor/services/user.service.d.ts +12 -5
- package/base/lib/vendor/services/webtoken.service.d.ts +1 -0
- package/base/lib/vendor/types/graphql.types.d.ts +398 -16
- package/base/lib/vendor/types/types.d.ts +53 -16
- package/base/lib/vendor/updaters/edit-user-updater.d.ts +19 -0
- package/base/lib/vendor/updaters/set-user-language-updater.d.ts +19 -0
- package/base/sabstravtech-obtservices-base.d.ts +5 -5
- package/base/sabstravtech-obtservices-base.metadata.json +1 -1
- package/base/services.d.ts +1 -0
- package/base/updaters.d.ts +2 -0
- package/bundles/sabstravtech-obtservices-angular.umd.js +499 -91
- 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 +3204 -176
- 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 +9 -1
- package/esm2015/angular/lib/vendor/fetchers/fast-track-quote.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-all-airlines.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-cancellation-info.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-car-hire-providers.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-hotel-chains.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-irl-supplier-station.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-rail-providers.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/send-offline-notification.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/services/enterprise-basket.service.js +8 -5
- package/esm2015/angular/lib/vendor/services/http-call.service.js +6 -2
- package/esm2015/angular/lib/vendor/services/search.service.js +58 -37
- package/esm2015/angular/lib/vendor/services/ticket-queue.service.js +23 -0
- package/esm2015/angular/lib/vendor/services/user.service.js +12 -6
- package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +583 -5
- package/esm2015/angular/lib/vendor/updaters/edit-user.updater.js +22 -0
- package/esm2015/angular/lib/vendor/updaters/set-user-language-updater.js +22 -0
- package/esm2015/angular/obtservices.module.js +3 -1
- package/esm2015/angular/sabstravtech-obtservices-angular.js +17 -14
- package/esm2015/angular/services.js +2 -1
- package/esm2015/base/fetchers.js +11 -1
- package/esm2015/base/interfaces.js +3 -1
- package/esm2015/base/lib/vendor/classes/basket-info-mi-details.impl.js +4 -1
- package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +37 -5
- package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +46 -16
- package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +77 -10
- package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +296 -0
- package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +44 -5
- package/esm2015/base/lib/vendor/classes/helpers.js +6 -2
- package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +58 -19
- package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +214 -25
- package/esm2015/base/lib/vendor/classes/lounges-enterprise-search.js +22 -6
- package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +1 -1
- package/esm2015/base/lib/vendor/classes/modal-types.enum.js +3 -1
- package/esm2015/base/lib/vendor/classes/parking-enterprise-search.js +27 -7
- package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +62 -13
- package/esm2015/base/lib/vendor/classes/supplementary-booking-info-impl.js +2 -2
- package/esm2015/base/lib/vendor/fetchers/fast-track-quote.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-all-airlines.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-cancellation-info.fetcher.js +10 -0
- package/esm2015/base/lib/vendor/fetchers/get-car-hire-providers.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-hotel-chains.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-irl-supplier-station.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/get-rail-providers.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/send-offline-notification.fetcher.js +11 -0
- package/esm2015/base/lib/vendor/fetchers/user-fetcher.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Icabhire-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Icarhire-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/Ifast-track-enterprise-search.js +2 -0
- package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iirl-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Ilounges-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iparking-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Irail-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Isearch.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/Iuser.service.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/eurostar-search-arg.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/fast-track-filters.interface.js +2 -0
- package/esm2015/base/lib/vendor/interfaces/rail-basket-item.interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/summary-interface.js +1 -1
- package/esm2015/base/lib/vendor/interfaces/user.data.js +1 -1
- package/esm2015/base/lib/vendor/models/traveller.object.js +3 -2
- package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +63 -17
- package/esm2015/base/lib/vendor/services/hotel-avallibility.service.js +16 -12
- package/esm2015/base/lib/vendor/services/requires-reason.service.js +49 -0
- package/esm2015/base/lib/vendor/services/search.service.js +166 -20
- package/esm2015/base/lib/vendor/services/user.service.js +44 -6
- package/esm2015/base/lib/vendor/services/webtoken.service.js +9 -5
- package/esm2015/base/lib/vendor/types/graphql.types.js +9 -1
- package/esm2015/base/lib/vendor/types/types.js +1704 -1
- package/esm2015/base/lib/vendor/updaters/edit-user-updater.js +11 -0
- package/esm2015/base/lib/vendor/updaters/set-user-language-updater.js +11 -0
- package/esm2015/base/sabstravtech-obtservices-base.js +6 -5
- package/esm2015/base/services.js +2 -1
- package/esm2015/base/updaters.js +3 -1
- package/fesm2015/sabstravtech-obtservices-angular.js +790 -19
- package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
- package/fesm2015/sabstravtech-obtservices-base.js +3041 -169
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +1 -1
|
@@ -20,12 +20,13 @@ export var ClassType;
|
|
|
20
20
|
ClassType["First_Class"] = "1st Class";
|
|
21
21
|
})(ClassType || (ClassType = {}));
|
|
22
22
|
export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
23
|
-
constructor(Irlfetcher, irlDiscountCardsFetcher, helpers, basketService, storageService, searchService) {
|
|
23
|
+
constructor(Irlfetcher, irlDiscountCardsFetcher, helpers, basketService, storageService, searchService, getIrlSupplierStationFetcher) {
|
|
24
24
|
super(storageService, helpers);
|
|
25
25
|
this.Irlfetcher = Irlfetcher;
|
|
26
26
|
this.irlDiscountCardsFetcher = irlDiscountCardsFetcher;
|
|
27
27
|
this.basketService = basketService;
|
|
28
28
|
this.searchService = searchService;
|
|
29
|
+
this.getIrlSupplierStationFetcher = getIrlSupplierStationFetcher;
|
|
29
30
|
this.resultsSessionName = IRLEnterpriseSearch.STORAGE_SESSION_RESULTS;
|
|
30
31
|
this.multiResultsSessionName = IRLEnterpriseSearch.STORAGE_SESSION_RESULTS;
|
|
31
32
|
this._sortArray = [
|
|
@@ -78,18 +79,17 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
78
79
|
};
|
|
79
80
|
this._supplier = null;
|
|
80
81
|
this._countryCode = null;
|
|
81
|
-
this._class =
|
|
82
|
+
this._class = IrlClass.All;
|
|
82
83
|
this._outboundDepartureDateTime = null;
|
|
83
84
|
this._departureLocationId = null;
|
|
84
85
|
this._arrivalLocationId = null;
|
|
85
|
-
this._adults = 0;
|
|
86
86
|
this._children = 0;
|
|
87
87
|
this._cheapestStandard = null;
|
|
88
88
|
this._cheapestFirst = null;
|
|
89
89
|
this._returnDepartureDateTime = null;
|
|
90
90
|
this._ageRange = null;
|
|
91
|
-
this._priceDir =
|
|
92
|
-
this._dateDir =
|
|
91
|
+
this._priceDir = true;
|
|
92
|
+
this._dateDir = true;
|
|
93
93
|
this._irlDiscountCardsArray = [];
|
|
94
94
|
// !date and time is handled differently for LU
|
|
95
95
|
this._outbound_date = null;
|
|
@@ -99,6 +99,8 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
99
99
|
this._offline = false;
|
|
100
100
|
this._irlClass = IrlClass.All;
|
|
101
101
|
this._journeytype = IrlJourneyType.SingleJourney;
|
|
102
|
+
this._trainNumber = null;
|
|
103
|
+
this._additionalInstructions = null;
|
|
102
104
|
const data = storageService.getSessionItem(IRLEnterpriseSearch.STORAGE_SESSION_PARAMS) || {
|
|
103
105
|
query: {},
|
|
104
106
|
tempParams: {},
|
|
@@ -125,6 +127,7 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
125
127
|
// searchService.startSearches();
|
|
126
128
|
// }
|
|
127
129
|
this._cheapestResultPrice = this.updateLowestPrice(results);
|
|
130
|
+
this.fullResults = results;
|
|
128
131
|
this.results.next(results || []);
|
|
129
132
|
}
|
|
130
133
|
get outboundJourneyOptions() {
|
|
@@ -226,10 +229,10 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
226
229
|
this._arrivalLocationId = data;
|
|
227
230
|
}
|
|
228
231
|
get adults() {
|
|
229
|
-
return this.
|
|
232
|
+
return this.tempParams.adults;
|
|
230
233
|
}
|
|
231
234
|
set adults(data) {
|
|
232
|
-
this.
|
|
235
|
+
this.tempParams.adults = data;
|
|
233
236
|
}
|
|
234
237
|
get children() {
|
|
235
238
|
return this._children;
|
|
@@ -400,6 +403,18 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
400
403
|
get sortDropdownValues() {
|
|
401
404
|
return this._sortArray;
|
|
402
405
|
}
|
|
406
|
+
get trainNumber() {
|
|
407
|
+
return this._trainNumber;
|
|
408
|
+
}
|
|
409
|
+
set trainNumber(data) {
|
|
410
|
+
this._trainNumber = data;
|
|
411
|
+
}
|
|
412
|
+
get additionalInstructions() {
|
|
413
|
+
return this._additionalInstructions;
|
|
414
|
+
}
|
|
415
|
+
set additionalInstructions(data) {
|
|
416
|
+
this._additionalInstructions = data;
|
|
417
|
+
}
|
|
403
418
|
processResults(results) {
|
|
404
419
|
var _a;
|
|
405
420
|
(_a = results[0]) === null || _a === void 0 ? void 0 : _a.outbound.forEach((item) => {
|
|
@@ -518,10 +533,16 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
518
533
|
}
|
|
519
534
|
getSearchQuery() {
|
|
520
535
|
// this.travellers = travellers;
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
536
|
+
if (!this.travellers) {
|
|
537
|
+
this.noOfAdults = this.adults;
|
|
538
|
+
this.noOfChildren = this.children;
|
|
539
|
+
}
|
|
540
|
+
else {
|
|
541
|
+
this.noOfAdults = this.travellers.filter((traveller) => traveller.ageType === ages.Adult ||
|
|
542
|
+
traveller.ageType === ages.Youth ||
|
|
543
|
+
traveller.ageType === ages.Senior).length;
|
|
544
|
+
this.noOfChildren = this.travellers.filter((traveller) => traveller.ageType === ages.Child).length;
|
|
545
|
+
}
|
|
525
546
|
if (!this.supplier && this.travellingFrom.name) {
|
|
526
547
|
this.supplier = this.travellingFrom.railstation.supplier;
|
|
527
548
|
this.getIrlDiscountCards().subscribe((data) => {
|
|
@@ -532,7 +553,7 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
532
553
|
supplier: this.supplier,
|
|
533
554
|
countryCode: 'GB',
|
|
534
555
|
irlDiscountCards: this.discountCard ? this.discountCard.id : null,
|
|
535
|
-
class: this.
|
|
556
|
+
class: this.class,
|
|
536
557
|
outboundDepartureDateTime: this.tempParams.outboundDepartureDateTime,
|
|
537
558
|
departureLocationId: this._travellingFrom,
|
|
538
559
|
arrivalLocationId: this._travellingTo,
|
|
@@ -636,15 +657,16 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
636
657
|
// co2PerPassenger: irlJourneyOption.co2PerPassenger,
|
|
637
658
|
outboundDate: irlJourneyOption.departDateTime
|
|
638
659
|
};
|
|
639
|
-
return this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers
|
|
660
|
+
return this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers, false // TODO
|
|
661
|
+
);
|
|
640
662
|
}
|
|
641
663
|
return Promise.resolve(false);
|
|
642
664
|
});
|
|
643
665
|
}
|
|
644
|
-
addReturnJourneyToBasket(serviceId, irlQuery, inbound, inJourneyOption) {
|
|
666
|
+
addReturnJourneyToBasket(serviceId, irlQuery, inbound, inJourneyOption, outboundTicket, outboundJourney) {
|
|
645
667
|
return __awaiter(this, void 0, void 0, function* () {
|
|
646
|
-
const outbound = this.outboundTicket;
|
|
647
|
-
const outJourneyOption = this.outboundJourneyOptions;
|
|
668
|
+
const outbound = outboundTicket ? outboundTicket : this.outboundTicket;
|
|
669
|
+
const outJourneyOption = outboundJourney ? outboundJourney : this.outboundJourneyOptions;
|
|
648
670
|
const intBasket = yield this.basketService.getDefaultBasket();
|
|
649
671
|
const basket = intBasket === null || intBasket === void 0 ? void 0 : intBasket.subject.value;
|
|
650
672
|
if (basket) {
|
|
@@ -682,7 +704,7 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
682
704
|
supplierTickets: [
|
|
683
705
|
{
|
|
684
706
|
supplierName: inJourneyOption.providers[0].name,
|
|
685
|
-
ticketDescription:
|
|
707
|
+
ticketDescription: inbound.type,
|
|
686
708
|
legs: inboundLegs
|
|
687
709
|
}
|
|
688
710
|
]
|
|
@@ -698,7 +720,7 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
698
720
|
termsAndCond: termsAndConditions
|
|
699
721
|
},
|
|
700
722
|
adults: irlQuery.adults,
|
|
701
|
-
price: selectedIrlTicketOption.price,
|
|
723
|
+
price: Number((Number(selectedIrlTicketOption.price) + Number(inbound.price)).toFixed(2)),
|
|
702
724
|
currency: selectedIrlTicketOption.currency,
|
|
703
725
|
searchQuery: irlQuery,
|
|
704
726
|
outboundDate: outJourneyOption.departDateTime
|
|
@@ -706,15 +728,18 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
706
728
|
// co2PerPassenger: outbound.co2PerPassenger
|
|
707
729
|
};
|
|
708
730
|
this.filterSelected();
|
|
709
|
-
|
|
731
|
+
console.log(basketItem);
|
|
732
|
+
return this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers, false // TODO
|
|
733
|
+
);
|
|
710
734
|
}
|
|
711
735
|
return Promise.resolve(false);
|
|
712
736
|
});
|
|
713
737
|
}
|
|
714
738
|
updateLowestPrice(results) {
|
|
739
|
+
var _a, _b, _c, _d;
|
|
715
740
|
if (!results.length)
|
|
716
741
|
return null;
|
|
717
|
-
const currency = results[0].outbound[0].providers[0].cheapestTicket.currency;
|
|
742
|
+
const currency = (_d = (_c = (_b = (_a = results[0]) === null || _a === void 0 ? void 0 : _a.outbound[0]) === null || _b === void 0 ? void 0 : _b.providers[0]) === null || _c === void 0 ? void 0 : _c.cheapestTicket) === null || _d === void 0 ? void 0 : _d.currency;
|
|
718
743
|
const price = this.findCheapestTicket(results);
|
|
719
744
|
return {
|
|
720
745
|
amount: price,
|
|
@@ -759,8 +784,10 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
759
784
|
* @returns
|
|
760
785
|
* @memberof irl-enterprise-search
|
|
761
786
|
*/
|
|
762
|
-
sortByPrice() {
|
|
763
|
-
|
|
787
|
+
sortByPrice(ignoreDirectionChange = false) {
|
|
788
|
+
if (!ignoreDirectionChange) {
|
|
789
|
+
this.priceDir = !this.priceDir;
|
|
790
|
+
}
|
|
764
791
|
const results = this.filterSelected(this._isFiltered);
|
|
765
792
|
const byPrice = (a, b) => {
|
|
766
793
|
return this.priceDir
|
|
@@ -779,8 +806,10 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
779
806
|
* @returns
|
|
780
807
|
* @memberof irl-enterprise-search
|
|
781
808
|
*/
|
|
782
|
-
sortByDate() {
|
|
783
|
-
|
|
809
|
+
sortByDate(ignoreDirection = false) {
|
|
810
|
+
if (!ignoreDirection) {
|
|
811
|
+
this.dateDir = !this.dateDir;
|
|
812
|
+
}
|
|
784
813
|
const results = this.filterSelected(this._isFiltered);
|
|
785
814
|
const byDate = (a, b) => {
|
|
786
815
|
return this.dateDir
|
|
@@ -863,8 +892,168 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
863
892
|
return this.searchService.saveFavouriteSearch(searchInfo);
|
|
864
893
|
}
|
|
865
894
|
}
|
|
895
|
+
generateFilters(results) {
|
|
896
|
+
// first of all we need to find the min price and the max price
|
|
897
|
+
if (!(results === null || results === void 0 ? void 0 : results.length)) {
|
|
898
|
+
return;
|
|
899
|
+
}
|
|
900
|
+
let priceMax = null;
|
|
901
|
+
let priceMin = null;
|
|
902
|
+
let dateDepMin = null;
|
|
903
|
+
let dateDepMax = null;
|
|
904
|
+
let dateArrMin = null;
|
|
905
|
+
let dateArrMax = null;
|
|
906
|
+
let classObject = {};
|
|
907
|
+
let changesObject = {};
|
|
908
|
+
results.forEach(result => {
|
|
909
|
+
result.providers[0].ticketOptions.forEach(ticket => {
|
|
910
|
+
if (!priceMax || priceMax < ticket.price) {
|
|
911
|
+
priceMax = Math.ceil(ticket.price);
|
|
912
|
+
}
|
|
913
|
+
});
|
|
914
|
+
if (!priceMin || priceMin > result.providers[0].cheapestTicket.price) {
|
|
915
|
+
priceMin = Math.floor(result.providers[0].cheapestTicket.price);
|
|
916
|
+
}
|
|
917
|
+
if (!dateDepMin || moment(result.departDateTime).isBefore(moment(dateDepMin))) {
|
|
918
|
+
dateDepMin = Number(moment(result.departDateTime).format('HHmm'));
|
|
919
|
+
}
|
|
920
|
+
if (!dateDepMax || moment(result.departDateTime).isAfter(moment(dateDepMax))) {
|
|
921
|
+
dateDepMax = Number(moment(result.departDateTime).format('HHmm'));
|
|
922
|
+
}
|
|
923
|
+
if (!dateArrMin || moment(result.arriveDateTime).isBefore(moment(dateArrMin))) {
|
|
924
|
+
dateArrMin = Number(moment(result.arriveDateTime).format('HHmm'));
|
|
925
|
+
}
|
|
926
|
+
if (!dateArrMax || moment(result.arriveDateTime).isAfter(moment(dateArrMax))) {
|
|
927
|
+
dateArrMax = Number(moment(result.arriveDateTime).format('HHmm'));
|
|
928
|
+
}
|
|
929
|
+
changesObject[result.segments.length - 1] = {
|
|
930
|
+
key: result.segments.length - 1,
|
|
931
|
+
title: `${result.segments.length - 1} changes`,
|
|
932
|
+
selected: false
|
|
933
|
+
};
|
|
934
|
+
result.providers[0].ticketOptions.forEach(ticket => {
|
|
935
|
+
if (ticket.class === '1') {
|
|
936
|
+
classObject['First'] = {
|
|
937
|
+
key: ClassType.Class_1,
|
|
938
|
+
title: 'First',
|
|
939
|
+
selected: false
|
|
940
|
+
};
|
|
941
|
+
}
|
|
942
|
+
else if (ticket.class === '2') {
|
|
943
|
+
classObject['Second'] = {
|
|
944
|
+
key: ClassType.Class_2,
|
|
945
|
+
title: 'Second',
|
|
946
|
+
selected: false
|
|
947
|
+
};
|
|
948
|
+
}
|
|
949
|
+
});
|
|
950
|
+
});
|
|
951
|
+
const retObject = {
|
|
952
|
+
priceMax,
|
|
953
|
+
priceMin,
|
|
954
|
+
dateArrMax,
|
|
955
|
+
dateArrMin,
|
|
956
|
+
dateDepMax,
|
|
957
|
+
dateDepMin,
|
|
958
|
+
classes: Object.values(classObject),
|
|
959
|
+
changes: Object.values(changesObject)
|
|
960
|
+
};
|
|
961
|
+
console.log(retObject);
|
|
962
|
+
return retObject;
|
|
963
|
+
}
|
|
964
|
+
applyFilters(filters, direction = 'O') {
|
|
965
|
+
const fullResultsCopy = this.helpers.clone(this.fullResults);
|
|
966
|
+
let dirResults;
|
|
967
|
+
switch (direction) {
|
|
968
|
+
case 'O':
|
|
969
|
+
dirResults = fullResultsCopy[0].outbound;
|
|
970
|
+
break;
|
|
971
|
+
case 'I':
|
|
972
|
+
dirResults = fullResultsCopy[0].return;
|
|
973
|
+
break;
|
|
974
|
+
}
|
|
975
|
+
// now first of all - apply the price filters
|
|
976
|
+
dirResults = dirResults.filter(result => {
|
|
977
|
+
const tickets = result.providers[0].ticketOptions.filter(ticket => {
|
|
978
|
+
return ticket.price >= filters.priceMin && ticket.price <= filters.priceMax;
|
|
979
|
+
});
|
|
980
|
+
result.providers[0].ticketOptions = tickets;
|
|
981
|
+
return tickets.length;
|
|
982
|
+
});
|
|
983
|
+
// times
|
|
984
|
+
// dep
|
|
985
|
+
dirResults = dirResults.filter(result => {
|
|
986
|
+
const depTime = Number(moment(result.departDateTime).format('HHmm'));
|
|
987
|
+
return depTime >= filters.dateDepMin && depTime <= filters.dateDepMax;
|
|
988
|
+
});
|
|
989
|
+
// arr
|
|
990
|
+
dirResults = dirResults.filter(result => {
|
|
991
|
+
const arrTime = Number(moment(result.arriveDateTime).format('HHmm'));
|
|
992
|
+
return arrTime >= filters.dateArrMin && arrTime <= filters.dateArrMax;
|
|
993
|
+
});
|
|
994
|
+
// classes
|
|
995
|
+
// first of all determine if any are selected
|
|
996
|
+
const selectedClasses = filters.classes.filter(classF => {
|
|
997
|
+
return classF.selected;
|
|
998
|
+
});
|
|
999
|
+
if (selectedClasses === null || selectedClasses === void 0 ? void 0 : selectedClasses.length) {
|
|
1000
|
+
dirResults = dirResults.filter(result => {
|
|
1001
|
+
const newTickets = [];
|
|
1002
|
+
console.log('og tickets:', result.providers[0].ticketOptions);
|
|
1003
|
+
result.providers[0].ticketOptions.forEach(ticket => {
|
|
1004
|
+
selectedClasses.forEach(classS => {
|
|
1005
|
+
if (ticket.class === classS.key) {
|
|
1006
|
+
newTickets.push(ticket);
|
|
1007
|
+
}
|
|
1008
|
+
});
|
|
1009
|
+
});
|
|
1010
|
+
console.log(newTickets);
|
|
1011
|
+
result.providers[0].ticketOptions = newTickets;
|
|
1012
|
+
return newTickets.length > 0;
|
|
1013
|
+
});
|
|
1014
|
+
}
|
|
1015
|
+
console.log(dirResults);
|
|
1016
|
+
// finally stops
|
|
1017
|
+
const selectedStops = filters.changes.filter(change => {
|
|
1018
|
+
return change.selected;
|
|
1019
|
+
});
|
|
1020
|
+
if (selectedStops.length) {
|
|
1021
|
+
dirResults = dirResults.filter(result => {
|
|
1022
|
+
for (let i = 0; i < selectedStops.length; i++) {
|
|
1023
|
+
if (result.segments.length - 1 === selectedStops[i].key) {
|
|
1024
|
+
return result;
|
|
1025
|
+
}
|
|
1026
|
+
}
|
|
1027
|
+
});
|
|
1028
|
+
}
|
|
1029
|
+
switch (direction) {
|
|
1030
|
+
case 'O':
|
|
1031
|
+
fullResultsCopy[0].outbound = dirResults;
|
|
1032
|
+
break;
|
|
1033
|
+
case 'I':
|
|
1034
|
+
fullResultsCopy[0].return = dirResults;
|
|
1035
|
+
break;
|
|
1036
|
+
}
|
|
1037
|
+
this.results.next(fullResultsCopy);
|
|
1038
|
+
}
|
|
1039
|
+
applyFavourite(fav) {
|
|
1040
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1041
|
+
this.getIrlSupplierStationFetcher.fetchList({ id: fav.departureLocationId }).subscribe(a => {
|
|
1042
|
+
this.travellingFrom = a;
|
|
1043
|
+
});
|
|
1044
|
+
this.getIrlSupplierStationFetcher.fetchList({ id: fav.arrivalLocationId }).subscribe(a => {
|
|
1045
|
+
this.travellingTo = a;
|
|
1046
|
+
});
|
|
1047
|
+
this.adults = fav.adults;
|
|
1048
|
+
this.children = fav.children;
|
|
1049
|
+
this.class = fav.class;
|
|
1050
|
+
this.countryCode = fav.countryCode;
|
|
1051
|
+
this.journeyType = fav.journeyType === "ReturnJourney" ? IrlJourneyType.ReturnJourney : IrlJourneyType.SingleJourney;
|
|
1052
|
+
this.supplier = fav.supplier;
|
|
1053
|
+
});
|
|
1054
|
+
}
|
|
866
1055
|
}
|
|
867
1056
|
IRLEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_irl';
|
|
868
1057
|
IRLEnterpriseSearch.STORAGE_SESSION_RESULTS = 'irl_results';
|
|
869
1058
|
IRLEnterpriseSearch.PASSING_POINT = 'Passing';
|
|
870
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXJsLWVudGVycHJpc2Utc2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2lybC1lbnRlcnByaXNlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQVd6RCxPQUFPLEVBR0wsUUFBUSxFQU1SLFdBQVcsRUFDWCxjQUFjLEVBSWYsTUFBTSx3QkFBd0IsQ0FBQztBQWtCaEMsT0FBTyxFQUFhLElBQUksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUcxRCxNQUFNLENBQU4sSUFBWSxZQUlYO0FBSkQsV0FBWSxZQUFZO0lBQ3RCLG1DQUFtQixDQUFBO0lBQ25CLG1DQUFtQixDQUFBO0lBQ25CLGlDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFKVyxZQUFZLEtBQVosWUFBWSxRQUl2QjtBQVdELE1BQU0sQ0FBTixJQUFZLFNBTVg7QUFORCxXQUFZLFNBQVM7SUFDbkIsMEJBQWEsQ0FBQTtJQUNiLDBCQUFhLENBQUE7SUFDYixxQ0FBcUM7SUFDckMsdUNBQTBCLENBQUE7SUFDMUIsc0NBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQU5XLFNBQVMsS0FBVCxTQUFTLFFBTXBCO0FBRUQsTUFBTSxPQUFPLG1CQUlYLFNBQVEsb0JBSVA7SUFpYkQsWUFDVSxVQUFrQyxFQUNsQyx1QkFBMkQsRUFDbkUsT0FBMkIsRUFDbkIsYUFBK0MsRUFDdkQsY0FBa0MsRUFDMUIsYUFBK0M7UUFFdkQsS0FBSyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMs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NUMsUUFBUTtTQUNULENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsZUFBaUM7O1FBQy9DLE9BQU87WUFDTDtnQkFDRSxJQUFJLEVBQUUsWUFBWTtnQkFDbEIsS0FBSyxjQUFFLGVBQWUsYUFBZixlQUFlLHVCQUFmLGVBQWUsQ0FBRSxTQUFTLENBQUMsQ0FBQywyQ0FBRyxhQUFhLENBQUMsQ0FBQywyQ0FBRyxTQUFTO2FBQ2xFO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtZQUN0QixNQUFNLEtBQUssR0FBNEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzdELE1BQU0sb0JBQW9CLEdBQW1CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxRSxNQUFNLFVBQVUsR0FBRztnQkFDakIsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUU7Z0JBQ25CLFdBQVcsRUFBRSxXQUFXLENBQUMsaUJBQWlCO2dCQUMxQyxVQUFVLEVBQUUsb0JBQW9CO2FBQ2pDLENBQUE7WUFDRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDM0Q7SUFDSCxDQUFDOztBQTlpQ2UsMENBQXNCLEdBQUcsWUFBWSxDQUFDO0FBQ3RDLDJDQUF1QixHQUFHLGFBQWEsQ0FBQztBQUN4QyxpQ0FBYSxHQUFHLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEJhc2VFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi9iYXNlLWVudGVycHJpc2UnO1xyXG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBWYWx1ZURpc3BsYXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZhbHVlLWRpc3BsYXknO1xyXG5pbXBvcnQge1xyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgSXJsUXVvdGVSZXN1bHRBcnJheSxcclxuICBSZWNlbnRTZWFyY2gsXHJcbiAgSXJsVGlja2V0T3B0aW9uV2l0aFNlbGVjdGVkLFxyXG4gIFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHRcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFza2V0SXRlbSxcclxuICBDdXJyZW5jeUNvZGUsXHJcbiAgSXJsQ2xhc3MsXHJcbiAgSXJsSm91cm5leU9wdGlvbixcclxuICBJcmxKb3VybmV5T3B0aW9ucyxcclxuICBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMsXHJcbiAgSXJsVGlja2V0T3B0aW9uLFxyXG4gIFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlLFxyXG4gIElybEpvdXJuZXlUeXBlLFxyXG4gIElybFN1cHBsaWVyLFxyXG4gIElybFRyYXZlbENhcmQsXHJcbiAgSXJsU2VnbWVudFxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VJcmxEaXNjb3VudENhcmRGZXRjaGVyLFxyXG4gIElybERpc2NvdW50Q2FyZEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaXJsLWRpc2NvdW50LWNhcmQtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUlybFF1b3RlRmV0Y2hlcixcclxuICBJcmxRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaXJsLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIElSTEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXHJcbiAgSXJsVGVtcFBhcmFtc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWlybC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciwgYWdlcyB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcclxuaW1wb3J0IHsgU29ydE1ldGhvZCB9IGZyb20gJy4vZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBJSXJsU2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvaXJsLXNlYXJjaC1hcmcuaW50ZXJmYWNlJztcclxuXHJcbmV4cG9ydCBlbnVtIFNvcnRUeXBlc0lybCB7XHJcbiAgQ2hlYXBlc3RGaXJzdCA9ICdDJyxcclxuICBFYXJsaWVzdEZpcnN0ID0gJ0UnLFxyXG4gIExhdGVzdEZpcnN0ID0gJ0wnXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU29ydFR5cGVJcmwge1xyXG4gIC8qKiBUaXRsZSBkaXNwbGF5ZWQgb24gZHJvcGRvd24gKi9cclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIC8qKiBNZXRob2QgbmFtZSB1c2VkIGJ5IGNvbXBvbmVudCB0byBzb3J0IHJlc3VsdHMgKi9cclxuICBtZXRob2RSZWY6IFNvcnRNZXRob2Q7XHJcbiAgLyoqIEljb24gZGlzcGxheWVkIG9uIGRyb3AgZG93biAqL1xyXG4gIGljb246IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGVudW0gQ2xhc3NUeXBlIHtcclxuICBDbGFzc18xID0gJzEnLFxyXG4gIENsYXNzXzIgPSAnMicsXHJcbiAgLy8gISB0aGVzZSAyIHNob3B1bGQgYmUgcmVtb3ZlZCBsYXRlclxyXG4gIFNlY29uZF9DbGFzcyA9ICcybmQgQ2xhc3MnLFxyXG4gIEZpcnN0X0NsYXNzID0gJzFzdCBDbGFzcydcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIElSTEVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBRIGV4dGVuZHMgSXJsUXVvdGVGZXRjaGVyVHlwZSxcclxuICAgIEdJREZfUSBleHRlbmRzIElybERpc2NvdW50Q2FyZEZldGNoZXJUeXBlXHJcbiAgPlxyXG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8XHJcbiAgICBJcmxUZW1wUGFyYW1zLFxyXG4gICAgSXJsUXVvdGVSZXN1bHRBcnJheSxcclxuICAgIElybFF1b3RlUmVzdWx0QXJyYXlcclxuICA+XHJcbiAgaW1wbGVtZW50cyBJUkxFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlXHJcbntcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdzZWFyY2hfaXJsJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAnaXJsX3Jlc3VsdHMnO1xyXG4gIHN0YXRpYyByZWFkb25seSBQQVNTSU5HX1BPSU5UID0gJ1Bhc3NpbmcnO1xyXG4gIHByaXZhdGUgdHJhdmVsbGVyczogVHJhdmVsbGVyW107XHJcblxyXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPSBJUkxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG4gIHByb3RlY3RlZCBtdWx0aVJlc3VsdHNTZXNzaW9uTmFtZSA9XHJcbiAgICBJUkxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xyXG5cclxuICBwcml2YXRlIF9zb3J0QXJyYXk6IFNvcnRUeXBlSXJsW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiAnUHJpY2UnLFxyXG4gICAgICBtZXRob2RSZWY6IFNvcnRNZXRob2Quc29ydEJ5UHJpY2UsXHJcbiAgICAgIGljb246ICdpY28tZG9sbGFyJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGl0bGU6ICdUaW1lJyxcclxuICAgICAgbWV0aG9kUmVmOiBTb3J0TWV0aG9kLnNvcnRCeURhdGUsXHJcbiAgICAgIGljb246ICdpY28tY2FsZW5kYXInXHJcbiAgICB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIHNlYXJjaFR5cGVzID0gW1xyXG4gICAgeyBkaXNwbGF5OiAnUmV0dXJuJywgdmFsdWU6IElybEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXkgfSxcclxuICAgIHsgZGlzcGxheTogJ09uZS1XYXknLCB2YWx1ZTogSXJsSm91cm5leVR5cGUuU2luZ2xlSm91cm5leSB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIGNsYXNzVHlwZXMgPSBbXHJcbiAgICB7IGRpc3BsYXk6ICdBbnknLCB2YWx1ZTogSXJsQ2xhc3MuQWxsIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdTdGFuZGFyZCcsIHZhbHVlOiBJcmxDbGFzcy5TdGFuZGFyZCB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRmlyc3QnLCB2YWx1ZTogSXJsQ2xhc3MuRmlyc3QgfVxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyBhZ2VSYW5nZXM6IHtcclxuICAgIGtleTogYWdlcztcclxuICAgIHZhbHVlOiBzdHJpbmc7XHJcbiAgfVtdID0gW1xyXG4gICAgeyBrZXk6IGFnZXMuQ2hpbGQsIHZhbHVlOiAnQ2hpbGQgKDAtMyknIH0sXHJcbiAgICB7IGtleTogYWdlcy5DaGlsZCwgdmFsdWU6ICdDaGlsZCAoNC01KScgfSxcclxuICAgIHsga2V5OiBhZ2VzLkNoaWxkLCB2YWx1ZTogJ0NoaWxkICg2LTExKScgfSxcclxuICAgIHsga2V5OiBhZ2VzLllvdXRoLCB2YWx1ZTogJ1lvdXRoICgxMi0xNCknIH0sXHJcbiAgICB7IGtleTogYWdlcy5Zb3V0aCwgdmFsdWU6ICdZb3V0aCAoMTUtMjUpJyB9LFxyXG4gICAgeyBrZXk6IGFnZXMuQWR1bHQsIHZhbHVlOiAnQWR1bHQgKDI2LTU5KScgfSxcclxuICAgIHsga2V5OiBhZ2VzLllvdXRoLCB2YWx1ZTogJ1NlbmlvciAoNjArKScgfVxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyB0cmF2ZWxDYXJkcyA9IFtcclxuICAgIHsgZGlzcGxheTogJ1lvdW5nIHBlcnNvbnMgcmFpbGNhcmQnLCB2YWx1ZTogJ1lORycgfSxcclxuICAgIHsgZGlzcGxheTogJ0Rpc2FiaWxpdHkgcmFpbGNhcmQnLCB2YWx1ZTogJ0RJUycgfSxcclxuICAgIHsgZGlzcGxheTogJ0ZhbWlseSByYWlsY2FyZCcsIHZhbHVlOiAnRkFNJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRm9yY2VzIHJhaWxjYXJkJywgdmFsdWU6ICdITUYnIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdUcmF2ZWwgYWdlbmN5IGRpc2NvdW50JywgdmFsdWU6ICdUQUQnIH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbDtcclxuICBwdWJsaWMgbWluT3V0Ym91bmREYXRlOiBOZ2JEYXRlU3RydWN0ID0ge1xyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxyXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcclxuICB9O1xyXG4gIHB1YmxpYyBtaW5JbmJvdW5kRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXHJcbiAgfTtcclxuICBwcml2YXRlIF90aW1lQXJyYXk6IFZhbHVlRGlzcGxheVtdO1xyXG4gIHByaXZhdGUgX2NhbkNvbWJpbmU6IGFueTtcclxuICBwcml2YXRlIF90cmF2ZWxsaW5nRnJvbTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3RyYXZlbGxpbmdUbzogc3RyaW5nO1xyXG4gIHByb3RlY3RlZCBfb3JpZ2luYWxVc2VyU2VhcmNoOiBJcmxUZW1wUGFyYW1zO1xyXG4gIHByaXZhdGUgX291dGJvdW5kSm91cm5leU9wdGlvbnM6IElybEpvdXJuZXlPcHRpb247XHJcbiAgcHJpdmF0ZSBfaXNGaWx0ZXJlZDogYm9vbGVhbjtcclxuICBnZXQgb3V0Ym91bmRKb3VybmV5T3B0aW9ucygpOiBJcmxKb3VybmV5T3B0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLl9vdXRib3VuZEpvdXJuZXlPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dGJvdW5kSm91cm5leU9wdGlvbnMoZGF0YTogSXJsSm91cm5leU9wdGlvbikge1xyXG4gICAgdGhpcy5fb3V0Ym91bmRKb3VybmV5T3B0aW9ucyA9IGRhdGE7XHJcbiAgfVxyXG4gIF9vdXRib3VuZFRpY2tldDogSXJsVGlja2V0T3B0aW9uV2l0aFNlbGVjdGVkO1xyXG4gIGdldCBvdXRib3VuZFRpY2tldCgpOiBJcmxUaWNrZXRPcHRpb25XaXRoU2VsZWN0ZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kVGlja2V0O1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dGJvdW5kVGlja2V0KGRhdGE6IElybFRpY2tldE9wdGlvbldpdGhTZWxlY3RlZCkge1xyXG4gICAgdGhpcy5fb3V0Ym91bmRUaWNrZXQgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5vT2ZBZHVsdHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5vT2ZBZHVsdHMoYWR1bHRzOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSBhZHVsdHM7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbm9PZkNoaWxkcmVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5vT2ZDaGlsZHJlbihjaGlsZHJlbjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB0cmF2ZWxsaW5nVG8oKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYXJyaXZhbExvY2F0aW9uSWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgdHJhdmVsbGluZ1RvKHR0OiBhbnkpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5hcnJpdmFsTG9jYXRpb25JZCA9IHR0O1xyXG5cclxuICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9ICcnO1xyXG4gICAgaWYgKHR0Py5yYWlsc3RhdGlvbj8uaWQpIHtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ1RvID0gdHQucmFpbHN0YXRpb24uaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRyYXZlbGxpbmdGcm9tKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmRlcGFydHVyZUxvY2F0aW9uSWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgdHJhdmVsbGluZ0Zyb20odHQ6IGFueSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmRlcGFydHVyZUxvY2F0aW9uSWQgPSB0dDtcclxuICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gJyc7XHJcbiAgICBpZiAodHQ/LnJhaWxzdGF0aW9uPy5pZCkge1xyXG4gICAgICB0aGlzLl90cmF2ZWxsaW5nRnJvbSA9IHR0LnJhaWxzdGF0aW9uLmlkO1xyXG4gICAgICB0aGlzLnN1cHBsaWVyID0gdHQucmFpbHN0YXRpb24uc3VwcGxpZXI7XHJcbiAgICAgIHRoaXMuZ2V0SXJsRGlzY291bnRDYXJkcygpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXJsRGlzY291bnRDYXJkc0FycmF5ID0gZGF0YTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc3VwcGxpZXI6IElybFN1cHBsaWVyID0gbnVsbDtcclxuICBnZXQgc3VwcGxpZXIoKTogSXJsU3VwcGxpZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N1cHBsaWVyO1xyXG4gIH1cclxuICBzZXQgc3VwcGxpZXIoZGF0YTogSXJsU3VwcGxpZXIpIHtcclxuICAgIHRoaXMuX3N1cHBsaWVyID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvdW50cnlDb2RlOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCBjb3VudHJ5Q29kZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvdW50cnlDb2RlO1xyXG4gIH1cclxuICBzZXQgY291bnRyeUNvZGUoZGF0YTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9jb3VudHJ5Q29kZSA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbGFzczogSXJsQ2xhc3MgPSBudWxsO1xyXG4gIGdldCBjbGFzcygpOiBJcmxDbGFzcyB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2xhc3M7XHJcbiAgfVxyXG4gIHNldCBjbGFzcyhkYXRhOiBJcmxDbGFzcykge1xyXG4gICAgdGhpcy5fY2xhc3MgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZTogbW9tZW50Lk1vbWVudCA9IG51bGw7XHJcbiAgZ2V0IG91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZTtcclxuICB9XHJcbiAgc2V0IG91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUobmV3RGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lID0gbmV3RGF0ZVRpbWU7XHJcbiAgICBpZiAobmV3RGF0ZVRpbWUgJiYgbmV3RGF0ZVRpbWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMuX291dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUgPSBuZXdEYXRlVGltZTtcclxuICAgICAgdGhpcy5fb3V0Ym91bmRfZGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShuZXdEYXRlVGltZSk7XHJcbiAgICAgIHRoaXMuX291dGJvdW5kX3RpbWUgPSBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgPyBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgOiAnMDcwMCc7XHJcbiAgICB9XHJcbiAgICB0aGlzLl91cGRhdGVPdXRib3VuZERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kZXBhcnR1cmVMb2NhdGlvbklkOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCBkZXBhcnR1cmVMb2NhdGlvbklkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVwYXJ0dXJlTG9jYXRpb25JZDtcclxuICB9XHJcbiAgc2V0IGRlcGFydHVyZUxvY2F0aW9uSWQoZGF0YTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9kZXBhcnR1cmVMb2NhdGlvbklkID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Fycml2YWxMb2NhdGlvbklkOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCBhcnJpdmFsTG9jYXRpb25JZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Fycml2YWxMb2NhdGlvbklkO1xyXG4gIH1cclxuICBzZXQgYXJyaXZhbExvY2F0aW9uSWQoZGF0YTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9hcnJpdmFsTG9jYXRpb25JZCA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hZHVsdHM6IG51bWJlciA9IDA7XHJcbiAgZ2V0IGFkdWx0cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FkdWx0cztcclxuICB9XHJcbiAgc2V0IGFkdWx0cyhkYXRhOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX2FkdWx0cyA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jaGlsZHJlbjogbnVtYmVyID0gMDtcclxuICBnZXQgY2hpbGRyZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbjtcclxuICB9XHJcbiAgc2V0IGNoaWxkcmVuKGRhdGE6IG51bWJlcikge1xyXG4gICAgdGhpcy5fY2hpbGRyZW4gPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2hlYXBlc3RTdGFuZGFyZDogSXJsVGlja2V0T3B0aW9uID0gbnVsbDtcclxuICBnZXQgY2hlYXBlc3RTdGFuZGFyZCgpOiBJcmxUaWNrZXRPcHRpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NoZWFwZXN0U3RhbmRhcmQ7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NoZWFwZXN0Rmlyc3Q6IElybFRpY2tldE9wdGlvbiA9IG51bGw7XHJcbiAgZ2V0IGNoZWFwZXN0Rmlyc3QoKTogSXJsVGlja2V0T3B0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGVhcGVzdEZpcnN0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgPSBudWxsO1xyXG4gIGdldCByZXR1cm5EZXBhcnR1cmVEYXRlVGltZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5EZXBhcnR1cmVEYXRlVGltZTtcclxuICB9XHJcbiAgc2V0IHJldHVybkRlcGFydHVyZURhdGVUaW1lKG5ld0RhdGVUaW1lOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUgPSBuZXdEYXRlVGltZTtcclxuICAgIGlmIChuZXdEYXRlVGltZSAmJiBuZXdEYXRlVGltZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5fcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUgPSBuZXdEYXRlVGltZTtcclxuICAgICAgdGhpcy5fcmV0dXJuX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobmV3RGF0ZVRpbWUpO1xyXG4gICAgICB0aGlzLl9yZXR1cm5fdGltZSA9IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA/IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA6ICcxNjAwJztcclxuICAgIH1cclxuICAgIHRoaXMuX3VwZGF0ZVJldHVybkRhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hZ2VSYW5nZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgYWdlUmFuZ2UoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9hZ2VSYW5nZTtcclxuICB9XHJcbiAgc2V0IGFnZVJhbmdlKGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5fYWdlUmFuZ2UgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJpY2VEaXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBnZXQgcHJpY2VEaXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJpY2VEaXI7XHJcbiAgfVxyXG4gIHNldCBwcmljZURpcihkYXRhOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9wcmljZURpciA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kYXRlRGlyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZ2V0IGRhdGVEaXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0ZURpcjtcclxuICB9XHJcbiAgc2V0IGRhdGVEaXIoZGF0YTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGF0ZURpciA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBnZXQgY2hvc2VuU2VhcmNoQ2xhc3MoKTogSXJsQ2xhc3Mge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jbGFzcztcclxuICB9XHJcblxyXG4gIHNldCBjaG9zZW5TZWFyY2hDbGFzcyhjbGFzc1I6IElybENsYXNzKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2xhc3MgPSBjbGFzc1I7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZGlzY291bnRDYXJkKCk6IElybFRyYXZlbENhcmQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pcmxEaXNjb3VudENhcmRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRpc2NvdW50Q2FyZChkYXRhOiBJcmxUcmF2ZWxDYXJkKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuaXJsRGlzY291bnRDYXJkcyA9IGRhdGE7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pcmxEaXNjb3VudENhcmRzQXJyYXk6IElybFRyYXZlbENhcmRbXSA9IFtdO1xyXG4gIGdldCBpcmxEaXNjb3VudENhcmRzQXJyYXkoKTogSXJsVHJhdmVsQ2FyZFtdIHtcclxuICAgIHJldHVybiB0aGlzLl9pcmxEaXNjb3VudENhcmRzQXJyYXk7XHJcbiAgfVxyXG5cclxuICBzZXQgaXJsRGlzY291bnRDYXJkc0FycmF5KGFycmF5OiBJcmxUcmF2ZWxDYXJkW10pIHtcclxuICAgIHRoaXMuX2lybERpc2NvdW50Q2FyZHNBcnJheSA9IGFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0IG91dEJvdW5kRGF0ZVRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Qm91bmREYXRlVGltZShuZXdEYXRlVGltZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUgPSBtb21lbnQobmV3RGF0ZVRpbWUpO1xyXG5cclxuICAgIHRoaXMubWluSW5ib3VuZERhdGUgPSB7XHJcbiAgICAgIHllYXI6IG5ld0RhdGVUaW1lLnllYXIoKSxcclxuICAgICAgbW9udGg6IG5ld0RhdGVUaW1lLm1vbnRoKCkgKyAxLFxyXG4gICAgICBkYXk6IG5ld0RhdGVUaW1lLmRhdGUoKVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAobmV3RGF0ZVRpbWUgJiYgbmV3RGF0ZVRpbWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMuX291dGJvdW5kX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobmV3RGF0ZVRpbWUpO1xyXG4gICAgICB0aGlzLl9vdXRib3VuZF90aW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgID8gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgIDogJzA3MDAnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lICYmXHJcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lICYmXHJcbiAgICAgIHRoaXMub3V0Qm91bmREYXRlVGltZS5pc0FmdGVyKHRoaXMuaW5Cb3VuZERhdGVUaW1lKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaW5Cb3VuZERhdGVUaW1lID0gdGhpcy5vdXRCb3VuZERhdGVUaW1lLmNsb25lKCkuYWRkKDEsICdkYXknKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaW5Cb3VuZERhdGVUaW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZTtcclxuICB9XHJcblxyXG4gIHNldCBpbkJvdW5kRGF0ZVRpbWUobmV3RGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSA9IG5ld0RhdGVUaW1lO1xyXG4gICAgaWYgKG5ld0RhdGVUaW1lICYmIG5ld0RhdGVUaW1lLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9yZXR1cm5fZGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShuZXdEYXRlVGltZSk7XHJcbiAgICAgIHRoaXMuX3JldHVybl90aW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgID8gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgIDogJzE2MDAnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gIWRhdGUgYW5kIHRpbWUgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSBmb3IgTFVcclxuICBwcml2YXRlIF9vdXRib3VuZF9kYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcclxuXHJcbiAgZ2V0IG91dGJvdW5kX2RhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmRfZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCBvdXRib3VuZF9kYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZF9kYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVPdXRib3VuZERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vdXRib3VuZF90aW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCBvdXRib3VuZF90aW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmRfdGltZTtcclxuICB9XHJcblxyXG4gIHNldCBvdXRib3VuZF90aW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX291dGJvdW5kX3RpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZU91dGJvdW5kRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JldHVybl9kYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcclxuXHJcbiAgZ2V0IHJldHVybl9kYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JldHVybl9kYXRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybl9kYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XHJcbiAgICB0aGlzLl9yZXR1cm5fZGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JldHVybl90aW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCByZXR1cm5fdGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JldHVybl90aW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJldHVybl90aW1lKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3JldHVybl90aW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVSZXR1cm5EYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0aW1lQXJyYXkoKTogVmFsdWVEaXNwbGF5W10ge1xyXG4gICAgdGhpcy5fdGltZUFycmF5ID1cclxuICAgICAgdGhpcy5fdGltZUFycmF5IHx8XHJcbiAgICAgIEFycmF5KDQ4KVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmFsdWU6XHJcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDIpXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSAyKSAqIDMwKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXHJcbiAgICAgICAgICAgIGRpc3BsYXk6XHJcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDIpXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgICAgICc6JyArXHJcbiAgICAgICAgICAgICAgKChpbmRleCAlIDIpICogMzApLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLl90aW1lQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vZmZsaW5lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZ2V0IG9mZmxpbmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fb2ZmbGluZTtcclxuICB9XHJcblxyXG4gIHNldCBvZmZsaW5lKGRhdGE6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX29mZmxpbmUgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXJsQ2xhc3M6IElybENsYXNzID0gSXJsQ2xhc3MuQWxsO1xyXG4gIGdldCBpcmxDbGFzcygpOiBJcmxDbGFzcyB7XHJcbiAgICByZXR1cm4gdGhpcy5faXJsQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgaXJsQ2xhc3MoZGF0YTogSXJsQ2xhc3MpIHtcclxuICAgIHRoaXMuX2lybENsYXNzID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2pvdXJuZXl0eXBlOiBJcmxKb3VybmV5VHlwZSA9IElybEpvdXJuZXlUeXBlLlNpbmdsZUpvdXJuZXk7XHJcbiAgZ2V0IGpvdXJuZXlUeXBlKCk6IElybEpvdXJuZXlUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLl9qb3VybmV5dHlwZTtcclxuICB9XHJcblxyXG4gIHNldCBqb3VybmV5VHlwZShkYXRhOiBJcmxKb3VybmV5VHlwZSkge1xyXG4gICAgdGhpcy5fam91cm5leXR5cGUgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNvcnREcm9wZG93blZhbHVlcygpOiBTb3J0VHlwZUlybFtdIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3J0QXJyYXk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgSXJsZmV0Y2hlcjogQmFzZUlybFF1b3RlRmV0Y2hlcjxRPixcclxuICAgIHByaXZhdGUgaXJsRGlzY291bnRDYXJkc0ZldGNoZXI6IEJhc2VJcmxEaXNjb3VudENhcmRGZXRjaGVyPEdJREZfUT4sXHJcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXHJcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2VcclxuICApIHtcclxuICAgIHN1cGVyKHN0b3JhZ2VTZXJ2aWNlLCBoZWxwZXJzKTtcclxuXHJcbiAgICBjb25zdCBkYXRhOiB7XHJcbiAgICAgIHF1ZXJ5OiB7fTtcclxuICAgICAgdGVtcFBhcmFtczogSXJsVGVtcFBhcmFtcztcclxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiBJcmxUZW1wUGFyYW1zO1xyXG4gICAgfSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxyXG4gICAgICBJUkxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVNcclxuICAgICkgfHwge1xyXG4gICAgICBxdWVyeToge30sXHJcbiAgICAgIHRlbXBQYXJhbXM6IHt9IGFzIElybFRlbXBQYXJhbXMsXHJcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDoge30gYXMgSXJsVGVtcFBhcmFtc1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VJcmxRdWVyeShkYXRhLnRlbXBQYXJhbXMpKTtcclxuICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IGRhdGEub3JpZ2luYWxVc2VyU2VhcmNoO1xyXG5cclxuICAgIGlmIChzZWFyY2hTZXJ2aWNlLnNob3VsZEFkZFRyYXZlbGxlclN1YnNjcmlwdGlvbigpKSB7XHJcbiAgICAgIHNlYXJjaFNlcnZpY2UudHJhdmVsbGVySW5mb3JtYXRpb24uc3Vic2NyaWJlKFxyXG4gICAgICAgICh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcclxuICAgICAgICAgIGlmICh0aGlzLnRyYXZlbGxlcnNbMF0gJiYgIXRoaXMudHJhdmVsbGVyc1swXS5hZ2VUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJhdmVsbGVyc1swXS5hZ2VUeXBlID0gYWdlcy5BZHVsdDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IHNwbGl0VHJhdmVsbGVycyA9IHRoaXMuaGVscGVycy5zZWxlY3RlZFRyYXZlbGxlcnMoXHJcbiAgICAgICAgICAgIHRyYXZlbGxlcnMsXHJcbiAgICAgICAgICAgIFNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHNwbGl0VHJhdmVsbGVycy5hZHVsdHMubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gc3BsaXRUcmF2ZWxsZXJzLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcbiAgICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgY29uc3QgcmVzdWx0cyA9XHJcbiAgICAgIHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0PElybFF1b3RlUmVzdWx0QXJyYXk+KFxyXG4gICAgICAgIHRoaXMucmVzdWx0c1Nlc3Npb25OYW1lXHJcbiAgICAgICkgfHwgW107XHJcbiAgICAvLyBpZiAocmVzdWx0cyA9PSBudWxsICYmIHRoaXMuaXNWYWxpZCkge1xyXG4gICAgLy8gICBzZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICAgIC8vIH1cclxuICAgIHRoaXMuX2NoZWFwZXN0UmVzdWx0UHJpY2UgPSB0aGlzLnVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHMpO1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyB8fCBbXSk7XHJcbiAgfVxyXG4gIGlybERpc2NvdW50Q2FyZHM6IElybFRyYXZlbENhcmQ7XHJcblxyXG4gIHByb3RlY3RlZCBwcm9jZXNzUmVzdWx0cyhyZXN1bHRzOiBJcmxRdW90ZVJlc3VsdEFycmF5KSB7XHJcbiAgICByZXN1bHRzWzBdPy5vdXRib3VuZC5mb3JFYWNoKChpdGVtOiBJcmxKb3VybmV5T3B0aW9uKSA9PiB7XHJcbiAgICAgIGl0ZW0ucHJvdmlkZXJzWzBdLnRpY2tldE9wdGlvbnMubWFwKFxyXG4gICAgICAgICh0aWNrZXQ6IElybFRpY2tldE9wdGlvbldpdGhTZWxlY3RlZCwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgdGlja2V0LnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aWNrZXQuU2hvd0RldGFpbCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGlja2V0LnVpZCA9IGAke3RpY2tldC5pZGVudGlmaWVycy5qb3VybmV5SWRlbnRpZmllcn1fJHtpbmRleCArIDF9YDtcclxuICAgICAgICAgIHJldHVybiB0aWNrZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgICBPYmplY3QuZnJlZXplKHJlc3VsdHMpO1xyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG4gIHByb3RlY3RlZCByZXNldFF1ZXJ5KCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlSXJsUXVlcnkoKSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc1ZhbGlkKCkge1xyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgSVJMRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLFxyXG4gICAgICB7XHJcbiAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyA9IFtdO1xyXG5cclxuICAgIGNvbnN0IG5vdyA9IG1vbWVudCgpO1xyXG5cclxuICAgIGlmICghdGhpcy5fdHJhdmVsbGluZ0Zyb20pIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIEVudGVyIGEgRnJvbSBMb2NhdGlvbi4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX3RyYXZlbGxpbmdUbykge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgRW50ZXIgYSBUbyBMb2NhdGlvbi4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vdXRCb3VuZERhdGVUaW1lPy5pc0JlZm9yZShub3cpKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXHJcbiAgICAgICAgJ0RlcGFydHVyZSBEYXRlL1RpbWUgY2Fubm90IGJlIGluIHRoZSBwYXN0LidcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiAoXHJcbiAgICAvLyAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gSXJsSm91cm5leVR5cGUuUmV0dXJuSm91cm5leVxyXG4gICAgLy8gKSB7XHJcbiAgICAvLyAgIC8vIGNoZWNrIGZvciByZXR1cm4gc3BlY2lmaWMgdmFsaWRhdGlvbnMgaW4gaGVyZVxyXG5cclxuICAgIC8vICAgaWYgKHRoaXMuaW5Cb3VuZERhdGVUaW1lPy5pc1NhbWVPckJlZm9yZSh0aGlzLm91dEJvdW5kRGF0ZVRpbWUpKSB7XHJcbiAgICAvLyAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgIC8vICAgICAgICdSZXR1cm4gRGF0ZS9UaW1lIG11c3QgYmUgYWZ0ZXIgRGVwYXJ0dXJlIERhdGUvVGltZSdcclxuICAgIC8vICAgICApO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gaWYgKHRoaXMudmlhKSB7XHJcbiAgICAvLyAgIGlmICghdGhpcy50ZW1wUGFyYW1zLnZpYUxvY2F0aW9uKSB7XHJcbiAgICAvLyAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIGVudGVyIGEgdmlhIGxvY2F0aW9uLicpO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcblxyXG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgKyB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPCAxKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1RoZXJlIG11c3QgYmUgYXQgbGVhc3QgMSB0cmF2ZWxsZXInKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDApO1xyXG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0U2VhcmNoKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoW10pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IE9iamVjdC5mcmVlemUoeyAuLi50aGlzLnRlbXBQYXJhbXMgfSk7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgICAgSVJMRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtcyxcclxuICAgICAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnkpKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0U2VhcmNoKFxyXG4gICAgICAgIHRoaXMuSXJsZmV0Y2hlci5mZXRjaExpc3QocXVlcnkpLnBpcGUobWFwKChyZXN1bHQpID0+IHJlc3VsdCkpXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJlY2VudFNlYXJjaFF1ZXJ5KFxyXG4gICAgcXVlcnk6IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzXHJcbiAgKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcclxuICAgIGNvbnN0IHJlY2VudFNlYXJjaFF1ZXJ5OiBJSXJsU2VhcmNoQXJncyA9IHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSlcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWwsXHJcbiAgICAgIHNlYXJjaEFyZ3M6IHJlY2VudFNlYXJjaFF1ZXJ5LFxyXG4gICAgICB0cmF2ZWxEYXRlOiB0aGlzLm91dEJvdW5kRGF0ZVRpbWUuZm9ybWF0KCksXHJcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzKVxyXG4gICAgfTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVNlcmNoUXVlcnkocXVlcnk6IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzKTogSUlybFNlYXJjaEFyZ3N7XHJcbiAgICBjb25zdCBzZWFyY2hRdWVyeTogSUlybFNlYXJjaEFyZ3MgID0gcXVlcnk7XHJcbiAgICBpZiAodGhpcy50cmF2ZWxsaW5nRnJvbSkge1xyXG4gICAgICBzZWFyY2hRdWVyeS50cmF2ZWxsaW5nRnJvbSA9IHRoaXMudHJhdmVsbGluZ0Zyb207XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudHJhdmVsbGluZ1RvKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LnRyYXZlbGxpbmdUbyA9IHRoaXMudHJhdmVsbGluZ1RvO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNlYXJjaFF1ZXJ5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXJ0UmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XHJcbiAgICB0aGlzLmpvdXJuZXlUeXBlID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Muam91cm5leVR5cGU7XHJcbiAgICB0aGlzLmlybENsYXNzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuY2xhc3M7XHJcbiAgICB0aGlzLnRyYXZlbGxpbmdUbyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRyYXZlbGxpbmdUbztcclxuICAgIHRoaXMudHJhdmVsbGluZ0Zyb20gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy50cmF2ZWxsaW5nRnJvbTtcclxuXHJcbiAgICAvLyBnZXQgb3V0Qm91bmREYXRlVGltZSwgaW5Cb3VuZERhdGVUaW1lXHJcbiAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgPSBtb21lbnQoXHJcbiAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWVcclxuICAgICk7XHJcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Muam91cm5leVR5cGUgPT09IElybEpvdXJuZXlUeXBlLlJldHVybkpvdXJuZXkpIHtcclxuICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgPSBtb21lbnQoXHJcbiAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWVcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9vdXRib3VuZF9kYXRlICYmIHRoaXMuX291dGJvdW5kX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9vdXRib3VuZF9kYXRlLFxyXG4gICAgICAgIHRoaXMuX291dGJvdW5kX3RpbWVcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMub3V0Qm91bmREYXRlVGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZVJldHVybkRhdGVUaW1lKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3JldHVybl9kYXRlICYmIHRoaXMuX3JldHVybl90aW1lKSB7XHJcbiAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQoXHJcbiAgICAgICAgdGhpcy5fcmV0dXJuX2RhdGUsXHJcbiAgICAgICAgdGhpcy5fcmV0dXJuX3RpbWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xyXG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hRdWVyeSgpOiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyB7XHJcbiAgICAvLyB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgdGhpcy5ub09mQWR1bHRzID0gdGhpcy50cmF2ZWxsZXJzLmZpbHRlcihcclxuICAgICAgKHRyYXZlbGxlcjogVHJhdmVsbGVyKSA9PlxyXG4gICAgICAgIHRyYXZlbGxlci5hZ2VUeXBlID09PSBhZ2VzLkFkdWx0IHx8XHJcbiAgICAgICAgdHJhdmVsbGVyLmFnZVR5cGUgPT09IGFnZXMuWW91dGggfHxcclxuICAgICAgICB0cmF2ZWxsZXIuYWdlVHlwZSA9PT0gYWdlcy5TZW5pb3JcclxuICAgICkubGVuZ3RoO1xyXG4gICAgdGhpcy5ub09mQ2hpbGRyZW4gPSB0aGlzLnRyYXZlbGxlcnMuZmlsdGVyKFxyXG4gICAgICAodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+IHRyYXZlbGxlci5hZ2VUeXBlID09PSBhZ2VzLkNoaWxkXHJcbiAgICApLmxlbmd0aDtcclxuICAgIGlmICghdGhpcy5zdXBwbGllciAmJiB0aGlzLnRyYXZlbGxpbmdGcm9tLm5hbWUpIHtcclxuICAgICAgdGhpcy5zdXBwbGllciA9IHRoaXMudHJhdmVsbGluZ0Zyb20ucmFpbHN0YXRpb24uc3VwcGxpZXI7XHJcbiAgICAgIHRoaXMuZ2V0SXJsRGlzY291bnRDYXJkcygpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXJsRGlzY291bnRDYXJkc0FycmF5ID0gZGF0YTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBxdWVyeTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMgPSB7XHJcbiAgICAgIHN1cHBsaWVyOiB0aGlzLnN1cHBsaWVyLCAvLyBJUkxTdXBwbGllciFcclxuICAgICAgY291bnRyeUNvZGU6ICdHQicsXHJcbiAgICAgIGlybERpc2NvdW50Q2FyZHM6IHRoaXMuZGlzY291bnRDYXJkID8gdGhpcy5kaXNjb3VudENhcmQuaWQgOiBudWxsLFxyXG4gICAgICBjbGFzczogdGhpcy5pcmxDbGFzcywgLy8gSVJMQ2xhc3NcclxuICAgICAgb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZTogdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUsXHJcbiAgICAgIGRlcGFydHVyZUxvY2F0aW9uSWQ6IHRoaXMuX3RyYXZlbGxpbmdGcm9tLFxyXG4gICAgICBhcnJpdmFsTG9jYXRpb25JZDogdGhpcy5fdHJhdmVsbGluZ1RvLFxyXG4gICAgICBhZHVsdHM6IHRoaXMudGVtcFBhcmFtcy5hZHVsdHMsXHJcbiAgICAgIGNoaWxkcmVuOiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4sXHJcbiAgICAgIHJldHVybkRlcGFydHVyZURhdGVUaW1lOiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUsXHJcbiAgICAgIGpvdXJuZXlUeXBlOiB0aGlzLmpvdXJuZXlUeXBlXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPT09IDApIHtcclxuICAgICAgcXVlcnkuY2hpbGRyZW4gPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAodGhpcy50ZW1wUGFyYW1zLmpvdXJuZXlUeXBlKSB7XHJcbiAgICAgIGNhc2UgSXJsSm91cm5leVR5cGUuU2luZ2xlSm91cm5leTpcclxuICAgICAgICBxdWVyeS5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSA9IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzPihxdWVyeSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhcclxuICAgIHByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiB2b2lkIHt9XHJcblxyXG4gIHVwZGF0ZUNhbkNvbWJpbmUodGt0OiBJcmxUaWNrZXRPcHRpb24pOiB2b2lkIHtcclxuICAgICh0a3QuaWRlbnRpZmllcnMuYWxsb3dlZFdpdGggfHwgW10pLmZvckVhY2goKGFsbG93ZWQpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLl9jYW5Db21iaW5lW3RrdC50eXBlXVthbGxvd2VkLmpvdXJuZXlJZGVudGlmaWVyXSkge1xyXG4gICAgICAgIHRoaXMuX2NhbkNvbWJpbmVbdGt0LnR5cGVdW2FsbG93ZWQuam91cm5leUlkZW50aWZpZXJdID0gW1xyXG4gICAgICAgICAgYWxsb3dlZC5mYXJlSWRlbnRpZmllclxyXG4gICAgICAgIF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fY2FuQ29tYmluZVt0a3QudHlwZV1bYWxsb3dlZC5qb3VybmV5SWRlbnRpZmllcl0ucHVzaChcclxuICAgICAgICAgIGFsbG93ZWQuZmFyZUlkZW50aWZpZXJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldExlZ3NGcm9tSXJsSm91cm5leU9wdGlvbihyYWlsSm91cm5leU9wdGlvbjogSXJsSm91cm5leU9wdGlvbik6IGFueVtdIHtcclxuICAgIGxldCBsZWdzOiBhbnlbXSA9IFtdO1xyXG4gICAgaWYgKHJhaWxKb3VybmV5T3B0aW9uPy5zZWdtZW50cy5sZW5ndGgpIHtcclxuICAgICAgbGVncyA9IHJhaWxKb3VybmV5T3B0aW9uLnNlZ21lbnRzLm1hcCgoc2VnbWVudDogSXJsU2VnbWVudCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBvcGVyYXRvcjpcclxuICAgICAgICAgICAgc2VnbWVudC5vcGVyYXRvciB8fCByYWlsSm91cm5leU9wdGlvbi5wcm92aWRlcnNbMF0ucHJvdmlkZXJJZCxcclxuICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBzZWdtZW50LmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IHNlZ21lbnQuZGVwYXJ0LFxyXG4gICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBzZWdtZW50LmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBzZWdtZW50LmFycml2ZVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxlZ3M7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZElybFRpY2tldE9wdGlvbihcclxuICAgIGlybEpvdXJuZXlPcHRpb246IElybEpvdXJuZXlPcHRpb24sXHJcbiAgICBpcmxUaWNrZXRPcHRpb246IElybFRpY2tldE9wdGlvbixcclxuICAgIHByb3ZpZGVySW5kZXg6IG51bWJlclxyXG4gICk6IElybFRpY2tldE9wdGlvbiB7XHJcbiAgICByZXR1cm4gaXJsSm91cm5leU9wdGlvbi5wcm92aWRlcnNbcHJvdmlkZXJJbmRleF0udGlja2V0T3B0aW9ucy5maW5kKFxyXG4gICAgICAodGlja2V0T3B0aW9uKSA9PlxyXG4gICAgICAgIHRpY2tldE9wdGlvbi50eXBlID09PSBpcmxUaWNrZXRPcHRpb24udHlwZSAmJlxyXG4gICAgICAgICh0aWNrZXRPcHRpb24ucHJpY2UgPT09IGlybFRpY2tldE9wdGlvbi5wcmljZSB8fFxyXG4gICAgICAgICAgdGlja2V0T3B0aW9uLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyID09PVxyXG4gICAgICAgICAgICBpcmxUaWNrZXRPcHRpb24uaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXIpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkU2luZ2xlSm91cm5leVRvQmFza2V0KFxyXG4gICAgc2VydmljZUlkOiBzdHJpbmcsXHJcbiAgICBpcmxRdWVyeTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMsXHJcbiAgICBvdXRib3VuZDogSXJsVGlja2V0T3B0aW9uLFxyXG4gICAgaXJsSm91cm5leU9wdGlvbjogSXJsSm91cm5leU9wdGlvblxyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgLy8gICBjb25zb2xlLmxvZyhzZXJ2aWNlSWQscmFpbFF1ZXJ5LGlybEpvdXJuZXlPcHRpb24pXHJcbiAgICAvLyAgIC8vIGlmIChpcmxKb3VybmV5T3B0aW9uLnVuc2VsbGFibGUpIHtcclxuICAgIC8vICAgLy8gICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgIC8vICAgLy8gfVxyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcbiAgICBpZiAoYmFza2V0KSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uID0gdGhpcy5nZXRTZWxlY3RlZElybFRpY2tldE9wdGlvbihcclxuICAgICAgICBpcmxKb3VybmV5T3B0aW9uLFxyXG4gICAgICAgIG91dGJvdW5kLFxyXG4gICAgICAgIDBcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgbGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21JcmxKb3VybmV5T3B0aW9uKGlybEpvdXJuZXlPcHRpb24pO1xyXG4gICAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChpcmxKb3VybmV5T3B0aW9uKTtcclxuICAgICAgLy8gc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24uaWRlbnRpZmllcnMucHJvdmlkZXI7XHJcbiAgICAgIGNvbnN0IGJhc2tldEl0ZW0gPSB7XHJcbiAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXHJcbiAgICAgICAgc2VydmljZTogc2VydmljZUlkLFxyXG4gICAgICAgIGRldGFpbDoge1xyXG4gICAgICAgICAgb3V0d2FyZERldGFpbDoge1xyXG4gICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IGlybEpvdXJuZXlPcHRpb24uYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogaXJsSm91cm5leU9wdGlvbi50byxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25Db2RlOiBpcmxKb3VybmV5T3B0aW9uLnRvQ29kZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IGlybEpvdXJuZXlPcHRpb24uZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBpcmxKb3VybmV5T3B0aW9uLmZyb20sXHJcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25Db2RlOiBpcmxKb3VybmV5T3B0aW9uLmZyb21Db2RlLFxyXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IGlybEpvdXJuZXlPcHRpb24ucHJvdmlkZXJzWzBdLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24udHlwZSxcclxuICAgICAgICAgICAgICAgIHByaWNlOiBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5wcmljZSxcclxuICAgICAgICAgICAgICAgIGxlZ3NcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0cmFuc2FjdGlvbklkZW50aWZpZXI6XHJcbiAgICAgICAgICAgIGlybEpvdXJuZXlPcHRpb24uaWRlbnRpZmllcnMudHJhbnNhY3Rpb25JZGVudGlmaWVyLFxyXG4gICAgICAgICAgb3V0Ym91bmQ6IHtcclxuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbXHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24uaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24uaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzdXBwbGllcjogaXJsSm91cm5leU9wdGlvbi5wcm92aWRlcnNbMF0ucHJvdmlkZXJJZCxcclxuICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZHVsdHM6IGlybFF1ZXJ5LmFkdWx0cyxcclxuICAgICAgICBwcmljZTogc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24ucHJpY2UsXHJcbiAgICAgICAgY3VycmVuY3k6IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogaXJsUXVlcnksXHJcbiAgICAgICAgLy8gY28yUGVySXRlbTogaXJsSm91cm5leU9wdGlvbi5jbzJQZXJJdGVtLFxyXG4gICAgICAgIC8vIGNvMlBlclBhc3NlbmdlcjogaXJsSm91cm5leU9wdGlvbi5jbzJQZXJQYXNzZW5nZXIsXHJcbiAgICAgICAgb3V0Ym91bmREYXRlOiBpcmxKb3VybmV5T3B0aW9uLmRlcGFydERhdGVUaW1lXHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxyXG4gICAgICAgIGJhc2tldEl0ZW0sXHJcbiAgICAgICAgaW50QmFza2V0LFxyXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcclxuICAgICAgICB0aGlzLnRyYXZlbGxlcnNcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkUmV0dXJuSm91cm5leVRvQmFza2V0KFxyXG4gICAgc2VydmljZUlkOiBzdHJpbmcsXHJcbiAgICBpcmxRdWVyeTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMsXHJcbiAgICBpbmJvdW5kOiBJcmxUaWNrZXRPcHRpb24sXHJcbiAgICBpbkpvdXJuZXlPcHRpb246IElybEpvdXJuZXlPcHRpb25cclxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IG91dGJvdW5kID0gdGhpcy5vdXRib3VuZFRpY2tldDtcclxuICAgIGNvbnN0IG91dEpvdXJuZXlPcHRpb24gPSB0aGlzLm91dGJvdW5kSm91cm5leU9wdGlvbnM7XHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIGlmIChiYXNrZXQpIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24gPSB0aGlzLmdldFNlbGVjdGVkSXJsVGlja2V0T3B0aW9uKFxyXG4gICAgICAgIG91dEpvdXJuZXlPcHRpb24sXHJcbiAgICAgICAgb3V0Ym91bmQsXHJcbiAgICAgICAgMFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBvdXRib3VuZExlZ3MgPSB0aGlzLmdldExlZ3NGcm9tSXJsSm91cm5leU9wdGlvbihvdXRKb3VybmV5T3B0aW9uKTtcclxuICAgICAgY29uc3QgaW5ib3VuZExlZ3MgPSB0aGlzLmdldExlZ3NGcm9tSXJsSm91cm5leU9wdGlvbihpbkpvdXJuZXlPcHRpb24pO1xyXG4gICAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZChvdXRKb3VybmV5T3B0aW9uKTtcclxuICAgICAgY29uc3QgYmFza2V0SXRlbSA9IHtcclxuICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcclxuICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQsXHJcbiAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICBvdXR3YXJkRGV0YWlsOiB7XHJcbiAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogb3V0Sm91cm5leU9wdGlvbi5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBvdXRKb3VybmV5T3B0aW9uLnRvLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbkNvZGU6IG91dEpvdXJuZXlPcHRpb24udG9Db2RlLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uQ29kZTogb3V0Sm91cm5leU9wdGlvbi5mcm9tQ29kZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IG91dEpvdXJuZXlPcHRpb24uZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBvdXRKb3VybmV5T3B0aW9uLmZyb20sXHJcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogb3V0Sm91cm5leU9wdGlvbi5wcm92aWRlcnNbMF0ubmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBzZWxlY3RlZElybFRpY2tldE9wdGlvbi50eXBlLFxyXG4gICAgICAgICAgICAgICAgcHJpY2U6IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uLnByaWNlLFxyXG4gICAgICAgICAgICAgICAgbGVnczogb3V0Ym91bmRMZWdzXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgaW53YXJkRGV0YWlsOiB7XHJcbiAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogaW5Kb3VybmV5T3B0aW9uLmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IGluSm91cm5leU9wdGlvbi50byxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25Db2RlOiBpbkpvdXJuZXlPcHRpb24udG9Db2RlLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uQ29kZTogaW5Kb3VybmV5T3B0aW9uLmZyb21Db2RlLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogaW5Kb3VybmV5T3B0aW9uLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogaW5Kb3VybmV5T3B0aW9uLmZyb20sXHJcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogaW5Kb3VybmV5T3B0aW9uLnByb3ZpZGVyc1swXS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBsZWdzOiBpbmJvdW5kTGVnc1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjogb3V0Ym91bmQuaWRlbnRpZmllcnMudHJhbnNhY3Rpb25JZGVudGlmaWVyLFxyXG4gICAgICAgICAgb3V0Ym91bmQ6IHtcclxuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbXHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24uaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24uaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzdXBwbGllcjogb3V0Sm91cm5leU9wdGlvbi5wcm92aWRlcnNbMF0ucHJvdmlkZXJJZCxcclxuICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZHVsdHM6IGlybFF1ZXJ5LmFkdWx0cyxcclxuICAgICAgICBwcmljZTogc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24ucHJpY2UsXHJcbiAgICAgICAgY3VycmVuY3k6IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcclxuICAgICAgICBzZWFyY2hRdWVyeTogaXJsUXVlcnksXHJcbiAgICAgICAgb3V0Ym91bmREYXRlOiBvdXRKb3VybmV5T3B0aW9uLmRlcGFydERhdGVUaW1lXHJcbiAgICAgICAgLy8gY28yUGVySXRlbTogb3V0Ym91bmQuY28yUGVySXRlbSxcclxuICAgICAgICAvLyBjbzJQZXJQYXNzZW5nZXI6IG91dGJvdW5kLmNvMlBlclBhc3NlbmdlclxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmZpbHRlclNlbGVjdGVkKCk7XHJcbiAgICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAgYmFza2V0SXRlbSxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVyc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uc1tdKTogSUNoZWFwZXN0UHJpY2Uge1xyXG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBjdXJyZW5jeSA9XHJcbiAgICAgIHJlc3VsdHNbMF0ub3V0Ym91bmRbMF0ucHJvdmlkZXJzWzBdLmNoZWFwZXN0VGlja2V0LmN1cnJlbmN5O1xyXG4gICAgY29uc3QgcHJpY2UgPSB0aGlzLmZpbmRDaGVhcGVzdFRpY2tldChyZXN1bHRzKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGFtb3VudDogcHJpY2UsXHJcbiAgICAgIGN1cnJlbmN5Q29kZTogY3VycmVuY3lcclxuICAgIH07XHJcbiAgfVxyXG4gIGZpbmRDaGVhcGVzdFRpY2tldChyZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uc1tdKTogbnVtYmVyIHtcclxuICAgIHRoaXMuX2NoZWFwZXN0Rmlyc3QgPSBudWxsO1xyXG4gICAgdGhpcy5fY2hlYXBlc3RTdGFuZGFyZCA9IG51bGw7XHJcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGNoZWFwZXN0QXJyOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICAgIHJlc3VsdHMubWFwKChyZXN1bHQpID0+IHtcclxuICAgICAgcmVzdWx0Lm91dGJvdW5kLm1hcCgob3V0KSA9PiB7XHJcbiAgICAgICAgb3V0LnByb3ZpZGVycy5tYXAoKHRrdCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY2hlYXBlc3RUaWNrZXQ6IG51bWJlciA9IHRrdC5jaGVhcGVzdFRpY2tldC5wcmljZTtcclxuICAgICAgICAgIHRrdC50aWNrZXRPcHRpb25zLm1hcCgodGt0T3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRrdFByaWNlID0gdGt0T3B0aW9uLnByaWNlO1xyXG4gICAgICAgICAgICBjb25zdCB0a3RDbGFzcyA9IHRrdE9wdGlvbi5jbGFzcztcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIHRrdENsYXNzID09PSAnRmlyc3QnICYmXHJcbiAgICAgICAgICAgICAgKHRoaXMuX2NoZWFwZXN0Rmlyc3Q/LnByaWNlID4gdGt0UHJpY2UgfHwgIXRoaXMuX2NoZWFwZXN0Rmlyc3QpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2NoZWFwZXN0Rmlyc3QgPSB0a3RPcHRpb247XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgdGt0Q2xhc3MgPT09ICdTdGFuZGFyZCcgJiZcclxuICAgICAgICAgICAgICAodGhpcy5fY2hlYXBlc3RTdGFuZGFyZD8ucHJpY2UgPiB0a3RQcmljZSB8fFxyXG4gICAgICAgICAgICAgICAgIXRoaXMuX2NoZWFwZXN0U3RhbmRhcmQpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2NoZWFwZXN0U3RhbmRhcmQgPSB0a3RPcHRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRrdFByaWNlID09PSBjaGVhcGVzdFRpY2tldCkge1xyXG4gICAgICAgICAgICAgIGNoZWFwZXN0QXJyLnB1c2goY2hlYXBlc3RUaWNrZXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBNYXRoLm1pbiguLi5jaGVhcGVzdEFycik7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNvcnQgcmVzdWx0cyBieSBwcmljZVxyXG4gICAqXHJcbiAgICogQHJldHVybnNcclxuICAgKiBAbWVtYmVyb2YgaXJsLWVudGVycHJpc2Utc2VhcmNoXHJcbiAgICovXHJcbiAgc29ydEJ5UHJpY2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLnByaWNlRGlyID0gIXRoaXMucHJpY2VEaXI7XHJcbiAgICBjb25zdCByZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uc1tdID0gdGhpcy5maWx0ZXJTZWxlY3RlZCh0aGlzLl9pc0ZpbHRlcmVkKTtcclxuXHJcbiAgICBjb25zdCBieVByaWNlID0gKGE6IElybEpvdXJuZXlPcHRpb24sIGI6IElybEpvdXJuZXlPcHRpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMucHJpY2VEaXJcclxuICAgICAgICA/IGEucHJvdmlkZXJzWzBdLmNoZWFwZXN0VGlja2V0LnByaWNlIC1cclxuICAgICAgICAgICAgYi5wcm92aWRlcnNbMF0uY2hlYXBlc3RUaWNrZXQucHJpY2VcclxuICAgICAgICA6IGIucHJvdmlkZXJzWzBdLmNoZWFwZXN0VGlja2V0LnByaWNlIC1cclxuICAgICAgICAgICAgYS5wcm92aWRlcnNbMF0uY2hlYXBlc3RUaWNrZXQucHJpY2U7XHJcbiAgICB9O1xyXG4gICAgcmVzdWx0c1swXS5vdXRib3VuZCA9IHJlc3VsdHNbMF0ub3V0Ym91bmQuc29ydChieVByaWNlKTtcclxuICAgIHJlc3VsdHNbMF0ucmV0dXJuID0gcmVzdWx0c1swXS5yZXR1cm4uc29ydChieVByaWNlKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU29ydCByZXN1bHRzIGJ5IGRlcGFydHVyZSB0aW1lXHJcbiAgICpcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqIEBtZW1iZXJvZiBpcmwtZW50ZXJwcmlzZS1zZWFyY2hcclxuICAgKi9cclxuICBzb3J0QnlEYXRlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRlRGlyID0gIXRoaXMuZGF0ZURpcjtcclxuXHJcbiAgICBjb25zdCByZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uc1tdID0gdGhpcy5maWx0ZXJTZWxlY3RlZCh0aGlzLl9pc0ZpbHRlcmVkKTtcclxuICAgIGNvbnN0IGJ5RGF0ZSA9IChhOiBJcmxKb3VybmV5T3B0aW9uLCBiOiBJcmxKb3VybmV5T3B0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRhdGVEaXJcclxuICAgICAgICA/IG1vbWVudChhLmRlcGFydERhdGVUaW1lKS51bml4KCkgLSBtb21lbnQoYi5kZXBhcnREYXRlVGltZSkudW5peCgpXHJcbiAgICAgICAgOiBtb21lbnQoYi5kZXBhcnREYXRlVGltZSkudW5peCgpIC0gbW9tZW50KGEuZGVwYXJ0RGF0ZVRpbWUpLnVuaXgoKTtcclxuICAgIH07XHJcbiAgICByZXN1bHRzWzBdLm91dGJvdW5kID0gcmVzdWx0c1swXS5vdXRib3VuZC5zb3J0KGJ5RGF0ZSk7XHJcbiAgICByZXN1bHRzWzBdLnJldHVybiA9IHJlc3VsdHNbMF0ucmV0dXJuLnNvcnQoYnlEYXRlKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgYWRkT3V0Ym91bmRBbmRGaWx0ZXIoXHJcbiAgICB0aWNrZXQ6IElybFRpY2tldE9wdGlvbldpdGhTZWxlY3RlZCxcclxuICAgIGZ1bGxUaWNrZXQ6IElybEpvdXJuZXlPcHRpb25cclxuICApOiB2b2lkIHtcclxuICAgIHRoaXMub3V0Ym91bmRKb3VybmV5T3B0aW9ucyA9IGZ1bGxUaWNrZXQ7XHJcbiAgICB0aGlzLm91dGJvdW5kVGlja2V0ID0gdGlja2V0O1xyXG4gICAgdGhpcy5maWx0ZXJTZWxlY3RlZCh0cnVlKTtcclxuICB9XHJcblxyXG4gIGZpbHRlclNlbGVjdGVkKGZpbHRlck91dGJvdW5kOiBib29sZWFuID0gZmFsc2UpOiBJcmxKb3VybmV5T3B0aW9uc1tdIHtcclxuICAgIGNvbnN0IHJlc3VsdHM6IElybEpvdXJuZXlPcHRpb25zW10gPSB0aGlzLmhlbHBlcnMuY2xvbmUoXHJcbiAgICAgIHRoaXMuZnVsbFJlc3VsdHMgYXMgSXJsSm91cm5leU9wdGlvbnNbXVxyXG4gICAgKTtcclxuICAgIGlmIChmaWx0ZXJPdXRib3VuZCkge1xyXG4gICAgICB0aGlzLl9pc0ZpbHRlcmVkID0gdHJ1ZTtcclxuICAgICAgcmVzdWx0c1swXS5vdXRib3VuZCA9IFtcclxuICAgICAgICByZXN1bHRzWzBdLm91dGJvdW5kLmZpbmQoKGl0ZW0pID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGl0ZW0uZGVwYXJ0RGF0ZVRpbWUgPT09XHJcbiAgICAgICAgICAgICAgdGhpcy5fb3V0Ym91bmRKb3VybmV5T3B0aW9ucy5kZXBhcnREYXRlVGltZSAmJlxyXG4gICAgICAgICAgICBpdGVtLmFycml2ZURhdGVUaW1lID09PSB0aGlzLl9vdXRib3VuZEpvdXJuZXlPcHRpb25zLmFycml2ZURhdGVUaW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIF07XHJcbiAgICAgIHJlc3VsdHNbMF0ub3V0Ym91bmRbMF0ucHJvdmlkZXJzWzBdLnRpY2tldE9wdGlvbnMgPVxyXG4gICAgICAgIHJlc3VsdHNbMF0ub3V0Ym91bmRbMF0ucHJvdmlkZXJzWzBdLnRpY2tldE9wdGlvbnMucmVkdWNlKFxyXG4gICAgICAgICAgKGFjYywgdGlja2V0OiBJcmxUaWNrZXRPcHRpb25XaXRoU2VsZWN0ZWQpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRpY2tldC51aWQgPT09IHRoaXMuX291dGJvdW5kVGlja2V0LnVpZCkge1xyXG4gICAgICAgICAgICAgIHRpY2tldC5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYWNjLnB1c2godGlja2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFtdXHJcbiAgICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2lzRmlsdGVyZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5vdXRib3VuZEpvdXJuZXlPcHRpb25zID0gbnVsbDtcclxuICAgICAgdGhpcy5vdXRib3VuZFRpY2tldCA9IG51bGw7XHJcbiAgICAgIHJlc3VsdHNbMF0ub3V0Ym91bmQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGl0ZW0ucHJvdmlkZXJzWzBdLnRpY2tldE9wdGlvbnMubWFwKFxyXG4gICAgICAgICAgKHRpY2tldDogSXJsVGlja2V0T3B0aW9uV2l0aFNlbGVjdGVkKSA9PiB7XHJcbiAgICAgICAgICAgIHRpY2tldC5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aWNrZXQuU2hvd0RldGFpbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGlja2V0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gLSBnZXQgaXJsIHN0YXRpb24gbG9jYXRpb25zXHJcbiAgICogQHBhcmFtIHRlcm0gLSB0aGUgdGVybSB0byBzZWFyY2hcclxuICAgKiBAcGFyYW0gaXNMb2FkaW5nIC0gQmVoYXZpb3JTdWJqZWN0IHNvIHdlIGtub3cgc29tZXRoaW5nIGlzIGhhcHBlbmluZ1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0SXJsRGlzY291bnRDYXJkcygpOiBPYnNlcnZhYmxlPElybFRyYXZlbENhcmRbXT4ge1xyXG4gICAgY29uc3Qgc3VwcGxpZXIgPSB0aGlzLnN1cHBsaWVyO1xyXG4gICAgcmV0dXJuIHRoaXMuaXJsRGlzY291bnRDYXJkc0ZldGNoZXIuZmV0Y2hMaXN0KHtcclxuICAgICAgc3VwcGxpZXJcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVybXNBbmRDb25kKGluSm91cm5leU9wdGlvbjogSXJsSm91cm5leU9wdGlvbikge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdGYXJlIFJ1bGVzJyxcclxuICAgICAgICB2YWx1ZTogaW5Kb3VybmV5T3B0aW9uPy5wcm92aWRlcnNbMF0/LnRpY2tldE9wdGlvbnNbMF0/LmZhcmVSdWxlc1xyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVNlYXJjaCgpOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+e1xyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBjb25zdCBxdWVyeTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIGNvbnN0IGZhdm91cml0ZVNlYXJjaFF1ZXJ5OiBJSXJsU2VhcmNoQXJncyA9IHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XHJcbiAgICAgIGNvbnN0IHNlYXJjaEluZm8gPSB7XHJcbiAgICAgICAgbmFtZTogYCR7bW9tZW50KCl9YCxcclxuICAgICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWwsXHJcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVGYXZvdXJpdGVTZWFyY2goc2VhcmNoSW5mbyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
1059
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXJsLWVudGVycHJpc2Utc2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2lybC1lbnRlcnByaXNlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxHQUFHLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQVd6RCxPQUFPLEVBR0wsUUFBUSxFQU1SLFdBQVcsRUFDWCxjQUFjLEVBSWYsTUFBTSx3QkFBd0IsQ0FBQztBQWtCaEMsT0FBTyxFQUFhLElBQUksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUkxRCxNQUFNLENBQU4sSUFBWSxZQUlYO0FBSkQsV0FBWSxZQUFZO0lBQ3RCLG1DQUFtQixDQUFBO0lBQ25CLG1DQUFtQixDQUFBO0lBQ25CLGlDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFKVyxZQUFZLEtBQVosWUFBWSxRQUl2QjtBQVdELE1BQU0sQ0FBTixJQUFZLFNBTVg7QUFORCxXQUFZLFNBQVM7SUFDbkIsMEJBQWEsQ0FBQTtJQUNiLDBCQUFhLENBQUE7SUFDYixxQ0FBcUM7SUFDckMsdUNBQTBCLENBQUE7SUFDMUIsc0NBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQU5XLFNBQVMsS0FBVCxTQUFTLFFBTXBCO0FBYUQsTUFBTSxPQUFPLG1CQUtYLFNBQVEsb0JBSVA7SUFpY0QsWUFDVSxVQUFrQyxFQUNsQyx1QkFBMkQsRUFDbkUsT0FBMkIsRUFDbkIsYUFBK0MsRUFDdkQsY0FBa0MsRUFDMUIsYUFBK0MsRUFDL0MsNEJBQXVFO1FBRS9FLEtBQUssQ0FBQyxjQUFjLEVB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SyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUE7WUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFBO1lBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLFdBQVcsS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUE7WUFDcEgsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFBO1FBQzlCLENBQUM7S0FBQTs7QUFueENlLDBDQUFzQixHQUFHLFlBQVksQ0FBQztBQUN0QywyQ0FBdUIsR0FBRyxhQUFhLENBQUM7QUFDeEMsaUNBQWEsR0FBRyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEJhc2VFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi9iYXNlLWVudGVycHJpc2UnO1xyXG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBWYWx1ZURpc3BsYXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZhbHVlLWRpc3BsYXknO1xyXG5pbXBvcnQge1xyXG4gIE5nYkRhdGVTdHJ1Y3QsXHJcbiAgSXJsUXVvdGVSZXN1bHRBcnJheSxcclxuICBSZWNlbnRTZWFyY2gsXHJcbiAgSXJsVGlja2V0T3B0aW9uV2l0aFNlbGVjdGVkLFxyXG4gIFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHRcclxufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFza2V0SXRlbSxcclxuICBDdXJyZW5jeUNvZGUsXHJcbiAgSXJsQ2xhc3MsXHJcbiAgSXJsSm91cm5leU9wdGlvbixcclxuICBJcmxKb3VybmV5T3B0aW9ucyxcclxuICBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMsXHJcbiAgSXJsVGlja2V0T3B0aW9uLFxyXG4gIFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzLFxyXG4gIFNlcnZpY2VUeXBlLFxyXG4gIElybEpvdXJuZXlUeXBlLFxyXG4gIElybFN1cHBsaWVyLFxyXG4gIElybFRyYXZlbENhcmQsXHJcbiAgSXJsU2VnbWVudFxyXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VJcmxEaXNjb3VudENhcmRGZXRjaGVyLFxyXG4gIElybERpc2NvdW50Q2FyZEZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaXJsLWRpc2NvdW50LWNhcmQtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUlybFF1b3RlRmV0Y2hlcixcclxuICBJcmxRdW90ZUZldGNoZXJUeXBlXHJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvaXJsLXF1b3RlLWZldGNoZXInO1xyXG5pbXBvcnQge1xyXG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gIEludGVybmFsQmFza2V0SW50ZXJmYWNlXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIElSTEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXHJcbiAgSXJsVGVtcFBhcmFtc1xyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWlybC1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IFRyYXZlbGxlciwgYWdlcyB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcclxuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcclxuaW1wb3J0IHsgU29ydE1ldGhvZCB9IGZyb20gJy4vZXVyb3N0YXItZW50ZXJwcmlzZS1zZWFyY2gnO1xyXG5pbXBvcnQgeyBJSXJsU2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvaXJsLXNlYXJjaC1hcmcuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQmFzZUdldElybFN1cHBsaWVyU3RhdGlvbkZldGNoZXIsIEdldElybFN1cHBsaWVyU3RhdGlvbkZldGNoZXJUeXBlIH0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWlybC1zdXBwbGllci1zdGF0aW9uLmZldGNoZXInO1xyXG5cclxuZXhwb3J0IGVudW0gU29ydFR5cGVzSXJsIHtcclxuICBDaGVhcGVzdEZpcnN0ID0gJ0MnLFxyXG4gIEVhcmxpZXN0Rmlyc3QgPSAnRScsXHJcbiAgTGF0ZXN0Rmlyc3QgPSAnTCdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTb3J0VHlwZUlybCB7XHJcbiAgLyoqIFRpdGxlIGRpc3BsYXllZCBvbiBkcm9wZG93biAqL1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgLyoqIE1ldGhvZCBuYW1lIHVzZWQgYnkgY29tcG9uZW50IHRvIHNvcnQgcmVzdWx0cyAqL1xyXG4gIG1ldGhvZFJlZjogU29ydE1ldGhvZDtcclxuICAvKiogSWNvbiBkaXNwbGF5ZWQgb24gZHJvcCBkb3duICovXHJcbiAgaWNvbjogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBDbGFzc1R5cGUge1xyXG4gIENsYXNzXzEgPSAnMScsXHJcbiAgQ2xhc3NfMiA9ICcyJyxcclxuICAvLyAhIHRoZXNlIDIgc2hvcHVsZCBiZSByZW1vdmVkIGxhdGVyXHJcbiAgU2Vjb25kX0NsYXNzID0gJzJuZCBDbGFzcycsXHJcbiAgRmlyc3RfQ2xhc3MgPSAnMXN0IENsYXNzJ1xyXG59XHJcblxyXG5leHBvcnQgIGludGVyZmFjZSBJcmxGaWx0ZXJzIHtcclxuICBwcmljZU1heDogbnVtYmVyLFxyXG4gIHByaWNlTWluOiBudW1iZXIsXHJcbiAgZGF0ZUFyck1heDogbnVtYmVyLFxyXG4gIGRhdGVBcnJNaW46IG51bWJlcixcclxuICBkYXRlRGVwTWF4OiBudW1iZXIsXHJcbiAgZGF0ZURlcE1pbjogbnVtYmVyLFxyXG4gIGNsYXNzZXM6IGFueVtdLFxyXG4gIGNoYW5nZXM6IGFueVtdXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJUkxFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgUSBleHRlbmRzIElybFF1b3RlRmV0Y2hlclR5cGUsXHJcbiAgICBHSURGX1EgZXh0ZW5kcyBJcmxEaXNjb3VudENhcmRGZXRjaGVyVHlwZSxcclxuICAgIEdJU1NGX1EgZXh0ZW5kcyBHZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyVHlwZVxyXG4gID5cclxuICBleHRlbmRzIEJhc2VFbnRlcnByaXNlU2VhcmNoPFxyXG4gICAgSXJsVGVtcFBhcmFtcyxcclxuICAgIElybFF1b3RlUmVzdWx0QXJyYXksXHJcbiAgICBJcmxRdW90ZVJlc3VsdEFycmF5XHJcbiAgPlxyXG4gIGltcGxlbWVudHMgSVJMRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZVxyXG57XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX2lybCc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ2lybF9yZXN1bHRzJztcclxuICBzdGF0aWMgcmVhZG9ubHkgUEFTU0lOR19QT0lOVCA9ICdQYXNzaW5nJztcclxuICBwcml2YXRlIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdO1xyXG5cclxuICBwcm90ZWN0ZWQgcmVzdWx0c1Nlc3Npb25OYW1lID0gSVJMRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPVxyXG4gICAgSVJMRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcclxuXHJcbiAgcHJpdmF0ZSBfc29ydEFycmF5OiBTb3J0VHlwZUlybFtdID0gW1xyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ1ByaWNlJyxcclxuICAgICAgbWV0aG9kUmVmOiBTb3J0TWV0aG9kLnNvcnRCeVByaWNlLFxyXG4gICAgICBpY29uOiAnaWNvLWRvbGxhcidcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOiAnVGltZScsXHJcbiAgICAgIG1ldGhvZFJlZjogU29ydE1ldGhvZC5zb3J0QnlEYXRlLFxyXG4gICAgICBpY29uOiAnaWNvLWNhbGVuZGFyJ1xyXG4gICAgfVxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyBzZWFyY2hUeXBlcyA9IFtcclxuICAgIHsgZGlzcGxheTogJ1JldHVybicsIHZhbHVlOiBJcmxKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5IH0sXHJcbiAgICB7IGRpc3BsYXk6ICdPbmUtV2F5JywgdmFsdWU6IElybEpvdXJuZXlUeXBlLlNpbmdsZUpvdXJuZXkgfVxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyBjbGFzc1R5cGVzID0gW1xyXG4gICAgeyBkaXNwbGF5OiAnQW55JywgdmFsdWU6IElybENsYXNzLkFsbCB9LFxyXG4gICAgeyBkaXNwbGF5OiAnU3RhbmRhcmQnLCB2YWx1ZTogSXJsQ2xhc3MuU3RhbmRhcmQgfSxcclxuICAgIHsgZGlzcGxheTogJ0ZpcnN0JywgdmFsdWU6IElybENsYXNzLkZpcnN0IH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgYWdlUmFuZ2VzOiB7XHJcbiAgICBrZXk6IGFnZXM7XHJcbiAgICB2YWx1ZTogc3RyaW5nO1xyXG4gIH1bXSA9IFtcclxuICAgIHsga2V5OiBhZ2VzLkNoaWxkLCB2YWx1ZTogJ0NoaWxkICgwLTMpJyB9LFxyXG4gICAgeyBrZXk6IGFnZXMuQ2hpbGQsIHZhbHVlOiAnQ2hpbGQgKDQtNSknIH0sXHJcbiAgICB7IGtleTogYWdlcy5DaGlsZCwgdmFsdWU6ICdDaGlsZCAoNi0xMSknIH0sXHJcbiAgICB7IGtleTogYWdlcy5Zb3V0aCwgdmFsdWU6ICdZb3V0aCAoMTItMTQpJyB9LFxyXG4gICAgeyBrZXk6IGFnZXMuWW91dGgsIHZhbHVlOiAnWW91dGggKDE1LTI1KScgfSxcclxuICAgIHsga2V5OiBhZ2VzLkFkdWx0LCB2YWx1ZTogJ0FkdWx0ICgyNi01OSknIH0sXHJcbiAgICB7IGtleTogYWdlcy5Zb3V0aCwgdmFsdWU6ICdTZW5pb3IgKDYwKyknIH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgdHJhdmVsQ2FyZHMgPSBbXHJcbiAgICB7IGRpc3BsYXk6ICdZb3VuZyBwZXJzb25zIHJhaWxjYXJkJywgdmFsdWU6ICdZTkcnIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdEaXNhYmlsaXR5IHJhaWxjYXJkJywgdmFsdWU6ICdESVMnIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGYW1pbHkgcmFpbGNhcmQnLCB2YWx1ZTogJ0ZBTScgfSxcclxuICAgIHsgZGlzcGxheTogJ0ZvcmNlcyByYWlsY2FyZCcsIHZhbHVlOiAnSE1GJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnVHJhdmVsIGFnZW5jeSBkaXNjb3VudCcsIHZhbHVlOiAnVEFEJyB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWw7XHJcbiAgcHVibGljIG1pbk91dGJvdW5kRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHtcclxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcclxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcclxuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpXHJcbiAgfTtcclxuICBwdWJsaWMgbWluSW5ib3VuZERhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcbiAgcHJpdmF0ZSBfdGltZUFycmF5OiBWYWx1ZURpc3BsYXlbXTtcclxuICBwcml2YXRlIF9jYW5Db21iaW5lOiBhbnk7XHJcbiAgcHJpdmF0ZSBfdHJhdmVsbGluZ0Zyb206IHN0cmluZztcclxuICBwcml2YXRlIF90cmF2ZWxsaW5nVG86IHN0cmluZztcclxuICBwcm90ZWN0ZWQgX29yaWdpbmFsVXNlclNlYXJjaDogSXJsVGVtcFBhcmFtcztcclxuICBwcml2YXRlIF9vdXRib3VuZEpvdXJuZXlPcHRpb25zOiBJcmxKb3VybmV5T3B0aW9uO1xyXG4gIHByaXZhdGUgX2lzRmlsdGVyZWQ6IGJvb2xlYW47XHJcbiAgZ2V0IG91dGJvdW5kSm91cm5leU9wdGlvbnMoKTogSXJsSm91cm5leU9wdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmRKb3VybmV5T3B0aW9ucztcclxuICB9XHJcblxyXG4gIHNldCBvdXRib3VuZEpvdXJuZXlPcHRpb25zKGRhdGE6IElybEpvdXJuZXlPcHRpb24pIHtcclxuICAgIHRoaXMuX291dGJvdW5kSm91cm5leU9wdGlvbnMgPSBkYXRhO1xyXG4gIH1cclxuICBfb3V0Ym91bmRUaWNrZXQ6IElybFRpY2tldE9wdGlvbldpdGhTZWxlY3RlZDtcclxuICBnZXQgb3V0Ym91bmRUaWNrZXQoKTogSXJsVGlja2V0T3B0aW9uV2l0aFNlbGVjdGVkIHtcclxuICAgIHJldHVybiB0aGlzLl9vdXRib3VuZFRpY2tldDtcclxuICB9XHJcblxyXG4gIHNldCBvdXRib3VuZFRpY2tldChkYXRhOiBJcmxUaWNrZXRPcHRpb25XaXRoU2VsZWN0ZWQpIHtcclxuICAgIHRoaXMuX291dGJvdW5kVGlja2V0ID0gZGF0YTtcclxuICB9XHJcblxyXG4gIGdldCBub09mQWR1bHRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcclxuICB9XHJcblxyXG4gIHNldCBub09mQWR1bHRzKGFkdWx0czogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gYWR1bHRzO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5vT2ZDaGlsZHJlbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbjtcclxuICB9XHJcblxyXG4gIHNldCBub09mQ2hpbGRyZW4oY2hpbGRyZW46IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gY2hpbGRyZW47XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhdmVsbGluZ1RvKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFycml2YWxMb2NhdGlvbklkO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRyYXZlbGxpbmdUbyh0dDogYW55KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuYXJyaXZhbExvY2F0aW9uSWQgPSB0dDtcclxuXHJcbiAgICB0aGlzLl90cmF2ZWxsaW5nVG8gPSAnJztcclxuICAgIGlmICh0dD8ucmFpbHN0YXRpb24/LmlkKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdUbyA9IHR0LnJhaWxzdGF0aW9uLmlkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCB0cmF2ZWxsaW5nRnJvbSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5kZXBhcnR1cmVMb2NhdGlvbklkO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRyYXZlbGxpbmdGcm9tKHR0OiBhbnkpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5kZXBhcnR1cmVMb2NhdGlvbklkID0gdHQ7XHJcbiAgICB0aGlzLl90cmF2ZWxsaW5nRnJvbSA9ICcnO1xyXG4gICAgaWYgKHR0Py5yYWlsc3RhdGlvbj8uaWQpIHtcclxuICAgICAgdGhpcy5fdHJhdmVsbGluZ0Zyb20gPSB0dC5yYWlsc3RhdGlvbi5pZDtcclxuICAgICAgdGhpcy5zdXBwbGllciA9IHR0LnJhaWxzdGF0aW9uLnN1cHBsaWVyO1xyXG4gICAgICB0aGlzLmdldElybERpc2NvdW50Q2FyZHMoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICB0aGlzLmlybERpc2NvdW50Q2FyZHNBcnJheSA9IGRhdGE7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N1cHBsaWVyOiBJcmxTdXBwbGllciA9IG51bGw7XHJcbiAgZ2V0IHN1cHBsaWVyKCk6IElybFN1cHBsaWVyIHtcclxuICAgIHJldHVybiB0aGlzLl9zdXBwbGllcjtcclxuICB9XHJcbiAgc2V0IHN1cHBsaWVyKGRhdGE6IElybFN1cHBsaWVyKSB7XHJcbiAgICB0aGlzLl9zdXBwbGllciA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jb3VudHJ5Q29kZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgY291bnRyeUNvZGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jb3VudHJ5Q29kZTtcclxuICB9XHJcbiAgc2V0IGNvdW50cnlDb2RlKGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5fY291bnRyeUNvZGUgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xhc3M6IElybENsYXNzID0gSXJsQ2xhc3MuQWxsO1xyXG4gIGdldCBjbGFzcygpOiBJcmxDbGFzcyB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2xhc3M7XHJcbiAgfVxyXG4gIHNldCBjbGFzcyhkYXRhOiBJcmxDbGFzcykge1xyXG4gICAgdGhpcy5fY2xhc3MgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZTogbW9tZW50Lk1vbWVudCA9IG51bGw7XHJcbiAgZ2V0IG91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZTtcclxuICB9XHJcbiAgc2V0IG91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUobmV3RGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lID0gbmV3RGF0ZVRpbWU7XHJcbiAgICBpZiAobmV3RGF0ZVRpbWUgJiYgbmV3RGF0ZVRpbWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMuX291dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUgPSBuZXdEYXRlVGltZTtcclxuICAgICAgdGhpcy5fb3V0Ym91bmRfZGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShuZXdEYXRlVGltZSk7XHJcbiAgICAgIHRoaXMuX291dGJvdW5kX3RpbWUgPSBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgPyBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgOiAnMDcwMCc7XHJcbiAgICB9XHJcbiAgICB0aGlzLl91cGRhdGVPdXRib3VuZERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kZXBhcnR1cmVMb2NhdGlvbklkOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCBkZXBhcnR1cmVMb2NhdGlvbklkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVwYXJ0dXJlTG9jYXRpb25JZDtcclxuICB9XHJcbiAgc2V0IGRlcGFydHVyZUxvY2F0aW9uSWQoZGF0YTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9kZXBhcnR1cmVMb2NhdGlvbklkID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Fycml2YWxMb2NhdGlvbklkOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCBhcnJpdmFsTG9jYXRpb25JZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Fycml2YWxMb2NhdGlvbklkO1xyXG4gIH1cclxuICBzZXQgYXJyaXZhbExvY2F0aW9uSWQoZGF0YTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9hcnJpdmFsTG9jYXRpb25JZCA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBnZXQgYWR1bHRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcclxuICB9XHJcbiAgc2V0IGFkdWx0cyhkYXRhOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2hpbGRyZW46IG51bWJlciA9IDA7XHJcbiAgZ2V0IGNoaWxkcmVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW47XHJcbiAgfVxyXG4gIHNldCBjaGlsZHJlbihkYXRhOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX2NoaWxkcmVuID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NoZWFwZXN0U3RhbmRhcmQ6IElybFRpY2tldE9wdGlvbiA9IG51bGw7XHJcbiAgZ2V0IGNoZWFwZXN0U3RhbmRhcmQoKTogSXJsVGlja2V0T3B0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGVhcGVzdFN0YW5kYXJkO1xyXG4gIH1cclxuICBwcml2YXRlIF9jaGVhcGVzdEZpcnN0OiBJcmxUaWNrZXRPcHRpb24gPSBudWxsO1xyXG4gIGdldCBjaGVhcGVzdEZpcnN0KCk6IElybFRpY2tldE9wdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hlYXBlc3RGaXJzdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JldHVybkRlcGFydHVyZURhdGVUaW1lOiBtb21lbnQuTW9tZW50ID0gbnVsbDtcclxuICBnZXQgcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgfVxyXG4gIHNldCByZXR1cm5EZXBhcnR1cmVEYXRlVGltZShuZXdEYXRlVGltZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnJldHVybkRlcGFydHVyZURhdGVUaW1lID0gbmV3RGF0ZVRpbWU7XHJcbiAgICBpZiAobmV3RGF0ZVRpbWUgJiYgbmV3RGF0ZVRpbWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMuX3JldHVybkRlcGFydHVyZURhdGVUaW1lID0gbmV3RGF0ZVRpbWU7XHJcbiAgICAgIHRoaXMuX3JldHVybl9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG5ld0RhdGVUaW1lKTtcclxuICAgICAgdGhpcy5fcmV0dXJuX3RpbWUgPSBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgPyBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgOiAnMTYwMCc7XHJcbiAgICB9XHJcbiAgICB0aGlzLl91cGRhdGVSZXR1cm5EYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWdlUmFuZ2U6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IGFnZVJhbmdlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWdlUmFuZ2U7XHJcbiAgfVxyXG4gIHNldCBhZ2VSYW5nZShkYXRhOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2FnZVJhbmdlID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByaWNlRGlyOiBib29sZWFuID0gdHJ1ZTtcclxuICBnZXQgcHJpY2VEaXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJpY2VEaXI7XHJcbiAgfVxyXG4gIHNldCBwcmljZURpcihkYXRhOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9wcmljZURpciA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kYXRlRGlyOiBib29sZWFuID0gdHJ1ZTtcclxuICBnZXQgZGF0ZURpcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRlRGlyO1xyXG4gIH1cclxuICBzZXQgZGF0ZURpcihkYXRhOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9kYXRlRGlyID0gZGF0YTtcclxuICB9XHJcblxyXG4gIGdldCBjaG9zZW5TZWFyY2hDbGFzcygpOiBJcmxDbGFzcyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNob3NlblNlYXJjaENsYXNzKGNsYXNzUjogSXJsQ2xhc3MpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jbGFzcyA9IGNsYXNzUjtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBkaXNjb3VudENhcmQoKTogSXJsVHJhdmVsQ2FyZCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmlybERpc2NvdW50Q2FyZHM7XHJcbiAgfVxyXG5cclxuICBzZXQgZGlzY291bnRDYXJkKGRhdGE6IElybFRyYXZlbENhcmQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5pcmxEaXNjb3VudENhcmRzID0gZGF0YTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lybERpc2NvdW50Q2FyZHNBcnJheTogSXJsVHJhdmVsQ2FyZFtdID0gW107XHJcbiAgZ2V0IGlybERpc2NvdW50Q2FyZHNBcnJheSgpOiBJcmxUcmF2ZWxDYXJkW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lybERpc2NvdW50Q2FyZHNBcnJheTtcclxuICB9XHJcblxyXG4gIHNldCBpcmxEaXNjb3VudENhcmRzQXJyYXkoYXJyYXk6IElybFRyYXZlbENhcmRbXSkge1xyXG4gICAgdGhpcy5faXJsRGlzY291bnRDYXJkc0FycmF5ID0gYXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgb3V0Qm91bmREYXRlVGltZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZTtcclxuICB9XHJcblxyXG4gIHNldCBvdXRCb3VuZERhdGVUaW1lKG5ld0RhdGVUaW1lOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSA9IG1vbWVudChuZXdEYXRlVGltZSk7XHJcblxyXG4gICAgdGhpcy5taW5JbmJvdW5kRGF0ZSA9IHtcclxuICAgICAgeWVhcjogbmV3RGF0ZVRpbWUueWVhcigpLFxyXG4gICAgICBtb250aDogbmV3RGF0ZVRpbWUubW9udGgoKSArIDEsXHJcbiAgICAgIGRheTogbmV3RGF0ZVRpbWUuZGF0ZSgpXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChuZXdEYXRlVGltZSAmJiBuZXdEYXRlVGltZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5fb3V0Ym91bmRfZGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShuZXdEYXRlVGltZSk7XHJcbiAgICAgIHRoaXMuX291dGJvdW5kX3RpbWUgPSBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgPyBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgOiAnMDcwMCc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUgJiZcclxuICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgJiZcclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lLmlzQWZ0ZXIodGhpcy5pbkJvdW5kRGF0ZVRpbWUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pbkJvdW5kRGF0ZVRpbWUgPSB0aGlzLm91dEJvdW5kRGF0ZVRpbWUuY2xvbmUoKS5hZGQoMSwgJ2RheScpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBpbkJvdW5kRGF0ZVRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJldHVybkRlcGFydHVyZURhdGVUaW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IGluQm91bmREYXRlVGltZShuZXdEYXRlVGltZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnJldHVybkRlcGFydHVyZURhdGVUaW1lID0gbmV3RGF0ZVRpbWU7XHJcbiAgICBpZiAobmV3RGF0ZVRpbWUgJiYgbmV3RGF0ZVRpbWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMuX3JldHVybl9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG5ld0RhdGVUaW1lKTtcclxuICAgICAgdGhpcy5fcmV0dXJuX3RpbWUgPSBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgPyBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgOiAnMTYwMCc7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICAvLyAhZGF0ZSBhbmQgdGltZSBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IGZvciBMVVxyXG4gIHByaXZhdGUgX291dGJvdW5kX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xyXG5cclxuICBnZXQgb3V0Ym91bmRfZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9vdXRib3VuZF9kYXRlO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dGJvdW5kX2RhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX291dGJvdW5kX2RhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZU91dGJvdW5kRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX291dGJvdW5kX3RpbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IG91dGJvdW5kX3RpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9vdXRib3VuZF90aW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dGJvdW5kX3RpbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fb3V0Ym91bmRfdGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmV0dXJuX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xyXG5cclxuICBnZXQgcmV0dXJuX2RhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmV0dXJuX2RhdGU7XHJcbiAgfVxyXG5cclxuICBzZXQgcmV0dXJuX2RhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcclxuICAgIHRoaXMuX3JldHVybl9kYXRlID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVSZXR1cm5EYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmV0dXJuX3RpbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IHJldHVybl90aW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmV0dXJuX3RpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgcmV0dXJuX3RpbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcmV0dXJuX3RpbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZVJldHVybkRhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHRpbWVBcnJheSgpOiBWYWx1ZURpc3BsYXlbXSB7XHJcbiAgICB0aGlzLl90aW1lQXJyYXkgPVxyXG4gICAgICB0aGlzLl90aW1lQXJyYXkgfHxcclxuICAgICAgQXJyYXkoNDgpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2YWx1ZTpcclxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gMilcclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXHJcbiAgICAgICAgICAgICAgKChpbmRleCAlIDIpICogMzApLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSxcclxuICAgICAgICAgICAgZGlzcGxheTpcclxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gMilcclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXHJcbiAgICAgICAgICAgICAgJzonICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgMikgKiAzMCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuX3RpbWVBcnJheTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX29mZmxpbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBnZXQgb2ZmbGluZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9vZmZsaW5lO1xyXG4gIH1cclxuXHJcbiAgc2V0IG9mZmxpbmUoZGF0YTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fb2ZmbGluZSA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pcmxDbGFzczogSXJsQ2xhc3MgPSBJcmxDbGFzcy5BbGw7XHJcbiAgZ2V0IGlybENsYXNzKCk6IElybENsYXNzIHtcclxuICAgIHJldHVybiB0aGlzLl9pcmxDbGFzcztcclxuICB9XHJcblxyXG4gIHNldCBpcmxDbGFzcyhkYXRhOiBJcmxDbGFzcykge1xyXG4gICAgdGhpcy5faXJsQ2xhc3MgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfam91cm5leXR5cGU6IElybEpvdXJuZXlUeXBlID0gSXJsSm91cm5leVR5cGUuU2luZ2xlSm91cm5leTtcclxuICBnZXQgam91cm5leVR5cGUoKTogSXJsSm91cm5leVR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX2pvdXJuZXl0eXBlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGpvdXJuZXlUeXBlKGRhdGE6IElybEpvdXJuZXlUeXBlKSB7XHJcbiAgICB0aGlzLl9qb3VybmV5dHlwZSA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBnZXQgc29ydERyb3Bkb3duVmFsdWVzKCk6IFNvcnRUeXBlSXJsW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvcnRBcnJheTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3RyYWluTnVtYmVyOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCB0cmFpbk51bWJlcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RyYWluTnVtYmVyO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRyYWluTnVtYmVyKGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdHJhaW5OdW1iZXIgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWRkaXRpb25hbEluc3RydWN0aW9uczogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgYWRkaXRpb25hbEluc3RydWN0aW9ucygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FkZGl0aW9uYWxJbnN0cnVjdGlvbnM7XHJcbiAgfVxyXG4gIHNldCBhZGRpdGlvbmFsSW5zdHJ1Y3Rpb25zKGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5fYWRkaXRpb25hbEluc3RydWN0aW9ucyA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgSXJsZmV0Y2hlcjogQmFzZUlybFF1b3RlRmV0Y2hlcjxRPixcclxuICAgIHByaXZhdGUgaXJsRGlzY291bnRDYXJkc0ZldGNoZXI6IEJhc2VJcmxEaXNjb3VudENhcmRGZXRjaGVyPEdJREZfUT4sXHJcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXHJcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBwcml2YXRlIGdldElybFN1cHBsaWVyU3RhdGlvbkZldGNoZXI6IEJhc2VHZXRJcmxTdXBwbGllclN0YXRpb25GZXRjaGVyPEdJU1NGX1E+XHJcbiAgKSB7XHJcbiAgICBzdXBlcihzdG9yYWdlU2VydmljZSwgaGVscGVycyk7XHJcblxyXG4gICAgY29uc3QgZGF0YToge1xyXG4gICAgICBxdWVyeToge307XHJcbiAgICAgIHRlbXBQYXJhbXM6IElybFRlbXBQYXJhbXM7XHJcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogSXJsVGVtcFBhcmFtcztcclxuICAgIH0gPSBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbShcclxuICAgICAgSVJMRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TXHJcbiAgICApIHx8IHtcclxuICAgICAgcXVlcnk6IHt9LFxyXG4gICAgICB0ZW1wUGFyYW1zOiB7fSBhcyBJcmxUZW1wUGFyYW1zLFxyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHt9IGFzIElybFRlbXBQYXJhbXNcclxuICAgIH07XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VJcmxRdWVyeShkYXRhLnRlbXBQYXJhbXMpKTtcclxuICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IGRhdGEub3JpZ2luYWxVc2VyU2VhcmNoO1xyXG5cclxuICAgIGlmIChzZWFyY2hTZXJ2aWNlLnNob3VsZEFkZFRyYXZlbGxlclN1YnNjcmlwdGlvbigpKSB7XHJcbiAgICAgIHNlYXJjaFNlcnZpY2UudHJhdmVsbGVySW5mb3JtYXRpb24uc3Vic2NyaWJlKFxyXG4gICAgICAgICh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcclxuICAgICAgICAgIGlmICh0aGlzLnRyYXZlbGxlcnNbMF0gJiYgIXRoaXMudHJhdmVsbGVyc1swXS5hZ2VUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJhdmVsbGVyc1swXS5hZ2VUeXBlID0gYWdlcy5BZHVsdDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IHNwbGl0VHJhdmVsbGVycyA9IHRoaXMuaGVscGVycy5zZWxlY3RlZFRyYXZlbGxlcnMoXHJcbiAgICAgICAgICAgIHRyYXZlbGxlcnMsXHJcbiAgICAgICAgICAgIFNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHNwbGl0VHJhdmVsbGVycy5hZHVsdHMubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gc3BsaXRUcmF2ZWxsZXJzLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcbiAgICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgY29uc3QgcmVzdWx0cyA9XHJcbiAgICAgIHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0PElybFF1b3RlUmVzdWx0QXJyYXk+KFxyXG4gICAgICAgIHRoaXMucmVzdWx0c1Nlc3Npb25OYW1lXHJcbiAgICAgICkgfHwgW107XHJcbiAgICAvLyBpZiAocmVzdWx0cyA9PSBudWxsICYmIHRoaXMuaXNWYWxpZCkge1xyXG4gICAgLy8gICBzZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcclxuICAgIC8vIH1cclxuICAgIHRoaXMuX2NoZWFwZXN0UmVzdWx0UHJpY2UgPSB0aGlzLnVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHMpO1xyXG4gICAgdGhpcy5mdWxsUmVzdWx0cyA9IHJlc3VsdHM7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChyZXN1bHRzIHx8IFtdKTtcclxuICB9XHJcbiAgaXJsRGlzY291bnRDYXJkczogSXJsVHJhdmVsQ2FyZDtcclxuXHJcbiAgcHJvdGVjdGVkIHByb2Nlc3NSZXN1bHRzKHJlc3VsdHM6IElybFF1b3RlUmVzdWx0QXJyYXkpIHtcclxuICAgIHJlc3VsdHNbMF0/Lm91dGJvdW5kLmZvckVhY2goKGl0ZW06IElybEpvdXJuZXlPcHRpb24pID0+IHtcclxuICAgICAgaXRlbS5wcm92aWRlcnNbMF0udGlja2V0T3B0aW9ucy5tYXAoXHJcbiAgICAgICAgKHRpY2tldDogSXJsVGlja2V0T3B0aW9uV2l0aFNlbGVjdGVkLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICB0aWNrZXQuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHRpY2tldC5TaG93RGV0YWlsID0gZmFsc2U7XHJcbiAgICAgICAgICB0aWNrZXQudWlkID0gYCR7dGlja2V0LmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyfV8ke2luZGV4ICsgMX1gO1xyXG4gICAgICAgICAgcmV0dXJuIHRpY2tldDtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIE9iamVjdC5mcmVlemUocmVzdWx0cyk7XHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxuICB9XHJcbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VJcmxRdWVyeSgpKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzVmFsaWQoKSB7XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBJUkxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcblxyXG4gICAgY29uc3Qgbm93ID0gbW9tZW50KCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLl90cmF2ZWxsaW5nRnJvbSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgRW50ZXIgYSBGcm9tIExvY2F0aW9uLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5fdHJhdmVsbGluZ1RvKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBFbnRlciBhIFRvIExvY2F0aW9uLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm91dEJvdW5kRGF0ZVRpbWU/LmlzQmVmb3JlKG5vdykpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAnRGVwYXJ0dXJlIERhdGUvVGltZSBjYW5ub3QgYmUgaW4gdGhlIHBhc3QuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIChcclxuICAgIC8vICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID09PSBJcmxKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5XHJcbiAgICAvLyApIHtcclxuICAgIC8vICAgLy8gY2hlY2sgZm9yIHJldHVybiBzcGVjaWZpYyB2YWxpZGF0aW9ucyBpbiBoZXJlXHJcblxyXG4gICAgLy8gICBpZiAodGhpcy5pbkJvdW5kRGF0ZVRpbWU/LmlzU2FtZU9yQmVmb3JlKHRoaXMub3V0Qm91bmREYXRlVGltZSkpIHtcclxuICAgIC8vICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgLy8gICAgICAgJ1JldHVybiBEYXRlL1RpbWUgbXVzdCBiZSBhZnRlciBEZXBhcnR1cmUgRGF0ZS9UaW1lJ1xyXG4gICAgLy8gICAgICk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBpZiAodGhpcy52aWEpIHtcclxuICAgIC8vICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMudmlhTG9jYXRpb24pIHtcclxuICAgIC8vICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgZW50ZXIgYSB2aWEgbG9jYXRpb24uJyk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmFkdWx0cyArIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA8IDEpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCAxIHRyYXZlbGxlcicpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICB0aGlzLm1lc3NhZ2VzLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcclxuICAgICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gT2JqZWN0LmZyZWV6ZSh7IC4uLnRoaXMudGVtcFBhcmFtcyB9KTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgICBJUkxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVSZWNlbnRTZWFyY2godGhpcy5nZXRSZWNlbnRTZWFyY2hRdWVyeShxdWVyeSkpO1xyXG4gICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2goXHJcbiAgICAgICAgdGhpcy5JcmxmZXRjaGVyLmZldGNoTGlzdChxdWVyeSkucGlwZShtYXAoKHJlc3VsdCkgPT4gcmVzdWx0KSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVjZW50U2VhcmNoUXVlcnkoXHJcbiAgICBxdWVyeTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXNcclxuICApOiBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMge1xyXG4gICAgY29uc3QgcmVjZW50U2VhcmNoUXVlcnk6IElJcmxTZWFyY2hBcmdzID0gdGhpcy51cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5KTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWwsXHJcbiAgICAgIHNlYXJjaEFyZ3M6IHJlY2VudFNlYXJjaFF1ZXJ5LFxyXG4gICAgICB0cmF2ZWxEYXRlOiB0aGlzLm91dEJvdW5kRGF0ZVRpbWUuZm9ybWF0KCksXHJcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2VyY2hRdWVyeShxdWVyeTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMpOiBJSXJsU2VhcmNoQXJncyB7XHJcbiAgICBjb25zdCBzZWFyY2hRdWVyeTogSUlybFNlYXJjaEFyZ3MgPSBxdWVyeTtcclxuICAgIGlmICh0aGlzLnRyYXZlbGxpbmdGcm9tKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LnRyYXZlbGxpbmdGcm9tID0gdGhpcy50cmF2ZWxsaW5nRnJvbTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy50cmF2ZWxsaW5nVG8pIHtcclxuICAgICAgc2VhcmNoUXVlcnkudHJhdmVsbGluZ1RvID0gdGhpcy50cmF2ZWxsaW5nVG87XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2VhcmNoUXVlcnk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhcnRSZWNlbnRTZWFyY2gocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcclxuICAgIHRoaXMuam91cm5leVR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5qb3VybmV5VHlwZTtcclxuICAgIHRoaXMuaXJsQ2xhc3MgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jbGFzcztcclxuICAgIHRoaXMudHJhdmVsbGluZ1RvID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudHJhdmVsbGluZ1RvO1xyXG4gICAgdGhpcy50cmF2ZWxsaW5nRnJvbSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRyYXZlbGxpbmdGcm9tO1xyXG5cclxuICAgIC8vIGdldCBvdXRCb3VuZERhdGVUaW1lLCBpbkJvdW5kRGF0ZVRpbWVcclxuICAgIHRoaXMub3V0Qm91bmREYXRlVGltZSA9IG1vbWVudChcclxuICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZVxyXG4gICAgKTtcclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5qb3VybmV5VHlwZSA9PT0gSXJsSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSkge1xyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IG1vbWVudChcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVPdXRib3VuZERhdGVUaW1lKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX291dGJvdW5kX2RhdGUgJiYgdGhpcy5fb3V0Ym91bmRfdGltZSkge1xyXG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICAgIHRoaXMuX291dGJvdW5kX2RhdGUsXHJcbiAgICAgICAgdGhpcy5fb3V0Ym91bmRfdGltZVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fcmV0dXJuX2RhdGUgJiYgdGhpcy5fcmV0dXJuX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9yZXR1cm5fZGF0ZSxcclxuICAgICAgICB0aGlzLl9yZXR1cm5fdGltZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFF1ZXJ5KCk6IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzIHtcclxuICAgIC8vIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcbiAgICBpZiAoIXRoaXMudHJhdmVsbGVycykgeyB0aGlzLm5vT2ZBZHVsdHMgPSB0aGlzLmFkdWx0czsgdGhpcy5ub09mQ2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuOyB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5ub09mQWR1bHRzID0gdGhpcy50cmF2ZWxsZXJzLmZpbHRlcihcclxuICAgICAgICAodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+XHJcbiAgICAgICAgICB0cmF2ZWxsZXIuYWdlVHlwZSA9PT0gYWdlcy5BZHVsdCB8fFxyXG4gICAgICAgICAgdHJhdmVsbGVyLmFnZVR5cGUgPT09IGFnZXMuWW91dGggfHxcclxuICAgICAgICAgIHRyYXZlbGxlci5hZ2VUeXBlID09PSBhZ2VzLlNlbmlvclxyXG4gICAgICApLmxlbmd0aDtcclxuICAgICAgdGhpcy5ub09mQ2hpbGRyZW4gPSB0aGlzLnRyYXZlbGxlcnMuZmlsdGVyKFxyXG4gICAgICAgICh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4gdHJhdmVsbGVyLmFnZVR5cGUgPT09IGFnZXMuQ2hpbGRcclxuICAgICAgKS5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmICghdGhpcy5zdXBwbGllciAmJiB0aGlzLnRyYXZlbGxpbmdGcm9tLm5hbWUpIHtcclxuICAgICAgdGhpcy5zdXBwbGllciA9IHRoaXMudHJhdmVsbGluZ0Zyb20ucmFpbHN0YXRpb24uc3VwcGxpZXI7XHJcbiAgICAgIHRoaXMuZ2V0SXJsRGlzY291bnRDYXJkcygpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXJsRGlzY291bnRDYXJkc0FycmF5ID0gZGF0YTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBxdWVyeTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMgPSB7XHJcbiAgICAgIHN1cHBsaWVyOiB0aGlzLnN1cHBsaWVyLCAvLyBJUkxTdXBwbGllciFcclxuICAgICAgY291bnRyeUNvZGU6ICdHQicsXHJcbiAgICAgIGlybERpc2NvdW50Q2FyZHM6IHRoaXMuZGlzY291bnRDYXJkID8gdGhpcy5kaXNjb3VudENhcmQuaWQgOiBudWxsLFxyXG4gICAgICBjbGFzczogdGhpcy5jbGFzcywgLy8gSVJMQ2xhc3NcclxuICAgICAgb3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZTogdGhpcy50ZW1wUGFyYW1zLm91dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWUsXHJcbiAgICAgIGRlcGFydHVyZUxvY2F0aW9uSWQ6IHRoaXMuX3RyYXZlbGxpbmdGcm9tLFxyXG4gICAgICBhcnJpdmFsTG9jYXRpb25JZDogdGhpcy5fdHJhdmVsbGluZ1RvLFxyXG4gICAgICBhZHVsdHM6IHRoaXMudGVtcFBhcmFtcy5hZHVsdHMsXHJcbiAgICAgIGNoaWxkcmVuOiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4sXHJcbiAgICAgIHJldHVybkRlcGFydHVyZURhdGVUaW1lOiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUsXHJcbiAgICAgIGpvdXJuZXlUeXBlOiB0aGlzLmpvdXJuZXlUeXBlXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPT09IDApIHtcclxuICAgICAgcXVlcnkuY2hpbGRyZW4gPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAodGhpcy50ZW1wUGFyYW1zLmpvdXJuZXlUeXBlKSB7XHJcbiAgICAgIGNhc2UgSXJsSm91cm5leVR5cGUuU2luZ2xlSm91cm5leTpcclxuICAgICAgICBxdWVyeS5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSA9IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzPihxdWVyeSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhcclxuICAgIHByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cclxuICApOiB2b2lkIHt9XHJcblxyXG4gIHVwZGF0ZUNhbkNvbWJpbmUodGt0OiBJcmxUaWNrZXRPcHRpb24pOiB2b2lkIHtcclxuICAgICh0a3QuaWRlbnRpZmllcnMuYWxsb3dlZFdpdGggfHwgW10pLmZvckVhY2goKGFsbG93ZWQpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLl9jYW5Db21iaW5lW3RrdC50eXBlXVthbGxvd2VkLmpvdXJuZXlJZGVudGlmaWVyXSkge1xyXG4gICAgICAgIHRoaXMuX2NhbkNvbWJpbmVbdGt0LnR5cGVdW2FsbG93ZWQuam91cm5leUlkZW50aWZpZXJdID0gW1xyXG4gICAgICAgICAgYWxsb3dlZC5mYXJlSWRlbnRpZmllclxyXG4gICAgICAgIF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fY2FuQ29tYmluZVt0a3QudHlwZV1bYWxsb3dlZC5qb3VybmV5SWRlbnRpZmllcl0ucHVzaChcclxuICAgICAgICAgIGFsbG93ZWQuZmFyZUlkZW50aWZpZXJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldExlZ3NGcm9tSXJsSm91cm5leU9wdGlvbihyYWlsSm91cm5leU9wdGlvbjogSXJsSm91cm5leU9wdGlvbik6IGFueVtdIHtcclxuICAgIGxldCBsZWdzOiBhbnlbXSA9IFtdO1xyXG4gICAgaWYgKHJhaWxKb3VybmV5T3B0aW9uPy5zZWdtZW50cy5sZW5ndGgpIHtcclxuICAgICAgbGVncyA9IHJhaWxKb3VybmV5T3B0aW9uLnNlZ21lbnRzLm1hcCgoc2VnbWVudDogSXJsU2VnbWVudCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBvcGVyYXRvcjpcclxuICAgICAgICAgICAgc2VnbWVudC5vcGVyYXRvciB8fCByYWlsSm91cm5leU9wdGlvbi5wcm92aWRlcnNbMF0ucHJvdmlkZXJJZCxcclxuICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBzZWdtZW50LmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IHNlZ21lbnQuZGVwYXJ0LFxyXG4gICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBzZWdtZW50LmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBzZWdtZW50LmFycml2ZVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxlZ3M7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZElybFRpY2tldE9wdGlvbihcclxuICAgIGlybEpvdXJuZXlPcHRpb246IElybEpvdXJuZXlPcHRpb24sXHJcbiAgICBpcmxUaWNrZXRPcHRpb246IElybFRpY2tldE9wdGlvbixcclxuICAgIHByb3ZpZGVySW5kZXg6IG51bWJlclxyXG4gICk6IElybFRpY2tldE9wdGlvbiB7XHJcblxyXG4gICAgcmV0dXJuIGlybEpvdXJuZXlPcHRpb24ucHJvdmlkZXJzW3Byb3ZpZGVySW5kZXhdLnRpY2tldE9wdGlvbnMuZmluZChcclxuICAgICAgKHRpY2tldE9wdGlvbikgPT5cclxuICAgICAgICB0aWNrZXRPcHRpb24udHlwZSA9PT0gaXJsVGlja2V0T3B0aW9uLnR5cGUgJiZcclxuICAgICAgICAodGlja2V0T3B0aW9uLnByaWNlID09PSBpcmxUaWNrZXRPcHRpb24ucHJpY2UgfHxcclxuICAgICAgICAgIHRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllciA9PT1cclxuICAgICAgICAgICAgaXJsVGlja2V0T3B0aW9uLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGFkZFNpbmdsZUpvdXJuZXlUb0Jhc2tldChcclxuICAgIHNlcnZpY2VJZDogc3RyaW5nLFxyXG4gICAgaXJsUXVlcnk6IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzLFxyXG4gICAgb3V0Ym91bmQ6IElybFRpY2tldE9wdGlvbixcclxuICAgIGlybEpvdXJuZXlPcHRpb246IElybEpvdXJuZXlPcHRpb25cclxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIC8vICAgY29uc29sZS5sb2coc2VydmljZUlkLHJhaWxRdWVyeSxpcmxKb3VybmV5T3B0aW9uKVxyXG4gICAgLy8gICAvLyBpZiAoaXJsSm91cm5leU9wdGlvbi51bnNlbGxhYmxlKSB7XHJcbiAgICAvLyAgIC8vICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAvLyAgIC8vIH1cclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZElybFRpY2tldE9wdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24oXHJcbiAgICAgICAgaXJsSm91cm5leU9wdGlvbixcclxuICAgICAgICBvdXRib3VuZCxcclxuICAgICAgICAwXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGxlZ3MgPSB0aGlzLmdldExlZ3NGcm9tSXJsSm91cm5leU9wdGlvbihpcmxKb3VybmV5T3B0aW9uKTtcclxuICAgICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQoaXJsSm91cm5leU9wdGlvbik7XHJcbiAgICAgIC8vIHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uLmlkZW50aWZpZXJzLnByb3ZpZGVyO1xyXG4gICAgICBjb25zdCBiYXNrZXRJdGVtID0ge1xyXG4gICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxyXG4gICAgICAgIHNlcnZpY2U6IHNlcnZpY2VJZCxcclxuICAgICAgICBkZXRhaWw6IHtcclxuICAgICAgICAgIG91dHdhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBpcmxKb3VybmV5T3B0aW9uLmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IGlybEpvdXJuZXlPcHRpb24udG8sXHJcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uQ29kZTogaXJsSm91cm5leU9wdGlvbi50b0NvZGUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBpcmxKb3VybmV5T3B0aW9uLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogaXJsSm91cm5leU9wdGlvbi5mcm9tLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uQ29kZTogaXJsSm91cm5leU9wdGlvbi5mcm9tQ29kZSxcclxuICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3VwcGxpZXJOYW1lOiBpcmxKb3VybmV5T3B0aW9uLnByb3ZpZGVyc1swXS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBwcmljZTogc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24ucHJpY2UsXHJcbiAgICAgICAgICAgICAgICBsZWdzXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJhbnNhY3Rpb25JZGVudGlmaWVyOlxyXG4gICAgICAgICAgICBpcmxKb3VybmV5T3B0aW9uLmlkZW50aWZpZXJzLnRyYW5zYWN0aW9uSWRlbnRpZmllcixcclxuICAgICAgICAgIG91dGJvdW5kOiB7XHJcbiAgICAgICAgICAgIGZhcmVJZGVudGlmaWVyczogW1xyXG4gICAgICAgICAgICAgIHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uLmlkZW50aWZpZXJzLmZhcmVJZGVudGlmaWVyXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIGpvdXJuZXlJZGVudGlmaWVyOlxyXG4gICAgICAgICAgICAgIHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uLmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc3VwcGxpZXI6IGlybEpvdXJuZXlPcHRpb24ucHJvdmlkZXJzWzBdLnByb3ZpZGVySWQsXHJcbiAgICAgICAgICB0ZXJtc0FuZENvbmQ6IHRlcm1zQW5kQ29uZGl0aW9uc1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYWR1bHRzOiBpcmxRdWVyeS5hZHVsdHMsXHJcbiAgICAgICAgcHJpY2U6IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uLnByaWNlLFxyXG4gICAgICAgIGN1cnJlbmN5OiBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgc2VhcmNoUXVlcnk6IGlybFF1ZXJ5LFxyXG4gICAgICAgIC8vIGNvMlBlckl0ZW06IGlybEpvdXJuZXlPcHRpb24uY28yUGVySXRlbSxcclxuICAgICAgICAvLyBjbzJQZXJQYXNzZW5nZXI6IGlybEpvdXJuZXlPcHRpb24uY28yUGVyUGFzc2VuZ2VyLFxyXG4gICAgICAgIG91dGJvdW5kRGF0ZTogaXJsSm91cm5leU9wdGlvbi5kZXBhcnREYXRlVGltZVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICBiYXNrZXRJdGVtLFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzLFxyXG4gICAgICAgIGZhbHNlIC8vIFRPRE9cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkUmV0dXJuSm91cm5leVRvQmFza2V0KFxyXG4gICAgc2VydmljZUlkOiBzdHJpbmcsXHJcbiAgICBpcmxRdWVyeTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMsXHJcbiAgICBpbmJvdW5kOiBJcmxUaWNrZXRPcHRpb24sXHJcbiAgICBpbkpvdXJuZXlPcHRpb246IElybEpvdXJuZXlPcHRpb24sXHJcbiAgICBvdXRib3VuZFRpY2tldD86IElybFRpY2tldE9wdGlvbixcclxuICAgIG91dGJvdW5kSm91cm5leT86IElybEpvdXJuZXlPcHRpb25cclxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IG91dGJvdW5kID0gb3V0Ym91bmRUaWNrZXQgPyBvdXRib3VuZFRpY2tldCA6IHRoaXMub3V0Ym91bmRUaWNrZXQ7XHJcbiAgICBjb25zdCBvdXRKb3VybmV5T3B0aW9uID0gb3V0Ym91bmRKb3VybmV5ID8gb3V0Ym91bmRKb3VybmV5IDogdGhpcy5vdXRib3VuZEpvdXJuZXlPcHRpb25zO1xyXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XHJcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XHJcbiAgICBpZiAoYmFza2V0KSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uID0gdGhpcy5nZXRTZWxlY3RlZElybFRpY2tldE9wdGlvbihcclxuICAgICAgICBvdXRKb3VybmV5T3B0aW9uLFxyXG4gICAgICAgIG91dGJvdW5kLFxyXG4gICAgICAgIDBcclxuICAgICAgKTtcclxuICAgICAgY29uc3Qgb3V0Ym91bmRMZWdzID0gdGhpcy5nZXRMZWdzRnJvbUlybEpvdXJuZXlPcHRpb24ob3V0Sm91cm5leU9wdGlvbik7XHJcbiAgICAgIGNvbnN0IGluYm91bmRMZWdzID0gdGhpcy5nZXRMZWdzRnJvbUlybEpvdXJuZXlPcHRpb24oaW5Kb3VybmV5T3B0aW9uKTtcclxuICAgICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQob3V0Sm91cm5leU9wdGlvbik7XHJcbiAgICAgIGNvbnN0IGJhc2tldEl0ZW0gPSB7XHJcbiAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXHJcbiAgICAgICAgc2VydmljZTogc2VydmljZUlkLFxyXG4gICAgICAgIGRldGFpbDoge1xyXG4gICAgICAgICAgb3V0d2FyZERldGFpbDoge1xyXG4gICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IG91dEpvdXJuZXlPcHRpb24uYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogb3V0Sm91cm5leU9wdGlvbi50byxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25Db2RlOiBvdXRKb3VybmV5T3B0aW9uLnRvQ29kZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbkNvZGU6IG91dEpvdXJuZXlPcHRpb24uZnJvbUNvZGUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBvdXRKb3VybmV5T3B0aW9uLmRlcGFydERhdGVUaW1lLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogb3V0Sm91cm5leU9wdGlvbi5mcm9tLFxyXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IG91dEpvdXJuZXlPcHRpb24ucHJvdmlkZXJzWzBdLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24udHlwZSxcclxuICAgICAgICAgICAgICAgIHByaWNlOiBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5wcmljZSxcclxuICAgICAgICAgICAgICAgIGxlZ3M6IG91dGJvdW5kTGVnc1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGlud2FyZERldGFpbDoge1xyXG4gICAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IGluSm91cm5leU9wdGlvbi5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBpbkpvdXJuZXlPcHRpb24udG8sXHJcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uQ29kZTogaW5Kb3VybmV5T3B0aW9uLnRvQ29kZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbkNvZGU6IGluSm91cm5leU9wdGlvbi5mcm9tQ29kZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IGluSm91cm5leU9wdGlvbi5kZXBhcnREYXRlVGltZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IGluSm91cm5leU9wdGlvbi5mcm9tLFxyXG4gICAgICAgICAgICBzdXBwbGllclRpY2tldHM6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdXBwbGllck5hbWU6IGluSm91cm5leU9wdGlvbi5wcm92aWRlcnNbMF0ubmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBpbmJvdW5kLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBsZWdzOiBpbmJvdW5kTGVnc1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjogb3V0Ym91bmQuaWRlbnRpZmllcnMudHJhbnNhY3Rpb25JZGVudGlmaWVyLFxyXG4gICAgICAgICAgb3V0Ym91bmQ6IHtcclxuICAgICAgICAgICAgZmFyZUlkZW50aWZpZXJzOiBbXHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24uaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXJcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgam91cm5leUlkZW50aWZpZXI6XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24uaWRlbnRpZmllcnMuam91cm5leUlkZW50aWZpZXJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzdXBwbGllcjogb3V0Sm91cm5leU9wdGlvbi5wcm92aWRlcnNbMF0ucHJvdmlkZXJJZCxcclxuICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZHVsdHM6IGlybFF1ZXJ5LmFkdWx0cyxcclxuICAgICAgICBwcmljZTogTnVtYmVyKChOdW1iZXIoc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24ucHJpY2UpICsgTnVtYmVyKGluYm91bmQucHJpY2UpKS50b0ZpeGVkKDIpKSxcclxuICAgICAgICBjdXJyZW5jeTogc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24uY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICAgIHNlYXJjaFF1ZXJ5OiBpcmxRdWVyeSxcclxuICAgICAgICBvdXRib3VuZERhdGU6IG91dEpvdXJuZXlPcHRpb24uZGVwYXJ0RGF0ZVRpbWVcclxuICAgICAgICAvLyBjbzJQZXJJdGVtOiBvdXRib3VuZC5jbzJQZXJJdGVtLFxyXG4gICAgICAgIC8vIGNvMlBlclBhc3Nlbmdlcjogb3V0Ym91bmQuY28yUGVyUGFzc2VuZ2VyXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuZmlsdGVyU2VsZWN0ZWQoKTtcclxuICAgICAgY29uc29sZS5sb2coYmFza2V0SXRlbSk7XHJcbiAgICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAgYmFza2V0SXRlbSxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcclxuICAgICAgICBmYWxzZSAvLyBUT0RPXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IElybEpvdXJuZXlPcHRpb25zW10pOiBJQ2hlYXBlc3RQcmljZSB7XHJcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGN1cnJlbmN5ID1cclxuICAgICAgcmVzdWx0c1swXT8ub3V0Ym91bmRbMF0/LnByb3ZpZGVyc1swXT8uY2hlYXBlc3RUaWNrZXQ/LmN1cnJlbmN5O1xyXG4gICAgY29uc3QgcHJpY2UgPSB0aGlzLmZpbmRDaGVhcGVzdFRpY2tldChyZXN1bHRzKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGFtb3VudDogcHJpY2UsXHJcbiAgICAgIGN1cnJlbmN5Q29kZTogY3VycmVuY3lcclxuICAgIH07XHJcbiAgfVxyXG4gIGZpbmRDaGVhcGVzdFRpY2tldChyZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uc1tdKTogbnVtYmVyIHtcclxuICAgIHRoaXMuX2NoZWFwZXN0Rmlyc3QgPSBudWxsO1xyXG4gICAgdGhpcy5fY2hlYXBlc3RTdGFuZGFyZCA9IG51bGw7XHJcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGNoZWFwZXN0QXJyOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICAgIHJlc3VsdHMubWFwKChyZXN1bHQpID0+IHtcclxuICAgICAgcmVzdWx0Lm91dGJvdW5kLm1hcCgob3V0KSA9PiB7XHJcbiAgICAgICAgb3V0LnByb3ZpZGVycy5tYXAoKHRrdCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY2hlYXBlc3RUaWNrZXQ6IG51bWJlciA9IHRrdC5jaGVhcGVzdFRpY2tldC5wcmljZTtcclxuICAgICAgICAgIHRrdC50aWNrZXRPcHRpb25zLm1hcCgodGt0T3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRrdFByaWNlID0gdGt0T3B0aW9uLnByaWNlO1xyXG4gICAgICAgICAgICBjb25zdCB0a3RDbGFzcyA9IHRrdE9wdGlvbi5jbGFzcztcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIHRrdENsYXNzID09PSAnRmlyc3QnICYmXHJcbiAgICAgICAgICAgICAgKHRoaXMuX2NoZWFwZXN0Rmlyc3Q/LnByaWNlID4gdGt0UHJpY2UgfHwgIXRoaXMuX2NoZWFwZXN0Rmlyc3QpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2NoZWFwZXN0Rmlyc3QgPSB0a3RPcHRpb247XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgdGt0Q2xhc3MgPT09ICdTdGFuZGFyZCcgJiZcclxuICAgICAgICAgICAgICAodGhpcy5fY2hlYXBlc3RTdGFuZGFyZD8ucHJpY2UgPiB0a3RQcmljZSB8fFxyXG4gICAgICAgICAgICAgICAgIXRoaXMuX2NoZWFwZXN0U3RhbmRhcmQpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2NoZWFwZXN0U3RhbmRhcmQgPSB0a3RPcHRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRrdFByaWNlID09PSBjaGVhcGVzdFRpY2tldCkge1xyXG4gICAgICAgICAgICAgIGNoZWFwZXN0QXJyLnB1c2goY2hlYXBlc3RUaWNrZXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBNYXRoLm1pbiguLi5jaGVhcGVzdEFycik7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNvcnQgcmVzdWx0cyBieSBwcmljZVxyXG4gICAqXHJcbiAgICogQHJldHVybnNcclxuICAgKiBAbWVtYmVyb2YgaXJsLWVudGVycHJpc2Utc2VhcmNoXHJcbiAgICovXHJcbiAgc29ydEJ5UHJpY2UoaWdub3JlRGlyZWN0aW9uQ2hhbmdlOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAoIWlnbm9yZURpcmVjdGlvbkNoYW5nZSkge1xyXG4gICAgICB0aGlzLnByaWNlRGlyID0gIXRoaXMucHJpY2VEaXI7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uc1tdID0gdGhpcy5maWx0ZXJTZWxlY3RlZCh0aGlzLl9pc0ZpbHRlcmVkKTtcclxuXHJcbiAgICBjb25zdCBieVByaWNlID0gKGE6IElybEpvdXJuZXlPcHRpb24sIGI6IElybEpvdXJuZXlPcHRpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMucHJpY2VEaXJcclxuICAgICAgICA/IGEucHJvdmlkZXJzWzBdLmNoZWFwZXN0VGlja2V0LnByaWNlIC1cclxuICAgICAgICAgICAgYi5wcm92aWRlcnNbMF0uY2hlYXBlc3RUaWNrZXQucHJpY2VcclxuICAgICAgICA6IGIucHJvdmlkZXJzWzBdLmNoZWFwZXN0VGlja2V0LnByaWNlIC1cclxuICAgICAgICAgICAgYS5wcm92aWRlcnNbMF0uY2hlYXBlc3RUaWNrZXQucHJpY2U7XHJcbiAgICB9O1xyXG4gICAgcmVzdWx0c1swXS5vdXRib3VuZCA9IHJlc3VsdHNbMF0ub3V0Ym91bmQuc29ydChieVByaWNlKTtcclxuICAgIHJlc3VsdHNbMF0ucmV0dXJuID0gcmVzdWx0c1swXS5yZXR1cm4uc29ydChieVByaWNlKTtcclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU29ydCByZXN1bHRzIGJ5IGRlcGFydHVyZSB0aW1lXHJcbiAgICpcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqIEBtZW1iZXJvZiBpcmwtZW50ZXJwcmlzZS1zZWFyY2hcclxuICAgKi9cclxuICBzb3J0QnlEYXRlKGlnbm9yZURpcmVjdGlvbjogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKCFpZ25vcmVEaXJlY3Rpb24pIHtcclxuICAgICAgdGhpcy5kYXRlRGlyID0gIXRoaXMuZGF0ZURpcjtcclxuICAgIH1cclxuICAgIFxyXG5cclxuICAgIGNvbnN0IHJlc3VsdHM6IElybEpvdXJuZXlPcHRpb25zW10gPSB0aGlzLmZpbHRlclNlbGVjdGVkKHRoaXMuX2lzRmlsdGVyZWQpO1xyXG4gICAgY29uc3QgYnlEYXRlID0gKGE6IElybEpvdXJuZXlPcHRpb24sIGI6IElybEpvdXJuZXlPcHRpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGF0ZURpclxyXG4gICAgICAgID8gbW9tZW50KGEuZGVwYXJ0RGF0ZVRpbWUpLnVuaXgoKSAtIG1vbWVudChiLmRlcGFydERhdGVUaW1lKS51bml4KClcclxuICAgICAgICA6IG1vbWVudChiLmRlcGFydERhdGVUaW1lKS51bml4KCkgLSBtb21lbnQoYS5kZXBhcnREYXRlVGltZSkudW5peCgpO1xyXG4gICAgfTtcclxuICAgIHJlc3VsdHNbMF0ub3V0Ym91bmQgPSByZXN1bHRzWzBdLm91dGJvdW5kLnNvcnQoYnlEYXRlKTtcclxuICAgIHJlc3VsdHNbMF0ucmV0dXJuID0gcmVzdWx0c1swXS5yZXR1cm4uc29ydChieURhdGUpO1xyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyk7XHJcbiAgfVxyXG5cclxuICBhZGRPdXRib3VuZEFuZEZpbHRlcihcclxuICAgIHRpY2tldDogSXJsVGlja2V0T3B0aW9uV2l0aFNlbGVjdGVkLFxyXG4gICAgZnVsbFRpY2tldDogSXJsSm91cm5leU9wdGlvblxyXG4gICk6IHZvaWQge1xyXG4gICAgdGhpcy5vdXRib3VuZEpvdXJuZXlPcHRpb25zID0gZnVsbFRpY2tldDtcclxuICAgIHRoaXMub3V0Ym91bmRUaWNrZXQgPSB0aWNrZXQ7XHJcbiAgICB0aGlzLmZpbHRlclNlbGVjdGVkKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyU2VsZWN0ZWQoZmlsdGVyT3V0Ym91bmQ6IGJvb2xlYW4gPSBmYWxzZSk6IElybEpvdXJuZXlPcHRpb25zW10ge1xyXG4gICAgY29uc3QgcmVzdWx0czogSXJsSm91cm5leU9wdGlvbnNbXSA9IHRoaXMuaGVscGVycy5jbG9uZShcclxuICAgICAgdGhpcy5mdWxsUmVzdWx0cyBhcyBJcmxKb3VybmV5T3B0aW9uc1tdXHJcbiAgICApO1xyXG4gICAgaWYgKGZpbHRlck91dGJvdW5kKSB7XHJcbiAgICAgIHRoaXMuX2lzRmlsdGVyZWQgPSB0cnVlO1xyXG4gICAgICByZXN1bHRzWzBdLm91dGJvdW5kID0gW1xyXG4gICAgICAgIHJlc3VsdHNbMF0ub3V0Ym91bmQuZmluZCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgaXRlbS5kZXBhcnREYXRlVGltZSA9PT1cclxuICAgICAgICAgICAgICB0aGlzLl9vdXRib3VuZEpvdXJuZXlPcHRpb25zLmRlcGFydERhdGVUaW1lICYmXHJcbiAgICAgICAgICAgIGl0ZW0uYXJyaXZlRGF0ZVRpbWUgPT09IHRoaXMuX291dGJvdW5kSm91cm5leU9wdGlvbnMuYXJyaXZlRGF0ZVRpbWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSlcclxuICAgICAgXTtcclxuICAgICAgcmVzdWx0c1swXS5vdXRib3VuZFswXS5wcm92aWRlcnNbMF0udGlja2V0T3B0aW9ucyA9XHJcbiAgICAgICAgcmVzdWx0c1swXS5vdXRib3VuZFswXS5wcm92aWRlcnNbMF0udGlja2V0T3B0aW9ucy5yZWR1Y2UoXHJcbiAgICAgICAgICAoYWNjLCB0aWNrZXQ6IElybFRpY2tldE9wdGlvbldpdGhTZWxlY3RlZCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGlja2V0LnVpZCA9PT0gdGhpcy5fb3V0Ym91bmRUaWNrZXQudWlkKSB7XHJcbiAgICAgICAgICAgICAgdGlja2V0LnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBhY2MucHVzaCh0aWNrZXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgW11cclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faXNGaWx0ZXJlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLm91dGJvdW5kSm91cm5leU9wdGlvbnMgPSBudWxsO1xyXG4gICAgICB0aGlzLm91dGJvdW5kVGlja2V0ID0gbnVsbDtcclxuICAgICAgcmVzdWx0c1swXS5vdXRib3VuZC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaXRlbS5wcm92aWRlcnNbMF0udGlja2V0T3B0aW9ucy5tYXAoXHJcbiAgICAgICAgICAodGlja2V0OiBJcmxUaWNrZXRPcHRpb25XaXRoU2VsZWN0ZWQpID0+IHtcclxuICAgICAgICAgICAgdGlja2V0LnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRpY2tldC5TaG93RGV0YWlsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aWNrZXQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyk7XHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiAtIGdldCBpcmwgc3RhdGlvbiBsb2NhdGlvbnNcclxuICAgKiBAcGFyYW0gdGVybSAtIHRoZSB0ZXJtIHRvIHNlYXJjaFxyXG4gICAqIEBwYXJhbSBpc0xvYWRpbmcgLSBCZWhhdmlvclN1YmplY3Qgc28gd2Uga25vdyBzb21ldGhpbmcgaXMgaGFwcGVuaW5nXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRJcmxEaXNjb3VudENhcmRzKCk6IE9ic2VydmFibGU8SXJsVHJhdmVsQ2FyZFtdPiB7XHJcbiAgICBjb25zdCBzdXBwbGllciA9IHRoaXMuc3VwcGxpZXI7XHJcbiAgICByZXR1cm4gdGhpcy5pcmxEaXNjb3VudENhcmRzRmV0Y2hlci5mZXRjaExpc3Qoe1xyXG4gICAgICBzdXBwbGllclxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXJtc0FuZENvbmQoaW5Kb3VybmV5T3B0aW9uOiBJcmxKb3VybmV5T3B0aW9uKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0ZhcmUgUnVsZXMnLFxyXG4gICAgICAgIHZhbHVlOiBpbkpvdXJuZXlPcHRpb24/LnByb3ZpZGVyc1swXT8udGlja2V0T3B0aW9uc1swXT8uZmFyZVJ1bGVzXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBzYXZlU2VhcmNoKCk6IE9ic2VydmFibGU8U2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdD4ge1xyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBjb25zdCBxdWVyeTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XHJcbiAgICAgIGNvbnN0IGZhdm91cml0ZVNlYXJjaFF1ZXJ5OiBJSXJsU2VhcmNoQXJncyA9IHRoaXMudXBkYXRlU2VyY2hRdWVyeShxdWVyeSk7XHJcbiAgICAgIGNvbnN0IHNlYXJjaEluZm8gPSB7XHJcbiAgICAgICAgbmFtZTogYCR7bW9tZW50KCl9YCxcclxuICAgICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWwsXHJcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlRmF2b3VyaXRlU2VhcmNoKHNlYXJjaEluZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVGaWx0ZXJzKHJlc3VsdHM6IElybEpvdXJuZXlPcHRpb25bXSk6IElybEZpbHRlcnMge1xyXG4gICAgLy8gZmlyc3Qgb2YgYWxsIHdlIG5lZWQgdG8gZmluZCB0aGUgbWluIHByaWNlIGFuZCB0aGUgbWF4IHByaWNlXHJcblxyXG4gICAgaWYgKCFyZXN1bHRzPy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcmljZU1heDogbnVtYmVyID0gbnVsbDtcclxuICAgIGxldCBwcmljZU1pbjogbnVtYmVyID0gbnVsbDtcclxuICAgIGxldCBkYXRlRGVwTWluOiBudW1iZXIgPSBudWxsO1xyXG4gICAgbGV0IGRhdGVEZXBNYXg6IG51bWJlciA9IG51bGw7XHJcbiAgICBsZXQgZGF0ZUFyck1pbjogbnVtYmVyID0gbnVsbDtcclxuICAgIGxldCBkYXRlQXJyTWF4OiBudW1iZXIgPSBudWxsO1xyXG4gICAgbGV0IGNsYXNzT2JqZWN0OiBhbnkgPSB7fTtcclxuICAgIGxldCBjaGFuZ2VzT2JqZWN0OiBhbnkgPSB7fTtcclxuXHJcbiAgICByZXN1bHRzLmZvckVhY2gocmVzdWx0ID0+IHtcclxuXHJcbiAgICAgIHJlc3VsdC5wcm92aWRlcnNbMF0udGlja2V0T3B0aW9ucy5mb3JFYWNoKHRpY2tldCA9PiB7XHJcbiAgICAgICAgaWYgKCFwcmljZU1heCB8fCBwcmljZU1heCA8IHRpY2tldC5wcmljZSkge1xyXG4gICAgICAgICAgcHJpY2VNYXggPSBNYXRoLmNlaWwodGlja2V0LnByaWNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBcclxuXHJcbiAgICAgIGlmICghcHJpY2VNaW4gfHwgcHJpY2VNaW4gPiByZXN1bHQucHJvdmlkZXJzWzBdLmNoZWFwZXN0VGlja2V0LnByaWNlKSB7XHJcbiAgICAgICAgcHJpY2VNaW4gPSBNYXRoLmZsb29yKHJlc3VsdC5wcm92aWRlcnNbMF0uY2hlYXBlc3RUaWNrZXQucHJpY2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWRhdGVEZXBNaW4gfHwgbW9tZW50KHJlc3VsdC5kZXBhcnREYXRlVGltZSkuaXNCZWZvcmUobW9tZW50KGRhdGVEZXBNaW4pKSkge1xyXG4gICAgICAgIGRhdGVEZXBNaW4gPSBOdW1iZXIobW9tZW50KHJlc3VsdC5kZXBhcnREYXRlVGltZSkuZm9ybWF0KCdISG1tJykpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWRhdGVEZXBNYXggfHwgbW9tZW50KHJlc3VsdC5kZXBhcnREYXRlVGltZSkuaXNBZnRlcihtb21lbnQoZGF0ZURlcE1heCkpKSB7XHJcbiAgICAgICAgZGF0ZURlcE1heCA9IE51bWJlcihtb21lbnQocmVzdWx0LmRlcGFydERhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghZGF0ZUFyck1pbiB8fCBtb21lbnQocmVzdWx0LmFycml2ZURhdGVUaW1lKS5pc0JlZm9yZShtb21lbnQoZGF0ZUFyck1pbikpKSB7XHJcbiAgICAgICAgZGF0ZUFyck1pbiA9IE51bWJlcihtb21lbnQocmVzdWx0LmFycml2ZURhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghZGF0ZUFyck1heCB8fCBtb21lbnQocmVzdWx0LmFycml2ZURhdGVUaW1lKS5pc0FmdGVyKG1vbWVudChkYXRlQXJyTWF4KSkpIHtcclxuICAgICAgICBkYXRlQXJyTWF4ID0gTnVtYmVyKG1vbWVudChyZXN1bHQuYXJyaXZlRGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2hhbmdlc09iamVjdFtyZXN1bHQuc2VnbWVudHMubGVuZ3RoIC0gMV0gPSB7XHJcbiAgICAgICAga2V5OiByZXN1bHQuc2VnbWVudHMubGVuZ3RoIC0gMSxcclxuICAgICAgICB0aXRsZTogYCR7cmVzdWx0LnNlZ21lbnRzLmxlbmd0aCAtIDF9IGNoYW5nZXNgLFxyXG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXN1bHQucHJvdmlkZXJzWzBdLnRpY2tldE9wdGlvbnMuZm9yRWFjaCh0aWNrZXQgPT4ge1xyXG4gICAgICAgIGlmICh0aWNrZXQuY2xhc3MgPT09ICcxJykge1xyXG4gICAgICAgICAgY2xhc3NPYmplY3RbJ0ZpcnN0J10gPSB7XHJcbiAgICAgICAgICAgIGtleTogQ2xhc3NUeXBlLkNsYXNzXzEsXHJcbiAgICAgICAgICAgIHRpdGxlOiAnRmlyc3QnLFxyXG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aWNrZXQuY2xhc3MgPT09ICcyJykge1xyXG4gICAgICAgICAgY2xhc3NPYmplY3RbJ1NlY29uZCddID0ge1xyXG4gICAgICAgICAgICBrZXk6IENsYXNzVHlwZS5DbGFzc18yLFxyXG4gICAgICAgICAgICB0aXRsZTogJ1NlY29uZCcsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHJldE9iamVjdCA9IHtcclxuICAgICAgcHJpY2VNYXgsXHJcbiAgICAgIHByaWNlTWluLFxyXG4gICAgICBkYXRlQXJyTWF4LFxyXG4gICAgICBkYXRlQXJyTWluLFxyXG4gICAgICBkYXRlRGVwTWF4LFxyXG4gICAgICBkYXRlRGVwTWluLFxyXG4gICAgICBjbGFzc2VzOiBPYmplY3QudmFsdWVzKGNsYXNzT2JqZWN0KSxcclxuICAgICAgY2hhbmdlczogT2JqZWN0LnZhbHVlcyhjaGFuZ2VzT2JqZWN0KVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKHJldE9iamVjdCk7XHJcbiAgICByZXR1cm4gcmV0T2JqZWN0O1xyXG4gIH1cclxuXHJcbiAgYXBwbHlGaWx0ZXJzKGZpbHRlcnM6IElybEZpbHRlcnMsIGRpcmVjdGlvbjogc3RyaW5nID0gJ08nKTogdm9pZCB7XHJcblxyXG4gICAgY29uc3QgZnVsbFJlc3VsdHNDb3B5ID0gdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMuZnVsbFJlc3VsdHMpO1xyXG4gICAgbGV0IGRpclJlc3VsdHM7XHJcblxyXG4gICAgc3dpdGNoKGRpcmVjdGlvbikge1xyXG4gICAgICBjYXNlICdPJzpcclxuICAgICAgICBkaXJSZXN1bHRzID0gZnVsbFJlc3VsdHNDb3B5WzBdLm91dGJvdW5kXHJcbiAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdJJzpcclxuICAgICAgICBkaXJSZXN1bHRzID0gZnVsbFJlc3VsdHNDb3B5WzBdLnJldHVyblxyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBub3cgZmlyc3Qgb2YgYWxsIC0gYXBwbHkgdGhlIHByaWNlIGZpbHRlcnNcclxuXHJcbiAgICBkaXJSZXN1bHRzID0gZGlyUmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+IHtcclxuICAgICAgY29uc3QgdGlja2V0cyA9IHJlc3VsdC5wcm92aWRlcnNbMF0udGlja2V0T3B0aW9ucy5maWx0ZXIodGlja2V0ID0+IHtcclxuICAgICAgICByZXR1cm4gdGlja2V0LnByaWNlID49IGZpbHRlcnMucHJpY2VNaW4gJiYgdGlja2V0LnByaWNlIDw9IGZpbHRlcnMucHJpY2VNYXg7XHJcbiAgICAgIH0pXHJcbiAgICAgIHJlc3VsdC5wcm92aWRlcnNbMF0udGlja2V0T3B0aW9ucyA9IHRpY2tldHM7XHJcbiAgICAgIHJldHVybiB0aWNrZXRzLmxlbmd0aDtcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICAvLyB0aW1lc1xyXG5cclxuICAgIC8vIGRlcFxyXG4gICAgZGlyUmVzdWx0cyA9IGRpclJlc3VsdHMuZmlsdGVyKHJlc3VsdCA9PiB7XHJcblxyXG4gICAgICBjb25zdCBkZXBUaW1lID0gTnVtYmVyKG1vbWVudChyZXN1bHQuZGVwYXJ0RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpKVxyXG4gICAgICByZXR1cm4gZGVwVGltZSA+PSBmaWx0ZXJzLmRhdGVEZXBNaW4gJiYgZGVwVGltZSA8PSBmaWx0ZXJzLmRhdGVEZXBNYXg7IFxyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGFyclxyXG4gICAgZGlyUmVzdWx0cyA9IGRpclJlc3VsdHMuZmlsdGVyKHJlc3VsdCA9PiB7XHJcblxyXG4gICAgICBjb25zdCBhcnJUaW1lID0gTnVtYmVyKG1vbWVudChyZXN1bHQuYXJyaXZlRGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpKVxyXG4gICAgICByZXR1cm4gYXJyVGltZSA+PSBmaWx0ZXJzLmRhdGVBcnJNaW4gJiYgYXJyVGltZSA8PSBmaWx0ZXJzLmRhdGVBcnJNYXg7IFxyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGNsYXNzZXNcclxuICAgIC8vIGZpcnN0IG9mIGFsbCBkZXRlcm1pbmUgaWYgYW55IGFyZSBzZWxlY3RlZFxyXG4gICAgY29uc3Qgc2VsZWN0ZWRDbGFzc2VzID0gZmlsdGVycy5jbGFzc2VzLmZpbHRlcihjbGFzc0YgPT4ge1xyXG4gICAgICByZXR1cm4gY2xhc3NGLnNlbGVjdGVkO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkQ2xhc3Nlcz8ubGVuZ3RoKSB7XHJcbiAgICAgIGRpclJlc3VsdHMgPSBkaXJSZXN1bHRzLmZpbHRlcihyZXN1bHQgPT4ge1xyXG5cclxuICAgICAgICBjb25zdCBuZXdUaWNrZXRzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdvZyB0aWNrZXRzOicsIHJlc3VsdC5wcm92aWRlcnNbMF0udGlja2V0T3B0aW9ucyk7XHJcbiAgICAgICAgcmVzdWx0LnByb3ZpZGVyc1swXS50aWNrZXRPcHRpb25zLmZvckVhY2godGlja2V0ID0+IHtcclxuICAgICAgICAgIHNlbGVjdGVkQ2xhc3Nlcy5mb3JFYWNoKGNsYXNzUyA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aWNrZXQuY2xhc3MgPT09IGNsYXNzUy5rZXkpIHtcclxuICAgICAgICAgICAgICBuZXdUaWNrZXRzLnB1c2godGlja2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKG5ld1RpY2tldHMpO1xyXG4gICAgICAgIHJlc3VsdC5wcm92aWRlcnNbMF0udGlja2V0T3B0aW9ucyA9IG5ld1RpY2tldHM7XHJcbiAgICAgICAgcmV0dXJuIG5ld1RpY2tldHMubGVuZ3RoID4gMDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5sb2coZGlyUmVzdWx0cyk7XHJcblxyXG4gICAgLy8gZmluYWxseSBzdG9wc1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRTdG9wcyA9IGZpbHRlcnMuY2hhbmdlcy5maWx0ZXIoY2hhbmdlID0+IHtcclxuICAgICAgcmV0dXJuIGNoYW5nZS5zZWxlY3RlZDtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZFN0b3BzLmxlbmd0aCkge1xyXG4gICAgICBkaXJSZXN1bHRzID0gZGlyUmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+IHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGVkU3RvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChyZXN1bHQuc2VnbWVudHMubGVuZ3RoIC0xID09PSBzZWxlY3RlZFN0b3BzW2ldLmtleSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoKGRpcmVjdGlvbikge1xyXG4gICAgICBjYXNlICdPJzpcclxuICAgICAgICBmdWxsUmVzdWx0c0NvcHlbMF0ub3V0Ym91bmQgPSBkaXJSZXN1bHRzOyBcclxuICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0knOlxyXG4gICAgICAgIGZ1bGxSZXN1bHRzQ29weVswXS5yZXR1cm4gPSBkaXJSZXN1bHRzO1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMucmVzdWx0cy5uZXh0KGZ1bGxSZXN1bHRzQ29weSk7XHJcbiAgfVxyXG4gIFxyXG4gIGFzeW5jIGFwcGx5RmF2b3VyaXRlKGZhdjogYW55KTogUHJvbWlzZTx2b2lkPntcclxuICAgIHRoaXMuZ2V0SXJsU3VwcGxpZXJTdGF0aW9uRmV0Y2hlci5mZXRjaExpc3Qoe2lkOiBmYXYuZGVwYXJ0dXJlTG9jYXRpb25JZH0pLnN1YnNjcmliZShhID0+IHtcclxuICAgICAgdGhpcy50cmF2ZWxsaW5nRnJvbSA9IGFcclxuICAgIH0pXHJcbiAgICB0aGlzLmdldElybFN1cHBsaWVyU3RhdGlvbkZldGNoZXIuZmV0Y2hMaXN0KHtpZDogZmF2LmFycml2YWxMb2NhdGlvbklkfSkuc3Vic2NyaWJlKGEgPT4ge1xyXG4gICAgICB0aGlzLnRyYXZlbGxpbmdUbyA9IGFcclxuICAgIH0pXHJcbiAgICB0aGlzLmFkdWx0cyA9IGZhdi5hZHVsdHNcclxuICAgIHRoaXMuY2hpbGRyZW4gPSBmYXYuY2hpbGRyZW5cclxuICAgIHRoaXMuY2xhc3MgPSBmYXYuY2xhc3NcclxuICAgIHRoaXMuY291bnRyeUNvZGUgPSBmYXYuY291bnRyeUNvZGVcclxuICAgIHRoaXMuam91cm5leVR5cGUgPSBmYXYuam91cm5leVR5cGUgPT09IFwiUmV0dXJuSm91cm5leVwiID8gSXJsSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSA6IElybEpvdXJuZXlUeXBlLlNpbmdsZUpvdXJuZXlcclxuICAgIHRoaXMuc3VwcGxpZXIgPSBmYXYuc3VwcGxpZXJcclxuICB9XHJcbn1cclxuIl19
|