@sabstravtech/obtservices 0.0.22050309 → 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 +4 -0
- package/angular/lib/vendor/fetchers/get-cancellation-info.fetcher.d.ts +7 -0
- package/angular/lib/vendor/fetchers/get-irl-supplier-station.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 +4 -3
- package/angular/lib/vendor/services/ticket-queue.service.d.ts +6 -0
- package/angular/lib/vendor/types/graphql.angular.types.d.ts +96 -15
- package/angular/sabstravtech-obtservices-angular.d.ts +0 -1
- package/angular/sabstravtech-obtservices-angular.metadata.json +1 -1
- package/angular/services.d.ts +1 -0
- package/base/fetchers.d.ts +4 -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 +2 -1
- package/base/lib/vendor/classes/fast-track-enterprise-search.d.ts +16 -11
- package/base/lib/vendor/classes/flight-enterprise-search.d.ts +2 -1
- package/base/lib/vendor/classes/hotel-enterprise-search.d.ts +2 -1
- package/base/lib/vendor/classes/irl-enterprise-search.d.ts +20 -6
- 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 +1 -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 +1 -1
- package/base/lib/vendor/fetchers/get-cancellation-info.fetcher.d.ts +20 -0
- package/base/lib/vendor/fetchers/get-irl-supplier-station.fetcher.d.ts +21 -0
- 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 +1 -0
- package/base/lib/vendor/interfaces/Ifast-track-enterprise-search.d.ts +5 -1
- 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 +8 -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/Iuser.service.d.ts +2 -1
- 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/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 +5 -3
- package/base/lib/vendor/services/webtoken.service.d.ts +1 -0
- package/base/lib/vendor/types/graphql.types.d.ts +91 -15
- package/base/lib/vendor/types/types.d.ts +28 -15
- package/base/sabstravtech-obtservices-base.metadata.json +1 -1
- package/base/services.d.ts +1 -0
- package/bundles/sabstravtech-obtservices-angular.umd.js +175 -79
- 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 +2511 -143
- 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 +5 -1
- package/esm2015/angular/lib/vendor/fetchers/get-cancellation-info.fetcher.js +25 -0
- package/esm2015/angular/lib/vendor/fetchers/get-irl-supplier-station.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 +28 -25
- package/esm2015/angular/lib/vendor/services/ticket-queue.service.js +23 -0
- package/esm2015/angular/lib/vendor/types/graphql.angular.types.js +62 -7
- package/esm2015/angular/obtservices.module.js +3 -1
- package/esm2015/angular/sabstravtech-obtservices-angular.js +1 -2
- package/esm2015/angular/services.js +2 -1
- package/esm2015/base/fetchers.js +5 -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 +43 -12
- package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +35 -14
- package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +81 -14
- 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 +48 -14
- package/esm2015/base/lib/vendor/classes/irl-enterprise-search.js +197 -23
- 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 +2 -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 +2 -2
- package/esm2015/base/lib/vendor/fetchers/get-cancellation-info.fetcher.js +10 -0
- package/esm2015/base/lib/vendor/fetchers/get-irl-supplier-station.fetcher.js +11 -0
- 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 +1 -1
- 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/Iuser.service.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/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 +11 -5
- package/esm2015/base/lib/vendor/services/user.service.js +25 -4
- 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 +1649 -8
- package/esm2015/base/services.js +2 -1
- package/fesm2015/sabstravtech-obtservices-angular.js +131 -17
- package/fesm2015/sabstravtech-obtservices-angular.js.map +1 -1
- package/fesm2015/sabstravtech-obtservices-base.js +2435 -149
- 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 = [
|
|
@@ -82,14 +83,13 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
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;
|
|
@@ -127,6 +127,7 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
127
127
|
// searchService.startSearches();
|
|
128
128
|
// }
|
|
129
129
|
this._cheapestResultPrice = this.updateLowestPrice(results);
|
|
130
|
+
this.fullResults = results;
|
|
130
131
|
this.results.next(results || []);
|
|
131
132
|
}
|
|
132
133
|
get outboundJourneyOptions() {
|
|
@@ -228,10 +229,10 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
228
229
|
this._arrivalLocationId = data;
|
|
229
230
|
}
|
|
230
231
|
get adults() {
|
|
231
|
-
return this.
|
|
232
|
+
return this.tempParams.adults;
|
|
232
233
|
}
|
|
233
234
|
set adults(data) {
|
|
234
|
-
this.
|
|
235
|
+
this.tempParams.adults = data;
|
|
235
236
|
}
|
|
236
237
|
get children() {
|
|
237
238
|
return this._children;
|
|
@@ -532,10 +533,16 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
532
533
|
}
|
|
533
534
|
getSearchQuery() {
|
|
534
535
|
// this.travellers = travellers;
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
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
|
+
}
|
|
539
546
|
if (!this.supplier && this.travellingFrom.name) {
|
|
540
547
|
this.supplier = this.travellingFrom.railstation.supplier;
|
|
541
548
|
this.getIrlDiscountCards().subscribe((data) => {
|
|
@@ -546,7 +553,7 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
546
553
|
supplier: this.supplier,
|
|
547
554
|
countryCode: 'GB',
|
|
548
555
|
irlDiscountCards: this.discountCard ? this.discountCard.id : null,
|
|
549
|
-
class: this.
|
|
556
|
+
class: this.class,
|
|
550
557
|
outboundDepartureDateTime: this.tempParams.outboundDepartureDateTime,
|
|
551
558
|
departureLocationId: this._travellingFrom,
|
|
552
559
|
arrivalLocationId: this._travellingTo,
|
|
@@ -650,15 +657,16 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
650
657
|
// co2PerPassenger: irlJourneyOption.co2PerPassenger,
|
|
651
658
|
outboundDate: irlJourneyOption.departDateTime
|
|
652
659
|
};
|
|
653
|
-
return this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers
|
|
660
|
+
return this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers, false // TODO
|
|
661
|
+
);
|
|
654
662
|
}
|
|
655
663
|
return Promise.resolve(false);
|
|
656
664
|
});
|
|
657
665
|
}
|
|
658
|
-
addReturnJourneyToBasket(serviceId, irlQuery, inbound, inJourneyOption) {
|
|
666
|
+
addReturnJourneyToBasket(serviceId, irlQuery, inbound, inJourneyOption, outboundTicket, outboundJourney) {
|
|
659
667
|
return __awaiter(this, void 0, void 0, function* () {
|
|
660
|
-
const outbound = this.outboundTicket;
|
|
661
|
-
const outJourneyOption = this.outboundJourneyOptions;
|
|
668
|
+
const outbound = outboundTicket ? outboundTicket : this.outboundTicket;
|
|
669
|
+
const outJourneyOption = outboundJourney ? outboundJourney : this.outboundJourneyOptions;
|
|
662
670
|
const intBasket = yield this.basketService.getDefaultBasket();
|
|
663
671
|
const basket = intBasket === null || intBasket === void 0 ? void 0 : intBasket.subject.value;
|
|
664
672
|
if (basket) {
|
|
@@ -696,7 +704,7 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
696
704
|
supplierTickets: [
|
|
697
705
|
{
|
|
698
706
|
supplierName: inJourneyOption.providers[0].name,
|
|
699
|
-
ticketDescription:
|
|
707
|
+
ticketDescription: inbound.type,
|
|
700
708
|
legs: inboundLegs
|
|
701
709
|
}
|
|
702
710
|
]
|
|
@@ -712,7 +720,7 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
712
720
|
termsAndCond: termsAndConditions
|
|
713
721
|
},
|
|
714
722
|
adults: irlQuery.adults,
|
|
715
|
-
price: selectedIrlTicketOption.price,
|
|
723
|
+
price: Number((Number(selectedIrlTicketOption.price) + Number(inbound.price)).toFixed(2)),
|
|
716
724
|
currency: selectedIrlTicketOption.currency,
|
|
717
725
|
searchQuery: irlQuery,
|
|
718
726
|
outboundDate: outJourneyOption.departDateTime
|
|
@@ -720,7 +728,9 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
720
728
|
// co2PerPassenger: outbound.co2PerPassenger
|
|
721
729
|
};
|
|
722
730
|
this.filterSelected();
|
|
723
|
-
|
|
731
|
+
console.log(basketItem);
|
|
732
|
+
return this.basketService.addToBasket(basketItem, intBasket, this.searchService, this.travellers, false // TODO
|
|
733
|
+
);
|
|
724
734
|
}
|
|
725
735
|
return Promise.resolve(false);
|
|
726
736
|
});
|
|
@@ -774,8 +784,10 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
774
784
|
* @returns
|
|
775
785
|
* @memberof irl-enterprise-search
|
|
776
786
|
*/
|
|
777
|
-
sortByPrice() {
|
|
778
|
-
|
|
787
|
+
sortByPrice(ignoreDirectionChange = false) {
|
|
788
|
+
if (!ignoreDirectionChange) {
|
|
789
|
+
this.priceDir = !this.priceDir;
|
|
790
|
+
}
|
|
779
791
|
const results = this.filterSelected(this._isFiltered);
|
|
780
792
|
const byPrice = (a, b) => {
|
|
781
793
|
return this.priceDir
|
|
@@ -794,8 +806,10 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
794
806
|
* @returns
|
|
795
807
|
* @memberof irl-enterprise-search
|
|
796
808
|
*/
|
|
797
|
-
sortByDate() {
|
|
798
|
-
|
|
809
|
+
sortByDate(ignoreDirection = false) {
|
|
810
|
+
if (!ignoreDirection) {
|
|
811
|
+
this.dateDir = !this.dateDir;
|
|
812
|
+
}
|
|
799
813
|
const results = this.filterSelected(this._isFiltered);
|
|
800
814
|
const byDate = (a, b) => {
|
|
801
815
|
return this.dateDir
|
|
@@ -878,8 +892,168 @@ export class IRLEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
878
892
|
return this.searchService.saveFavouriteSearch(searchInfo);
|
|
879
893
|
}
|
|
880
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
|
+
}
|
|
881
1055
|
}
|
|
882
1056
|
IRLEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_irl';
|
|
883
1057
|
IRLEnterpriseSearch.STORAGE_SESSION_RESULTS = 'irl_results';
|
|
884
1058
|
IRLEnterpriseSearch.PASSING_POINT = 'Passing';
|
|
885
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXJsLWVudGVycHJpc2Utc2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2lybC1lbnRlcnByaXNlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQVd6RCxPQUFPLEVBR0wsUUFBUSxFQU1SLFdBQVcsRUFDWCxjQUFjLEVBSWYsTUFBTSx3QkFBd0IsQ0FBQztBQWtCaEMsT0FBTyxFQUFhLElBQUksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUcxRCxNQUFNLENBQU4sSUFBWSxZQUlYO0FBSkQsV0FBWSxZQUFZO0lBQ3RCLG1DQUFtQixDQUFBO0lBQ25CLG1DQUFtQixDQUFBO0lBQ25CLGlDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFKVyxZQUFZLEtBQVosWUFBWSxRQUl2QjtBQVdELE1BQU0sQ0FBTixJQUFZLFNBTVg7QUFORCxXQUFZLFNBQVM7SUFDbkIsMEJBQWEsQ0FBQTtJQUNiLDBCQUFhLENBQUE7SUFDYixxQ0FBcUM7SUFDckMsdUNBQTBCLENBQUE7SUFDMUIsc0NBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQU5XLFNBQVMsS0FBVCxTQUFTLFFBTXBCO0FBRUQsTUFBTSxPQUFPLG1CQUlYLFNBQVEsb0JBSVA7SUFrY0QsWUFDVSxVQUFrQyxFQUNsQyx1QkFBMkQsRUFDbkUsT0FBMkIsRUFDbkIsYUFBK0MsRUFDdkQsY0FBa0MsRUFDMUIsYUFBK0M7UUFFdkQsS0FBSyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMs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L2pDZSwwQ0FBc0IsR0FBRyxZQUFZLENBQUM7QUFDdEMsMkNBQXVCLEdBQUcsYUFBYSxDQUFDO0FBQ3hDLGlDQUFhLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XHJcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IFZhbHVlRGlzcGxheSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmFsdWUtZGlzcGxheSc7XHJcbmltcG9ydCB7XHJcbiAgTmdiRGF0ZVN0cnVjdCxcclxuICBJcmxRdW90ZVJlc3VsdEFycmF5LFxyXG4gIFJlY2VudFNlYXJjaCxcclxuICBJcmxUaWNrZXRPcHRpb25XaXRoU2VsZWN0ZWQsXHJcbiAgU2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdFxyXG59IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcclxuaW1wb3J0IHtcclxuICBCYXNrZXRJdGVtLFxyXG4gIEN1cnJlbmN5Q29kZSxcclxuICBJcmxDbGFzcyxcclxuICBJcmxKb3VybmV5T3B0aW9uLFxyXG4gIElybEpvdXJuZXlPcHRpb25zLFxyXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcclxuICBJcmxUaWNrZXRPcHRpb24sXHJcbiAgU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMsXHJcbiAgU2VydmljZVR5cGUsXHJcbiAgSXJsSm91cm5leVR5cGUsXHJcbiAgSXJsU3VwcGxpZXIsXHJcbiAgSXJsVHJhdmVsQ2FyZCxcclxuICBJcmxTZWdtZW50XHJcbn0gZnJvbSAnLi4vdHlwZXMvZ3JhcGhxbC50eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQmFzZUlybERpc2NvdW50Q2FyZEZldGNoZXIsXHJcbiAgSXJsRGlzY291bnRDYXJkRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9pcmwtZGlzY291bnQtY2FyZC1mZXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBCYXNlSXJsUXVvdGVGZXRjaGVyLFxyXG4gIElybFF1b3RlRmV0Y2hlclR5cGVcclxufSBmcm9tICcuLi9mZXRjaGVycy9pcmwtcXVvdGUtZmV0Y2hlcic7XHJcbmltcG9ydCB7XHJcbiAgRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2VcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzZWFyY2guc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgSVJMRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZSxcclxuICBJcmxUZW1wUGFyYW1zXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JaXJsLWVudGVycHJpc2Utc2VhcmNoJztcclxuaW1wb3J0IHsgVHJhdmVsbGVyLCBhZ2VzIH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xyXG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xyXG5pbXBvcnQgeyBTb3J0TWV0aG9kIH0gZnJvbSAnLi9ldXJvc3Rhci1lbnRlcnByaXNlLXNlYXJjaCc7XHJcbmltcG9ydCB7IElJcmxTZWFyY2hBcmdzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pcmwtc2VhcmNoLWFyZy5pbnRlcmZhY2UnO1xyXG5cclxuZXhwb3J0IGVudW0gU29ydFR5cGVzSXJsIHtcclxuICBDaGVhcGVzdEZpcnN0ID0gJ0MnLFxyXG4gIEVhcmxpZXN0Rmlyc3QgPSAnRScsXHJcbiAgTGF0ZXN0Rmlyc3QgPSAnTCdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTb3J0VHlwZUlybCB7XHJcbiAgLyoqIFRpdGxlIGRpc3BsYXllZCBvbiBkcm9wZG93biAqL1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgLyoqIE1ldGhvZCBuYW1lIHVzZWQgYnkgY29tcG9uZW50IHRvIHNvcnQgcmVzdWx0cyAqL1xyXG4gIG1ldGhvZFJlZjogU29ydE1ldGhvZDtcclxuICAvKiogSWNvbiBkaXNwbGF5ZWQgb24gZHJvcCBkb3duICovXHJcbiAgaWNvbjogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBDbGFzc1R5cGUge1xyXG4gIENsYXNzXzEgPSAnMScsXHJcbiAgQ2xhc3NfMiA9ICcyJyxcclxuICAvLyAhIHRoZXNlIDIgc2hvcHVsZCBiZSByZW1vdmVkIGxhdGVyXHJcbiAgU2Vjb25kX0NsYXNzID0gJzJuZCBDbGFzcycsXHJcbiAgRmlyc3RfQ2xhc3MgPSAnMXN0IENsYXNzJ1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSVJMRW50ZXJwcmlzZVNlYXJjaDxcclxuICAgIFEgZXh0ZW5kcyBJcmxRdW90ZUZldGNoZXJUeXBlLFxyXG4gICAgR0lERl9RIGV4dGVuZHMgSXJsRGlzY291bnRDYXJkRmV0Y2hlclR5cGVcclxuICA+XHJcbiAgZXh0ZW5kcyBCYXNlRW50ZXJwcmlzZVNlYXJjaDxcclxuICAgIElybFRlbXBQYXJhbXMsXHJcbiAgICBJcmxRdW90ZVJlc3VsdEFycmF5LFxyXG4gICAgSXJsUXVvdGVSZXN1bHRBcnJheVxyXG4gID5cclxuICBpbXBsZW1lbnRzIElSTEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2Vcclxue1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUEFSQU1TID0gJ3NlYXJjaF9pcmwnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdpcmxfcmVzdWx0cyc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFBBU1NJTkdfUE9JTlQgPSAnUGFzc2luZyc7XHJcbiAgcHJpdmF0ZSB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXTtcclxuXHJcbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9IElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcbiAgcHJvdGVjdGVkIG11bHRpUmVzdWx0c1Nlc3Npb25OYW1lID1cclxuICAgIElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XHJcblxyXG4gIHByaXZhdGUgX3NvcnRBcnJheTogU29ydFR5cGVJcmxbXSA9IFtcclxuICAgIHtcclxuICAgICAgdGl0bGU6ICdQcmljZScsXHJcbiAgICAgIG1ldGhvZFJlZjogU29ydE1ldGhvZC5zb3J0QnlQcmljZSxcclxuICAgICAgaWNvbjogJ2ljby1kb2xsYXInXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0aXRsZTogJ1RpbWUnLFxyXG4gICAgICBtZXRob2RSZWY6IFNvcnRNZXRob2Quc29ydEJ5RGF0ZSxcclxuICAgICAgaWNvbjogJ2ljby1jYWxlbmRhcidcclxuICAgIH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgc2VhcmNoVHlwZXMgPSBbXHJcbiAgICB7IGRpc3BsYXk6ICdSZXR1cm4nLCB2YWx1ZTogSXJsSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSB9LFxyXG4gICAgeyBkaXNwbGF5OiAnT25lLVdheScsIHZhbHVlOiBJcmxKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5IH1cclxuICBdO1xyXG5cclxuICBwdWJsaWMgY2xhc3NUeXBlcyA9IFtcclxuICAgIHsgZGlzcGxheTogJ0FueScsIHZhbHVlOiBJcmxDbGFzcy5BbGwgfSxcclxuICAgIHsgZGlzcGxheTogJ1N0YW5kYXJkJywgdmFsdWU6IElybENsYXNzLlN0YW5kYXJkIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGaXJzdCcsIHZhbHVlOiBJcmxDbGFzcy5GaXJzdCB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIGFnZVJhbmdlczoge1xyXG4gICAga2V5OiBhZ2VzO1xyXG4gICAgdmFsdWU6IHN0cmluZztcclxuICB9W10gPSBbXHJcbiAgICB7IGtleTogYWdlcy5DaGlsZCwgdmFsdWU6ICdDaGlsZCAoMC0zKScgfSxcclxuICAgIHsga2V5OiBhZ2VzLkNoaWxkLCB2YWx1ZTogJ0NoaWxkICg0LTUpJyB9LFxyXG4gICAgeyBrZXk6IGFnZXMuQ2hpbGQsIHZhbHVlOiAnQ2hpbGQgKDYtMTEpJyB9LFxyXG4gICAgeyBrZXk6IGFnZXMuWW91dGgsIHZhbHVlOiAnWW91dGggKDEyLTE0KScgfSxcclxuICAgIHsga2V5OiBhZ2VzLllvdXRoLCB2YWx1ZTogJ1lvdXRoICgxNS0yNSknIH0sXHJcbiAgICB7IGtleTogYWdlcy5BZHVsdCwgdmFsdWU6ICdBZHVsdCAoMjYtNTkpJyB9LFxyXG4gICAgeyBrZXk6IGFnZXMuWW91dGgsIHZhbHVlOiAnU2VuaW9yICg2MCspJyB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIHRyYXZlbENhcmRzID0gW1xyXG4gICAgeyBkaXNwbGF5OiAnWW91bmcgcGVyc29ucyByYWlsY2FyZCcsIHZhbHVlOiAnWU5HJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRGlzYWJpbGl0eSByYWlsY2FyZCcsIHZhbHVlOiAnRElTJyB9LFxyXG4gICAgeyBkaXNwbGF5OiAnRmFtaWx5IHJhaWxjYXJkJywgdmFsdWU6ICdGQU0nIH0sXHJcbiAgICB7IGRpc3BsYXk6ICdGb3JjZXMgcmFpbGNhcmQnLCB2YWx1ZTogJ0hNRicgfSxcclxuICAgIHsgZGlzcGxheTogJ1RyYXZlbCBhZ2VuY3kgZGlzY291bnQnLCB2YWx1ZTogJ1RBRCcgfVxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyB0eXBlOiBTZXJ2aWNlVHlwZSA9IFNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsO1xyXG4gIHB1YmxpYyBtaW5PdXRib3VuZERhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XHJcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKCksXHJcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXHJcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxyXG4gIH07XHJcbiAgcHVibGljIG1pbkluYm91bmREYXRlOiBOZ2JEYXRlU3RydWN0ID0ge1xyXG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxyXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxyXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcclxuICB9O1xyXG4gIHByaXZhdGUgX3RpbWVBcnJheTogVmFsdWVEaXNwbGF5W107XHJcbiAgcHJpdmF0ZSBfY2FuQ29tYmluZTogYW55O1xyXG4gIHByaXZhdGUgX3RyYXZlbGxpbmdGcm9tOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfdHJhdmVsbGluZ1RvOiBzdHJpbmc7XHJcbiAgcHJvdGVjdGVkIF9vcmlnaW5hbFVzZXJTZWFyY2g6IElybFRlbXBQYXJhbXM7XHJcbiAgcHJpdmF0ZSBfb3V0Ym91bmRKb3VybmV5T3B0aW9uczogSXJsSm91cm5leU9wdGlvbjtcclxuICBwcml2YXRlIF9pc0ZpbHRlcmVkOiBib29sZWFuO1xyXG4gIGdldCBvdXRib3VuZEpvdXJuZXlPcHRpb25zKCk6IElybEpvdXJuZXlPcHRpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kSm91cm5leU9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRKb3VybmV5T3B0aW9ucyhkYXRhOiBJcmxKb3VybmV5T3B0aW9uKSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZEpvdXJuZXlPcHRpb25zID0gZGF0YTtcclxuICB9XHJcbiAgX291dGJvdW5kVGlja2V0OiBJcmxUaWNrZXRPcHRpb25XaXRoU2VsZWN0ZWQ7XHJcbiAgZ2V0IG91dGJvdW5kVGlja2V0KCk6IElybFRpY2tldE9wdGlvbldpdGhTZWxlY3RlZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmRUaWNrZXQ7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRUaWNrZXQoZGF0YTogSXJsVGlja2V0T3B0aW9uV2l0aFNlbGVjdGVkKSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZFRpY2tldCA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBnZXQgbm9PZkFkdWx0cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hZHVsdHM7XHJcbiAgfVxyXG5cclxuICBzZXQgbm9PZkFkdWx0cyhhZHVsdHM6IG51bWJlcikge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IGFkdWx0cztcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIGdldCBub09mQ2hpbGRyZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW47XHJcbiAgfVxyXG5cclxuICBzZXQgbm9PZkNoaWxkcmVuKGNoaWxkcmVuOiBudW1iZXIpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRyYXZlbGxpbmdUbygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hcnJpdmFsTG9jYXRpb25JZDtcclxuICB9XHJcblxyXG4gIHNldCB0cmF2ZWxsaW5nVG8odHQ6IGFueSkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmFycml2YWxMb2NhdGlvbklkID0gdHQ7XHJcblxyXG4gICAgdGhpcy5fdHJhdmVsbGluZ1RvID0gJyc7XHJcbiAgICBpZiAodHQ/LnJhaWxzdGF0aW9uPy5pZCkge1xyXG4gICAgICB0aGlzLl90cmF2ZWxsaW5nVG8gPSB0dC5yYWlsc3RhdGlvbi5pZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhdmVsbGluZ0Zyb20oKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0dXJlTG9jYXRpb25JZDtcclxuICB9XHJcblxyXG4gIHNldCB0cmF2ZWxsaW5nRnJvbSh0dDogYW55KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0dXJlTG9jYXRpb25JZCA9IHR0O1xyXG4gICAgdGhpcy5fdHJhdmVsbGluZ0Zyb20gPSAnJztcclxuICAgIGlmICh0dD8ucmFpbHN0YXRpb24/LmlkKSB7XHJcbiAgICAgIHRoaXMuX3RyYXZlbGxpbmdGcm9tID0gdHQucmFpbHN0YXRpb24uaWQ7XHJcbiAgICAgIHRoaXMuc3VwcGxpZXIgPSB0dC5yYWlsc3RhdGlvbi5zdXBwbGllcjtcclxuICAgICAgdGhpcy5nZXRJcmxEaXNjb3VudENhcmRzKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pcmxEaXNjb3VudENhcmRzQXJyYXkgPSBkYXRhO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zdXBwbGllcjogSXJsU3VwcGxpZXIgPSBudWxsO1xyXG4gIGdldCBzdXBwbGllcigpOiBJcmxTdXBwbGllciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3VwcGxpZXI7XHJcbiAgfVxyXG4gIHNldCBzdXBwbGllcihkYXRhOiBJcmxTdXBwbGllcikge1xyXG4gICAgdGhpcy5fc3VwcGxpZXIgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY291bnRyeUNvZGU6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IGNvdW50cnlDb2RlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fY291bnRyeUNvZGU7XHJcbiAgfVxyXG4gIHNldCBjb3VudHJ5Q29kZShkYXRhOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2NvdW50cnlDb2RlID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NsYXNzOiBJcmxDbGFzcyA9IElybENsYXNzLkFsbDtcclxuICBnZXQgY2xhc3MoKTogSXJsQ2xhc3Mge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NsYXNzO1xyXG4gIH1cclxuICBzZXQgY2xhc3MoZGF0YTogSXJsQ2xhc3MpIHtcclxuICAgIHRoaXMuX2NsYXNzID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX291dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgPSBudWxsO1xyXG4gIGdldCBvdXRib3VuZERlcGFydHVyZURhdGVUaW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kRGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgfVxyXG4gIHNldCBvdXRib3VuZERlcGFydHVyZURhdGVUaW1lKG5ld0RhdGVUaW1lOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSA9IG5ld0RhdGVUaW1lO1xyXG4gICAgaWYgKG5ld0RhdGVUaW1lICYmIG5ld0RhdGVUaW1lLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9vdXRib3VuZERlcGFydHVyZURhdGVUaW1lID0gbmV3RGF0ZVRpbWU7XHJcbiAgICAgIHRoaXMuX291dGJvdW5kX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobmV3RGF0ZVRpbWUpO1xyXG4gICAgICB0aGlzLl9vdXRib3VuZF90aW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgID8gbW9tZW50KG5ld0RhdGVUaW1lKS5mb3JtYXQoJ0hIbW0nKVxyXG4gICAgICAgIDogJzA3MDAnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGVwYXJ0dXJlTG9jYXRpb25JZDogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgZGVwYXJ0dXJlTG9jYXRpb25JZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RlcGFydHVyZUxvY2F0aW9uSWQ7XHJcbiAgfVxyXG4gIHNldCBkZXBhcnR1cmVMb2NhdGlvbklkKGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5fZGVwYXJ0dXJlTG9jYXRpb25JZCA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hcnJpdmFsTG9jYXRpb25JZDogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgYXJyaXZhbExvY2F0aW9uSWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9hcnJpdmFsTG9jYXRpb25JZDtcclxuICB9XHJcbiAgc2V0IGFycml2YWxMb2NhdGlvbklkKGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5fYXJyaXZhbExvY2F0aW9uSWQgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWR1bHRzOiBudW1iZXIgPSAwO1xyXG4gIGdldCBhZHVsdHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9hZHVsdHM7XHJcbiAgfVxyXG4gIHNldCBhZHVsdHMoZGF0YTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9hZHVsdHMgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2hpbGRyZW46IG51bWJlciA9IDA7XHJcbiAgZ2V0IGNoaWxkcmVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW47XHJcbiAgfVxyXG4gIHNldCBjaGlsZHJlbihkYXRhOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX2NoaWxkcmVuID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NoZWFwZXN0U3RhbmRhcmQ6IElybFRpY2tldE9wdGlvbiA9IG51bGw7XHJcbiAgZ2V0IGNoZWFwZXN0U3RhbmRhcmQoKTogSXJsVGlja2V0T3B0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGVhcGVzdFN0YW5kYXJkO1xyXG4gIH1cclxuICBwcml2YXRlIF9jaGVhcGVzdEZpcnN0OiBJcmxUaWNrZXRPcHRpb24gPSBudWxsO1xyXG4gIGdldCBjaGVhcGVzdEZpcnN0KCk6IElybFRpY2tldE9wdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hlYXBlc3RGaXJzdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JldHVybkRlcGFydHVyZURhdGVUaW1lOiBtb21lbnQuTW9tZW50ID0gbnVsbDtcclxuICBnZXQgcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUoKTogbW9tZW50Lk1vbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgfVxyXG4gIHNldCByZXR1cm5EZXBhcnR1cmVEYXRlVGltZShuZXdEYXRlVGltZTogbW9tZW50Lk1vbWVudCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLnJldHVybkRlcGFydHVyZURhdGVUaW1lID0gbmV3RGF0ZVRpbWU7XHJcbiAgICBpZiAobmV3RGF0ZVRpbWUgJiYgbmV3RGF0ZVRpbWUuaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMuX3JldHVybkRlcGFydHVyZURhdGVUaW1lID0gbmV3RGF0ZVRpbWU7XHJcbiAgICAgIHRoaXMuX3JldHVybl9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG5ld0RhdGVUaW1lKTtcclxuICAgICAgdGhpcy5fcmV0dXJuX3RpbWUgPSBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgPyBtb21lbnQobmV3RGF0ZVRpbWUpLmZvcm1hdCgnSEhtbScpXHJcbiAgICAgICAgOiAnMTYwMCc7XHJcbiAgICB9XHJcbiAgICB0aGlzLl91cGRhdGVSZXR1cm5EYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWdlUmFuZ2U6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IGFnZVJhbmdlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWdlUmFuZ2U7XHJcbiAgfVxyXG4gIHNldCBhZ2VSYW5nZShkYXRhOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2FnZVJhbmdlID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByaWNlRGlyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZ2V0IHByaWNlRGlyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ByaWNlRGlyO1xyXG4gIH1cclxuICBzZXQgcHJpY2VEaXIoZGF0YTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fcHJpY2VEaXIgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGF0ZURpcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGdldCBkYXRlRGlyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGVEaXI7XHJcbiAgfVxyXG4gIHNldCBkYXRlRGlyKGRhdGE6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2RhdGVEaXIgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNob3NlblNlYXJjaENsYXNzKCk6IElybENsYXNzIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2xhc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hvc2VuU2VhcmNoQ2xhc3MoY2xhc3NSOiBJcmxDbGFzcykge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmNsYXNzID0gY2xhc3NSO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRpc2NvdW50Q2FyZCgpOiBJcmxUcmF2ZWxDYXJkIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaXJsRGlzY291bnRDYXJkcztcclxuICB9XHJcblxyXG4gIHNldCBkaXNjb3VudENhcmQoZGF0YTogSXJsVHJhdmVsQ2FyZCkge1xyXG4gICAgdGhpcy50ZW1wUGFyYW1zLmlybERpc2NvdW50Q2FyZHMgPSBkYXRhO1xyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXJsRGlzY291bnRDYXJkc0FycmF5OiBJcmxUcmF2ZWxDYXJkW10gPSBbXTtcclxuICBnZXQgaXJsRGlzY291bnRDYXJkc0FycmF5KCk6IElybFRyYXZlbENhcmRbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXJsRGlzY291bnRDYXJkc0FycmF5O1xyXG4gIH1cclxuXHJcbiAgc2V0IGlybERpc2NvdW50Q2FyZHNBcnJheShhcnJheTogSXJsVHJhdmVsQ2FyZFtdKSB7XHJcbiAgICB0aGlzLl9pcmxEaXNjb3VudENhcmRzQXJyYXkgPSBhcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBvdXRCb3VuZERhdGVUaW1lKCk6IG1vbWVudC5Nb21lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IG91dEJvdW5kRGF0ZVRpbWUobmV3RGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQpIHtcclxuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRib3VuZERlcGFydHVyZURhdGVUaW1lID0gbW9tZW50KG5ld0RhdGVUaW1lKTtcclxuXHJcbiAgICB0aGlzLm1pbkluYm91bmREYXRlID0ge1xyXG4gICAgICB5ZWFyOiBuZXdEYXRlVGltZS55ZWFyKCksXHJcbiAgICAgIG1vbnRoOiBuZXdEYXRlVGltZS5tb250aCgpICsgMSxcclxuICAgICAgZGF5OiBuZXdEYXRlVGltZS5kYXRlKClcclxuICAgIH07XHJcblxyXG4gICAgaWYgKG5ld0RhdGVUaW1lICYmIG5ld0RhdGVUaW1lLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLl9vdXRib3VuZF9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG5ld0RhdGVUaW1lKTtcclxuICAgICAgdGhpcy5fb3V0Ym91bmRfdGltZSA9IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA/IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA6ICcwNzAwJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMub3V0Qm91bmREYXRlVGltZSAmJlxyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSAmJlxyXG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZVRpbWUuaXNBZnRlcih0aGlzLmluQm91bmREYXRlVGltZSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IHRoaXMub3V0Qm91bmREYXRlVGltZS5jbG9uZSgpLmFkZCgxLCAnZGF5Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGluQm91bmREYXRlVGltZSgpOiBtb21lbnQuTW9tZW50IHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgaW5Cb3VuZERhdGVUaW1lKG5ld0RhdGVUaW1lOiBtb21lbnQuTW9tZW50KSB7XHJcbiAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWUgPSBuZXdEYXRlVGltZTtcclxuICAgIGlmIChuZXdEYXRlVGltZSAmJiBuZXdEYXRlVGltZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5fcmV0dXJuX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobmV3RGF0ZVRpbWUpO1xyXG4gICAgICB0aGlzLl9yZXR1cm5fdGltZSA9IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA/IG1vbWVudChuZXdEYXRlVGltZSkuZm9ybWF0KCdISG1tJylcclxuICAgICAgICA6ICcxNjAwJztcclxuICAgIH1cclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIC8vICFkYXRlIGFuZCB0aW1lIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgZm9yIExVXHJcbiAgcHJpdmF0ZSBfb3V0Ym91bmRfZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XHJcblxyXG4gIGdldCBvdXRib3VuZF9kYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kX2RhdGU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRfZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fb3V0Ym91bmRfZGF0ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlT3V0Ym91bmREYXRlVGltZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb3V0Ym91bmRfdGltZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgb3V0Ym91bmRfdGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX291dGJvdW5kX3RpbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgb3V0Ym91bmRfdGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9vdXRib3VuZF90aW1lID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVPdXRib3VuZERhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXR1cm5fZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XHJcblxyXG4gIGdldCByZXR1cm5fZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5fZGF0ZTtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5fZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgdGhpcy5fcmV0dXJuX2RhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZVJldHVybkRhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXR1cm5fdGltZTogc3RyaW5nID0gbnVsbDtcclxuICBnZXQgcmV0dXJuX3RpbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5fdGltZTtcclxuICB9XHJcblxyXG4gIHNldCByZXR1cm5fdGltZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9yZXR1cm5fdGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdGltZUFycmF5KCk6IFZhbHVlRGlzcGxheVtdIHtcclxuICAgIHRoaXMuX3RpbWVBcnJheSA9XHJcbiAgICAgIHRoaXMuX3RpbWVBcnJheSB8fFxyXG4gICAgICBBcnJheSg0OClcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZhbHVlOlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyAyKVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAoKGluZGV4ICUgMikgKiAzMCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgICBkaXNwbGF5OlxyXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyAyKVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcclxuICAgICAgICAgICAgICAnOicgK1xyXG4gICAgICAgICAgICAgICgoaW5kZXggJSAyKSAqIDMwKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZUFycmF5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb2ZmbGluZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGdldCBvZmZsaW5lKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX29mZmxpbmU7XHJcbiAgfVxyXG5cclxuICBzZXQgb2ZmbGluZShkYXRhOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9vZmZsaW5lID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lybENsYXNzOiBJcmxDbGFzcyA9IElybENsYXNzLkFsbDtcclxuICBnZXQgaXJsQ2xhc3MoKTogSXJsQ2xhc3Mge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lybENsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGlybENsYXNzKGRhdGE6IElybENsYXNzKSB7XHJcbiAgICB0aGlzLl9pcmxDbGFzcyA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9qb3VybmV5dHlwZTogSXJsSm91cm5leVR5cGUgPSBJcmxKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5O1xyXG4gIGdldCBqb3VybmV5VHlwZSgpOiBJcmxKb3VybmV5VHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fam91cm5leXR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgam91cm5leVR5cGUoZGF0YTogSXJsSm91cm5leVR5cGUpIHtcclxuICAgIHRoaXMuX2pvdXJuZXl0eXBlID0gZGF0YTtcclxuICB9XHJcblxyXG4gIGdldCBzb3J0RHJvcGRvd25WYWx1ZXMoKTogU29ydFR5cGVJcmxbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc29ydEFycmF5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdHJhaW5OdW1iZXI6IHN0cmluZyA9IG51bGw7XHJcbiAgZ2V0IHRyYWluTnVtYmVyKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdHJhaW5OdW1iZXI7XHJcbiAgfVxyXG5cclxuICBzZXQgdHJhaW5OdW1iZXIoZGF0YTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl90cmFpbk51bWJlciA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hZGRpdGlvbmFsSW5zdHJ1Y3Rpb25zOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdldCBhZGRpdGlvbmFsSW5zdHJ1Y3Rpb25zKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWRkaXRpb25hbEluc3RydWN0aW9ucztcclxuICB9XHJcbiAgc2V0IGFkZGl0aW9uYWxJbnN0cnVjdGlvbnMoZGF0YTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9hZGRpdGlvbmFsSW5zdHJ1Y3Rpb25zID0gZGF0YTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBJcmxmZXRjaGVyOiBCYXNlSXJsUXVvdGVGZXRjaGVyPFE+LFxyXG4gICAgcHJpdmF0ZSBpcmxEaXNjb3VudENhcmRzRmV0Y2hlcjogQmFzZUlybERpc2NvdW50Q2FyZEZldGNoZXI8R0lERl9RPixcclxuICAgIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcclxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXHJcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZVxyXG4gICkge1xyXG4gICAgc3VwZXIoc3RvcmFnZVNlcnZpY2UsIGhlbHBlcnMpO1xyXG5cclxuICAgIGNvbnN0IGRhdGE6IHtcclxuICAgICAgcXVlcnk6IHt9O1xyXG4gICAgICB0ZW1wUGFyYW1zOiBJcmxUZW1wUGFyYW1zO1xyXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IElybFRlbXBQYXJhbXM7XHJcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXHJcbiAgICAgIElSTEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNU1xyXG4gICAgKSB8fCB7XHJcbiAgICAgIHF1ZXJ5OiB7fSxcclxuICAgICAgdGVtcFBhcmFtczoge30gYXMgSXJsVGVtcFBhcmFtcyxcclxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB7fSBhcyBJcmxUZW1wUGFyYW1zXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZUlybFF1ZXJ5KGRhdGEudGVtcFBhcmFtcykpO1xyXG4gICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gZGF0YS5vcmlnaW5hbFVzZXJTZWFyY2g7XHJcblxyXG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcclxuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xyXG4gICAgICAgICAgaWYgKHRoaXMudHJhdmVsbGVyc1swXSAmJiAhdGhpcy50cmF2ZWxsZXJzWzBdLmFnZVR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy50cmF2ZWxsZXJzWzBdLmFnZVR5cGUgPSBhZ2VzLkFkdWx0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyhcclxuICAgICAgICAgICAgdHJhdmVsbGVycyxcclxuICAgICAgICAgICAgU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gc3BsaXRUcmF2ZWxsZXJzLmFkdWx0cy5sZW5ndGg7XHJcbiAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcclxuICAgICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XHJcbiAgICBjb25zdCByZXN1bHRzID1cclxuICAgICAgc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW1Bc0xpc3Q8SXJsUXVvdGVSZXN1bHRBcnJheT4oXHJcbiAgICAgICAgdGhpcy5yZXN1bHRzU2Vzc2lvbk5hbWVcclxuICAgICAgKSB8fCBbXTtcclxuICAgIC8vIGlmIChyZXN1bHRzID09IG51bGwgJiYgdGhpcy5pc1ZhbGlkKSB7XHJcbiAgICAvLyAgIHNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xyXG4gICAgLy8gfVxyXG4gICAgdGhpcy5fY2hlYXBlc3RSZXN1bHRQcmljZSA9IHRoaXMudXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0cyk7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChyZXN1bHRzIHx8IFtdKTtcclxuICB9XHJcbiAgaXJsRGlzY291bnRDYXJkczogSXJsVHJhdmVsQ2FyZDtcclxuXHJcbiAgcHJvdGVjdGVkIHByb2Nlc3NSZXN1bHRzKHJlc3VsdHM6IElybFF1b3RlUmVzdWx0QXJyYXkpIHtcclxuICAgIHJlc3VsdHNbMF0/Lm91dGJvdW5kLmZvckVhY2goKGl0ZW06IElybEpvdXJuZXlPcHRpb24pID0+IHtcclxuICAgICAgaXRlbS5wcm92aWRlcnNbMF0udGlja2V0T3B0aW9ucy5tYXAoXHJcbiAgICAgICAgKHRpY2tldDogSXJsVGlja2V0T3B0aW9uV2l0aFNlbGVjdGVkLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICB0aWNrZXQuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHRpY2tldC5TaG93RGV0YWlsID0gZmFsc2U7XHJcbiAgICAgICAgICB0aWNrZXQudWlkID0gYCR7dGlja2V0LmlkZW50aWZpZXJzLmpvdXJuZXlJZGVudGlmaWVyfV8ke2luZGV4ICsgMX1gO1xyXG4gICAgICAgICAgcmV0dXJuIHRpY2tldDtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIE9iamVjdC5mcmVlemUocmVzdWx0cyk7XHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxuICB9XHJcbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VJcmxRdWVyeSgpKTtcclxuICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzVmFsaWQoKSB7XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxyXG4gICAgICBJUkxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgIHtcclxuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXHJcbiAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XHJcblxyXG4gICAgY29uc3Qgbm93ID0gbW9tZW50KCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLl90cmF2ZWxsaW5nRnJvbSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgRW50ZXIgYSBGcm9tIExvY2F0aW9uLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5fdHJhdmVsbGluZ1RvKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBFbnRlciBhIFRvIExvY2F0aW9uLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm91dEJvdW5kRGF0ZVRpbWU/LmlzQmVmb3JlKG5vdykpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcclxuICAgICAgICAnRGVwYXJ0dXJlIERhdGUvVGltZSBjYW5ub3QgYmUgaW4gdGhlIHBhc3QuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIChcclxuICAgIC8vICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID09PSBJcmxKb3VybmV5VHlwZS5SZXR1cm5Kb3VybmV5XHJcbiAgICAvLyApIHtcclxuICAgIC8vICAgLy8gY2hlY2sgZm9yIHJldHVybiBzcGVjaWZpYyB2YWxpZGF0aW9ucyBpbiBoZXJlXHJcblxyXG4gICAgLy8gICBpZiAodGhpcy5pbkJvdW5kRGF0ZVRpbWU/LmlzU2FtZU9yQmVmb3JlKHRoaXMub3V0Qm91bmREYXRlVGltZSkpIHtcclxuICAgIC8vICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxyXG4gICAgLy8gICAgICAgJ1JldHVybiBEYXRlL1RpbWUgbXVzdCBiZSBhZnRlciBEZXBhcnR1cmUgRGF0ZS9UaW1lJ1xyXG4gICAgLy8gICAgICk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBpZiAodGhpcy52aWEpIHtcclxuICAgIC8vICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMudmlhTG9jYXRpb24pIHtcclxuICAgIC8vICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgZW50ZXIgYSB2aWEgbG9jYXRpb24uJyk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmFkdWx0cyArIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA8IDEpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCAxIHRyYXZlbGxlcicpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XHJcbiAgICB0aGlzLm1lc3NhZ2VzLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xyXG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcclxuICAgICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gT2JqZWN0LmZyZWV6ZSh7IC4uLnRoaXMudGVtcFBhcmFtcyB9KTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcclxuICAgICAgICBJUkxFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxyXG4gICAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVSZWNlbnRTZWFyY2godGhpcy5nZXRSZWNlbnRTZWFyY2hRdWVyeShxdWVyeSkpO1xyXG4gICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2goXHJcbiAgICAgICAgdGhpcy5JcmxmZXRjaGVyLmZldGNoTGlzdChxdWVyeSkucGlwZShtYXAoKHJlc3VsdCkgPT4gcmVzdWx0KSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVjZW50U2VhcmNoUXVlcnkoXHJcbiAgICBxdWVyeTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXNcclxuICApOiBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMge1xyXG4gICAgY29uc3QgcmVjZW50U2VhcmNoUXVlcnk6IElJcmxTZWFyY2hBcmdzID0gdGhpcy51cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5KVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbCxcclxuICAgICAgc2VhcmNoQXJnczogcmVjZW50U2VhcmNoUXVlcnksXHJcbiAgICAgIHRyYXZlbERhdGU6IHRoaXMub3V0Qm91bmREYXRlVGltZS5mb3JtYXQoKSxcclxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMpXHJcbiAgICB9O1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2VyY2hRdWVyeShxdWVyeTogU2VhcmNoSXJsUXVlcnlWYXJpYWJsZXMpOiBJSXJsU2VhcmNoQXJnc3tcclxuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBJSXJsU2VhcmNoQXJncyAgPSBxdWVyeTtcclxuICAgIGlmICh0aGlzLnRyYXZlbGxpbmdGcm9tKSB7XHJcbiAgICAgIHNlYXJjaFF1ZXJ5LnRyYXZlbGxpbmdGcm9tID0gdGhpcy50cmF2ZWxsaW5nRnJvbTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy50cmF2ZWxsaW5nVG8pIHtcclxuICAgICAgc2VhcmNoUXVlcnkudHJhdmVsbGluZ1RvID0gdGhpcy50cmF2ZWxsaW5nVG87XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2VhcmNoUXVlcnk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhcnRSZWNlbnRTZWFyY2gocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcclxuICAgIHRoaXMuam91cm5leVR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5qb3VybmV5VHlwZTtcclxuICAgIHRoaXMuaXJsQ2xhc3MgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5jbGFzcztcclxuICAgIHRoaXMudHJhdmVsbGluZ1RvID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudHJhdmVsbGluZ1RvO1xyXG4gICAgdGhpcy50cmF2ZWxsaW5nRnJvbSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRyYXZlbGxpbmdGcm9tO1xyXG5cclxuICAgIC8vIGdldCBvdXRCb3VuZERhdGVUaW1lLCBpbkJvdW5kRGF0ZVRpbWVcclxuICAgIHRoaXMub3V0Qm91bmREYXRlVGltZSA9IG1vbWVudChcclxuICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZVxyXG4gICAgKTtcclxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5qb3VybmV5VHlwZSA9PT0gSXJsSm91cm5leVR5cGUuUmV0dXJuSm91cm5leSkge1xyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IG1vbWVudChcclxuICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVPdXRib3VuZERhdGVUaW1lKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX291dGJvdW5kX2RhdGUgJiYgdGhpcy5fb3V0Ym91bmRfdGltZSkge1xyXG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KFxyXG4gICAgICAgIHRoaXMuX291dGJvdW5kX2RhdGUsXHJcbiAgICAgICAgdGhpcy5fb3V0Ym91bmRfdGltZVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5vdXRCb3VuZERhdGVUaW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcclxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlUmV0dXJuRGF0ZVRpbWUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fcmV0dXJuX2RhdGUgJiYgdGhpcy5fcmV0dXJuX3RpbWUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudChcclxuICAgICAgICB0aGlzLl9yZXR1cm5fZGF0ZSxcclxuICAgICAgICB0aGlzLl9yZXR1cm5fdGltZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmluQm91bmREYXRlVGltZSA9IHRpbWUuaXNWYWxpZCgpID8gdGltZSA6IG51bGw7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFF1ZXJ5KCk6IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzIHtcclxuICAgIC8vIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XHJcbiAgICB0aGlzLm5vT2ZBZHVsdHMgPSB0aGlzLnRyYXZlbGxlcnMuZmlsdGVyKFxyXG4gICAgICAodHJhdmVsbGVyOiBUcmF2ZWxsZXIpID0+XHJcbiAgICAgICAgdHJhdmVsbGVyLmFnZVR5cGUgPT09IGFnZXMuQWR1bHQgfHxcclxuICAgICAgICB0cmF2ZWxsZXIuYWdlVHlwZSA9PT0gYWdlcy5Zb3V0aCB8fFxyXG4gICAgICAgIHRyYXZlbGxlci5hZ2VUeXBlID09PSBhZ2VzLlNlbmlvclxyXG4gICAgKS5sZW5ndGg7XHJcbiAgICB0aGlzLm5vT2ZDaGlsZHJlbiA9IHRoaXMudHJhdmVsbGVycy5maWx0ZXIoXHJcbiAgICAgICh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4gdHJhdmVsbGVyLmFnZVR5cGUgPT09IGFnZXMuQ2hpbGRcclxuICAgICkubGVuZ3RoO1xyXG4gICAgaWYgKCF0aGlzLnN1cHBsaWVyICYmIHRoaXMudHJhdmVsbGluZ0Zyb20ubmFtZSkge1xyXG4gICAgICB0aGlzLnN1cHBsaWVyID0gdGhpcy50cmF2ZWxsaW5nRnJvbS5yYWlsc3RhdGlvbi5zdXBwbGllcjtcclxuICAgICAgdGhpcy5nZXRJcmxEaXNjb3VudENhcmRzKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pcmxEaXNjb3VudENhcmRzQXJyYXkgPSBkYXRhO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyA9IHtcclxuICAgICAgc3VwcGxpZXI6IHRoaXMuc3VwcGxpZXIsIC8vIElSTFN1cHBsaWVyIVxyXG4gICAgICBjb3VudHJ5Q29kZTogJ0dCJyxcclxuICAgICAgaXJsRGlzY291bnRDYXJkczogdGhpcy5kaXNjb3VudENhcmQgPyB0aGlzLmRpc2NvdW50Q2FyZC5pZCA6IG51bGwsXHJcbiAgICAgIGNsYXNzOiB0aGlzLmlybENsYXNzLCAvLyBJUkxDbGFzc1xyXG4gICAgICBvdXRib3VuZERlcGFydHVyZURhdGVUaW1lOiB0aGlzLnRlbXBQYXJhbXMub3V0Ym91bmREZXBhcnR1cmVEYXRlVGltZSxcclxuICAgICAgZGVwYXJ0dXJlTG9jYXRpb25JZDogdGhpcy5fdHJhdmVsbGluZ0Zyb20sXHJcbiAgICAgIGFycml2YWxMb2NhdGlvbklkOiB0aGlzLl90cmF2ZWxsaW5nVG8sXHJcbiAgICAgIGFkdWx0czogdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyxcclxuICAgICAgY2hpbGRyZW46IHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbixcclxuICAgICAgcmV0dXJuRGVwYXJ0dXJlRGF0ZVRpbWU6IHRoaXMudGVtcFBhcmFtcy5yZXR1cm5EZXBhcnR1cmVEYXRlVGltZSxcclxuICAgICAgam91cm5leVR5cGU6IHRoaXMuam91cm5leVR5cGVcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9PT0gMCkge1xyXG4gICAgICBxdWVyeS5jaGlsZHJlbiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnRlbXBQYXJhbXMuam91cm5leVR5cGUpIHtcclxuICAgICAgY2FzZSBJcmxKb3VybmV5VHlwZS5TaW5nbGVKb3VybmV5OlxyXG4gICAgICAgIHF1ZXJ5LnJldHVybkRlcGFydHVyZURhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8U2VhcmNoSXJsUXVlcnlWYXJpYWJsZXM+KHF1ZXJ5KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUZyb21QcmV2aW91c1NlYXJjaGVzKFxyXG4gICAgcHJldmlvdXNJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPlxyXG4gICk6IHZvaWQge31cclxuXHJcbiAgdXBkYXRlQ2FuQ29tYmluZSh0a3Q6IElybFRpY2tldE9wdGlvbik6IHZvaWQge1xyXG4gICAgKHRrdC5pZGVudGlmaWVycy5hbGxvd2VkV2l0aCB8fCBbXSkuZm9yRWFjaCgoYWxsb3dlZCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuX2NhbkNvbWJpbmVbdGt0LnR5cGVdW2FsbG93ZWQuam91cm5leUlkZW50aWZpZXJdKSB7XHJcbiAgICAgICAgdGhpcy5fY2FuQ29tYmluZVt0a3QudHlwZV1bYWxsb3dlZC5qb3VybmV5SWRlbnRpZmllcl0gPSBbXHJcbiAgICAgICAgICBhbGxvd2VkLmZhcmVJZGVudGlmaWVyXHJcbiAgICAgICAgXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9jYW5Db21iaW5lW3RrdC50eXBlXVthbGxvd2VkLmpvdXJuZXlJZGVudGlmaWVyXS5wdXNoKFxyXG4gICAgICAgICAgYWxsb3dlZC5mYXJlSWRlbnRpZmllclxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGVnc0Zyb21JcmxKb3VybmV5T3B0aW9uKHJhaWxKb3VybmV5T3B0aW9uOiBJcmxKb3VybmV5T3B0aW9uKTogYW55W10ge1xyXG4gICAgbGV0IGxlZ3M6IGFueVtdID0gW107XHJcbiAgICBpZiAocmFpbEpvdXJuZXlPcHRpb24/LnNlZ21lbnRzLmxlbmd0aCkge1xyXG4gICAgICBsZWdzID0gcmFpbEpvdXJuZXlPcHRpb24uc2VnbWVudHMubWFwKChzZWdtZW50OiBJcmxTZWdtZW50KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG9wZXJhdG9yOlxyXG4gICAgICAgICAgICBzZWdtZW50Lm9wZXJhdG9yIHx8IHJhaWxKb3VybmV5T3B0aW9uLnByb3ZpZGVyc1swXS5wcm92aWRlcklkLFxyXG4gICAgICAgICAgZGVwYXJ0dXJlRGF0ZVRpbWU6IHNlZ21lbnQuZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICBkZXBhcnR1cmVTdGF0aW9uTmFtZTogc2VnbWVudC5kZXBhcnQsXHJcbiAgICAgICAgICBhcnJpdmFsRGF0ZVRpbWU6IHNlZ21lbnQuYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IHNlZ21lbnQuYXJyaXZlXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGVncztcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkSXJsVGlja2V0T3B0aW9uKFxyXG4gICAgaXJsSm91cm5leU9wdGlvbjogSXJsSm91cm5leU9wdGlvbixcclxuICAgIGlybFRpY2tldE9wdGlvbjogSXJsVGlja2V0T3B0aW9uLFxyXG4gICAgcHJvdmlkZXJJbmRleDogbnVtYmVyXHJcbiAgKTogSXJsVGlja2V0T3B0aW9uIHtcclxuICAgIHJldHVybiBpcmxKb3VybmV5T3B0aW9uLnByb3ZpZGVyc1twcm92aWRlckluZGV4XS50aWNrZXRPcHRpb25zLmZpbmQoXHJcbiAgICAgICh0aWNrZXRPcHRpb24pID0+XHJcbiAgICAgICAgdGlja2V0T3B0aW9uLnR5cGUgPT09IGlybFRpY2tldE9wdGlvbi50eXBlICYmXHJcbiAgICAgICAgKHRpY2tldE9wdGlvbi5wcmljZSA9PT0gaXJsVGlja2V0T3B0aW9uLnByaWNlIHx8XHJcbiAgICAgICAgICB0aWNrZXRPcHRpb24uaWRlbnRpZmllcnMuZmFyZUlkZW50aWZpZXIgPT09XHJcbiAgICAgICAgICAgIGlybFRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllcilcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGRTaW5nbGVKb3VybmV5VG9CYXNrZXQoXHJcbiAgICBzZXJ2aWNlSWQ6IHN0cmluZyxcclxuICAgIGlybFF1ZXJ5OiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyxcclxuICAgIG91dGJvdW5kOiBJcmxUaWNrZXRPcHRpb24sXHJcbiAgICBpcmxKb3VybmV5T3B0aW9uOiBJcmxKb3VybmV5T3B0aW9uXHJcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAvLyAgIGNvbnNvbGUubG9nKHNlcnZpY2VJZCxyYWlsUXVlcnksaXJsSm91cm5leU9wdGlvbilcclxuICAgIC8vICAgLy8gaWYgKGlybEpvdXJuZXlPcHRpb24udW5zZWxsYWJsZSkge1xyXG4gICAgLy8gICAvLyAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgLy8gICAvLyB9XHJcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID1cclxuICAgICAgYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcclxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcclxuICAgIGlmIChiYXNrZXQpIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24gPSB0aGlzLmdldFNlbGVjdGVkSXJsVGlja2V0T3B0aW9uKFxyXG4gICAgICAgIGlybEpvdXJuZXlPcHRpb24sXHJcbiAgICAgICAgb3V0Ym91bmQsXHJcbiAgICAgICAgMFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBsZWdzID0gdGhpcy5nZXRMZWdzRnJvbUlybEpvdXJuZXlPcHRpb24oaXJsSm91cm5leU9wdGlvbik7XHJcbiAgICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKGlybEpvdXJuZXlPcHRpb24pO1xyXG4gICAgICAvLyBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5wcm92aWRlcjtcclxuICAgICAgY29uc3QgYmFza2V0SXRlbSA9IHtcclxuICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcclxuICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlSWQsXHJcbiAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICBvdXR3YXJkRGV0YWlsOiB7XHJcbiAgICAgICAgICAgIGFycml2YWxEYXRlVGltZTogaXJsSm91cm5leU9wdGlvbi5hcnJpdmVEYXRlVGltZSxcclxuICAgICAgICAgICAgYXJyaXZhbFN0YXRpb25OYW1lOiBpcmxKb3VybmV5T3B0aW9uLnRvLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbkNvZGU6IGlybEpvdXJuZXlPcHRpb24udG9Db2RlLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogaXJsSm91cm5leU9wdGlvbi5kZXBhcnREYXRlVGltZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IGlybEpvdXJuZXlPcHRpb24uZnJvbSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbkNvZGU6IGlybEpvdXJuZXlPcHRpb24uZnJvbUNvZGUsXHJcbiAgICAgICAgICAgIHN1cHBsaWVyVGlja2V0czogW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN1cHBsaWVyTmFtZTogaXJsSm91cm5leU9wdGlvbi5wcm92aWRlcnNbMF0ubmFtZSxcclxuICAgICAgICAgICAgICAgIHRpY2tldERlc2NyaXB0aW9uOiBzZWxlY3RlZElybFRpY2tldE9wdGlvbi50eXBlLFxyXG4gICAgICAgICAgICAgICAgcHJpY2U6IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uLnByaWNlLFxyXG4gICAgICAgICAgICAgICAgbGVnc1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcjpcclxuICAgICAgICAgICAgaXJsSm91cm5leU9wdGlvbi5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgICAgICAgICBvdXRib3VuZDoge1xyXG4gICAgICAgICAgICBmYXJlSWRlbnRpZmllcnM6IFtcclxuICAgICAgICAgICAgICBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllclxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjpcclxuICAgICAgICAgICAgICBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5qb3VybmV5SWRlbnRpZmllclxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHN1cHBsaWVyOiBpcmxKb3VybmV5T3B0aW9uLnByb3ZpZGVyc1swXS5wcm92aWRlcklkLFxyXG4gICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkdWx0czogaXJsUXVlcnkuYWR1bHRzLFxyXG4gICAgICAgIHByaWNlOiBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5wcmljZSxcclxuICAgICAgICBjdXJyZW5jeTogc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24uY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICAgIHNlYXJjaFF1ZXJ5OiBpcmxRdWVyeSxcclxuICAgICAgICAvLyBjbzJQZXJJdGVtOiBpcmxKb3VybmV5T3B0aW9uLmNvMlBlckl0ZW0sXHJcbiAgICAgICAgLy8gY28yUGVyUGFzc2VuZ2VyOiBpcmxKb3VybmV5T3B0aW9uLmNvMlBlclBhc3NlbmdlcixcclxuICAgICAgICBvdXRib3VuZERhdGU6IGlybEpvdXJuZXlPcHRpb24uZGVwYXJ0RGF0ZVRpbWVcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXHJcbiAgICAgICAgYmFza2V0SXRlbSxcclxuICAgICAgICBpbnRCYXNrZXQsXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMudHJhdmVsbGVyc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGRSZXR1cm5Kb3VybmV5VG9CYXNrZXQoXHJcbiAgICBzZXJ2aWNlSWQ6IHN0cmluZyxcclxuICAgIGlybFF1ZXJ5OiBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyxcclxuICAgIGluYm91bmQ6IElybFRpY2tldE9wdGlvbixcclxuICAgIGluSm91cm5leU9wdGlvbjogSXJsSm91cm5leU9wdGlvblxyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3Qgb3V0Ym91bmQgPSB0aGlzLm91dGJvdW5kVGlja2V0O1xyXG4gICAgY29uc3Qgb3V0Sm91cm5leU9wdGlvbiA9IHRoaXMub3V0Ym91bmRKb3VybmV5T3B0aW9ucztcclxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPVxyXG4gICAgICBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xyXG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xyXG4gICAgaWYgKGJhc2tldCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZElybFRpY2tldE9wdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24oXHJcbiAgICAgICAgb3V0Sm91cm5leU9wdGlvbixcclxuICAgICAgICBvdXRib3VuZCxcclxuICAgICAgICAwXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IG91dGJvdW5kTGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21JcmxKb3VybmV5T3B0aW9uKG91dEpvdXJuZXlPcHRpb24pO1xyXG4gICAgICBjb25zdCBpbmJvdW5kTGVncyA9IHRoaXMuZ2V0TGVnc0Zyb21JcmxKb3VybmV5T3B0aW9uKGluSm91cm5leU9wdGlvbik7XHJcbiAgICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKG91dEpvdXJuZXlPcHRpb24pO1xyXG4gICAgICBjb25zdCBiYXNrZXRJdGVtID0ge1xyXG4gICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxyXG4gICAgICAgIHNlcnZpY2U6IHNlcnZpY2VJZCxcclxuICAgICAgICBkZXRhaWw6IHtcclxuICAgICAgICAgIG91dHdhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBvdXRKb3VybmV5T3B0aW9uLmFycml2ZURhdGVUaW1lLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbk5hbWU6IG91dEpvdXJuZXlPcHRpb24udG8sXHJcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uQ29kZTogb3V0Sm91cm5leU9wdGlvbi50b0NvZGUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25Db2RlOiBvdXRKb3VybmV5T3B0aW9uLmZyb21Db2RlLFxyXG4gICAgICAgICAgICBkZXBhcnR1cmVEYXRlVGltZTogb3V0Sm91cm5leU9wdGlvbi5kZXBhcnREYXRlVGltZSxcclxuICAgICAgICAgICAgZGVwYXJ0dXJlU3RhdGlvbk5hbWU6IG91dEpvdXJuZXlPcHRpb24uZnJvbSxcclxuICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3VwcGxpZXJOYW1lOiBvdXRKb3VybmV5T3B0aW9uLnByb3ZpZGVyc1swXS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdGlja2V0RGVzY3JpcHRpb246IHNlbGVjdGVkSXJsVGlja2V0T3B0aW9uLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBwcmljZTogc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24ucHJpY2UsXHJcbiAgICAgICAgICAgICAgICBsZWdzOiBvdXRib3VuZExlZ3NcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBpbndhcmREZXRhaWw6IHtcclxuICAgICAgICAgICAgYXJyaXZhbERhdGVUaW1lOiBpbkpvdXJuZXlPcHRpb24uYXJyaXZlRGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGFycml2YWxTdGF0aW9uTmFtZTogaW5Kb3VybmV5T3B0aW9uLnRvLFxyXG4gICAgICAgICAgICBhcnJpdmFsU3RhdGlvbkNvZGU6IGluSm91cm5leU9wdGlvbi50b0NvZGUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25Db2RlOiBpbkpvdXJuZXlPcHRpb24uZnJvbUNvZGUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZURhdGVUaW1lOiBpbkpvdXJuZXlPcHRpb24uZGVwYXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICAgIGRlcGFydHVyZVN0YXRpb25OYW1lOiBpbkpvdXJuZXlPcHRpb24uZnJvbSxcclxuICAgICAgICAgICAgc3VwcGxpZXJUaWNrZXRzOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3VwcGxpZXJOYW1lOiBpbkpvdXJuZXlPcHRpb24ucHJvdmlkZXJzWzBdLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB0aWNrZXREZXNjcmlwdGlvbjogc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24udHlwZSxcclxuICAgICAgICAgICAgICAgIGxlZ3M6IGluYm91bmRMZWdzXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHJhbnNhY3Rpb25JZGVudGlmaWVyOiBvdXRib3VuZC5pZGVudGlmaWVycy50cmFuc2FjdGlvbklkZW50aWZpZXIsXHJcbiAgICAgICAgICBvdXRib3VuZDoge1xyXG4gICAgICAgICAgICBmYXJlSWRlbnRpZmllcnM6IFtcclxuICAgICAgICAgICAgICBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5mYXJlSWRlbnRpZmllclxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBqb3VybmV5SWRlbnRpZmllcjpcclxuICAgICAgICAgICAgICBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5pZGVudGlmaWVycy5qb3VybmV5SWRlbnRpZmllclxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHN1cHBsaWVyOiBvdXRKb3VybmV5T3B0aW9uLnByb3ZpZGVyc1swXS5wcm92aWRlcklkLFxyXG4gICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkdWx0czogaXJsUXVlcnkuYWR1bHRzLFxyXG4gICAgICAgIHByaWNlOiBzZWxlY3RlZElybFRpY2tldE9wdGlvbi5wcmljZSxcclxuICAgICAgICBjdXJyZW5jeTogc2VsZWN0ZWRJcmxUaWNrZXRPcHRpb24uY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxyXG4gICAgICAgIHNlYXJjaFF1ZXJ5OiBpcmxRdWVyeSxcclxuICAgICAgICBvdXRib3VuZERhdGU6IG91dEpvdXJuZXlPcHRpb24uZGVwYXJ0RGF0ZVRpbWVcclxuICAgICAgICAvLyBjbzJQZXJJdGVtOiBvdXRib3VuZC5jbzJQZXJJdGVtLFxyXG4gICAgICAgIC8vIGNvMlBlclBhc3Nlbmdlcjogb3V0Ym91bmQuY28yUGVyUGFzc2VuZ2VyXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuZmlsdGVyU2VsZWN0ZWQoKTtcclxuICAgICAgcmV0dXJuIHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcclxuICAgICAgICBiYXNrZXRJdGVtLFxyXG4gICAgICAgIGludEJhc2tldCxcclxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IElybEpvdXJuZXlPcHRpb25zW10pOiBJQ2hlYXBlc3RQcmljZSB7XHJcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGN1cnJlbmN5ID1cclxuICAgICAgcmVzdWx0c1swXT8ub3V0Ym91bmRbMF0/LnByb3ZpZGVyc1swXT8uY2hlYXBlc3RUaWNrZXQ/LmN1cnJlbmN5O1xyXG4gICAgY29uc3QgcHJpY2UgPSB0aGlzLmZpbmRDaGVhcGVzdFRpY2tldChyZXN1bHRzKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGFtb3VudDogcHJpY2UsXHJcbiAgICAgIGN1cnJlbmN5Q29kZTogY3VycmVuY3lcclxuICAgIH07XHJcbiAgfVxyXG4gIGZpbmRDaGVhcGVzdFRpY2tldChyZXN1bHRzOiBJcmxKb3VybmV5T3B0aW9uc1tdKTogbnVtYmVyIHtcclxuICAgIHRoaXMuX2NoZWFwZXN0Rmlyc3QgPSBudWxsO1xyXG4gICAgdGhpcy5fY2hlYXBlc3RTdGFuZGFyZCA9IG51bGw7XHJcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGNoZWFwZXN0QXJyOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICAgIHJlc3VsdHMubWFwKChyZXN1bHQpID0+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
|